From 1bc50cb62cba8537af30a66b297b30d5278511dc Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Wed, 21 Feb 2024 12:31:05 -0500 Subject: [PATCH] Remove prebuilt OpenSSL from source control. #11 --- .gitignore | 2 + .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 16 - .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 20 - .../usr/local/include/crypto/aes_platform.h | 514 -- .../arm64-v8a/usr/local/include/crypto/aria.h | 51 - .../arm64-v8a/usr/local/include/crypto/asn1.h | 153 - .../usr/local/include/crypto/asn1_dsa.h | 24 - .../usr/local/include/crypto/asn1err.h | 27 - .../usr/local/include/crypto/async.h | 19 - .../usr/local/include/crypto/asyncerr.h | 27 - .../usr/local/include/crypto/bioerr.h | 27 - .../arm64-v8a/usr/local/include/crypto/bn.h | 128 - .../usr/local/include/crypto/bn_conf.h | 29 - .../usr/local/include/crypto/bn_conf.h.in | 28 - .../usr/local/include/crypto/bn_dh.h | 43 - .../usr/local/include/crypto/bn_srp.h | 32 - .../usr/local/include/crypto/bnerr.h | 27 - .../usr/local/include/crypto/buffererr.h | 27 - .../usr/local/include/crypto/chacha.h | 43 - .../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 | 48 - .../usr/local/include/crypto/crmferr.h | 30 - .../usr/local/include/crypto/cryptlib.h | 39 - .../usr/local/include/crypto/cryptoerr.h | 27 - .../usr/local/include/crypto/cterr.h | 30 - .../usr/local/include/crypto/ctype.h | 86 - .../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 | 51 - .../usr/local/include/crypto/dsaerr.h | 30 - .../usr/local/include/crypto/dso_conf.h | 18 - .../usr/local/include/crypto/dso_conf.h.in | 33 - .../arm64-v8a/usr/local/include/crypto/ec.h | 106 - .../usr/local/include/crypto/ecerr.h | 30 - .../arm64-v8a/usr/local/include/crypto/ecx.h | 158 - .../usr/local/include/crypto/encoder.h | 20 - .../usr/local/include/crypto/encodererr.h | 27 - .../usr/local/include/crypto/engine.h | 20 - .../usr/local/include/crypto/engineerr.h | 30 - .../arm64-v8a/usr/local/include/crypto/err.h | 20 - .../arm64-v8a/usr/local/include/crypto/ess.h | 76 - .../usr/local/include/crypto/esserr.h | 27 - .../arm64-v8a/usr/local/include/crypto/evp.h | 970 --- .../usr/local/include/crypto/evperr.h | 27 - .../usr/local/include/crypto/httperr.h | 27 - .../usr/local/include/crypto/lhash.h | 16 - .../usr/local/include/crypto/md32_common.h | 284 - .../usr/local/include/crypto/modes.h | 236 - .../usr/local/include/crypto/objects.h | 12 - .../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 | 46 - .../usr/local/include/crypto/ppc_arch.h | 29 - .../usr/local/include/crypto/punycode.h | 25 - .../arm64-v8a/usr/local/include/crypto/rand.h | 154 - .../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 | 64 - .../arm64-v8a/usr/local/include/crypto/rsa.h | 132 - .../usr/local/include/crypto/rsaerr.h | 27 - .../usr/local/include/crypto/security_bits.h | 16 - .../arm64-v8a/usr/local/include/crypto/sha.h | 23 - .../usr/local/include/crypto/siphash.h | 50 - .../arm64-v8a/usr/local/include/crypto/siv.h | 33 - .../arm64-v8a/usr/local/include/crypto/sm2.h | 86 - .../usr/local/include/crypto/sm2err.h | 49 - .../arm64-v8a/usr/local/include/crypto/sm4.h | 38 - .../usr/local/include/crypto/sm4_platform.h | 111 - .../usr/local/include/crypto/sparc_arch.h | 122 - .../usr/local/include/crypto/sparse_array.h | 92 - .../usr/local/include/crypto/store.h | 23 - .../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 | 391 -- .../usr/local/include/crypto/x509err.h | 27 - .../usr/local/include/crypto/x509v3err.h | 27 - .../internal/__DECC_INCLUDE_EPILOGUE.H | 16 - .../internal/__DECC_INCLUDE_PROLOGUE.H | 20 - .../usr/local/include/internal/asn1.h | 18 - .../usr/local/include/internal/bio.h | 101 - .../usr/local/include/internal/bio_addr.h | 29 - .../usr/local/include/internal/bio_tfo.h | 151 - .../usr/local/include/internal/common.h | 217 - .../usr/local/include/internal/comp.h | 14 - .../usr/local/include/internal/conf.h | 31 - .../local/include/internal/constant_time.h | 421 -- .../usr/local/include/internal/core.h | 71 - .../usr/local/include/internal/cryptlib.h | 163 - .../usr/local/include/internal/dane.h | 104 - .../usr/local/include/internal/deprecated.h | 30 - .../usr/local/include/internal/der.h | 94 - .../include/internal/deterministic_nonce.h | 24 - .../usr/local/include/internal/dso.h | 164 - .../usr/local/include/internal/dsoerr.h | 48 - .../usr/local/include/internal/e_os.h | 384 -- .../usr/local/include/internal/endian.h | 51 - .../usr/local/include/internal/err.h | 16 - .../usr/local/include/internal/event_queue.h | 163 - .../usr/local/include/internal/ffc.h | 221 - .../usr/local/include/internal/hpke_util.h | 100 - .../usr/local/include/internal/ktls.h | 434 -- .../usr/local/include/internal/list.h | 169 - .../usr/local/include/internal/namemap.h | 41 - .../usr/local/include/internal/nelem.h | 15 - .../usr/local/include/internal/numbers.h | 110 - .../usr/local/include/internal/o_dir.h | 53 - .../usr/local/include/internal/packet.h | 939 --- .../usr/local/include/internal/packet_quic.h | 150 - .../local/include/internal/param_build_set.h | 51 - .../usr/local/include/internal/param_names.h | 376 -- .../local/include/internal/param_names.h.in | 18 - .../usr/local/include/internal/params.h | 38 - .../usr/local/include/internal/passphrase.h | 122 - .../local/include/internal/priority_queue.h | 88 - .../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/quic_ackm.h | 297 - .../usr/local/include/internal/quic_cc.h | 219 - .../usr/local/include/internal/quic_cfq.h | 154 - .../usr/local/include/internal/quic_channel.h | 429 -- .../usr/local/include/internal/quic_demux.h | 364 -- .../usr/local/include/internal/quic_error.h | 56 - .../usr/local/include/internal/quic_fc.h | 277 - .../usr/local/include/internal/quic_fifd.h | 80 - .../usr/local/include/internal/quic_reactor.h | 188 - .../local/include/internal/quic_record_rx.h | 569 -- .../local/include/internal/quic_record_tx.h | 383 -- .../local/include/internal/quic_record_util.h | 116 - .../local/include/internal/quic_rx_depack.h | 21 - .../usr/local/include/internal/quic_sf_list.h | 151 - .../usr/local/include/internal/quic_ssl.h | 132 - .../usr/local/include/internal/quic_statm.h | 40 - .../usr/local/include/internal/quic_stream.h | 429 -- .../local/include/internal/quic_stream_map.h | 878 --- .../include/internal/quic_thread_assist.h | 102 - .../usr/local/include/internal/quic_tls.h | 106 - .../usr/local/include/internal/quic_tserver.h | 220 - .../usr/local/include/internal/quic_txp.h | 209 - .../usr/local/include/internal/quic_txpim.h | 133 - .../usr/local/include/internal/quic_types.h | 116 - .../usr/local/include/internal/quic_vlint.h | 127 - .../usr/local/include/internal/quic_wire.h | 784 --- .../local/include/internal/quic_wire_pkt.h | 629 -- .../usr/local/include/internal/recordmethod.h | 339 - .../usr/local/include/internal/refcount.h | 291 - .../usr/local/include/internal/ring_buf.h | 277 - .../usr/local/include/internal/safe_math.h | 443 -- .../usr/local/include/internal/sha3.h | 54 - .../usr/local/include/internal/sizes.h | 22 - .../usr/local/include/internal/sm3.h | 39 - .../usr/local/include/internal/sockets.h | 217 - .../usr/local/include/internal/ssl.h | 24 - .../usr/local/include/internal/ssl3_cbc.h | 40 - .../usr/local/include/internal/sslconf.h | 21 - .../usr/local/include/internal/statem.h | 171 - .../usr/local/include/internal/symhacks.h | 27 - .../usr/local/include/internal/thread.h | 39 - .../usr/local/include/internal/thread_arch.h | 127 - .../usr/local/include/internal/thread_once.h | 151 - .../usr/local/include/internal/time.h | 242 - .../usr/local/include/internal/tlsgroups.h | 60 - .../usr/local/include/internal/tsan_assist.h | 153 - .../usr/local/include/internal/uint_set.h | 63 - .../usr/local/include/internal/unicode.h | 31 - .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 22 - .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 26 - .../arm64-v8a/usr/local/include/openssl/aes.h | 111 - .../usr/local/include/openssl/asn1.h | 1133 ---- .../usr/local/include/openssl/asn1.h.in | 966 --- .../usr/local/include/openssl/asn1_mac.h | 10 - .../usr/local/include/openssl/asn1err.h | 140 - .../usr/local/include/openssl/asn1t.h | 946 --- .../usr/local/include/openssl/asn1t.h.in | 923 --- .../usr/local/include/openssl/async.h | 104 - .../usr/local/include/openssl/asyncerr.h | 29 - .../arm64-v8a/usr/local/include/openssl/bio.h | 1010 --- .../usr/local/include/openssl/bio.h.in | 987 --- .../usr/local/include/openssl/bioerr.h | 72 - .../usr/local/include/openssl/blowfish.h | 78 - .../arm64-v8a/usr/local/include/openssl/bn.h | 590 -- .../usr/local/include/openssl/bnerr.h | 47 - .../usr/local/include/openssl/buffer.h | 62 - .../usr/local/include/openssl/buffererr.h | 25 - .../usr/local/include/openssl/camellia.h | 117 - .../usr/local/include/openssl/cast.h | 71 - .../usr/local/include/openssl/cmac.h | 52 - .../arm64-v8a/usr/local/include/openssl/cmp.h | 629 -- .../usr/local/include/openssl/cmp.h.in | 510 -- .../usr/local/include/openssl/cmp_util.h | 56 - .../usr/local/include/openssl/cmperr.h | 120 - .../arm64-v8a/usr/local/include/openssl/cms.h | 508 -- .../usr/local/include/openssl/cms.h.in | 410 -- .../usr/local/include/openssl/cmserr.h | 125 - .../usr/local/include/openssl/comp.h | 64 - .../usr/local/include/openssl/comperr.h | 38 - .../usr/local/include/openssl/conf.h | 214 - .../usr/local/include/openssl/conf.h.in | 177 - .../usr/local/include/openssl/conf_api.h | 46 - .../usr/local/include/openssl/conferr.h | 52 - .../usr/local/include/openssl/configuration.h | 281 - .../local/include/openssl/configuration.h.in | 75 - .../usr/local/include/openssl/conftypes.h | 44 - .../usr/local/include/openssl/core.h | 236 - .../usr/local/include/openssl/core_dispatch.h | 984 --- .../usr/local/include/openssl/core_names.h | 475 -- .../usr/local/include/openssl/core_names.h.in | 119 - .../usr/local/include/openssl/core_object.h | 41 - .../usr/local/include/openssl/crmf.h | 229 - .../usr/local/include/openssl/crmf.h.in | 182 - .../usr/local/include/openssl/crmferr.h | 50 - .../usr/local/include/openssl/crypto.h | 561 -- .../usr/local/include/openssl/crypto.h.in | 538 -- .../usr/local/include/openssl/cryptoerr.h | 55 - .../local/include/openssl/cryptoerr_legacy.h | 1466 ----- .../arm64-v8a/usr/local/include/openssl/ct.h | 573 -- .../usr/local/include/openssl/ct.h.in | 525 -- .../usr/local/include/openssl/cterr.h | 45 - .../usr/local/include/openssl/decoder.h | 133 - .../usr/local/include/openssl/decodererr.h | 28 - .../arm64-v8a/usr/local/include/openssl/des.h | 211 - .../arm64-v8a/usr/local/include/openssl/dh.h | 335 - .../usr/local/include/openssl/dherr.h | 59 - .../arm64-v8a/usr/local/include/openssl/dsa.h | 280 - .../usr/local/include/openssl/dsaerr.h | 44 - .../usr/local/include/openssl/dtls1.h | 57 - .../usr/local/include/openssl/e_os2.h | 308 - .../usr/local/include/openssl/e_ostime.h | 38 - .../usr/local/include/openssl/ebcdic.h | 39 - .../arm64-v8a/usr/local/include/openssl/ec.h | 1588 ----- .../usr/local/include/openssl/ecdh.h | 10 - .../usr/local/include/openssl/ecdsa.h | 10 - .../usr/local/include/openssl/ecerr.h | 104 - .../usr/local/include/openssl/encoder.h | 124 - .../usr/local/include/openssl/encodererr.h | 28 - .../usr/local/include/openssl/engine.h | 833 --- .../usr/local/include/openssl/engineerr.h | 63 - .../arm64-v8a/usr/local/include/openssl/err.h | 511 -- .../usr/local/include/openssl/err.h.in | 500 -- .../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 | 2181 ------- .../usr/local/include/openssl/evperr.h | 137 - .../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 | 62 - .../usr/local/include/openssl/hpke.h | 169 - .../usr/local/include/openssl/http.h | 113 - .../usr/local/include/openssl/httperr.h | 55 - .../usr/local/include/openssl/idea.h | 82 - .../arm64-v8a/usr/local/include/openssl/kdf.h | 138 - .../usr/local/include/openssl/kdferr.h | 16 - .../usr/local/include/openssl/lhash.h | 331 - .../usr/local/include/openssl/lhash.h.in | 306 - .../usr/local/include/openssl/macros.h | 326 - .../arm64-v8a/usr/local/include/openssl/md2.h | 56 - .../arm64-v8a/usr/local/include/openssl/md4.h | 63 - .../arm64-v8a/usr/local/include/openssl/md5.h | 62 - .../usr/local/include/openssl/mdc2.h | 55 - .../usr/local/include/openssl/modes.h | 219 - .../usr/local/include/openssl/obj_mac.h | 5802 ----------------- .../usr/local/include/openssl/objects.h | 183 - .../usr/local/include/openssl/objectserr.h | 28 - .../usr/local/include/openssl/ocsp.h | 483 -- .../usr/local/include/openssl/ocsp.h.in | 387 -- .../usr/local/include/openssl/ocsperr.h | 53 - .../usr/local/include/openssl/opensslconf.h | 17 - .../usr/local/include/openssl/opensslv.h | 114 - .../usr/local/include/openssl/opensslv.h.in | 113 - .../usr/local/include/openssl/ossl_typ.h | 16 - .../usr/local/include/openssl/param_build.h | 63 - .../usr/local/include/openssl/params.h | 160 - .../arm64-v8a/usr/local/include/openssl/pem.h | 542 -- .../usr/local/include/openssl/pem2.h | 19 - .../usr/local/include/openssl/pemerr.h | 58 - .../usr/local/include/openssl/pkcs12.h | 363 -- .../usr/local/include/openssl/pkcs12.h.in | 340 - .../usr/local/include/openssl/pkcs12err.h | 46 - .../usr/local/include/openssl/pkcs7.h | 430 -- .../usr/local/include/openssl/pkcs7.h.in | 359 - .../usr/local/include/openssl/pkcs7err.h | 63 - .../usr/local/include/openssl/prov_ssl.h | 38 - .../usr/local/include/openssl/proverr.h | 153 - .../usr/local/include/openssl/provider.h | 66 - .../usr/local/include/openssl/quic.h | 37 - .../usr/local/include/openssl/rand.h | 125 - .../usr/local/include/openssl/randerr.h | 69 - .../arm64-v8a/usr/local/include/openssl/rc2.h | 68 - .../arm64-v8a/usr/local/include/openssl/rc4.h | 47 - .../arm64-v8a/usr/local/include/openssl/rc5.h | 79 - .../usr/local/include/openssl/ripemd.h | 59 - .../arm64-v8a/usr/local/include/openssl/rsa.h | 615 -- .../usr/local/include/openssl/rsaerr.h | 107 - .../usr/local/include/openssl/safestack.h | 297 - .../usr/local/include/openssl/safestack.h.in | 227 - .../usr/local/include/openssl/seed.h | 113 - .../usr/local/include/openssl/self_test.h | 94 - .../arm64-v8a/usr/local/include/openssl/sha.h | 139 - .../arm64-v8a/usr/local/include/openssl/srp.h | 285 - .../usr/local/include/openssl/srp.h.in | 214 - .../usr/local/include/openssl/srtp.h | 68 - .../arm64-v8a/usr/local/include/openssl/ssl.h | 2765 -------- .../usr/local/include/openssl/ssl.h.in | 2693 -------- .../usr/local/include/openssl/ssl2.h | 30 - .../usr/local/include/openssl/ssl3.h | 357 - .../usr/local/include/openssl/sslerr.h | 368 -- .../usr/local/include/openssl/sslerr_legacy.h | 468 -- .../usr/local/include/openssl/stack.h | 90 - .../usr/local/include/openssl/store.h | 377 -- .../usr/local/include/openssl/storeerr.h | 49 - .../usr/local/include/openssl/symhacks.h | 39 - .../usr/local/include/openssl/thread.h | 31 - .../usr/local/include/openssl/tls1.h | 1210 ---- .../usr/local/include/openssl/trace.h | 320 - .../arm64-v8a/usr/local/include/openssl/ts.h | 505 -- .../usr/local/include/openssl/tserr.h | 67 - .../usr/local/include/openssl/txt_db.h | 63 - .../usr/local/include/openssl/types.h | 239 - .../arm64-v8a/usr/local/include/openssl/ui.h | 407 -- .../usr/local/include/openssl/ui.h.in | 384 -- .../usr/local/include/openssl/uierr.h | 38 - .../usr/local/include/openssl/whrlpool.h | 62 - .../usr/local/include/openssl/x509.h | 1286 ---- .../usr/local/include/openssl/x509.h.in | 1092 ---- .../usr/local/include/openssl/x509_vfy.h | 901 --- .../usr/local/include/openssl/x509_vfy.h.in | 804 --- .../usr/local/include/openssl/x509err.h | 69 - .../usr/local/include/openssl/x509v3.h | 1454 ----- .../usr/local/include/openssl/x509v3.h.in | 1021 --- .../usr/local/include/openssl/x509v3err.h | 96 - .../arm64-v8a/usr/local/lib/libcrypto.a | Bin 8633542 -> 0 bytes .../android/arm64-v8a/usr/local/lib/libssl.a | Bin 1240360 -> 0 bytes .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 16 - .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 20 - .../usr/local/include/crypto/aes_platform.h | 514 -- .../usr/local/include/crypto/aria.h | 51 - .../usr/local/include/crypto/asn1.h | 153 - .../usr/local/include/crypto/asn1_dsa.h | 24 - .../usr/local/include/crypto/asn1err.h | 27 - .../usr/local/include/crypto/async.h | 19 - .../usr/local/include/crypto/asyncerr.h | 27 - .../usr/local/include/crypto/bioerr.h | 27 - .../armeabi-v7a/usr/local/include/crypto/bn.h | 128 - .../usr/local/include/crypto/bn_conf.h | 29 - .../usr/local/include/crypto/bn_conf.h.in | 28 - .../usr/local/include/crypto/bn_dh.h | 43 - .../usr/local/include/crypto/bn_srp.h | 32 - .../usr/local/include/crypto/bnerr.h | 27 - .../usr/local/include/crypto/buffererr.h | 27 - .../usr/local/include/crypto/chacha.h | 43 - .../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 | 48 - .../usr/local/include/crypto/crmferr.h | 30 - .../usr/local/include/crypto/cryptlib.h | 39 - .../usr/local/include/crypto/cryptoerr.h | 27 - .../usr/local/include/crypto/cterr.h | 30 - .../usr/local/include/crypto/ctype.h | 86 - .../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 | 51 - .../usr/local/include/crypto/dsaerr.h | 30 - .../usr/local/include/crypto/dso_conf.h | 18 - .../usr/local/include/crypto/dso_conf.h.in | 33 - .../armeabi-v7a/usr/local/include/crypto/ec.h | 106 - .../usr/local/include/crypto/ecerr.h | 30 - .../usr/local/include/crypto/ecx.h | 158 - .../usr/local/include/crypto/encoder.h | 20 - .../usr/local/include/crypto/encodererr.h | 27 - .../usr/local/include/crypto/engine.h | 20 - .../usr/local/include/crypto/engineerr.h | 30 - .../usr/local/include/crypto/err.h | 20 - .../usr/local/include/crypto/ess.h | 76 - .../usr/local/include/crypto/esserr.h | 27 - .../usr/local/include/crypto/evp.h | 970 --- .../usr/local/include/crypto/evperr.h | 27 - .../usr/local/include/crypto/httperr.h | 27 - .../usr/local/include/crypto/lhash.h | 16 - .../usr/local/include/crypto/md32_common.h | 284 - .../usr/local/include/crypto/modes.h | 236 - .../usr/local/include/crypto/objects.h | 12 - .../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 | 46 - .../usr/local/include/crypto/ppc_arch.h | 29 - .../usr/local/include/crypto/punycode.h | 25 - .../usr/local/include/crypto/rand.h | 154 - .../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 | 64 - .../usr/local/include/crypto/rsa.h | 132 - .../usr/local/include/crypto/rsaerr.h | 27 - .../usr/local/include/crypto/security_bits.h | 16 - .../usr/local/include/crypto/sha.h | 23 - .../usr/local/include/crypto/siphash.h | 50 - .../usr/local/include/crypto/siv.h | 33 - .../usr/local/include/crypto/sm2.h | 86 - .../usr/local/include/crypto/sm2err.h | 49 - .../usr/local/include/crypto/sm4.h | 38 - .../usr/local/include/crypto/sm4_platform.h | 111 - .../usr/local/include/crypto/sparc_arch.h | 122 - .../usr/local/include/crypto/sparse_array.h | 92 - .../usr/local/include/crypto/store.h | 23 - .../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 | 391 -- .../usr/local/include/crypto/x509err.h | 27 - .../usr/local/include/crypto/x509v3err.h | 27 - .../internal/__DECC_INCLUDE_EPILOGUE.H | 16 - .../internal/__DECC_INCLUDE_PROLOGUE.H | 20 - .../usr/local/include/internal/asn1.h | 18 - .../usr/local/include/internal/bio.h | 101 - .../usr/local/include/internal/bio_addr.h | 29 - .../usr/local/include/internal/bio_tfo.h | 151 - .../usr/local/include/internal/common.h | 217 - .../usr/local/include/internal/comp.h | 14 - .../usr/local/include/internal/conf.h | 31 - .../local/include/internal/constant_time.h | 421 -- .../usr/local/include/internal/core.h | 71 - .../usr/local/include/internal/cryptlib.h | 163 - .../usr/local/include/internal/dane.h | 104 - .../usr/local/include/internal/deprecated.h | 30 - .../usr/local/include/internal/der.h | 94 - .../include/internal/deterministic_nonce.h | 24 - .../usr/local/include/internal/dso.h | 164 - .../usr/local/include/internal/dsoerr.h | 48 - .../usr/local/include/internal/e_os.h | 384 -- .../usr/local/include/internal/endian.h | 51 - .../usr/local/include/internal/err.h | 16 - .../usr/local/include/internal/event_queue.h | 163 - .../usr/local/include/internal/ffc.h | 221 - .../usr/local/include/internal/hpke_util.h | 100 - .../usr/local/include/internal/ktls.h | 434 -- .../usr/local/include/internal/list.h | 169 - .../usr/local/include/internal/namemap.h | 41 - .../usr/local/include/internal/nelem.h | 15 - .../usr/local/include/internal/numbers.h | 110 - .../usr/local/include/internal/o_dir.h | 53 - .../usr/local/include/internal/packet.h | 939 --- .../usr/local/include/internal/packet_quic.h | 150 - .../local/include/internal/param_build_set.h | 51 - .../usr/local/include/internal/param_names.h | 376 -- .../local/include/internal/param_names.h.in | 18 - .../usr/local/include/internal/params.h | 38 - .../usr/local/include/internal/passphrase.h | 122 - .../local/include/internal/priority_queue.h | 88 - .../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/quic_ackm.h | 297 - .../usr/local/include/internal/quic_cc.h | 219 - .../usr/local/include/internal/quic_cfq.h | 154 - .../usr/local/include/internal/quic_channel.h | 429 -- .../usr/local/include/internal/quic_demux.h | 364 -- .../usr/local/include/internal/quic_error.h | 56 - .../usr/local/include/internal/quic_fc.h | 277 - .../usr/local/include/internal/quic_fifd.h | 80 - .../usr/local/include/internal/quic_reactor.h | 188 - .../local/include/internal/quic_record_rx.h | 569 -- .../local/include/internal/quic_record_tx.h | 383 -- .../local/include/internal/quic_record_util.h | 116 - .../local/include/internal/quic_rx_depack.h | 21 - .../usr/local/include/internal/quic_sf_list.h | 151 - .../usr/local/include/internal/quic_ssl.h | 132 - .../usr/local/include/internal/quic_statm.h | 40 - .../usr/local/include/internal/quic_stream.h | 429 -- .../local/include/internal/quic_stream_map.h | 878 --- .../include/internal/quic_thread_assist.h | 102 - .../usr/local/include/internal/quic_tls.h | 106 - .../usr/local/include/internal/quic_tserver.h | 220 - .../usr/local/include/internal/quic_txp.h | 209 - .../usr/local/include/internal/quic_txpim.h | 133 - .../usr/local/include/internal/quic_types.h | 116 - .../usr/local/include/internal/quic_vlint.h | 127 - .../usr/local/include/internal/quic_wire.h | 784 --- .../local/include/internal/quic_wire_pkt.h | 629 -- .../usr/local/include/internal/recordmethod.h | 339 - .../usr/local/include/internal/refcount.h | 291 - .../usr/local/include/internal/ring_buf.h | 277 - .../usr/local/include/internal/safe_math.h | 443 -- .../usr/local/include/internal/sha3.h | 54 - .../usr/local/include/internal/sizes.h | 22 - .../usr/local/include/internal/sm3.h | 39 - .../usr/local/include/internal/sockets.h | 217 - .../usr/local/include/internal/ssl.h | 24 - .../usr/local/include/internal/ssl3_cbc.h | 40 - .../usr/local/include/internal/sslconf.h | 21 - .../usr/local/include/internal/statem.h | 171 - .../usr/local/include/internal/symhacks.h | 27 - .../usr/local/include/internal/thread.h | 39 - .../usr/local/include/internal/thread_arch.h | 127 - .../usr/local/include/internal/thread_once.h | 151 - .../usr/local/include/internal/time.h | 242 - .../usr/local/include/internal/tlsgroups.h | 60 - .../usr/local/include/internal/tsan_assist.h | 153 - .../usr/local/include/internal/uint_set.h | 63 - .../usr/local/include/internal/unicode.h | 31 - .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 22 - .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 26 - .../usr/local/include/openssl/aes.h | 111 - .../usr/local/include/openssl/asn1.h | 1133 ---- .../usr/local/include/openssl/asn1.h.in | 966 --- .../usr/local/include/openssl/asn1_mac.h | 10 - .../usr/local/include/openssl/asn1err.h | 140 - .../usr/local/include/openssl/asn1t.h | 946 --- .../usr/local/include/openssl/asn1t.h.in | 923 --- .../usr/local/include/openssl/async.h | 104 - .../usr/local/include/openssl/asyncerr.h | 29 - .../usr/local/include/openssl/bio.h | 1010 --- .../usr/local/include/openssl/bio.h.in | 987 --- .../usr/local/include/openssl/bioerr.h | 72 - .../usr/local/include/openssl/blowfish.h | 78 - .../usr/local/include/openssl/bn.h | 590 -- .../usr/local/include/openssl/bnerr.h | 47 - .../usr/local/include/openssl/buffer.h | 62 - .../usr/local/include/openssl/buffererr.h | 25 - .../usr/local/include/openssl/camellia.h | 117 - .../usr/local/include/openssl/cast.h | 71 - .../usr/local/include/openssl/cmac.h | 52 - .../usr/local/include/openssl/cmp.h | 629 -- .../usr/local/include/openssl/cmp.h.in | 510 -- .../usr/local/include/openssl/cmp_util.h | 56 - .../usr/local/include/openssl/cmperr.h | 120 - .../usr/local/include/openssl/cms.h | 508 -- .../usr/local/include/openssl/cms.h.in | 410 -- .../usr/local/include/openssl/cmserr.h | 125 - .../usr/local/include/openssl/comp.h | 64 - .../usr/local/include/openssl/comperr.h | 38 - .../usr/local/include/openssl/conf.h | 214 - .../usr/local/include/openssl/conf.h.in | 177 - .../usr/local/include/openssl/conf_api.h | 46 - .../usr/local/include/openssl/conferr.h | 52 - .../usr/local/include/openssl/configuration.h | 281 - .../local/include/openssl/configuration.h.in | 75 - .../usr/local/include/openssl/conftypes.h | 44 - .../usr/local/include/openssl/core.h | 236 - .../usr/local/include/openssl/core_dispatch.h | 984 --- .../usr/local/include/openssl/core_names.h | 475 -- .../usr/local/include/openssl/core_names.h.in | 119 - .../usr/local/include/openssl/core_object.h | 41 - .../usr/local/include/openssl/crmf.h | 229 - .../usr/local/include/openssl/crmf.h.in | 182 - .../usr/local/include/openssl/crmferr.h | 50 - .../usr/local/include/openssl/crypto.h | 561 -- .../usr/local/include/openssl/crypto.h.in | 538 -- .../usr/local/include/openssl/cryptoerr.h | 55 - .../local/include/openssl/cryptoerr_legacy.h | 1466 ----- .../usr/local/include/openssl/ct.h | 573 -- .../usr/local/include/openssl/ct.h.in | 525 -- .../usr/local/include/openssl/cterr.h | 45 - .../usr/local/include/openssl/decoder.h | 133 - .../usr/local/include/openssl/decodererr.h | 28 - .../usr/local/include/openssl/des.h | 211 - .../usr/local/include/openssl/dh.h | 335 - .../usr/local/include/openssl/dherr.h | 59 - .../usr/local/include/openssl/dsa.h | 280 - .../usr/local/include/openssl/dsaerr.h | 44 - .../usr/local/include/openssl/dtls1.h | 57 - .../usr/local/include/openssl/e_os2.h | 308 - .../usr/local/include/openssl/e_ostime.h | 38 - .../usr/local/include/openssl/ebcdic.h | 39 - .../usr/local/include/openssl/ec.h | 1588 ----- .../usr/local/include/openssl/ecdh.h | 10 - .../usr/local/include/openssl/ecdsa.h | 10 - .../usr/local/include/openssl/ecerr.h | 104 - .../usr/local/include/openssl/encoder.h | 124 - .../usr/local/include/openssl/encodererr.h | 28 - .../usr/local/include/openssl/engine.h | 833 --- .../usr/local/include/openssl/engineerr.h | 63 - .../usr/local/include/openssl/err.h | 511 -- .../usr/local/include/openssl/err.h.in | 500 -- .../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 | 2181 ------- .../usr/local/include/openssl/evperr.h | 137 - .../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 | 62 - .../usr/local/include/openssl/hpke.h | 169 - .../usr/local/include/openssl/http.h | 113 - .../usr/local/include/openssl/httperr.h | 55 - .../usr/local/include/openssl/idea.h | 82 - .../usr/local/include/openssl/kdf.h | 138 - .../usr/local/include/openssl/kdferr.h | 16 - .../usr/local/include/openssl/lhash.h | 331 - .../usr/local/include/openssl/lhash.h.in | 306 - .../usr/local/include/openssl/macros.h | 326 - .../usr/local/include/openssl/md2.h | 56 - .../usr/local/include/openssl/md4.h | 63 - .../usr/local/include/openssl/md5.h | 62 - .../usr/local/include/openssl/mdc2.h | 55 - .../usr/local/include/openssl/modes.h | 219 - .../usr/local/include/openssl/obj_mac.h | 5802 ----------------- .../usr/local/include/openssl/objects.h | 183 - .../usr/local/include/openssl/objectserr.h | 28 - .../usr/local/include/openssl/ocsp.h | 483 -- .../usr/local/include/openssl/ocsp.h.in | 387 -- .../usr/local/include/openssl/ocsperr.h | 53 - .../usr/local/include/openssl/opensslconf.h | 17 - .../usr/local/include/openssl/opensslv.h | 114 - .../usr/local/include/openssl/opensslv.h.in | 113 - .../usr/local/include/openssl/ossl_typ.h | 16 - .../usr/local/include/openssl/param_build.h | 63 - .../usr/local/include/openssl/params.h | 160 - .../usr/local/include/openssl/pem.h | 542 -- .../usr/local/include/openssl/pem2.h | 19 - .../usr/local/include/openssl/pemerr.h | 58 - .../usr/local/include/openssl/pkcs12.h | 363 -- .../usr/local/include/openssl/pkcs12.h.in | 340 - .../usr/local/include/openssl/pkcs12err.h | 46 - .../usr/local/include/openssl/pkcs7.h | 430 -- .../usr/local/include/openssl/pkcs7.h.in | 359 - .../usr/local/include/openssl/pkcs7err.h | 63 - .../usr/local/include/openssl/prov_ssl.h | 38 - .../usr/local/include/openssl/proverr.h | 153 - .../usr/local/include/openssl/provider.h | 66 - .../usr/local/include/openssl/quic.h | 37 - .../usr/local/include/openssl/rand.h | 125 - .../usr/local/include/openssl/randerr.h | 69 - .../usr/local/include/openssl/rc2.h | 68 - .../usr/local/include/openssl/rc4.h | 47 - .../usr/local/include/openssl/rc5.h | 79 - .../usr/local/include/openssl/ripemd.h | 59 - .../usr/local/include/openssl/rsa.h | 615 -- .../usr/local/include/openssl/rsaerr.h | 107 - .../usr/local/include/openssl/safestack.h | 297 - .../usr/local/include/openssl/safestack.h.in | 227 - .../usr/local/include/openssl/seed.h | 113 - .../usr/local/include/openssl/self_test.h | 94 - .../usr/local/include/openssl/sha.h | 139 - .../usr/local/include/openssl/srp.h | 285 - .../usr/local/include/openssl/srp.h.in | 214 - .../usr/local/include/openssl/srtp.h | 68 - .../usr/local/include/openssl/ssl.h | 2765 -------- .../usr/local/include/openssl/ssl.h.in | 2693 -------- .../usr/local/include/openssl/ssl2.h | 30 - .../usr/local/include/openssl/ssl3.h | 357 - .../usr/local/include/openssl/sslerr.h | 368 -- .../usr/local/include/openssl/sslerr_legacy.h | 468 -- .../usr/local/include/openssl/stack.h | 90 - .../usr/local/include/openssl/store.h | 377 -- .../usr/local/include/openssl/storeerr.h | 49 - .../usr/local/include/openssl/symhacks.h | 39 - .../usr/local/include/openssl/thread.h | 31 - .../usr/local/include/openssl/tls1.h | 1210 ---- .../usr/local/include/openssl/trace.h | 320 - .../usr/local/include/openssl/ts.h | 505 -- .../usr/local/include/openssl/tserr.h | 67 - .../usr/local/include/openssl/txt_db.h | 63 - .../usr/local/include/openssl/types.h | 239 - .../usr/local/include/openssl/ui.h | 407 -- .../usr/local/include/openssl/ui.h.in | 384 -- .../usr/local/include/openssl/uierr.h | 38 - .../usr/local/include/openssl/whrlpool.h | 62 - .../usr/local/include/openssl/x509.h | 1286 ---- .../usr/local/include/openssl/x509.h.in | 1092 ---- .../usr/local/include/openssl/x509_vfy.h | 901 --- .../usr/local/include/openssl/x509_vfy.h.in | 804 --- .../usr/local/include/openssl/x509err.h | 69 - .../usr/local/include/openssl/x509v3.h | 1454 ----- .../usr/local/include/openssl/x509v3.h.in | 1021 --- .../usr/local/include/openssl/x509v3err.h | 96 - .../armeabi-v7a/usr/local/lib/libcrypto.a | Bin 6918166 -> 0 bytes .../armeabi-v7a/usr/local/lib/libssl.a | Bin 1009932 -> 0 bytes .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 16 - .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 20 - .../usr/local/include/crypto/aes_platform.h | 514 -- .../x86/usr/local/include/crypto/aria.h | 51 - .../x86/usr/local/include/crypto/asn1.h | 153 - .../x86/usr/local/include/crypto/asn1_dsa.h | 24 - .../x86/usr/local/include/crypto/asn1err.h | 27 - .../x86/usr/local/include/crypto/async.h | 19 - .../x86/usr/local/include/crypto/asyncerr.h | 27 - .../x86/usr/local/include/crypto/bioerr.h | 27 - .../android/x86/usr/local/include/crypto/bn.h | 128 - .../x86/usr/local/include/crypto/bn_conf.h | 29 - .../x86/usr/local/include/crypto/bn_conf.h.in | 28 - .../x86/usr/local/include/crypto/bn_dh.h | 43 - .../x86/usr/local/include/crypto/bn_srp.h | 32 - .../x86/usr/local/include/crypto/bnerr.h | 27 - .../x86/usr/local/include/crypto/buffererr.h | 27 - .../x86/usr/local/include/crypto/chacha.h | 43 - .../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 | 48 - .../x86/usr/local/include/crypto/crmferr.h | 30 - .../x86/usr/local/include/crypto/cryptlib.h | 39 - .../x86/usr/local/include/crypto/cryptoerr.h | 27 - .../x86/usr/local/include/crypto/cterr.h | 30 - .../x86/usr/local/include/crypto/ctype.h | 86 - .../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 | 51 - .../x86/usr/local/include/crypto/dsaerr.h | 30 - .../x86/usr/local/include/crypto/dso_conf.h | 18 - .../usr/local/include/crypto/dso_conf.h.in | 33 - .../android/x86/usr/local/include/crypto/ec.h | 106 - .../x86/usr/local/include/crypto/ecerr.h | 30 - .../x86/usr/local/include/crypto/ecx.h | 158 - .../x86/usr/local/include/crypto/encoder.h | 20 - .../x86/usr/local/include/crypto/encodererr.h | 27 - .../x86/usr/local/include/crypto/engine.h | 20 - .../x86/usr/local/include/crypto/engineerr.h | 30 - .../x86/usr/local/include/crypto/err.h | 20 - .../x86/usr/local/include/crypto/ess.h | 76 - .../x86/usr/local/include/crypto/esserr.h | 27 - .../x86/usr/local/include/crypto/evp.h | 970 --- .../x86/usr/local/include/crypto/evperr.h | 27 - .../x86/usr/local/include/crypto/httperr.h | 27 - .../x86/usr/local/include/crypto/lhash.h | 16 - .../usr/local/include/crypto/md32_common.h | 284 - .../x86/usr/local/include/crypto/modes.h | 236 - .../x86/usr/local/include/crypto/objects.h | 12 - .../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 | 46 - .../x86/usr/local/include/crypto/ppc_arch.h | 29 - .../x86/usr/local/include/crypto/punycode.h | 25 - .../x86/usr/local/include/crypto/rand.h | 154 - .../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 | 64 - .../x86/usr/local/include/crypto/rsa.h | 132 - .../x86/usr/local/include/crypto/rsaerr.h | 27 - .../usr/local/include/crypto/security_bits.h | 16 - .../x86/usr/local/include/crypto/sha.h | 23 - .../x86/usr/local/include/crypto/siphash.h | 50 - .../x86/usr/local/include/crypto/siv.h | 33 - .../x86/usr/local/include/crypto/sm2.h | 86 - .../x86/usr/local/include/crypto/sm2err.h | 49 - .../x86/usr/local/include/crypto/sm4.h | 38 - .../usr/local/include/crypto/sm4_platform.h | 111 - .../x86/usr/local/include/crypto/sparc_arch.h | 122 - .../usr/local/include/crypto/sparse_array.h | 92 - .../x86/usr/local/include/crypto/store.h | 23 - .../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 | 391 -- .../x86/usr/local/include/crypto/x509err.h | 27 - .../x86/usr/local/include/crypto/x509v3err.h | 27 - .../internal/__DECC_INCLUDE_EPILOGUE.H | 16 - .../internal/__DECC_INCLUDE_PROLOGUE.H | 20 - .../x86/usr/local/include/internal/asn1.h | 18 - .../x86/usr/local/include/internal/bio.h | 101 - .../x86/usr/local/include/internal/bio_addr.h | 29 - .../x86/usr/local/include/internal/bio_tfo.h | 151 - .../x86/usr/local/include/internal/common.h | 217 - .../x86/usr/local/include/internal/comp.h | 14 - .../x86/usr/local/include/internal/conf.h | 31 - .../local/include/internal/constant_time.h | 421 -- .../x86/usr/local/include/internal/core.h | 71 - .../x86/usr/local/include/internal/cryptlib.h | 163 - .../x86/usr/local/include/internal/dane.h | 104 - .../usr/local/include/internal/deprecated.h | 30 - .../x86/usr/local/include/internal/der.h | 94 - .../include/internal/deterministic_nonce.h | 24 - .../x86/usr/local/include/internal/dso.h | 164 - .../x86/usr/local/include/internal/dsoerr.h | 48 - .../x86/usr/local/include/internal/e_os.h | 384 -- .../x86/usr/local/include/internal/endian.h | 51 - .../x86/usr/local/include/internal/err.h | 16 - .../usr/local/include/internal/event_queue.h | 163 - .../x86/usr/local/include/internal/ffc.h | 221 - .../usr/local/include/internal/hpke_util.h | 100 - .../x86/usr/local/include/internal/ktls.h | 434 -- .../x86/usr/local/include/internal/list.h | 169 - .../x86/usr/local/include/internal/namemap.h | 41 - .../x86/usr/local/include/internal/nelem.h | 15 - .../x86/usr/local/include/internal/numbers.h | 110 - .../x86/usr/local/include/internal/o_dir.h | 53 - .../x86/usr/local/include/internal/packet.h | 939 --- .../usr/local/include/internal/packet_quic.h | 150 - .../local/include/internal/param_build_set.h | 51 - .../usr/local/include/internal/param_names.h | 376 -- .../local/include/internal/param_names.h.in | 18 - .../x86/usr/local/include/internal/params.h | 38 - .../usr/local/include/internal/passphrase.h | 122 - .../local/include/internal/priority_queue.h | 88 - .../x86/usr/local/include/internal/property.h | 99 - .../usr/local/include/internal/propertyerr.h | 43 - .../x86/usr/local/include/internal/provider.h | 119 - .../usr/local/include/internal/quic_ackm.h | 297 - .../x86/usr/local/include/internal/quic_cc.h | 219 - .../x86/usr/local/include/internal/quic_cfq.h | 154 - .../usr/local/include/internal/quic_channel.h | 429 -- .../usr/local/include/internal/quic_demux.h | 364 -- .../usr/local/include/internal/quic_error.h | 56 - .../x86/usr/local/include/internal/quic_fc.h | 277 - .../usr/local/include/internal/quic_fifd.h | 80 - .../usr/local/include/internal/quic_reactor.h | 188 - .../local/include/internal/quic_record_rx.h | 569 -- .../local/include/internal/quic_record_tx.h | 383 -- .../local/include/internal/quic_record_util.h | 116 - .../local/include/internal/quic_rx_depack.h | 21 - .../usr/local/include/internal/quic_sf_list.h | 151 - .../x86/usr/local/include/internal/quic_ssl.h | 132 - .../usr/local/include/internal/quic_statm.h | 40 - .../usr/local/include/internal/quic_stream.h | 429 -- .../local/include/internal/quic_stream_map.h | 878 --- .../include/internal/quic_thread_assist.h | 102 - .../x86/usr/local/include/internal/quic_tls.h | 106 - .../usr/local/include/internal/quic_tserver.h | 220 - .../x86/usr/local/include/internal/quic_txp.h | 209 - .../usr/local/include/internal/quic_txpim.h | 133 - .../usr/local/include/internal/quic_types.h | 116 - .../usr/local/include/internal/quic_vlint.h | 127 - .../usr/local/include/internal/quic_wire.h | 784 --- .../local/include/internal/quic_wire_pkt.h | 629 -- .../usr/local/include/internal/recordmethod.h | 339 - .../x86/usr/local/include/internal/refcount.h | 291 - .../x86/usr/local/include/internal/ring_buf.h | 277 - .../usr/local/include/internal/safe_math.h | 443 -- .../x86/usr/local/include/internal/sha3.h | 54 - .../x86/usr/local/include/internal/sizes.h | 22 - .../x86/usr/local/include/internal/sm3.h | 39 - .../x86/usr/local/include/internal/sockets.h | 217 - .../x86/usr/local/include/internal/ssl.h | 24 - .../x86/usr/local/include/internal/ssl3_cbc.h | 40 - .../x86/usr/local/include/internal/sslconf.h | 21 - .../x86/usr/local/include/internal/statem.h | 171 - .../x86/usr/local/include/internal/symhacks.h | 27 - .../x86/usr/local/include/internal/thread.h | 39 - .../usr/local/include/internal/thread_arch.h | 127 - .../usr/local/include/internal/thread_once.h | 151 - .../x86/usr/local/include/internal/time.h | 242 - .../usr/local/include/internal/tlsgroups.h | 60 - .../usr/local/include/internal/tsan_assist.h | 153 - .../x86/usr/local/include/internal/uint_set.h | 63 - .../x86/usr/local/include/internal/unicode.h | 31 - .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 22 - .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 26 - .../x86/usr/local/include/openssl/aes.h | 111 - .../x86/usr/local/include/openssl/asn1.h | 1133 ---- .../x86/usr/local/include/openssl/asn1.h.in | 966 --- .../x86/usr/local/include/openssl/asn1_mac.h | 10 - .../x86/usr/local/include/openssl/asn1err.h | 140 - .../x86/usr/local/include/openssl/asn1t.h | 946 --- .../x86/usr/local/include/openssl/asn1t.h.in | 923 --- .../x86/usr/local/include/openssl/async.h | 104 - .../x86/usr/local/include/openssl/asyncerr.h | 29 - .../x86/usr/local/include/openssl/bio.h | 1010 --- .../x86/usr/local/include/openssl/bio.h.in | 987 --- .../x86/usr/local/include/openssl/bioerr.h | 72 - .../x86/usr/local/include/openssl/blowfish.h | 78 - .../x86/usr/local/include/openssl/bn.h | 590 -- .../x86/usr/local/include/openssl/bnerr.h | 47 - .../x86/usr/local/include/openssl/buffer.h | 62 - .../x86/usr/local/include/openssl/buffererr.h | 25 - .../x86/usr/local/include/openssl/camellia.h | 117 - .../x86/usr/local/include/openssl/cast.h | 71 - .../x86/usr/local/include/openssl/cmac.h | 52 - .../x86/usr/local/include/openssl/cmp.h | 629 -- .../x86/usr/local/include/openssl/cmp.h.in | 510 -- .../x86/usr/local/include/openssl/cmp_util.h | 56 - .../x86/usr/local/include/openssl/cmperr.h | 120 - .../x86/usr/local/include/openssl/cms.h | 508 -- .../x86/usr/local/include/openssl/cms.h.in | 410 -- .../x86/usr/local/include/openssl/cmserr.h | 125 - .../x86/usr/local/include/openssl/comp.h | 64 - .../x86/usr/local/include/openssl/comperr.h | 38 - .../x86/usr/local/include/openssl/conf.h | 214 - .../x86/usr/local/include/openssl/conf.h.in | 177 - .../x86/usr/local/include/openssl/conf_api.h | 46 - .../x86/usr/local/include/openssl/conferr.h | 52 - .../usr/local/include/openssl/configuration.h | 281 - .../local/include/openssl/configuration.h.in | 75 - .../x86/usr/local/include/openssl/conftypes.h | 44 - .../x86/usr/local/include/openssl/core.h | 236 - .../usr/local/include/openssl/core_dispatch.h | 984 --- .../usr/local/include/openssl/core_names.h | 475 -- .../usr/local/include/openssl/core_names.h.in | 119 - .../usr/local/include/openssl/core_object.h | 41 - .../x86/usr/local/include/openssl/crmf.h | 229 - .../x86/usr/local/include/openssl/crmf.h.in | 182 - .../x86/usr/local/include/openssl/crmferr.h | 50 - .../x86/usr/local/include/openssl/crypto.h | 561 -- .../x86/usr/local/include/openssl/crypto.h.in | 538 -- .../x86/usr/local/include/openssl/cryptoerr.h | 55 - .../local/include/openssl/cryptoerr_legacy.h | 1466 ----- .../x86/usr/local/include/openssl/ct.h | 573 -- .../x86/usr/local/include/openssl/ct.h.in | 525 -- .../x86/usr/local/include/openssl/cterr.h | 45 - .../x86/usr/local/include/openssl/decoder.h | 133 - .../usr/local/include/openssl/decodererr.h | 28 - .../x86/usr/local/include/openssl/des.h | 211 - .../x86/usr/local/include/openssl/dh.h | 335 - .../x86/usr/local/include/openssl/dherr.h | 59 - .../x86/usr/local/include/openssl/dsa.h | 280 - .../x86/usr/local/include/openssl/dsaerr.h | 44 - .../x86/usr/local/include/openssl/dtls1.h | 57 - .../x86/usr/local/include/openssl/e_os2.h | 308 - .../x86/usr/local/include/openssl/e_ostime.h | 38 - .../x86/usr/local/include/openssl/ebcdic.h | 39 - .../x86/usr/local/include/openssl/ec.h | 1588 ----- .../x86/usr/local/include/openssl/ecdh.h | 10 - .../x86/usr/local/include/openssl/ecdsa.h | 10 - .../x86/usr/local/include/openssl/ecerr.h | 104 - .../x86/usr/local/include/openssl/encoder.h | 124 - .../usr/local/include/openssl/encodererr.h | 28 - .../x86/usr/local/include/openssl/engine.h | 833 --- .../x86/usr/local/include/openssl/engineerr.h | 63 - .../x86/usr/local/include/openssl/err.h | 511 -- .../x86/usr/local/include/openssl/err.h.in | 500 -- .../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 | 2181 ------- .../x86/usr/local/include/openssl/evperr.h | 137 - .../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 | 62 - .../x86/usr/local/include/openssl/hpke.h | 169 - .../x86/usr/local/include/openssl/http.h | 113 - .../x86/usr/local/include/openssl/httperr.h | 55 - .../x86/usr/local/include/openssl/idea.h | 82 - .../x86/usr/local/include/openssl/kdf.h | 138 - .../x86/usr/local/include/openssl/kdferr.h | 16 - .../x86/usr/local/include/openssl/lhash.h | 331 - .../x86/usr/local/include/openssl/lhash.h.in | 306 - .../x86/usr/local/include/openssl/macros.h | 326 - .../x86/usr/local/include/openssl/md2.h | 56 - .../x86/usr/local/include/openssl/md4.h | 63 - .../x86/usr/local/include/openssl/md5.h | 62 - .../x86/usr/local/include/openssl/mdc2.h | 55 - .../x86/usr/local/include/openssl/modes.h | 219 - .../x86/usr/local/include/openssl/obj_mac.h | 5802 ----------------- .../x86/usr/local/include/openssl/objects.h | 183 - .../usr/local/include/openssl/objectserr.h | 28 - .../x86/usr/local/include/openssl/ocsp.h | 483 -- .../x86/usr/local/include/openssl/ocsp.h.in | 387 -- .../x86/usr/local/include/openssl/ocsperr.h | 53 - .../usr/local/include/openssl/opensslconf.h | 17 - .../x86/usr/local/include/openssl/opensslv.h | 114 - .../usr/local/include/openssl/opensslv.h.in | 113 - .../x86/usr/local/include/openssl/ossl_typ.h | 16 - .../usr/local/include/openssl/param_build.h | 63 - .../x86/usr/local/include/openssl/params.h | 160 - .../x86/usr/local/include/openssl/pem.h | 542 -- .../x86/usr/local/include/openssl/pem2.h | 19 - .../x86/usr/local/include/openssl/pemerr.h | 58 - .../x86/usr/local/include/openssl/pkcs12.h | 363 -- .../x86/usr/local/include/openssl/pkcs12.h.in | 340 - .../x86/usr/local/include/openssl/pkcs12err.h | 46 - .../x86/usr/local/include/openssl/pkcs7.h | 430 -- .../x86/usr/local/include/openssl/pkcs7.h.in | 359 - .../x86/usr/local/include/openssl/pkcs7err.h | 63 - .../x86/usr/local/include/openssl/prov_ssl.h | 38 - .../x86/usr/local/include/openssl/proverr.h | 153 - .../x86/usr/local/include/openssl/provider.h | 66 - .../x86/usr/local/include/openssl/quic.h | 37 - .../x86/usr/local/include/openssl/rand.h | 125 - .../x86/usr/local/include/openssl/randerr.h | 69 - .../x86/usr/local/include/openssl/rc2.h | 68 - .../x86/usr/local/include/openssl/rc4.h | 47 - .../x86/usr/local/include/openssl/rc5.h | 79 - .../x86/usr/local/include/openssl/ripemd.h | 59 - .../x86/usr/local/include/openssl/rsa.h | 615 -- .../x86/usr/local/include/openssl/rsaerr.h | 107 - .../x86/usr/local/include/openssl/safestack.h | 297 - .../usr/local/include/openssl/safestack.h.in | 227 - .../x86/usr/local/include/openssl/seed.h | 113 - .../x86/usr/local/include/openssl/self_test.h | 94 - .../x86/usr/local/include/openssl/sha.h | 139 - .../x86/usr/local/include/openssl/srp.h | 285 - .../x86/usr/local/include/openssl/srp.h.in | 214 - .../x86/usr/local/include/openssl/srtp.h | 68 - .../x86/usr/local/include/openssl/ssl.h | 2765 -------- .../x86/usr/local/include/openssl/ssl.h.in | 2693 -------- .../x86/usr/local/include/openssl/ssl2.h | 30 - .../x86/usr/local/include/openssl/ssl3.h | 357 - .../x86/usr/local/include/openssl/sslerr.h | 368 -- .../usr/local/include/openssl/sslerr_legacy.h | 468 -- .../x86/usr/local/include/openssl/stack.h | 90 - .../x86/usr/local/include/openssl/store.h | 377 -- .../x86/usr/local/include/openssl/storeerr.h | 49 - .../x86/usr/local/include/openssl/symhacks.h | 39 - .../x86/usr/local/include/openssl/thread.h | 31 - .../x86/usr/local/include/openssl/tls1.h | 1210 ---- .../x86/usr/local/include/openssl/trace.h | 320 - .../x86/usr/local/include/openssl/ts.h | 505 -- .../x86/usr/local/include/openssl/tserr.h | 67 - .../x86/usr/local/include/openssl/txt_db.h | 63 - .../x86/usr/local/include/openssl/types.h | 239 - .../x86/usr/local/include/openssl/ui.h | 407 -- .../x86/usr/local/include/openssl/ui.h.in | 384 -- .../x86/usr/local/include/openssl/uierr.h | 38 - .../x86/usr/local/include/openssl/whrlpool.h | 62 - .../x86/usr/local/include/openssl/x509.h | 1286 ---- .../x86/usr/local/include/openssl/x509.h.in | 1092 ---- .../x86/usr/local/include/openssl/x509_vfy.h | 901 --- .../usr/local/include/openssl/x509_vfy.h.in | 804 --- .../x86/usr/local/include/openssl/x509err.h | 69 - .../x86/usr/local/include/openssl/x509v3.h | 1454 ----- .../x86/usr/local/include/openssl/x509v3.h.in | 1021 --- .../x86/usr/local/include/openssl/x509v3err.h | 96 - .../android/x86/usr/local/lib/libcrypto.a | Bin 6379736 -> 0 bytes .../android/x86/usr/local/lib/libssl.a | Bin 958264 -> 0 bytes .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 16 - .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 20 - .../usr/local/include/crypto/aes_platform.h | 514 -- .../x86_64/usr/local/include/crypto/aria.h | 51 - .../x86_64/usr/local/include/crypto/asn1.h | 153 - .../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 | 19 - .../usr/local/include/crypto/asyncerr.h | 27 - .../x86_64/usr/local/include/crypto/bioerr.h | 27 - .../x86_64/usr/local/include/crypto/bn.h | 128 - .../x86_64/usr/local/include/crypto/bn_conf.h | 29 - .../usr/local/include/crypto/bn_conf.h.in | 28 - .../x86_64/usr/local/include/crypto/bn_dh.h | 43 - .../x86_64/usr/local/include/crypto/bn_srp.h | 32 - .../x86_64/usr/local/include/crypto/bnerr.h | 27 - .../usr/local/include/crypto/buffererr.h | 27 - .../x86_64/usr/local/include/crypto/chacha.h | 43 - .../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 | 48 - .../x86_64/usr/local/include/crypto/crmferr.h | 30 - .../usr/local/include/crypto/cryptlib.h | 39 - .../usr/local/include/crypto/cryptoerr.h | 27 - .../x86_64/usr/local/include/crypto/cterr.h | 30 - .../x86_64/usr/local/include/crypto/ctype.h | 86 - .../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 | 51 - .../x86_64/usr/local/include/crypto/dsaerr.h | 30 - .../usr/local/include/crypto/dso_conf.h | 18 - .../usr/local/include/crypto/dso_conf.h.in | 33 - .../x86_64/usr/local/include/crypto/ec.h | 106 - .../x86_64/usr/local/include/crypto/ecerr.h | 30 - .../x86_64/usr/local/include/crypto/ecx.h | 158 - .../x86_64/usr/local/include/crypto/encoder.h | 20 - .../usr/local/include/crypto/encodererr.h | 27 - .../x86_64/usr/local/include/crypto/engine.h | 20 - .../usr/local/include/crypto/engineerr.h | 30 - .../x86_64/usr/local/include/crypto/err.h | 20 - .../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 | 970 --- .../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 | 16 - .../usr/local/include/crypto/md32_common.h | 284 - .../x86_64/usr/local/include/crypto/modes.h | 236 - .../x86_64/usr/local/include/crypto/objects.h | 12 - .../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 | 46 - .../usr/local/include/crypto/ppc_arch.h | 29 - .../usr/local/include/crypto/punycode.h | 25 - .../x86_64/usr/local/include/crypto/rand.h | 154 - .../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 | 64 - .../x86_64/usr/local/include/crypto/rsa.h | 132 - .../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 | 23 - .../x86_64/usr/local/include/crypto/siphash.h | 50 - .../x86_64/usr/local/include/crypto/siv.h | 33 - .../x86_64/usr/local/include/crypto/sm2.h | 86 - .../x86_64/usr/local/include/crypto/sm2err.h | 49 - .../x86_64/usr/local/include/crypto/sm4.h | 38 - .../usr/local/include/crypto/sm4_platform.h | 111 - .../usr/local/include/crypto/sparc_arch.h | 122 - .../usr/local/include/crypto/sparse_array.h | 92 - .../x86_64/usr/local/include/crypto/store.h | 23 - .../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 | 391 -- .../x86_64/usr/local/include/crypto/x509err.h | 27 - .../usr/local/include/crypto/x509v3err.h | 27 - .../internal/__DECC_INCLUDE_EPILOGUE.H | 16 - .../internal/__DECC_INCLUDE_PROLOGUE.H | 20 - .../x86_64/usr/local/include/internal/asn1.h | 18 - .../x86_64/usr/local/include/internal/bio.h | 101 - .../usr/local/include/internal/bio_addr.h | 29 - .../usr/local/include/internal/bio_tfo.h | 151 - .../usr/local/include/internal/common.h | 217 - .../x86_64/usr/local/include/internal/comp.h | 14 - .../x86_64/usr/local/include/internal/conf.h | 31 - .../local/include/internal/constant_time.h | 421 -- .../x86_64/usr/local/include/internal/core.h | 71 - .../usr/local/include/internal/cryptlib.h | 163 - .../x86_64/usr/local/include/internal/dane.h | 104 - .../usr/local/include/internal/deprecated.h | 30 - .../x86_64/usr/local/include/internal/der.h | 94 - .../include/internal/deterministic_nonce.h | 24 - .../x86_64/usr/local/include/internal/dso.h | 164 - .../usr/local/include/internal/dsoerr.h | 48 - .../x86_64/usr/local/include/internal/e_os.h | 384 -- .../usr/local/include/internal/endian.h | 51 - .../x86_64/usr/local/include/internal/err.h | 16 - .../usr/local/include/internal/event_queue.h | 163 - .../x86_64/usr/local/include/internal/ffc.h | 221 - .../usr/local/include/internal/hpke_util.h | 100 - .../x86_64/usr/local/include/internal/ktls.h | 434 -- .../x86_64/usr/local/include/internal/list.h | 169 - .../usr/local/include/internal/namemap.h | 41 - .../x86_64/usr/local/include/internal/nelem.h | 15 - .../usr/local/include/internal/numbers.h | 110 - .../x86_64/usr/local/include/internal/o_dir.h | 53 - .../usr/local/include/internal/packet.h | 939 --- .../usr/local/include/internal/packet_quic.h | 150 - .../local/include/internal/param_build_set.h | 51 - .../usr/local/include/internal/param_names.h | 376 -- .../local/include/internal/param_names.h.in | 18 - .../usr/local/include/internal/params.h | 38 - .../usr/local/include/internal/passphrase.h | 122 - .../local/include/internal/priority_queue.h | 88 - .../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/quic_ackm.h | 297 - .../usr/local/include/internal/quic_cc.h | 219 - .../usr/local/include/internal/quic_cfq.h | 154 - .../usr/local/include/internal/quic_channel.h | 429 -- .../usr/local/include/internal/quic_demux.h | 364 -- .../usr/local/include/internal/quic_error.h | 56 - .../usr/local/include/internal/quic_fc.h | 277 - .../usr/local/include/internal/quic_fifd.h | 80 - .../usr/local/include/internal/quic_reactor.h | 188 - .../local/include/internal/quic_record_rx.h | 569 -- .../local/include/internal/quic_record_tx.h | 383 -- .../local/include/internal/quic_record_util.h | 116 - .../local/include/internal/quic_rx_depack.h | 21 - .../usr/local/include/internal/quic_sf_list.h | 151 - .../usr/local/include/internal/quic_ssl.h | 132 - .../usr/local/include/internal/quic_statm.h | 40 - .../usr/local/include/internal/quic_stream.h | 429 -- .../local/include/internal/quic_stream_map.h | 878 --- .../include/internal/quic_thread_assist.h | 102 - .../usr/local/include/internal/quic_tls.h | 106 - .../usr/local/include/internal/quic_tserver.h | 220 - .../usr/local/include/internal/quic_txp.h | 209 - .../usr/local/include/internal/quic_txpim.h | 133 - .../usr/local/include/internal/quic_types.h | 116 - .../usr/local/include/internal/quic_vlint.h | 127 - .../usr/local/include/internal/quic_wire.h | 784 --- .../local/include/internal/quic_wire_pkt.h | 629 -- .../usr/local/include/internal/recordmethod.h | 339 - .../usr/local/include/internal/refcount.h | 291 - .../usr/local/include/internal/ring_buf.h | 277 - .../usr/local/include/internal/safe_math.h | 443 -- .../x86_64/usr/local/include/internal/sha3.h | 54 - .../x86_64/usr/local/include/internal/sizes.h | 22 - .../x86_64/usr/local/include/internal/sm3.h | 39 - .../usr/local/include/internal/sockets.h | 217 - .../x86_64/usr/local/include/internal/ssl.h | 24 - .../usr/local/include/internal/ssl3_cbc.h | 40 - .../usr/local/include/internal/sslconf.h | 21 - .../usr/local/include/internal/statem.h | 171 - .../usr/local/include/internal/symhacks.h | 27 - .../usr/local/include/internal/thread.h | 39 - .../usr/local/include/internal/thread_arch.h | 127 - .../usr/local/include/internal/thread_once.h | 151 - .../x86_64/usr/local/include/internal/time.h | 242 - .../usr/local/include/internal/tlsgroups.h | 60 - .../usr/local/include/internal/tsan_assist.h | 153 - .../usr/local/include/internal/uint_set.h | 63 - .../usr/local/include/internal/unicode.h | 31 - .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 22 - .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 26 - .../x86_64/usr/local/include/openssl/aes.h | 111 - .../x86_64/usr/local/include/openssl/asn1.h | 1133 ---- .../usr/local/include/openssl/asn1.h.in | 966 --- .../usr/local/include/openssl/asn1_mac.h | 10 - .../usr/local/include/openssl/asn1err.h | 140 - .../x86_64/usr/local/include/openssl/asn1t.h | 946 --- .../usr/local/include/openssl/asn1t.h.in | 923 --- .../x86_64/usr/local/include/openssl/async.h | 104 - .../usr/local/include/openssl/asyncerr.h | 29 - .../x86_64/usr/local/include/openssl/bio.h | 1010 --- .../x86_64/usr/local/include/openssl/bio.h.in | 987 --- .../x86_64/usr/local/include/openssl/bioerr.h | 72 - .../usr/local/include/openssl/blowfish.h | 78 - .../x86_64/usr/local/include/openssl/bn.h | 590 -- .../x86_64/usr/local/include/openssl/bnerr.h | 47 - .../x86_64/usr/local/include/openssl/buffer.h | 62 - .../usr/local/include/openssl/buffererr.h | 25 - .../usr/local/include/openssl/camellia.h | 117 - .../x86_64/usr/local/include/openssl/cast.h | 71 - .../x86_64/usr/local/include/openssl/cmac.h | 52 - .../x86_64/usr/local/include/openssl/cmp.h | 629 -- .../x86_64/usr/local/include/openssl/cmp.h.in | 510 -- .../usr/local/include/openssl/cmp_util.h | 56 - .../x86_64/usr/local/include/openssl/cmperr.h | 120 - .../x86_64/usr/local/include/openssl/cms.h | 508 -- .../x86_64/usr/local/include/openssl/cms.h.in | 410 -- .../x86_64/usr/local/include/openssl/cmserr.h | 125 - .../x86_64/usr/local/include/openssl/comp.h | 64 - .../usr/local/include/openssl/comperr.h | 38 - .../x86_64/usr/local/include/openssl/conf.h | 214 - .../usr/local/include/openssl/conf.h.in | 177 - .../usr/local/include/openssl/conf_api.h | 46 - .../usr/local/include/openssl/conferr.h | 52 - .../usr/local/include/openssl/configuration.h | 281 - .../local/include/openssl/configuration.h.in | 75 - .../usr/local/include/openssl/conftypes.h | 44 - .../x86_64/usr/local/include/openssl/core.h | 236 - .../usr/local/include/openssl/core_dispatch.h | 984 --- .../usr/local/include/openssl/core_names.h | 475 -- .../usr/local/include/openssl/core_names.h.in | 119 - .../usr/local/include/openssl/core_object.h | 41 - .../x86_64/usr/local/include/openssl/crmf.h | 229 - .../usr/local/include/openssl/crmf.h.in | 182 - .../usr/local/include/openssl/crmferr.h | 50 - .../x86_64/usr/local/include/openssl/crypto.h | 561 -- .../usr/local/include/openssl/crypto.h.in | 538 -- .../usr/local/include/openssl/cryptoerr.h | 55 - .../local/include/openssl/cryptoerr_legacy.h | 1466 ----- .../x86_64/usr/local/include/openssl/ct.h | 573 -- .../x86_64/usr/local/include/openssl/ct.h.in | 525 -- .../x86_64/usr/local/include/openssl/cterr.h | 45 - .../usr/local/include/openssl/decoder.h | 133 - .../usr/local/include/openssl/decodererr.h | 28 - .../x86_64/usr/local/include/openssl/des.h | 211 - .../x86_64/usr/local/include/openssl/dh.h | 335 - .../x86_64/usr/local/include/openssl/dherr.h | 59 - .../x86_64/usr/local/include/openssl/dsa.h | 280 - .../x86_64/usr/local/include/openssl/dsaerr.h | 44 - .../x86_64/usr/local/include/openssl/dtls1.h | 57 - .../x86_64/usr/local/include/openssl/e_os2.h | 308 - .../usr/local/include/openssl/e_ostime.h | 38 - .../x86_64/usr/local/include/openssl/ebcdic.h | 39 - .../x86_64/usr/local/include/openssl/ec.h | 1588 ----- .../x86_64/usr/local/include/openssl/ecdh.h | 10 - .../x86_64/usr/local/include/openssl/ecdsa.h | 10 - .../x86_64/usr/local/include/openssl/ecerr.h | 104 - .../usr/local/include/openssl/encoder.h | 124 - .../usr/local/include/openssl/encodererr.h | 28 - .../x86_64/usr/local/include/openssl/engine.h | 833 --- .../usr/local/include/openssl/engineerr.h | 63 - .../x86_64/usr/local/include/openssl/err.h | 511 -- .../x86_64/usr/local/include/openssl/err.h.in | 500 -- .../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 | 2181 ------- .../x86_64/usr/local/include/openssl/evperr.h | 137 - .../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 | 62 - .../x86_64/usr/local/include/openssl/hpke.h | 169 - .../x86_64/usr/local/include/openssl/http.h | 113 - .../usr/local/include/openssl/httperr.h | 55 - .../x86_64/usr/local/include/openssl/idea.h | 82 - .../x86_64/usr/local/include/openssl/kdf.h | 138 - .../x86_64/usr/local/include/openssl/kdferr.h | 16 - .../x86_64/usr/local/include/openssl/lhash.h | 331 - .../usr/local/include/openssl/lhash.h.in | 306 - .../x86_64/usr/local/include/openssl/macros.h | 326 - .../x86_64/usr/local/include/openssl/md2.h | 56 - .../x86_64/usr/local/include/openssl/md4.h | 63 - .../x86_64/usr/local/include/openssl/md5.h | 62 - .../x86_64/usr/local/include/openssl/mdc2.h | 55 - .../x86_64/usr/local/include/openssl/modes.h | 219 - .../usr/local/include/openssl/obj_mac.h | 5802 ----------------- .../usr/local/include/openssl/objects.h | 183 - .../usr/local/include/openssl/objectserr.h | 28 - .../x86_64/usr/local/include/openssl/ocsp.h | 483 -- .../usr/local/include/openssl/ocsp.h.in | 387 -- .../usr/local/include/openssl/ocsperr.h | 53 - .../usr/local/include/openssl/opensslconf.h | 17 - .../usr/local/include/openssl/opensslv.h | 114 - .../usr/local/include/openssl/opensslv.h.in | 113 - .../usr/local/include/openssl/ossl_typ.h | 16 - .../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 | 542 -- .../x86_64/usr/local/include/openssl/pem2.h | 19 - .../x86_64/usr/local/include/openssl/pemerr.h | 58 - .../x86_64/usr/local/include/openssl/pkcs12.h | 363 -- .../usr/local/include/openssl/pkcs12.h.in | 340 - .../usr/local/include/openssl/pkcs12err.h | 46 - .../x86_64/usr/local/include/openssl/pkcs7.h | 430 -- .../usr/local/include/openssl/pkcs7.h.in | 359 - .../usr/local/include/openssl/pkcs7err.h | 63 - .../usr/local/include/openssl/prov_ssl.h | 38 - .../usr/local/include/openssl/proverr.h | 153 - .../usr/local/include/openssl/provider.h | 66 - .../x86_64/usr/local/include/openssl/quic.h | 37 - .../x86_64/usr/local/include/openssl/rand.h | 125 - .../usr/local/include/openssl/randerr.h | 69 - .../x86_64/usr/local/include/openssl/rc2.h | 68 - .../x86_64/usr/local/include/openssl/rc4.h | 47 - .../x86_64/usr/local/include/openssl/rc5.h | 79 - .../x86_64/usr/local/include/openssl/ripemd.h | 59 - .../x86_64/usr/local/include/openssl/rsa.h | 615 -- .../x86_64/usr/local/include/openssl/rsaerr.h | 107 - .../usr/local/include/openssl/safestack.h | 297 - .../usr/local/include/openssl/safestack.h.in | 227 - .../x86_64/usr/local/include/openssl/seed.h | 113 - .../usr/local/include/openssl/self_test.h | 94 - .../x86_64/usr/local/include/openssl/sha.h | 139 - .../x86_64/usr/local/include/openssl/srp.h | 285 - .../x86_64/usr/local/include/openssl/srp.h.in | 214 - .../x86_64/usr/local/include/openssl/srtp.h | 68 - .../x86_64/usr/local/include/openssl/ssl.h | 2765 -------- .../x86_64/usr/local/include/openssl/ssl.h.in | 2693 -------- .../x86_64/usr/local/include/openssl/ssl2.h | 30 - .../x86_64/usr/local/include/openssl/ssl3.h | 357 - .../x86_64/usr/local/include/openssl/sslerr.h | 368 -- .../usr/local/include/openssl/sslerr_legacy.h | 468 -- .../x86_64/usr/local/include/openssl/stack.h | 90 - .../x86_64/usr/local/include/openssl/store.h | 377 -- .../usr/local/include/openssl/storeerr.h | 49 - .../usr/local/include/openssl/symhacks.h | 39 - .../x86_64/usr/local/include/openssl/thread.h | 31 - .../x86_64/usr/local/include/openssl/tls1.h | 1210 ---- .../x86_64/usr/local/include/openssl/trace.h | 320 - .../x86_64/usr/local/include/openssl/ts.h | 505 -- .../x86_64/usr/local/include/openssl/tserr.h | 67 - .../x86_64/usr/local/include/openssl/txt_db.h | 63 - .../x86_64/usr/local/include/openssl/types.h | 239 - .../x86_64/usr/local/include/openssl/ui.h | 407 -- .../x86_64/usr/local/include/openssl/ui.h.in | 384 -- .../x86_64/usr/local/include/openssl/uierr.h | 38 - .../usr/local/include/openssl/whrlpool.h | 62 - .../x86_64/usr/local/include/openssl/x509.h | 1286 ---- .../usr/local/include/openssl/x509.h.in | 1092 ---- .../usr/local/include/openssl/x509_vfy.h | 901 --- .../usr/local/include/openssl/x509_vfy.h.in | 804 --- .../usr/local/include/openssl/x509err.h | 69 - .../x86_64/usr/local/include/openssl/x509v3.h | 1454 ----- .../usr/local/include/openssl/x509v3.h.in | 1021 --- .../usr/local/include/openssl/x509v3err.h | 96 - .../android/x86_64/usr/local/lib/libcrypto.a | Bin 8061580 -> 0 bytes .../android/x86_64/usr/local/lib/libssl.a | Bin 1191456 -> 0 bytes .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 16 - .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 20 - .../usr/local/include/crypto/aes_platform.h | 514 -- .../usr/local/include/crypto/aria.h | 51 - .../usr/local/include/crypto/asn1.h | 153 - .../usr/local/include/crypto/asn1_dsa.h | 24 - .../usr/local/include/crypto/asn1err.h | 27 - .../usr/local/include/crypto/async.h | 19 - .../usr/local/include/crypto/asyncerr.h | 27 - .../usr/local/include/crypto/bioerr.h | 27 - .../ios64-xcrun/usr/local/include/crypto/bn.h | 128 - .../usr/local/include/crypto/bn_conf.h | 29 - .../usr/local/include/crypto/bn_conf.h.in | 28 - .../usr/local/include/crypto/bn_dh.h | 43 - .../usr/local/include/crypto/bn_srp.h | 32 - .../usr/local/include/crypto/bnerr.h | 27 - .../usr/local/include/crypto/buffererr.h | 27 - .../usr/local/include/crypto/chacha.h | 43 - .../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 | 48 - .../usr/local/include/crypto/crmferr.h | 30 - .../usr/local/include/crypto/cryptlib.h | 39 - .../usr/local/include/crypto/cryptoerr.h | 27 - .../usr/local/include/crypto/cterr.h | 30 - .../usr/local/include/crypto/ctype.h | 86 - .../usr/local/include/crypto/decoder.h | 40 - .../usr/local/include/crypto/decodererr.h | 27 - .../usr/local/include/crypto/des_platform.h | 35 - .../ios64-xcrun/usr/local/include/crypto/dh.h | 62 - .../usr/local/include/crypto/dherr.h | 30 - .../usr/local/include/crypto/dsa.h | 51 - .../usr/local/include/crypto/dsaerr.h | 30 - .../usr/local/include/crypto/dso_conf.h | 19 - .../usr/local/include/crypto/dso_conf.h.in | 33 - .../ios64-xcrun/usr/local/include/crypto/ec.h | 106 - .../usr/local/include/crypto/ecerr.h | 30 - .../usr/local/include/crypto/ecx.h | 158 - .../usr/local/include/crypto/encoder.h | 20 - .../usr/local/include/crypto/encodererr.h | 27 - .../usr/local/include/crypto/engine.h | 20 - .../usr/local/include/crypto/engineerr.h | 30 - .../usr/local/include/crypto/err.h | 20 - .../usr/local/include/crypto/ess.h | 76 - .../usr/local/include/crypto/esserr.h | 27 - .../usr/local/include/crypto/evp.h | 970 --- .../usr/local/include/crypto/evperr.h | 27 - .../usr/local/include/crypto/httperr.h | 27 - .../usr/local/include/crypto/lhash.h | 16 - .../usr/local/include/crypto/md32_common.h | 284 - .../usr/local/include/crypto/modes.h | 236 - .../usr/local/include/crypto/objects.h | 12 - .../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 | 46 - .../usr/local/include/crypto/ppc_arch.h | 29 - .../usr/local/include/crypto/punycode.h | 25 - .../usr/local/include/crypto/rand.h | 154 - .../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 | 64 - .../usr/local/include/crypto/rsa.h | 132 - .../usr/local/include/crypto/rsaerr.h | 27 - .../usr/local/include/crypto/security_bits.h | 16 - .../usr/local/include/crypto/sha.h | 23 - .../usr/local/include/crypto/siphash.h | 50 - .../usr/local/include/crypto/siv.h | 33 - .../usr/local/include/crypto/sm2.h | 86 - .../usr/local/include/crypto/sm2err.h | 49 - .../usr/local/include/crypto/sm4.h | 38 - .../usr/local/include/crypto/sm4_platform.h | 111 - .../usr/local/include/crypto/sparc_arch.h | 122 - .../usr/local/include/crypto/sparse_array.h | 92 - .../usr/local/include/crypto/store.h | 23 - .../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 | 391 -- .../usr/local/include/crypto/x509err.h | 27 - .../usr/local/include/crypto/x509v3err.h | 27 - .../internal/__DECC_INCLUDE_EPILOGUE.H | 16 - .../internal/__DECC_INCLUDE_PROLOGUE.H | 20 - .../usr/local/include/internal/asn1.h | 18 - .../usr/local/include/internal/bio.h | 101 - .../usr/local/include/internal/bio_addr.h | 29 - .../usr/local/include/internal/bio_tfo.h | 151 - .../usr/local/include/internal/common.h | 217 - .../usr/local/include/internal/comp.h | 14 - .../usr/local/include/internal/conf.h | 31 - .../local/include/internal/constant_time.h | 421 -- .../usr/local/include/internal/core.h | 71 - .../usr/local/include/internal/cryptlib.h | 163 - .../usr/local/include/internal/dane.h | 104 - .../usr/local/include/internal/deprecated.h | 30 - .../usr/local/include/internal/der.h | 94 - .../include/internal/deterministic_nonce.h | 24 - .../usr/local/include/internal/dso.h | 164 - .../usr/local/include/internal/dsoerr.h | 48 - .../usr/local/include/internal/e_os.h | 384 -- .../usr/local/include/internal/endian.h | 51 - .../usr/local/include/internal/err.h | 16 - .../usr/local/include/internal/event_queue.h | 163 - .../usr/local/include/internal/ffc.h | 221 - .../usr/local/include/internal/hpke_util.h | 100 - .../usr/local/include/internal/ktls.h | 434 -- .../usr/local/include/internal/list.h | 169 - .../usr/local/include/internal/namemap.h | 41 - .../usr/local/include/internal/nelem.h | 15 - .../usr/local/include/internal/numbers.h | 110 - .../usr/local/include/internal/o_dir.h | 53 - .../usr/local/include/internal/packet.h | 939 --- .../usr/local/include/internal/packet_quic.h | 150 - .../local/include/internal/param_build_set.h | 51 - .../usr/local/include/internal/param_names.h | 376 -- .../local/include/internal/param_names.h.in | 18 - .../usr/local/include/internal/params.h | 38 - .../usr/local/include/internal/passphrase.h | 122 - .../local/include/internal/priority_queue.h | 88 - .../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/quic_ackm.h | 297 - .../usr/local/include/internal/quic_cc.h | 219 - .../usr/local/include/internal/quic_cfq.h | 154 - .../usr/local/include/internal/quic_channel.h | 429 -- .../usr/local/include/internal/quic_demux.h | 364 -- .../usr/local/include/internal/quic_error.h | 56 - .../usr/local/include/internal/quic_fc.h | 277 - .../usr/local/include/internal/quic_fifd.h | 80 - .../usr/local/include/internal/quic_reactor.h | 188 - .../local/include/internal/quic_record_rx.h | 569 -- .../local/include/internal/quic_record_tx.h | 383 -- .../local/include/internal/quic_record_util.h | 116 - .../local/include/internal/quic_rx_depack.h | 21 - .../usr/local/include/internal/quic_sf_list.h | 151 - .../usr/local/include/internal/quic_ssl.h | 132 - .../usr/local/include/internal/quic_statm.h | 40 - .../usr/local/include/internal/quic_stream.h | 429 -- .../local/include/internal/quic_stream_map.h | 878 --- .../include/internal/quic_thread_assist.h | 102 - .../usr/local/include/internal/quic_tls.h | 106 - .../usr/local/include/internal/quic_tserver.h | 220 - .../usr/local/include/internal/quic_txp.h | 209 - .../usr/local/include/internal/quic_txpim.h | 133 - .../usr/local/include/internal/quic_types.h | 116 - .../usr/local/include/internal/quic_vlint.h | 127 - .../usr/local/include/internal/quic_wire.h | 784 --- .../local/include/internal/quic_wire_pkt.h | 629 -- .../usr/local/include/internal/recordmethod.h | 339 - .../usr/local/include/internal/refcount.h | 291 - .../usr/local/include/internal/ring_buf.h | 277 - .../usr/local/include/internal/safe_math.h | 443 -- .../usr/local/include/internal/sha3.h | 54 - .../usr/local/include/internal/sizes.h | 22 - .../usr/local/include/internal/sm3.h | 39 - .../usr/local/include/internal/sockets.h | 217 - .../usr/local/include/internal/ssl.h | 24 - .../usr/local/include/internal/ssl3_cbc.h | 40 - .../usr/local/include/internal/sslconf.h | 21 - .../usr/local/include/internal/statem.h | 171 - .../usr/local/include/internal/symhacks.h | 27 - .../usr/local/include/internal/thread.h | 39 - .../usr/local/include/internal/thread_arch.h | 127 - .../usr/local/include/internal/thread_once.h | 151 - .../usr/local/include/internal/time.h | 242 - .../usr/local/include/internal/tlsgroups.h | 60 - .../usr/local/include/internal/tsan_assist.h | 153 - .../usr/local/include/internal/uint_set.h | 63 - .../usr/local/include/internal/unicode.h | 31 - .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 22 - .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 26 - .../usr/local/include/openssl/aes.h | 111 - .../usr/local/include/openssl/asn1.h | 1133 ---- .../usr/local/include/openssl/asn1.h.in | 966 --- .../usr/local/include/openssl/asn1_mac.h | 10 - .../usr/local/include/openssl/asn1err.h | 140 - .../usr/local/include/openssl/asn1t.h | 946 --- .../usr/local/include/openssl/asn1t.h.in | 923 --- .../usr/local/include/openssl/async.h | 104 - .../usr/local/include/openssl/asyncerr.h | 29 - .../usr/local/include/openssl/bio.h | 1010 --- .../usr/local/include/openssl/bio.h.in | 987 --- .../usr/local/include/openssl/bioerr.h | 72 - .../usr/local/include/openssl/blowfish.h | 78 - .../usr/local/include/openssl/bn.h | 590 -- .../usr/local/include/openssl/bnerr.h | 47 - .../usr/local/include/openssl/buffer.h | 62 - .../usr/local/include/openssl/buffererr.h | 25 - .../usr/local/include/openssl/camellia.h | 117 - .../usr/local/include/openssl/cast.h | 71 - .../usr/local/include/openssl/cmac.h | 52 - .../usr/local/include/openssl/cmp.h | 629 -- .../usr/local/include/openssl/cmp.h.in | 510 -- .../usr/local/include/openssl/cmp_util.h | 56 - .../usr/local/include/openssl/cmperr.h | 120 - .../usr/local/include/openssl/cms.h | 508 -- .../usr/local/include/openssl/cms.h.in | 410 -- .../usr/local/include/openssl/cmserr.h | 125 - .../usr/local/include/openssl/comp.h | 64 - .../usr/local/include/openssl/comperr.h | 38 - .../usr/local/include/openssl/conf.h | 214 - .../usr/local/include/openssl/conf.h.in | 177 - .../usr/local/include/openssl/conf_api.h | 46 - .../usr/local/include/openssl/conferr.h | 52 - .../usr/local/include/openssl/configuration.h | 179 - .../local/include/openssl/configuration.h.in | 75 - .../usr/local/include/openssl/conftypes.h | 44 - .../usr/local/include/openssl/core.h | 236 - .../usr/local/include/openssl/core_dispatch.h | 984 --- .../usr/local/include/openssl/core_names.h | 475 -- .../usr/local/include/openssl/core_names.h.in | 119 - .../usr/local/include/openssl/core_object.h | 41 - .../usr/local/include/openssl/crmf.h | 229 - .../usr/local/include/openssl/crmf.h.in | 182 - .../usr/local/include/openssl/crmferr.h | 50 - .../usr/local/include/openssl/crypto.h | 561 -- .../usr/local/include/openssl/crypto.h.in | 538 -- .../usr/local/include/openssl/cryptoerr.h | 55 - .../local/include/openssl/cryptoerr_legacy.h | 1466 ----- .../usr/local/include/openssl/ct.h | 573 -- .../usr/local/include/openssl/ct.h.in | 525 -- .../usr/local/include/openssl/cterr.h | 45 - .../usr/local/include/openssl/decoder.h | 133 - .../usr/local/include/openssl/decodererr.h | 28 - .../usr/local/include/openssl/des.h | 211 - .../usr/local/include/openssl/dh.h | 335 - .../usr/local/include/openssl/dherr.h | 59 - .../usr/local/include/openssl/dsa.h | 280 - .../usr/local/include/openssl/dsaerr.h | 44 - .../usr/local/include/openssl/dtls1.h | 57 - .../usr/local/include/openssl/e_os2.h | 308 - .../usr/local/include/openssl/e_ostime.h | 38 - .../usr/local/include/openssl/ebcdic.h | 39 - .../usr/local/include/openssl/ec.h | 1588 ----- .../usr/local/include/openssl/ecdh.h | 10 - .../usr/local/include/openssl/ecdsa.h | 10 - .../usr/local/include/openssl/ecerr.h | 104 - .../usr/local/include/openssl/encoder.h | 124 - .../usr/local/include/openssl/encodererr.h | 28 - .../usr/local/include/openssl/engine.h | 833 --- .../usr/local/include/openssl/engineerr.h | 63 - .../usr/local/include/openssl/err.h | 511 -- .../usr/local/include/openssl/err.h.in | 500 -- .../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 | 2181 ------- .../usr/local/include/openssl/evperr.h | 137 - .../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 | 62 - .../usr/local/include/openssl/hpke.h | 169 - .../usr/local/include/openssl/http.h | 113 - .../usr/local/include/openssl/httperr.h | 55 - .../usr/local/include/openssl/idea.h | 82 - .../usr/local/include/openssl/kdf.h | 138 - .../usr/local/include/openssl/kdferr.h | 16 - .../usr/local/include/openssl/lhash.h | 331 - .../usr/local/include/openssl/lhash.h.in | 306 - .../usr/local/include/openssl/macros.h | 326 - .../usr/local/include/openssl/md2.h | 56 - .../usr/local/include/openssl/md4.h | 63 - .../usr/local/include/openssl/md5.h | 62 - .../usr/local/include/openssl/mdc2.h | 55 - .../usr/local/include/openssl/modes.h | 219 - .../usr/local/include/openssl/obj_mac.h | 5802 ----------------- .../usr/local/include/openssl/objects.h | 183 - .../usr/local/include/openssl/objectserr.h | 28 - .../usr/local/include/openssl/ocsp.h | 483 -- .../usr/local/include/openssl/ocsp.h.in | 387 -- .../usr/local/include/openssl/ocsperr.h | 53 - .../usr/local/include/openssl/opensslconf.h | 17 - .../usr/local/include/openssl/opensslv.h | 114 - .../usr/local/include/openssl/opensslv.h.in | 113 - .../usr/local/include/openssl/ossl_typ.h | 16 - .../usr/local/include/openssl/param_build.h | 63 - .../usr/local/include/openssl/params.h | 160 - .../usr/local/include/openssl/pem.h | 542 -- .../usr/local/include/openssl/pem2.h | 19 - .../usr/local/include/openssl/pemerr.h | 58 - .../usr/local/include/openssl/pkcs12.h | 363 -- .../usr/local/include/openssl/pkcs12.h.in | 340 - .../usr/local/include/openssl/pkcs12err.h | 46 - .../usr/local/include/openssl/pkcs7.h | 430 -- .../usr/local/include/openssl/pkcs7.h.in | 359 - .../usr/local/include/openssl/pkcs7err.h | 63 - .../usr/local/include/openssl/prov_ssl.h | 38 - .../usr/local/include/openssl/proverr.h | 153 - .../usr/local/include/openssl/provider.h | 66 - .../usr/local/include/openssl/quic.h | 37 - .../usr/local/include/openssl/rand.h | 125 - .../usr/local/include/openssl/randerr.h | 69 - .../usr/local/include/openssl/rc2.h | 68 - .../usr/local/include/openssl/rc4.h | 47 - .../usr/local/include/openssl/rc5.h | 79 - .../usr/local/include/openssl/ripemd.h | 59 - .../usr/local/include/openssl/rsa.h | 615 -- .../usr/local/include/openssl/rsaerr.h | 107 - .../usr/local/include/openssl/safestack.h | 297 - .../usr/local/include/openssl/safestack.h.in | 227 - .../usr/local/include/openssl/seed.h | 113 - .../usr/local/include/openssl/self_test.h | 94 - .../usr/local/include/openssl/sha.h | 139 - .../usr/local/include/openssl/srp.h | 285 - .../usr/local/include/openssl/srp.h.in | 214 - .../usr/local/include/openssl/srtp.h | 68 - .../usr/local/include/openssl/ssl.h | 2765 -------- .../usr/local/include/openssl/ssl.h.in | 2693 -------- .../usr/local/include/openssl/ssl2.h | 30 - .../usr/local/include/openssl/ssl3.h | 357 - .../usr/local/include/openssl/sslerr.h | 368 -- .../usr/local/include/openssl/sslerr_legacy.h | 468 -- .../usr/local/include/openssl/stack.h | 90 - .../usr/local/include/openssl/store.h | 377 -- .../usr/local/include/openssl/storeerr.h | 49 - .../usr/local/include/openssl/symhacks.h | 39 - .../usr/local/include/openssl/thread.h | 31 - .../usr/local/include/openssl/tls1.h | 1210 ---- .../usr/local/include/openssl/trace.h | 320 - .../usr/local/include/openssl/ts.h | 505 -- .../usr/local/include/openssl/tserr.h | 67 - .../usr/local/include/openssl/txt_db.h | 63 - .../usr/local/include/openssl/types.h | 239 - .../usr/local/include/openssl/ui.h | 407 -- .../usr/local/include/openssl/ui.h.in | 384 -- .../usr/local/include/openssl/uierr.h | 38 - .../usr/local/include/openssl/whrlpool.h | 62 - .../usr/local/include/openssl/x509.h | 1286 ---- .../usr/local/include/openssl/x509.h.in | 1092 ---- .../usr/local/include/openssl/x509_vfy.h | 901 --- .../usr/local/include/openssl/x509_vfy.h.in | 804 --- .../usr/local/include/openssl/x509err.h | 69 - .../usr/local/include/openssl/x509v3.h | 1454 ----- .../usr/local/include/openssl/x509v3.h.in | 1021 --- .../usr/local/include/openssl/x509v3err.h | 96 - .../ios/ios64-xcrun/usr/local/lib/libcrypto.a | Bin 7672928 -> 0 bytes .../ios/ios64-xcrun/usr/local/lib/libssl.a | Bin 1416232 -> 0 bytes .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 16 - .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 20 - .../usr/local/include/crypto/aes_platform.h | 514 -- .../usr/local/include/crypto/aria.h | 51 - .../usr/local/include/crypto/asn1.h | 153 - .../usr/local/include/crypto/asn1_dsa.h | 24 - .../usr/local/include/crypto/asn1err.h | 27 - .../usr/local/include/crypto/async.h | 19 - .../usr/local/include/crypto/asyncerr.h | 27 - .../usr/local/include/crypto/bioerr.h | 27 - .../usr/local/include/crypto/bn.h | 128 - .../usr/local/include/crypto/bn_conf.h | 29 - .../usr/local/include/crypto/bn_conf.h.in | 28 - .../usr/local/include/crypto/bn_dh.h | 43 - .../usr/local/include/crypto/bn_srp.h | 32 - .../usr/local/include/crypto/bnerr.h | 27 - .../usr/local/include/crypto/buffererr.h | 27 - .../usr/local/include/crypto/chacha.h | 43 - .../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 | 48 - .../usr/local/include/crypto/crmferr.h | 30 - .../usr/local/include/crypto/cryptlib.h | 39 - .../usr/local/include/crypto/cryptoerr.h | 27 - .../usr/local/include/crypto/cterr.h | 30 - .../usr/local/include/crypto/ctype.h | 86 - .../usr/local/include/crypto/decoder.h | 40 - .../usr/local/include/crypto/decodererr.h | 27 - .../usr/local/include/crypto/des_platform.h | 35 - .../usr/local/include/crypto/dh.h | 62 - .../usr/local/include/crypto/dherr.h | 30 - .../usr/local/include/crypto/dsa.h | 51 - .../usr/local/include/crypto/dsaerr.h | 30 - .../usr/local/include/crypto/dso_conf.h | 19 - .../usr/local/include/crypto/dso_conf.h.in | 33 - .../usr/local/include/crypto/ec.h | 106 - .../usr/local/include/crypto/ecerr.h | 30 - .../usr/local/include/crypto/ecx.h | 158 - .../usr/local/include/crypto/encoder.h | 20 - .../usr/local/include/crypto/encodererr.h | 27 - .../usr/local/include/crypto/engine.h | 20 - .../usr/local/include/crypto/engineerr.h | 30 - .../usr/local/include/crypto/err.h | 20 - .../usr/local/include/crypto/ess.h | 76 - .../usr/local/include/crypto/esserr.h | 27 - .../usr/local/include/crypto/evp.h | 970 --- .../usr/local/include/crypto/evperr.h | 27 - .../usr/local/include/crypto/httperr.h | 27 - .../usr/local/include/crypto/lhash.h | 16 - .../usr/local/include/crypto/md32_common.h | 284 - .../usr/local/include/crypto/modes.h | 236 - .../usr/local/include/crypto/objects.h | 12 - .../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 | 46 - .../usr/local/include/crypto/ppc_arch.h | 29 - .../usr/local/include/crypto/punycode.h | 25 - .../usr/local/include/crypto/rand.h | 154 - .../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 | 64 - .../usr/local/include/crypto/rsa.h | 132 - .../usr/local/include/crypto/rsaerr.h | 27 - .../usr/local/include/crypto/security_bits.h | 16 - .../usr/local/include/crypto/sha.h | 23 - .../usr/local/include/crypto/siphash.h | 50 - .../usr/local/include/crypto/siv.h | 33 - .../usr/local/include/crypto/sm2.h | 86 - .../usr/local/include/crypto/sm2err.h | 49 - .../usr/local/include/crypto/sm4.h | 38 - .../usr/local/include/crypto/sm4_platform.h | 111 - .../usr/local/include/crypto/sparc_arch.h | 122 - .../usr/local/include/crypto/sparse_array.h | 92 - .../usr/local/include/crypto/store.h | 23 - .../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 | 391 -- .../usr/local/include/crypto/x509err.h | 27 - .../usr/local/include/crypto/x509v3err.h | 27 - .../internal/__DECC_INCLUDE_EPILOGUE.H | 16 - .../internal/__DECC_INCLUDE_PROLOGUE.H | 20 - .../usr/local/include/internal/asn1.h | 18 - .../usr/local/include/internal/bio.h | 101 - .../usr/local/include/internal/bio_addr.h | 29 - .../usr/local/include/internal/bio_tfo.h | 151 - .../usr/local/include/internal/common.h | 217 - .../usr/local/include/internal/comp.h | 14 - .../usr/local/include/internal/conf.h | 31 - .../local/include/internal/constant_time.h | 421 -- .../usr/local/include/internal/core.h | 71 - .../usr/local/include/internal/cryptlib.h | 163 - .../usr/local/include/internal/dane.h | 104 - .../usr/local/include/internal/deprecated.h | 30 - .../usr/local/include/internal/der.h | 94 - .../include/internal/deterministic_nonce.h | 24 - .../usr/local/include/internal/dso.h | 164 - .../usr/local/include/internal/dsoerr.h | 48 - .../usr/local/include/internal/e_os.h | 384 -- .../usr/local/include/internal/endian.h | 51 - .../usr/local/include/internal/err.h | 16 - .../usr/local/include/internal/event_queue.h | 163 - .../usr/local/include/internal/ffc.h | 221 - .../usr/local/include/internal/hpke_util.h | 100 - .../usr/local/include/internal/ktls.h | 434 -- .../usr/local/include/internal/list.h | 169 - .../usr/local/include/internal/namemap.h | 41 - .../usr/local/include/internal/nelem.h | 15 - .../usr/local/include/internal/numbers.h | 110 - .../usr/local/include/internal/o_dir.h | 53 - .../usr/local/include/internal/packet.h | 939 --- .../usr/local/include/internal/packet_quic.h | 150 - .../local/include/internal/param_build_set.h | 51 - .../usr/local/include/internal/param_names.h | 376 -- .../local/include/internal/param_names.h.in | 18 - .../usr/local/include/internal/params.h | 38 - .../usr/local/include/internal/passphrase.h | 122 - .../local/include/internal/priority_queue.h | 88 - .../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/quic_ackm.h | 297 - .../usr/local/include/internal/quic_cc.h | 219 - .../usr/local/include/internal/quic_cfq.h | 154 - .../usr/local/include/internal/quic_channel.h | 429 -- .../usr/local/include/internal/quic_demux.h | 364 -- .../usr/local/include/internal/quic_error.h | 56 - .../usr/local/include/internal/quic_fc.h | 277 - .../usr/local/include/internal/quic_fifd.h | 80 - .../usr/local/include/internal/quic_reactor.h | 188 - .../local/include/internal/quic_record_rx.h | 569 -- .../local/include/internal/quic_record_tx.h | 383 -- .../local/include/internal/quic_record_util.h | 116 - .../local/include/internal/quic_rx_depack.h | 21 - .../usr/local/include/internal/quic_sf_list.h | 151 - .../usr/local/include/internal/quic_ssl.h | 132 - .../usr/local/include/internal/quic_statm.h | 40 - .../usr/local/include/internal/quic_stream.h | 429 -- .../local/include/internal/quic_stream_map.h | 878 --- .../include/internal/quic_thread_assist.h | 102 - .../usr/local/include/internal/quic_tls.h | 106 - .../usr/local/include/internal/quic_tserver.h | 220 - .../usr/local/include/internal/quic_txp.h | 209 - .../usr/local/include/internal/quic_txpim.h | 133 - .../usr/local/include/internal/quic_types.h | 116 - .../usr/local/include/internal/quic_vlint.h | 127 - .../usr/local/include/internal/quic_wire.h | 784 --- .../local/include/internal/quic_wire_pkt.h | 629 -- .../usr/local/include/internal/recordmethod.h | 339 - .../usr/local/include/internal/refcount.h | 291 - .../usr/local/include/internal/ring_buf.h | 277 - .../usr/local/include/internal/safe_math.h | 443 -- .../usr/local/include/internal/sha3.h | 54 - .../usr/local/include/internal/sizes.h | 22 - .../usr/local/include/internal/sm3.h | 39 - .../usr/local/include/internal/sockets.h | 217 - .../usr/local/include/internal/ssl.h | 24 - .../usr/local/include/internal/ssl3_cbc.h | 40 - .../usr/local/include/internal/sslconf.h | 21 - .../usr/local/include/internal/statem.h | 171 - .../usr/local/include/internal/symhacks.h | 27 - .../usr/local/include/internal/thread.h | 39 - .../usr/local/include/internal/thread_arch.h | 127 - .../usr/local/include/internal/thread_once.h | 151 - .../usr/local/include/internal/time.h | 242 - .../usr/local/include/internal/tlsgroups.h | 60 - .../usr/local/include/internal/tsan_assist.h | 153 - .../usr/local/include/internal/uint_set.h | 63 - .../usr/local/include/internal/unicode.h | 31 - .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 22 - .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 26 - .../usr/local/include/openssl/aes.h | 111 - .../usr/local/include/openssl/asn1.h | 1133 ---- .../usr/local/include/openssl/asn1.h.in | 966 --- .../usr/local/include/openssl/asn1_mac.h | 10 - .../usr/local/include/openssl/asn1err.h | 140 - .../usr/local/include/openssl/asn1t.h | 946 --- .../usr/local/include/openssl/asn1t.h.in | 923 --- .../usr/local/include/openssl/async.h | 104 - .../usr/local/include/openssl/asyncerr.h | 29 - .../usr/local/include/openssl/bio.h | 1010 --- .../usr/local/include/openssl/bio.h.in | 987 --- .../usr/local/include/openssl/bioerr.h | 72 - .../usr/local/include/openssl/blowfish.h | 78 - .../usr/local/include/openssl/bn.h | 590 -- .../usr/local/include/openssl/bnerr.h | 47 - .../usr/local/include/openssl/buffer.h | 62 - .../usr/local/include/openssl/buffererr.h | 25 - .../usr/local/include/openssl/camellia.h | 117 - .../usr/local/include/openssl/cast.h | 71 - .../usr/local/include/openssl/cmac.h | 52 - .../usr/local/include/openssl/cmp.h | 629 -- .../usr/local/include/openssl/cmp.h.in | 510 -- .../usr/local/include/openssl/cmp_util.h | 56 - .../usr/local/include/openssl/cmperr.h | 120 - .../usr/local/include/openssl/cms.h | 508 -- .../usr/local/include/openssl/cms.h.in | 410 -- .../usr/local/include/openssl/cmserr.h | 125 - .../usr/local/include/openssl/comp.h | 64 - .../usr/local/include/openssl/comperr.h | 38 - .../usr/local/include/openssl/conf.h | 214 - .../usr/local/include/openssl/conf.h.in | 177 - .../usr/local/include/openssl/conf_api.h | 46 - .../usr/local/include/openssl/conferr.h | 52 - .../usr/local/include/openssl/configuration.h | 182 - .../local/include/openssl/configuration.h.in | 75 - .../usr/local/include/openssl/conftypes.h | 44 - .../usr/local/include/openssl/core.h | 236 - .../usr/local/include/openssl/core_dispatch.h | 984 --- .../usr/local/include/openssl/core_names.h | 475 -- .../usr/local/include/openssl/core_names.h.in | 119 - .../usr/local/include/openssl/core_object.h | 41 - .../usr/local/include/openssl/crmf.h | 229 - .../usr/local/include/openssl/crmf.h.in | 182 - .../usr/local/include/openssl/crmferr.h | 50 - .../usr/local/include/openssl/crypto.h | 561 -- .../usr/local/include/openssl/crypto.h.in | 538 -- .../usr/local/include/openssl/cryptoerr.h | 55 - .../local/include/openssl/cryptoerr_legacy.h | 1466 ----- .../usr/local/include/openssl/ct.h | 573 -- .../usr/local/include/openssl/ct.h.in | 525 -- .../usr/local/include/openssl/cterr.h | 45 - .../usr/local/include/openssl/decoder.h | 133 - .../usr/local/include/openssl/decodererr.h | 28 - .../usr/local/include/openssl/des.h | 211 - .../usr/local/include/openssl/dh.h | 335 - .../usr/local/include/openssl/dherr.h | 59 - .../usr/local/include/openssl/dsa.h | 280 - .../usr/local/include/openssl/dsaerr.h | 44 - .../usr/local/include/openssl/dtls1.h | 57 - .../usr/local/include/openssl/e_os2.h | 308 - .../usr/local/include/openssl/e_ostime.h | 38 - .../usr/local/include/openssl/ebcdic.h | 39 - .../usr/local/include/openssl/ec.h | 1588 ----- .../usr/local/include/openssl/ecdh.h | 10 - .../usr/local/include/openssl/ecdsa.h | 10 - .../usr/local/include/openssl/ecerr.h | 104 - .../usr/local/include/openssl/encoder.h | 124 - .../usr/local/include/openssl/encodererr.h | 28 - .../usr/local/include/openssl/engine.h | 833 --- .../usr/local/include/openssl/engineerr.h | 63 - .../usr/local/include/openssl/err.h | 511 -- .../usr/local/include/openssl/err.h.in | 500 -- .../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 | 2181 ------- .../usr/local/include/openssl/evperr.h | 137 - .../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 | 62 - .../usr/local/include/openssl/hpke.h | 169 - .../usr/local/include/openssl/http.h | 113 - .../usr/local/include/openssl/httperr.h | 55 - .../usr/local/include/openssl/idea.h | 82 - .../usr/local/include/openssl/kdf.h | 138 - .../usr/local/include/openssl/kdferr.h | 16 - .../usr/local/include/openssl/lhash.h | 331 - .../usr/local/include/openssl/lhash.h.in | 306 - .../usr/local/include/openssl/macros.h | 326 - .../usr/local/include/openssl/md2.h | 56 - .../usr/local/include/openssl/md4.h | 63 - .../usr/local/include/openssl/md5.h | 62 - .../usr/local/include/openssl/mdc2.h | 55 - .../usr/local/include/openssl/modes.h | 219 - .../usr/local/include/openssl/obj_mac.h | 5802 ----------------- .../usr/local/include/openssl/objects.h | 183 - .../usr/local/include/openssl/objectserr.h | 28 - .../usr/local/include/openssl/ocsp.h | 483 -- .../usr/local/include/openssl/ocsp.h.in | 387 -- .../usr/local/include/openssl/ocsperr.h | 53 - .../usr/local/include/openssl/opensslconf.h | 17 - .../usr/local/include/openssl/opensslv.h | 114 - .../usr/local/include/openssl/opensslv.h.in | 113 - .../usr/local/include/openssl/ossl_typ.h | 16 - .../usr/local/include/openssl/param_build.h | 63 - .../usr/local/include/openssl/params.h | 160 - .../usr/local/include/openssl/pem.h | 542 -- .../usr/local/include/openssl/pem2.h | 19 - .../usr/local/include/openssl/pemerr.h | 58 - .../usr/local/include/openssl/pkcs12.h | 363 -- .../usr/local/include/openssl/pkcs12.h.in | 340 - .../usr/local/include/openssl/pkcs12err.h | 46 - .../usr/local/include/openssl/pkcs7.h | 430 -- .../usr/local/include/openssl/pkcs7.h.in | 359 - .../usr/local/include/openssl/pkcs7err.h | 63 - .../usr/local/include/openssl/prov_ssl.h | 38 - .../usr/local/include/openssl/proverr.h | 153 - .../usr/local/include/openssl/provider.h | 66 - .../usr/local/include/openssl/quic.h | 37 - .../usr/local/include/openssl/rand.h | 125 - .../usr/local/include/openssl/randerr.h | 69 - .../usr/local/include/openssl/rc2.h | 68 - .../usr/local/include/openssl/rc4.h | 47 - .../usr/local/include/openssl/rc5.h | 79 - .../usr/local/include/openssl/ripemd.h | 59 - .../usr/local/include/openssl/rsa.h | 615 -- .../usr/local/include/openssl/rsaerr.h | 107 - .../usr/local/include/openssl/safestack.h | 297 - .../usr/local/include/openssl/safestack.h.in | 227 - .../usr/local/include/openssl/seed.h | 113 - .../usr/local/include/openssl/self_test.h | 94 - .../usr/local/include/openssl/sha.h | 139 - .../usr/local/include/openssl/srp.h | 285 - .../usr/local/include/openssl/srp.h.in | 214 - .../usr/local/include/openssl/srtp.h | 68 - .../usr/local/include/openssl/ssl.h | 2765 -------- .../usr/local/include/openssl/ssl.h.in | 2693 -------- .../usr/local/include/openssl/ssl2.h | 30 - .../usr/local/include/openssl/ssl3.h | 357 - .../usr/local/include/openssl/sslerr.h | 368 -- .../usr/local/include/openssl/sslerr_legacy.h | 468 -- .../usr/local/include/openssl/stack.h | 90 - .../usr/local/include/openssl/store.h | 377 -- .../usr/local/include/openssl/storeerr.h | 49 - .../usr/local/include/openssl/symhacks.h | 39 - .../usr/local/include/openssl/thread.h | 31 - .../usr/local/include/openssl/tls1.h | 1210 ---- .../usr/local/include/openssl/trace.h | 320 - .../usr/local/include/openssl/ts.h | 505 -- .../usr/local/include/openssl/tserr.h | 67 - .../usr/local/include/openssl/txt_db.h | 63 - .../usr/local/include/openssl/types.h | 239 - .../usr/local/include/openssl/ui.h | 407 -- .../usr/local/include/openssl/ui.h.in | 384 -- .../usr/local/include/openssl/uierr.h | 38 - .../usr/local/include/openssl/whrlpool.h | 62 - .../usr/local/include/openssl/x509.h | 1286 ---- .../usr/local/include/openssl/x509.h.in | 1092 ---- .../usr/local/include/openssl/x509_vfy.h | 901 --- .../usr/local/include/openssl/x509_vfy.h.in | 804 --- .../usr/local/include/openssl/x509err.h | 69 - .../usr/local/include/openssl/x509v3.h | 1454 ----- .../usr/local/include/openssl/x509v3.h.in | 1021 --- .../usr/local/include/openssl/x509v3err.h | 96 - .../include/crypto/__DECC_INCLUDE_EPILOGUE.H | 16 - .../include/crypto/__DECC_INCLUDE_PROLOGUE.H | 20 - .../usr/local/include/crypto/aes_platform.h | 514 -- .../mingw64/usr/local/include/crypto/aria.h | 51 - .../mingw64/usr/local/include/crypto/asn1.h | 153 - .../usr/local/include/crypto/asn1_dsa.h | 24 - .../usr/local/include/crypto/asn1err.h | 27 - .../mingw64/usr/local/include/crypto/async.h | 19 - .../usr/local/include/crypto/asyncerr.h | 27 - .../mingw64/usr/local/include/crypto/bioerr.h | 27 - .../mingw64/usr/local/include/crypto/bn.h | 128 - .../usr/local/include/crypto/bn_conf.h | 29 - .../usr/local/include/crypto/bn_conf.h.in | 28 - .../mingw64/usr/local/include/crypto/bn_dh.h | 43 - .../mingw64/usr/local/include/crypto/bn_srp.h | 32 - .../mingw64/usr/local/include/crypto/bnerr.h | 27 - .../usr/local/include/crypto/buffererr.h | 27 - .../mingw64/usr/local/include/crypto/chacha.h | 43 - .../usr/local/include/crypto/cmll_platform.h | 51 - .../mingw64/usr/local/include/crypto/cmperr.h | 30 - .../mingw64/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 | 48 - .../usr/local/include/crypto/crmferr.h | 30 - .../usr/local/include/crypto/cryptlib.h | 39 - .../usr/local/include/crypto/cryptoerr.h | 27 - .../mingw64/usr/local/include/crypto/cterr.h | 30 - .../mingw64/usr/local/include/crypto/ctype.h | 86 - .../usr/local/include/crypto/decoder.h | 40 - .../usr/local/include/crypto/decodererr.h | 27 - .../usr/local/include/crypto/des_platform.h | 35 - .../mingw64/usr/local/include/crypto/dh.h | 62 - .../mingw64/usr/local/include/crypto/dherr.h | 30 - .../mingw64/usr/local/include/crypto/dsa.h | 51 - .../mingw64/usr/local/include/crypto/dsaerr.h | 30 - .../usr/local/include/crypto/dso_conf.h | 18 - .../usr/local/include/crypto/dso_conf.h.in | 33 - .../mingw64/usr/local/include/crypto/ec.h | 106 - .../mingw64/usr/local/include/crypto/ecerr.h | 30 - .../mingw64/usr/local/include/crypto/ecx.h | 158 - .../usr/local/include/crypto/encoder.h | 20 - .../usr/local/include/crypto/encodererr.h | 27 - .../mingw64/usr/local/include/crypto/engine.h | 20 - .../usr/local/include/crypto/engineerr.h | 30 - .../mingw64/usr/local/include/crypto/err.h | 20 - .../mingw64/usr/local/include/crypto/ess.h | 76 - .../mingw64/usr/local/include/crypto/esserr.h | 27 - .../mingw64/usr/local/include/crypto/evp.h | 970 --- .../mingw64/usr/local/include/crypto/evperr.h | 27 - .../usr/local/include/crypto/httperr.h | 27 - .../mingw64/usr/local/include/crypto/lhash.h | 16 - .../usr/local/include/crypto/md32_common.h | 284 - .../mingw64/usr/local/include/crypto/modes.h | 236 - .../usr/local/include/crypto/objects.h | 12 - .../usr/local/include/crypto/objectserr.h | 27 - .../usr/local/include/crypto/ocsperr.h | 30 - .../mingw64/usr/local/include/crypto/pem.h | 51 - .../mingw64/usr/local/include/crypto/pemerr.h | 27 - .../usr/local/include/crypto/pkcs12err.h | 27 - .../mingw64/usr/local/include/crypto/pkcs7.h | 19 - .../usr/local/include/crypto/pkcs7err.h | 27 - .../usr/local/include/crypto/poly1305.h | 46 - .../usr/local/include/crypto/ppc_arch.h | 29 - .../usr/local/include/crypto/punycode.h | 25 - .../mingw64/usr/local/include/crypto/rand.h | 154 - .../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 | 64 - .../mingw64/usr/local/include/crypto/rsa.h | 132 - .../mingw64/usr/local/include/crypto/rsaerr.h | 27 - .../usr/local/include/crypto/security_bits.h | 16 - .../mingw64/usr/local/include/crypto/sha.h | 23 - .../usr/local/include/crypto/siphash.h | 50 - .../mingw64/usr/local/include/crypto/siv.h | 33 - .../mingw64/usr/local/include/crypto/sm2.h | 86 - .../mingw64/usr/local/include/crypto/sm2err.h | 49 - .../mingw64/usr/local/include/crypto/sm4.h | 38 - .../usr/local/include/crypto/sm4_platform.h | 111 - .../usr/local/include/crypto/sparc_arch.h | 122 - .../usr/local/include/crypto/sparse_array.h | 92 - .../mingw64/usr/local/include/crypto/store.h | 23 - .../usr/local/include/crypto/storeerr.h | 27 - .../mingw64/usr/local/include/crypto/tserr.h | 30 - .../mingw64/usr/local/include/crypto/types.h | 32 - .../mingw64/usr/local/include/crypto/uierr.h | 27 - .../mingw64/usr/local/include/crypto/x509.h | 391 -- .../usr/local/include/crypto/x509err.h | 27 - .../usr/local/include/crypto/x509v3err.h | 27 - .../internal/__DECC_INCLUDE_EPILOGUE.H | 16 - .../internal/__DECC_INCLUDE_PROLOGUE.H | 20 - .../mingw64/usr/local/include/internal/asn1.h | 18 - .../mingw64/usr/local/include/internal/bio.h | 101 - .../usr/local/include/internal/bio_addr.h | 29 - .../usr/local/include/internal/bio_tfo.h | 151 - .../usr/local/include/internal/common.h | 217 - .../mingw64/usr/local/include/internal/comp.h | 14 - .../mingw64/usr/local/include/internal/conf.h | 31 - .../local/include/internal/constant_time.h | 421 -- .../mingw64/usr/local/include/internal/core.h | 71 - .../usr/local/include/internal/cryptlib.h | 163 - .../mingw64/usr/local/include/internal/dane.h | 104 - .../usr/local/include/internal/deprecated.h | 30 - .../mingw64/usr/local/include/internal/der.h | 94 - .../include/internal/deterministic_nonce.h | 24 - .../mingw64/usr/local/include/internal/dso.h | 164 - .../usr/local/include/internal/dsoerr.h | 48 - .../mingw64/usr/local/include/internal/e_os.h | 384 -- .../usr/local/include/internal/endian.h | 51 - .../mingw64/usr/local/include/internal/err.h | 16 - .../usr/local/include/internal/event_queue.h | 163 - .../mingw64/usr/local/include/internal/ffc.h | 221 - .../usr/local/include/internal/hpke_util.h | 100 - .../mingw64/usr/local/include/internal/ktls.h | 434 -- .../mingw64/usr/local/include/internal/list.h | 169 - .../usr/local/include/internal/namemap.h | 41 - .../usr/local/include/internal/nelem.h | 15 - .../usr/local/include/internal/numbers.h | 110 - .../usr/local/include/internal/o_dir.h | 53 - .../usr/local/include/internal/packet.h | 939 --- .../usr/local/include/internal/packet_quic.h | 150 - .../local/include/internal/param_build_set.h | 51 - .../usr/local/include/internal/param_names.h | 376 -- .../local/include/internal/param_names.h.in | 18 - .../usr/local/include/internal/params.h | 38 - .../usr/local/include/internal/passphrase.h | 122 - .../local/include/internal/priority_queue.h | 88 - .../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/quic_ackm.h | 297 - .../usr/local/include/internal/quic_cc.h | 219 - .../usr/local/include/internal/quic_cfq.h | 154 - .../usr/local/include/internal/quic_channel.h | 429 -- .../usr/local/include/internal/quic_demux.h | 364 -- .../usr/local/include/internal/quic_error.h | 56 - .../usr/local/include/internal/quic_fc.h | 277 - .../usr/local/include/internal/quic_fifd.h | 80 - .../usr/local/include/internal/quic_reactor.h | 188 - .../local/include/internal/quic_record_rx.h | 569 -- .../local/include/internal/quic_record_tx.h | 383 -- .../local/include/internal/quic_record_util.h | 116 - .../local/include/internal/quic_rx_depack.h | 21 - .../usr/local/include/internal/quic_sf_list.h | 151 - .../usr/local/include/internal/quic_ssl.h | 132 - .../usr/local/include/internal/quic_statm.h | 40 - .../usr/local/include/internal/quic_stream.h | 429 -- .../local/include/internal/quic_stream_map.h | 878 --- .../include/internal/quic_thread_assist.h | 102 - .../usr/local/include/internal/quic_tls.h | 106 - .../usr/local/include/internal/quic_tserver.h | 220 - .../usr/local/include/internal/quic_txp.h | 209 - .../usr/local/include/internal/quic_txpim.h | 133 - .../usr/local/include/internal/quic_types.h | 116 - .../usr/local/include/internal/quic_vlint.h | 127 - .../usr/local/include/internal/quic_wire.h | 784 --- .../local/include/internal/quic_wire_pkt.h | 629 -- .../usr/local/include/internal/recordmethod.h | 339 - .../usr/local/include/internal/refcount.h | 291 - .../usr/local/include/internal/ring_buf.h | 277 - .../usr/local/include/internal/safe_math.h | 443 -- .../mingw64/usr/local/include/internal/sha3.h | 54 - .../usr/local/include/internal/sizes.h | 22 - .../mingw64/usr/local/include/internal/sm3.h | 39 - .../usr/local/include/internal/sockets.h | 217 - .../mingw64/usr/local/include/internal/ssl.h | 24 - .../usr/local/include/internal/ssl3_cbc.h | 40 - .../usr/local/include/internal/sslconf.h | 21 - .../usr/local/include/internal/statem.h | 171 - .../usr/local/include/internal/symhacks.h | 27 - .../usr/local/include/internal/thread.h | 39 - .../usr/local/include/internal/thread_arch.h | 127 - .../usr/local/include/internal/thread_once.h | 151 - .../mingw64/usr/local/include/internal/time.h | 242 - .../usr/local/include/internal/tlsgroups.h | 60 - .../usr/local/include/internal/tsan_assist.h | 153 - .../usr/local/include/internal/uint_set.h | 63 - .../usr/local/include/internal/unicode.h | 31 - .../include/openssl/__DECC_INCLUDE_EPILOGUE.H | 22 - .../include/openssl/__DECC_INCLUDE_PROLOGUE.H | 26 - .../mingw64/usr/local/include/openssl/aes.h | 111 - .../mingw64/usr/local/include/openssl/asn1.h | 1133 ---- .../usr/local/include/openssl/asn1.h.in | 966 --- .../usr/local/include/openssl/asn1_mac.h | 10 - .../usr/local/include/openssl/asn1err.h | 140 - .../mingw64/usr/local/include/openssl/asn1t.h | 946 --- .../usr/local/include/openssl/asn1t.h.in | 923 --- .../mingw64/usr/local/include/openssl/async.h | 104 - .../usr/local/include/openssl/asyncerr.h | 29 - .../mingw64/usr/local/include/openssl/bio.h | 1010 --- .../usr/local/include/openssl/bio.h.in | 987 --- .../usr/local/include/openssl/bioerr.h | 72 - .../usr/local/include/openssl/blowfish.h | 78 - .../mingw64/usr/local/include/openssl/bn.h | 590 -- .../mingw64/usr/local/include/openssl/bnerr.h | 47 - .../usr/local/include/openssl/buffer.h | 62 - .../usr/local/include/openssl/buffererr.h | 25 - .../usr/local/include/openssl/camellia.h | 117 - .../mingw64/usr/local/include/openssl/cast.h | 71 - .../mingw64/usr/local/include/openssl/cmac.h | 52 - .../mingw64/usr/local/include/openssl/cmp.h | 629 -- .../usr/local/include/openssl/cmp.h.in | 510 -- .../usr/local/include/openssl/cmp_util.h | 56 - .../usr/local/include/openssl/cmperr.h | 120 - .../mingw64/usr/local/include/openssl/cms.h | 508 -- .../usr/local/include/openssl/cms.h.in | 410 -- .../usr/local/include/openssl/cmserr.h | 125 - .../mingw64/usr/local/include/openssl/comp.h | 64 - .../usr/local/include/openssl/comperr.h | 38 - .../mingw64/usr/local/include/openssl/conf.h | 214 - .../usr/local/include/openssl/conf.h.in | 177 - .../usr/local/include/openssl/conf_api.h | 46 - .../usr/local/include/openssl/conferr.h | 52 - .../usr/local/include/openssl/configuration.h | 227 - .../local/include/openssl/configuration.h.in | 75 - .../usr/local/include/openssl/conftypes.h | 44 - .../mingw64/usr/local/include/openssl/core.h | 236 - .../usr/local/include/openssl/core_dispatch.h | 984 --- .../usr/local/include/openssl/core_names.h | 475 -- .../usr/local/include/openssl/core_names.h.in | 119 - .../usr/local/include/openssl/core_object.h | 41 - .../mingw64/usr/local/include/openssl/crmf.h | 229 - .../usr/local/include/openssl/crmf.h.in | 182 - .../usr/local/include/openssl/crmferr.h | 50 - .../usr/local/include/openssl/crypto.h | 561 -- .../usr/local/include/openssl/crypto.h.in | 538 -- .../usr/local/include/openssl/cryptoerr.h | 55 - .../local/include/openssl/cryptoerr_legacy.h | 1466 ----- .../mingw64/usr/local/include/openssl/ct.h | 573 -- .../mingw64/usr/local/include/openssl/ct.h.in | 525 -- .../mingw64/usr/local/include/openssl/cterr.h | 45 - .../usr/local/include/openssl/decoder.h | 133 - .../usr/local/include/openssl/decodererr.h | 28 - .../mingw64/usr/local/include/openssl/des.h | 211 - .../mingw64/usr/local/include/openssl/dh.h | 335 - .../mingw64/usr/local/include/openssl/dherr.h | 59 - .../mingw64/usr/local/include/openssl/dsa.h | 280 - .../usr/local/include/openssl/dsaerr.h | 44 - .../mingw64/usr/local/include/openssl/dtls1.h | 57 - .../mingw64/usr/local/include/openssl/e_os2.h | 308 - .../usr/local/include/openssl/e_ostime.h | 38 - .../usr/local/include/openssl/ebcdic.h | 39 - .../mingw64/usr/local/include/openssl/ec.h | 1588 ----- .../mingw64/usr/local/include/openssl/ecdh.h | 10 - .../mingw64/usr/local/include/openssl/ecdsa.h | 10 - .../mingw64/usr/local/include/openssl/ecerr.h | 104 - .../usr/local/include/openssl/encoder.h | 124 - .../usr/local/include/openssl/encodererr.h | 28 - .../usr/local/include/openssl/engine.h | 833 --- .../usr/local/include/openssl/engineerr.h | 63 - .../mingw64/usr/local/include/openssl/err.h | 511 -- .../usr/local/include/openssl/err.h.in | 500 -- .../mingw64/usr/local/include/openssl/ess.h | 128 - .../usr/local/include/openssl/ess.h.in | 81 - .../usr/local/include/openssl/esserr.h | 32 - .../mingw64/usr/local/include/openssl/evp.h | 2181 ------- .../usr/local/include/openssl/evperr.h | 137 - .../usr/local/include/openssl/fips_names.h | 77 - .../usr/local/include/openssl/fipskey.h | 36 - .../usr/local/include/openssl/fipskey.h.in | 35 - .../mingw64/usr/local/include/openssl/hmac.h | 62 - .../mingw64/usr/local/include/openssl/hpke.h | 169 - .../mingw64/usr/local/include/openssl/http.h | 113 - .../usr/local/include/openssl/httperr.h | 55 - .../mingw64/usr/local/include/openssl/idea.h | 82 - .../mingw64/usr/local/include/openssl/kdf.h | 138 - .../usr/local/include/openssl/kdferr.h | 16 - .../mingw64/usr/local/include/openssl/lhash.h | 331 - .../usr/local/include/openssl/lhash.h.in | 306 - .../usr/local/include/openssl/macros.h | 326 - .../mingw64/usr/local/include/openssl/md2.h | 56 - .../mingw64/usr/local/include/openssl/md4.h | 63 - .../mingw64/usr/local/include/openssl/md5.h | 62 - .../mingw64/usr/local/include/openssl/mdc2.h | 55 - .../mingw64/usr/local/include/openssl/modes.h | 219 - .../usr/local/include/openssl/obj_mac.h | 5802 ----------------- .../usr/local/include/openssl/objects.h | 183 - .../usr/local/include/openssl/objectserr.h | 28 - .../mingw64/usr/local/include/openssl/ocsp.h | 483 -- .../usr/local/include/openssl/ocsp.h.in | 387 -- .../usr/local/include/openssl/ocsperr.h | 53 - .../usr/local/include/openssl/opensslconf.h | 17 - .../usr/local/include/openssl/opensslv.h | 114 - .../usr/local/include/openssl/opensslv.h.in | 113 - .../usr/local/include/openssl/ossl_typ.h | 16 - .../usr/local/include/openssl/param_build.h | 63 - .../usr/local/include/openssl/params.h | 160 - .../mingw64/usr/local/include/openssl/pem.h | 542 -- .../mingw64/usr/local/include/openssl/pem2.h | 19 - .../usr/local/include/openssl/pemerr.h | 58 - .../usr/local/include/openssl/pkcs12.h | 363 -- .../usr/local/include/openssl/pkcs12.h.in | 340 - .../usr/local/include/openssl/pkcs12err.h | 46 - .../mingw64/usr/local/include/openssl/pkcs7.h | 430 -- .../usr/local/include/openssl/pkcs7.h.in | 359 - .../usr/local/include/openssl/pkcs7err.h | 63 - .../usr/local/include/openssl/prov_ssl.h | 38 - .../usr/local/include/openssl/proverr.h | 153 - .../usr/local/include/openssl/provider.h | 66 - .../mingw64/usr/local/include/openssl/quic.h | 37 - .../mingw64/usr/local/include/openssl/rand.h | 125 - .../usr/local/include/openssl/randerr.h | 69 - .../mingw64/usr/local/include/openssl/rc2.h | 68 - .../mingw64/usr/local/include/openssl/rc4.h | 47 - .../mingw64/usr/local/include/openssl/rc5.h | 79 - .../usr/local/include/openssl/ripemd.h | 59 - .../mingw64/usr/local/include/openssl/rsa.h | 615 -- .../usr/local/include/openssl/rsaerr.h | 107 - .../usr/local/include/openssl/safestack.h | 297 - .../usr/local/include/openssl/safestack.h.in | 227 - .../mingw64/usr/local/include/openssl/seed.h | 113 - .../usr/local/include/openssl/self_test.h | 94 - .../mingw64/usr/local/include/openssl/sha.h | 139 - .../mingw64/usr/local/include/openssl/srp.h | 285 - .../usr/local/include/openssl/srp.h.in | 214 - .../mingw64/usr/local/include/openssl/srtp.h | 68 - .../mingw64/usr/local/include/openssl/ssl.h | 2765 -------- .../usr/local/include/openssl/ssl.h.in | 2693 -------- .../mingw64/usr/local/include/openssl/ssl2.h | 30 - .../mingw64/usr/local/include/openssl/ssl3.h | 357 - .../usr/local/include/openssl/sslerr.h | 368 -- .../usr/local/include/openssl/sslerr_legacy.h | 468 -- .../mingw64/usr/local/include/openssl/stack.h | 90 - .../mingw64/usr/local/include/openssl/store.h | 377 -- .../usr/local/include/openssl/storeerr.h | 49 - .../usr/local/include/openssl/symhacks.h | 39 - .../usr/local/include/openssl/thread.h | 31 - .../mingw64/usr/local/include/openssl/tls1.h | 1210 ---- .../mingw64/usr/local/include/openssl/trace.h | 320 - .../mingw64/usr/local/include/openssl/ts.h | 505 -- .../mingw64/usr/local/include/openssl/tserr.h | 67 - .../usr/local/include/openssl/txt_db.h | 63 - .../mingw64/usr/local/include/openssl/types.h | 239 - .../mingw64/usr/local/include/openssl/ui.h | 407 -- .../mingw64/usr/local/include/openssl/ui.h.in | 384 -- .../mingw64/usr/local/include/openssl/uierr.h | 38 - .../usr/local/include/openssl/whrlpool.h | 62 - .../mingw64/usr/local/include/openssl/x509.h | 1286 ---- .../usr/local/include/openssl/x509.h.in | 1092 ---- .../usr/local/include/openssl/x509_vfy.h | 901 --- .../usr/local/include/openssl/x509_vfy.h.in | 804 --- .../usr/local/include/openssl/x509err.h | 69 - .../usr/local/include/openssl/x509v3.h | 1454 ----- .../usr/local/include/openssl/x509v3.h.in | 1021 --- .../usr/local/include/openssl/x509v3err.h | 96 - .../openssl/mingw64/usr/local/lib/libcrypto.a | Bin 5868988 -> 0 bytes deps/openssl/mingw64/usr/local/lib/libssl.a | Bin 853904 -> 0 bytes 2435 files changed, 2 insertions(+), 549492 deletions(-) delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/aes_platform.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/aria.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1_dsa.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/async.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/asyncerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/bioerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_conf.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_conf.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_dh.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_srp.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/bnerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/buffererr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/chacha.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmll_platform.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmperr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmserr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/comperr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/conferr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/context.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/crmferr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/cryptlib.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/cryptoerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/cterr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/ctype.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/decoder.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/decodererr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/des_platform.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/dh.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/dherr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsa.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsaerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/dso_conf.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/dso_conf.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/ec.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecx.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/encoder.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/encodererr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/engine.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/engineerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/ess.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/esserr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/evp.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/evperr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/httperr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/lhash.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/md32_common.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/modes.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/objects.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/objectserr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/ocsperr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/pem.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/pemerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs12err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs7.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs7err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/poly1305.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/ppc_arch.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/punycode.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand_pool.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/randerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.def delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsa.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsaerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/security_bits.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/sha.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/siphash.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/siv.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm2.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm2err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm4.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm4_platform.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/sparc_arch.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/sparse_array.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/store.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/storeerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/tserr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/types.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/uierr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509v3err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/asn1.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/bio.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/bio_addr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/bio_tfo.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/common.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/comp.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/conf.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/constant_time.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/core.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/cryptlib.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/dane.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/deprecated.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/der.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/deterministic_nonce.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/dso.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/dsoerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/e_os.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/endian.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/event_queue.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/ffc.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/hpke_util.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/ktls.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/list.h delete 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/nelem.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/numbers.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/o_dir.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/packet.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/packet_quic.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/param_build_set.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/param_names.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/param_names.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/params.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/passphrase.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/priority_queue.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/property.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/propertyerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/provider.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_ackm.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_cc.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_cfq.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_channel.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_demux.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_error.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_fc.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_fifd.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_reactor.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_rx.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_tx.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_util.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_rx_depack.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_sf_list.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_ssl.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_statm.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_stream.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_stream_map.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_thread_assist.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_tls.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_tserver.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_txp.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_txpim.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_types.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_vlint.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_wire.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_wire_pkt.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/recordmethod.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/refcount.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/ring_buf.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/safe_math.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/sha3.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/sizes.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/sm3.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/sockets.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/ssl.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/ssl3_cbc.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/sslconf.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/statem.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/symhacks.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/thread.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/thread_arch.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/thread_once.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/time.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/tlsgroups.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/tsan_assist.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/uint_set.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/unicode.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/aes.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1_mac.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/asyncerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/blowfish.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/bnerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffer.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffererr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/camellia.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cast.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmac.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp_util.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmperr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf_api.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/conferr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/conftypes.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/core.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_dispatch.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_names.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_names.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_object.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmferr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr_legacy.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/cterr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/decoder.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/decodererr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/des.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsaerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/dtls1.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_ostime.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ebcdic.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ec.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdh.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdsa.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/encoder.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/encodererr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/engine.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/engineerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ess.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ess.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/esserr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/fips_names.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/fipskey.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/fipskey.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/hmac.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/hpke.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/http.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/httperr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/idea.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdf.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdferr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/macros.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/md2.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/md4.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/md5.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/mdc2.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/modes.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/objects.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/objectserr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h delete 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/ocsperr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ossl_typ.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/param_build.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/params.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem2.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pemerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/prov_ssl.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/proverr.h delete 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/quic.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/randerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc2.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc4.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc5.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ripemd.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsaerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/seed.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/self_test.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl2.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr_legacy.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/stack.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/storeerr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/symhacks.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/thread.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/tls1.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/trace.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/tserr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/txt_db.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/types.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/uierr.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/whrlpool.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h.in delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/lib/libcrypto.a delete mode 100644 deps/openssl/android/arm64-v8a/usr/local/lib/libssl.a delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/aes_platform.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/aria.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1_dsa.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/async.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asyncerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bioerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_conf.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_conf.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_dh.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_srp.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bnerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/buffererr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/chacha.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmll_platform.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmperr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmserr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/comperr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/conferr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/context.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/crmferr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cryptlib.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cryptoerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cterr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ctype.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decoder.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decodererr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/des_platform.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dh.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dherr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsa.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsaerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dso_conf.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dso_conf.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ec.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecx.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encoder.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encodererr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/engine.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/engineerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ess.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/esserr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evp.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evperr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/httperr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/lhash.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/md32_common.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/modes.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/objects.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/objectserr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ocsperr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pem.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pemerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs12err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs7.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs7err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/poly1305.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ppc_arch.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/punycode.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand_pool.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/randerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.def delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsa.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsaerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/security_bits.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sha.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/siphash.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/siv.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm2.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm2err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm4.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm4_platform.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sparc_arch.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sparse_array.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/store.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/storeerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/tserr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/types.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/uierr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509v3err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/asn1.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio_addr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio_tfo.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/common.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/comp.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/conf.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/constant_time.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/core.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/cryptlib.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/dane.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/deprecated.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/der.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/deterministic_nonce.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/dso.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/dsoerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/e_os.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/endian.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/event_queue.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/ffc.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/hpke_util.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/ktls.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/list.h delete 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/nelem.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/numbers.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/o_dir.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet_quic.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_build_set.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_names.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_names.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/params.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/passphrase.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/priority_queue.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/property.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/propertyerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/provider.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_ackm.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_cc.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_cfq.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_channel.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_demux.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_error.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_fc.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_fifd.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_reactor.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_rx.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_tx.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_util.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_rx_depack.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_sf_list.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_ssl.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_statm.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_stream.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_stream_map.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_thread_assist.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_tls.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_tserver.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_txp.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_txpim.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_types.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_vlint.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_wire.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_wire_pkt.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/recordmethod.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/refcount.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/ring_buf.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/safe_math.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/sha3.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/sizes.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/sm3.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/sockets.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/ssl.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/ssl3_cbc.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/sslconf.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/statem.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/symhacks.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread_arch.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread_once.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/time.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/tlsgroups.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/tsan_assist.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/uint_set.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/unicode.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/aes.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1_mac.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/async.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asyncerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bioerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/blowfish.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bn.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bnerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/buffer.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/buffererr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/camellia.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cast.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmac.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp_util.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmperr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmserr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comp.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comperr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf_api.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conferr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conftypes.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_dispatch.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_names.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_names.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_object.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmferr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cryptoerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cryptoerr_legacy.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cterr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/decoder.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/decodererr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/des.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dh.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dherr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsa.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsaerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dtls1.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_os2.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_ostime.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ebcdic.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ec.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecdh.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecdsa.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/encoder.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/encodererr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/engine.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/engineerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ess.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ess.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/esserr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evp.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evperr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fips_names.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fipskey.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fipskey.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/hmac.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/hpke.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/http.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/httperr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/idea.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/kdf.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/kdferr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/macros.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md2.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md4.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md5.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/mdc2.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/modes.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/obj_mac.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/objects.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/objectserr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsp.h delete 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/ocsperr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslconf.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ossl_typ.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/param_build.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/params.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem2.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pemerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/prov_ssl.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/proverr.h delete 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/quic.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rand.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/randerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc2.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc4.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc5.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ripemd.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsa.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsaerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/safestack.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/safestack.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/seed.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/self_test.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sha.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srtp.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl2.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl3.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr_legacy.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/stack.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/store.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/storeerr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/symhacks.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/thread.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tls1.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/trace.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ts.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tserr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/txt_db.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/types.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/uierr.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/whrlpool.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h.in delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3err.h delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/lib/libcrypto.a delete mode 100644 deps/openssl/android/armeabi-v7a/usr/local/lib/libssl.a delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/aes_platform.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/aria.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/asn1.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/asn1_dsa.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/asn1err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/async.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/asyncerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/bioerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/bn.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/bn_conf.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/bn_conf.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/bn_dh.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/bn_srp.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/bnerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/buffererr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/chacha.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/cmll_platform.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/cmperr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/cmserr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/comperr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/conferr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/context.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/crmferr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/cryptlib.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/cryptoerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/cterr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/ctype.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/decoder.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/decodererr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/des_platform.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/dh.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/dherr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/dsa.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/dsaerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/dso_conf.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/dso_conf.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/ec.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/ecerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/ecx.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/encoder.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/encodererr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/engine.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/engineerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/ess.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/esserr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/evp.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/evperr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/httperr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/lhash.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/md32_common.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/modes.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/objects.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/objectserr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/ocsperr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/pem.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/pemerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/pkcs12err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/pkcs7.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/pkcs7err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/poly1305.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/ppc_arch.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/punycode.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/rand.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/rand_pool.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/randerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.def delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/rsa.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/rsaerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/security_bits.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/sha.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/siphash.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/siv.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/sm2.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/sm2err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/sm4.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/sm4_platform.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/sparc_arch.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/sparse_array.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/store.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/storeerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/tserr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/types.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/uierr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/x509.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/x509err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/crypto/x509v3err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/asn1.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/bio.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/bio_addr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/bio_tfo.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/common.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/comp.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/conf.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/constant_time.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/core.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/cryptlib.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/dane.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/deprecated.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/der.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/deterministic_nonce.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/dso.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/dsoerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/e_os.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/endian.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/event_queue.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/ffc.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/hpke_util.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/ktls.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/list.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/namemap.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/nelem.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/numbers.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/o_dir.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/packet.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/packet_quic.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/param_build_set.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/param_names.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/param_names.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/params.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/passphrase.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/priority_queue.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/property.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/propertyerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/provider.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_ackm.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_cc.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_cfq.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_channel.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_demux.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_error.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_fc.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_fifd.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_reactor.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_record_rx.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_record_tx.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_record_util.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_rx_depack.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_sf_list.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_ssl.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_statm.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_stream.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_stream_map.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_thread_assist.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_tls.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_tserver.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_txp.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_txpim.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_types.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_vlint.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_wire.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_wire_pkt.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/recordmethod.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/refcount.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/ring_buf.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/safe_math.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/sha3.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/sizes.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/sm3.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/sockets.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/ssl.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/ssl3_cbc.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/sslconf.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/statem.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/symhacks.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/thread.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/thread_arch.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/thread_once.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/time.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/tlsgroups.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/tsan_assist.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/uint_set.h delete mode 100644 deps/openssl/android/x86/usr/local/include/internal/unicode.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/aes.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/asn1.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/asn1.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/asn1_mac.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/asn1err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/asn1t.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/asn1t.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/async.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/asyncerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/bio.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/bio.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/bioerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/blowfish.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/bn.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/bnerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/buffer.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/buffererr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/camellia.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cast.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cmac.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cmp.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cmp.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cmp_util.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cmperr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cms.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cms.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cmserr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/comp.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/comperr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/conf.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/conf.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/conf_api.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/conferr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/configuration.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/configuration.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/conftypes.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/core.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/core_dispatch.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/core_names.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/core_names.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/core_object.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/crmf.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/crmf.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/crmferr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/crypto.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/crypto.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cryptoerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cryptoerr_legacy.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ct.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ct.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/cterr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/decoder.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/decodererr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/des.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/dh.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/dherr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/dsa.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/dsaerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/dtls1.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/e_os2.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/e_ostime.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ebcdic.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ec.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ecdh.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ecdsa.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ecerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/encoder.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/encodererr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/engine.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/engineerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/err.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ess.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ess.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/esserr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/evp.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/evperr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/fips_names.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/fipskey.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/fipskey.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/hmac.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/hpke.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/http.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/httperr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/idea.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/kdf.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/kdferr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/lhash.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/lhash.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/macros.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/md2.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/md4.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/md5.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/mdc2.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/modes.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/obj_mac.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/objects.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/objectserr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ocsp.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ocsp.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ocsperr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/opensslconf.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/opensslv.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/opensslv.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ossl_typ.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/param_build.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/params.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/pem.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/pem2.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/pemerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/pkcs12err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/pkcs7err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/prov_ssl.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/proverr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/provider.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/quic.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/rand.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/randerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/rc2.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/rc4.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/rc5.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ripemd.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/rsa.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/rsaerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/safestack.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/safestack.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/seed.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/self_test.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/sha.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/srp.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/srp.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/srtp.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ssl.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ssl.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ssl2.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ssl3.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/sslerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/sslerr_legacy.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/stack.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/store.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/storeerr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/symhacks.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/thread.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/tls1.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/trace.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ts.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/tserr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/txt_db.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/types.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ui.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/ui.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/uierr.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/whrlpool.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/x509.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/x509.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/x509err.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/x509v3.h delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/x509v3.h.in delete mode 100644 deps/openssl/android/x86/usr/local/include/openssl/x509v3err.h delete mode 100644 deps/openssl/android/x86/usr/local/lib/libcrypto.a delete mode 100644 deps/openssl/android/x86/usr/local/lib/libssl.a delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/aes_platform.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/aria.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/asn1.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/asn1_dsa.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/asn1err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/async.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/asyncerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/bioerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/bn.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/bn_conf.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/bn_conf.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/bn_dh.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/bn_srp.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/bnerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/buffererr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/chacha.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/cmll_platform.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/cmperr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/cmserr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/comperr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/conferr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/context.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/crmferr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/cryptlib.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/cryptoerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/cterr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/ctype.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/decoder.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/decodererr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/des_platform.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/dh.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/dherr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/dsa.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/dsaerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/dso_conf.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/dso_conf.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/ec.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/ecerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/ecx.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/encoder.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/encodererr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/engine.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/engineerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/ess.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/esserr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/evp.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/evperr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/httperr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/lhash.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/md32_common.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/modes.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/objects.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/objectserr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/ocsperr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/pem.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/pemerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/pkcs12err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/pkcs7.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/pkcs7err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/poly1305.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/ppc_arch.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/punycode.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/rand.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/rand_pool.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/randerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.def delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/rsa.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/rsaerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/security_bits.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/sha.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/siphash.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/siv.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/sm2.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/sm2err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/sm4.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/sm4_platform.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/sparc_arch.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/sparse_array.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/store.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/storeerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/tserr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/types.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/uierr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/x509.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/x509err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/crypto/x509v3err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/asn1.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/bio.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/bio_addr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/bio_tfo.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/common.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/comp.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/conf.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/constant_time.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/core.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/cryptlib.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/dane.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/deprecated.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/der.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/deterministic_nonce.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/dso.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/dsoerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/e_os.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/endian.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/event_queue.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/ffc.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/hpke_util.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/ktls.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/list.h delete 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/nelem.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/numbers.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/o_dir.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/packet.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/packet_quic.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/param_build_set.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/param_names.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/param_names.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/params.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/passphrase.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/priority_queue.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/property.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/propertyerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/provider.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_ackm.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_cc.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_cfq.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_channel.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_demux.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_error.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_fc.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_fifd.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_reactor.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_record_rx.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_record_tx.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_record_util.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_rx_depack.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_sf_list.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_ssl.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_statm.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_stream.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_stream_map.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_thread_assist.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_tls.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_tserver.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_txp.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_txpim.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_types.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_vlint.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_wire.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_wire_pkt.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/recordmethod.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/refcount.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/ring_buf.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/safe_math.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/sha3.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/sizes.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/sm3.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/sockets.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/ssl.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/ssl3_cbc.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/sslconf.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/statem.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/symhacks.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/thread.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/thread_arch.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/thread_once.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/time.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/tlsgroups.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/tsan_assist.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/uint_set.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/unicode.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/aes.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/asn1_mac.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/asn1err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/asn1t.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/asn1t.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/async.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/asyncerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/bio.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/bio.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/bioerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/blowfish.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/bn.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/bnerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/buffer.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/buffererr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/camellia.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cast.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cmac.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cmp_util.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cmperr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cms.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cms.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cmserr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/comp.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/comperr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/conf.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/conf.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/conf_api.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/conferr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/conftypes.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/core.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/core_dispatch.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/core_object.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/crmferr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cryptoerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cryptoerr_legacy.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ct.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ct.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/cterr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/decoder.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/decodererr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/des.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/dh.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/dherr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/dsa.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/dsaerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/dtls1.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/e_os2.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/e_ostime.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ebcdic.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ec.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ecdh.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ecdsa.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ecerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/encoder.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/encodererr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/engine.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/engineerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/err.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ess.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ess.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/esserr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/evp.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/evperr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/fips_names.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/fipskey.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/fipskey.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/hmac.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/hpke.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/http.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/httperr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/idea.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/kdf.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/kdferr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/macros.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/md2.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/md4.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/md5.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/mdc2.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/modes.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/obj_mac.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/objects.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/objectserr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ocsp.h delete 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/ocsperr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/opensslconf.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ossl_typ.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/param_build.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/params.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/pem.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/pem2.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/pemerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/prov_ssl.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/proverr.h delete 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/quic.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/rand.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/randerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/rc2.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/rc4.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/rc5.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ripemd.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/rsa.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/rsaerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/safestack.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/safestack.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/seed.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/self_test.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/sha.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/srp.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/srp.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/srtp.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ssl2.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ssl3.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/sslerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/sslerr_legacy.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/stack.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/store.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/storeerr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/symhacks.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/thread.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/tls1.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/trace.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ts.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/tserr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/txt_db.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/types.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ui.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/ui.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/uierr.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/whrlpool.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/x509.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/x509.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/x509err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h.in delete mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/x509v3err.h delete mode 100644 deps/openssl/android/x86_64/usr/local/lib/libcrypto.a delete mode 100644 deps/openssl/android/x86_64/usr/local/lib/libssl.a delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/aes_platform.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/aria.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/asn1.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/asn1_dsa.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/asn1err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/async.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/asyncerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/bioerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/bn.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/bn_conf.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/bn_conf.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/bn_dh.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/bn_srp.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/bnerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/buffererr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/chacha.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/cmll_platform.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/cmperr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/cmserr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/comperr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/conferr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/context.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/crmferr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/cryptlib.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/cryptoerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/cterr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/ctype.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/decoder.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/decodererr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/des_platform.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/dh.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/dherr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/dsa.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/dsaerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/dso_conf.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/dso_conf.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/ec.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/ecerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/ecx.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/encoder.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/encodererr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/engine.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/engineerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/ess.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/esserr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/evp.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/evperr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/httperr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/lhash.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/md32_common.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/modes.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/objects.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/objectserr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/ocsperr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/pem.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/pemerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/pkcs12err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/pkcs7.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/pkcs7err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/poly1305.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/ppc_arch.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/punycode.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/rand.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/rand_pool.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/randerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/riscv_arch.def delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/riscv_arch.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/rsa.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/rsaerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/security_bits.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/sha.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/siphash.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/siv.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/sm2.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/sm2err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/sm4.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/sm4_platform.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/sparc_arch.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/sparse_array.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/store.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/storeerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/tserr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/types.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/uierr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/x509.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/x509err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/crypto/x509v3err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/asn1.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/bio.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/bio_addr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/bio_tfo.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/common.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/comp.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/conf.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/constant_time.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/core.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/cryptlib.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/dane.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/deprecated.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/der.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/deterministic_nonce.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/dso.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/dsoerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/e_os.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/endian.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/event_queue.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/ffc.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/hpke_util.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/ktls.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/list.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/namemap.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/nelem.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/numbers.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/o_dir.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/packet.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/packet_quic.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/param_build_set.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/param_names.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/param_names.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/params.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/passphrase.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/priority_queue.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/property.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/propertyerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/provider.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_ackm.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_cc.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_cfq.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_channel.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_demux.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_error.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_fc.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_fifd.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_reactor.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_record_rx.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_record_tx.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_record_util.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_rx_depack.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_sf_list.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_ssl.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_statm.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_stream.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_stream_map.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_thread_assist.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_tls.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_tserver.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_txp.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_txpim.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_types.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_vlint.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_wire.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/quic_wire_pkt.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/recordmethod.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/refcount.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/ring_buf.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/safe_math.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/sha3.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/sizes.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/sm3.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/sockets.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/ssl.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/ssl3_cbc.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/sslconf.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/statem.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/symhacks.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/thread.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/thread_arch.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/thread_once.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/time.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/tlsgroups.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/tsan_assist.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/uint_set.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/internal/unicode.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/aes.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/asn1.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/asn1.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/asn1_mac.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/asn1err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/asn1t.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/asn1t.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/async.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/asyncerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/bio.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/bio.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/bioerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/blowfish.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/bn.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/bnerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/buffer.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/buffererr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/camellia.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/cast.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/cmac.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/cmp.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/cmp.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/cmp_util.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/cmperr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/cms.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/cms.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/cmserr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/comp.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/comperr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/conf.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/conf.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/conf_api.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/conferr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/configuration.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/configuration.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/conftypes.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/core.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/core_dispatch.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/core_names.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/core_names.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/core_object.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/crmf.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/crmf.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/crmferr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/crypto.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/crypto.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/cryptoerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/cryptoerr_legacy.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ct.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ct.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/cterr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/decoder.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/decodererr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/des.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/dh.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/dherr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/dsa.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/dsaerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/dtls1.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/e_os2.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/e_ostime.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ebcdic.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ec.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ecdh.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ecdsa.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ecerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/encoder.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/encodererr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/engine.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/engineerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/err.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ess.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ess.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/esserr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/evp.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/evperr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/fips_names.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/fipskey.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/fipskey.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/hmac.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/hpke.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/http.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/httperr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/idea.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/kdf.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/kdferr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/lhash.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/lhash.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/macros.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/md2.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/md4.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/md5.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/mdc2.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/modes.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/obj_mac.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/objects.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/objectserr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ocsp.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ocsp.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ocsperr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/opensslconf.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/opensslv.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/opensslv.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ossl_typ.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/param_build.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/params.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/pem.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/pem2.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/pemerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/pkcs12.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/pkcs12.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/pkcs12err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/pkcs7.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/pkcs7.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/pkcs7err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/prov_ssl.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/proverr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/provider.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/quic.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/rand.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/randerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/rc2.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/rc4.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/rc5.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ripemd.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/rsa.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/rsaerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/safestack.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/safestack.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/seed.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/self_test.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/sha.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/srp.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/srp.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/srtp.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ssl.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ssl.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ssl2.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ssl3.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/sslerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/sslerr_legacy.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/stack.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/store.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/storeerr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/symhacks.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/thread.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/tls1.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/trace.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ts.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/tserr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/txt_db.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/types.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ui.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/ui.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/uierr.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/whrlpool.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/x509.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/x509.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/x509_vfy.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/x509_vfy.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/x509err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/x509v3.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/x509v3.h.in delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/include/openssl/x509v3err.h delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/lib/libcrypto.a delete mode 100644 deps/openssl/ios/ios64-xcrun/usr/local/lib/libssl.a delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/aes_platform.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/aria.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/asn1.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/asn1_dsa.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/asn1err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/async.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/asyncerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/bioerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/bn.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/bn_conf.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/bn_conf.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/bn_dh.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/bn_srp.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/bnerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/buffererr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/chacha.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/cmll_platform.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/cmperr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/cmserr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/comperr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/conferr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/context.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/crmferr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/cryptlib.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/cryptoerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/cterr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/ctype.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/decoder.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/decodererr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/des_platform.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/dh.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/dherr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/dsa.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/dsaerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/dso_conf.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/dso_conf.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/ec.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/ecerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/ecx.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/encoder.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/encodererr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/engine.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/engineerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/ess.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/esserr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/evp.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/evperr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/httperr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/lhash.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/md32_common.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/modes.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/objects.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/objectserr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/ocsperr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/pem.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/pemerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/pkcs12err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/pkcs7.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/pkcs7err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/poly1305.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/ppc_arch.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/punycode.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/rand.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/rand_pool.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/randerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/riscv_arch.def delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/riscv_arch.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/rsa.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/rsaerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/security_bits.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/sha.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/siphash.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/siv.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/sm2.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/sm2err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/sm4.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/sm4_platform.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/sparc_arch.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/sparse_array.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/store.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/storeerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/tserr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/types.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/uierr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/x509.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/x509err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/crypto/x509v3err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/asn1.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/bio.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/bio_addr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/bio_tfo.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/common.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/comp.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/conf.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/constant_time.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/core.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/cryptlib.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/dane.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/deprecated.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/der.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/deterministic_nonce.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/dso.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/dsoerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/e_os.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/endian.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/event_queue.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/ffc.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/hpke_util.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/ktls.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/list.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/namemap.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/nelem.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/numbers.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/o_dir.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/packet.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/packet_quic.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/param_build_set.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/param_names.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/param_names.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/params.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/passphrase.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/priority_queue.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/property.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/propertyerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/provider.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_ackm.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_cc.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_cfq.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_channel.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_demux.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_error.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_fc.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_fifd.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_reactor.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_record_rx.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_record_tx.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_record_util.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_rx_depack.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_sf_list.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_ssl.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_statm.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_stream.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_stream_map.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_thread_assist.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_tls.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_tserver.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_txp.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_txpim.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_types.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_vlint.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_wire.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/quic_wire_pkt.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/recordmethod.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/refcount.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/ring_buf.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/safe_math.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/sha3.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/sizes.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/sm3.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/sockets.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/ssl.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/ssl3_cbc.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/sslconf.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/statem.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/symhacks.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/thread.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/thread_arch.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/thread_once.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/time.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/tlsgroups.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/tsan_assist.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/uint_set.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/internal/unicode.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/aes.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/asn1.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/asn1.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/asn1_mac.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/asn1err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/asn1t.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/asn1t.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/async.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/asyncerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/bio.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/bio.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/bioerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/blowfish.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/bn.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/bnerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/buffer.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/buffererr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/camellia.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/cast.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/cmac.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/cmp.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/cmp.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/cmp_util.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/cmperr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/cms.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/cms.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/cmserr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/comp.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/comperr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/conf.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/conf.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/conf_api.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/conferr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/configuration.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/configuration.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/conftypes.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/core.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/core_dispatch.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/core_names.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/core_names.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/core_object.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/crmf.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/crmf.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/crmferr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/crypto.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/crypto.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/cryptoerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/cryptoerr_legacy.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ct.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ct.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/cterr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/decoder.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/decodererr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/des.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/dh.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/dherr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/dsa.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/dsaerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/dtls1.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/e_os2.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/e_ostime.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ebcdic.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ec.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ecdh.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ecdsa.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ecerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/encoder.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/encodererr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/engine.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/engineerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/err.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ess.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ess.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/esserr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/evp.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/evperr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/fips_names.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/fipskey.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/fipskey.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/hmac.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/hpke.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/http.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/httperr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/idea.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/kdf.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/kdferr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/lhash.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/lhash.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/macros.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/md2.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/md4.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/md5.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/mdc2.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/modes.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/obj_mac.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/objects.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/objectserr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ocsp.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ocsp.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ocsperr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/opensslconf.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/opensslv.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/opensslv.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ossl_typ.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/param_build.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/params.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/pem.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/pem2.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/pemerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/pkcs12.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/pkcs12.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/pkcs12err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/pkcs7.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/pkcs7.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/pkcs7err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/prov_ssl.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/proverr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/provider.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/quic.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/rand.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/randerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/rc2.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/rc4.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/rc5.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ripemd.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/rsa.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/rsaerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/safestack.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/safestack.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/seed.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/self_test.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/sha.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/srp.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/srp.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/srtp.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ssl.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ssl.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ssl2.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ssl3.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/sslerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/sslerr_legacy.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/stack.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/store.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/storeerr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/symhacks.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/thread.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/tls1.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/trace.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ts.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/tserr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/txt_db.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/types.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ui.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/ui.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/uierr.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/whrlpool.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/x509.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/x509.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/x509_vfy.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/x509_vfy.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/x509err.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/x509v3.h delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/x509v3.h.in delete mode 100644 deps/openssl/ios/iossimulator-xcrun/usr/local/include/openssl/x509v3err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/aes_platform.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/aria.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/asn1.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/asn1_dsa.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/asn1err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/async.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/asyncerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/bioerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/bn.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/bn_conf.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/bn_conf.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/bn_dh.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/bn_srp.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/bnerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/buffererr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/chacha.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/cmll_platform.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/cmperr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/cmserr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/comperr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/conferr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/context.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/crmferr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/cryptlib.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/cryptoerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/cterr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/ctype.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/decoder.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/decodererr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/des_platform.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/dh.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/dherr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/dsa.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/dsaerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/dso_conf.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/dso_conf.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/ec.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/ecerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/ecx.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/encoder.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/encodererr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/engine.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/engineerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/ess.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/esserr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/evp.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/evperr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/httperr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/lhash.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/md32_common.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/modes.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/objects.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/objectserr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/ocsperr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/pem.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/pemerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/pkcs12err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/pkcs7.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/pkcs7err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/poly1305.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/ppc_arch.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/punycode.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/rand.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/rand_pool.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/randerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/riscv_arch.def delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/riscv_arch.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/rsa.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/rsaerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/security_bits.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/sha.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/siphash.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/siv.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/sm2.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/sm2err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/sm4.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/sm4_platform.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/sparc_arch.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/sparse_array.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/store.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/storeerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/tserr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/types.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/uierr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/x509.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/x509err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/crypto/x509v3err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/asn1.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/bio.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/bio_addr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/bio_tfo.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/common.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/comp.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/conf.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/constant_time.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/core.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/cryptlib.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/dane.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/deprecated.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/der.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/deterministic_nonce.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/dso.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/dsoerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/e_os.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/endian.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/event_queue.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/ffc.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/hpke_util.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/ktls.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/list.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/namemap.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/nelem.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/numbers.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/o_dir.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/packet.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/packet_quic.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/param_build_set.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/param_names.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/param_names.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/params.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/passphrase.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/priority_queue.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/property.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/propertyerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/provider.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_ackm.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_cc.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_cfq.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_channel.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_demux.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_error.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_fc.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_fifd.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_reactor.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_record_rx.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_record_tx.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_record_util.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_rx_depack.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_sf_list.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_ssl.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_statm.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_stream.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_stream_map.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_thread_assist.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_tls.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_tserver.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_txp.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_txpim.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_types.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_vlint.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_wire.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/quic_wire_pkt.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/recordmethod.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/refcount.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/ring_buf.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/safe_math.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/sha3.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/sizes.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/sm3.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/sockets.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/ssl.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/ssl3_cbc.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/sslconf.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/statem.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/symhacks.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/thread.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/thread_arch.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/thread_once.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/time.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/tlsgroups.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/tsan_assist.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/uint_set.h delete mode 100644 deps/openssl/mingw64/usr/local/include/internal/unicode.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/aes.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/asn1.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/asn1.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/asn1_mac.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/asn1err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/asn1t.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/asn1t.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/async.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/asyncerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/bio.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/bio.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/bioerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/blowfish.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/bn.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/bnerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/buffer.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/buffererr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/camellia.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/cast.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/cmac.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/cmp.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/cmp.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/cmp_util.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/cmperr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/cms.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/cms.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/cmserr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/comp.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/comperr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/conf.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/conf.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/conf_api.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/conferr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/configuration.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/configuration.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/conftypes.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/core.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/core_dispatch.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/core_names.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/core_names.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/core_object.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/crmf.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/crmf.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/crmferr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/crypto.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/crypto.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/cryptoerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/cryptoerr_legacy.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ct.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ct.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/cterr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/decoder.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/decodererr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/des.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/dh.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/dherr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/dsa.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/dsaerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/dtls1.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/e_os2.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/e_ostime.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ebcdic.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ec.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ecdh.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ecdsa.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ecerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/encoder.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/encodererr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/engine.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/engineerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/err.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ess.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ess.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/esserr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/evp.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/evperr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/fips_names.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/fipskey.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/fipskey.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/hmac.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/hpke.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/http.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/httperr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/idea.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/kdf.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/kdferr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/lhash.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/lhash.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/macros.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/md2.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/md4.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/md5.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/mdc2.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/modes.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/obj_mac.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/objects.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/objectserr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ocsp.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ocsp.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ocsperr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/opensslconf.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/opensslv.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/opensslv.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ossl_typ.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/param_build.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/params.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/pem.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/pem2.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/pemerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/pkcs12.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/pkcs12.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/pkcs12err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/pkcs7.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/pkcs7.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/pkcs7err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/prov_ssl.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/proverr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/provider.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/quic.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/rand.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/randerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/rc2.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/rc4.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/rc5.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ripemd.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/rsa.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/rsaerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/safestack.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/safestack.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/seed.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/self_test.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/sha.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/srp.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/srp.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/srtp.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ssl.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ssl.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ssl2.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ssl3.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/sslerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/sslerr_legacy.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/stack.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/store.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/storeerr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/symhacks.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/thread.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/tls1.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/trace.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ts.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/tserr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/txt_db.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/types.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ui.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/ui.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/uierr.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/whrlpool.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/x509.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/x509.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/x509_vfy.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/x509_vfy.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/x509err.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/x509v3.h delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/x509v3.h.in delete mode 100644 deps/openssl/mingw64/usr/local/include/openssl/x509v3err.h delete mode 100644 deps/openssl/mingw64/usr/local/lib/libcrypto.a delete mode 100644 deps/openssl/mingw64/usr/local/lib/libssl.a diff --git a/.gitignore b/.gitignore index 0c34bddb..77d3951a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .keys +deps/openssl/ +geckodriver.log out 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 deleted file mode 100644 index e57c0eab..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/__DECC_INCLUDE_EPILOGUE.H +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 file is only used by HP C on VMS, and is included automatically - * after each header file from this directory - */ - -/* restore state. Must correspond to the save in __decc_include_prologue.h */ -#pragma names restore 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 deleted file mode 100644 index a0139575..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/__DECC_INCLUDE_PROLOGUE.H +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 file is only used by HP C on VMS, and is included automatically - * after each header file from this directory - */ - -/* save state */ -#pragma names save -/* have the compiler shorten symbols larger than 31 chars to 23 chars - * followed by a 8 hex char CRC - */ -#pragma names as_is,shortened 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 deleted file mode 100644 index a7cae5d4..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/aes_platform.h +++ /dev/null @@ -1,514 +0,0 @@ -/* - * Copyright 2019-2024 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef OSSL_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 -# if !defined(OPENSSL_SYS_AIX) && !defined(OPENSSL_SYS_MACOSX) -# 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 -# 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__) || defined(_M_ARM64)) -# 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__) || defined(_M_ARM64)) -# 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__) || defined(_M_ARM64)) -# 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" - -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" - -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 deleted file mode 100644 index 21a9932e..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/aria.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2017, 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 - */ - - /* Copyright (c) 2017 National Security Research Institute. All rights reserved. */ - -#ifndef OSSL_CRYPTO_ARIA_H -# define OSSL_CRYPTO_ARIA_H -# pragma once - -# include - -# ifdef OPENSSL_NO_ARIA -# error ARIA is disabled. -# endif - -# define ARIA_ENCRYPT 1 -# define ARIA_DECRYPT 0 - -# define ARIA_BLOCK_SIZE 16 /* Size of each encryption/decryption block */ -# define ARIA_MAX_KEYS 17 /* Number of keys needed in the worst case */ - -typedef union { - unsigned char c[ARIA_BLOCK_SIZE]; - unsigned int u[ARIA_BLOCK_SIZE / sizeof(unsigned int)]; -} ARIA_u128; - -typedef unsigned char ARIA_c128[ARIA_BLOCK_SIZE]; - -struct aria_key_st { - ARIA_u128 rd_key[ARIA_MAX_KEYS]; - unsigned int rounds; -}; -typedef struct aria_key_st ARIA_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 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 deleted file mode 100644 index 36af1d76..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright 2015-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_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, 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, - ASN1_PCTX *pctx); - int (*priv_decode) (EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf); - int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk); - int (*priv_print) (BIO *out, const EVP_PKEY *pkey, int indent, - ASN1_PCTX *pctx); - int (*pkey_size) (const EVP_PKEY *pk); - int (*pkey_bits) (const EVP_PKEY *pk); - int (*pkey_security_bits) (const EVP_PKEY *pk); - int (*param_decode) (EVP_PKEY *pkey, - const unsigned char **pder, int derlen); - int (*param_encode) (const EVP_PKEY *pkey, unsigned char **pder); - int (*param_missing) (const EVP_PKEY *pk); - int (*param_copy) (EVP_PKEY *to, const EVP_PKEY *from); - int (*param_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); - int (*param_print) (BIO *out, const EVP_PKEY *pkey, int indent, - ASN1_PCTX *pctx); - int (*sig_print) (BIO *out, - const X509_ALGOR *sigalg, const ASN1_STRING *sig, - int indent, ASN1_PCTX *pctx); - void (*pkey_free) (EVP_PKEY *pkey); - int (*pkey_ctrl) (EVP_PKEY *pkey, int op, long arg1, void *arg2); - /* Legacy functions for old PEM */ - int (*old_priv_decode) (EVP_PKEY *pkey, - 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, 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, - const ASN1_STRING *sig); - /* Check */ - int (*pkey_check) (const EVP_PKEY *pk); - int (*pkey_public_check) (const EVP_PKEY *pk); - int (*pkey_param_check) (const EVP_PKEY *pk); - /* Get/set raw private/public key data */ - int (*set_priv_key) (EVP_PKEY *pk, const unsigned char *priv, size_t len); - 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 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 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 - * names and data need to be free()ed - */ -# define ASN1_OBJECT_FLAG_DYNAMIC 0x01/* internal use */ -# define ASN1_OBJECT_FLAG_CRITICAL 0x02/* critical x509v3 object id */ -# define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04/* internal use */ -# define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08/* internal use */ -struct asn1_object_st { - const char *sn, *ln; - int nid; - int length; - const unsigned char *data; /* data remains const after init */ - int flags; /* Should we free this one */ -}; - -/* ASN1 print context structure */ - -struct asn1_pctx_st { - unsigned long flags; - unsigned long nm_flags; - unsigned long cert_flags; - unsigned long oid_flags; - unsigned long str_flags; -} /* ASN1_PCTX */ ; - -/* 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); -X509_ALGOR *ossl_X509_ALGOR_from_nid(int nid, int ptype, void *pval); - -time_t ossl_asn1_string_to_time_t(const char *asn1_string); -void ossl_asn1_string_set_bits_left(ASN1_STRING *str, unsigned int num); - -#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 deleted file mode 100644 index 3eadb9ec..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1_dsa.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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 deleted file mode 100644 index 6441386b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1err.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 7bc0dbb6..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/async.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * 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 OSSL_CRYPTO_ASYNC_H -# define OSSL_CRYPTO_ASYNC_H -# pragma once - -# include - -int async_init(void); -void async_deinit(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 deleted file mode 100644 index 574e0af7..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asyncerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index e38b981a..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bioerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 33f979ce..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2014-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_BN_H -# define OSSL_CRYPTO_BN_H -# pragma once - -# include -# include - -BIGNUM *bn_wexpand(BIGNUM *a, int words); -BIGNUM *bn_expand2(BIGNUM *a, int words); - -void bn_correct_top(BIGNUM *a); - -/* - * Determine the modified width-(w+1) Non-Adjacent Form (wNAF) of 'scalar'. - * This is an array r[] of values that are either zero or odd with an - * absolute value less than 2^w satisfying scalar = \sum_j r[j]*2^j where at - * most one of any w+1 consecutive digits is non-zero with the exception that - * the most significant digit may be only w-1 zeros away from that next - * non-zero digit. - */ -signed char *bn_compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len); - -int bn_get_top(const BIGNUM *a); - -int bn_get_dmax(const BIGNUM *a); - -/* Set all words to zero */ -void bn_set_all_zero(BIGNUM *a); - -/* - * Copy the internal BIGNUM words into out which holds size elements (and size - * must be bigger than top) - */ -int bn_copy_words(BN_ULONG *out, const BIGNUM *in, int size); - -BN_ULONG *bn_get_words(const BIGNUM *a); - -/* - * Set the internal data words in a to point to words which contains size - * elements. The BN_FLG_STATIC_DATA flag is set - */ -void bn_set_static_words(BIGNUM *a, const BN_ULONG *words, int size); - -/* - * Copy words into the BIGNUM |a|, reallocating space as necessary. - * The negative flag of |a| is not modified. - * Returns 1 on success and 0 on failure. - */ -/* - * |num_words| is int because bn_expand2 takes an int. This is an internal - * function so we simply trust callers not to pass negative values. - */ -int bn_set_words(BIGNUM *a, const BN_ULONG *words, int num_words); - -/* - * Some BIGNUM functions assume most significant limb to be non-zero, which - * is customarily arranged by bn_correct_top. Output from below functions - * is not processed with bn_correct_top, and for this reason it may not be - * returned out of public API. It may only be passed internally into other - * functions known to support non-minimal or zero-padded BIGNUMs. Even - * though the goal is to facilitate constant-time-ness, not each subroutine - * is constant-time by itself. They all have pre-conditions, consult source - * code... - */ -int bn_mul_mont_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - BN_MONT_CTX *mont, BN_CTX *ctx); -int bn_to_mont_fixed_top(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); -int bn_from_mont_fixed_top(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); -int bn_mod_add_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int bn_mod_sub_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int bn_mul_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -int bn_sqr_fixed_top(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); -int bn_lshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n); -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; - -#if defined(OPENSSL_SYS_LINUX) && !defined(FIPS_MODULE) && defined (__s390x__) -# define S390X_MOD_EXP -#endif - -int s390x_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int s390x_crt(BIGNUM *r, const BIGNUM *i, const BIGNUM *p, const BIGNUM *q, - const BIGNUM *dmp, const BIGNUM *dmq, const BIGNUM *iqmp); - -#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 deleted file mode 100644 index 0347a6dd..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_conf.h +++ /dev/null @@ -1,29 +0,0 @@ -/* WARNING: do not edit! */ -/* Generated by Makefile from include/crypto/bn_conf.h.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 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 - * both 32-bit and 64-bit builds are supported from a single run - * of the Configure script. - */ - -/* Should we define BN_DIV2W here? */ - -/* Only one for the following should be defined */ -#define SIXTY_FOUR_BIT_LONG -#undef SIXTY_FOUR_BIT -#undef THIRTY_TWO_BIT - -#endif 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 deleted file mode 100644 index dbc901b1..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_conf.h.in +++ /dev/null @@ -1,28 +0,0 @@ -{- join("\n",map { "/* $_ */" } @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 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 - * both 32-bit and 64-bit builds are supported from a single run - * of the Configure script. - */ - -/* Should we define BN_DIV2W here? */ - -/* 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 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 deleted file mode 100644 index 6d12c20e..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_dh.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 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 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 deleted file mode 100644 index 00b160aa..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn_srp.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_SRP - -extern const BIGNUM ossl_bn_group_1024; - -extern const BIGNUM ossl_bn_group_1536; - -extern const BIGNUM ossl_bn_group_2048; - -extern const BIGNUM ossl_bn_group_3072; - -extern const BIGNUM ossl_bn_group_4096; - -extern const BIGNUM ossl_bn_group_6144; - -extern const BIGNUM ossl_bn_group_8192; - -extern const BIGNUM ossl_bn_generator_19; - -extern const BIGNUM ossl_bn_generator_5; - -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 deleted file mode 100644 index 131e30fa..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bnerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 54976d95..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/buffererr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index d29998ff..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/chacha.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. 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_CHACHA_H -#define OSSL_CRYPTO_CHACHA_H -# pragma once - -#include - -/* - * ChaCha20_ctr32 encrypts |len| bytes from |inp| with the given key and - * nonce and writes the result to |out|, which may be equal to |inp|. - * The |key| is not 32 bytes of verbatim key material though, but the - * said material collected into 8 32-bit elements array in host byte - * order. Same approach applies to nonce: the |counter| argument is - * pointer to concatenated nonce and counter values collected into 4 - * 32-bit elements. This, passing crypto material collected into 32-bit - * elements as opposite to passing verbatim byte vectors, is chosen for - * efficiency in multi-call scenarios. - */ -void ChaCha20_ctr32(unsigned char *out, const unsigned char *inp, - size_t len, const unsigned int key[8], - const unsigned int counter[4]); -/* - * You can notice that there is no key setup procedure. Because it's - * as trivial as collecting bytes into 32-bit elements, it's reckoned - * that below macro is sufficient. - */ -#define CHACHA_U8TOU32(p) ( \ - ((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 - -#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 deleted file mode 100644 index 8cadadf6..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmll_platform.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2bd16373..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmperr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index a7fcf11f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmserr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 0fd9c6de..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/comperr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index fc964512..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/conferr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 7369a730..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/context.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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 - */ - -#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 *); -int ossl_thread_register_fips(OSSL_LIB_CTX *); -void *ossl_thread_event_ctx_new(OSSL_LIB_CTX *); -void *ossl_fips_prov_ossl_ctx_new(OSSL_LIB_CTX *); -#if defined(OPENSSL_THREADS) -void *ossl_threads_ctx_new(OSSL_LIB_CTX *); -#endif - -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); -#if defined(OPENSSL_THREADS) -void ossl_threads_ctx_free(void *); -#endif 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 deleted file mode 100644 index f1a27e04..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/crmferr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index 39a956bf..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cryptlib.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 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 */ - -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_BASE_ONLY 0x00040000L - -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 deleted file mode 100644 index 1b6192e3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cryptoerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 760bc796..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cterr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index 22f69221..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ctype.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2017-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 version of ctype.h provides a standardised and platform - * independent implementation that supports seven bit ASCII characters. - * The specific intent is to not pass extended ASCII characters (> 127) - * even if the host operating system would. - * - * There is EBCDIC support included for machines which use this. However, - * there are a number of concerns about how well EBCDIC is supported - * throughout the rest of the source code. Refer to issue #4154 for - * details. - */ -#ifndef OSSL_CRYPTO_CTYPE_H -# define OSSL_CRYPTO_CTYPE_H -# pragma once - -# include - -# define CTYPE_MASK_lower 0x1 -# define CTYPE_MASK_upper 0x2 -# define CTYPE_MASK_digit 0x4 -# define CTYPE_MASK_space 0x8 -# define CTYPE_MASK_xdigit 0x10 -# define CTYPE_MASK_blank 0x20 -# define CTYPE_MASK_cntrl 0x40 -# define CTYPE_MASK_graph 0x80 -# define CTYPE_MASK_print 0x100 -# define CTYPE_MASK_punct 0x200 -# define CTYPE_MASK_base64 0x400 -# define CTYPE_MASK_asn1print 0x800 - -# define CTYPE_MASK_alpha (CTYPE_MASK_lower | CTYPE_MASK_upper) -# define CTYPE_MASK_alnum (CTYPE_MASK_alpha | CTYPE_MASK_digit) - -/* - * The ascii mask assumes that any other classification implies that - * the character is ASCII and that there are no ASCII characters - * that aren't in any of the classifications. - * - * This assumption holds at the moment, but it might not in the future. - */ -# define CTYPE_MASK_ascii (~0) - -# ifdef CHARSET_EBCDIC -int ossl_toascii(int c); -int ossl_fromascii(int c); -# else -# define ossl_toascii(c) (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 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)) -# ifdef CHARSET_EBCDIC -# define ossl_isascii(c) (ossl_ctype_check((c), CTYPE_MASK_ascii)) -# else -# define ossl_isascii(c) (((c) & ~127) == 0) -# 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_isgraph(c) (ossl_ctype_check((c), CTYPE_MASK_graph)) -# 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_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 deleted file mode 100644 index a0d5de65..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/decoder.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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_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); -OSSL_DECODER_INSTANCE *ossl_decoder_instance_dup(const OSSL_DECODER_INSTANCE *src); -int ossl_decoder_ctx_add_decoder_inst(OSSL_DECODER_CTX *ctx, - OSSL_DECODER_INSTANCE *di); - -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); - -void *ossl_decoder_cache_new(OSSL_LIB_CTX *ctx); -void ossl_decoder_cache_free(void *vcache); -int ossl_decoder_cache_flush(OSSL_LIB_CTX *libctx); - -#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 deleted file mode 100644 index d7badc43..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/decodererr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 07ea1ddd..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/des_platform.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 deleted file mode 100644 index 51232d18..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dh.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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 deleted file mode 100644 index 519327f7..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dherr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 85d92a18..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsa.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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, - unsigned int nonce_type, const char *digestname, - OSSL_LIB_CTX *libctx, const char *propq); - -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 deleted file mode 100644 index fde8358f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsaerr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index 6d9c478c..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dso_conf.h +++ /dev/null @@ -1,18 +0,0 @@ -/* WARNING: do not edit! */ -/* Generated by Makefile from include/crypto/dso_conf.h.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 OSSL_CRYPTO_DSO_CONF_H -# define OSSL_CRYPTO_DSO_CONF_H -# pragma once - -# define DSO_NONE -# define DSO_EXTENSION ".so" -#endif 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 deleted file mode 100644 index 12de11ad..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dso_conf.h.in +++ /dev/null @@ -1,33 +0,0 @@ -{- join("\n",map { "/* $_ */" } @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 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 - # has support compiled in for them. Currently each method is enabled - # by a define "DSO_" ... we translate the "dso_scheme" config - # string entry into using the following logic; - my $scheme = $disabled{dso} ? undef : uc $target{dso_scheme}; - if (!$scheme) { - $scheme = "NONE"; - } - my @macros = ( "DSO_$scheme" ); - if ($scheme eq 'DLFCN') { - @macros = ( "DSO_DLFCN", "HAVE_DLFCN_H" ); - } elsif ($scheme eq "DLFCN_NO_H") { - @macros = ( "DSO_DLFCN" ); - } - join("\n", map { "# define $_" } @macros); -} -# 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 deleted file mode 100644 index da85a7bd..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ec.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * 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 - */ - -/* Internal EC functions for other submodules: not for application use */ - -#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 - * [1,EC_GROUP::order), where EC_GROUP::order is the cardinality of the - * subgroup generated by the generator G: - * - * res := x^(-1) (mod EC_GROUP::order). - * - * This function expects the following two conditions to hold: - * - the EC_GROUP order is prime, and - * - x is included in the range [1, EC_GROUP::order). - * - * This function returns 1 on success, 0 on error. - * - * If the EC_GROUP order is even, this function explicitly returns 0 as - * an error. - * In case any of the two conditions stated above is not satisfied, - * the correctness of its output is not guaranteed, even if the return - * value could still be 1 (as primality testing and a conditional modular - * reduction round on the input can be omitted by the underlying - * implementations for better SCA properties on regular input values). - */ -__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 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); -int ossl_ec_generate_key_dhkem(EC_KEY *eckey, - const unsigned char *ikm, size_t ikmlen); -int ossl_ecdsa_deterministic_sign(const unsigned char *dgst, int dlen, - unsigned char *sig, unsigned int *siglen, - EC_KEY *eckey, unsigned int nonce_type, - const char *digestname, - OSSL_LIB_CTX *libctx, const char *propq); -# 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 deleted file mode 100644 index 782526bf..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecerr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index f35b875f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecx.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - * 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 - */ - -/* 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_ECX - -# 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; -}; - -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_ecx_compute_key(ECX_KEY *peer, ECX_KEY *priv, size_t keylen, - unsigned char *secret, size_t *secretlen, - size_t outlen); - -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 *tbs, size_t tbs_len, - const uint8_t public_key[32], const uint8_t private_key[32], - const uint8_t dom2flag, const uint8_t phflag, const uint8_t csflag, - const uint8_t *context, size_t context_len, - OSSL_LIB_CTX *libctx, const char *propq); -int -ossl_ed25519_verify(const uint8_t *tbs, size_t tbs_len, - const uint8_t signature[64], const uint8_t public_key[32], - const uint8_t dom2flag, const uint8_t phflag, const uint8_t csflag, - const uint8_t *context, size_t context_len, - 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 uint8_t phflag, 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 uint8_t phflag, 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_ECX */ -#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 deleted file mode 100644 index 6240438d..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/encoder.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 56c45823..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/encodererr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index fac6ed09..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/engine.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 engine_load_openssl_int(void); -void engine_load_devcrypto_int(void); -void engine_load_rdrand_int(void); -void engine_load_dynamic_int(void); -void engine_load_padlock_int(void); -void engine_load_capi_int(void); -void engine_load_dasync_int(void); -void engine_load_afalg_int(void); -void engine_cleanup_int(void); 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 deleted file mode 100644 index 737c841d..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/engineerr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index 15ec6fd0..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/err.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 OSSL_CRYPTO_ERR_H -# define OSSL_CRYPTO_ERR_H -# pragma once - -int ossl_err_load_ERR_strings(void); -int ossl_err_load_crypto_strings(void); -void err_cleanup(void); -int err_shelve_state(void **); -void err_unshelve_state(void *); - -#endif 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 deleted file mode 100644 index 7acde5f8..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ess.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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 deleted file mode 100644 index 8df2df11..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/esserr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 34cea2f9..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evp.h +++ /dev/null @@ -1,970 +0,0 @@ -/* - * Copyright 2015-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_EVP_H -# define OSSL_CRYPTO_EVP_H -# pragma once - -# include -# include -# include "internal/refcount.h" -# include "crypto/ecx.h" - -/* - * Default PKCS5 PBE KDF salt lengths - * In RFC 8018, PBE1 uses 8 bytes (64 bits) for its salt length. - * It also specifies to use at least 8 bytes for PBES2. - * The NIST requirement for PBKDF2 is 128 bits so we use this as the - * default for PBE2 (scrypt and HKDF2) - */ -# define PKCS5_DEFAULT_PBE1_SALT_LEN PKCS5_SALT_LEN -# define PKCS5_DEFAULT_PBE2_SALT_LEN 16 -/* - * Don't free up md_ctx->pctx in EVP_MD_CTX_reset, use the reserved flag - * values in evp.h - */ -#define EVP_MD_CTX_FLAG_KEEP_PKEY_CTX 0x0400 -#define EVP_MD_CTX_FLAG_FINALISED 0x0800 - -#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 */ - ENGINE *engine; - /* Key: may be NULL */ - EVP_PKEY *pkey; - /* Peer key for key agreement, may be NULL */ - EVP_PKEY *peerkey; - /* Algorithm specific data */ - void *data; - /* 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 - -struct evp_pkey_method_st { - int pkey_id; - int flags; - int (*init) (EVP_PKEY_CTX *ctx); - 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); - int (*keygen_init) (EVP_PKEY_CTX *ctx); - int (*keygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey); - 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); - 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); - int (*verify_recover_init) (EVP_PKEY_CTX *ctx); - int (*verify_recover) (EVP_PKEY_CTX *ctx, - unsigned char *rout, size_t *routlen, - const unsigned char *sig, size_t siglen); - 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); - int (*verifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx); - int (*verifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen, - EVP_MD_CTX *mctx); - int (*encrypt_init) (EVP_PKEY_CTX *ctx); - int (*encrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, - const unsigned char *in, size_t inlen); - 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); - int (*derive_init) (EVP_PKEY_CTX *ctx); - int (*derive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); - 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); - int (*digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, - const unsigned char *tbs, size_t tbslen); - int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, - size_t siglen, const unsigned char *tbs, - size_t tbslen); - int (*check) (EVP_PKEY *pkey); - int (*public_check) (EVP_PKEY *pkey); - int (*param_check) (EVP_PKEY *pkey); - - int (*digest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx); -} /* EVP_PKEY_METHOD */ ; - -DEFINE_STACK_OF_CONST(EVP_PKEY_METHOD) - -void evp_pkey_set_cb_translate(BN_GENCB *cb, EVP_PKEY_CTX *ctx); - -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; - - 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; - - 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); - int (*copy) (EVP_MD_CTX *to, const EVP_MD_CTX *from); - int (*cleanup) (EVP_MD_CTX *ctx); - int block_size; - 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; - 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); - /* encrypt/decrypt data */ - int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, - const unsigned char *in, size_t inl); - /* cleanup ctx */ - int (*cleanup) (EVP_CIPHER_CTX *); - /* how big ctx->cipher_data needs to be */ - int ctx_size; - /* Populate a ASN1_TYPE with parameters */ - int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); - /* Get parameters from a ASN1_TYPE */ - int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); - /* Miscellaneous operations */ - 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; - 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 */ - -/* Wrapper functions for each cipher mode */ - -#define EVP_C_DATA(kstruct, ctx) \ - ((kstruct *)EVP_CIPHER_CTX_get_cipher_data(ctx)) - -#define BLOCK_CIPHER_ecb_loop() \ - size_t i, bl; \ - bl = EVP_CIPHER_CTX_get0_cipher(ctx)->block_size; \ - if (inl < bl) return 1;\ - inl -= bl; \ - for (i=0; i <= inl; i+=bl) - -#define BLOCK_CIPHER_func_ecb(cname, cprefix, kstruct, ksched) \ -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_is_encrypting(ctx)); \ - return 1;\ -} - -#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_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_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;\ -} - -#define BLOCK_CIPHER_func_cbc(cname, cprefix, kstruct, ksched) \ -static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ -{\ - while(inl>=EVP_MAXCHUNK) \ - {\ - 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, ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx));\ - return 1;\ -} - -#define BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \ -static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ -{\ - size_t chunk = EVP_MAXCHUNK;\ - if (cbits == 1) chunk >>= 3;\ - if (inl < chunk) chunk = inl;\ - while (inl && inl >= chunk)\ - {\ - 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, ctx->iv,\ - &num, EVP_CIPHER_CTX_is_encrypting(ctx));\ - EVP_CIPHER_CTX_set_num(ctx, num);\ - inl -= chunk;\ - in += chunk;\ - out += chunk;\ - if (inl < chunk) chunk = inl;\ - }\ - return 1;\ -} - -#define BLOCK_CIPHER_all_funcs(cname, cprefix, cbits, kstruct, ksched) \ - BLOCK_CIPHER_func_cbc(cname, cprefix, kstruct, ksched) \ - BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \ - BLOCK_CIPHER_func_ecb(cname, cprefix, kstruct, ksched) \ - BLOCK_CIPHER_func_ofb(cname, cprefix, cbits, kstruct, ksched) - -#define BLOCK_CIPHER_def1(cname, nmode, mode, MODE, kstruct, nid, block_size, \ - key_len, iv_len, flags, init_key, cleanup, \ - set_asn1, get_asn1, ctrl) \ -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, \ - sizeof(kstruct), \ - set_asn1, get_asn1,\ - ctrl, \ - NULL \ -}; \ -const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; } - -#define BLOCK_CIPHER_def_cbc(cname, kstruct, nid, block_size, key_len, \ - iv_len, flags, init_key, cleanup, set_asn1, \ - get_asn1, ctrl) \ -BLOCK_CIPHER_def1(cname, cbc, cbc, CBC, kstruct, nid, block_size, key_len, \ - iv_len, flags, init_key, cleanup, set_asn1, get_asn1, ctrl) - -#define BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, \ - iv_len, cbits, flags, init_key, cleanup, \ - set_asn1, get_asn1, ctrl) \ -BLOCK_CIPHER_def1(cname, cfb##cbits, cfb##cbits, CFB, kstruct, nid, 1, \ - key_len, iv_len, flags, init_key, cleanup, set_asn1, \ - get_asn1, ctrl) - -#define BLOCK_CIPHER_def_ofb(cname, kstruct, nid, key_len, \ - iv_len, cbits, flags, init_key, cleanup, \ - set_asn1, get_asn1, ctrl) \ -BLOCK_CIPHER_def1(cname, ofb##cbits, ofb, OFB, kstruct, nid, 1, \ - key_len, iv_len, flags, init_key, cleanup, set_asn1, \ - get_asn1, ctrl) - -#define BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, \ - flags, init_key, cleanup, set_asn1, \ - get_asn1, ctrl) \ -BLOCK_CIPHER_def1(cname, ecb, ecb, ECB, kstruct, nid, block_size, key_len, \ - 0, flags, init_key, cleanup, set_asn1, get_asn1, ctrl) - -#define BLOCK_CIPHER_defs(cname, kstruct, \ - nid, block_size, key_len, iv_len, cbits, flags, \ - init_key, cleanup, set_asn1, get_asn1, ctrl) \ -BLOCK_CIPHER_def_cbc(cname, kstruct, nid, block_size, key_len, iv_len, flags, \ - init_key, cleanup, set_asn1, get_asn1, ctrl) \ -BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, iv_len, cbits, \ - flags, init_key, cleanup, set_asn1, get_asn1, ctrl) \ -BLOCK_CIPHER_def_ofb(cname, kstruct, nid, key_len, iv_len, cbits, \ - flags, init_key, cleanup, set_asn1, get_asn1, ctrl) \ -BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, flags, \ - init_key, cleanup, set_asn1, get_asn1, ctrl) - -/*- -#define BLOCK_CIPHER_defs(cname, kstruct, \ - nid, block_size, key_len, iv_len, flags,\ - init_key, cleanup, set_asn1, get_asn1, ctrl)\ -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,\ - sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+\ - sizeof((((EVP_CIPHER_CTX *)NULL)->c.kstruct)),\ - set_asn1, get_asn1,\ - ctrl, \ - NULL \ -};\ -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,\ - sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+\ - sizeof((((EVP_CIPHER_CTX *)NULL)->c.kstruct)),\ - set_asn1, get_asn1,\ - ctrl,\ - NULL \ -};\ -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,\ - sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+\ - sizeof((((EVP_CIPHER_CTX *)NULL)->c.kstruct)),\ - set_asn1, get_asn1,\ - ctrl,\ - NULL \ -};\ -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,\ - sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+\ - sizeof((((EVP_CIPHER_CTX *)NULL)->c.kstruct)),\ - set_asn1, get_asn1,\ - ctrl,\ - NULL \ -};\ -const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; } -*/ - -#define IMPLEMENT_BLOCK_CIPHER(cname, ksched, cprefix, kstruct, nid, \ - block_size, key_len, iv_len, cbits, \ - flags, init_key, \ - cleanup, set_asn1, get_asn1, ctrl) \ - BLOCK_CIPHER_all_funcs(cname, cprefix, cbits, kstruct, ksched) \ - BLOCK_CIPHER_defs(cname, kstruct, nid, block_size, key_len, iv_len, \ - cbits, flags, init_key, cleanup, set_asn1, \ - get_asn1, ctrl) - -#define IMPLEMENT_CFBR(cipher,cprefix,kstruct,ksched,keysize,cbits,iv_len,fl) \ - BLOCK_CIPHER_func_cfb(cipher##_##keysize,cprefix,cbits,kstruct,ksched) \ - BLOCK_CIPHER_def_cfb(cipher##_##keysize,kstruct, \ - NID_##cipher##_##keysize, keysize/8, iv_len, cbits, \ - (fl)|EVP_CIPH_FLAG_DEFAULT_ASN1, \ - cipher##_init_key, NULL, NULL, NULL, NULL) - -typedef struct { - unsigned char iv[EVP_MAX_IV_LENGTH]; - unsigned int iv_len; - unsigned int tag_len; -} evp_cipher_aead_asn1_params; - -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); - -/* - * 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 */ -# ifndef OPENSSL_NO_ECX - ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ -# endif -# endif -}; - -struct evp_pkey_st { - /* == Legacy attributes == */ - int type; - int save_type; - -# 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 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 - - /* == 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 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 *templ); -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 - -void evp_encode_ctx_set_flags(EVP_ENCODE_CTX *ctx, unsigned int flags); - -/* EVP_ENCODE_CTX flags */ -/* Don't generate new lines when encoding */ -#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_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_rand_can_seed(EVP_RAND_CTX *ctx); -size_t evp_rand_get_seed(EVP_RAND_CTX *ctx, - unsigned char **buffer, - int entropy, size_t min_len, size_t max_len, - int prediction_resistance, - const unsigned char *adin, size_t adin_len); -void evp_rand_clear_seed(EVP_RAND_CTX *ctx, - unsigned char *buffer, size_t b_len); -int evp_signature_get_number(const EVP_SIGNATURE *signature); - -int evp_pkey_decrypt_alloc(EVP_PKEY_CTX *ctx, unsigned char **outp, - size_t *outlenp, size_t expected_outlen, - const unsigned char *in, size_t inlen); - -#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 deleted file mode 100644 index 4a001107..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evperr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 969df17b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/httperr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 0f64869f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/lhash.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 - */ - -#ifndef OSSL_CRYPTO_LHASH_H -# define OSSL_CRYPTO_LHASH_H -# pragma once - -unsigned long ossl_lh_strcasehash(const char *); - -#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 deleted file mode 100644 index 46214f32..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/md32_common.h +++ /dev/null @@ -1,284 +0,0 @@ -/* - * 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 - */ - -/*- - * This is a generic 32 bit "collector" for message digest algorithms. - * Whenever needed it collects input character stream into chunks of - * 32 bit values and invokes a block function that performs actual hash - * calculations. - * - * Porting guide. - * - * Obligatory macros: - * - * DATA_ORDER_IS_BIG_ENDIAN or DATA_ORDER_IS_LITTLE_ENDIAN - * this macro defines byte order of input stream. - * HASH_CBLOCK - * size of a unit chunk HASH_BLOCK operates on. - * HASH_LONG - * has to be at least 32 bit wide. - * HASH_CTX - * context structure that at least contains following - * members: - * typedef struct { - * ... - * HASH_LONG Nl,Nh; - * either { - * HASH_LONG data[HASH_LBLOCK]; - * unsigned char data[HASH_CBLOCK]; - * }; - * unsigned int num; - * ... - * } HASH_CTX; - * data[] vector is expected to be zeroed upon first call to - * HASH_UPDATE. - * HASH_UPDATE - * name of "Update" function, implemented here. - * HASH_TRANSFORM - * name of "Transform" function, implemented here. - * HASH_FINAL - * name of "Final" function, implemented here. - * HASH_BLOCK_DATA_ORDER - * name of "block" function capable of treating *unaligned* input - * message in original (data) byte order, implemented externally. - * HASH_MAKE_STRING - * macro converting context variables to an ASCII hash string. - * - * MD5 example: - * - * #define DATA_ORDER_IS_LITTLE_ENDIAN - * - * #define HASH_LONG MD5_LONG - * #define HASH_CTX MD5_CTX - * #define HASH_CBLOCK MD5_CBLOCK - * #define HASH_UPDATE MD5_Update - * #define HASH_TRANSFORM MD5_Transform - * #define HASH_FINAL MD5_Final - * #define HASH_BLOCK_DATA_ORDER md5_block_data_order - */ - -#ifndef OSSL_CRYPTO_MD32_COMMON_H -# define OSSL_CRYPTO_MD32_COMMON_H -# pragma once - -# include - -# if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) -# error "DATA_ORDER must be defined!" -# endif - -# ifndef HASH_CBLOCK -# error "HASH_CBLOCK must be defined!" -# endif -# ifndef HASH_LONG -# error "HASH_LONG must be defined!" -# endif -# ifndef HASH_CTX -# error "HASH_CTX must be defined!" -# endif - -# ifndef HASH_UPDATE -# error "HASH_UPDATE must be defined!" -# endif -# ifndef HASH_TRANSFORM -# error "HASH_TRANSFORM must be defined!" -# endif -# ifndef HASH_FINAL -# error "HASH_FINAL must be defined!" -# endif - -# ifndef HASH_BLOCK_DATA_ORDER -# error "HASH_BLOCK_DATA_ORDER must be defined!" -# endif - -# 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), \ - l|=(((unsigned long)(*((c)++)))<<16), \ - l|=(((unsigned long)(*((c)++)))<< 8), \ - l|=(((unsigned long)(*((c)++))) ) ) -# define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \ - *((c)++)=(unsigned char)(((l)>>16)&0xff), \ - *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ - *((c)++)=(unsigned char)(((l) )&0xff), \ - l) - -# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) - -# define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++))) ), \ - l|=(((unsigned long)(*((c)++)))<< 8), \ - l|=(((unsigned long)(*((c)++)))<<16), \ - l|=(((unsigned long)(*((c)++)))<<24) ) -# define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \ - *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ - *((c)++)=(unsigned char)(((l)>>16)&0xff), \ - *((c)++)=(unsigned char)(((l)>>24)&0xff), \ - l) - -# endif - -/* - * Time for some action :-) - */ - -int HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len) -{ - const unsigned char *data = data_; - unsigned char *p; - HASH_LONG l; - size_t n; - - if (len == 0) - return 1; - - l = (c->Nl + (((HASH_LONG) len) << 3)) & 0xffffffffUL; - if (l < c->Nl) /* overflow */ - c->Nh++; - c->Nh += (HASH_LONG) (len >> 29); /* might cause compiler warning on - * 16-bit */ - c->Nl = l; - - n = c->num; - if (n != 0) { - p = (unsigned char *)c->data; - - if (len >= HASH_CBLOCK || len + n >= HASH_CBLOCK) { - memcpy(p + n, data, HASH_CBLOCK - n); - HASH_BLOCK_DATA_ORDER(c, p, 1); - n = HASH_CBLOCK - n; - data += n; - len -= n; - c->num = 0; - /* - * We use memset rather than OPENSSL_cleanse() here deliberately. - * Using OPENSSL_cleanse() here could be a performance issue. It - * will get properly cleansed on finalisation so this isn't a - * security problem. - */ - memset(p, 0, HASH_CBLOCK); /* keep it zeroed */ - } else { - memcpy(p + n, data, len); - c->num += (unsigned int)len; - return 1; - } - } - - n = len / HASH_CBLOCK; - if (n > 0) { - HASH_BLOCK_DATA_ORDER(c, data, n); - n *= HASH_CBLOCK; - data += n; - len -= n; - } - - if (len != 0) { - p = (unsigned char *)c->data; - c->num = (unsigned int)len; - memcpy(p, data, len); - } - return 1; -} - -void HASH_TRANSFORM(HASH_CTX *c, const unsigned char *data) -{ - HASH_BLOCK_DATA_ORDER(c, data, 1); -} - -int HASH_FINAL(unsigned char *md, HASH_CTX *c) -{ - unsigned char *p = (unsigned char *)c->data; - size_t n = c->num; - - p[n] = 0x80; /* there is always room for one */ - n++; - - if (n > (HASH_CBLOCK - 8)) { - memset(p + n, 0, HASH_CBLOCK - n); - n = 0; - HASH_BLOCK_DATA_ORDER(c, p, 1); - } - memset(p + n, 0, HASH_CBLOCK - 8 - n); - - p += HASH_CBLOCK - 8; -# if defined(DATA_ORDER_IS_BIG_ENDIAN) - (void)HOST_l2c(c->Nh, p); - (void)HOST_l2c(c->Nl, p); -# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) - (void)HOST_l2c(c->Nl, p); - (void)HOST_l2c(c->Nh, p); -# endif - p -= HASH_CBLOCK; - HASH_BLOCK_DATA_ORDER(c, p, 1); - c->num = 0; - OPENSSL_cleanse(p, HASH_CBLOCK); - -# ifndef HASH_MAKE_STRING -# error "HASH_MAKE_STRING must be defined!" -# else - HASH_MAKE_STRING(c, md); -# endif - - return 1; -} - -# ifndef MD32_REG_T -# if defined(__alpha) || defined(__sparcv9) || defined(__mips) -# define MD32_REG_T long -/* - * This comment was originally written for MD5, which is why it - * discusses A-D. But it basically applies to all 32-bit digests, - * which is why it was moved to common header file. - * - * In case you wonder why A-D are declared as long and not - * as MD5_LONG. Doing so results in slight performance - * boost on LP64 architectures. The catch is we don't - * really care if 32 MSBs of a 64-bit register get polluted - * with eventual overflows as we *save* only 32 LSBs in - * *either* case. Now declaring 'em long excuses the compiler - * from keeping 32 MSBs zeroed resulting in 13% performance - * improvement under SPARC Solaris7/64 and 5% under AlphaLinux. - * Well, to be honest it should say that this *prevents* - * performance degradation. - */ -# else -/* - * Above is not absolute and there are LP64 compilers that - * generate better code if MD32_REG_T is defined int. The above - * pre-processor condition reflects the circumstances under which - * the conclusion was made and is subject to further extension. - */ -# define MD32_REG_T int -# endif -# endif - -#endif 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 deleted file mode 100644 index d03ca83d..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/modes.h +++ /dev/null @@ -1,236 +0,0 @@ -/* - * 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 -}; - -/* GHASH functions */ -void ossl_gcm_init_4bit(u128 Htable[16], const u64 H[2]); -void ossl_gcm_ghash_4bit(u64 Xi[2], const u128 Htable[16], - const u8 *inp, size_t len); -void ossl_gcm_gmult_4bit(u64 Xi[2], const u128 Htable[16]); - -/* - * 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; -}; - -/* XTS mode for SM4 algorithm specified by GB/T 17964-2021 */ -int ossl_crypto_xts128gb_encrypt(const XTS128_CONTEXT *ctx, - const unsigned char iv[16], - const unsigned char *inp, unsigned char *out, - size_t len, int enc); - -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 deleted file mode 100644 index f22e9287..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/objects.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * 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 - */ - -#include - -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 deleted file mode 100644 index ec994824..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/objectserr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index f9529b2a..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ocsperr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2cb4253d..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pem.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 deleted file mode 100644 index b255ff5c..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pemerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 114971c6..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs12err.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 9caa9af4..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs7.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * 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 deleted file mode 100644 index c195190b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs7err.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index ba54f3bd..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/poly1305.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. 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 -#define POLY1305_DIGEST_SIZE 16 -#define POLY1305_KEY_SIZE 32 - -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 deleted file mode 100644 index d999396a..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ppc_arch.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2e1c85c1..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/punycode.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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_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); - -#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 deleted file mode 100644 index d375c2f9..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright 2016-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 - */ - -/* - * 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 - * or in the file LICENSE in the source distribution. - */ - -#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 -# if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) || \ - (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) -# define OPENSSL_APPLE_CRYPTO_RANDOM 1 -# include -# include -# endif -# endif - -/* - * Defines related to seed sources - */ -#ifndef DEVRANDOM -/* - * 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 - */ -# define DEVRANDOM "/dev/urandom", "/dev/random", "/dev/hwrng", "/dev/srandom" -# if defined(__linux) && !defined(__ANDROID__) -# ifndef DEVRANDOM_WAIT -# define DEVRANDOM_WAIT "/dev/random" -# endif -/* - * 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. - */ -# ifndef DEVRANDOM_SAFE_KERNEL -# define DEVRANDOM_SAFE_KERNEL 4, 8 -# endif -/* - * 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. - */ -# 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 ossl_rand_pool_init(void); - -/* - * Finalise the random pool reseeding sources. - */ -void ossl_rand_pool_cleanup(void); - -/* - * Control the random pool use of open file descriptors. - */ -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_LIB_CTX *ctx, - unsigned char **pout, int entropy, - size_t min_len, size_t max_len); -size_t ossl_rand_get_user_entropy(OSSL_LIB_CTX *ctx, - unsigned char **pout, int entropy, - size_t min_len, size_t max_len); -void ossl_rand_cleanup_entropy(OSSL_LIB_CTX *ctx, - unsigned char *buf, size_t len); -void ossl_rand_cleanup_user_entropy(OSSL_LIB_CTX *ctx, - unsigned char *buf, size_t len); -size_t ossl_rand_get_nonce(OSSL_LIB_CTX *ctx, - unsigned char **pout, size_t min_len, size_t max_len, - const void *salt, size_t salt_len); -size_t ossl_rand_get_user_nonce(OSSL_LIB_CTX *ctx, unsigned char **pout, - size_t min_len, size_t max_len, - const void *salt, size_t salt_len); -void ossl_rand_cleanup_nonce(OSSL_LIB_CTX *ctx, - unsigned char *buf, size_t len); -void ossl_rand_cleanup_user_nonce(OSSL_LIB_CTX *ctx, - 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); - -# ifdef FIPS_MODULE -EVP_RAND_CTX *ossl_rand_get0_private_noncreating(OSSL_LIB_CTX *ctx); -# else -EVP_RAND_CTX *ossl_rand_get0_seed_noncreating(OSSL_LIB_CTX *ctx); -# endif - -/* Generate a uniformly distributed random integer in the interval [0, upper) */ -uint32_t ossl_rand_uniform_uint32(OSSL_LIB_CTX *ctx, uint32_t upper, int *err); - -/* - * Generate a uniformly distributed random integer in the interval - * [lower, upper). - */ -uint32_t ossl_rand_range_uint32(OSSL_LIB_CTX *ctx, uint32_t lower, uint32_t upper, - int *err); - -#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 deleted file mode 100644 index f4d1d954..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand_pool.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * 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 deleted file mode 100644 index 6e2eb071..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/randerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 6c26dbf4..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.def +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 deleted file mode 100644 index 95185841..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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_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" -; - -/* Extension combination tests. */ -#define RISCV_HAS_ZBB_AND_ZBC() (RISCV_HAS_ZBB() && RISCV_HAS_ZBC()) -#define RISCV_HAS_ZBKB_AND_ZKND_AND_ZKNE() (RISCV_HAS_ZBKB() && RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) -#define RISCV_HAS_ZKND_AND_ZKNE() (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) - -#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 deleted file mode 100644 index 8eddc168..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsa.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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_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_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(OSSL_LIB_CTX *ctx, - unsigned char *to, int tlen, - const unsigned char *from, int flen, - int num, unsigned char *kdk); -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 deleted file mode 100644 index 9b23500b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsaerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 58f49681..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/security_bits.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 deleted file mode 100644 index 99bcf0ff..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sha.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2018-2023 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2018, 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_SHA_H -# define OSSL_CRYPTO_SHA_H -# pragma once - -# include - -int ossl_sha256_192_init(SHA256_CTX *c); -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 deleted file mode 100644 index 0d0767fc..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/siphash.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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_CRYPTO_SIPHASH_H -# define OSSL_CRYPTO_SIPHASH_H -# pragma once - -# 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; - -size_t SipHash_ctx_size(void); -size_t SipHash_hash_size(SIPHASH *ctx); -int SipHash_set_hash_size(SIPHASH *ctx, size_t hash_size); -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 deleted file mode 100644 index 8dc58bd3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/siv.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 deleted file mode 100644 index 9ab6c0b7..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm2.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2017 Ribose Inc. All Rights Reserved. - * Ported from Ribose contributions from Botan. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. 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_SM2_H -# define OSSL_CRYPTO_SM2_H -# pragma once - -# include - -# 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 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 *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); - -/* - * SM2 signature generation. - */ -int ossl_sm2_internal_sign(const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, - EC_KEY *eckey); - -/* - * SM2 signature verification. - */ -int ossl_sm2_internal_verify(const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, - EC_KEY *eckey); - -/* - * SM2 encryption - */ -int ossl_sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, - size_t msg_len, size_t *ct_size); - -int ossl_sm2_plaintext_size(const unsigned char *ct, size_t ct_size, - size_t *pt_size); - -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 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 deleted file mode 100644 index 706f4d69..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm2err.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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_SM2ERR_H -# define OSSL_CRYPTO_SM2ERR_H -# pragma once - -# include -# include - -# ifdef __cplusplus -extern "C" { -# endif - -# ifndef OPENSSL_NO_SM2 - -int ossl_err_load_SM2_strings(void); - -/* - * SM2 reason codes. - */ -# define SM2_R_ASN1_ERROR 100 -# define SM2_R_BAD_SIGNATURE 101 -# define SM2_R_BUFFER_TOO_SMALL 107 -# define SM2_R_DIST_ID_TOO_LARGE 110 -# define SM2_R_ID_NOT_SET 112 -# define SM2_R_ID_TOO_LARGE 111 -# define SM2_R_INVALID_CURVE 108 -# define SM2_R_INVALID_DIGEST 102 -# 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 deleted file mode 100644 index e21ec81c..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm4.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2017 Ribose Inc. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. 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_SM4_H -# define OSSL_CRYPTO_SM4_H -# pragma once - -# include -# include - -# ifdef OPENSSL_NO_SM4 -# error SM4 is disabled. -# endif - -# define SM4_ENCRYPT 1 -# define SM4_DECRYPT 0 - -# define SM4_BLOCK_SIZE 16 -# define SM4_KEY_SCHEDULE 32 - -typedef struct SM4_KEY_st { - uint32_t rk[SM4_KEY_SCHEDULE]; -} SM4_KEY; - -int ossl_sm4_set_key(const uint8_t *key, SM4_KEY *ks); - -void ossl_sm4_encrypt(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 deleted file mode 100644 index cc4f5142..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sm4_platform.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * 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__) || defined (_M_ARM64) -# 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)); -} -static inline int vpsm4_ex_capable(void) -{ - return (OPENSSL_armcap_P & ARMV8_CPUID) && - (MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, HISI_CPU_IMP, HISI_CPU_PART_KP920)); -} -# if defined(VPSM4_ASM) -# define VPSM4_CAPABLE vpsm4_capable() -# define VPSM4_EX_CAPABLE vpsm4_ex_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]); -void vpsm4_xts_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const SM4_KEY *key1, const SM4_KEY *key2, - const unsigned char ivec[16], const int enc); -void vpsm4_xts_encrypt_gb(const unsigned char *in, unsigned char *out, - size_t len, const SM4_KEY *key1, const SM4_KEY *key2, - const unsigned char ivec[16], const int enc); -# endif /* VPSM4_CAPABLE */ - -# ifdef VPSM4_EX_CAPABLE -int vpsm4_ex_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); -int vpsm4_ex_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); -void vpsm4_ex_encrypt(const unsigned char *in, unsigned char *out, - const SM4_KEY *key); -void vpsm4_ex_decrypt(const unsigned char *in, unsigned char *out, - const SM4_KEY *key); -void vpsm4_ex_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const SM4_KEY *key, - unsigned char *ivec, const int enc); -void vpsm4_ex_ecb_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const SM4_KEY *key, - const int enc); -void vpsm4_ex_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - const unsigned char ivec[16]); -void vpsm4_ex_xts_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const SM4_KEY *key1, const SM4_KEY *key2, - const unsigned char ivec[16], const int enc); -void vpsm4_ex_xts_encrypt_gb(const unsigned char *in, unsigned char *out, - size_t len, const SM4_KEY *key1, - const SM4_KEY *key2, const unsigned char ivec[16], - const int enc); -# endif /* VPSM4_EX_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 deleted file mode 100644 index 447e715b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sparc_arch.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * 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 deleted file mode 100644 index 7ef74283..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sparse_array.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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 deleted file mode 100644 index 9b7be71a..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/store.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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 OSSL_CRYPTO_STORE_H -# define OSSL_CRYPTO_STORE_H -# pragma once - -# include -# include -# include - -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 deleted file mode 100644 index c46d845f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/storeerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2f34ba31..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/tserr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index ad17f052..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/types.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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 deleted file mode 100644 index 789077a8..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/uierr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 18eb2f7c..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509.h +++ /dev/null @@ -1,391 +0,0 @@ -/* - * Copyright 2015-2024 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef OSSL_CRYPTO_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 */ - -/* Note: unless otherwise stated a field pointer is mandatory and should - * never be set to NULL: the ASN.1 code and accessors rely on mandatory - * fields never being NULL. - */ - -/* - * name entry structure, equivalent to AttributeTypeAndValue defined - * in RFC5280 et al. - */ -struct X509_name_entry_st { - ASN1_OBJECT *object; /* AttributeType */ - ASN1_STRING *value; /* AttributeValue */ - int set; /* index of RDNSequence for this entry */ - int size; /* temp variable */ -}; - -/* Name from RFC 5280. */ -struct X509_name_st { - STACK_OF(X509_NAME_ENTRY) *entries; /* DN components */ - int modified; /* true if 'bytes' needs to be built */ - BUF_MEM *bytes; /* cached encoding: cannot be NULL */ - /* canonical encoding used for rapid Name comparison */ - unsigned char *canon_enc; - int canon_enclen; -} /* X509_NAME */ ; - -/* Signature info structure */ - -struct x509_sig_info_st { - /* NID of message digest */ - int mdnid; - /* NID of public key algorithm */ - int pknid; - /* Security bits */ - int secbits; - /* Various flags */ - uint32_t flags; -}; - -/* PKCS#10 certificate request */ - -struct X509_req_info_st { - ASN1_ENCODING enc; /* cached encoding of signed part */ - ASN1_INTEGER *version; /* version, defaults to v1(0) so can be NULL */ - X509_NAME *subject; /* certificate request DN */ - X509_PUBKEY *pubkey; /* public key of request */ - /* - * Zero or more attributes. - * NB: although attributes is a mandatory field some broken - * encodings omit it so this may be NULL in that case. - */ - STACK_OF(X509_ATTRIBUTE) *attributes; -}; - -struct X509_req_st { - X509_REQ_INFO req_info; /* signed certificate request data */ - X509_ALGOR sig_alg; /* signature algorithm */ - 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 { - ASN1_INTEGER *version; /* version: defaults to v1(0) so may be NULL */ - X509_ALGOR sig_alg; /* signature algorithm */ - X509_NAME *issuer; /* CRL issuer name */ - ASN1_TIME *lastUpdate; /* lastUpdate field */ - ASN1_TIME *nextUpdate; /* nextUpdate field: optional */ - STACK_OF(X509_REVOKED) *revoked; /* revoked entries: optional */ - STACK_OF(X509_EXTENSION) *extensions; /* extensions: optional */ - ASN1_ENCODING enc; /* encoding of signed portion of CRL */ -}; - -struct X509_crl_st { - X509_CRL_INFO crl; /* signed CRL data */ - X509_ALGOR sig_alg; /* CRL signature algorithm */ - ASN1_BIT_STRING signature; /* CRL signature */ - CRYPTO_REF_COUNT references; - int flags; - /* - * Cached copies of decoded extension values, since extensions - * are optional any of these can be NULL. - */ - AUTHORITY_KEYID *akid; - ISSUING_DIST_POINT *idp; - /* Convenient breakdown of IDP */ - int idp_flags; - int idp_reasons; - /* CRL and base CRL numbers for delta processing */ - ASN1_INTEGER *crl_number; - ASN1_INTEGER *base_crl_number; - STACK_OF(GENERAL_NAMES) *issuers; - /* hash of CRL */ - unsigned char sha1_hash[SHA_DIGEST_LENGTH]; - /* alternative method to handle this CRL */ - const X509_CRL_METHOD *meth; - void *meth_data; - CRYPTO_RWLOCK *lock; - - OSSL_LIB_CTX *libctx; - char *propq; -}; - -struct x509_revoked_st { - ASN1_INTEGER serialNumber; /* revoked entry serial number */ - ASN1_TIME *revocationDate; /* revocation date */ - STACK_OF(X509_EXTENSION) *extensions; /* CRL entry extensions: optional */ - /* decoded value of CRLissuer extension: set if indirect CRL */ - STACK_OF(GENERAL_NAME) *issuer; - /* revocation reason: set to CRL_REASON_NONE if reason extension absent */ - int reason; - /* - * CRL entries are reordered for faster lookup of serial numbers. This - * field contains the original load sequence for this entry. - */ - int sequence; -}; - -/* - * This stuff is certificate "auxiliary info": it contains details which are - * useful in certificate stores and databases. When used this is tagged onto - * the end of the certificate itself. OpenSSL specific structure not defined - * in any RFC. - */ - -struct x509_cert_aux_st { - STACK_OF(ASN1_OBJECT) *trust; /* trusted uses */ - STACK_OF(ASN1_OBJECT) *reject; /* rejected uses */ - ASN1_UTF8STRING *alias; /* "friendly name" */ - ASN1_OCTET_STRING *keyid; /* key id of private key */ - STACK_OF(X509_ALGOR) *other; /* other unspecified info */ -}; - -struct x509_cinf_st { - ASN1_INTEGER *version; /* [ 0 ] default of v1 */ - ASN1_INTEGER serialNumber; - X509_ALGOR signature; - X509_NAME *issuer; - X509_VAL validity; - X509_NAME *subject; - X509_PUBKEY *key; - ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */ - ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */ - STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */ - ASN1_ENCODING enc; -}; - -struct x509_st { - X509_CINF cert_info; - X509_ALGOR sig_alg; - ASN1_BIT_STRING signature; - X509_SIG_INFO siginf; - CRYPTO_REF_COUNT references; - CRYPTO_EX_DATA ex_data; - /* These contain copies of various extension values */ - long ex_pathlen; - long ex_pcpathlen; - uint32_t ex_flags; - uint32_t ex_kusage; - uint32_t ex_xkusage; - uint32_t ex_nscert; - ASN1_OCTET_STRING *skid; - AUTHORITY_KEYID *akid; - X509_POLICY_CACHE *policy_cache; - STACK_OF(DIST_POINT) *crldp; - STACK_OF(GENERAL_NAME) *altname; - NAME_CONSTRAINTS *nc; -# ifndef OPENSSL_NO_RFC3779 - STACK_OF(IPAddressFamily) *rfc3779_addr; - struct ASIdentifiers_st *rfc3779_asid; -# endif - unsigned char sha1_hash[SHA_DIGEST_LENGTH]; - 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 */ ; - -/* - * This is a used when verifying cert chains. Since the gathering of the - * cert chain can take some time (and have to be 'retried', this needs to be - * kept and passed around. - */ -struct x509_store_ctx_st { /* X509_STORE_CTX */ - X509_STORE *store; - /* The following are set by the caller */ - /* The cert to check */ - X509 *cert; - /* chain of X509s - untrusted - passed in */ - STACK_OF(X509) *untrusted; - /* set of CRLs passed in */ - STACK_OF(X509_CRL) *crls; - X509_VERIFY_PARAM *param; - /* Other info for use with get_issuer() */ - void *other_ctx; - /* Callbacks for various operations */ - /* called to verify a certificate */ - int (*verify) (X509_STORE_CTX *ctx); - /* error callback */ - int (*verify_cb) (int ok, X509_STORE_CTX *ctx); - /* get issuers cert from ctx */ - int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x); - /* check issued */ - int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer); - /* Check revocation status of chain */ - int (*check_revocation) (X509_STORE_CTX *ctx); - /* retrieve CRL */ - int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); - /* Check CRL validity */ - int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl); - /* Check certificate against CRL */ - 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, - 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 */ - int valid; - /* number of untrusted certs */ - int num_untrusted; - /* chain of X509s - built up and trusted */ - STACK_OF(X509) *chain; - /* Valid policy tree */ - X509_POLICY_TREE *tree; - /* Require explicit policy value */ - int explicit_policy; - /* When something goes wrong, this is why */ - int error_depth; - int error; - X509 *current_cert; - /* cert currently being tested as valid issuer */ - X509 *current_issuer; - /* current CRL */ - X509_CRL *current_crl; - /* score of current CRL */ - int current_crl_score; - /* Reason mask */ - unsigned int current_reasons; - /* For CRL path validation: parent context */ - X509_STORE_CTX *parent; - CRYPTO_EX_DATA ex_data; - SSL_DANE *dane; - /* signed via bare TA public key, rather than CA certificate */ - int bare_ta_signed; - /* Raw Public Key */ - EVP_PKEY *rpk; - - OSSL_LIB_CTX *libctx; - char *propq; -}; - -/* PKCS#8 private key info structure */ - -struct pkcs8_priv_key_info_st { - ASN1_INTEGER *version; - X509_ALGOR *pkeyalg; - ASN1_OCTET_STRING *pkey; - STACK_OF(X509_ATTRIBUTE) *attributes; -}; - -struct X509_sig_st { - X509_ALGOR *algor; - ASN1_OCTET_STRING *digest; -}; - -struct x509_object_st { - /* one of the above types */ - X509_LOOKUP_TYPE type; - union { - char *ptr; - X509 *x509; - X509_CRL *crl; - EVP_PKEY *pkey; - } data; -}; - -int ossl_a2i_ipadd(unsigned char *ipout, const char *ipasc); -int ossl_x509_set1_time(int *modified, 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); - -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, - const char *propq); -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 ossl_x509_check_private_key(const EVP_PKEY *k, const EVP_PKEY *pkey); - -int x509v3_add_len_value_uchar(const char *name, const unsigned char *value, - size_t vallen, STACK_OF(CONF_VALUE) **extlist); -/* Attribute addition functions not checking for duplicate attributes */ -STACK_OF(X509_ATTRIBUTE) *ossl_x509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, - X509_ATTRIBUTE *attr); -STACK_OF(X509_ATTRIBUTE) *ossl_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) *ossl_x509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) **x, - int nid, int type, - const unsigned char *bytes, - int len); -STACK_OF(X509_ATTRIBUTE) *ossl_x509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) **x, - const char *attrname, - int type, - const unsigned char *bytes, - int len); -#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 deleted file mode 100644 index c7c7d25e..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509err.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 66d3ad92..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509v3err.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index e57c0eab..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 file is only used by HP C on VMS, and is included automatically - * after each header file from this directory - */ - -/* restore state. Must correspond to the save in __decc_include_prologue.h */ -#pragma names restore 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 deleted file mode 100644 index a0139575..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 file is only used by HP C on VMS, and is included automatically - * after each header file from this directory - */ - -/* save state */ -#pragma names save -/* have the compiler shorten symbols larger than 31 chars to 23 chars - * followed by a 8 hex char CRC - */ -#pragma names as_is,shortened 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 deleted file mode 100644 index 36dbe0fc..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/asn1.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 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 - -# include - -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 deleted file mode 100644 index 9481f4c9..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2016-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_BIO_H -# define OSSL_INTERNAL_BIO_H -# pragma once - -# include -# include - -struct bio_method_st { - int type; - char *name; - int (*bwrite) (BIO *, const char *, size_t, size_t *); - int (*bwrite_old) (BIO *, const char *, int); - int (*bread) (BIO *, char *, size_t, size_t *); - int (*bread_old) (BIO *, char *, int); - int (*bputs) (BIO *, const char *); - int (*bgets) (BIO *, char *, int); - long (*ctrl) (BIO *, int, long, void *); - int (*create) (BIO *); - int (*destroy) (BIO *); - long (*callback_ctrl) (BIO *, int, BIO_info_cb *); - int (*bsendmmsg) (BIO *, BIO_MSG *, size_t, size_t, uint64_t, size_t *); - int (*brecvmmsg) (BIO *, BIO_MSG *, size_t, size_t, uint64_t, size_t *); -}; - -void bio_free_ex_data(BIO *bio); -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 -# define BIO_CTRL_SET_KTLS_TX_ZEROCOPY_SENDFILE 90 - -/* - * 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. - * BIO_FLAGS_KTLS_TX_ZEROCOPY_SENDFILE means we are using the zerocopy mode with - * this BIO for sending using sendfile. - */ -# define BIO_FLAGS_KTLS_TX_CTRL_MSG 0x1000 -# define BIO_FLAGS_KTLS_RX 0x2000 -# define BIO_FLAGS_KTLS_TX 0x4000 -# define BIO_FLAGS_KTLS_TX_ZEROCOPY_SENDFILE 0x8000 - -/* 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_zerocopy_sendfile_flag(b) \ - BIO_set_flags(b, BIO_FLAGS_KTLS_TX_ZEROCOPY_SENDFILE) - -# 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) -# define BIO_set_ktls_tx_zerocopy_sendfile(b) \ - BIO_ctrl(b, BIO_CTRL_SET_KTLS_TX_ZEROCOPY_SENDFILE, 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/bio_addr.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio_addr.h deleted file mode 100644 index a6449b7e..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio_addr.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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_BIO_ADDR_H -# define OSSL_BIO_ADDR_H - -# include "internal/e_os.h" -# include "internal/sockets.h" - -# ifndef OPENSSL_NO_SOCK -union bio_addr_st { - struct sockaddr sa; -# if OPENSSL_USE_IPV6 - struct sockaddr_in6 s_in6; -# endif - struct sockaddr_in s_in; -# ifndef OPENSSL_NO_UNIX_SOCK - struct sockaddr_un s_un; -# endif -}; -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio_tfo.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio_tfo.h deleted file mode 100644 index 64c0d4c3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio_tfo.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * 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 - */ - -/* - * Contains definitions for simplifying the use of TCP Fast Open - * (RFC7413) in OpenSSL socket BIOs. - */ - -/* If a supported OS is added here, update test/bio_tfo_test.c */ -#if defined(TCP_FASTOPEN) && !defined(OPENSSL_NO_TFO) - -# if defined(OPENSSL_SYS_MACOSX) || defined(__FreeBSD__) -# include -# endif - -/* - * OSSL_TFO_SYSCTL is used to determine if TFO is supported by - * this kernel, and if supported, if it is enabled. This is more of - * a problem on FreeBSD 10.3 ~ 11.4, where TCP_FASTOPEN was defined, - * but not enabled by default in the kernel, and only for the server. - * Linux does not have sysctlbyname(), and the closest equivalent - * is to go into the /proc filesystem, but I'm not sure it's - * worthwhile. - * - * On MacOS and Linux: - * These operating systems use a single parameter to control TFO. - * The OSSL_TFO_CLIENT_FLAG and OSSL_TFO_SERVER_FLAGS are used to - * determine if TFO is enabled for the client and server respectively. - * - * OSSL_TFO_CLIENT_FLAG = 1 = client TFO enabled - * OSSL_TFO_SERVER_FLAG = 2 = server TFO enabled - * - * Such that: - * 0 = TFO disabled - * 3 = server and client TFO enabled - * - * macOS 10.14 and later support TFO. - * Linux kernel 3.6 added support for client TFO. - * Linux kernel 3.7 added support for server TFO. - * Linux kernel 3.13 enabled TFO by default. - * Linux kernel 4.11 added the TCP_FASTOPEN_CONNECT option. - * - * On FreeBSD: - * FreeBSD 10.3 ~ 11.4 uses a single sysctl for server enable. - * FreeBSD 12.0 and later uses separate sysctls for server and - * client enable. - * - * Some options are purposely NOT defined per-platform - * - * OSSL_TFO_SYSCTL - * Defined as a sysctlbyname() option to determine if - * TFO is enabled in the kernel (macOS, FreeBSD) - * - * OSSL_TFO_SERVER_SOCKOPT - * Defined to indicate the socket option used to enable - * TFO on a server socket (all) - * - * OSSL_TFO_SERVER_SOCKOPT_VALUE - * Value to be used with OSSL_TFO_SERVER_SOCKOPT - * - * OSSL_TFO_CONNECTX - * Use the connectx() function to make a client connection - * (macOS) - * - * OSSL_TFO_CLIENT_SOCKOPT - * Defined to indicate the socket option used to enable - * TFO on a client socket (FreeBSD, Linux 4.14 and later) - * - * OSSL_TFO_SENDTO - * Defined to indicate the sendto() message type to - * be used to initiate a TFO connection (FreeBSD, - * Linux pre-4.14) - * - * OSSL_TFO_DO_NOT_CONNECT - * Defined to skip calling connect() when creating a - * client socket (macOS, FreeBSD, Linux pre-4.14) - */ - -# if defined(OPENSSL_SYS_WINDOWS) -/* - * NO WINDOWS SUPPORT - * - * But this is what would be used on the server: - * - * define OSSL_TFO_SERVER_SOCKOPT TCP_FASTOPEN - * define OSSL_TFO_SERVER_SOCKOPT_VALUE 1 - * - * Still have to figure out client support - */ -# undef TCP_FASTOPEN -# endif - -/* NO VMS SUPPORT */ -# if defined(OPENSSL_SYS_VMS) -# undef TCP_FASTOPEN -# endif - -# if defined(OPENSSL_SYS_MACOSX) -# define OSSL_TFO_SYSCTL "net.inet.tcp.fastopen" -# define OSSL_TFO_SERVER_SOCKOPT TCP_FASTOPEN -# define OSSL_TFO_SERVER_SOCKOPT_VALUE 1 -# define OSSL_TFO_CONNECTX 1 -# define OSSL_TFO_DO_NOT_CONNECT 1 -# define OSSL_TFO_CLIENT_FLAG 1 -# define OSSL_TFO_SERVER_FLAG 2 -# endif - -# if defined(__FreeBSD__) -# if defined(TCP_FASTOPEN_PSK_LEN) -/* As of 12.0 these are the SYSCTLs */ -# define OSSL_TFO_SYSCTL_SERVER "net.inet.tcp.fastopen.server_enable" -# define OSSL_TFO_SYSCTL_CLIENT "net.inet.tcp.fastopen.client_enable" -# define OSSL_TFO_SERVER_SOCKOPT TCP_FASTOPEN -# define OSSL_TFO_SERVER_SOCKOPT_VALUE MAX_LISTEN -# define OSSL_TFO_CLIENT_SOCKOPT TCP_FASTOPEN -# define OSSL_TFO_DO_NOT_CONNECT 1 -# define OSSL_TFO_SENDTO 0 -/* These are the same because the sysctl are client/server-specific */ -# define OSSL_TFO_CLIENT_FLAG 1 -# define OSSL_TFO_SERVER_FLAG 1 -# else -/* 10.3 through 11.4 SYSCTL - ONLY SERVER SUPPORT */ -# define OSSL_TFO_SYSCTL "net.inet.tcp.fastopen.enabled" -# define OSSL_TFO_SERVER_SOCKOPT TCP_FASTOPEN -# define OSSL_TFO_SERVER_SOCKOPT_VALUE MAX_LISTEN -# define OSSL_TFO_SERVER_FLAG 1 -# endif -# endif - -# if defined(OPENSSL_SYS_LINUX) -/* OSSL_TFO_PROC not used, but of interest */ -# define OSSL_TFO_PROC "/proc/sys/net/ipv4/tcp_fastopen" -# define OSSL_TFO_SERVER_SOCKOPT TCP_FASTOPEN -# define OSSL_TFO_SERVER_SOCKOPT_VALUE MAX_LISTEN -# if defined(TCP_FASTOPEN_CONNECT) -# define OSSL_TFO_CLIENT_SOCKOPT TCP_FASTOPEN_CONNECT -# else -# define OSSL_TFO_SENDTO MSG_FASTOPEN -# define OSSL_TFO_DO_NOT_CONNECT 1 -# endif -# define OSSL_TFO_CLIENT_FLAG 1 -# define OSSL_TFO_SERVER_FLAG 2 -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/common.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/common.h deleted file mode 100644 index 15666f11..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/common.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - * 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 OSSL_INTERNAL_COMMON_H -# define OSSL_INTERNAL_COMMON_H -# pragma once - -# include -# include -# include "openssl/configuration.h" - -# include "internal/e_os.h" /* ossl_inline in many files */ -# include "internal/nelem.h" - -# if defined(__GNUC__) || defined(__clang__) -# define likely(x) __builtin_expect(!!(x), 1) -# define unlikely(x) __builtin_expect(!!(x), 0) -# else -# define likely(x) x -# define unlikely(x) x -# endif - -# if defined(__GNUC__) || defined(__clang__) -# define ALIGN32 __attribute((aligned(32))) -# define ALIGN64 __attribute((aligned(64))) -# elif defined(_MSC_VER) -# define ALIGN32 __declspec(align(32)) -# define ALIGN64 __declspec(align(64)) -# else -# define ALIGN32 -# define ALIGN64 -# endif - -# ifdef NDEBUG -# define ossl_assert(x) ((x) != 0) -# else -__owur static ossl_inline int ossl_assert_int(int expr, const char *exprstr, - const char *file, int line) -{ - if (!expr) - OPENSSL_die(exprstr, file, line); - - return expr; -} - -# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \ - __FILE__, __LINE__) - -# endif - -/* Check if |pre|, which must be a string literal, is a prefix of |str| */ -#define HAS_PREFIX(str, pre) (strncmp(str, pre "", sizeof(pre) - 1) == 0) -/* As before, and if check succeeds, advance |str| past the prefix |pre| */ -#define CHECK_AND_SKIP_PREFIX(str, pre) \ - (HAS_PREFIX(str, pre) ? ((str) += sizeof(pre) - 1, 1) : 0) -/* Check if the string literal |p| is a case-insensitive prefix of |s| */ -#define HAS_CASE_PREFIX(s, p) (OPENSSL_strncasecmp(s, p "", sizeof(p) - 1) == 0) -/* As before, and if check succeeds, advance |str| past the prefix |pre| */ -#define CHECK_AND_SKIP_CASE_PREFIX(str, pre) \ - (HAS_CASE_PREFIX(str, pre) ? ((str) += sizeof(pre) - 1, 1) : 0) -/* Check if the string literal |suffix| is a case-insensitive suffix of |str| */ -#define HAS_CASE_SUFFIX(str, suffix) (strlen(str) < sizeof(suffix) - 1 ? 0 : \ - OPENSSL_strcasecmp(str + strlen(str) - sizeof(suffix) + 1, suffix "") == 0) - -/* - * 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 - -# define OPENSSL_CONF "openssl.cnf" - -# ifndef OPENSSL_SYS_VMS -# define X509_CERT_AREA OPENSSLDIR -# define X509_CERT_DIR OPENSSLDIR "/certs" -# define X509_CERT_FILE OPENSSLDIR "/cert.pem" -# define X509_PRIVATE_DIR OPENSSLDIR "/private" -# define CTLOG_FILE OPENSSLDIR "/ct_log_list.cnf" -# else -# define X509_CERT_AREA "OSSL$DATAROOT:[000000]" -# define X509_CERT_DIR "OSSL$DATAROOT:[CERTS]" -# define X509_CERT_FILE "OSSL$DATAROOT:[000000]cert.pem" -# define X509_PRIVATE_DIR "OSSL$DATAROOT:[PRIVATE]" -# define CTLOG_FILE "OSSL$DATAROOT:[000000]ct_log_list.cnf" -# endif - -# define X509_CERT_DIR_EVP "SSL_CERT_DIR" -# define X509_CERT_FILE_EVP "SSL_CERT_FILE" -# define CTLOG_FILE_EVP "CTLOG_FILE" - -/* size of string representations */ -# define DECIMAL_SIZE(type) ((sizeof(type)*8+2)/3+1) -# define HEX_SIZE(type) (sizeof(type)*2) - -# define c2l(c,l) (l = ((unsigned long)(*((c)++))) , \ - l|=(((unsigned long)(*((c)++)))<< 8), \ - l|=(((unsigned long)(*((c)++)))<<16), \ - l|=(((unsigned long)(*((c)++)))<<24)) - -/* NOTE - c is not incremented as per c2l */ -# define c2ln(c,l1,l2,n) { \ - c+=n; \ - l1=l2=0; \ - switch (n) { \ - case 8: l2 =((unsigned long)(*(--(c))))<<24; \ - case 7: l2|=((unsigned long)(*(--(c))))<<16; \ - case 6: l2|=((unsigned long)(*(--(c))))<< 8; \ - case 5: l2|=((unsigned long)(*(--(c)))); \ - case 4: l1 =((unsigned long)(*(--(c))))<<24; \ - case 3: l1|=((unsigned long)(*(--(c))))<<16; \ - case 2: l1|=((unsigned long)(*(--(c))))<< 8; \ - case 1: l1|=((unsigned long)(*(--(c)))); \ - } \ - } - -# define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \ - *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ - *((c)++)=(unsigned char)(((l)>>16)&0xff), \ - *((c)++)=(unsigned char)(((l)>>24)&0xff)) - -# define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24, \ - l|=((unsigned long)(*((c)++)))<<16, \ - l|=((unsigned long)(*((c)++)))<< 8, \ - l|=((unsigned long)(*((c)++)))) - -# define n2l8(c,l) (l =((uint64_t)(*((c)++)))<<56, \ - l|=((uint64_t)(*((c)++)))<<48, \ - l|=((uint64_t)(*((c)++)))<<40, \ - l|=((uint64_t)(*((c)++)))<<32, \ - l|=((uint64_t)(*((c)++)))<<24, \ - l|=((uint64_t)(*((c)++)))<<16, \ - l|=((uint64_t)(*((c)++)))<< 8, \ - l|=((uint64_t)(*((c)++)))) - -# define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \ - *((c)++)=(unsigned char)(((l)>>16)&0xff), \ - *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ - *((c)++)=(unsigned char)(((l) )&0xff)) - -# define l2n8(l,c) (*((c)++)=(unsigned char)(((l)>>56)&0xff), \ - *((c)++)=(unsigned char)(((l)>>48)&0xff), \ - *((c)++)=(unsigned char)(((l)>>40)&0xff), \ - *((c)++)=(unsigned char)(((l)>>32)&0xff), \ - *((c)++)=(unsigned char)(((l)>>24)&0xff), \ - *((c)++)=(unsigned char)(((l)>>16)&0xff), \ - *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ - *((c)++)=(unsigned char)(((l) )&0xff)) - -/* NOTE - c is not incremented as per l2c */ -# define l2cn(l1,l2,c,n) { \ - c+=n; \ - switch (n) { \ - case 8: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \ - case 7: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \ - case 6: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \ - case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \ - case 4: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \ - case 3: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \ - case 2: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \ - case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \ - } \ - } - -# define n2s(c,s) ((s=(((unsigned int)((c)[0]))<< 8)| \ - (((unsigned int)((c)[1])) )),(c)+=2) -# define s2n(s,c) (((c)[0]=(unsigned char)(((s)>> 8)&0xff), \ - (c)[1]=(unsigned char)(((s) )&0xff)),(c)+=2) - -# define n2l3(c,l) ((l =(((unsigned long)((c)[0]))<<16)| \ - (((unsigned long)((c)[1]))<< 8)| \ - (((unsigned long)((c)[2])) )),(c)+=3) - -# define l2n3(l,c) (((c)[0]=(unsigned char)(((l)>>16)&0xff), \ - (c)[1]=(unsigned char)(((l)>> 8)&0xff), \ - (c)[2]=(unsigned char)(((l) )&0xff)),(c)+=3) - -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/comp.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/comp.h deleted file mode 100644 index c48c29d5..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/comp.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * 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 - */ - -#include - -void ossl_comp_zlib_cleanup(void); -void ossl_comp_brotli_cleanup(void); -void ossl_comp_zstd_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 deleted file mode 100644 index 8c6c29cd..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/conf.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 OSSL_INTERNAL_CONF_H -# define OSSL_INTERNAL_CONF_H -# pragma once - -# include - -# define DEFAULT_CONF_MFLAGS \ - (CONF_MFLAGS_DEFAULT_SECTION | \ - CONF_MFLAGS_IGNORE_MISSING_FILE | \ - CONF_MFLAGS_IGNORE_RETURN_CODES) - -struct ossl_init_settings_st { - char *filename; - char *appname; - unsigned long flags; -}; - -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 deleted file mode 100644 index 0ed6f823..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/constant_time.h +++ /dev/null @@ -1,421 +0,0 @@ -/* - * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. 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_CONSTANT_TIME_H -# define OSSL_INTERNAL_CONSTANT_TIME_H -# pragma once - -# include -# include -# include /* For 'ossl_inline' */ - -/*- - * The boolean methods return a bitmask of all ones (0xff...f) for true - * and 0 for false. This is useful for choosing a value based on the result - * of a conditional in constant time. For example, - * if (a < b) { - * c = a; - * } else { - * c = b; - * } - * can be written as - * unsigned int lt = constant_time_lt(a, b); - * c = constant_time_select(lt, a, b); - */ - -/* Returns the given value with the MSB copied to all the other bits. */ -static ossl_inline unsigned int constant_time_msb(unsigned int a); -/* Convenience method for uint32_t. */ -static ossl_inline uint32_t constant_time_msb_32(uint32_t a); -/* Convenience method for uint64_t. */ -static ossl_inline uint64_t constant_time_msb_64(uint64_t a); - -/* Returns 0xff..f if a < b and 0 otherwise. */ -static ossl_inline unsigned int constant_time_lt(unsigned int a, - unsigned int b); -/* Convenience method for getting an 8-bit mask. */ -static ossl_inline unsigned char constant_time_lt_8(unsigned int a, - unsigned int b); -/* Convenience method for uint64_t. */ -static ossl_inline uint64_t constant_time_lt_64(uint64_t a, uint64_t b); - -/* Returns 0xff..f if a >= b and 0 otherwise. */ -static ossl_inline unsigned int constant_time_ge(unsigned int a, - unsigned int b); -/* Convenience method for getting an 8-bit mask. */ -static ossl_inline unsigned char constant_time_ge_8(unsigned int a, - unsigned int b); - -/* Returns 0xff..f if a == 0 and 0 otherwise. */ -static ossl_inline unsigned int constant_time_is_zero(unsigned int a); -/* Convenience method for getting an 8-bit mask. */ -static ossl_inline unsigned char constant_time_is_zero_8(unsigned int a); -/* Convenience method for getting a 32-bit mask. */ -static ossl_inline uint32_t constant_time_is_zero_32(uint32_t a); - -/* Returns 0xff..f if a == b and 0 otherwise. */ -static ossl_inline unsigned int constant_time_eq(unsigned int a, - unsigned int b); -/* Convenience method for getting an 8-bit mask. */ -static ossl_inline unsigned char constant_time_eq_8(unsigned int a, - unsigned int b); -/* Signed integers. */ -static ossl_inline unsigned int constant_time_eq_int(int a, int b); -/* Convenience method for getting an 8-bit mask. */ -static ossl_inline unsigned char constant_time_eq_int_8(int a, int b); - -/*- - * Returns (mask & a) | (~mask & b). - * - * When |mask| is all 1s or all 0s (as returned by the methods above), - * the select methods return either |a| (if |mask| is nonzero) or |b| - * (if |mask| is zero). - */ -static ossl_inline unsigned int constant_time_select(unsigned int mask, - unsigned int a, - unsigned int b); -/* Convenience method for unsigned chars. */ -static ossl_inline unsigned char constant_time_select_8(unsigned char mask, - unsigned char a, - unsigned char b); - -/* Convenience method for uint32_t. */ -static ossl_inline uint32_t constant_time_select_32(uint32_t mask, uint32_t a, - uint32_t b); - -/* Convenience method for uint64_t. */ -static ossl_inline uint64_t constant_time_select_64(uint64_t mask, uint64_t a, - uint64_t b); -/* Convenience method for signed integers. */ -static ossl_inline int constant_time_select_int(unsigned int mask, int a, - int b); - - -static ossl_inline unsigned int constant_time_msb(unsigned int a) -{ - return 0 - (a >> (sizeof(a) * 8 - 1)); -} - - -static ossl_inline uint32_t constant_time_msb_32(uint32_t a) -{ - return 0 - (a >> 31); -} - -static ossl_inline uint64_t constant_time_msb_64(uint64_t a) -{ - return 0 - (a >> 63); -} - -static ossl_inline size_t constant_time_msb_s(size_t a) -{ - return 0 - (a >> (sizeof(a) * 8 - 1)); -} - -static ossl_inline unsigned int constant_time_lt(unsigned int a, - unsigned int b) -{ - return constant_time_msb(a ^ ((a ^ b) | ((a - b) ^ b))); -} - -static ossl_inline size_t constant_time_lt_s(size_t a, size_t b) -{ - return constant_time_msb_s(a ^ ((a ^ b) | ((a - b) ^ b))); -} - -static ossl_inline unsigned char constant_time_lt_8(unsigned int a, - unsigned int b) -{ - return (unsigned char)constant_time_lt(a, b); -} - -static ossl_inline uint64_t constant_time_lt_64(uint64_t a, uint64_t b) -{ - return constant_time_msb_64(a ^ ((a ^ b) | ((a - b) ^ b))); -} - -static ossl_inline unsigned int constant_time_ge(unsigned int a, - unsigned int b) -{ - return ~constant_time_lt(a, b); -} - -static ossl_inline size_t constant_time_ge_s(size_t a, size_t b) -{ - return ~constant_time_lt_s(a, b); -} - -static ossl_inline unsigned char constant_time_ge_8(unsigned int a, - unsigned int b) -{ - return (unsigned char)constant_time_ge(a, b); -} - -static ossl_inline unsigned char constant_time_ge_8_s(size_t a, size_t b) -{ - return (unsigned char)constant_time_ge_s(a, b); -} - -static ossl_inline unsigned int constant_time_is_zero(unsigned int a) -{ - return constant_time_msb(~a & (a - 1)); -} - -static ossl_inline size_t constant_time_is_zero_s(size_t a) -{ - return constant_time_msb_s(~a & (a - 1)); -} - -static ossl_inline unsigned char constant_time_is_zero_8(unsigned int a) -{ - return (unsigned char)constant_time_is_zero(a); -} - -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) -{ - return constant_time_is_zero(a ^ b); -} - -static ossl_inline size_t constant_time_eq_s(size_t a, size_t b) -{ - return constant_time_is_zero_s(a ^ b); -} - -static ossl_inline unsigned char constant_time_eq_8(unsigned int a, - unsigned int b) -{ - return (unsigned char)constant_time_eq(a, b); -} - -static ossl_inline unsigned char constant_time_eq_8_s(size_t a, size_t b) -{ - return (unsigned char)constant_time_eq_s(a, b); -} - -static ossl_inline unsigned int constant_time_eq_int(int a, int b) -{ - return constant_time_eq((unsigned)(a), (unsigned)(b)); -} - -static ossl_inline unsigned char constant_time_eq_int_8(int a, int b) -{ - return constant_time_eq_8((unsigned)(a), (unsigned)(b)); -} - -/* - * Returns the value unmodified, but avoids optimizations. - * The barriers prevent the compiler from narrowing down the - * possible value range of the mask and ~mask in the select - * statements, which avoids the recognition of the select - * and turning it into a conditional load or branch. - */ -static ossl_inline unsigned int value_barrier(unsigned int a) -{ -#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) - unsigned int r; - __asm__("" : "=r"(r) : "0"(a)); -#else - volatile unsigned int r = a; -#endif - return r; -} - -/* Convenience method for uint32_t. */ -static ossl_inline uint32_t value_barrier_32(uint32_t a) -{ -#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) - uint32_t r; - __asm__("" : "=r"(r) : "0"(a)); -#else - volatile uint32_t r = a; -#endif - return r; -} - -/* Convenience method for uint64_t. */ -static ossl_inline uint64_t value_barrier_64(uint64_t a) -{ -#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) - uint64_t r; - __asm__("" : "=r"(r) : "0"(a)); -#else - volatile uint64_t r = a; -#endif - return r; -} - -/* Convenience method for size_t. */ -static ossl_inline size_t value_barrier_s(size_t a) -{ -#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) - size_t r; - __asm__("" : "=r"(r) : "0"(a)); -#else - volatile size_t r = a; -#endif - return r; -} - -static ossl_inline unsigned int constant_time_select(unsigned int mask, - unsigned int a, - unsigned int b) -{ - return (value_barrier(mask) & a) | (value_barrier(~mask) & b); -} - -static ossl_inline size_t constant_time_select_s(size_t mask, - size_t a, - size_t b) -{ - return (value_barrier_s(mask) & a) | (value_barrier_s(~mask) & b); -} - -static ossl_inline unsigned char constant_time_select_8(unsigned char mask, - unsigned char a, - unsigned char b) -{ - return (unsigned char)constant_time_select(mask, a, b); -} - -static ossl_inline int constant_time_select_int(unsigned int mask, int a, - int b) -{ - return (int)constant_time_select(mask, (unsigned)(a), (unsigned)(b)); -} - -static ossl_inline int constant_time_select_int_s(size_t mask, int a, int b) -{ - return (int)constant_time_select((unsigned)mask, (unsigned)(a), - (unsigned)(b)); -} - -static ossl_inline uint32_t constant_time_select_32(uint32_t mask, uint32_t a, - uint32_t b) -{ - return (value_barrier_32(mask) & a) | (value_barrier_32(~mask) & b); -} - -static ossl_inline uint64_t constant_time_select_64(uint64_t mask, uint64_t a, - uint64_t b) -{ - return (value_barrier_64(mask) & a) | (value_barrier_64(~mask) & b); -} - -/* - * mask must be 0xFFFFFFFF or 0x00000000. - * - * if (mask) { - * uint32_t tmp = *a; - * - * *a = *b; - * *b = tmp; - * } - */ -static ossl_inline void constant_time_cond_swap_32(uint32_t mask, uint32_t *a, - uint32_t *b) -{ - uint32_t xor = *a ^ *b; - - xor &= mask; - *a ^= xor; - *b ^= xor; -} - -/* - * mask must be 0xFFFFFFFF or 0x00000000. - * - * if (mask) { - * uint64_t tmp = *a; - * - * *a = *b; - * *b = tmp; - * } - */ -static ossl_inline void constant_time_cond_swap_64(uint64_t mask, uint64_t *a, - uint64_t *b) -{ - uint64_t xor = *a ^ *b; - - xor &= mask; - *a ^= xor; - *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 - * private. - */ -static ossl_inline void constant_time_lookup(void *out, - const void *table, - size_t rowsize, - size_t numrows, - size_t idx) -{ - size_t i, j; - const unsigned char *tablec = (const unsigned char *)table; - unsigned char *outc = (unsigned char *)out; - unsigned char mask; - - memset(out, 0, rowsize); - - /* Note idx may underflow - but that is well defined */ - for (i = 0; i < numrows; i++, idx--) { - mask = (unsigned char)constant_time_is_zero_s(idx); - for (j = 0; j < rowsize; j++) - *(outc + j) |= constant_time_select_8(mask, *(tablec++), 0); - } -} - -/* - * Expected usage pattern is to unconditionally set error and then - * wipe it if there was no actual error. |clear| is 1 or 0. - */ -void err_clear_last_constant_time(int clear); - -#endif /* OSSL_INTERNAL_CONSTANT_TIME_H */ 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 deleted file mode 100644 index 03adb66b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/core.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * 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 deleted file mode 100644 index 64851fd8..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/cryptlib.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * 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 OSSL_INTERNAL_CRYPTLIB_H -# define OSSL_INTERNAL_CRYPTLIB_H -# pragma once - -# ifdef OPENSSL_USE_APPLINK -# define BIO_FLAGS_UPLINK_INTERNAL 0x8000 -# include "ms/uplink.h" -# else -# define BIO_FLAGS_UPLINK_INTERNAL 0 -# endif - -# include "internal/common.h" - -# include -# include -# include -# include -# include - -typedef struct ex_callback_st EX_CALLBACK; -DEFINE_STACK_OF(EX_CALLBACK) - -typedef struct mem_st MEM; -DEFINE_LHASH_OF_EX(MEM); - -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, ...); -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); - -char *ossl_safe_getenv(const char *name); - -extern CRYPTO_RWLOCK *memdbg_lock; -int openssl_strerror_r(int errnum, char *buf, size_t buflen); -# if !defined(OPENSSL_NO_STDIO) -FILE *openssl_fopen(const char *filename, const char *mode); -# else -void *openssl_fopen(const char *filename, const char *mode); -# endif - -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_THREAD_INDEX 19 -# define OSSL_LIB_CTX_DECODER_CACHE_INDEX 20 -# define OSSL_LIB_CTX_MAX_INDEXES 20 - -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); - -#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 deleted file mode 100644 index a3d78a7f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/dane.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. 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_DANE_H -#define OSSL_INTERNAL_DANE_H -# pragma once - -# include - -/*- - * Certificate usages: - * https://tools.ietf.org/html/rfc6698#section-2.1.1 - */ -#define DANETLS_USAGE_PKIX_TA 0 -#define DANETLS_USAGE_PKIX_EE 1 -#define DANETLS_USAGE_DANE_TA 2 -#define DANETLS_USAGE_DANE_EE 3 -#define DANETLS_USAGE_LAST DANETLS_USAGE_DANE_EE - -/*- - * Selectors: - * https://tools.ietf.org/html/rfc6698#section-2.1.2 - */ -#define DANETLS_SELECTOR_CERT 0 -#define DANETLS_SELECTOR_SPKI 1 -#define DANETLS_SELECTOR_LAST DANETLS_SELECTOR_SPKI - -/*- - * Matching types: - * https://tools.ietf.org/html/rfc6698#section-2.1.3 - */ -#define DANETLS_MATCHING_FULL 0 -#define DANETLS_MATCHING_2256 1 -#define DANETLS_MATCHING_2512 2 -#define DANETLS_MATCHING_LAST DANETLS_MATCHING_2512 - -typedef struct danetls_record_st { - uint8_t usage; - uint8_t selector; - uint8_t mtype; - unsigned char *data; - size_t dlen; - EVP_PKEY *spki; -} danetls_record; - -DEFINE_STACK_OF(danetls_record) - -/* - * Shared DANE context - */ -struct dane_ctx_st { - const EVP_MD **mdevp; /* mtype -> digest */ - uint8_t *mdord; /* mtype -> preference */ - uint8_t mdmax; /* highest supported mtype */ - unsigned long flags; /* feature bitmask */ -}; - -/* - * Per connection DANE state - */ -struct ssl_dane_st { - struct dane_ctx_st *dctx; - STACK_OF(danetls_record) *trecs; - STACK_OF(X509) *certs; /* DANE-TA(2) Cert(0) Full(0) certs */ - danetls_record *mtlsa; /* Matching TLSA record */ - X509 *mcert; /* DANE matched cert */ - uint32_t umask; /* Usages present */ - int mdpth; /* Depth of matched cert */ - int pdpth; /* Depth of PKIX trust */ - unsigned long flags; /* feature bitmask */ -}; - -#define DANETLS_ENABLED(dane) \ - ((dane) != NULL && sk_danetls_record_num((dane)->trecs) > 0) - -#define DANETLS_USAGE_BIT(u) (((uint32_t)1) << u) - -#define DANETLS_PKIX_TA_MASK (DANETLS_USAGE_BIT(DANETLS_USAGE_PKIX_TA)) -#define DANETLS_PKIX_EE_MASK (DANETLS_USAGE_BIT(DANETLS_USAGE_PKIX_EE)) -#define DANETLS_DANE_TA_MASK (DANETLS_USAGE_BIT(DANETLS_USAGE_DANE_TA)) -#define DANETLS_DANE_EE_MASK (DANETLS_USAGE_BIT(DANETLS_USAGE_DANE_EE)) - -#define DANETLS_PKIX_MASK (DANETLS_PKIX_TA_MASK | DANETLS_PKIX_EE_MASK) -#define DANETLS_DANE_MASK (DANETLS_DANE_TA_MASK | DANETLS_DANE_EE_MASK) -#define DANETLS_TA_MASK (DANETLS_PKIX_TA_MASK | DANETLS_DANE_TA_MASK) -#define DANETLS_EE_MASK (DANETLS_PKIX_EE_MASK | DANETLS_DANE_EE_MASK) - -#define DANETLS_HAS_PKIX(dane) ((dane) && ((dane)->umask & DANETLS_PKIX_MASK)) -#define DANETLS_HAS_DANE(dane) ((dane) && ((dane)->umask & DANETLS_DANE_MASK)) -#define DANETLS_HAS_TA(dane) ((dane) && ((dane)->umask & DANETLS_TA_MASK)) -#define DANETLS_HAS_EE(dane) ((dane) && ((dane)->umask & DANETLS_EE_MASK)) - -#define DANETLS_HAS_PKIX_TA(dane) ((dane)&&((dane)->umask & DANETLS_PKIX_TA_MASK)) -#define DANETLS_HAS_PKIX_EE(dane) ((dane)&&((dane)->umask & DANETLS_PKIX_EE_MASK)) -#define DANETLS_HAS_DANE_TA(dane) ((dane)&&((dane)->umask & DANETLS_DANE_TA_MASK)) -#define DANETLS_HAS_DANE_EE(dane) ((dane)&&((dane)->umask & DANETLS_DANE_EE_MASK)) - -#endif /* OSSL_INTERNAL_DANE_H */ 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 deleted file mode 100644 index a313a015..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/deprecated.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index 8d6db8f0..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/der.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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_INTERNAL_DER_H -# define OSSL_INTERNAL_DER_H -# pragma once - -# 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); - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/deterministic_nonce.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/deterministic_nonce.h deleted file mode 100644 index 5f0313fe..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/deterministic_nonce.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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_INTERNAL_DETERMINISTIC_NONCE_H -# define OSSL_INTERNAL_DETERMINISTIC_NONCE_H -# pragma once - -# include - -int ossl_gen_deterministic_nonce_rfc6979(BIGNUM *out, const BIGNUM *q, - const BIGNUM *priv, - const unsigned char *message, - size_t message_len, - const char *digestname, - OSSL_LIB_CTX *libctx, - const char *propq); - -#endif /*OSSL_INTERNAL_DETERMINISTIC_NONCE_H */ 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 deleted file mode 100644 index 160ddb98..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/dso.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * 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 OSSL_INTERNAL_DSO_H -# define OSSL_INTERNAL_DSO_H -# pragma once - -# include -# include "internal/dsoerr.h" - -/* These values are used as commands to DSO_ctrl() */ -# define DSO_CTRL_GET_FLAGS 1 -# define DSO_CTRL_SET_FLAGS 2 -# define DSO_CTRL_OR_FLAGS 3 - -/* - * By default, DSO_load() will translate the provided filename into a form - * typical for the platform using the dso_name_converter function of the - * method. Eg. win32 will transform "blah" into "blah.dll", and dlfcn will - * transform it into "libblah.so". This callback could even utilise the - * DSO_METHOD's converter too if it only wants to override behaviour for - * one or two possible DSO methods. However, the following flag can be - * set in a DSO to prevent *any* native name-translation at all - eg. if - * the caller has prompted the user for a path to a driver library so the - * filename should be interpreted as-is. - */ -# define DSO_FLAG_NO_NAME_TRANSLATION 0x01 -/* - * An extra flag to give if only the extension should be added as - * translation. This is obviously only of importance on Unix and other - * operating systems where the translation also may prefix the name with - * something, like 'lib', and ignored everywhere else. This flag is also - * ignored if DSO_FLAG_NO_NAME_TRANSLATION is used at the same time. - */ -# define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02 - -/* - * Don't unload the DSO when we call DSO_free() - */ -# define DSO_FLAG_NO_UNLOAD_ON_FREE 0x04 - -/* - * This flag loads the library with public symbols. Meaning: The exported - * symbols of this library are public to all libraries loaded after this - * library. At the moment only implemented in unix. - */ -# define DSO_FLAG_GLOBAL_SYMBOLS 0x20 - -typedef void (*DSO_FUNC_TYPE) (void); - -typedef struct dso_st DSO; -typedef struct dso_meth_st DSO_METHOD; - -/* - * The function prototype used for method functions (or caller-provided - * callbacks) that transform filenames. They are passed a DSO structure - * pointer (or NULL if they are to be used independently of a DSO object) and - * a filename to transform. They should either return NULL (if there is an - * error condition) or a newly allocated string containing the transformed - * form that the caller will need to free with OPENSSL_free() when done. - */ -typedef char *(*DSO_NAME_CONVERTER_FUNC)(DSO *, const char *); -/* - * The function prototype used for method functions (or caller-provided - * callbacks) that merge two file specifications. They are passed a DSO - * structure pointer (or NULL if they are to be used independently of a DSO - * object) and two file specifications to merge. They should either return - * NULL (if there is an error condition) or a newly allocated string - * containing the result of merging that the caller will need to free with - * OPENSSL_free() when done. Here, merging means that bits and pieces are - * taken from each of the file specifications and added together in whatever - * fashion that is sensible for the DSO method in question. The only rule - * that really applies is that if the two specification contain pieces of the - * same type, the copy from the first string takes priority. One could see - * it as the first specification is the one given by the user and the second - * being a bunch of defaults to add on if they're missing in the first. - */ -typedef char *(*DSO_MERGER_FUNC)(DSO *, const char *, const char *); - -DSO *DSO_new(void); -int DSO_free(DSO *dso); -int DSO_flags(DSO *dso); -int DSO_up_ref(DSO *dso); -long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg); - -/* - * These functions can be used to get/set the platform-independent filename - * used for a DSO. NB: set will fail if the DSO is already loaded. - */ -const char *DSO_get_filename(DSO *dso); -int DSO_set_filename(DSO *dso, const char *filename); -/* - * This function will invoke the DSO's name_converter callback to translate a - * filename, or if the callback isn't set it will instead use the DSO_METHOD's - * converter. If "filename" is NULL, the "filename" in the DSO itself will be - * used. If the DSO_FLAG_NO_NAME_TRANSLATION flag is set, then the filename is - * simply duplicated. NB: This function is usually called from within a - * DSO_METHOD during the processing of a DSO_load() call, and is exposed so - * that caller-created DSO_METHODs can do the same thing. A non-NULL return - * value will need to be OPENSSL_free()'d. - */ -char *DSO_convert_filename(DSO *dso, const char *filename); -/* - * This function will invoke the DSO's merger callback to merge two file - * specifications, or if the callback isn't set it will instead use the - * DSO_METHOD's merger. A non-NULL return value will need to be - * OPENSSL_free()'d. - */ -char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2); - -/* - * The all-singing all-dancing load function, you normally pass NULL for the - * first and third parameters. Use DSO_up_ref and DSO_free for subsequent - * reference count handling. Any flags passed in will be set in the - * constructed DSO after its init() function but before the load operation. - * If 'dso' is non-NULL, 'flags' is ignored. - */ -DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags); - -/* This function binds to a function inside a shared library. */ -DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname); - -/* - * This method is the default, but will beg, borrow, or steal whatever method - * should be the default on any particular platform (including - * DSO_METH_null() if necessary). - */ -DSO_METHOD *DSO_METHOD_openssl(void); - -/* - * This function writes null-terminated pathname of DSO module containing - * 'addr' into 'sz' large caller-provided 'path' and returns the number of - * characters [including trailing zero] written to it. If 'sz' is 0 or - * negative, 'path' is ignored and required amount of characters [including - * trailing zero] to accommodate pathname is returned. If 'addr' is NULL, then - * pathname of cryptolib itself is returned. Negative or zero return value - * denotes error. - */ -int DSO_pathbyaddr(void *addr, char *path, int sz); - -/* - * Like DSO_pathbyaddr() but instead returns a handle to the DSO for the symbol - * or NULL on error. - */ -DSO *DSO_dsobyaddr(void *addr, int flags); - -/* - * This function should be used with caution! It looks up symbols in *all* - * loaded modules and if module gets unloaded by somebody else attempt to - * dereference the pointer is doomed to have fatal consequences. Primary - * usage for this function is to probe *core* system functionality, e.g. - * check if getnameinfo(3) is available at run-time without bothering about - * OS-specific details such as libc.so.versioning or where does it actually - * reside: in libc itself or libsocket. - */ -void *DSO_global_lookup(const char *name); - -#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 deleted file mode 100644 index b1719e83..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/dsoerr.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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_DSOERR_H -# define OSSL_INTERNAL_DSOERR_H -# pragma once - -# include -# include - -# ifdef __cplusplus -extern "C" { -# endif - -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 - - -# 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 deleted file mode 100644 index d1ed62e8..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/e_os.h +++ /dev/null @@ -1,384 +0,0 @@ -/* - * 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 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(void); -# 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 defined(_MSC_VER) && (_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 */ - -/* ----------------------------- 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(void); -# ifndef NSSGETPID_MACRO -# define NSSGETPID_MACRO -# include -# include - inline int nssgetpid(void) - { - 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 deleted file mode 100644 index 7d5a73b1..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/endian.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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_ENDIAN_H -# define OSSL_INTERNAL_ENDIAN_H -# pragma once - -/* - * IS_LITTLE_ENDIAN and IS_BIG_ENDIAN can be used to detect the endianness - * 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 deleted file mode 100644 index d8a308f0..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/err.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 OSSL_INTERNAL_ERR_H -# define OSSL_INTERNAL_ERR_H -# pragma once - -void err_free_strings_int(void); - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/event_queue.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/event_queue.h deleted file mode 100644 index bda1ee6a..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/event_queue.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * 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_INTERNAL_EVENT_QUEUE_H -# define OSSL_INTERNAL_EVENT_QUEUE_H -# pragma once - -# include "internal/priority_queue.h" -# include "internal/time.h" - -/* - * Opaque type holding an event. - */ -typedef struct ossl_event_st OSSL_EVENT; - -DEFINE_PRIORITY_QUEUE_OF(OSSL_EVENT); - -/* - * Public type representing an event queue, the underlying structure being - * opaque. - */ -typedef struct ossl_event_queue_st OSSL_EVENT_QUEUE; - -/* - * Public type representing a event queue entry. - * It is (internally) public so that it can be embedded into other structures, - * it should otherwise be treated as opaque. - */ -struct ossl_event_st { - uint32_t type; /* What type of event this is */ - uint32_t priority; /* What priority this event has */ - OSSL_TIME when; /* When the event is scheduled to happen */ - void *ctx; /* User argument passed to call backs */ - void *payload; /* Event specific data of unknown kind */ - size_t payload_size; /* Length (in bytes) of event specific data */ - - /* These fields are for internal use only */ - PRIORITY_QUEUE_OF(OSSL_EVENT) *queue; /* Queue containing this event */ - size_t ref; /* ID for this event */ - unsigned int flag_dynamic : 1; /* Malloced or not? */ -}; - -/* - * Utility function to populate an event structure and add it to the queue - */ -int ossl_event_queue_add(OSSL_EVENT_QUEUE *queue, OSSL_EVENT *event, - uint32_t type, uint32_t priority, - OSSL_TIME when, void *ctx, - void *payload, size_t payload_size); - -/* - * Utility functions to extract event fields - */ -static ossl_unused ossl_inline -uint32_t ossl_event_get_type(const OSSL_EVENT *event) -{ - return event->type; -} - -static ossl_unused ossl_inline -uint32_t ossl_event_get_priority(const OSSL_EVENT *event) -{ - return event->priority; -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_event_get_when(const OSSL_EVENT *event) -{ - return event->when; -} - -static ossl_unused ossl_inline -void *ossl_event_get0_ctx(const OSSL_EVENT *event) -{ - return event->ctx; -} - -static ossl_unused ossl_inline -void *ossl_event_get0_payload(const OSSL_EVENT *event, size_t *length) -{ - if (length != NULL) - *length = event->payload_size; - return event->payload; -} - -/* - * Create and free a queue. - */ -OSSL_EVENT_QUEUE *ossl_event_queue_new(void); -void ossl_event_queue_free(OSSL_EVENT_QUEUE *queue); - -/* - * Schedule a new event into an event queue. - * - * The event parameters are taken from the function arguments. - * - * The function returns NULL on failure and the added event on success. - */ -OSSL_EVENT *ossl_event_queue_add_new(OSSL_EVENT_QUEUE *queue, - uint32_t type, uint32_t priority, - OSSL_TIME when, void *ctx, - void *payload, size_t payload_size) -; - -/* - * Schedule an event into an event queue. - * - * The event parameters are taken from the function arguments. - * - * The function returns 0 on failure and 1 on success. - */ -int ossl_event_queue_add(OSSL_EVENT_QUEUE *queue, OSSL_EVENT *event, - uint32_t type, uint32_t priority, - OSSL_TIME when, void *ctx, - void *payload, size_t payload_size); - -/* - * Delete an event from the queue. - * This will cause the early deletion function to be called if it is non-NULL. - * A pointer to the event structure is returned. - */ -int ossl_event_queue_remove(OSSL_EVENT_QUEUE *queue, OSSL_EVENT *event); - -/* - * Free a dynamic event. - * Is a NOP for a static event. - */ -void ossl_event_free(OSSL_EVENT *event); - -/* - * Return the time until the next event for the specified event, if the event's - * time is past, zero is returned. Once activated, the event reference becomes - * invalid and this function becomes undefined. - */ -OSSL_TIME ossl_event_time_until(const OSSL_EVENT *event); - -/* - * Return the time until the next event in the queue. - * If the next event is in the past, zero is returned. - */ -OSSL_TIME ossl_event_queue_time_until_next(const OSSL_EVENT_QUEUE *queue); - -/* - * Postpone an event to trigger at the specified time. - * If the event has triggered, this function's behaviour is undefined. - */ -int ossl_event_queue_postpone_until(OSSL_EVENT_QUEUE *queue, - OSSL_EVENT *event, - OSSL_TIME when); - -/* - * Return the next event to process. - */ -int ossl_event_queue_get1_next_event(OSSL_EVENT_QUEUE *queue, - OSSL_EVENT **event); - -#endif 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 deleted file mode 100644 index edd8381e..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/ffc.h +++ /dev/null @@ -1,221 +0,0 @@ -/* - * 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 - -/* - * 0x80, 0x100 reserved by include/openssl/dh.h with check bits that are not - * relevant for FFC. - */ - -# 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 -# define FFC_CHECK_BAD_LN_PAIR 0x20000 -# define FFC_CHECK_INVALID_SEED_SIZE 0x40000 - -/* 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); -void 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/hpke_util.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/hpke_util.h deleted file mode 100644 index e1da5e05..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/hpke_util.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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_INTERNAL_HPKE_UTIL_H -# define OSSL_INTERNAL_HPKE_UTIL_H -# pragma once - -/* Constants from RFC 9180 Section 7.1 and 7.3 */ -# define OSSL_HPKE_MAX_SECRET 64 -# define OSSL_HPKE_MAX_PUBLIC 133 -# define OSSL_HPKE_MAX_PRIVATE 66 -# define OSSL_HPKE_MAX_KDF_INPUTLEN 64 - -/* - * max length of a base-nonce (the Nn field from OSSL_HPKE_AEAD_INFO), this - * is used for a local stack array size - */ -# define OSSL_HPKE_MAX_NONCELEN 12 - -/* - * @brief info about a KEM - * Used to store constants from Section 7.1 "Table 2 KEM IDs" - * and the bitmask for EC curves described in Section 7.1.3 DeriveKeyPair - */ -typedef struct { - uint16_t kem_id; /* code point for key encipherment method */ - const char *keytype; /* string form of algtype "EC"/"X25519"/"X448" */ - const char *groupname; /* string form of EC group for NIST curves */ - const char *mdname; /* hash alg name for the HKDF */ - size_t Nsecret; /* size of secrets */ - size_t Nenc; /* length of encapsulated key */ - size_t Npk; /* length of public key */ - size_t Nsk; /* length of raw private key */ - uint8_t bitmask; -} OSSL_HPKE_KEM_INFO; - -/* - * @brief info about a KDF - */ -typedef struct { - uint16_t kdf_id; /* code point for KDF */ - const char *mdname; /* hash alg name for the HKDF */ - size_t Nh; /* length of hash/extract output */ -} OSSL_HPKE_KDF_INFO; - -/* - * @brief info about an AEAD - */ -typedef struct { - uint16_t aead_id; /* code point for aead alg */ - const char *name; /* alg name */ - size_t taglen; /* aead tag len */ - size_t Nk; /* size of a key for this aead */ - size_t Nn; /* length of a nonce for this aead */ -} OSSL_HPKE_AEAD_INFO; - -const OSSL_HPKE_KEM_INFO *ossl_HPKE_KEM_INFO_find_curve(const char *curve); -const OSSL_HPKE_KEM_INFO *ossl_HPKE_KEM_INFO_find_id(uint16_t kemid); -const OSSL_HPKE_KEM_INFO *ossl_HPKE_KEM_INFO_find_random(OSSL_LIB_CTX *ctx); -const OSSL_HPKE_KDF_INFO *ossl_HPKE_KDF_INFO_find_id(uint16_t kdfid); -const OSSL_HPKE_KDF_INFO *ossl_HPKE_KDF_INFO_find_random(OSSL_LIB_CTX *ctx); -const OSSL_HPKE_AEAD_INFO *ossl_HPKE_AEAD_INFO_find_id(uint16_t aeadid); -const OSSL_HPKE_AEAD_INFO *ossl_HPKE_AEAD_INFO_find_random(OSSL_LIB_CTX *ctx); - -int ossl_hpke_kdf_extract(EVP_KDF_CTX *kctx, - unsigned char *prk, size_t prklen, - const unsigned char *salt, size_t saltlen, - const unsigned char *ikm, size_t ikmlen); - -int ossl_hpke_kdf_expand(EVP_KDF_CTX *kctx, - unsigned char *okm, size_t okmlen, - const unsigned char *prk, size_t prklen, - const unsigned char *info, size_t infolen); - -int ossl_hpke_labeled_extract(EVP_KDF_CTX *kctx, - unsigned char *prk, size_t prklen, - const unsigned char *salt, size_t saltlen, - const char *protocol_label, - const unsigned char *suiteid, size_t suiteidlen, - const char *label, - const unsigned char *ikm, size_t ikmlen); -int ossl_hpke_labeled_expand(EVP_KDF_CTX *kctx, - unsigned char *okm, size_t okmlen, - const unsigned char *prk, size_t prklen, - const char *protocol_label, - const unsigned char *suiteid, size_t suiteidlen, - const char *label, - const unsigned char *info, size_t infolen); - -EVP_KDF_CTX *ossl_kdf_ctx_create(const char *kdfname, const char *mdname, - OSSL_LIB_CTX *libctx, const char *propq); - -int ossl_hpke_str2suite(const char *suitestr, OSSL_HPKE_SUITE *suite); -#endif 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 deleted file mode 100644 index 072653dc..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/ktls.h +++ /dev/null @@ -1,434 +0,0 @@ -/* - * Copyright 2018-2024 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#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 -# ifdef TLS_CHACHA20_IV_LEN -# ifndef OPENSSL_NO_CHACHA -# define OPENSSL_KTLS_CHACHA20_POLY1305 -# endif -# endif - -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 -} - -/* Not supported on FreeBSD */ -static ossl_inline int ktls_enable_tx_zerocopy_sendfile(int fd) -{ - return 0; -} - -/* - * 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 -# if LINUX_VERSION_CODE < KERNEL_VERSION(5, 19, 0) -# define OPENSSL_NO_KTLS_ZC_TX -# ifndef PEDANTIC -# warning "KTLS requires Kernel Headers >= 5.19.0 for zerocopy sendfile" -# warning "Skipping Compilation of KTLS zerocopy sendfile" -# 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; -} - -static ossl_inline int ktls_enable_tx_zerocopy_sendfile(int fd) -{ -#ifndef OPENSSL_NO_KTLS_ZC_TX - int enable = 1; - - return setsockopt(fd, SOL_TLS, TLS_TX_ZEROCOPY_RO, - &enable, sizeof(enable)) ? 0 : 1; -#else - return 0; -#endif -} - -/* - * 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/list.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/list.h deleted file mode 100644 index fdd356c4..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/list.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * 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_INTERNAL_LIST_H -# define OSSL_INTERNAL_LIST_H -# pragma once - -# include -# include - -# ifdef NDEBUG -# define OSSL_LIST_DBG(x) -# else -# define OSSL_LIST_DBG(x) x; -# endif - -/* Define a list structure */ -# define OSSL_LIST(name) OSSL_LIST_ ## name - -/* Define fields to include an element of a list */ -# define OSSL_LIST_MEMBER(name, type) \ - struct { \ - type *next, *prev; \ - OSSL_LIST_DBG(struct ossl_list_st_ ## name *list) \ - } ossl_list_ ## name - -# define DEFINE_LIST_OF(name, type) \ - typedef struct ossl_list_st_ ## name OSSL_LIST(name); \ - struct ossl_list_st_ ## name { \ - type *alpha, *omega; \ - size_t num_elems; \ - }; \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_init(OSSL_LIST(name) *list) \ - { \ - memset(list, 0, sizeof(*list)); \ - } \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_init_elem(type *elem) \ - { \ - memset(&elem->ossl_list_ ## name, 0, \ - sizeof(elem->ossl_list_ ## name)); \ - } \ - static ossl_unused ossl_inline int \ - ossl_list_##name##_is_empty(const OSSL_LIST(name) *list) \ - { \ - return list->num_elems == 0; \ - } \ - static ossl_unused ossl_inline size_t \ - ossl_list_##name##_num(const OSSL_LIST(name) *list) \ - { \ - return list->num_elems; \ - } \ - static ossl_unused ossl_inline type * \ - ossl_list_##name##_head(const OSSL_LIST(name) *list) \ - { \ - assert(list->alpha == NULL \ - || list->alpha->ossl_list_ ## name.list == list); \ - return list->alpha; \ - } \ - static ossl_unused ossl_inline type * \ - ossl_list_##name##_tail(const OSSL_LIST(name) *list) \ - { \ - assert(list->omega == NULL \ - || list->omega->ossl_list_ ## name.list == list); \ - return list->omega; \ - } \ - static ossl_unused ossl_inline type * \ - ossl_list_##name##_next(const type *elem) \ - { \ - assert(elem->ossl_list_ ## name.next == NULL \ - || elem->ossl_list_ ## name.next \ - ->ossl_list_ ## name.prev == elem); \ - return elem->ossl_list_ ## name.next; \ - } \ - static ossl_unused ossl_inline type * \ - ossl_list_##name##_prev(const type *elem) \ - { \ - assert(elem->ossl_list_ ## name.prev == NULL \ - || elem->ossl_list_ ## name.prev \ - ->ossl_list_ ## name.next == elem); \ - return elem->ossl_list_ ## name.prev; \ - } \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_remove(OSSL_LIST(name) *list, type *elem) \ - { \ - assert(elem->ossl_list_ ## name.list == list); \ - OSSL_LIST_DBG(elem->ossl_list_ ## name.list = NULL) \ - if (list->alpha == elem) \ - list->alpha = elem->ossl_list_ ## name.next; \ - if (list->omega == elem) \ - list->omega = elem->ossl_list_ ## name.prev; \ - if (elem->ossl_list_ ## name.prev != NULL) \ - elem->ossl_list_ ## name.prev->ossl_list_ ## name.next = \ - elem->ossl_list_ ## name.next; \ - if (elem->ossl_list_ ## name.next != NULL) \ - elem->ossl_list_ ## name.next->ossl_list_ ## name.prev = \ - elem->ossl_list_ ## name.prev; \ - list->num_elems--; \ - memset(&elem->ossl_list_ ## name, 0, \ - sizeof(elem->ossl_list_ ## name)); \ - } \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_insert_head(OSSL_LIST(name) *list, type *elem) \ - { \ - assert(elem->ossl_list_ ## name.list == NULL); \ - OSSL_LIST_DBG(elem->ossl_list_ ## name.list = list) \ - if (list->alpha != NULL) \ - list->alpha->ossl_list_ ## name.prev = elem; \ - elem->ossl_list_ ## name.next = list->alpha; \ - elem->ossl_list_ ## name.prev = NULL; \ - list->alpha = elem; \ - if (list->omega == NULL) \ - list->omega = elem; \ - list->num_elems++; \ - } \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_insert_tail(OSSL_LIST(name) *list, type *elem) \ - { \ - assert(elem->ossl_list_ ## name.list == NULL); \ - OSSL_LIST_DBG(elem->ossl_list_ ## name.list = list) \ - if (list->omega != NULL) \ - list->omega->ossl_list_ ## name.next = elem; \ - elem->ossl_list_ ## name.prev = list->omega; \ - elem->ossl_list_ ## name.next = NULL; \ - list->omega = elem; \ - if (list->alpha == NULL) \ - list->alpha = elem; \ - list->num_elems++; \ - } \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_insert_before(OSSL_LIST(name) *list, type *e, \ - type *elem) \ - { \ - assert(elem->ossl_list_ ## name.list == NULL); \ - OSSL_LIST_DBG(elem->ossl_list_ ## name.list = list) \ - elem->ossl_list_ ## name.next = e; \ - elem->ossl_list_ ## name.prev = e->ossl_list_ ## name.prev; \ - if (e->ossl_list_ ## name.prev != NULL) \ - e->ossl_list_ ## name.prev->ossl_list_ ## name.next = elem; \ - e->ossl_list_ ## name.prev = elem; \ - if (list->alpha == e) \ - list->alpha = elem; \ - list->num_elems++; \ - } \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_insert_after(OSSL_LIST(name) *list, type *e, \ - type *elem) \ - { \ - assert(elem->ossl_list_ ## name.list == NULL); \ - OSSL_LIST_DBG(elem->ossl_list_ ## name.list = list) \ - elem->ossl_list_ ## name.prev = e; \ - elem->ossl_list_ ## name.next = e->ossl_list_ ## name.next; \ - if (e->ossl_list_ ## name.next != NULL) \ - e->ossl_list_ ## name.next->ossl_list_ ## name.prev = elem; \ - e->ossl_list_ ## name.next = elem; \ - if (list->omega == e) \ - list->omega = elem; \ - list->num_elems++; \ - } \ - struct ossl_list_st_ ## name - -#endif 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 deleted file mode 100644 index 6c42a9cd..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/namemap.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 - */ - -#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 deleted file mode 100644 index b758513b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/nelem.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 47fb1677..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/numbers.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2015-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_NUMBERS_H -# define OSSL_INTERNAL_NUMBERS_H -# pragma once - -# include - -# 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 */ - -# 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 */ - -# 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)))) -# define __MININT__(T) (-__MAXINT__(T)) - -# else - -# error "do not know the integer encoding on this architecture" - -# endif - -# ifndef INT8_MAX -# define INT8_MIN __MININT__(int8_t) -# define INT8_MAX __MAXINT__(int8_t) -# define UINT8_MAX __MAXUINT__(uint8_t) -# endif - -# ifndef INT16_MAX -# define INT16_MIN __MININT__(int16_t) -# define INT16_MAX __MAXINT__(int16_t) -# define UINT16_MAX __MAXUINT__(uint16_t) -# endif - -# ifndef INT32_MAX -# define INT32_MIN __MININT__(int32_t) -# define INT32_MAX __MAXINT__(int32_t) -# define UINT32_MAX __MAXUINT__(uint32_t) -# endif - -# ifndef INT64_MAX -# define INT64_MIN __MININT__(int64_t) -# define INT64_MAX __MAXINT__(int64_t) -# define UINT64_MAX __MAXUINT__(uint64_t) -# endif - -/* - * 64-bit processor with LP64 ABI - */ -# ifdef SIXTY_FOUR_BIT_LONG -# ifndef UINT32_C -# define UINT32_C(c) (c) -# endif -# ifndef UINT64_C -# define UINT64_C(c) (c##UL) -# endif -# endif - -/* - * 64-bit processor other than LP64 ABI - */ -# ifdef SIXTY_FOUR_BIT -# ifndef UINT32_C -# define UINT32_C(c) (c##UL) -# endif -# ifndef UINT64_C -# define UINT64_C(c) (c##ULL) -# endif -# 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 deleted file mode 100644 index add34d14..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/o_dir.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 file is dual-licensed and is also available under the following - * terms: - * - * Copyright (c) 2004, Richard Levitte - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef OSSL_INTERNAL_O_DIR_H -# define OSSL_INTERNAL_O_DIR_H -# pragma once - -typedef struct OPENSSL_dir_context_st OPENSSL_DIR_CTX; - -/* - * returns NULL on error or end-of-directory. If it is end-of-directory, - * errno will be zero - */ -const char *OPENSSL_DIR_read(OPENSSL_DIR_CTX **ctx, const char *directory); -/* returns 1 on success, 0 on error */ -int OPENSSL_DIR_end(OPENSSL_DIR_CTX **ctx); - -#endif /* LPDIR_H */ 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 deleted file mode 100644 index 7abc6b8b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/packet.h +++ /dev/null @@ -1,939 +0,0 @@ -/* - * Copyright 2015-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_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 - -/* QUIC variable-length integer length prefix */ -#define WPACKET_FLAGS_QUIC_VLINT 4 - -/* - * 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/packet_quic.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/packet_quic.h deleted file mode 100644 index 5173b467..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/packet_quic.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * 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_INTERNAL_PACKET_QUIC_H -# define OSSL_INTERNAL_PACKET_QUIC_H -# pragma once - -# include "internal/packet.h" -# include "internal/quic_vlint.h" - -# ifndef OPENSSL_NO_QUIC -/* - * Decodes a QUIC variable-length integer in |pkt| and stores the result in - * |data|. - */ -__owur static ossl_inline int PACKET_get_quic_vlint(PACKET *pkt, - uint64_t *data) -{ - size_t enclen; - - if (PACKET_remaining(pkt) < 1) - return 0; - - enclen = ossl_quic_vlint_decode_len(*pkt->curr); - - if (PACKET_remaining(pkt) < enclen) - return 0; - - *data = ossl_quic_vlint_decode_unchecked(pkt->curr); - packet_forward(pkt, enclen); - return 1; -} - -/* - * Decodes a QUIC variable-length integer in |pkt| and stores the result in - * |data|. Unlike PACKET_get_quic_vlint, this does not advance the current - * position. If was_minimal is non-NULL, *was_minimal is set to 1 if the integer - * was encoded using the minimal possible number of bytes and 0 otherwise. - */ -__owur static ossl_inline int PACKET_peek_quic_vlint_ex(PACKET *pkt, - uint64_t *data, - int *was_minimal) -{ - size_t enclen; - - if (PACKET_remaining(pkt) < 1) - return 0; - - enclen = ossl_quic_vlint_decode_len(*pkt->curr); - - if (PACKET_remaining(pkt) < enclen) - return 0; - - *data = ossl_quic_vlint_decode_unchecked(pkt->curr); - - if (was_minimal != NULL) - *was_minimal = (enclen == ossl_quic_vlint_encode_len(*data)); - - return 1; -} - -__owur static ossl_inline int PACKET_peek_quic_vlint(PACKET *pkt, - uint64_t *data) -{ - return PACKET_peek_quic_vlint_ex(pkt, data, NULL); -} - -/* - * Skips over a QUIC variable-length integer in |pkt| without decoding it. - */ -__owur static ossl_inline int PACKET_skip_quic_vlint(PACKET *pkt) -{ - size_t enclen; - - if (PACKET_remaining(pkt) < 1) - return 0; - - enclen = ossl_quic_vlint_decode_len(*pkt->curr); - - if (PACKET_remaining(pkt) < enclen) - return 0; - - packet_forward(pkt, enclen); - return 1; -} - -/* - * Reads a variable-length vector prefixed with a QUIC variable-length integer - * denoting the 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_quic_length_prefixed(PACKET *pkt, - PACKET *subpkt) -{ - uint64_t length; - const unsigned char *data; - PACKET tmp = *pkt; - - if (!PACKET_get_quic_vlint(&tmp, &length) || - length > SIZE_MAX || - !PACKET_get_bytes(&tmp, &data, (size_t)length)) { - return 0; - } - - *pkt = tmp; - subpkt->curr = data; - subpkt->remaining = (size_t)length; - - return 1; -} - -/* - * Starts a QUIC sub-packet headed by a QUIC variable-length integer. A 4-byte - * representation is used. - */ -__owur int WPACKET_start_quic_sub_packet(WPACKET *pkt); - -/* - * Starts a QUIC sub-packet headed by a QUIC variable-length integer. max_len - * specifies the upper bound for the sub-packet size at the time the sub-packet - * is closed, which determines the encoding size for the variable-length - * integer header. max_len can be a precise figure or a worst-case bound - * if a precise figure is not available. - */ -__owur int WPACKET_start_quic_sub_packet_bound(WPACKET *pkt, size_t max_len); - -/* - * Allocates a QUIC sub-packet with exactly len bytes of payload, headed by a - * QUIC variable-length integer. The pointer to the payload buffer is output and - * must be filled by the caller. This function assures optimal selection of - * variable-length integer encoding length. - */ -__owur int WPACKET_quic_sub_allocate_bytes(WPACKET *pkt, size_t len, - unsigned char **bytes); - -/* - * Write a QUIC variable-length integer to the packet. - */ -__owur int WPACKET_quic_write_vlint(WPACKET *pkt, uint64_t v); - -# endif /* OPENSSL_NO_QUIC */ -#endif /* OSSL_INTERNAL_PACKET_QUIC_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 deleted file mode 100644 index 3518f008..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/param_build_set.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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_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_signed_bn(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, - const char *key, const BIGNUM *bn); -int ossl_param_build_set_signed_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/param_names.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/param_names.h deleted file mode 100644 index e721d071..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/param_names.h +++ /dev/null @@ -1,376 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/internal/param_names.h.in - * - * Copyright 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 - */ - - -int ossl_param_find_pidx(const char *s); - -/* Parameter name definitions - generated by util/perl/OpenSSL/paramnames.pm */ -#define NUM_PIDX 290 - -#define PIDX_ALG_PARAM_CIPHER 0 -#define PIDX_ALG_PARAM_DIGEST 1 -#define PIDX_ALG_PARAM_ENGINE 2 -#define PIDX_ALG_PARAM_MAC 3 -#define PIDX_ALG_PARAM_PROPERTIES 4 -#define PIDX_ASYM_CIPHER_PARAM_DIGEST PIDX_PKEY_PARAM_DIGEST -#define PIDX_ASYM_CIPHER_PARAM_ENGINE PIDX_PKEY_PARAM_ENGINE -#define PIDX_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION 5 -#define PIDX_ASYM_CIPHER_PARAM_MGF1_DIGEST PIDX_PKEY_PARAM_MGF1_DIGEST -#define PIDX_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS PIDX_PKEY_PARAM_MGF1_PROPERTIES -#define PIDX_ASYM_CIPHER_PARAM_OAEP_DIGEST PIDX_ALG_PARAM_DIGEST -#define PIDX_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS 6 -#define PIDX_ASYM_CIPHER_PARAM_OAEP_LABEL 7 -#define PIDX_ASYM_CIPHER_PARAM_PAD_MODE PIDX_PKEY_PARAM_PAD_MODE -#define PIDX_ASYM_CIPHER_PARAM_PROPERTIES PIDX_PKEY_PARAM_PROPERTIES -#define PIDX_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION 8 -#define PIDX_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION 9 -#define PIDX_CAPABILITY_TLS_GROUP_ALG 10 -#define PIDX_CAPABILITY_TLS_GROUP_ID 11 -#define PIDX_CAPABILITY_TLS_GROUP_IS_KEM 12 -#define PIDX_CAPABILITY_TLS_GROUP_MAX_DTLS 13 -#define PIDX_CAPABILITY_TLS_GROUP_MAX_TLS 14 -#define PIDX_CAPABILITY_TLS_GROUP_MIN_DTLS 15 -#define PIDX_CAPABILITY_TLS_GROUP_MIN_TLS 16 -#define PIDX_CAPABILITY_TLS_GROUP_NAME 17 -#define PIDX_CAPABILITY_TLS_GROUP_NAME_INTERNAL 18 -#define PIDX_CAPABILITY_TLS_GROUP_SECURITY_BITS 19 -#define PIDX_CAPABILITY_TLS_SIGALG_CODE_POINT 20 -#define PIDX_CAPABILITY_TLS_SIGALG_HASH_NAME 21 -#define PIDX_CAPABILITY_TLS_SIGALG_HASH_OID 22 -#define PIDX_CAPABILITY_TLS_SIGALG_IANA_NAME 23 -#define PIDX_CAPABILITY_TLS_SIGALG_KEYTYPE 24 -#define PIDX_CAPABILITY_TLS_SIGALG_KEYTYPE_OID 25 -#define PIDX_CAPABILITY_TLS_SIGALG_MAX_TLS 14 -#define PIDX_CAPABILITY_TLS_SIGALG_MIN_TLS 16 -#define PIDX_CAPABILITY_TLS_SIGALG_NAME 26 -#define PIDX_CAPABILITY_TLS_SIGALG_OID 27 -#define PIDX_CAPABILITY_TLS_SIGALG_SECURITY_BITS 28 -#define PIDX_CAPABILITY_TLS_SIGALG_SIG_NAME 29 -#define PIDX_CAPABILITY_TLS_SIGALG_SIG_OID 30 -#define PIDX_CIPHER_PARAM_AEAD 31 -#define PIDX_CIPHER_PARAM_AEAD_IVLEN PIDX_CIPHER_PARAM_IVLEN -#define PIDX_CIPHER_PARAM_AEAD_MAC_KEY 32 -#define PIDX_CIPHER_PARAM_AEAD_TAG 33 -#define PIDX_CIPHER_PARAM_AEAD_TAGLEN 34 -#define PIDX_CIPHER_PARAM_AEAD_TLS1_AAD 35 -#define PIDX_CIPHER_PARAM_AEAD_TLS1_AAD_PAD 36 -#define PIDX_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN 37 -#define PIDX_CIPHER_PARAM_AEAD_TLS1_IV_FIXED 38 -#define PIDX_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV 39 -#define PIDX_CIPHER_PARAM_ALGORITHM_ID_PARAMS 40 -#define PIDX_CIPHER_PARAM_BLOCK_SIZE 41 -#define PIDX_CIPHER_PARAM_CTS 42 -#define PIDX_CIPHER_PARAM_CTS_MODE 43 -#define PIDX_CIPHER_PARAM_CUSTOM_IV 44 -#define PIDX_CIPHER_PARAM_HAS_RAND_KEY 45 -#define PIDX_CIPHER_PARAM_IV 46 -#define PIDX_CIPHER_PARAM_IVLEN 47 -#define PIDX_CIPHER_PARAM_KEYLEN 48 -#define PIDX_CIPHER_PARAM_MODE 49 -#define PIDX_CIPHER_PARAM_NUM 50 -#define PIDX_CIPHER_PARAM_PADDING 51 -#define PIDX_CIPHER_PARAM_RANDOM_KEY 52 -#define PIDX_CIPHER_PARAM_RC2_KEYBITS 53 -#define PIDX_CIPHER_PARAM_ROUNDS 54 -#define PIDX_CIPHER_PARAM_SPEED 55 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK 56 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD 57 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN 58 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC 59 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN 60 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN 61 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE 62 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE 63 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT 64 -#define PIDX_CIPHER_PARAM_TLS_MAC 65 -#define PIDX_CIPHER_PARAM_TLS_MAC_SIZE 66 -#define PIDX_CIPHER_PARAM_TLS_VERSION 67 -#define PIDX_CIPHER_PARAM_UPDATED_IV 68 -#define PIDX_CIPHER_PARAM_USE_BITS 69 -#define PIDX_CIPHER_PARAM_XTS_STANDARD 70 -#define PIDX_DECODER_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES -#define PIDX_DIGEST_PARAM_ALGID_ABSENT 71 -#define PIDX_DIGEST_PARAM_BLOCK_SIZE 41 -#define PIDX_DIGEST_PARAM_MICALG 72 -#define PIDX_DIGEST_PARAM_PAD_TYPE 73 -#define PIDX_DIGEST_PARAM_SIZE 74 -#define PIDX_DIGEST_PARAM_SSL3_MS 75 -#define PIDX_DIGEST_PARAM_XOF 76 -#define PIDX_DIGEST_PARAM_XOFLEN 77 -#define PIDX_DRBG_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER -#define PIDX_DRBG_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST -#define PIDX_DRBG_PARAM_ENTROPY_REQUIRED 78 -#define PIDX_DRBG_PARAM_MAC PIDX_ALG_PARAM_MAC -#define PIDX_DRBG_PARAM_MAX_ADINLEN 79 -#define PIDX_DRBG_PARAM_MAX_ENTROPYLEN 80 -#define PIDX_DRBG_PARAM_MAX_LENGTH 81 -#define PIDX_DRBG_PARAM_MAX_NONCELEN 82 -#define PIDX_DRBG_PARAM_MAX_PERSLEN 83 -#define PIDX_DRBG_PARAM_MIN_ENTROPYLEN 84 -#define PIDX_DRBG_PARAM_MIN_LENGTH 85 -#define PIDX_DRBG_PARAM_MIN_NONCELEN 86 -#define PIDX_DRBG_PARAM_PREDICTION_RESISTANCE 87 -#define PIDX_DRBG_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES -#define PIDX_DRBG_PARAM_RANDOM_DATA 88 -#define PIDX_DRBG_PARAM_RESEED_COUNTER 89 -#define PIDX_DRBG_PARAM_RESEED_REQUESTS 90 -#define PIDX_DRBG_PARAM_RESEED_TIME 91 -#define PIDX_DRBG_PARAM_RESEED_TIME_INTERVAL 92 -#define PIDX_DRBG_PARAM_SIZE 74 -#define PIDX_DRBG_PARAM_USE_DF 93 -#define PIDX_ENCODER_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER -#define PIDX_ENCODER_PARAM_ENCRYPT_LEVEL 94 -#define PIDX_ENCODER_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES -#define PIDX_ENCODER_PARAM_SAVE_PARAMETERS 95 -#define PIDX_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE 96 -#define PIDX_EXCHANGE_PARAM_KDF_DIGEST 97 -#define PIDX_EXCHANGE_PARAM_KDF_DIGEST_PROPS 98 -#define PIDX_EXCHANGE_PARAM_KDF_OUTLEN 99 -#define PIDX_EXCHANGE_PARAM_KDF_TYPE 100 -#define PIDX_EXCHANGE_PARAM_KDF_UKM 101 -#define PIDX_EXCHANGE_PARAM_PAD 102 -#define PIDX_GEN_PARAM_ITERATION 103 -#define PIDX_GEN_PARAM_POTENTIAL 104 -#define PIDX_KDF_PARAM_ARGON2_AD 105 -#define PIDX_KDF_PARAM_ARGON2_LANES 106 -#define PIDX_KDF_PARAM_ARGON2_MEMCOST 107 -#define PIDX_KDF_PARAM_ARGON2_VERSION 108 -#define PIDX_KDF_PARAM_CEK_ALG 109 -#define PIDX_KDF_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER -#define PIDX_KDF_PARAM_CONSTANT 110 -#define PIDX_KDF_PARAM_DATA 111 -#define PIDX_KDF_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST -#define PIDX_KDF_PARAM_EARLY_CLEAN 112 -#define PIDX_KDF_PARAM_HMACDRBG_ENTROPY 113 -#define PIDX_KDF_PARAM_HMACDRBG_NONCE 114 -#define PIDX_KDF_PARAM_INFO 115 -#define PIDX_KDF_PARAM_ITER 116 -#define PIDX_KDF_PARAM_KBKDF_R 117 -#define PIDX_KDF_PARAM_KBKDF_USE_L 118 -#define PIDX_KDF_PARAM_KBKDF_USE_SEPARATOR 119 -#define PIDX_KDF_PARAM_KEY 120 -#define PIDX_KDF_PARAM_LABEL 121 -#define PIDX_KDF_PARAM_MAC PIDX_ALG_PARAM_MAC -#define PIDX_KDF_PARAM_MAC_SIZE 122 -#define PIDX_KDF_PARAM_MODE 49 -#define PIDX_KDF_PARAM_PASSWORD 123 -#define PIDX_KDF_PARAM_PKCS12_ID 124 -#define PIDX_KDF_PARAM_PKCS5 125 -#define PIDX_KDF_PARAM_PREFIX 126 -#define PIDX_KDF_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES -#define PIDX_KDF_PARAM_SALT 127 -#define PIDX_KDF_PARAM_SCRYPT_MAXMEM 128 -#define PIDX_KDF_PARAM_SCRYPT_N 129 -#define PIDX_KDF_PARAM_SCRYPT_P 130 -#define PIDX_KDF_PARAM_SCRYPT_R 117 -#define PIDX_KDF_PARAM_SECRET 131 -#define PIDX_KDF_PARAM_SEED 132 -#define PIDX_KDF_PARAM_SIZE 74 -#define PIDX_KDF_PARAM_SSHKDF_SESSION_ID 133 -#define PIDX_KDF_PARAM_SSHKDF_TYPE 134 -#define PIDX_KDF_PARAM_SSHKDF_XCGHASH 135 -#define PIDX_KDF_PARAM_THREADS 136 -#define PIDX_KDF_PARAM_UKM 137 -#define PIDX_KDF_PARAM_X942_ACVPINFO 138 -#define PIDX_KDF_PARAM_X942_PARTYUINFO 139 -#define PIDX_KDF_PARAM_X942_PARTYVINFO 140 -#define PIDX_KDF_PARAM_X942_SUPP_PRIVINFO 141 -#define PIDX_KDF_PARAM_X942_SUPP_PUBINFO 142 -#define PIDX_KDF_PARAM_X942_USE_KEYBITS 143 -#define PIDX_KEM_PARAM_IKME 144 -#define PIDX_KEM_PARAM_OPERATION 145 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_BLOCK_PADDING 146 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_MAX_EARLY_DATA 147 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_MAX_FRAG_LEN 148 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_MODE 49 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_OPTIONS 149 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_READ_AHEAD 150 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_STREAM_MAC 151 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_TLSTREE 152 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_USE_ETM 153 -#define PIDX_LIBSSL_RECORD_LAYER_READ_BUFFER_LEN 154 -#define PIDX_MAC_PARAM_BLOCK_SIZE 155 -#define PIDX_MAC_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER -#define PIDX_MAC_PARAM_CUSTOM 156 -#define PIDX_MAC_PARAM_C_ROUNDS 157 -#define PIDX_MAC_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST -#define PIDX_MAC_PARAM_DIGEST_NOINIT 158 -#define PIDX_MAC_PARAM_DIGEST_ONESHOT 159 -#define PIDX_MAC_PARAM_D_ROUNDS 160 -#define PIDX_MAC_PARAM_IV 46 -#define PIDX_MAC_PARAM_KEY 120 -#define PIDX_MAC_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES -#define PIDX_MAC_PARAM_SALT 127 -#define PIDX_MAC_PARAM_SIZE 74 -#define PIDX_MAC_PARAM_TLS_DATA_SIZE 161 -#define PIDX_MAC_PARAM_XOF 76 -#define PIDX_OBJECT_PARAM_DATA 111 -#define PIDX_OBJECT_PARAM_DATA_STRUCTURE 162 -#define PIDX_OBJECT_PARAM_DATA_TYPE 163 -#define PIDX_OBJECT_PARAM_DESC 164 -#define PIDX_OBJECT_PARAM_REFERENCE 165 -#define PIDX_OBJECT_PARAM_TYPE 134 -#define PIDX_PASSPHRASE_PARAM_INFO 115 -#define PIDX_PKEY_PARAM_BITS 166 -#define PIDX_PKEY_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER -#define PIDX_PKEY_PARAM_DEFAULT_DIGEST 167 -#define PIDX_PKEY_PARAM_DHKEM_IKM 168 -#define PIDX_PKEY_PARAM_DH_GENERATOR 169 -#define PIDX_PKEY_PARAM_DH_PRIV_LEN 170 -#define PIDX_PKEY_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST -#define PIDX_PKEY_PARAM_DIGEST_SIZE 171 -#define PIDX_PKEY_PARAM_DIST_ID 172 -#define PIDX_PKEY_PARAM_EC_A 173 -#define PIDX_PKEY_PARAM_EC_B 174 -#define PIDX_PKEY_PARAM_EC_CHAR2_M 175 -#define PIDX_PKEY_PARAM_EC_CHAR2_PP_K1 176 -#define PIDX_PKEY_PARAM_EC_CHAR2_PP_K2 177 -#define PIDX_PKEY_PARAM_EC_CHAR2_PP_K3 178 -#define PIDX_PKEY_PARAM_EC_CHAR2_TP_BASIS 179 -#define PIDX_PKEY_PARAM_EC_CHAR2_TYPE 180 -#define PIDX_PKEY_PARAM_EC_COFACTOR 181 -#define PIDX_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS 182 -#define PIDX_PKEY_PARAM_EC_ENCODING 183 -#define PIDX_PKEY_PARAM_EC_FIELD_TYPE 184 -#define PIDX_PKEY_PARAM_EC_GENERATOR 185 -#define PIDX_PKEY_PARAM_EC_GROUP_CHECK_TYPE 186 -#define PIDX_PKEY_PARAM_EC_INCLUDE_PUBLIC 187 -#define PIDX_PKEY_PARAM_EC_ORDER 188 -#define PIDX_PKEY_PARAM_EC_P 130 -#define PIDX_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT 189 -#define PIDX_PKEY_PARAM_EC_PUB_X 190 -#define PIDX_PKEY_PARAM_EC_PUB_Y 191 -#define PIDX_PKEY_PARAM_EC_SEED 132 -#define PIDX_PKEY_PARAM_ENCODED_PUBLIC_KEY 192 -#define PIDX_PKEY_PARAM_ENGINE PIDX_ALG_PARAM_ENGINE -#define PIDX_PKEY_PARAM_FFC_COFACTOR 193 -#define PIDX_PKEY_PARAM_FFC_DIGEST PIDX_PKEY_PARAM_DIGEST -#define PIDX_PKEY_PARAM_FFC_DIGEST_PROPS PIDX_PKEY_PARAM_PROPERTIES -#define PIDX_PKEY_PARAM_FFC_G 194 -#define PIDX_PKEY_PARAM_FFC_GINDEX 195 -#define PIDX_PKEY_PARAM_FFC_H 196 -#define PIDX_PKEY_PARAM_FFC_P 130 -#define PIDX_PKEY_PARAM_FFC_PBITS 197 -#define PIDX_PKEY_PARAM_FFC_PCOUNTER 198 -#define PIDX_PKEY_PARAM_FFC_Q 199 -#define PIDX_PKEY_PARAM_FFC_QBITS 200 -#define PIDX_PKEY_PARAM_FFC_SEED 132 -#define PIDX_PKEY_PARAM_FFC_TYPE 134 -#define PIDX_PKEY_PARAM_FFC_VALIDATE_G 201 -#define PIDX_PKEY_PARAM_FFC_VALIDATE_LEGACY 202 -#define PIDX_PKEY_PARAM_FFC_VALIDATE_PQ 203 -#define PIDX_PKEY_PARAM_GROUP_NAME 204 -#define PIDX_PKEY_PARAM_IMPLICIT_REJECTION 5 -#define PIDX_PKEY_PARAM_MANDATORY_DIGEST 205 -#define PIDX_PKEY_PARAM_MASKGENFUNC 206 -#define PIDX_PKEY_PARAM_MAX_SIZE 207 -#define PIDX_PKEY_PARAM_MGF1_DIGEST 208 -#define PIDX_PKEY_PARAM_MGF1_PROPERTIES 209 -#define PIDX_PKEY_PARAM_PAD_MODE 210 -#define PIDX_PKEY_PARAM_PRIV_KEY 211 -#define PIDX_PKEY_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES -#define PIDX_PKEY_PARAM_PUB_KEY 212 -#define PIDX_PKEY_PARAM_RSA_BITS PIDX_PKEY_PARAM_BITS -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT 213 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT1 214 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT2 215 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT3 216 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT4 217 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT5 218 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT6 219 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT7 220 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT8 221 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT9 222 -#define PIDX_PKEY_PARAM_RSA_D 223 -#define PIDX_PKEY_PARAM_RSA_DIGEST PIDX_PKEY_PARAM_DIGEST -#define PIDX_PKEY_PARAM_RSA_DIGEST_PROPS PIDX_PKEY_PARAM_PROPERTIES -#define PIDX_PKEY_PARAM_RSA_E 224 -#define PIDX_PKEY_PARAM_RSA_EXPONENT 225 -#define PIDX_PKEY_PARAM_RSA_EXPONENT1 226 -#define PIDX_PKEY_PARAM_RSA_EXPONENT10 227 -#define PIDX_PKEY_PARAM_RSA_EXPONENT2 228 -#define PIDX_PKEY_PARAM_RSA_EXPONENT3 229 -#define PIDX_PKEY_PARAM_RSA_EXPONENT4 230 -#define PIDX_PKEY_PARAM_RSA_EXPONENT5 231 -#define PIDX_PKEY_PARAM_RSA_EXPONENT6 232 -#define PIDX_PKEY_PARAM_RSA_EXPONENT7 233 -#define PIDX_PKEY_PARAM_RSA_EXPONENT8 234 -#define PIDX_PKEY_PARAM_RSA_EXPONENT9 235 -#define PIDX_PKEY_PARAM_RSA_FACTOR 236 -#define PIDX_PKEY_PARAM_RSA_FACTOR1 237 -#define PIDX_PKEY_PARAM_RSA_FACTOR10 238 -#define PIDX_PKEY_PARAM_RSA_FACTOR2 239 -#define PIDX_PKEY_PARAM_RSA_FACTOR3 240 -#define PIDX_PKEY_PARAM_RSA_FACTOR4 241 -#define PIDX_PKEY_PARAM_RSA_FACTOR5 242 -#define PIDX_PKEY_PARAM_RSA_FACTOR6 243 -#define PIDX_PKEY_PARAM_RSA_FACTOR7 244 -#define PIDX_PKEY_PARAM_RSA_FACTOR8 245 -#define PIDX_PKEY_PARAM_RSA_FACTOR9 246 -#define PIDX_PKEY_PARAM_RSA_MASKGENFUNC PIDX_PKEY_PARAM_MASKGENFUNC -#define PIDX_PKEY_PARAM_RSA_MGF1_DIGEST PIDX_PKEY_PARAM_MGF1_DIGEST -#define PIDX_PKEY_PARAM_RSA_N 129 -#define PIDX_PKEY_PARAM_RSA_PRIMES 247 -#define PIDX_PKEY_PARAM_RSA_PSS_SALTLEN 248 -#define PIDX_PKEY_PARAM_RSA_TEST_P1 249 -#define PIDX_PKEY_PARAM_RSA_TEST_P2 250 -#define PIDX_PKEY_PARAM_RSA_TEST_Q1 251 -#define PIDX_PKEY_PARAM_RSA_TEST_Q2 252 -#define PIDX_PKEY_PARAM_RSA_TEST_XP 253 -#define PIDX_PKEY_PARAM_RSA_TEST_XP1 254 -#define PIDX_PKEY_PARAM_RSA_TEST_XP2 255 -#define PIDX_PKEY_PARAM_RSA_TEST_XQ 256 -#define PIDX_PKEY_PARAM_RSA_TEST_XQ1 257 -#define PIDX_PKEY_PARAM_RSA_TEST_XQ2 258 -#define PIDX_PKEY_PARAM_SECURITY_BITS 259 -#define PIDX_PKEY_PARAM_USE_COFACTOR_ECDH PIDX_PKEY_PARAM_USE_COFACTOR_FLAG -#define PIDX_PKEY_PARAM_USE_COFACTOR_FLAG 260 -#define PIDX_PROV_PARAM_BUILDINFO 261 -#define PIDX_PROV_PARAM_CORE_MODULE_FILENAME 262 -#define PIDX_PROV_PARAM_CORE_PROV_NAME 263 -#define PIDX_PROV_PARAM_CORE_VERSION 264 -#define PIDX_PROV_PARAM_DRBG_TRUNC_DIGEST 265 -#define PIDX_PROV_PARAM_NAME 266 -#define PIDX_PROV_PARAM_SECURITY_CHECKS 267 -#define PIDX_PROV_PARAM_SELF_TEST_DESC 268 -#define PIDX_PROV_PARAM_SELF_TEST_PHASE 269 -#define PIDX_PROV_PARAM_SELF_TEST_TYPE 270 -#define PIDX_PROV_PARAM_STATUS 271 -#define PIDX_PROV_PARAM_TLS1_PRF_EMS_CHECK 272 -#define PIDX_PROV_PARAM_VERSION 108 -#define PIDX_RAND_PARAM_GENERATE 273 -#define PIDX_RAND_PARAM_MAX_REQUEST 274 -#define PIDX_RAND_PARAM_STATE 275 -#define PIDX_RAND_PARAM_STRENGTH 276 -#define PIDX_RAND_PARAM_TEST_ENTROPY 277 -#define PIDX_RAND_PARAM_TEST_NONCE 278 -#define PIDX_SIGNATURE_PARAM_ALGORITHM_ID 279 -#define PIDX_SIGNATURE_PARAM_CONTEXT_STRING 280 -#define PIDX_SIGNATURE_PARAM_DIGEST PIDX_PKEY_PARAM_DIGEST -#define PIDX_SIGNATURE_PARAM_DIGEST_SIZE PIDX_PKEY_PARAM_DIGEST_SIZE -#define PIDX_SIGNATURE_PARAM_INSTANCE 281 -#define PIDX_SIGNATURE_PARAM_KAT 282 -#define PIDX_SIGNATURE_PARAM_MGF1_DIGEST PIDX_PKEY_PARAM_MGF1_DIGEST -#define PIDX_SIGNATURE_PARAM_MGF1_PROPERTIES PIDX_PKEY_PARAM_MGF1_PROPERTIES -#define PIDX_SIGNATURE_PARAM_NONCE_TYPE 283 -#define PIDX_SIGNATURE_PARAM_PAD_MODE PIDX_PKEY_PARAM_PAD_MODE -#define PIDX_SIGNATURE_PARAM_PROPERTIES PIDX_PKEY_PARAM_PROPERTIES -#define PIDX_SIGNATURE_PARAM_PSS_SALTLEN 248 -#define PIDX_STORE_PARAM_ALIAS 284 -#define PIDX_STORE_PARAM_DIGEST 1 -#define PIDX_STORE_PARAM_EXPECT 285 -#define PIDX_STORE_PARAM_FINGERPRINT 286 -#define PIDX_STORE_PARAM_INPUT_TYPE 287 -#define PIDX_STORE_PARAM_ISSUER 266 -#define PIDX_STORE_PARAM_PROPERTIES 4 -#define PIDX_STORE_PARAM_SERIAL 288 -#define PIDX_STORE_PARAM_SUBJECT 289 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/param_names.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/internal/param_names.h.in deleted file mode 100644 index f34db219..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/param_names.h.in +++ /dev/null @@ -1,18 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 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::paramnames qw(generate_internal_macros); --} - -int ossl_param_find_pidx(const char *s); - -/* Parameter name definitions - generated by util/perl/OpenSSL/paramnames.pm */ -{- generate_internal_macros(); -} diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/params.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/params.h deleted file mode 100644 index 3fbd0cf9..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/params.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 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 - */ - -#include -#include - -/* - * Extract the parameter into an allocated buffer. - * Any existing allocation in *out is cleared and freed. - * - * Returns 1 on success, 0 on failure and -1 if there are no matching params. - * - * *out and *out_len are guaranteed to be untouched if this function - * doesn't return success. - */ -int ossl_param_get1_octet_string(const OSSL_PARAM *params, const char *name, - unsigned char **out, size_t *out_len); -/* - * Concatenate all of the matching params together. - * *out will point to an allocated buffer on successful return. - * Any existing allocation in *out is cleared and freed. - * - * Passing 0 for maxsize means unlimited size output. - * - * Returns 1 on success, 0 on failure and -1 if there are no matching params. - * - * *out and *out_len are guaranteed to be untouched if this function - * doesn't return success. - */ -int ossl_param_get1_concat_octet_string(const OSSL_PARAM *params, const char *name, - unsigned char **out, size_t *out_len, - size_t maxsize); 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 deleted file mode 100644 index 54d997b0..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/passphrase.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * 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/priority_queue.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/priority_queue.h deleted file mode 100644 index 5be03bf1..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/priority_queue.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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_INTERNAL_PRIORITY_QUEUE_H -# define OSSL_INTERNAL_PRIORITY_QUEUE_H -# pragma once - -# include -# include - -# define PRIORITY_QUEUE_OF(type) OSSL_PRIORITY_QUEUE_ ## type - -# define DEFINE_PRIORITY_QUEUE_OF_INTERNAL(type, ctype) \ - typedef struct ossl_priority_queue_st_ ## type PRIORITY_QUEUE_OF(type); \ - static ossl_unused ossl_inline PRIORITY_QUEUE_OF(type) * \ - ossl_pqueue_##type##_new(int (*compare)(const ctype *, const ctype *)) \ - { \ - return (PRIORITY_QUEUE_OF(type) *)ossl_pqueue_new( \ - (int (*)(const void *, const void *))compare); \ - } \ - static ossl_unused ossl_inline void \ - ossl_pqueue_##type##_free(PRIORITY_QUEUE_OF(type) *pq) \ - { \ - ossl_pqueue_free((OSSL_PQUEUE *)pq); \ - } \ - static ossl_unused ossl_inline void \ - ossl_pqueue_##type##_pop_free(PRIORITY_QUEUE_OF(type) *pq, \ - void (*freefunc)(ctype *)) \ - { \ - ossl_pqueue_pop_free((OSSL_PQUEUE *)pq, (void (*)(void *))freefunc);\ - } \ - static ossl_unused ossl_inline int \ - ossl_pqueue_##type##_reserve(PRIORITY_QUEUE_OF(type) *pq, size_t n) \ - { \ - return ossl_pqueue_reserve((OSSL_PQUEUE *)pq, n); \ - } \ - static ossl_unused ossl_inline size_t \ - ossl_pqueue_##type##_num(const PRIORITY_QUEUE_OF(type) *pq) \ - { \ - return ossl_pqueue_num((OSSL_PQUEUE *)pq); \ - } \ - static ossl_unused ossl_inline int \ - ossl_pqueue_##type##_push(PRIORITY_QUEUE_OF(type) *pq, \ - ctype *data, size_t *elem) \ - { \ - return ossl_pqueue_push((OSSL_PQUEUE *)pq, (void *)data, elem); \ - } \ - static ossl_unused ossl_inline ctype * \ - ossl_pqueue_##type##_peek(const PRIORITY_QUEUE_OF(type) *pq) \ - { \ - return (type *)ossl_pqueue_peek((OSSL_PQUEUE *)pq); \ - } \ - static ossl_unused ossl_inline ctype * \ - ossl_pqueue_##type##_pop(PRIORITY_QUEUE_OF(type) *pq) \ - { \ - return (type *)ossl_pqueue_pop((OSSL_PQUEUE *)pq); \ - } \ - static ossl_unused ossl_inline ctype * \ - ossl_pqueue_##type##_remove(PRIORITY_QUEUE_OF(type) *pq, \ - size_t elem) \ - { \ - return (type *)ossl_pqueue_remove((OSSL_PQUEUE *)pq, elem); \ - } \ - struct ossl_priority_queue_st_ ## type - -# define DEFINE_PRIORITY_QUEUE_OF(type) \ - DEFINE_PRIORITY_QUEUE_OF_INTERNAL(type, type) - -typedef struct ossl_pqueue_st OSSL_PQUEUE; - -OSSL_PQUEUE *ossl_pqueue_new(int (*compare)(const void *, const void *)); -void ossl_pqueue_free(OSSL_PQUEUE *pq); -void ossl_pqueue_pop_free(OSSL_PQUEUE *pq, void (*freefunc)(void *)); -int ossl_pqueue_reserve(OSSL_PQUEUE *pq, size_t n); - -size_t ossl_pqueue_num(const OSSL_PQUEUE *pq); -int ossl_pqueue_push(OSSL_PQUEUE *pq, void *data, size_t *elem); -void *ossl_pqueue_peek(const OSSL_PQUEUE *pq); -void *ossl_pqueue_pop(OSSL_PQUEUE *pq); -void *ossl_pqueue_remove(OSSL_PQUEUE *pq, size_t elem); - -#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 deleted file mode 100644 index 3adff499..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/property.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index fbee53f1..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/propertyerr.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 deleted file mode 100644 index ab41d643..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/provider.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * 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_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, - OSSL_PARAM *params, 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/quic_ackm.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_ackm.h deleted file mode 100644 index 03fc6088..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_ackm.h +++ /dev/null @@ -1,297 +0,0 @@ -/* - * 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_QUIC_ACKM_H -# define OSSL_QUIC_ACKM_H - -# include "internal/quic_statm.h" -# include "internal/quic_cc.h" -# include "internal/quic_types.h" -# include "internal/quic_wire.h" -# include "internal/time.h" -# include "internal/list.h" - -# ifndef OPENSSL_NO_QUIC - -typedef struct ossl_ackm_st OSSL_ACKM; - -OSSL_ACKM *ossl_ackm_new(OSSL_TIME (*now)(void *arg), - void *now_arg, - OSSL_STATM *statm, - const OSSL_CC_METHOD *cc_method, - OSSL_CC_DATA *cc_data); -void ossl_ackm_free(OSSL_ACKM *ackm); - -void ossl_ackm_set_loss_detection_deadline_callback(OSSL_ACKM *ackm, - void (*fn)(OSSL_TIME deadline, - void *arg), - void *arg); - -void ossl_ackm_set_ack_deadline_callback(OSSL_ACKM *ackm, - void (*fn)(OSSL_TIME deadline, - int pkt_space, - void *arg), - void *arg); - -/* - * Configures the RX-side maximum ACK delay. This is the maximum amount of time - * the peer is allowed to delay sending an ACK frame after receiving an - * ACK-eliciting packet. The peer communicates this value via a transport - * parameter and it must be provided to the ACKM. - */ -void ossl_ackm_set_rx_max_ack_delay(OSSL_ACKM *ackm, OSSL_TIME rx_max_ack_delay); - -/* - * Configures the TX-side maximum ACK delay. This is the maximum amount of time - * we are allowed to delay sending an ACK frame after receiving an ACK-eliciting - * packet. Note that this cannot be changed after a connection is established as - * it must be accurately reported in the transport parameters we send to our - * peer. - */ -void ossl_ackm_set_tx_max_ack_delay(OSSL_ACKM *ackm, OSSL_TIME tx_max_ack_delay); - -typedef struct ossl_ackm_tx_pkt_st OSSL_ACKM_TX_PKT; -struct ossl_ackm_tx_pkt_st { - /* The packet number of the transmitted packet. */ - QUIC_PN pkt_num; - - /* The number of bytes in the packet which was sent. */ - size_t num_bytes; - - /* The time at which the packet was sent. */ - OSSL_TIME time; - - /* - * If the packet being described by this structure contains an ACK frame, - * this must be set to the largest PN ACK'd by that frame. - * - * Otherwise, it should be set to QUIC_PN_INVALID. - * - * This is necessary to bound the number of PNs we have to keep track of on - * the RX side (RFC 9000 s. 13.2.4). It allows older PN tracking information - * on the RX side to be discarded. - */ - QUIC_PN largest_acked; - - /* - * One of the QUIC_PN_SPACE_* values. This qualifies the pkt_num field - * into a packet number space. - */ - unsigned int pkt_space :2; - - /* - * 1 if the packet is in flight. A packet is considered 'in flight' if it is - * counted for purposes of congestion control and 'bytes in flight' counts. - * Most packets are considered in flight. The only circumstance where a - * numbered packet is not considered in flight is if it contains only ACK - * frames (not even PADDING frames), as these frames can bypass CC. - */ - unsigned int is_inflight :1; - - /* - * 1 if the packet has one or more ACK-eliciting frames. - * Note that if this is set, is_inflight must be set. - */ - unsigned int is_ack_eliciting :1; - - /* 1 if the packet is a PTO probe. */ - unsigned int is_pto_probe :1; - - /* 1 if the packet is an MTU probe. */ - unsigned int is_mtu_probe :1; - - /* Callback called if frames in this packet are lost. arg is cb_arg. */ - void (*on_lost)(void *arg); - /* Callback called if frames in this packet are acked. arg is cb_arg. */ - void (*on_acked)(void *arg); - /* - * Callback called if frames in this packet are neither acked nor lost. arg - * is cb_arg. - */ - void (*on_discarded)(void *arg); - void *cb_arg; - - /* - * (Internal use fields; must be zero-initialized.) - * - * Keep a TX history list, anext is used to manifest - * a singly-linked list of newly-acknowledged packets, and lnext is used to - * manifest a singly-linked list of newly lost packets. - */ - OSSL_LIST_MEMBER(tx_history, OSSL_ACKM_TX_PKT); - - struct ossl_ackm_tx_pkt_st *anext; - struct ossl_ackm_tx_pkt_st *lnext; -}; - -int ossl_ackm_on_tx_packet(OSSL_ACKM *ackm, OSSL_ACKM_TX_PKT *pkt); -int ossl_ackm_on_rx_datagram(OSSL_ACKM *ackm, size_t num_bytes); - -# define OSSL_ACKM_ECN_NONE 0 -# define OSSL_ACKM_ECN_ECT1 1 -# define OSSL_ACKM_ECN_ECT0 2 -# define OSSL_ACKM_ECN_ECNCE 3 - -typedef struct ossl_ackm_rx_pkt_st { - /* The packet number of the received packet. */ - QUIC_PN pkt_num; - - /* The time at which the packet was received. */ - OSSL_TIME time; - - /* - * One of the QUIC_PN_SPACE_* values. This qualifies the pkt_num field - * into a packet number space. - */ - unsigned int pkt_space :2; - - /* 1 if the packet has one or more ACK-eliciting frames. */ - unsigned int is_ack_eliciting :1; - - /* - * One of the OSSL_ACKM_ECN_* values. This is the ECN labelling applied to - * the received packet. If unknown, use OSSL_ACKM_ECN_NONE. - */ - unsigned int ecn :2; -} OSSL_ACKM_RX_PKT; - -int ossl_ackm_on_rx_packet(OSSL_ACKM *ackm, const OSSL_ACKM_RX_PKT *pkt); - -int ossl_ackm_on_rx_ack_frame(OSSL_ACKM *ackm, const OSSL_QUIC_FRAME_ACK *ack, - int pkt_space, OSSL_TIME rx_time); - -/* - * Discards a PN space. This must be called for a PN space before freeing the - * ACKM if you want in-flight packets to have their discarded callbacks called. - * This should never be called in ordinary QUIC usage for the Application Data - * PN space, but it may be called for the Application Data PN space prior to - * freeing the ACKM to simplify teardown implementations. - */ -int ossl_ackm_on_pkt_space_discarded(OSSL_ACKM *ackm, int pkt_space); - -int ossl_ackm_on_handshake_confirmed(OSSL_ACKM *ackm); -int ossl_ackm_on_timeout(OSSL_ACKM *ackm); - -OSSL_TIME ossl_ackm_get_loss_detection_deadline(OSSL_ACKM *ackm); - -/* - * Generates an ACK frame, regardless of whether the ACK manager thinks - * one should currently be sent. - * - * This clears the flag returned by ossl_ackm_is_ack_desired and the deadline - * returned by ossl_ackm_get_ack_deadline. - */ -const OSSL_QUIC_FRAME_ACK *ossl_ackm_get_ack_frame(OSSL_ACKM *ackm, - int pkt_space); - -/* - * Returns the deadline after which an ACK frame should be generated by calling - * ossl_ackm_get_ack_frame, or OSSL_TIME_INFINITY if no deadline is currently - * applicable. If the deadline has already passed, this function may return that - * deadline, or may return OSSL_TIME_ZERO. - */ -OSSL_TIME ossl_ackm_get_ack_deadline(OSSL_ACKM *ackm, int pkt_space); - -/* - * Returns 1 if the ACK manager thinks an ACK frame ought to be generated and - * sent at this time. ossl_ackm_get_ack_frame will always provide an ACK frame - * whether or not this returns 1, so it is suggested that you call this function - * first to determine whether you need to generate an ACK frame. - * - * The return value of this function can change based on calls to - * ossl_ackm_on_rx_packet and based on the passage of time (see - * ossl_ackm_get_ack_deadline). - */ -int ossl_ackm_is_ack_desired(OSSL_ACKM *ackm, int pkt_space); - -/* - * Returns 1 if the given RX PN is 'processable'. A processable PN is one that - * is not either - * - * - duplicate, meaning that we have already been passed such a PN in a call - * to ossl_ackm_on_rx_packet; or - * - * - written off, meaning that the PN is so old we have stopped tracking state - * for it (meaning that we cannot tell whether it is a duplicate and cannot - * process it safely). - * - * This should be called for a packet before attempting to process its contents. - * Failure to do so may result in processing a duplicated packet in violation of - * the RFC. - * - * The return value of this function transitions from 1 to 0 for a given PN once - * that PN is passed to ossl_ackm_on_rx_packet, thus this function must be used - * before calling ossl_ackm_on_rx_packet. - */ -int ossl_ackm_is_rx_pn_processable(OSSL_ACKM *ackm, QUIC_PN pn, int pkt_space); - -typedef struct ossl_ackm_probe_info_st { - /* - * The following two probe request types are used only for anti-deadlock - * purposes in relation to the anti-amplification logic, by generating - * packets to buy ourselves more anti-amplification credit with the server - * until a client address is verified. Note that like all Initial packets, - * any Initial probes are padded. - * - * Note: The ACKM will only ever increase these by one at a time, - * as only one probe packet should be generated for these cases. - */ - uint32_t anti_deadlock_initial, anti_deadlock_handshake; - - /* - * Send an ACK-eliciting packet for each count here. - * - * Note: The ACKM may increase this by either one or two for each probe - * request, depending on how many probe packets it thinks should be - * generated. - */ - uint32_t pto[QUIC_PN_SPACE_NUM]; -} OSSL_ACKM_PROBE_INFO; - -/* - * Returns a pointer to a structure counting any pending probe requests which - * have been generated by the ACKM. The fields in the structure are incremented - * by one every time the ACKM wants another probe of the given type to be sent. - * If the ACKM thinks two packets should be generated for a probe, it will - * increment the field twice. - * - * It is permissible for the caller to decrement or zero these fields to keep - * track of when it has generated a probe as asked. The returned structure - * has the same lifetime as the ACKM. - * - * This function should be called after calling e.g. ossl_ackm_on_timeout - * to determine if any probe requests have been generated. - */ -OSSL_ACKM_PROBE_INFO *ossl_ackm_get0_probe_request(OSSL_ACKM *ackm); - -int ossl_ackm_get_largest_unacked(OSSL_ACKM *ackm, int pkt_space, QUIC_PN *pn); - -/* - * Forces the ACKM to consider a packet with the given PN in the given PN space - * as having been pseudo-lost. The main reason to use this is during a Retry, to - * force any resources sent in the first Initial packet to be resent. - * - * The lost callback is called for the packet, but the packet is NOT considered - * lost for congestion control purposes. Thus this is not exactly the same as a - * true loss situation. - */ -int ossl_ackm_mark_packet_pseudo_lost(OSSL_ACKM *ackm, - int pkt_space, QUIC_PN pn); - -/* - * Returns the PTO duration as currently calculated. This is a quantity of time. - * This duration is used in various parts of QUIC besides the ACKM. - */ -OSSL_TIME ossl_ackm_get_pto_duration(OSSL_ACKM *ackm); - -/* Returns the largest acked PN in the given PN space. */ -QUIC_PN ossl_ackm_get_largest_acked(OSSL_ACKM *ackm, int pkt_space); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_cc.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_cc.h deleted file mode 100644 index 60c710b0..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_cc.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * 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_QUIC_CC_H -# define OSSL_QUIC_CC_H - -#include "openssl/params.h" -#include "internal/time.h" - -# ifndef OPENSSL_NO_QUIC - -typedef struct ossl_cc_data_st OSSL_CC_DATA; - -typedef struct ossl_cc_ack_info_st { - /* The time the packet being acknowledged was originally sent. */ - OSSL_TIME tx_time; - - /* The size in bytes of the packet being acknowledged. */ - size_t tx_size; -} OSSL_CC_ACK_INFO; - -typedef struct ossl_cc_loss_info_st { - /* The time the packet being lost was originally sent. */ - OSSL_TIME tx_time; - - /* The size in bytes of the packet which has been determined lost. */ - size_t tx_size; -} OSSL_CC_LOSS_INFO; - -typedef struct ossl_cc_ecn_info_st { - /* - * The time at which the largest acked PN (in the incoming ACK frame) was - * sent. - */ - OSSL_TIME largest_acked_time; -} OSSL_CC_ECN_INFO; - -/* Parameter (read-write): Maximum datagram payload length in bytes. */ -#define OSSL_CC_OPTION_MAX_DGRAM_PAYLOAD_LEN "max_dgram_payload_len" - -/* Diagnostic (read-only): current congestion window size in bytes. */ -#define OSSL_CC_OPTION_CUR_CWND_SIZE "cur_cwnd_size" - -/* Diagnostic (read-only): minimum congestion window size in bytes. */ -#define OSSL_CC_OPTION_MIN_CWND_SIZE "min_cwnd_size" - -/* Diagnostic (read-only): current net bytes in flight. */ -#define OSSL_CC_OPTION_CUR_BYTES_IN_FLIGHT "bytes_in_flight" - -/* Diagnostic (read-only): method-specific state value. */ -#define OSSL_CC_OPTION_CUR_STATE "cur_state" - -/* - * Congestion control abstract interface. - * - * This interface is broadly based on the design described in RFC 9002. However, - * the demarcation between the ACKM and the congestion controller does not - * exactly match that delineated in the RFC 9002 pseudocode. Where aspects of - * the demarcation involve the congestion controller accessing internal state of - * the ACKM, the interface has been revised where possible to provide the - * information needed by the congestion controller and avoid needing to give the - * congestion controller access to the ACKM's internal data structures. - * - * Particular changes include: - * - * - In our implementation, it is the responsibility of the ACKM to determine - * if a loss event constitutes persistent congestion. - * - * - In our implementation, it is the responsibility of the ACKM to determine - * if the ECN-CE counter has increased. The congestion controller is simply - * informed when an ECN-CE event occurs. - * - * All of these changes are intended to avoid having a congestion controller - * have to access ACKM internal state. - */ -#define OSSL_CC_LOST_FLAG_PERSISTENT_CONGESTION (1U << 0) - -typedef struct ossl_cc_method_st { - /* - * Instantiation. - */ - OSSL_CC_DATA *(*new)(OSSL_TIME (*now_cb)(void *arg), - void *now_cb_arg); - - void (*free)(OSSL_CC_DATA *ccdata); - - /* - * Reset of state. - */ - void (*reset)(OSSL_CC_DATA *ccdata); - - /* - * Escape hatch for option configuration. - * - * params is an array of OSSL_PARAM structures. - * - * Returns 1 on success and 0 on failure. - */ - int (*set_input_params)(OSSL_CC_DATA *ccdata, - const OSSL_PARAM *params); - - /* - * (Re)bind output (diagnostic) information. - * - * params is an array of OSSL_PARAM structures used to output values. The - * storage locations associated with each parameter are stored internally - * and updated whenever the state of the congestion controller is updated; - * thus, the storage locations associated with the OSSL_PARAMs passed in the - * call to this function must remain valid until the congestion controller - * is freed or those parameters are unbound. A given parameter name may be - * bound to only one location at a time. The params structures themselves - * do not need to remain allocated after this call returns. - * - * Returns 1 on success and 0 on failure. - */ - int (*bind_diagnostics)(OSSL_CC_DATA *ccdata, - OSSL_PARAM *params); - - /* - * Unbind diagnostic information. The parameters with the given names are - * unbound, cancelling the effects of a previous call to bind_diagnostic(). - * params is an array of OSSL_PARAMs. The values of the parameters are - * ignored. If a parameter is already unbound, there is no effect for that - * parameter but other parameters are still unbound. - * - * Returns 1 on success or 0 on failure. - */ - int (*unbind_diagnostics)(OSSL_CC_DATA *ccdata, - OSSL_PARAM *params); - - /* - * Returns the amount of additional data (above and beyond the data - * currently in flight) which can be sent in bytes. Returns 0 if no more - * data can be sent at this time. The return value of this method - * can vary as time passes. - */ - uint64_t (*get_tx_allowance)(OSSL_CC_DATA *ccdata); - - /* - * Returns the time at which the return value of get_tx_allowance might be - * higher than its current value. This is not a guarantee and spurious - * wakeups are allowed. Returns ossl_time_infinite() if there is no current - * wakeup deadline. - */ - OSSL_TIME (*get_wakeup_deadline)(OSSL_CC_DATA *ccdata); - - /* - * The On Data Sent event. num_bytes should be the size of the packet in - * bytes (or the aggregate size of multiple packets which have just been - * sent). - */ - int (*on_data_sent)(OSSL_CC_DATA *ccdata, - uint64_t num_bytes); - - /* - * The On Data Acked event. See OSSL_CC_ACK_INFO structure for details - * of the information to be passed. - */ - int (*on_data_acked)(OSSL_CC_DATA *ccdata, - const OSSL_CC_ACK_INFO *info); - - /* - * The On Data Lost event. See OSSL_CC_LOSS_INFO structure for details - * of the information to be passed. - * - * Note: When the ACKM determines that a set of multiple packets has been - * lost, it is useful for a congestion control algorithm to be able to - * process this as a single loss event rather than multiple loss events. - * Thus, calling this function may cause the congestion controller to defer - * state updates under the assumption that subsequent calls to - * on_data_lost() representing further lost packets in the same loss event - * may be forthcoming. Always call on_data_lost_finished() after one or more - * calls to on_data_lost(). - */ - int (*on_data_lost)(OSSL_CC_DATA *ccdata, - const OSSL_CC_LOSS_INFO *info); - - /* - * To be called after a sequence of one or more on_data_lost() calls - * representing multiple packets in a single loss detection incident. - * - * Flags may be 0 or OSSL_CC_LOST_FLAG_PERSISTENT_CONGESTION. - */ - int (*on_data_lost_finished)(OSSL_CC_DATA *ccdata, uint32_t flags); - - /* - * For use when a PN space is invalidated or a packet must otherwise be - * 'undone' for congestion control purposes without acting as a loss signal. - * Only the size of the packet is needed. - */ - int (*on_data_invalidated)(OSSL_CC_DATA *ccdata, - uint64_t num_bytes); - - /* - * Called from the ACKM when detecting an increased ECN-CE value in an ACK - * frame. This indicates congestion. - * - * Note that this differs from the RFC's conceptual segregation of the loss - * detection and congestion controller functions, as in our implementation - * the ACKM is responsible for detecting increases to ECN-CE and simply - * tells the congestion controller when ECN-triggered congestion has - * occurred. This allows a slightly more efficient implementation and - * narrower interface between the ACKM and CC. - */ - int (*on_ecn)(OSSL_CC_DATA *ccdata, - const OSSL_CC_ECN_INFO *info); -} OSSL_CC_METHOD; - -extern const OSSL_CC_METHOD ossl_cc_dummy_method; -extern const OSSL_CC_METHOD ossl_cc_newreno_method; - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_cfq.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_cfq.h deleted file mode 100644 index 22c436dc..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_cfq.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * 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_QUIC_CFQ_H -# define OSSL_QUIC_CFQ_H - -# include -# include "internal/quic_types.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Control Frame Queue Item - * ============================= - * - * The CFQ item structure has a public and a private part. This structure - * documents the public part. - */ -typedef struct quic_cfq_item_st QUIC_CFQ_ITEM; - -struct quic_cfq_item_st { - /* - * These fields are not used by the CFQ, but are a convenience to assist the - * TXPIM in keeping a list of GCR control frames which were sent in a - * packet. They may be used for any purpose. - */ - QUIC_CFQ_ITEM *pkt_prev, *pkt_next; - - /* All other fields are private; use ossl_quic_cfq_item_* accessors. */ -}; - -# define QUIC_CFQ_STATE_NEW 0 -# define QUIC_CFQ_STATE_TX 1 - -/* If set, do not retransmit on loss */ -#define QUIC_CFQ_ITEM_FLAG_UNRELIABLE (1U << 0) - -/* Returns the frame type of a CFQ item. */ -uint64_t ossl_quic_cfq_item_get_frame_type(const QUIC_CFQ_ITEM *item); - -/* Returns a pointer to the encoded buffer of a CFQ item. */ -const unsigned char *ossl_quic_cfq_item_get_encoded(const QUIC_CFQ_ITEM *item); - -/* Returns the length of the encoded buffer in bytes. */ -size_t ossl_quic_cfq_item_get_encoded_len(const QUIC_CFQ_ITEM *item); - -/* Returns the CFQ item state, a QUIC_CFQ_STATE_* value. */ -int ossl_quic_cfq_item_get_state(const QUIC_CFQ_ITEM *item); - -/* Returns the PN space for the CFQ item. */ -uint32_t ossl_quic_cfq_item_get_pn_space(const QUIC_CFQ_ITEM *item); - -/* Returns 1 if this is an unreliable frame. */ -int ossl_quic_cfq_item_is_unreliable(const QUIC_CFQ_ITEM *item); - -/* - * QUIC Control Frame Queue - * ======================== - */ -typedef struct quic_cfq_st QUIC_CFQ; - -QUIC_CFQ *ossl_quic_cfq_new(void); -void ossl_quic_cfq_free(QUIC_CFQ *cfq); - -/* - * Input Side - * ---------- - */ - -/* - * Enqueue a frame to the CFQ. - * - * encoded points to the opaque encoded frame. - * - * free_cb is called by the CFQ when the buffer is no longer needed; - * free_cb_arg is an opaque value passed to free_cb. - * - * priority determines the relative ordering of control frames in a packet. - * Lower numerical values for priority mean that a frame should come earlier in - * a packet. pn_space is a QUIC_PN_SPACE_* value. - * - * On success, returns a QUIC_CFQ_ITEM pointer which acts as a handle to - * the queued frame. On failure, returns NULL. - * - * The frame is initially in the TX state, so there is no need to call - * ossl_quic_cfq_mark_tx() immediately after calling this function. - * - * The frame type is duplicated as the frame_type argument here, even though it - * is also encoded into the buffer. This allows the caller to determine the - * frame type if desired without having to decode the frame. - * - * flags is zero or more QUIC_CFQ_ITEM_FLAG values. - */ -typedef void (cfq_free_cb)(unsigned char *buf, size_t buf_len, void *arg); - -QUIC_CFQ_ITEM *ossl_quic_cfq_add_frame(QUIC_CFQ *cfq, - uint32_t priority, - uint32_t pn_space, - uint64_t frame_type, - uint32_t flags, - const unsigned char *encoded, - size_t encoded_len, - cfq_free_cb *free_cb, - void *free_cb_arg); - -/* - * Effects an immediate transition of the given CFQ item to the TX state. - */ -void ossl_quic_cfq_mark_tx(QUIC_CFQ *cfq, QUIC_CFQ_ITEM *item); - -/* - * Effects an immediate transition of the given CFQ item to the NEW state, - * allowing the frame to be retransmitted. If priority is not UINT32_MAX, - * the priority is changed to the given value. - */ -void ossl_quic_cfq_mark_lost(QUIC_CFQ *cfq, QUIC_CFQ_ITEM *item, - uint32_t priority); - -/* - * Releases a CFQ item. The item may be in either state (NEW or TX) prior to the - * call. The QUIC_CFQ_ITEM pointer must not be used following this call. - */ -void ossl_quic_cfq_release(QUIC_CFQ *cfq, QUIC_CFQ_ITEM *item); - -/* - * Output Side - * ----------- - */ - -/* - * Gets the highest priority CFQ item in the given PN space awaiting - * transmission. If there are none, returns NULL. - */ -QUIC_CFQ_ITEM *ossl_quic_cfq_get_priority_head(const QUIC_CFQ *cfq, - uint32_t pn_space); - -/* - * Given a CFQ item, gets the next CFQ item awaiting transmission in priority - * order in the given PN space. In other words, given the return value of - * ossl_quic_cfq_get_priority_head(), returns the next-lower priority item. - * Returns NULL if the given item is the last item in priority order. - */ -QUIC_CFQ_ITEM *ossl_quic_cfq_item_get_priority_next(const QUIC_CFQ_ITEM *item, - uint32_t pn_space); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_channel.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_channel.h deleted file mode 100644 index f46db063..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_channel.h +++ /dev/null @@ -1,429 +0,0 @@ -/* - * 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_QUIC_CHANNEL_H -# define OSSL_QUIC_CHANNEL_H - -# include -# include "internal/quic_types.h" -# include "internal/quic_stream_map.h" -# include "internal/quic_reactor.h" -# include "internal/quic_statm.h" -# include "internal/time.h" -# include "internal/thread.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Channel - * ============ - * - * A QUIC channel (QUIC_CHANNEL) is an object which binds together all of the - * various pieces of QUIC into a single top-level object, and handles connection - * state which is not specific to the client or server roles. In particular, it - * is strictly separated from the libssl front end I/O API personality layer, - * and is not an SSL object. - * - * The name QUIC_CHANNEL is chosen because QUIC_CONNECTION is already in use, - * but functionally these relate to the same thing (a QUIC connection). The use - * of two separate objects ensures clean separation between the API personality - * layer and common code for handling connections, and between the functionality - * which is specific to clients and which is specific to servers, and the - * functionality which is common to both. - * - * The API personality layer provides SSL objects (e.g. a QUIC_CONNECTION) which - * consume a QUIC channel and implement a specific public API. Things which are - * handled by the API personality layer include emulation of blocking semantics, - * handling of SSL object mode flags like non-partial write mode, etc. - * - * Where the QUIC_CHANNEL is used in a server role, there is one QUIC_CHANNEL - * per connection. In the future a QUIC Channel Manager will probably be defined - * to handle ownership of resources which are shared between connections (e.g. - * demuxers). Since we only use server-side functionality for dummy test servers - * for now, which only need to handle one connection at a time, this is not - * currently modelled. - * - * Synchronisation - * --------------- - * - * To support thread assisted mode, QUIC_CHANNEL can be used by multiple - * threads. **It is the caller's responsibility to ensure that the QUIC_CHANNEL - * is only accessed (whether via its methods or via direct access to its state) - * while the channel mutex is held**, except for methods explicitly marked as - * not requiring prior locking. This is an unchecked precondition. - * - * The instantiator of the channel is responsible for providing a suitable - * mutex which then serves as the channel mutex; see QUIC_CHANNEL_ARGS. - */ - -/* - * The function does not acquire the channel mutex and assumes it is already - * held by the calling thread. - * - * Any function tagged with this has the following precondition: - * - * Precondition: must hold channel mutex (unchecked) - */ -# define QUIC_NEEDS_LOCK - -/* - * The function acquires the channel mutex and releases it before returning in - * all circumstances. - * - * Any function tagged with this has the following precondition and - * postcondition: - * - * Precondition: must not hold channel mutex (unchecked) - * Postcondition: channel mutex is not held (by calling thread) - */ -# define QUIC_TAKES_LOCK - -/* - * The function acquires the channel mutex and leaves it acquired - * when returning success. - * - * Any function tagged with this has the following precondition and - * postcondition: - * - * Precondition: must not hold channel mutex (unchecked) - * Postcondition: channel mutex is held by calling thread - * or function returned failure - */ -# define QUIC_ACQUIRES_LOCK - -# define QUIC_TODO_LOCK - -# define QUIC_CHANNEL_STATE_IDLE 0 -# define QUIC_CHANNEL_STATE_ACTIVE 1 -# define QUIC_CHANNEL_STATE_TERMINATING_CLOSING 2 -# define QUIC_CHANNEL_STATE_TERMINATING_DRAINING 3 -# define QUIC_CHANNEL_STATE_TERMINATED 4 - -typedef struct quic_channel_args_st { - OSSL_LIB_CTX *libctx; - const char *propq; - int is_server; - SSL *tls; - - /* - * This must be a mutex the lifetime of which will exceed that of the - * channel. The instantiator of the channel is responsible for providing a - * mutex as this makes it easier to handle instantiation and teardown of - * channels in situations potentially requiring locking. - * - * Note that this is a MUTEX not a RWLOCK as it needs to be an OS mutex for - * compatibility with an OS's condition variable wait API, whereas RWLOCK - * may, depending on the build configuration, be implemented using an OS's - * mutex primitive or using its RW mutex primitive. - */ - CRYPTO_MUTEX *mutex; - - /* - * Optional function pointer to use to retrieve the current time. If NULL, - * ossl_time_now() is used. - */ - OSSL_TIME (*now_cb)(void *arg); - void *now_cb_arg; -} QUIC_CHANNEL_ARGS; - -typedef struct quic_channel_st QUIC_CHANNEL; - -/* Represents the cause for a connection's termination. */ -typedef struct quic_terminate_cause_st { - /* - * If we are in a TERMINATING or TERMINATED state, this is the error code - * associated with the error. This field is valid iff we are in the - * TERMINATING or TERMINATED states. - */ - uint64_t error_code; - - /* - * If terminate_app is set and this is nonzero, this is the frame type which - * caused the connection to be terminated. - */ - uint64_t frame_type; - - /* - * Optional reason string. When calling ossl_quic_channel_local_close, if a - * reason string pointer is passed, it is copied and stored inside - * QUIC_CHANNEL for the remainder of the lifetime of the channel object. - * Thus the string pointed to by this value, if non-NULL, is valid for the - * lifetime of the QUIC_CHANNEL object. - */ - const char *reason; - - /* - * Length of reason in bytes. The reason is supposed to contain a UTF-8 - * string but may be arbitrary data if the reason came from the network. - */ - size_t reason_len; - - /* Is this error code in the transport (0) or application (1) space? */ - unsigned int app : 1; - - /* - * If set, the cause of the termination is a received CONNECTION_CLOSE - * frame. Otherwise, we decided to terminate ourselves and sent a - * CONNECTION_CLOSE frame (regardless of whether the peer later also sends - * one). - */ - unsigned int remote : 1; -} QUIC_TERMINATE_CAUSE; - - -/* - * Create a new QUIC channel using the given arguments. The argument structure - * does not need to remain allocated. Returns NULL on failure. - */ -QUIC_CHANNEL *ossl_quic_channel_new(const QUIC_CHANNEL_ARGS *args); - -/* No-op if ch is NULL. */ -void ossl_quic_channel_free(QUIC_CHANNEL *ch); - -/* Set mutator callbacks for test framework support */ -int ossl_quic_channel_set_mutator(QUIC_CHANNEL *ch, - ossl_mutate_packet_cb mutatecb, - ossl_finish_mutate_cb finishmutatecb, - void *mutatearg); - -/* - * Connection Lifecycle Events - * =========================== - * - * Various events that can be raised on the channel by other parts of the QUIC - * implementation. Some of these are suitable for general use by any part of the - * code (e.g. ossl_quic_channel_raise_protocol_error), others are for very - * specific use by particular components only (e.g. - * ossl_quic_channel_on_handshake_confirmed). - */ - -/* - * To be used by a QUIC connection. Starts the channel. For a client-mode - * channel, this starts sending the first handshake layer message, etc. Can only - * be called in the idle state; successive calls are ignored. - */ -int ossl_quic_channel_start(QUIC_CHANNEL *ch); - -/* Start a locally initiated connection shutdown. */ -void ossl_quic_channel_local_close(QUIC_CHANNEL *ch, uint64_t app_error_code, - const char *app_reason); - -/* - * Called when the handshake is confirmed. - */ -int ossl_quic_channel_on_handshake_confirmed(QUIC_CHANNEL *ch); - -/* - * Raises a protocol error. This is intended to be the universal call suitable - * for handling of all peer-triggered protocol violations or errors detected by - * us. We specify a QUIC transport-scope error code and optional frame type - * which was responsible. If a frame type is not applicable, specify zero. The - * reason string is not currently handled, but should be a string of static - * storage duration. If the connection has already terminated due to a previous - * protocol error, this is a no-op; first error wins. - * - * Usually the ossl_quic_channel_raise_protocol_error() function should be used. - * The ossl_quic_channel_raise_protocol_error_loc() function can be used - * directly for passing through existing call site information from an existing - * error. - */ -void ossl_quic_channel_raise_protocol_error_loc(QUIC_CHANNEL *ch, - uint64_t error_code, - uint64_t frame_type, - const char *reason, - ERR_STATE *err_state, - const char *src_file, - int src_line, - const char *src_func); - -#define ossl_quic_channel_raise_protocol_error(ch, error_code, frame_type, reason) \ - ossl_quic_channel_raise_protocol_error_loc((ch), (error_code), \ - (frame_type), \ - (reason), \ - NULL, \ - OPENSSL_FILE, \ - OPENSSL_LINE, \ - OPENSSL_FUNC) - -#define ossl_quic_channel_raise_protocol_error_state(ch, error_code, frame_type, reason, state) \ - ossl_quic_channel_raise_protocol_error_loc((ch), (error_code), \ - (frame_type), \ - (reason), \ - (state), \ - OPENSSL_FILE, \ - OPENSSL_LINE, \ - OPENSSL_FUNC) - - -/* - * Returns 1 if permanent net error was detected on the QUIC_CHANNEL, - * 0 otherwise. - */ -int ossl_quic_channel_net_error(QUIC_CHANNEL *ch); - -/* Restore saved error state (best effort) */ -void ossl_quic_channel_restore_err_state(QUIC_CHANNEL *ch); - -/* For RXDP use. */ -void ossl_quic_channel_on_remote_conn_close(QUIC_CHANNEL *ch, - OSSL_QUIC_FRAME_CONN_CLOSE *f); -void ossl_quic_channel_on_new_conn_id(QUIC_CHANNEL *ch, - OSSL_QUIC_FRAME_NEW_CONN_ID *f); - -/* - * Queries and Accessors - * ===================== - */ - -/* Gets the reactor which can be used to tick/poll on the channel. */ -QUIC_REACTOR *ossl_quic_channel_get_reactor(QUIC_CHANNEL *ch); - -/* Gets the QSM used with the channel. */ -QUIC_STREAM_MAP *ossl_quic_channel_get_qsm(QUIC_CHANNEL *ch); - -/* Gets the statistics manager used with the channel. */ -OSSL_STATM *ossl_quic_channel_get_statm(QUIC_CHANNEL *ch); - -/* - * Gets/sets the current peer address. Generally this should be used before - * starting a channel in client mode. - */ -int ossl_quic_channel_get_peer_addr(QUIC_CHANNEL *ch, BIO_ADDR *peer_addr); -int ossl_quic_channel_set_peer_addr(QUIC_CHANNEL *ch, const BIO_ADDR *peer_addr); - -/* Gets/sets the underlying network read and write BIOs. */ -BIO *ossl_quic_channel_get_net_rbio(QUIC_CHANNEL *ch); -BIO *ossl_quic_channel_get_net_wbio(QUIC_CHANNEL *ch); -int ossl_quic_channel_set_net_rbio(QUIC_CHANNEL *ch, BIO *net_rbio); -int ossl_quic_channel_set_net_wbio(QUIC_CHANNEL *ch, BIO *net_wbio); - -/* - * Re-poll the network BIOs already set to determine if their support - * for polling has changed. - */ -int ossl_quic_channel_update_poll_descriptors(QUIC_CHANNEL *ch); - -/* - * Returns an existing stream by stream ID. Returns NULL if the stream does not - * exist. - */ -QUIC_STREAM *ossl_quic_channel_get_stream_by_id(QUIC_CHANNEL *ch, - uint64_t stream_id); - -/* Returns 1 if channel is terminating or terminated. */ -int ossl_quic_channel_is_term_any(const QUIC_CHANNEL *ch); -const QUIC_TERMINATE_CAUSE * -ossl_quic_channel_get_terminate_cause(const QUIC_CHANNEL *ch); -int ossl_quic_channel_is_closing(const QUIC_CHANNEL *ch); -int ossl_quic_channel_is_terminated(const QUIC_CHANNEL *ch); -int ossl_quic_channel_is_active(const QUIC_CHANNEL *ch); -int ossl_quic_channel_is_handshake_complete(const QUIC_CHANNEL *ch); -int ossl_quic_channel_is_handshake_confirmed(const QUIC_CHANNEL *ch); - -QUIC_DEMUX *ossl_quic_channel_get0_demux(QUIC_CHANNEL *ch); - -SSL *ossl_quic_channel_get0_ssl(QUIC_CHANNEL *ch); - -/* - * Retrieves a pointer to the channel mutex which was provided at the time the - * channel was instantiated. In order to allow locks to be acquired and released - * with the correct granularity, it is the caller's responsibility to ensure - * this lock is held for write while calling any QUIC_CHANNEL method, except for - * methods explicitly designed otherwise. - * - * This method is thread safe and does not require prior locking. It can also be - * called while the lock is already held. Note that this is simply a convenience - * function to access the mutex which was passed to the channel at instantiation - * time; it does not belong to the channel but rather is presumed to belong to - * the owner of the channel. - */ -CRYPTO_MUTEX *ossl_quic_channel_get_mutex(QUIC_CHANNEL *ch); - -/* - * Creates a new locally-initiated stream in the stream mapper, choosing an - * appropriate stream ID. If is_uni is 1, creates a unidirectional stream, else - * creates a bidirectional stream. Returns NULL on failure. - */ -QUIC_STREAM *ossl_quic_channel_new_stream_local(QUIC_CHANNEL *ch, int is_uni); - -/* - * Creates a new remotely-initiated stream in the stream mapper. The stream ID - * is used to confirm the initiator and determine the stream type. The stream is - * automatically added to the QSM's accept queue. A pointer to the stream is - * also returned. Returns NULL on failure. - */ -QUIC_STREAM *ossl_quic_channel_new_stream_remote(QUIC_CHANNEL *ch, - uint64_t stream_id); - -/* - * Configures incoming stream auto-reject. If enabled, incoming streams have - * both their sending and receiving parts automatically rejected using - * STOP_SENDING and STREAM_RESET frames. aec is the application error - * code to be used for those frames. - */ -void ossl_quic_channel_set_incoming_stream_auto_reject(QUIC_CHANNEL *ch, - int enable, - uint64_t aec); - -/* - * Causes the channel to reject the sending and receiving parts of a stream, - * as though autorejected. Can be used if a stream has already been - * accepted. - */ -void ossl_quic_channel_reject_stream(QUIC_CHANNEL *ch, QUIC_STREAM *qs); - -/* Replace local connection ID in TXP and DEMUX for testing purposes. */ -int ossl_quic_channel_replace_local_cid(QUIC_CHANNEL *ch, - const QUIC_CONN_ID *conn_id); - -/* Setters for the msg_callback and msg_callback_arg */ -void ossl_quic_channel_set_msg_callback(QUIC_CHANNEL *ch, - ossl_msg_cb msg_callback, - SSL *msg_callback_ssl); -void ossl_quic_channel_set_msg_callback_arg(QUIC_CHANNEL *ch, - void *msg_callback_arg); - -/* Testing use only - sets a TXKU threshold packet count override value. */ -void ossl_quic_channel_set_txku_threshold_override(QUIC_CHANNEL *ch, - uint64_t tx_pkt_threshold); - -/* Testing use only - gets current 1-RTT key epochs for QTX and QRX. */ -uint64_t ossl_quic_channel_get_tx_key_epoch(QUIC_CHANNEL *ch); -uint64_t ossl_quic_channel_get_rx_key_epoch(QUIC_CHANNEL *ch); - -/* Artificially trigger a spontaneous TXKU if possible. */ -int ossl_quic_channel_trigger_txku(QUIC_CHANNEL *ch); -int ossl_quic_channel_has_pending(const QUIC_CHANNEL *ch); - -/* Force transmission of an ACK-eliciting packet. */ -int ossl_quic_channel_ping(QUIC_CHANNEL *ch); - -/* For testing use. While enabled, ticking is not performed. */ -void ossl_quic_channel_set_inhibit_tick(QUIC_CHANNEL *ch, int inhibit); - -/* - * These queries exist for diagnostic purposes only. They may roll over. - * Do not rely on them for non-testing purposes. - */ -uint16_t ossl_quic_channel_get_diag_num_rx_ack(QUIC_CHANNEL *ch); - -/* - * Diagnostic use only. Gets the current local CID. - */ -void ossl_quic_channel_get_diag_local_cid(QUIC_CHANNEL *ch, QUIC_CONN_ID *cid); - -/* - * Returns 1 if stream count flow control allows us to create a new - * locally-initiated stream. - */ -int ossl_quic_channel_is_new_local_stream_admissible(QUIC_CHANNEL *ch, int is_uni); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_demux.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_demux.h deleted file mode 100644 index 444249e7..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_demux.h +++ /dev/null @@ -1,364 +0,0 @@ -/* - * 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_QUIC_DEMUX_H -# define OSSL_QUIC_DEMUX_H - -# include -# include "internal/quic_types.h" -# include "internal/bio_addr.h" -# include "internal/time.h" -# include "internal/list.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Demuxer - * ============ - * - * The QUIC connection demuxer is the entity responsible for receiving datagrams - * from the network via a datagram BIO. It parses packet headers to determine - * each packet's destination connection ID (DCID) and hands off processing of - * the packet to the correct QUIC Record Layer (QRL)'s RX side (known as the - * QRX). - * - * A QRX is instantiated per QUIC connection and contains the cryptographic - * resources needed to decrypt QUIC packets for that connection. Received - * datagrams are passed from the demuxer to the QRX via a callback registered - * for a specific DCID by the QRX; thus the demuxer has no specific knowledge of - * the QRX and is not coupled to it. - * - * A connection may have multiple connection IDs associated with it; a QRX - * handles this simply by registering multiple connection IDs with the demuxer - * via multiple register calls. - * - * URX Queue - * --------- - * - * Since the demuxer must handle the initial reception of datagrams from the OS, - * RX queue management for new, unprocessed datagrams is also handled by the - * demuxer. - * - * The demuxer maintains a queue of Unprocessed RX Entries (URXEs), which store - * unprocessed (i.e., encrypted, unvalidated) data received from the network. - * The URXE queue is designed to allow multiple datagrams to be received in a - * single call to BIO_recvmmsg, where supported. - * - * One URXE is used per received datagram. Each datagram may contain multiple - * packets, however, this is not the demuxer's concern. QUIC prohibits different - * packets in the same datagram from containing different DCIDs; the demuxer - * only considers the DCID of the first packet in a datagram when deciding how - * to route a received datagram, and it is the responsibility of the QRX to - * enforce this rule. Packets other than the first packet in a datagram are not - * examined by the demuxer, and the demuxer does not perform validation of - * packet headers other than to the minimum extent necessary to extract the - * DCID; further parsing and validation of packet headers is the responsibility - * of the QRX. - * - * Rather than defining an opaque interface, the URXE structure internals - * are exposed. Since the demuxer is only exposed to other parts of the QUIC - * implementation internals, this poses no problem, and has a number of - * advantages: - * - * - Fields in the URXE can be allocated to support requirements in other - * components, like the QRX, which would otherwise have to allocate extra - * memory corresponding to each URXE. - * - * - Other components, like the QRX, can keep the URXE in queues of its own - * when it is not being managed by the demuxer. - * - * URX Queue Structure - * ------------------- - * - * The URXE queue is maintained as a simple doubly-linked list. URXE entries are - * moved between different lists in their lifecycle (for example, from a free - * list to a pending list and vice versa). The buffer into which datagrams are - * received immediately follows this URXE header structure and is part of the - * same allocation. - */ - -typedef struct quic_urxe_st QUIC_URXE; - -/* Maximum number of packets we allow to exist in one datagram. */ -#define QUIC_MAX_PKT_PER_URXE (sizeof(uint64_t) * 8) - -struct quic_urxe_st { - OSSL_LIST_MEMBER(urxe, QUIC_URXE); - - /* - * The URXE data starts after this structure so we don't need a pointer. - * data_len stores the current length (i.e., the length of the received - * datagram) and alloc_len stores the allocation length. The URXE will be - * reallocated if we need a larger allocation than is available, though this - * should not be common as we will have a good idea of worst-case MTUs up - * front. - */ - size_t data_len, alloc_len; - - /* - * Bitfields per packet. processed indicates the packet has been processed - * and must not be processed again, hpr_removed indicates header protection - * has already been removed. Used by QRX only; not used by the demuxer. - */ - uint64_t processed, hpr_removed; - - /* - * Address of peer we received the datagram from, and the local interface - * address we received it on. If local address support is not enabled, local - * is zeroed. - */ - BIO_ADDR peer, local; - - /* - * Time at which datagram was received (or ossl_time_zero()) if a now - * function was not provided). - */ - OSSL_TIME time; - - /* - * Used by the QRX to mark whether a datagram has been deferred. Used by the - * QRX only; not used by the demuxer. - */ - char deferred; - - /* - * Used by the DEMUX to track if a URXE has been handed out. Used primarily - * for debugging purposes. - */ - char demux_state; -}; - -/* Accessors for URXE buffer. */ -static ossl_unused ossl_inline unsigned char * -ossl_quic_urxe_data(const QUIC_URXE *e) -{ - return (unsigned char *)&e[1]; -} - -static ossl_unused ossl_inline unsigned char * -ossl_quic_urxe_data_end(const QUIC_URXE *e) -{ - return ossl_quic_urxe_data(e) + e->data_len; -} - -/* List structure tracking a queue of URXEs. */ -DEFINE_LIST_OF(urxe, QUIC_URXE); -typedef OSSL_LIST(urxe) QUIC_URXE_LIST; - -/* - * List management helpers. These are used by the demuxer but can also be used - * by users of the demuxer to manage URXEs. - */ -void ossl_quic_urxe_remove(QUIC_URXE_LIST *l, QUIC_URXE *e); -void ossl_quic_urxe_insert_head(QUIC_URXE_LIST *l, QUIC_URXE *e); -void ossl_quic_urxe_insert_tail(QUIC_URXE_LIST *l, QUIC_URXE *e); - -/* Opaque type representing a demuxer. */ -typedef struct quic_demux_st QUIC_DEMUX; - -/* - * Called when a datagram is received for a given connection ID. - * - * e is a URXE containing the datagram payload. It is permissible for the callee - * to mutate this buffer; once the demuxer calls this callback, it will never - * read the buffer again. - * - * The callee must arrange for ossl_quic_demux_release_urxe or - * ossl_quic_demux_reinject_urxe to be called on the URXE at some point in the - * future (this need not be before the callback returns). - * - * At the time the callback is made, the URXE will not be in any queue, - * therefore the callee can use the prev and next fields as it wishes. - */ -typedef void (ossl_quic_demux_cb_fn)(QUIC_URXE *e, void *arg); - -/* - * Called when a datagram is received. - * Returns 1 if the datagram ends with a stateless reset token and - * 0 if not. - */ -typedef int (ossl_quic_stateless_reset_cb_fn)(const unsigned char *data, - size_t data_len, void *arg); - -/* - * Creates a new demuxer. The given BIO is used to receive datagrams from the - * network using BIO_recvmmsg. short_conn_id_len is the length of destination - * connection IDs used in RX'd packets; it must have the same value for all - * connections used on a socket. default_urxe_alloc_len is the buffer size to - * receive datagrams into; it should be a value large enough to contain any - * received datagram according to local MTUs, etc. - * - * now is an optional function used to determine the time a datagram was - * received. now_arg is an opaque argument passed to the function. If now is - * NULL, ossl_time_zero() is used as the datagram reception time. - */ -QUIC_DEMUX *ossl_quic_demux_new(BIO *net_bio, - size_t short_conn_id_len, - OSSL_TIME (*now)(void *arg), - void *now_arg); - -/* - * Destroy a demuxer. All URXEs must have been released back to the demuxer - * before calling this. No-op if demux is NULL. - */ -void ossl_quic_demux_free(QUIC_DEMUX *demux); - -/* - * Changes the BIO which the demuxer reads from. This also sets the MTU if the - * BIO supports querying the MTU. - */ -void ossl_quic_demux_set_bio(QUIC_DEMUX *demux, BIO *net_bio); - -/* - * Changes the MTU in bytes we use to receive datagrams. - */ -int ossl_quic_demux_set_mtu(QUIC_DEMUX *demux, unsigned int mtu); - -/* - * Register a datagram handler callback for a connection ID. - * - * ossl_quic_demux_pump will call the specified function if it receives a datagram - * the first packet of which has the specified destination connection ID. - * - * It is assumed all packets in a datagram have the same destination connection - * ID (as QUIC mandates this), but it is the user's responsibility to check for - * this and reject subsequent packets in a datagram that violate this rule. - * - * dst_conn_id is a destination connection ID; it is copied and need not remain - * valid after this function returns. - * - * cb_arg is passed to cb when it is called. For information on the callback, - * see its typedef above. - * - * Only one handler can be set for a given connection ID. If a handler is - * already set for the given connection ID, returns 0. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_demux_register(QUIC_DEMUX *demux, - const QUIC_CONN_ID *dst_conn_id, - ossl_quic_demux_cb_fn *cb, - void *cb_arg); - -/* - * Unregisters any datagram handler callback set for the given connection ID. - * Fails if no handler is registered for the given connection ID. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_demux_unregister(QUIC_DEMUX *demux, - const QUIC_CONN_ID *dst_conn_id); - -/* - * Unregisters any datagram handler callback from all connection IDs it is used - * for. cb and cb_arg must both match the values passed to - * ossl_quic_demux_register. - */ -void ossl_quic_demux_unregister_by_cb(QUIC_DEMUX *demux, - ossl_quic_demux_cb_fn *cb, - void *cb_arg); - -/* - * Set the default packet handler. This is used for incoming packets which don't - * match a registered DCID. This is only needed for servers. If a default packet - * handler is not set, a packet which doesn't match a registered DCID is - * silently dropped. A default packet handler may be unset by passing NULL. - * - * The handler is responsible for ensuring that ossl_quic_demux_reinject_urxe or - * ossl_quic_demux_release_urxe is called on the passed packet at some point in - * the future, which may or may not be before the handler returns. - */ -void ossl_quic_demux_set_default_handler(QUIC_DEMUX *demux, - ossl_quic_demux_cb_fn *cb, - void *cb_arg); - -/* - * Sets a callback for stateless reset processing. - * - * If set, this callback is called for datagrams for which we cannot identify - * a CID. This function should return 1 if there is a stateless reset token - * present and 0 if not. If there is a token present, the connection should - * also be reset. - */ -void ossl_quic_demux_set_stateless_reset_handler( - QUIC_DEMUX *demux, - ossl_quic_stateless_reset_cb_fn *cb, void *cb_arg); - -/* - * Releases a URXE back to the demuxer. No reference must be made to the URXE or - * its buffer after calling this function. The URXE must not be in any queue; - * that is, its prev and next pointers must be NULL. - */ -void ossl_quic_demux_release_urxe(QUIC_DEMUX *demux, - QUIC_URXE *e); - -/* - * Reinjects a URXE which was issued to a registered DCID callback or the - * default packet handler callback back into the pending queue. This is useful - * when a packet has been handled by the default packet handler callback such - * that a DCID has now been registered and can be dispatched normally by DCID. - * Once this has been called, the caller must not touch the URXE anymore and - * must not also call ossl_quic_demux_release_urxe(). - * - * The URXE is reinjected at the head of the queue, so it will be reprocessed - * immediately. - */ -void ossl_quic_demux_reinject_urxe(QUIC_DEMUX *demux, - QUIC_URXE *e); - -/* - * Process any unprocessed RX'd datagrams, by calling registered callbacks by - * connection ID, reading more datagrams from the BIO if necessary. - * - * Returns one of the following values: - * - * QUIC_DEMUX_PUMP_RES_OK - * At least one incoming datagram was processed. - * - * QUIC_DEMUX_PUMP_RES_TRANSIENT_FAIL - * No more incoming datagrams are currently available. - * Call again later. - * - * QUIC_DEMUX_PUMP_RES_PERMANENT_FAIL - * Either the network read BIO has failed in a non-transient fashion, or - * the QUIC implementation has encountered an internal state, assertion - * or allocation error. The caller should tear down the connection - * similarly to in the case of a protocol violation. - * - */ -#define QUIC_DEMUX_PUMP_RES_OK 1 -#define QUIC_DEMUX_PUMP_RES_TRANSIENT_FAIL (-1) -#define QUIC_DEMUX_PUMP_RES_PERMANENT_FAIL (-2) -#define QUIC_DEMUX_PUMP_RES_STATELESS_RESET (-3) - -int ossl_quic_demux_pump(QUIC_DEMUX *demux); - -/* - * Artificially inject a packet into the demuxer for testing purposes. The - * buffer must not exceed the URXE size being used by the demuxer. - * - * If peer or local are NULL, their respective fields are zeroed in the injected - * URXE. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_demux_inject(QUIC_DEMUX *demux, - const unsigned char *buf, - size_t buf_len, - const BIO_ADDR *peer, - const BIO_ADDR *local); - -/* - * Returns 1 if there are any pending URXEs. - */ -int ossl_quic_demux_has_pending(const QUIC_DEMUX *demux); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_error.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_error.h deleted file mode 100644 index ae195a5f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_error.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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_QUIC_ERROR_H -# define OSSL_QUIC_ERROR_H - -# include - -# ifndef OPENSSL_NO_QUIC - -/* RFC 9000 Section 20.1 */ -# define QUIC_ERR_NO_ERROR 0x00 -# define QUIC_ERR_INTERNAL_ERROR 0x01 -# define QUIC_ERR_CONNECTION_REFUSED 0x02 -# define QUIC_ERR_FLOW_CONTROL_ERROR 0x03 -# define QUIC_ERR_STREAM_LIMIT_ERROR 0x04 -# define QUIC_ERR_STREAM_STATE_ERROR 0x05 -# define QUIC_ERR_FINAL_SIZE_ERROR 0x06 -# define QUIC_ERR_FRAME_ENCODING_ERROR 0x07 -# define QUIC_ERR_TRANSPORT_PARAMETER_ERROR 0x08 -# define QUIC_ERR_CONNECTION_ID_LIMIT_ERROR 0x09 -# define QUIC_ERR_PROTOCOL_VIOLATION 0x0A -# define QUIC_ERR_INVALID_TOKEN 0x0B -# define QUIC_ERR_APPLICATION_ERROR 0x0C -# define QUIC_ERR_CRYPTO_BUFFER_EXCEEDED 0x0D -# define QUIC_ERR_KEY_UPDATE_ERROR 0x0E -# define QUIC_ERR_AEAD_LIMIT_REACHED 0x0F -# define QUIC_ERR_NO_VIABLE_PATH 0x10 - -/* Inclusive range for handshake-specific errors. */ -# define QUIC_ERR_CRYPTO_ERR_BEGIN 0x0100 -# define QUIC_ERR_CRYPTO_ERR_END 0x01FF - -# define QUIC_ERR_CRYPTO_ERR(X) \ - (QUIC_ERR_CRYPTO_ERR_BEGIN + (X)) - -# define QUIC_ERR_CRYPTO_UNEXPECTED_MESSAGE \ - QUIC_ERR_CRYPTO_ERR(SSL3_AD_UNEXPECTED_MESSAGE) - -# define QUIC_ERR_CRYPTO_MISSING_EXT \ - QUIC_ERR_CRYPTO_ERR(TLS13_AD_MISSING_EXTENSION) - -# define QUIC_ERR_CRYPTO_NO_APP_PROTO \ - QUIC_ERR_CRYPTO_ERR(TLS1_AD_NO_APPLICATION_PROTOCOL) - -const char *ossl_quic_err_to_string(uint64_t error_code); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_fc.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_fc.h deleted file mode 100644 index 49b448a3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_fc.h +++ /dev/null @@ -1,277 +0,0 @@ -/* - * 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_QUIC_FC_H -# define OSSL_QUIC_FC_H - -# include -# include "internal/time.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * TX Flow Controller (TXFC) - * ========================= - * - * For discussion, see doc/designs/quic-design/quic-fc.md. - */ -typedef struct quic_txfc_st QUIC_TXFC; - -struct quic_txfc_st { - QUIC_TXFC *parent; /* stream-level iff non-NULL */ - uint64_t swm, cwm; - char has_become_blocked; -}; - -/* - * Initialises a TX flow controller. conn_txfc should be non-NULL and point to - * the connection-level flow controller if the TXFC is for stream-level flow - * control, and NULL otherwise. - */ -int ossl_quic_txfc_init(QUIC_TXFC *txfc, QUIC_TXFC *conn_txfc); - -/* - * Gets the parent (i.e., connection-level) TX flow controller. Returns NULL if - * called on a connection-level TX flow controller. - */ -QUIC_TXFC *ossl_quic_txfc_get_parent(QUIC_TXFC *txfc); - -/* - * Bump the credit watermark (CWM) value. This is the 'On TX Window Updated' - * operation. This function is a no-op if it has already been called with an - * equal or higher CWM value. - * - * It returns 1 iff the call resulted in the CWM being bumped and 0 if it was - * not increased because it has already been called with an equal or higher CWM - * value. This is not an error per se but may indicate a local programming error - * or a protocol error in a remote peer. - */ -int ossl_quic_txfc_bump_cwm(QUIC_TXFC *txfc, uint64_t cwm); - -/* - * Get the number of bytes by which we are in credit. This is the number of - * controlled bytes we are allowed to send. (Thus if this function returns 0, we - * are currently blocked.) - * - * If called on a stream-level TXFC, ossl_quic_txfc_get_credit is called on - * the connection-level TXFC as well, and the lesser of the two values is - * returned. The consumed value is the amount already consumed on the connection - * level TXFC. - */ -uint64_t ossl_quic_txfc_get_credit(QUIC_TXFC *txfc, uint64_t consumed); - -/* - * Like ossl_quic_txfc_get_credit(), but when called on a stream-level TXFC, - * retrieves only the stream-level credit value and does not clamp it based on - * connection-level flow control. Any credit value is reduced by the consumed - * amount. - */ -uint64_t ossl_quic_txfc_get_credit_local(QUIC_TXFC *txfc, uint64_t consumed); - -/* - * Consume num_bytes of credit. This is the 'On TX' operation. This should be - * called when we transmit any controlled bytes. Calling this with an argument - * of 0 is a no-op. - * - * We must never transmit more controlled bytes than we are in credit for (see - * the return value of ossl_quic_txfc_get_credit()). If you call this function - * with num_bytes greater than our current credit, this function consumes the - * remainder of the credit and returns 0. This indicates a serious programming - * error on the caller's part. Otherwise, the function returns 1. - * - * If called on a stream-level TXFC, ossl_quic_txfc_consume_credit() is called - * on the connection-level TXFC also. If the call to that function on the - * connection-level TXFC returns zero, this function will also return zero. - */ -int ossl_quic_txfc_consume_credit(QUIC_TXFC *txfc, uint64_t num_bytes); - -/* - * Like ossl_quic_txfc_consume_credit(), but when called on a stream-level TXFC, - * consumes only from the stream-level credit and does not inform the - * connection-level TXFC. - */ -int ossl_quic_txfc_consume_credit_local(QUIC_TXFC *txfc, uint64_t num_bytes); - -/* - * This flag is provided for convenience. A caller is not required to use it. It - * is a boolean flag set whenever our credit drops to zero. If clear is 1, the - * flag is cleared. The old value of the flag is returned. Callers may use this - * to determine if they need to send a DATA_BLOCKED or STREAM_DATA_BLOCKED - * frame, which should contain the value returned by ossl_quic_txfc_get_cwm(). - */ -int ossl_quic_txfc_has_become_blocked(QUIC_TXFC *txfc, int clear); - -/* - * Get the current CWM value. This is mainly only needed when generating a - * DATA_BLOCKED or STREAM_DATA_BLOCKED frame, or for diagnostic purposes. - */ -uint64_t ossl_quic_txfc_get_cwm(QUIC_TXFC *txfc); - -/* - * Get the current spent watermark (SWM) value. This is purely for diagnostic - * use and should not be needed in normal circumstances. - */ -uint64_t ossl_quic_txfc_get_swm(QUIC_TXFC *txfc); - -/* - * RX Flow Controller (RXFC) - * ========================= - */ -typedef struct quic_rxfc_st QUIC_RXFC; - -struct quic_rxfc_st { - /* - * swm is the sent/received watermark, which tracks how much we have - * received from the peer. rwm is the retired watermark, which tracks how - * much has been passed to the application. esrwm is the rwm value at which - * the current auto-tuning epoch started. hwm is the highest stream length - * (STREAM frame offset + payload length) we have seen from a STREAM frame - * yet. - */ - uint64_t cwm, swm, rwm, esrwm, hwm, cur_window_size, max_window_size; - OSSL_TIME epoch_start; - OSSL_TIME (*now)(void *arg); - void *now_arg; - QUIC_RXFC *parent; - unsigned char error_code, has_cwm_changed, is_fin, standalone; -}; - -/* - * Initialises an RX flow controller. conn_rxfc should be non-NULL and point to - * a connection-level RXFC if the RXFC is for stream-level flow control, and - * NULL otherwise. initial_window_size and max_window_size specify the initial - * and absolute maximum window sizes, respectively. Window size values are - * expressed in bytes and determine how much credit the RXFC extends to the peer - * to transmit more data at a time. - */ -int ossl_quic_rxfc_init(QUIC_RXFC *rxfc, QUIC_RXFC *conn_rxfc, - uint64_t initial_window_size, - uint64_t max_window_size, - OSSL_TIME (*now)(void *arg), - void *now_arg); - -/* - * Initialises an RX flow controller which is used by itself and not under a - * connection-level RX flow controller. This can be used for stream count - * enforcement as well as CRYPTO buffer enforcement. - */ -int ossl_quic_rxfc_init_standalone(QUIC_RXFC *rxfc, - uint64_t initial_window_size, - OSSL_TIME (*now)(void *arg), - void *now_arg); - -/* - * Gets the parent (i.e., connection-level) RXFC. Returns NULL if called on a - * connection-level RXFC. - */ -QUIC_RXFC *ossl_quic_rxfc_get_parent(QUIC_RXFC *rxfc); - -/* - * Changes the current maximum window size value. - */ -void ossl_quic_rxfc_set_max_window_size(QUIC_RXFC *rxfc, - size_t max_window_size); - -/* - * To be called whenever a STREAM frame is received. - * - * end is the value (offset + len), where offset is the offset field of the - * STREAM frame and len is the length of the STREAM frame's payload in bytes. - * - * is_fin should be 1 if the STREAM frame had the FIN flag set and 0 otherwise. - * - * This function may be used on a stream-level RXFC only. The connection-level - * RXFC will have its state updated by the stream-level RXFC. - * - * You should check ossl_quic_rxfc_has_error() on both connection-level and - * stream-level RXFCs after calling this function, as an incoming STREAM frame - * may cause flow control limits to be exceeded by an errant peer. This - * function still returns 1 in this case, as this is not a caller error. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_rxfc_on_rx_stream_frame(QUIC_RXFC *rxfc, - uint64_t end, int is_fin); - -/* - * To be called whenever controlled bytes are retired, i.e. when bytes are - * dequeued from a QUIC stream and passed to the application. num_bytes - * is the number of bytes which were passed to the application. - * - * You should call this only on a stream-level RXFC. This function will update - * the connection-level RXFC automatically. - * - * rtt should be the current best understanding of the RTT to the peer, as - * offered by the Statistics Manager. - * - * You should check ossl_quic_rxfc_has_cwm_changed() after calling this - * function, as it may have caused the RXFC to decide to grant more flow control - * credit to the peer. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_rxfc_on_retire(QUIC_RXFC *rxfc, - uint64_t num_bytes, - OSSL_TIME rtt); - -/* - * Returns the current CWM which the RXFC thinks the peer should have. - * - * Note that the RXFC will increase this value in response to events, at which - * time a MAX_DATA or MAX_STREAM_DATA frame must be generated. Use - * ossl_quic_rxfc_has_cwm_changed() to detect this condition. - * - * This value increases monotonically. - */ -uint64_t ossl_quic_rxfc_get_cwm(QUIC_RXFC *rxfc); - -/* - * Returns the current SWM. This is the total number of bytes the peer has - * transmitted to us. This is intended for diagnostic use only; you should - * not need it. - */ -uint64_t ossl_quic_rxfc_get_swm(QUIC_RXFC *rxfc); - -/* - * Returns the current RWM. This is the total number of bytes that has been - * retired. This is intended for diagnostic use only; you should not need it. - */ -uint64_t ossl_quic_rxfc_get_rwm(QUIC_RXFC *rxfc); - -/* - * Returns the CWM changed flag. If clear is 1, the flag is cleared and the old - * value is returned. - */ -int ossl_quic_rxfc_has_cwm_changed(QUIC_RXFC *rxfc, int clear); - -/* - * Returns a QUIC_ERR_* error code if a flow control error has been detected. - * Otherwise, returns QUIC_ERR_NO_ERROR. If clear is 1, the error is cleared - * and the old value is returned. - * - * May return one of the following values: - * - * QUIC_ERR_FLOW_CONTROL_ERROR: - * This indicates a flow control protocol violation by the remote peer; the - * connection should be terminated in this event. - * QUIC_ERR_FINAL_SIZE: - * The peer attempted to change the stream length after ending the stream. - */ -int ossl_quic_rxfc_get_error(QUIC_RXFC *rxfc, int clear); - -/* - * Returns 1 if the RXFC is a stream-level RXFC and the RXFC knows the final - * size for the stream in bytes. If this is the case and final_size is non-NULL, - * writes the final size to *final_size. Otherwise, returns 0. - */ -int ossl_quic_rxfc_get_final_size(const QUIC_RXFC *rxfc, uint64_t *final_size); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_fifd.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_fifd.h deleted file mode 100644 index a260ec44..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_fifd.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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_QUIC_FIFD_H -# define OSSL_QUIC_FIFD_H - -# include -# include "internal/quic_types.h" -# include "internal/quic_cfq.h" -# include "internal/quic_ackm.h" -# include "internal/quic_txpim.h" -# include "internal/quic_stream.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Frame-in-Flight Dispatcher (FIFD) - * ====================================== - */ -struct quic_fifd_st { - /* Internal data; use the ossl_quic_fifd functions. */ - QUIC_CFQ *cfq; - OSSL_ACKM *ackm; - QUIC_TXPIM *txpim; - QUIC_SSTREAM *(*get_sstream_by_id)(uint64_t stream_id, - uint32_t pn_space, - void *arg); - void *get_sstream_by_id_arg; - void (*regen_frame)(uint64_t frame_type, - uint64_t stream_id, - QUIC_TXPIM_PKT *pkt, - void *arg); - void *regen_frame_arg; - void (*confirm_frame)(uint64_t frame_type, - uint64_t stream_id, - QUIC_TXPIM_PKT *pkt, - void *arg); - void *confirm_frame_arg; - void (*sstream_updated)(uint64_t stream_id, - void *arg); - void *sstream_updated_arg; -}; - -int ossl_quic_fifd_init(QUIC_FIFD *fifd, - QUIC_CFQ *cfq, - OSSL_ACKM *ackm, - QUIC_TXPIM *txpim, - /* stream_id is UINT64_MAX for the crypto stream */ - QUIC_SSTREAM *(*get_sstream_by_id)(uint64_t stream_id, - uint32_t pn_space, - void *arg), - void *get_sstream_by_id_arg, - /* stream_id is UINT64_MAX if not applicable */ - void (*regen_frame)(uint64_t frame_type, - uint64_t stream_id, - QUIC_TXPIM_PKT *pkt, - void *arg), - void *regen_frame_arg, - void (*confirm_frame)(uint64_t frame_type, - uint64_t stream_id, - QUIC_TXPIM_PKT *pkt, - void *arg), - void *confirm_frame_arg, - void (*sstream_updated)(uint64_t stream_id, - void *arg), - void *sstream_updated_arg); - -void ossl_quic_fifd_cleanup(QUIC_FIFD *fifd); /* (no-op) */ - -int ossl_quic_fifd_pkt_commit(QUIC_FIFD *fifd, QUIC_TXPIM_PKT *pkt); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_reactor.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_reactor.h deleted file mode 100644 index 57bb551e..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_reactor.h +++ /dev/null @@ -1,188 +0,0 @@ -/* - * 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_QUIC_REACTOR_H -# define OSSL_QUIC_REACTOR_H - -# include "internal/time.h" -# include "internal/sockets.h" -# include - -# ifndef OPENSSL_NO_QUIC - -/* - * Core I/O Reactor Framework - * ========================== - * - * Manages use of async network I/O which the QUIC stack is built on. The core - * mechanic looks like this: - * - * - There is a pollable FD for both the read and write side respectively. - * Readability and writeability of these FDs respectively determines when - * network I/O is available. - * - * - The reactor can export these FDs to the user, as well as flags indicating - * whether the user should listen for readability, writeability, or neither. - * - * - The reactor can export a timeout indication to the user, indicating when - * the reactor should be called (via libssl APIs) regardless of whether - * the network socket has become ready. - * - * The reactor is based around a tick callback which is essentially the mutator - * function. The mutator attempts to do whatever it can, attempting to perform - * network I/O to the extent currently feasible. When done, the mutator returns - * information to the reactor indicating when it should be woken up again: - * - * - Should it be woken up when network RX is possible? - * - Should it be woken up when network TX is possible? - * - Should it be woken up no later than some deadline X? - * - * The intention is that ALL I/O-related SSL_* functions with side effects (e.g. - * SSL_read/SSL_write) consist of three phases: - * - * - Optionally mutate the QUIC machine's state. - * - Optionally tick the QUIC reactor. - * - Optionally mutate the QUIC machine's state. - * - * For example, SSL_write is a mutation (appending to a stream buffer) followed - * by an optional tick (generally expected as we may want to send the data - * immediately, though not strictly needed if transmission is being deferred due - * to Nagle's algorithm, etc.). - * - * SSL_read is also a mutation and in principle does not need to tick the - * reactor, but it generally will anyway to ensure that the reactor is regularly - * ticked by an application which is only reading and not writing. - * - * If the SSL object is being used in blocking mode, SSL_read may need to block - * if no data is available yet, and SSL_write may need to block if buffers - * are full. - * - * The internals of the QUIC I/O engine always use asynchronous I/O. If the - * application desires blocking semantics, we handle this by adding a blocking - * adaptation layer on top of our internal asynchronous I/O API as exposed by - * the reactor interface. - */ -typedef struct quic_tick_result_st { - char net_read_desired; - char net_write_desired; - OSSL_TIME tick_deadline; -} QUIC_TICK_RESULT; - -typedef struct quic_reactor_st { - /* - * BIO poll descriptors which can be polled. poll_r is a poll descriptor - * which becomes readable when the QUIC state machine can potentially do - * work, and poll_w is a poll descriptor which becomes writable when the - * QUIC state machine can potentially do work. Generally, either of these - * conditions means that SSL_tick() should be called, or another SSL - * function which implicitly calls SSL_tick() (e.g. SSL_read/SSL_write()). - */ - BIO_POLL_DESCRIPTOR poll_r, poll_w; - OSSL_TIME tick_deadline; /* ossl_time_infinite() if none currently applicable */ - - void (*tick_cb)(QUIC_TICK_RESULT *res, void *arg, uint32_t flags); - void *tick_cb_arg; - - /* - * These are true if we would like to know when we can read or write from - * the network respectively. - */ - unsigned int net_read_desired : 1; - unsigned int net_write_desired : 1; - - /* - * Are the read and write poll descriptors we are currently configured with - * things we can actually poll? - */ - unsigned int can_poll_r : 1; - unsigned int can_poll_w : 1; -} QUIC_REACTOR; - -void ossl_quic_reactor_init(QUIC_REACTOR *rtor, - void (*tick_cb)(QUIC_TICK_RESULT *res, void *arg, - uint32_t flags), - void *tick_cb_arg, - OSSL_TIME initial_tick_deadline); - -void ossl_quic_reactor_set_poll_r(QUIC_REACTOR *rtor, - const BIO_POLL_DESCRIPTOR *r); - -void ossl_quic_reactor_set_poll_w(QUIC_REACTOR *rtor, - const BIO_POLL_DESCRIPTOR *w); - -const BIO_POLL_DESCRIPTOR *ossl_quic_reactor_get_poll_r(const QUIC_REACTOR *rtor); -const BIO_POLL_DESCRIPTOR *ossl_quic_reactor_get_poll_w(const QUIC_REACTOR *rtor); - -int ossl_quic_reactor_can_poll_r(const QUIC_REACTOR *rtor); -int ossl_quic_reactor_can_poll_w(const QUIC_REACTOR *rtor); - -int ossl_quic_reactor_can_support_poll_descriptor(const QUIC_REACTOR *rtor, - const BIO_POLL_DESCRIPTOR *d); - -int ossl_quic_reactor_net_read_desired(QUIC_REACTOR *rtor); -int ossl_quic_reactor_net_write_desired(QUIC_REACTOR *rtor); - -OSSL_TIME ossl_quic_reactor_get_tick_deadline(QUIC_REACTOR *rtor); - -/* - * Do whatever work can be done, and as much work as can be done. This involves - * e.g. seeing if we can read anything from the network (if we want to), seeing - * if we can write anything to the network (if we want to), etc. - * - * If the CHANNEL_ONLY flag is set, this indicates that we should only - * touch state which is synchronised by the channel mutex. - */ -#define QUIC_REACTOR_TICK_FLAG_CHANNEL_ONLY (1U << 0) - -int ossl_quic_reactor_tick(QUIC_REACTOR *rtor, uint32_t flags); - -/* - * Blocking I/O Adaptation Layer - * ============================= - * - * The blocking I/O adaptation layer implements blocking I/O on top of our - * asynchronous core. - * - * The core mechanism is block_until_pred(), which does not return until pred() - * returns a value other than 0. The blocker uses OS I/O synchronisation - * primitives (e.g. poll(2)) and ticks the reactor until the predicate is - * satisfied. The blocker is not required to call pred() more than once between - * tick calls. - * - * When pred returns a non-zero value, that value is returned by this function. - * This can be used to allow pred() to indicate error conditions and short - * circuit the blocking process. - * - * A return value of -1 is reserved for network polling errors. Therefore this - * return value should not be used by pred() if ambiguity is not desired. Note - * that the predicate function can always arrange its own output mechanism, for - * example by passing a structure of its own as the argument. - * - * If the SKIP_FIRST_TICK flag is set, the first call to reactor_tick() before - * the first call to pred() is skipped. This is useful if it is known that - * ticking the reactor again will not be useful (e.g. because it has already - * been done). - * - * This function assumes a write lock is held for the entire QUIC_CHANNEL. If - * mutex is non-NULL, it must be a lock currently held for write; it will be - * unlocked during any sleep, and then relocked for write afterwards. - * - * Precondition: mutex is NULL or is held for write (unchecked) - * Postcondition: mutex is NULL or is held for write (unless - * CRYPTO_THREAD_write_lock fails) - */ -#define SKIP_FIRST_TICK (1U << 0) - -int ossl_quic_reactor_block_until_pred(QUIC_REACTOR *rtor, - int (*pred)(void *arg), void *pred_arg, - uint32_t flags, - CRYPTO_RWLOCK *mutex); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_rx.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_rx.h deleted file mode 100644 index e26fd356..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_rx.h +++ /dev/null @@ -1,569 +0,0 @@ -/* - * 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_QUIC_RECORD_RX_H -# define OSSL_QUIC_RECORD_RX_H - -# include -# include "internal/quic_wire_pkt.h" -# include "internal/quic_types.h" -# include "internal/quic_record_util.h" -# include "internal/quic_demux.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Record Layer - RX - * ====================== - */ -typedef struct ossl_qrx_st OSSL_QRX; - -typedef struct ossl_qrx_args_st { - OSSL_LIB_CTX *libctx; - const char *propq; - - /* Demux to receive datagrams from. */ - QUIC_DEMUX *demux; - - /* Length of connection IDs used in short-header packets in bytes. */ - size_t short_conn_id_len; - - /* - * Maximum number of deferred datagrams buffered at any one time. - * Suggested value: 32. - */ - size_t max_deferred; - - /* Initial reference PN used for RX. */ - QUIC_PN init_largest_pn[QUIC_PN_SPACE_NUM]; - - /* Initial key phase. For debugging use only; always 0 in real use. */ - unsigned char init_key_phase_bit; -} OSSL_QRX_ARGS; - -/* Instantiates a new QRX. */ -OSSL_QRX *ossl_qrx_new(const OSSL_QRX_ARGS *args); - -/* - * Frees the QRX. All packets obtained using ossl_qrx_read_pkt must already - * have been released by calling ossl_qrx_release_pkt. - * - * You do not need to call ossl_qrx_remove_dst_conn_id first; this function will - * unregister the QRX from the demuxer for all registered destination connection - * IDs (DCIDs) automatically. - */ -void ossl_qrx_free(OSSL_QRX *qrx); - -/* Setters for the msg_callback and msg_callback_arg */ -void ossl_qrx_set_msg_callback(OSSL_QRX *qrx, ossl_msg_cb msg_callback, - SSL *msg_callback_ssl); -void ossl_qrx_set_msg_callback_arg(OSSL_QRX *qrx, - void *msg_callback_arg); - -/* - * DCID Management - * =============== - */ - -/* - * Adds a given DCID to the QRX. The QRX will register the DCID with the demuxer - * so that incoming packets with that DCID are passed to the given QRX. Multiple - * DCIDs may be associated with a QRX at any one time. You will need to add at - * least one DCID after instantiating the QRX. A zero-length DCID is a valid - * input to this function. This function fails if the DCID is already - * registered. - * - * Returns 1 on success or 0 on error. - */ -int ossl_qrx_add_dst_conn_id(OSSL_QRX *qrx, - const QUIC_CONN_ID *dst_conn_id); - -/* - * Remove a DCID previously registered with ossl_qrx_add_dst_conn_id. The DCID - * is unregistered from the demuxer. Fails if the DCID is not registered with - * the demuxer. - * - * Returns 1 on success or 0 on error. - */ -int ossl_qrx_remove_dst_conn_id(OSSL_QRX *qrx, - const QUIC_CONN_ID *dst_conn_id); - -/* - * Secret Management - * ================= - * - * A QRX has several encryption levels (Initial, Handshake, 0-RTT, 1-RTT) and - * two directions (RX, TX). At any given time, key material is managed for each - * (EL, RX/TX) combination. - * - * Broadly, for a given (EL, RX/TX), the following state machine is applicable: - * - * WAITING_FOR_KEYS --[Provide]--> HAVE_KEYS --[Discard]--> | DISCARDED | - * \-------------------------------------[Discard]--> | | - * - * To transition the RX side of an EL from WAITING_FOR_KEYS to HAVE_KEYS, call - * ossl_qrx_provide_secret (for the INITIAL EL, use of - * ossl_quic_provide_initial_secret is recommended). - * - * Once keys have been provisioned for an EL, you call - * ossl_qrx_discard_enc_level to transition the EL to the DISCARDED state. You - * can also call this function to transition directly to the DISCARDED state - * even before any keys have been provisioned for that EL. - * - * The DISCARDED state is terminal for a given EL; you cannot provide a secret - * again for that EL after reaching it. - * - * Incoming packets cannot be processed and decrypted if they target an EL - * not in the HAVE_KEYS state. However, there is a distinction between - * the WAITING_FOR_KEYS and DISCARDED states: - * - * - In the WAITING_FOR_KEYS state, the QRX assumes keys for the given - * EL will eventually arrive. Therefore, if it receives any packet - * for an EL in this state, it buffers it and tries to process it - * again once the EL reaches HAVE_KEYS. - * - * - In the DISCARDED state, the QRX assumes no keys for the given - * EL will ever arrive again. If it receives any packet for an EL - * in this state, it is simply discarded. - * - * If the user wishes to instantiate a new QRX to replace an old one for - * whatever reason, for example to take over for an already established QUIC - * connection, it is important that all ELs no longer being used (i.e., INITIAL, - * 0-RTT, 1-RTT) are transitioned to the DISCARDED state. Otherwise, the QRX - * will assume that keys for these ELs will arrive in future, and will buffer - * any received packets for those ELs perpetually. This can be done by calling - * ossl_qrx_discard_enc_level for all non-1-RTT ELs immediately after - * instantiating the QRX. - * - * The INITIAL EL is not setup automatically when the QRX is instantiated. This - * allows the caller to instead discard it immediately after instantiation of - * the QRX if it is not needed, for example if the QRX is being instantiated to - * take over handling of an existing connection which has already passed the - * INITIAL phase. This avoids the unnecessary derivation of INITIAL keys where - * they are not needed. In the ordinary case, ossl_quic_provide_initial_secret - * should be called immediately after instantiation. - */ - -/* - * Provides a secret to the QRX, which arises due to an encryption level change. - * enc_level is a QUIC_ENC_LEVEL_* value. To initialise the INITIAL encryption - * level, it is recommended to use ossl_quic_provide_initial_secret instead. - * - * You should seek to call this function for a given EL before packets of that - * EL arrive and are processed by the QRX. However, if packets have already - * arrived for a given EL, the QRX will defer processing of them and perform - * processing of them when this function is eventually called for the EL in - * question. - * - * suite_id is a QRL_SUITE_* value which determines the AEAD function used for - * the QRX. - * - * The secret passed is used directly to derive the "quic key", "quic iv" and - * "quic hp" values. - * - * secret_len is the length of the secret buffer in bytes. The buffer must be - * sized correctly to the chosen suite, else the function fails. - * - * This function can only be called once for a given EL, except for the INITIAL - * EL, which can need rekeying when a connection retry occurs. Subsequent calls - * for non-INITIAL ELs fail, as do calls made after a corresponding call to - * ossl_qrx_discard_enc_level for that EL. The secret for a non-INITIAL EL - * cannot be changed after it is set because QUIC has no facility for - * introducing additional key material after an EL is setup. QUIC key updates - * are managed semi-automatically by the QRX but do require some caller handling - * (see below). - * - * md is for internal use and should be NULL. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_qrx_provide_secret(OSSL_QRX *qrx, - uint32_t enc_level, - uint32_t suite_id, - EVP_MD *md, - const unsigned char *secret, - size_t secret_len); - -/* - * Informs the QRX that it can now discard key material for a given EL. The QRX - * will no longer be able to process incoming packets received at that - * encryption level. This function is idempotent and succeeds if the EL has - * already been discarded. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_qrx_discard_enc_level(OSSL_QRX *qrx, uint32_t enc_level); - -/* - * Packet Reception - * ================ - */ - -/* Information about a received packet. */ -typedef struct ossl_qrx_pkt_st { - /* - * Points to a logical representation of the decoded QUIC packet header. The - * data and len fields point to the decrypted QUIC payload (i.e., to a - * sequence of zero or more (potentially malformed) frames to be decoded). - */ - QUIC_PKT_HDR *hdr; - - /* - * Address the packet was received from. If this is not available for this - * packet, this field is NULL (but this can only occur for manually injected - * packets). - */ - const BIO_ADDR *peer; - - /* - * Local address the packet was sent to. If this is not available for this - * packet, this field is NULL. - */ - const BIO_ADDR *local; - - /* - * This is the length of the datagram which contained this packet. Note that - * the datagram may have contained other packets than this. The intended use - * for this is so that the user can enforce minimum datagram sizes (e.g. for - * datagrams containing INITIAL packets), as required by RFC 9000. - */ - size_t datagram_len; - - /* The PN which was decoded for the packet, if the packet has a PN field. */ - QUIC_PN pn; - - /* - * Time the packet was received, or ossl_time_zero() if the demuxer is not - * using a now() function. - */ - OSSL_TIME time; - - /* The QRX which was used to receive the packet. */ - OSSL_QRX *qrx; - - /* - * The key epoch the packet was received with. Always 0 for non-1-RTT - * packets. - */ - uint64_t key_epoch; -} OSSL_QRX_PKT; - -/* - * Tries to read a new decrypted packet from the QRX. - * - * On success, *pkt points to a OSSL_QRX_PKT structure. The structure should be - * freed when no longer needed by calling ossl_qrx_pkt_release(). The structure - * is refcounted; to gain extra references, call ossl_qrx_pkt_up_ref(). This - * will cause a corresponding number of calls to ossl_qrx_pkt_release() to be - * ignored. - * - * The resources referenced by (*pkt)->hdr, (*pkt)->hdr->data and (*pkt)->peer - * have the same lifetime as *pkt. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_qrx_read_pkt(OSSL_QRX *qrx, OSSL_QRX_PKT **pkt); - -/* - * Decrement the reference count for the given packet and frees it if the - * reference count drops to zero. No-op if pkt is NULL. - */ -void ossl_qrx_pkt_release(OSSL_QRX_PKT *pkt); - -/* Increments the reference count for the given packet. */ -void ossl_qrx_pkt_up_ref(OSSL_QRX_PKT *pkt); - -/* - * Returns 1 if there are any already processed (i.e. decrypted) packets waiting - * to be read from the QRX. - */ -int ossl_qrx_processed_read_pending(OSSL_QRX *qrx); - -/* - * Returns 1 if there are any unprocessed (i.e. not yet decrypted) packets - * waiting to be processed by the QRX. These may or may not result in - * successfully decrypted packets once processed. This indicates whether - * unprocessed data is buffered by the QRX, not whether any data is available in - * a kernel socket buffer. - */ -int ossl_qrx_unprocessed_read_pending(OSSL_QRX *qrx); - -/* - * Returns the number of UDP payload bytes received from the network so far - * since the last time this counter was cleared. If clear is 1, clears the - * counter and returns the old value. - * - * The intended use of this is to allow callers to determine how much credit to - * add to their anti-amplification budgets. This is reported separately instead - * of in the OSSL_QRX_PKT structure so that a caller can apply - * anti-amplification credit as soon as a datagram is received, before it has - * necessarily read all processed packets contained within that datagram from - * the QRX. - */ -uint64_t ossl_qrx_get_bytes_received(OSSL_QRX *qrx, int clear); - -/* - * Sets a callback which is called when a packet is received and being validated - * before being queued in the read queue. This is called after packet body - * decryption and authentication to prevent exposing side channels. pn_space is - * a QUIC_PN_SPACE_* value denoting which PN space the PN belongs to. - * - * If this callback returns 1, processing continues normally. - * If this callback returns 0, the packet is discarded. - * - * Other packets in the same datagram will still be processed where possible. - * - * The callback is optional and can be unset by passing NULL for cb. - * cb_arg is an opaque value passed to cb. - */ -typedef int (ossl_qrx_late_validation_cb)(QUIC_PN pn, int pn_space, - void *arg); - -int ossl_qrx_set_late_validation_cb(OSSL_QRX *qrx, - ossl_qrx_late_validation_cb *cb, - void *cb_arg); - -/* - * Forcibly injects a URXE which has been issued by the DEMUX into the QRX for - * processing. This can be used to pass a received datagram to the QRX if it - * would not be correctly routed to the QRX via standard DCID-based routing; for - * example, when handling an incoming Initial packet which is attempting to - * establish a new connection. - */ -void ossl_qrx_inject_urxe(OSSL_QRX *qrx, QUIC_URXE *e); - -/* - * Decryption of 1-RTT packets must be explicitly enabled by calling this - * function. This is to comply with the requirement that we not process 1-RTT - * packets until the handshake is complete, even if we already have 1-RTT - * secrets. Even if a 1-RTT secret is provisioned for the QRX, incoming 1-RTT - * packets will be handled as though no key is available until this function is - * called. Calling this function will then requeue any such deferred packets for - * processing. - */ -void ossl_qrx_allow_1rtt_processing(OSSL_QRX *qrx); - -/* - * Key Update (RX) - * =============== - * - * Key update on the RX side is a largely but not entirely automatic process. - * - * Key update is initially triggered by receiving a 1-RTT packet with a - * different Key Phase value. This could be caused by an attacker in the network - * flipping random bits, therefore such a key update is tentative until the - * packet payload is successfully decrypted and authenticated by the AEAD with - * the 'next' keys. These 'next' keys then become the 'current' keys and the - * 'current' keys then become the 'previous' keys. The 'previous' keys must be - * kept around temporarily as some packets may still be in flight in the network - * encrypted with the old keys. If the old Key Phase value is X and the new Key - * Phase Value is Y (where obviously X != Y), this creates an ambiguity as any - * new packet received with a KP of X could either be an attempt to initiate yet - * another key update right after the last one, or an old packet encrypted - * before the key update. - * - * RFC 9001 provides some guidance on handling this issue: - * - * Strategy 1: - * Three keys, disambiguation using packet numbers - * - * "A recovered PN that is lower than any PN from the current KP uses the - * previous packet protection keys; a recovered PN that is higher than any - * PN from the current KP requires use of the next packet protection - * keys." - * - * Strategy 2: - * Two keys and a timer - * - * "Alternatively, endpoints can retain only two sets of packet protection - * keys, swapping previous keys for next after enough time has passed to - * allow for reordering in the network. In this case, the KP bit alone can - * be used to select keys." - * - * Strategy 2 is more efficient (we can keep fewer cipher contexts around) and - * should cover all actually possible network conditions. It also allows a delay - * after we make the 'next' keys our 'current' keys before we generate new - * 'next' keys, which allows us to mitigate against malicious peers who try to - * initiate an excessive number of key updates. - * - * We therefore model the following state machine: - * - * - * PROVISIONED - * _______________________________ - * | | - * UNPROVISIONED --|----> NORMAL <----------\ |------> DISCARDED - * | | | | - * | | | | - * | v | | - * | UPDATING | | - * | | | | - * | | | | - * | v | | - * | COOLDOWN | | - * | | | | - * | | | | - * | \---------------| | - * |_______________________________| - * - * - * The RX starts (once a secret has been provisioned) in the NORMAL state. In - * the NORMAL state, the current expected value of the Key Phase bit is - * recorded. When a flipped Key Phase bit is detected, the RX attempts to - * decrypt and authenticate the received packet with the 'next' keys rather than - * the 'current' keys. If (and only if) this authentication is successful, we - * move to the UPDATING state. (An attacker in the network could flip - * the Key Phase bit randomly, so it is essential we do nothing until AEAD - * authentication is complete.) - * - * In the UPDATING state, we know a key update is occurring and record - * the new Key Phase bit value as the newly current value, but we still keep the - * old keys around so that we can still process any packets which were still in - * flight when the key update was initiated. In the UPDATING state, a - * Key Phase bit value different to the current expected value is treated not as - * the initiation of another key update, but a reference to our old keys. - * - * Eventually we will be reasonably sure we are not going to receive any more - * packets with the old keys. At this point, we can transition to the COOLDOWN - * state. This transition occurs automatically after a certain amount of time; - * RFC 9001 recommends it be the PTO interval, which relates to our RTT to the - * peer. The duration also SHOULD NOT exceed three times the PTO to assist with - * maintaining PFS. - * - * In the COOLDOWN phase, the old keys have been securely erased and only one - * set of keys can be used: the current keys. If a packet is received with a Key - * Phase bit value different to the current Key Phase Bit value, this is treated - * as a request for a Key Update, but this request is ignored and the packet is - * treated as malformed. We do this to allow mitigation against malicious peers - * trying to initiate an excessive number of Key Updates. The timeout for the - * transition from UPDATING to COOLDOWN is recommended as adequate for - * this purpose in itself by the RFC, so the normal additional timeout value for - * the transition from COOLDOWN to normal is zero (immediate transition). - * - * A summary of each state: - * - * Epoch Exp KP Uses Keys KS0 KS1 If Non-Expected KP Bit - * ----- ------ --------- ------ ----- ---------------------- - * NORMAL 0 0 Keyset 0 Gen 0 Gen 1 → UPDATING - * UPDATING 1 1 Keyset 1 Gen 0 Gen 1 Use Keyset 0 - * COOLDOWN 1 1 Keyset 1 Erased Gen 1 Ignore Packet (*) - * - * NORMAL 1 1 Keyset 1 Gen 2 Gen 1 → UPDATING - * UPDATING 2 0 Keyset 0 Gen 2 Gen 1 Use Keyset 1 - * COOLDOWN 2 0 Keyset 0 Gen 2 Erased Ignore Packet (*) - * - * (*) Actually implemented by attempting to decrypt the packet with the - * wrong keys (which ultimately has the same outcome), as recommended - * by RFC 9001 to avoid creating timing channels. - * - * Note that the key material for the next key generation ("key epoch") is - * always kept in the NORMAL state (necessary to avoid side-channel attacks). - * This material is derived during the transition from COOLDOWN to NORMAL. - * - * Note that when a peer initiates a Key Update, we MUST also initiate a Key - * Update as per the RFC. The caller is responsible for detecting this condition - * and making the necessary calls to the TX side by detecting changes to the - * return value of ossl_qrx_get_key_epoch(). - * - * The above states (NORMAL, UPDATING, COOLDOWN) can themselves be - * considered substates of the PROVISIONED state. Providing a secret to the QRX - * for an EL transitions from UNPROVISIONED, the initial state, to PROVISIONED - * (NORMAL). Dropping key material for an EL transitions from whatever the - * current substate of the PROVISIONED state is to the DISCARDED state, which is - * the terminal state. - * - * Note that non-1RTT ELs cannot undergo key update, therefore a non-1RTT EL is - * always in the NORMAL substate if it is in the PROVISIONED state. - */ - -/* - * Return the current RX key epoch for the 1-RTT encryption level. This is - * initially zero and is incremented by one for every Key Update successfully - * signalled by the peer. If the 1-RTT EL has not yet been provisioned or has - * been discarded, returns UINT64_MAX. - * - * A necessary implication of this API is that the least significant bit of the - * returned value corresponds to the currently expected Key Phase bit, though - * callers are not anticipated to have any need of this information. - * - * It is not possible for the returned value to overflow, as a QUIC connection - * cannot support more than 2**62 packet numbers, and a connection must be - * terminated if this limit is reached. - * - * The caller should use this function to detect when the key epoch has changed - * and use it to initiate a key update on the TX side. - * - * The value returned by this function increments specifically at the transition - * from the NORMAL to the UPDATING state discussed above. - */ -uint64_t ossl_qrx_get_key_epoch(OSSL_QRX *qrx); - -/* - * Sets an optional callback which will be called when the key epoch changes. - * - * The callback is optional and can be unset by passing NULL for cb. - * cb_arg is an opaque value passed to cb. pn is the PN of the packet. - * Since key update is only supported for 1-RTT packets, the PN is always - * in the Application Data PN space. -*/ -typedef void (ossl_qrx_key_update_cb)(QUIC_PN pn, void *arg); - -int ossl_qrx_set_key_update_cb(OSSL_QRX *qrx, - ossl_qrx_key_update_cb *cb, void *cb_arg); - -/* - * Relates to the 1-RTT encryption level. The caller should call this after the - * UPDATING state is reached, after a timeout to be determined by the caller. - * - * This transitions from the UPDATING state to the COOLDOWN state (if - * still in the UPDATING state). If normal is 1, then transitions from - * the COOLDOWN state to the NORMAL state. Both transitions can be performed at - * once if desired. - * - * If in the normal state, or if in the COOLDOWN state and normal is 0, this is - * a no-op and returns 1. Returns 0 if the 1-RTT EL has not been provisioned or - * has been dropped. - * - * It is essential that the caller call this within a few PTO intervals of a key - * update occurring (as detected by the caller in a call to - * ossl_qrx_key_get_key_epoch()), as otherwise the peer will not be able to - * perform a Key Update ever again. - */ -int ossl_qrx_key_update_timeout(OSSL_QRX *qrx, int normal); - - -/* - * Key Expiration - * ============== - */ - -/* - * Returns the number of seemingly forged packets which have been received by - * the QRX. If this value reaches the value returned by - * ossl_qrx_get_max_epoch_forged_pkt_count() for a given EL, all further - * received encrypted packets for that EL will be discarded without processing. - * - * Note that the forged packet limit is for the connection lifetime, thus it is - * not reset by a key update. It is suggested that the caller terminate the - * connection a reasonable margin before the limit is reached. However, the - * exact limit imposed does vary by EL due to the possibility that different ELs - * use different AEADs. - */ -uint64_t ossl_qrx_get_cur_forged_pkt_count(OSSL_QRX *qrx); - -/* - * Returns the maximum number of forged packets which the record layer will - * permit to be verified using this QRX instance. - */ -uint64_t ossl_qrx_get_max_forged_pkt_count(OSSL_QRX *qrx, - uint32_t enc_level); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_tx.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_tx.h deleted file mode 100644 index f3b798fe..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_tx.h +++ /dev/null @@ -1,383 +0,0 @@ -/* - * 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_QUIC_RECORD_TX_H -# define OSSL_QUIC_RECORD_TX_H - -# include -# include "internal/quic_wire_pkt.h" -# include "internal/quic_types.h" -# include "internal/quic_record_util.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Record Layer - TX - * ====================== - */ -typedef struct ossl_qtx_iovec_st { - const unsigned char *buf; - size_t buf_len; -} OSSL_QTX_IOVEC; - -typedef struct ossl_qtx_st OSSL_QTX; - -typedef int (*ossl_mutate_packet_cb)(const QUIC_PKT_HDR *hdrin, - const OSSL_QTX_IOVEC *iovecin, size_t numin, - QUIC_PKT_HDR **hdrout, - const OSSL_QTX_IOVEC **iovecout, - size_t *numout, - void *arg); - -typedef void (*ossl_finish_mutate_cb)(void *arg); - -typedef struct ossl_qtx_args_st { - OSSL_LIB_CTX *libctx; - const char *propq; - - /* BIO to transmit to. */ - BIO *bio; - - /* Maximum datagram payload length (MDPL) for TX purposes. */ - size_t mdpl; -} OSSL_QTX_ARGS; - -/* Instantiates a new QTX. */ -OSSL_QTX *ossl_qtx_new(const OSSL_QTX_ARGS *args); - -/* Frees the QTX. */ -void ossl_qtx_free(OSSL_QTX *qtx); - -/* Set mutator callbacks for test framework support */ -void ossl_qtx_set_mutator(OSSL_QTX *qtx, ossl_mutate_packet_cb mutatecb, - ossl_finish_mutate_cb finishmutatecb, void *mutatearg); - -/* Setters for the msg_callback and the msg_callback_arg */ -void ossl_qtx_set_msg_callback(OSSL_QTX *qtx, ossl_msg_cb msg_callback, - SSL *msg_callback_ssl); -void ossl_qtx_set_msg_callback_arg(OSSL_QTX *qtx, void *msg_callback_arg); - -/* - * Secret Management - * ----------------- - */ - -/* - * Provides a secret to the QTX, which arises due to an encryption level change. - * enc_level is a QUIC_ENC_LEVEL_* value. - * - * This function can be used to initialise the INITIAL encryption level, but you - * should not do so directly; see the utility function - * ossl_qrl_provide_initial_secret() instead, which can initialise the INITIAL - * encryption level of a QRX and QTX simultaneously without duplicating certain - * key derivation steps. - * - * You must call this function for a given EL before transmitting packets at - * that EL using this QTX, otherwise ossl_qtx_write_pkt will fail. - * - * suite_id is a QRL_SUITE_* value which determines the AEAD function used for - * the QTX. - * - * The secret passed is used directly to derive the "quic key", "quic iv" and - * "quic hp" values. - * - * secret_len is the length of the secret buffer in bytes. The buffer must be - * sized correctly to the chosen suite, else the function fails. - * - * This function can only be called once for a given EL, except for the INITIAL - * EL, as the INITIAL EL can need to be rekeyed if connection retry occurs. - * Subsequent calls for non-INITIAL ELs fail. Calls made after a corresponding - * call to ossl_qtx_discard_enc_level for a given EL also fail, including for - * the INITIAL EL. The secret for a non-INITIAL EL cannot be changed after it is - * set because QUIC has no facility for introducing additional key material - * after an EL is setup. (QUIC key updates generate new keys from existing key - * material and do not introduce new entropy into a connection's key material.) - * - * Returns 1 on success or 0 on failure. - */ -int ossl_qtx_provide_secret(OSSL_QTX *qtx, - uint32_t enc_level, - uint32_t suite_id, - EVP_MD *md, - const unsigned char *secret, - size_t secret_len); - -/* - * Informs the QTX that it can now discard key material for a given EL. The QTX - * will no longer be able to generate packets at that EL. This function is - * idempotent and succeeds if the EL has already been discarded. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_qtx_discard_enc_level(OSSL_QTX *qtx, uint32_t enc_level); - -/* Returns 1 if the given encryption level is provisioned. */ -int ossl_qtx_is_enc_level_provisioned(OSSL_QTX *qtx, uint32_t enc_level); - -/* - * Given the value ciphertext_len representing an encrypted packet payload - * length in bytes, determines how many plaintext bytes it will decrypt to. - * Returns 0 if the specified EL is not provisioned or ciphertext_len is too - * small. The result is written to *plaintext_len. - */ -int ossl_qtx_calculate_plaintext_payload_len(OSSL_QTX *qtx, uint32_t enc_level, - size_t ciphertext_len, - size_t *plaintext_len); - -/* - * Given the value plaintext_len represented a plaintext packet payload length - * in bytes, determines how many ciphertext bytes it will encrypt to. The value - * output does not include packet headers. Returns 0 if the specified EL is not - * provisioned. The result is written to *ciphertext_len. - */ -int ossl_qtx_calculate_ciphertext_payload_len(OSSL_QTX *qtx, uint32_t enc_level, - size_t plaintext_len, - size_t *ciphertext_len); - -uint32_t ossl_qrl_get_suite_cipher_tag_len(uint32_t suite_id); - - -/* - * Packet Transmission - * ------------------- - */ - -typedef struct ossl_qtx_pkt_st { - /* Logical packet header to be serialized. */ - QUIC_PKT_HDR *hdr; - - /* - * iovecs expressing the logical packet payload buffer. Zero-length entries - * are permitted. - */ - const OSSL_QTX_IOVEC *iovec; - size_t num_iovec; - - /* Destination address. Will be passed through to the BIO if non-NULL. */ - const BIO_ADDR *peer; - - /* - * Local address (optional). Specify as non-NULL only if TX BIO - * has local address support enabled. - */ - const BIO_ADDR *local; - - /* - * Logical PN. Used for encryption. This will automatically be encoded to - * hdr->pn, which need not be initialized. - */ - QUIC_PN pn; - - /* Packet flags. Zero or more OSSL_QTX_PKT_FLAG_* values. */ - uint32_t flags; -} OSSL_QTX_PKT; - -/* - * More packets will be written which should be coalesced into a single - * datagram; do not send this packet yet. To use this, set this flag for all - * packets but the final packet in a datagram, then send the final packet - * without this flag set. - * - * This flag is not a guarantee and the QTX may transmit immediately anyway if - * it is not possible to fit any more packets in the current datagram. - * - * If the caller change its mind and needs to cause a packet queued with - * COALESCE after having passed it to this function but without writing another - * packet, it should call ossl_qtx_flush_pkt(). - */ -#define OSSL_QTX_PKT_FLAG_COALESCE (1U << 0) - -/* - * Writes a packet. - * - * *pkt need be valid only for the duration of the call to this function. - * - * pkt->hdr->data and pkt->hdr->len are unused. The payload buffer is specified - * via an array of OSSL_QTX_IOVEC structures. The API is designed to support - * single-copy transmission; data is copied from the iovecs as it is encrypted - * into an internal staging buffer for transmission. - * - * The function may modify and clobber pkt->hdr->data, pkt->hdr->len, - * pkt->hdr->key_phase and pkt->hdr->pn for its own internal use. No other - * fields of pkt or pkt->hdr will be modified. - * - * It is the callers responsibility to determine how long the PN field in the - * encoded packet should be by setting pkt->hdr->pn_len. This function takes - * care of the PN encoding. Set pkt->pn to the desired PN. - * - * Note that 1-RTT packets do not have a DCID Length field, therefore the DCID - * length must be understood contextually. This function assumes the caller - * knows what it is doing and will serialize a DCID of whatever length is given. - * It is the caller's responsibility to ensure it uses a consistent DCID length - * for communication with any given set of remote peers. - * - * The packet is queued regardless of whether it is able to be sent immediately. - * This enables packets to be batched and sent at once on systems which support - * system calls to send multiple datagrams in a single system call (see - * BIO_sendmmsg). To flush queued datagrams to the network, see - * ossl_qtx_flush_net(). - * - * Returns 1 on success or 0 on failure. - */ -int ossl_qtx_write_pkt(OSSL_QTX *qtx, const OSSL_QTX_PKT *pkt); - -/* - * Finish any incomplete datagrams for transmission which were flagged for - * coalescing. If there is no current coalescing datagram, this is a no-op. - */ -void ossl_qtx_finish_dgram(OSSL_QTX *qtx); - -/* - * (Attempt to) flush any datagrams which are queued for transmission. Note that - * this does not cancel coalescing; call ossl_qtx_finish_dgram() first if that - * is desired. The queue is drained into the OS's sockets as much as possible. - * To determine if there is still data to be sent after calling this function, - * use ossl_qtx_get_queue_len_bytes(). - * - * Returns one of the following values: - * - * QTX_FLUSH_NET_RES_OK - * Either no packets are currently queued for transmission, - * or at least one packet was successfully submitted. - * - * QTX_FLUSH_NET_RES_TRANSIENT_FAIL - * The underlying network write BIO indicated a transient error - * (e.g. buffers full). - * - * QTX_FLUSH_NET_RES_PERMANENT_FAIL - * Internal error (e.g. assertion or allocation error) - * or the underlying network write BIO indicated a non-transient - * error. - */ -#define QTX_FLUSH_NET_RES_OK 1 -#define QTX_FLUSH_NET_RES_TRANSIENT_FAIL (-1) -#define QTX_FLUSH_NET_RES_PERMANENT_FAIL (-2) - -int ossl_qtx_flush_net(OSSL_QTX *qtx); - -/* - * Diagnostic function. If there is any datagram pending transmission, pops it - * and writes the details of the datagram as they would have been passed to - * *msg. Returns 1, or 0 if there are no datagrams pending. For test use only. - */ -int ossl_qtx_pop_net(OSSL_QTX *qtx, BIO_MSG *msg); - -/* Returns number of datagrams which are fully-formed but not yet sent. */ -size_t ossl_qtx_get_queue_len_datagrams(OSSL_QTX *qtx); - -/* - * Returns number of payload bytes across all datagrams which are fully-formed - * but not yet sent. Does not count any incomplete coalescing datagram. - */ -size_t ossl_qtx_get_queue_len_bytes(OSSL_QTX *qtx); - -/* - * Returns number of bytes in the current coalescing datagram, or 0 if there is - * no current coalescing datagram. Returns 0 after a call to - * ossl_qtx_finish_dgram(). - */ -size_t ossl_qtx_get_cur_dgram_len_bytes(OSSL_QTX *qtx); - -/* - * Returns number of queued coalesced packets which have not been put into a - * datagram yet. If this is non-zero, ossl_qtx_flush_pkt() needs to be called. - */ -size_t ossl_qtx_get_unflushed_pkt_count(OSSL_QTX *qtx); - -/* - * Change the BIO being used by the QTX. May be NULL if actual transmission is - * not currently required. Does not up-ref the BIO; the caller is responsible - * for ensuring the lifetime of the BIO exceeds the lifetime of the QTX. - */ -void ossl_qtx_set_bio(OSSL_QTX *qtx, BIO *bio); - -/* Changes the MDPL. */ -int ossl_qtx_set_mdpl(OSSL_QTX *qtx, size_t mdpl); - -/* Retrieves the current MDPL. */ -size_t ossl_qtx_get_mdpl(OSSL_QTX *qtx); - - -/* - * Key Update - * ---------- - * - * For additional discussion of key update considerations, see QRX header file. - */ - -/* - * Triggers a key update. The key update will be started by inverting the Key - * Phase bit of the next packet transmitted; no key update occurs until the next - * packet is transmitted. Thus, this function should generally be called - * immediately before queueing the next packet. - * - * There are substantial requirements imposed by RFC 9001 on under what - * circumstances a key update can be initiated. The caller is responsible for - * meeting most of these requirements. For example, this function cannot be - * called too soon after a previous key update has occurred. Key updates also - * cannot be initiated until the 1-RTT encryption level is reached. - * - * As a sanity check, this function will fail and return 0 if the non-1RTT - * encryption levels have not yet been dropped. - * - * The caller may decide itself to initiate a key update, but it also MUST - * initiate a key update where it detects that the peer has initiated a key - * update. The caller is responsible for initiating a TX key update by calling - * this function in this circumstance; thus, the caller is responsible for - * coupling the RX and TX QUIC record layers in this way. - */ -int ossl_qtx_trigger_key_update(OSSL_QTX *qtx); - - -/* - * Key Expiration - * -------------- - */ - -/* - * Returns the number of packets which have been encrypted for transmission with - * the current set of TX keys (the current "TX key epoch"). Reset to zero after - * a key update and incremented for each packet queued. If enc_level is not - * valid or relates to an EL which is not currently available, returns - * UINT64_MAX. - */ -uint64_t ossl_qtx_get_cur_epoch_pkt_count(OSSL_QTX *qtx, uint32_t enc_level); - -/* - * Returns the maximum number of packets which the record layer will permit to - * be encrypted using the current set of TX keys. If this limit is reached (that - * is, if the counter returned by ossl_qrx_tx_get_cur_epoch_pkt_count() reaches - * this value), as a safety measure, the QTX will not permit any further packets - * to be queued. All calls to ossl_qrx_write_pkt that try to send packets of a - * kind which need to be encrypted will fail. It is not possible to recover from - * this condition and the QTX must then be destroyed; therefore, callers should - * ensure they always trigger a key update well in advance of reaching this - * limit. - * - * The value returned by this function is based on the ciphersuite configured - * for the given encryption level. If keys have not been provisioned for the - * specified enc_level or the enc_level argument is invalid, this function - * returns UINT64_MAX, which is not a valid value. Note that it is not possible - * to perform a key update at any encryption level other than 1-RTT, therefore - * if this limit is reached at earlier encryption levels (which should not be - * possible) the connection must be terminated. Since this condition precludes - * the transmission of further packets, the only possible signalling of such an - * error condition to a peer is a Stateless Reset packet. - */ -uint64_t ossl_qtx_get_max_epoch_pkt_count(OSSL_QTX *qtx, uint32_t enc_level); - -/* - * Get the 1-RTT EL key epoch number for the QTX. This is intended for - * diagnostic purposes. Returns 0 if 1-RTT EL is not provisioned yet. - */ -uint64_t ossl_qtx_get_key_epoch(OSSL_QTX *qtx); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_util.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_util.h deleted file mode 100644 index 97e630d9..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_util.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 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_QUIC_RECORD_UTIL_H -# define OSSL_QUIC_RECORD_UTIL_H - -# include -# include "internal/quic_types.h" - -# ifndef OPENSSL_NO_QUIC - -struct ossl_qrx_st; -struct ossl_qtx_st; - -/* - * QUIC Key Derivation Utilities - * ============================= - */ - -/* HKDF-Extract(salt, IKM) (RFC 5869) */ -int ossl_quic_hkdf_extract(OSSL_LIB_CTX *libctx, - const char *propq, - const EVP_MD *md, - const unsigned char *salt, size_t salt_len, - const unsigned char *ikm, size_t ikm_len, - unsigned char *out, size_t out_len); - -/* - * A QUIC client sends its first INITIAL packet with a random DCID, which - * is used to compute the secrets used for INITIAL packet encryption in both - * directions (both client-to-server and server-to-client). - * - * This function performs the necessary DCID-based key derivation, and then - * provides the derived key material for the INITIAL encryption level to a QRX - * instance, a QTX instance, or both. - * - * This function derives the necessary key material and then: - * - if qrx is non-NULL, provides the appropriate secret to it; - * - if qtx is non-NULL, provides the appropriate secret to it. - * - * If both qrx and qtx are NULL, this is a no-op. This function is equivalent to - * making the appropriate calls to ossl_qrx_provide_secret() and - * ossl_qtx_provide_secret(). - * - * It is possible to use a QRX or QTX without ever calling this, for example if - * there is no desire to handle INITIAL packets (e.g. if a QRX/QTX is - * instantiated to succeed a previous QRX/QTX and handle a connection which is - * already established). However in this case you should make sure you call - * ossl_qrx_discard_enc_level(); see the header for that function for more - * details. Calling ossl_qtx_discard_enc_level() is not essential but could - * protect against programming errors. - * - * Returns 1 on success or 0 on error. - */ -int ossl_quic_provide_initial_secret(OSSL_LIB_CTX *libctx, - const char *propq, - const QUIC_CONN_ID *dst_conn_id, - int is_server, - struct ossl_qrx_st *qrx, - struct ossl_qtx_st *qtx); - -/* - * QUIC Record Layer Ciphersuite Info - * ================================== - */ - -/* Available QUIC Record Layer (QRL) ciphersuites. */ -# define QRL_SUITE_AES128GCM 1 /* SHA256 */ -# define QRL_SUITE_AES256GCM 2 /* SHA384 */ -# define QRL_SUITE_CHACHA20POLY1305 3 /* SHA256 */ - -/* Returns cipher name in bytes or NULL if suite ID is invalid. */ -const char *ossl_qrl_get_suite_cipher_name(uint32_t suite_id); - -/* Returns hash function name in bytes or NULL if suite ID is invalid. */ -const char *ossl_qrl_get_suite_md_name(uint32_t suite_id); - -/* Returns secret length in bytes or 0 if suite ID is invalid. */ -uint32_t ossl_qrl_get_suite_secret_len(uint32_t suite_id); - -/* Returns key length in bytes or 0 if suite ID is invalid. */ -uint32_t ossl_qrl_get_suite_cipher_key_len(uint32_t suite_id); - -/* Returns IV length in bytes or 0 if suite ID is invalid. */ -uint32_t ossl_qrl_get_suite_cipher_iv_len(uint32_t suite_id); - -/* Returns AEAD auth tag length in bytes or 0 if suite ID is invalid. */ -uint32_t ossl_qrl_get_suite_cipher_tag_len(uint32_t suite_id); - -/* Returns a QUIC_HDR_PROT_CIPHER_* value or 0 if suite ID is invalid. */ -uint32_t ossl_qrl_get_suite_hdr_prot_cipher_id(uint32_t suite_id); - -/* Returns header protection key length in bytes or 0 if suite ID is invalid. */ -uint32_t ossl_qrl_get_suite_hdr_prot_key_len(uint32_t suite_id); - -/* - * Returns maximum number of packets which may be safely encrypted with a suite - * or 0 if suite ID is invalid. - */ -uint64_t ossl_qrl_get_suite_max_pkt(uint32_t suite_id); - -/* - * Returns maximum number of RX'd packets which may safely fail AEAD decryption - * for a given suite or 0 if suite ID is invalid. - */ -uint64_t ossl_qrl_get_suite_max_forged_pkt(uint32_t suite_id); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_rx_depack.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_rx_depack.h deleted file mode 100644 index c90964a7..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_rx_depack.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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_QUIC_RX_DEPACK_H -# define OSSL_QUIC_RX_DEPACK_H - -# include "internal/quic_channel.h" - -# ifndef OPENSSL_NO_QUIC - -int ossl_quic_handle_frames(QUIC_CHANNEL *qc, OSSL_QRX_PKT *qpacket); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_sf_list.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_sf_list.h deleted file mode 100644 index 8ed1dcb1..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_sf_list.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * 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_QUIC_SF_LIST_H -# define OSSL_QUIC_SF_LIST_H - -#include "internal/common.h" -#include "internal/uint_set.h" -#include "internal/quic_record_rx.h" - -/* - * Stream frame list - * ================= - * - * This data structure supports similar operations as uint64 set but - * it has slightly different invariants and also carries data associated with - * the ranges in the list. - * - * Operations: - * Insert frame (optimized insertion at the beginning and at the end). - * Iterated peek into the frame(s) from the beginning. - * Dropping frames from the beginning up to an offset (exclusive). - * - * Invariant: The frames in the list are sorted by the start and end bounds. - * Invariant: There are no fully overlapping frames or frames that would - * be fully encompassed by another frame in the list. - * Invariant: No frame has start > end. - * Invariant: The range start is inclusive the end is exclusive to be - * able to mark an empty frame. - * Invariant: The offset never points further than into the first frame. - */ -# ifndef OPENSSL_NO_QUIC - -typedef struct stream_frame_st STREAM_FRAME; - -typedef struct sframe_list_st { - STREAM_FRAME *head, *tail; - /* Is the tail frame final. */ - unsigned int fin; - /* Number of stream frames in the list. */ - size_t num_frames; - /* Offset of data not yet dropped */ - uint64_t offset; - /* Is head locked ? */ - int head_locked; - /* Cleanse data on release? */ - int cleanse; -} SFRAME_LIST; - -/* - * Initializes the stream frame list fl. - */ -void ossl_sframe_list_init(SFRAME_LIST *fl); - -/* - * Destroys the stream frame list fl releasing any data - * still present inside it. - */ -void ossl_sframe_list_destroy(SFRAME_LIST *fl); - -/* - * Insert a stream frame data into the list. - * The data covers an offset range (range.start is inclusive, - * range.end is exclusive). - * fin should be set if this is the final frame of the stream. - * Returns an error if a frame cannot be inserted - due to - * STREAM_FRAME allocation error, or in case of erroneous - * fin flag (this is an ossl_assert() check so a caller must - * check it on its own too). - */ -int ossl_sframe_list_insert(SFRAME_LIST *fl, UINT_RANGE *range, - OSSL_QRX_PKT *pkt, - const unsigned char *data, int fin); - -/* - * Iterator to peek at the contiguous frames at the beginning - * of the frame list fl. - * The *data covers an offset range (range.start is inclusive, - * range.end is exclusive). - * *fin is set if this is the final frame of the stream. - * Opaque iterator *iter can be used to peek at the subsequent - * frame if there is any without any gap before it. - * Returns 1 on success. - * Returns 0 if there is no further contiguous frame. In that - * case *fin is set, if the end of the stream is reached. - */ -int ossl_sframe_list_peek(const SFRAME_LIST *fl, void **iter, - UINT_RANGE *range, const unsigned char **data, - int *fin); - -/* - * Drop all frames up to the offset limit. - * Also unlocks the head frame if locked. - * Returns 1 on success. - * Returns 0 when trying to drop frames at offsets that were not - * received yet. (ossl_assert() is used to check, so this is an invalid call.) - */ -int ossl_sframe_list_drop_frames(SFRAME_LIST *fl, uint64_t limit); - -/* - * Locks and returns the head frame of fl if it is readable - read offset is - * at the beginning or middle of the frame. - * range is set to encompass the not yet read part of the head frame, - * data pointer is set to appropriate offset within the frame if the read - * offset points in the middle of the frame, - * fin is set to 1 if the head frame is also the tail frame. - * Returns 1 on success, 0 if there is no readable data or the head - * frame is already locked. - */ -int ossl_sframe_list_lock_head(SFRAME_LIST *fl, UINT_RANGE *range, - const unsigned char **data, - int *fin); - -/* - * Just returns whether the head frame is locked by previous - * ossl_sframe_list_lock_head() call. - */ -int ossl_sframe_list_is_head_locked(SFRAME_LIST *fl); - -/* - * Callback function type to write stream frame data to some - * side storage before the packet containing the frame data - * is released. - * It should return 1 on success or 0 if there is not enough - * space available in the side storage. - */ -typedef int (sframe_list_write_at_cb)(uint64_t logical_offset, - const unsigned char *buf, - size_t buf_len, - void *cb_arg); - -/* - * Move the frame data in all the stream frames in the list fl - * from the packets to the side storage using the write_at_cb - * callback. - * Returns 1 if all the calls to the callback return 1. - * If the callback returns 0, the function stops processing further - * frames and returns 0. - */ -int ossl_sframe_list_move_data(SFRAME_LIST *fl, - sframe_list_write_at_cb *write_at_cb, - void *cb_arg); -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_ssl.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_ssl.h deleted file mode 100644 index 52d4527c..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_ssl.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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_QUIC_SSL_H -# define OSSL_QUIC_SSL_H - -# include -# include -# include "internal/quic_record_rx.h" /* OSSL_QRX */ -# include "internal/quic_ackm.h" /* OSSL_ACKM */ -# include "internal/quic_channel.h" /* QUIC_CHANNEL */ - -# ifndef OPENSSL_NO_QUIC - -__owur SSL *ossl_quic_new(SSL_CTX *ctx); -__owur int ossl_quic_init(SSL *s); -void ossl_quic_deinit(SSL *s); -void ossl_quic_free(SSL *s); -int ossl_quic_reset(SSL *s); -int ossl_quic_clear(SSL *s); -__owur int ossl_quic_accept(SSL *s); -__owur int ossl_quic_connect(SSL *s); -__owur int ossl_quic_read(SSL *s, void *buf, size_t len, size_t *readbytes); -__owur int ossl_quic_peek(SSL *s, void *buf, size_t len, size_t *readbytes); -__owur int ossl_quic_write(SSL *s, const void *buf, size_t len, size_t *written); -__owur long ossl_quic_ctrl(SSL *s, int cmd, long larg, void *parg); -__owur long ossl_quic_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); -__owur long ossl_quic_callback_ctrl(SSL *s, int cmd, void (*fp) (void)); -__owur long ossl_quic_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void)); -__owur size_t ossl_quic_pending(const SSL *s); -__owur int ossl_quic_key_update(SSL *s, int update_type); -__owur int ossl_quic_get_key_update_type(const SSL *s); -__owur const SSL_CIPHER *ossl_quic_get_cipher_by_char(const unsigned char *p); -__owur int ossl_quic_num_ciphers(void); -__owur const SSL_CIPHER *ossl_quic_get_cipher(unsigned int u); -int ossl_quic_renegotiate_check(SSL *ssl, int initok); - -typedef struct quic_conn_st QUIC_CONNECTION; -typedef struct quic_xso_st QUIC_XSO; - -int ossl_quic_do_handshake(SSL *s); -void ossl_quic_set_connect_state(SSL *s); -void ossl_quic_set_accept_state(SSL *s); - -__owur int ossl_quic_has_pending(const SSL *s); -__owur int ossl_quic_handle_events(SSL *s); -__owur int ossl_quic_get_event_timeout(SSL *s, struct timeval *tv, - int *is_infinite); -OSSL_TIME ossl_quic_get_event_deadline(SSL *s); -__owur int ossl_quic_get_rpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *d); -__owur int ossl_quic_get_wpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *d); -__owur int ossl_quic_get_net_read_desired(SSL *s); -__owur int ossl_quic_get_net_write_desired(SSL *s); -__owur int ossl_quic_get_error(const SSL *s, int i); -__owur int ossl_quic_want(const SSL *s); -__owur int ossl_quic_conn_get_blocking_mode(const SSL *s); -__owur int ossl_quic_conn_set_blocking_mode(SSL *s, int blocking); -__owur int ossl_quic_conn_shutdown(SSL *s, uint64_t flags, - const SSL_SHUTDOWN_EX_ARGS *args, - size_t args_len); -__owur int ossl_quic_conn_stream_conclude(SSL *s); -void ossl_quic_conn_set0_net_rbio(SSL *s, BIO *net_wbio); -void ossl_quic_conn_set0_net_wbio(SSL *s, BIO *net_wbio); -BIO *ossl_quic_conn_get_net_rbio(const SSL *s); -BIO *ossl_quic_conn_get_net_wbio(const SSL *s); -__owur int ossl_quic_conn_set_initial_peer_addr(SSL *s, - const BIO_ADDR *peer_addr); -__owur SSL *ossl_quic_conn_stream_new(SSL *s, uint64_t flags); -__owur SSL *ossl_quic_get0_connection(SSL *s); -__owur int ossl_quic_get_stream_type(SSL *s); -__owur uint64_t ossl_quic_get_stream_id(SSL *s); -__owur int ossl_quic_is_stream_local(SSL *s); -__owur int ossl_quic_set_default_stream_mode(SSL *s, uint32_t mode); -__owur SSL *ossl_quic_detach_stream(SSL *s); -__owur int ossl_quic_attach_stream(SSL *conn, SSL *stream); -__owur int ossl_quic_set_incoming_stream_policy(SSL *s, int policy, - uint64_t aec); -__owur SSL *ossl_quic_accept_stream(SSL *s, uint64_t flags); -__owur size_t ossl_quic_get_accept_stream_queue_len(SSL *s); - -__owur int ossl_quic_stream_reset(SSL *ssl, - const SSL_STREAM_RESET_ARGS *args, - size_t args_len); - -__owur int ossl_quic_get_stream_read_state(SSL *ssl); -__owur int ossl_quic_get_stream_write_state(SSL *ssl); -__owur int ossl_quic_get_stream_read_error_code(SSL *ssl, - uint64_t *app_error_code); -__owur int ossl_quic_get_stream_write_error_code(SSL *ssl, - uint64_t *app_error_code); -__owur int ossl_quic_get_conn_close_info(SSL *ssl, - SSL_CONN_CLOSE_INFO *info, - size_t info_len); - -uint64_t ossl_quic_set_options(SSL *s, uint64_t opts); -uint64_t ossl_quic_clear_options(SSL *s, uint64_t opts); -uint64_t ossl_quic_get_options(const SSL *s); - -/* Modifies write buffer size for a stream. */ -__owur int ossl_quic_set_write_buffer_size(SSL *s, size_t size); - -/* - * Used to override ossl_time_now() for debug purposes. While this may be - * overridden at any time, expect strange results if you change it after - * connecting. - */ -int ossl_quic_conn_set_override_now_cb(SSL *s, - OSSL_TIME (*now_cb)(void *arg), - void *now_cb_arg); - -/* - * Condvar waiting in the assist thread doesn't support time faking as it relies - * on the OS's notion of time, thus this is used in test code to force a - * spurious wakeup instead. - */ -void ossl_quic_conn_force_assist_thread_wake(SSL *s); - -/* For use by tests only. */ -QUIC_CHANNEL *ossl_quic_conn_get_channel(SSL *s); - -int ossl_quic_has_pending(const SSL *s); -int ossl_quic_get_shutdown(const SSL *s); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_statm.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_statm.h deleted file mode 100644 index 5b33551b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_statm.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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_QUIC_STATS_H -# define OSSL_QUIC_STATS_H - -# include -# include "internal/time.h" - -# ifndef OPENSSL_NO_QUIC - -typedef struct ossl_statm_st { - OSSL_TIME smoothed_rtt, latest_rtt, min_rtt, rtt_variance; - char have_first_sample; -} OSSL_STATM; - -typedef struct ossl_rtt_info_st { - /* As defined in RFC 9002. */ - OSSL_TIME smoothed_rtt, latest_rtt, rtt_variance, min_rtt; -} OSSL_RTT_INFO; - -int ossl_statm_init(OSSL_STATM *statm); - -void ossl_statm_destroy(OSSL_STATM *statm); - -void ossl_statm_get_rtt_info(OSSL_STATM *statm, OSSL_RTT_INFO *rtt_info); - -void ossl_statm_update_rtt(OSSL_STATM *statm, - OSSL_TIME ack_delay, - OSSL_TIME override_latest_rtt); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_stream.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_stream.h deleted file mode 100644 index 0da8febd..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_stream.h +++ /dev/null @@ -1,429 +0,0 @@ -/* -* 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_INTERNAL_QUIC_STREAM_H -# define OSSL_INTERNAL_QUIC_STREAM_H -# pragma once - -#include "internal/e_os.h" -#include "internal/time.h" -#include "internal/quic_types.h" -#include "internal/quic_wire.h" -#include "internal/quic_record_tx.h" -#include "internal/quic_record_rx.h" -#include "internal/quic_fc.h" -#include "internal/quic_statm.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Send Stream - * ================ - * - * The QUIC Send Stream Manager (QUIC_SSTREAM) is responsible for: - * - * - accepting octet strings of stream data; - * - * - generating corresponding STREAM frames; - * - * - receiving notifications of lost frames, in order to generate new STREAM - * frames for the lost data; - * - * - receiving notifications of acknowledged frames, in order to internally - * reuse memory used to store acknowledged stream data; - * - * - informing the caller of how much more stream data it can accept into - * its internal buffers, so as to ensure that the amount of unacknowledged - * data which can be written to a stream is not infinite and to allow the - * caller to manifest backpressure conditions to the user. - * - * The QUIC_SSTREAM is instantiated once for every stream with a send component - * (i.e., for a unidirectional send stream or for the send component of a - * bidirectional stream). - * - * Note: The terms 'TX' and 'RX' are used when referring to frames, packets and - * datagrams. The terms 'send' and 'receive' are used when referring to the - * stream abstraction. Applications send; we transmit. - */ -typedef struct quic_sstream_st QUIC_SSTREAM; - -/* - * Instantiates a new QUIC_SSTREAM. init_buf_size specifies the initial size of - * the stream data buffer in bytes, which must be positive. - */ -QUIC_SSTREAM *ossl_quic_sstream_new(size_t init_buf_size); - -/* - * Frees a QUIC_SSTREAM and associated stream data storage. - * - * Any iovecs returned by ossl_quic_sstream_get_stream_frame cease to be valid after - * calling this function. - */ -void ossl_quic_sstream_free(QUIC_SSTREAM *qss); - -/* - * (For TX packetizer use.) Retrieves information about application stream data - * which is ready for transmission. - * - * *hdr is filled with the logical offset, maximum possible length of stream - * data which can be transmitted, and a pointer to the stream data to be - * transmitted. is_fin is set to 1 if hdr->offset + hdr->len is the final size - * of the stream and 0 otherwise. hdr->stream_id is not set; the caller must set - * it. - * - * The caller is not obligated to send all of the data. If the caller does not - * send all of the data, the caller must reduce hdr->len before serializing the - * header structure and must ensure that hdr->is_fin is cleared. - * - * hdr->has_explicit_len is always set. It is the caller's responsibility to - * clear this if it wants to use the optimization of omitting the length field, - * as only the caller can know when this optimization can be performed. - * - * *num_iov must be set to the size of the iov array at call time. When this - * function returns successfully, it is updated to the number of iov entries - * which have been written. - * - * The stream data may be split across up to two IOVs due to internal ring - * buffer organisation. The sum of the lengths of the IOVs and the value written - * to hdr->len will always match. If the caller decides to send less than - * hdr->len of stream data, it must adjust the IOVs accordingly. This may be - * done by updating hdr->len and then calling the utility function - * ossl_quic_sstream_adjust_iov(). - * - * After committing one or more bytes returned by ossl_quic_sstream_get_stream_frame to a - * packet, call ossl_quic_sstream_mark_transmitted with the inclusive range of logical - * byte numbers of the transmitted bytes (i.e., hdr->offset, hdr->offset + - * hdr->len - 1). If you do not call ossl_quic_sstream_mark_transmitted, the next call to - * ossl_quic_sstream_get_stream_frame will return the same data (or potentially the same - * and more, if more data has been appended by the application). - * - * It is the caller's responsibility to clamp the length of data which this - * function indicates is available according to other concerns, such as - * stream-level flow control, connection-level flow control, or the applicable - * maximum datagram payload length (MDPL) for a packet under construction. - * - * The skip argument can usually be given as zero. If it is non-zero, this - * function outputs a range which would be output if it were called again after - * calling ossl_quic_sstream_mark_transmitted() with the returned range, repeated 'skip' - * times, and so on. This may be useful for callers which wish to enumerate - * available stream frames and batch their calls to ossl_quic_sstream_mark_transmitted at - * a later time. - * - * On success, this function will never write *num_iov with a value other than - * 0, 1 or 2. A *num_iov value of 0 can only occurs when hdr->is_fin is set (for - * example, when a stream is closed after all existing data has been sent, and - * without sending any more data); otherwise the function returns 0 as there is - * nothing useful to report. - * - * Returns 1 on success and 0 if there is no stream data available for - * transmission, or on other error (such as if the caller provides fewer - * than two IOVs.) - */ -int ossl_quic_sstream_get_stream_frame(QUIC_SSTREAM *qss, - size_t skip, - OSSL_QUIC_FRAME_STREAM *hdr, - OSSL_QTX_IOVEC *iov, - size_t *num_iov); - -/* - * Returns 1 if there is data pending transmission. Equivalent to calling - * ossl_quic_sstream_get_stream_frame and seeing if it succeeds. - */ -int ossl_quic_sstream_has_pending(QUIC_SSTREAM *qss); - -/* - * Returns the current size of the stream; i.e., the number of bytes which have - * been appended to the stream so far. - */ -uint64_t ossl_quic_sstream_get_cur_size(QUIC_SSTREAM *qss); - -/* - * (For TX packetizer use.) Marks a logical range of the send stream as having - * been transmitted. - * - * 0 denotes the first byte ever sent on the stream. The start and end values - * are both inclusive, therefore all calls to this function always mark at least - * one byte as being transmitted; if no bytes have been transmitted, do not call - * this function. - * - * If the STREAM frame sent had the FIN bit set, you must also call - * ossl_quic_sstream_mark_transmitted_fin() after calling this function. - * - * If you sent a zero-length STREAM frame with the FIN bit set, you need only - * call ossl_quic_sstream_mark_transmitted_fin() and must not call this function. - * - * Returns 1 on success and 0 on error (e.g. if end < start). - */ -int ossl_quic_sstream_mark_transmitted(QUIC_SSTREAM *qss, - uint64_t start, - uint64_t end); - -/* - * (For TX packetizer use.) Marks a STREAM frame with the FIN bit set as having - * been transmitted. final_size is the final size of the stream (i.e., the value - * offset + len of the transmitted STREAM frame). - * - * This function fails returning 0 if ossl_quic_sstream_fin() has not been called or if - * final_size is not correct. The final_size argument is not strictly needed by - * the QUIC_SSTREAM but is required as a sanity check. - */ -int ossl_quic_sstream_mark_transmitted_fin(QUIC_SSTREAM *qss, - uint64_t final_size); - -/* - * (RX/ACKM use.) Marks a logical range of the send stream as having been lost. - * The send stream will return the lost data for retransmission on a future call - * to ossl_quic_sstream_get_stream_frame. The start and end values denote logical byte - * numbers and are inclusive. - * - * If the lost frame had the FIN bit set, you must also call - * ossl_quic_sstream_mark_lost_fin() after calling this function. - * - * Returns 1 on success and 0 on error (e.g. if end < start). - */ -int ossl_quic_sstream_mark_lost(QUIC_SSTREAM *qss, - uint64_t start, - uint64_t end); - -/* - * (RX/ACKM use.) Informs the QUIC_SSTREAM that a STREAM frame with the FIN bit - * set was lost. - * - * Returns 1 on success and 0 on error. - */ -int ossl_quic_sstream_mark_lost_fin(QUIC_SSTREAM *qss); - -/* - * (RX/ACKM use.) Marks a logical range of the send stream as having been - * acknowledged, meaning that the storage for the data in that range of the - * stream can be now recycled and neither that logical range of the stream nor - * any subset of it can be retransmitted again. The start and end values are - * inclusive. - * - * If the acknowledged frame had the FIN bit set, you must also call - * ossl_quic_sstream_mark_acked_fin() after calling this function. - * - * Returns 1 on success and 0 on error (e.g. if end < start). - */ -int ossl_quic_sstream_mark_acked(QUIC_SSTREAM *qss, - uint64_t start, - uint64_t end); - -/* - * (RX/ACKM use.) Informs the QUIC_SSTREAM that a STREAM frame with the FIN bit - * set was acknowledged. - * - * Returns 1 on success and 0 on error. - */ -int ossl_quic_sstream_mark_acked_fin(QUIC_SSTREAM *qss); - -/* - * (Front end use.) Appends user data to the stream. The data is copied into the - * stream. The amount of data consumed from buf is written to *consumed on - * success (short writes are possible). The amount of data which can be written - * can be determined in advance by calling the ossl_quic_sstream_get_buffer_avail() - * function; data is copied into an internal ring buffer of finite size. - * - * If the buffer is full, this should be materialised as a backpressure - * condition by the front end. This is not considered a failure condition; - * *consumed is written as 0 and the function returns 1. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_sstream_append(QUIC_SSTREAM *qss, - const unsigned char *buf, - size_t buf_len, - size_t *consumed); - -/* - * Marks a stream as finished. ossl_quic_sstream_append() may not be called anymore - * after calling this. - */ -void ossl_quic_sstream_fin(QUIC_SSTREAM *qss); - -/* - * If the stream has had ossl_quic_sstream_fin() called, returns 1 and writes - * the final size to *final_size. Otherwise, returns 0. - */ -int ossl_quic_sstream_get_final_size(QUIC_SSTREAM *qss, uint64_t *final_size); - -/* - * Returns 1 iff all bytes (and any FIN, if any) which have been appended to the - * QUIC_SSTREAM so far, and any FIN (if any), have been both sent and acked. - */ -int ossl_quic_sstream_is_totally_acked(QUIC_SSTREAM *qss); - -/* - * Resizes the internal ring buffer. All stream data is preserved safely. - * - * This can be used to expand or contract the ring buffer, but not to contract - * the ring buffer below the amount of stream data currently stored in it. - * Returns 1 on success and 0 on failure. - * - * IMPORTANT: Any buffers referenced by iovecs output by - * ossl_quic_sstream_get_stream_frame() cease to be valid after calling this function. - */ -int ossl_quic_sstream_set_buffer_size(QUIC_SSTREAM *qss, size_t num_bytes); - -/* - * Gets the internal ring buffer size in bytes. - */ -size_t ossl_quic_sstream_get_buffer_size(QUIC_SSTREAM *qss); - -/* - * Gets the number of bytes used in the internal ring buffer. - */ -size_t ossl_quic_sstream_get_buffer_used(QUIC_SSTREAM *qss); - -/* - * Gets the number of bytes free in the internal ring buffer. - */ -size_t ossl_quic_sstream_get_buffer_avail(QUIC_SSTREAM *qss); - -/* - * Utility function to ensure the length of an array of iovecs matches the - * length given as len. Trailing iovecs have their length values reduced or set - * to 0 as necessary. - */ -void ossl_quic_sstream_adjust_iov(size_t len, - OSSL_QTX_IOVEC *iov, - size_t num_iov); - -/* - * Sets flag to cleanse the buffered data when it is acked. - */ -void ossl_quic_sstream_set_cleanse(QUIC_SSTREAM *qss, int cleanse); - -/* - * QUIC Receive Stream Manager - * =========================== - * - * The QUIC Receive Stream Manager (QUIC_RSTREAM) is responsible for - * storing the received stream data frames until the application - * is able to read the data. - * - * The QUIC_RSTREAM is instantiated once for every stream that can receive data. - * (i.e., for a unidirectional receiving stream or for the receiving component - * of a bidirectional stream). - */ -typedef struct quic_rstream_st QUIC_RSTREAM; - -/* - * Create a new instance of QUIC_RSTREAM with pointers to the flow - * controller and statistics module. They can be NULL for unit testing. - * If they are non-NULL, the `rxfc` is called when receive stream data - * is read by application. `statm` is queried for current rtt. - * `rbuf_size` is the initial size of the ring buffer to be used - * when ossl_quic_rstream_move_to_rbuf() is called. - */ -QUIC_RSTREAM *ossl_quic_rstream_new(QUIC_RXFC *rxfc, - OSSL_STATM *statm, size_t rbuf_size); - -/* - * Frees a QUIC_RSTREAM and any associated storage. - */ -void ossl_quic_rstream_free(QUIC_RSTREAM *qrs); - -/* - * Adds received stream frame data to `qrs`. The `pkt_wrap` refcount is - * incremented if the `data` is queued directly without copying. - * It can be NULL for unit-testing purposes, i.e. if `data` is static or - * never released before calling ossl_quic_rstream_free(). - * The `offset` is the absolute offset of the data in the stream. - * `data_len` can be 0 - can be useful for indicating `fin` for empty stream. - * Or to indicate `fin` without any further data added to the stream. - */ - -int ossl_quic_rstream_queue_data(QUIC_RSTREAM *qrs, OSSL_QRX_PKT *pkt, - uint64_t offset, - const unsigned char *data, uint64_t data_len, - int fin); - -/* - * Copies the data from the stream storage to buffer `buf` of size `size`. - * `readbytes` is set to the number of bytes actually copied. - * `fin` is set to 1 if all the data from the stream were read so the - * stream is finished. It is set to 0 otherwise. - */ -int ossl_quic_rstream_read(QUIC_RSTREAM *qrs, unsigned char *buf, size_t size, - size_t *readbytes, int *fin); - -/* - * Peeks at the data in the stream storage. It copies them to buffer `buf` - * of size `size` and sets `readbytes` to the number of bytes actually copied. - * `fin` is set to 1 if the copied data reach end of the stream. - * It is set to 0 otherwise. - */ -int ossl_quic_rstream_peek(QUIC_RSTREAM *qrs, unsigned char *buf, size_t size, - size_t *readbytes, int *fin); - -/* - * Returns the size of the data available for reading. `fin` is set to 1 if - * after reading all the available data the stream will be finished, - * set to 0 otherwise. - */ -int ossl_quic_rstream_available(QUIC_RSTREAM *qrs, size_t *avail, int *fin); - -/* - * Sets *record to the beginning of the first readable stream data chunk and - * *reclen to the size of the chunk. *fin is set to 1 if the end of the - * chunk is the last of the stream data chunks. - * If there is no record available *record is set to NULL and *rec_len to 0; - * ossl_quic_rstream_release_record() should not be called in that case. - * Returns 1 on success (including calls if no record is available, or - * after end of the stream - in that case *fin will be set to 1 and - * *rec_len to 0), 0 on error. - * It is an error to call ossl_quic_rstream_get_record() multiple times - * without calling ossl_quic_rstream_release_record() in between. - */ -int ossl_quic_rstream_get_record(QUIC_RSTREAM *qrs, - const unsigned char **record, size_t *rec_len, - int *fin); - -/* - * Releases (possibly partially) the record returned by - * previous ossl_quic_rstream_get_record() call. - * read_len between previously returned *rec_len and SIZE_MAX indicates - * release of the whole record. Otherwise only part of the record is - * released. The remaining part of the record is unlocked, another - * call to ossl_quic_rstream_get_record() is needed to obtain further - * stream data. - * Returns 1 on success, 0 on error. - * It is an error to call ossl_quic_rstream_release_record() multiple - * times without calling ossl_quic_rstream_get_record() in between. - */ -int ossl_quic_rstream_release_record(QUIC_RSTREAM *qrs, size_t read_len); - -/* - * Moves received frame data from decrypted packets to ring buffer. - * This should be called when there are too many decrypted packets allocated. - * Returns 1 on success, 0 when it was not possible to release all - * referenced packets due to an insufficient size of the ring buffer. - * Exception is the packet from the record returned previously by - * ossl_quic_rstream_get_record() - that one will be always skipped. - */ -int ossl_quic_rstream_move_to_rbuf(QUIC_RSTREAM *qrs); - -/* - * Resizes the internal ring buffer to a new `rbuf_size` size. - * Returns 1 on success, 0 on error. - * Possible error conditions are an allocation failure, trying to resize - * the ring buffer when ossl_quic_rstream_get_record() was called and - * not yet released, or trying to resize the ring buffer to a smaller size - * than currently occupied. - */ -int ossl_quic_rstream_resize_rbuf(QUIC_RSTREAM *qrs, size_t rbuf_size); - -/* - * Sets flag to cleanse the buffered data when user reads it. - */ -void ossl_quic_rstream_set_cleanse(QUIC_RSTREAM *qrs, int cleanse); -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_stream_map.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_stream_map.h deleted file mode 100644 index ae749061..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_stream_map.h +++ /dev/null @@ -1,878 +0,0 @@ -/* -* 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_INTERNAL_QUIC_STREAM_MAP_H -# define OSSL_INTERNAL_QUIC_STREAM_MAP_H -# pragma once - -# include "internal/e_os.h" -# include "internal/time.h" -# include "internal/common.h" -# include "internal/quic_types.h" -# include "internal/quic_stream.h" -# include "internal/quic_fc.h" -# include - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Stream - * =========== - * - * Logical QUIC stream composing all relevant send and receive components. - */ -typedef struct quic_stream_st QUIC_STREAM; - -typedef struct quic_stream_list_node_st QUIC_STREAM_LIST_NODE; - -struct quic_stream_list_node_st { - QUIC_STREAM_LIST_NODE *prev, *next; -}; - -/* - * QUIC Send Stream States - * ----------------------- - * - * These correspond to the states defined in RFC 9000 s. 3.1, with the - * exception of the NONE state which represents the absence of a send stream - * part. - * - * Invariants in each state are noted in comments below. In particular, once all - * data has been acknowledged received, or we have reset the stream, we don't - * need to keep the QUIC_SSTREAM and data buffers around. Of course, we also - * don't have a QUIC_SSTREAM on a receive-only stream. - */ -#define QUIC_SSTREAM_STATE_NONE 0 /* --- sstream == NULL */ -#define QUIC_SSTREAM_STATE_READY 1 /* \ */ -#define QUIC_SSTREAM_STATE_SEND 2 /* |-- sstream != NULL */ -#define QUIC_SSTREAM_STATE_DATA_SENT 3 /* / */ -#define QUIC_SSTREAM_STATE_DATA_RECVD 4 /* \ */ -#define QUIC_SSTREAM_STATE_RESET_SENT 5 /* |-- sstream == NULL */ -#define QUIC_SSTREAM_STATE_RESET_RECVD 6 /* / */ - -/* - * QUIC Receive Stream States - * -------------------------- - * - * These correspond to the states defined in RFC 9000 s. 3.2, with the exception - * of the NONE state which represents the absence of a receive stream part. - * - * Invariants in each state are noted in comments below. In particular, once all - * data has been read by the application, we don't need to keep the QUIC_RSTREAM - * and data buffers around. If the receive part is instead reset before it is - * finished, we also don't need to keep the QUIC_RSTREAM around. Finally, we - * don't need a QUIC_RSTREAM on a send-only stream. - */ -#define QUIC_RSTREAM_STATE_NONE 0 /* --- rstream == NULL */ -#define QUIC_RSTREAM_STATE_RECV 1 /* \ */ -#define QUIC_RSTREAM_STATE_SIZE_KNOWN 2 /* |-- rstream != NULL */ -#define QUIC_RSTREAM_STATE_DATA_RECVD 3 /* / */ -#define QUIC_RSTREAM_STATE_DATA_READ 4 /* \ */ -#define QUIC_RSTREAM_STATE_RESET_RECVD 5 /* |-- rstream == NULL */ -#define QUIC_RSTREAM_STATE_RESET_READ 6 /* / */ - -struct quic_stream_st { - QUIC_STREAM_LIST_NODE active_node; /* for use by QUIC_STREAM_MAP */ - QUIC_STREAM_LIST_NODE accept_node; /* accept queue of remotely-created streams */ - QUIC_STREAM_LIST_NODE ready_for_gc_node; /* queue of streams now ready for GC */ - - /* Temporary link used by TXP. */ - QUIC_STREAM *txp_next; - - /* - * QUIC Stream ID. Do not assume that this encodes a type as this is a - * version-specific property and may change between QUIC versions; instead, - * use the type field. - */ - uint64_t id; - - /* - * Application Error Code (AEC) used for STOP_SENDING frame. - * This is only valid if stop_sending is 1. - */ - uint64_t stop_sending_aec; - - /* - * Application Error Code (AEC) used for RESET_STREAM frame. - * This is only valid if reset_stream is 1. - */ - uint64_t reset_stream_aec; - - /* - * Application Error Code (AEC) for incoming STOP_SENDING frame. - * This is only valid if peer_stop_sending is 1. - */ - uint64_t peer_stop_sending_aec; - - /* - * Application Error Code (AEC) for incoming RESET_STREAM frame. - * This is only valid if peer_reset_stream is 1. - */ - uint64_t peer_reset_stream_aec; - - /* Temporary value used by TXP. */ - uint64_t txp_txfc_new_credit_consumed; - - /* - * The final size of the send stream. Although this information can be - * discerned from a QUIC_SSTREAM, it is stored separately as we need to keep - * track of this even if we have thrown away the QUIC_SSTREAM. Use - * ossl_quic_stream_send_get_final_size to determine if this contain a - * valid value or if there is no final size yet for a sending part. - * - * For the receive part, the final size is tracked by the stream-level RXFC; - * use ossl_quic_stream_recv_get_final_size or - * ossl_quic_rxfc_get_final_size. - */ - uint64_t send_final_size; - - /* - * Send stream part and receive stream part buffer management objects. - * - * DO NOT test these pointers (sstream, rstream) for NULL. Determine the - * state of the send or receive stream part first using the appropriate - * function; then the invariant of that state guarantees that sstream or - * rstream either is or is not NULL respectively, therefore there is no - * valid use case for testing these pointers for NULL. In particular, a - * stream with a send part can still have sstream as NULL, and a stream with - * a receive part can still have rstream as NULL. QUIC_SSTREAM and - * QUIC_RSTREAM are stream buffer resource management objects which exist - * only when they need to for buffer management purposes. The existence or - * non-existence of a QUIC_SSTREAM or QUIC_RSTREAM object does not - * correspond with whether a stream's respective send or receive part - * logically exists or not. - */ - QUIC_SSTREAM *sstream; /* NULL if RX-only */ - QUIC_RSTREAM *rstream; /* NULL if TX only */ - - /* Stream-level flow control managers. */ - QUIC_TXFC txfc; /* NULL if RX-only */ - QUIC_RXFC rxfc; /* NULL if TX-only */ - - unsigned int type : 8; /* QUIC_STREAM_INITIATOR_*, QUIC_STREAM_DIR_* */ - - unsigned int send_state : 8; /* QUIC_SSTREAM_STATE_* */ - unsigned int recv_state : 8; /* QUIC_RSTREAM_STATE_* */ - - /* 1 iff this QUIC_STREAM is on the active queue (invariant). */ - unsigned int active : 1; - - /* - * This is a copy of the QUIC connection as_server value, indicating - * whether we are locally operating as a server or not. Having this - * significantly simplifies stream type determination relative to our - * perspective. It never changes after a QUIC_STREAM is created and is the - * same for all QUIC_STREAMS under a QUIC_STREAM_MAP. - */ - unsigned int as_server : 1; - - /* - * Has STOP_SENDING been requested (by us)? Note that this is not the same - * as want_stop_sending below, as a STOP_SENDING frame may already have been - * sent and fully acknowledged. - */ - unsigned int stop_sending : 1; - - /* - * Has RESET_STREAM been requested (by us)? Works identically to - * STOP_SENDING for transmission purposes. - */ - /* Has our peer sent a STOP_SENDING frame? */ - unsigned int peer_stop_sending : 1; - - /* Temporary flags used by TXP. */ - unsigned int txp_sent_fc : 1; - unsigned int txp_sent_stop_sending : 1; - unsigned int txp_sent_reset_stream : 1; - unsigned int txp_drained : 1; - unsigned int txp_blocked : 1; - - /* Frame regeneration flags. */ - unsigned int want_max_stream_data : 1; /* used for regen only */ - unsigned int want_stop_sending : 1; /* used for gen or regen */ - unsigned int want_reset_stream : 1; /* used for gen or regen */ - - /* Flags set when frames *we* sent were acknowledged. */ - unsigned int acked_stop_sending : 1; - - /* - * The stream's XSO has been deleted. Pending GC. - * - * Here is how stream deletion works: - * - * - A QUIC_STREAM cannot be deleted until it is neither in the accept - * queue nor has an associated XSO. This condition occurs when and only - * when deleted is true. - * - * - Once this is the case (i.e., no user-facing API object exposing the - * stream), we can delete the stream once we determine that all of our - * protocol obligations requiring us to keep the QUIC_STREAM around have - * been met. - * - * The following frames relate to the streams layer for a specific - * stream: - * - * STREAM - * - * RX Obligations: - * Ignore for a deleted stream. - * - * (This is different from our obligation for a - * locally-initiated stream ID we have not created yet, - * which we must treat as a protocol error. This can be - * distinguished via a simple monotonic counter.) - * - * TX Obligations: - * None, once we've decided to (someday) delete the stream. - * - * STOP_SENDING - * - * We cannot delete the stream until we have finished informing - * the peer that we are not going to be listening to it - * anymore. - * - * RX Obligations: - * When we delete a stream we must have already had a FIN - * or RESET_STREAM we transmitted acknowledged by the peer. - * Thus we can ignore STOP_SENDING frames for deleted - * streams (if they occur, they are probably just - * retransmissions). - * - * TX Obligations: - * _Acknowledged_ receipt of a STOP_SENDING frame by the - * peer (unless the peer's send part has already FIN'd). - * - * RESET_STREAM - * - * We cannot delete the stream until we have finished informing - * the peer that we are not going to be transmitting on it - * anymore. - * - * RX Obligations: - * This indicates the peer is not going to send any more - * data on the stream. We don't need to care about this - * since once a stream is marked for deletion we don't care - * about any data it does send. We can ignore this for - * deleted streams. The important criterion is that the - * peer has been successfully delivered our STOP_SENDING - * frame. - * - * TX Obligations: - * _Acknowledged_ receipt of a RESET_STREAM frame or FIN by - * the peer. - * - * MAX_STREAM_DATA - * - * RX Obligations: - * Ignore. Since we are not going to be sending any more - * data on a stream once it has been marked for deletion, - * we don't need to care about flow control information. - * - * TX Obligations: - * None. - * - * In other words, our protocol obligation is simply: - * - * - either: - * - the peer has acknowledged receipt of a STOP_SENDING frame sent - * by us; -or- - * - we have received a FIN and all preceding segments from the peer - * - * [NOTE: The actual criterion required here is simply 'we have - * received a FIN from the peer'. However, due to reordering and - * retransmissions we might subsequently receive non-FIN segments - * out of order. The FIN means we know the peer will stop - * transmitting on the stream at *some* point, but by sending - * STOP_SENDING we can avoid these needless retransmissions we - * will just ignore anyway. In actuality we could just handle all - * cases by sending a STOP_SENDING. The strategy we choose is to - * only avoid sending a STOP_SENDING and rely on a received FIN - * when we have received all preceding data, as this makes it - * reasonably certain no benefit would be gained by sending - * STOP_SENDING.] - * - * TODO(QUIC FUTURE): Implement the latter case (currently we - just always do STOP_SENDING). - * - * and; - * - * - we have drained our send stream (for a finished send stream) - * and got acknowledgement all parts of it including the FIN, or - * sent a RESET_STREAM frame and got acknowledgement of that frame. - * - * Once these conditions are met, we can GC the QUIC_STREAM. - * - */ - unsigned int deleted : 1; - /* Set to 1 once the above conditions are actually met. */ - unsigned int ready_for_gc : 1; - /* Set to 1 if this is currently counted in the shutdown flush stream count. */ - unsigned int shutdown_flush : 1; -}; - -#define QUIC_STREAM_INITIATOR_CLIENT 0 -#define QUIC_STREAM_INITIATOR_SERVER 1 -#define QUIC_STREAM_INITIATOR_MASK 1 - -#define QUIC_STREAM_DIR_BIDI 0 -#define QUIC_STREAM_DIR_UNI 2 -#define QUIC_STREAM_DIR_MASK 2 - -void ossl_quic_stream_check(const QUIC_STREAM *s); - -/* - * Returns 1 if the QUIC_STREAM was initiated by the endpoint with the server - * role. - */ -static ossl_inline ossl_unused int ossl_quic_stream_is_server_init(const QUIC_STREAM *s) -{ - return (s->type & QUIC_STREAM_INITIATOR_MASK) == QUIC_STREAM_INITIATOR_SERVER; -} - -/* - * Returns 1 if the QUIC_STREAM is bidirectional and 0 if it is unidirectional. - */ -static ossl_inline ossl_unused int ossl_quic_stream_is_bidi(const QUIC_STREAM *s) -{ - return (s->type & QUIC_STREAM_DIR_MASK) == QUIC_STREAM_DIR_BIDI; -} - -/* Returns 1 if the QUIC_STREAM was locally initiated. */ -static ossl_inline ossl_unused int ossl_quic_stream_is_local_init(const QUIC_STREAM *s) -{ - return ossl_quic_stream_is_server_init(s) == s->as_server; -} - -/* - * Returns 1 if the QUIC_STREAM has a sending part, based on its stream type. - * - * Do NOT use (s->sstream != NULL) to test this; use this function. Note that - * even if this function returns 1, s->sstream might be NULL if the QUIC_SSTREAM - * has been deemed no longer needed, for example due to a RESET_STREAM. - */ -static ossl_inline ossl_unused int ossl_quic_stream_has_send(const QUIC_STREAM *s) -{ - return s->send_state != QUIC_SSTREAM_STATE_NONE; -} - -/* - * Returns 1 if the QUIC_STREAM has a receiving part, based on its stream type. - * - * Do NOT use (s->rstream != NULL) to test this; use this function. Note that - * even if this function returns 1, s->rstream might be NULL if the QUIC_RSTREAM - * has been deemed no longer needed, for example if the receive stream is - * completely finished with. - */ -static ossl_inline ossl_unused int ossl_quic_stream_has_recv(const QUIC_STREAM *s) -{ - return s->recv_state != QUIC_RSTREAM_STATE_NONE; -} - -/* - * Returns 1 if the QUIC_STREAM has a QUIC_SSTREAM send buffer associated with - * it. If this returns 1, s->sstream is guaranteed to be non-NULL. The converse - * is not necessarily true; erasure of a send stream buffer which is no longer - * required is an optimisation which the QSM may, but is not obliged, to - * perform. - * - * This call should be used where it is desired to do something with the send - * stream buffer but there is no more specific send state restriction which is - * applicable. - * - * Note: This does NOT indicate whether it is suitable to allow an application - * to append to the buffer. DATA_SENT indicates all data (including FIN) has - * been *sent*; the absence of DATA_SENT does not mean a FIN has not been queued - * (meaning no more application data can be appended). This is enforced by - * QUIC_SSTREAM. - */ -static ossl_inline ossl_unused int ossl_quic_stream_has_send_buffer(const QUIC_STREAM *s) -{ - switch (s->send_state) { - case QUIC_SSTREAM_STATE_READY: - case QUIC_SSTREAM_STATE_SEND: - case QUIC_SSTREAM_STATE_DATA_SENT: - return 1; - default: - return 0; - } -} - -/* - * Returns 1 if the QUIC_STREAM has a sending part which is in one of the reset - * states. - */ -static ossl_inline ossl_unused int ossl_quic_stream_send_is_reset(const QUIC_STREAM *s) -{ - return s->send_state == QUIC_SSTREAM_STATE_RESET_SENT - || s->send_state == QUIC_SSTREAM_STATE_RESET_RECVD; -} - -/* - * Returns 1 if the QUIC_STREAM has a QUIC_RSTREAM receive buffer associated - * with it. If this returns 1, s->rstream is guaranteed to be non-NULL. The - * converse is not necessarily true; erasure of a receive stream buffer which is - * no longer required is an optimisation which the QSM may, but is not obliged, - * to perform. - * - * This call should be used where it is desired to do something with the receive - * stream buffer but there is no more specific receive state restriction which is - * applicable. - */ -static ossl_inline ossl_unused int ossl_quic_stream_has_recv_buffer(const QUIC_STREAM *s) -{ - switch (s->recv_state) { - case QUIC_RSTREAM_STATE_RECV: - case QUIC_RSTREAM_STATE_SIZE_KNOWN: - case QUIC_RSTREAM_STATE_DATA_RECVD: - return 1; - default: - return 0; - } -} - -/* - * Returns 1 if the QUIC_STREAM has a receiving part which is in one of the - * reset states. - */ -static ossl_inline ossl_unused int ossl_quic_stream_recv_is_reset(const QUIC_STREAM *s) -{ - return s->recv_state == QUIC_RSTREAM_STATE_RESET_RECVD - || s->recv_state == QUIC_RSTREAM_STATE_RESET_READ; -} - -/* - * Returns 1 if the stream has a send part and that part has a final size. - * - * If final_size is non-NULL, *final_size is the final size (on success) or an - * undefined value otherwise. - */ -static ossl_inline ossl_unused int ossl_quic_stream_send_get_final_size(const QUIC_STREAM *s, - uint64_t *final_size) -{ - switch (s->send_state) { - default: - case QUIC_SSTREAM_STATE_NONE: - return 0; - case QUIC_SSTREAM_STATE_SEND: - /* - * SEND may or may not have had a FIN - even if we have a FIN we do not - * move to DATA_SENT until we have actually sent all the data. So - * ask the QUIC_SSTREAM. - */ - return ossl_quic_sstream_get_final_size(s->sstream, final_size); - case QUIC_SSTREAM_STATE_DATA_SENT: - case QUIC_SSTREAM_STATE_DATA_RECVD: - case QUIC_SSTREAM_STATE_RESET_SENT: - case QUIC_SSTREAM_STATE_RESET_RECVD: - if (final_size != NULL) - *final_size = s->send_final_size; - return 1; - } -} - -/* - * Returns 1 if the stream has a receive part and that part has a final size. - * - * If final_size is non-NULL, *final_size is the final size (on success) or an - * undefined value otherwise. - */ -static ossl_inline ossl_unused int ossl_quic_stream_recv_get_final_size(const QUIC_STREAM *s, - uint64_t *final_size) -{ - switch (s->recv_state) { - default: - case QUIC_RSTREAM_STATE_NONE: - case QUIC_RSTREAM_STATE_RECV: - return 0; - - case QUIC_RSTREAM_STATE_SIZE_KNOWN: - case QUIC_RSTREAM_STATE_DATA_RECVD: - case QUIC_RSTREAM_STATE_DATA_READ: - case QUIC_RSTREAM_STATE_RESET_RECVD: - case QUIC_RSTREAM_STATE_RESET_READ: - if (!ossl_assert(ossl_quic_rxfc_get_final_size(&s->rxfc, final_size))) - return 0; - - return 1; - } -} - -/* - * QUIC Stream Map - * =============== - * - * The QUIC stream map: - * - * - maps stream IDs to QUIC_STREAM objects; - * - tracks which streams are 'active' (currently have data for transmission); - * - allows iteration over the active streams only. - * - */ -typedef struct quic_stream_map_st { - LHASH_OF(QUIC_STREAM) *map; - QUIC_STREAM_LIST_NODE active_list; - QUIC_STREAM_LIST_NODE accept_list; - QUIC_STREAM_LIST_NODE ready_for_gc_list; - size_t rr_stepping, rr_counter; - size_t num_accept, num_shutdown_flush; - QUIC_STREAM *rr_cur; - uint64_t (*get_stream_limit_cb)(int uni, void *arg); - void *get_stream_limit_cb_arg; - QUIC_RXFC *max_streams_bidi_rxfc; - QUIC_RXFC *max_streams_uni_rxfc; - int is_server; -} QUIC_STREAM_MAP; - -/* - * get_stream_limit is a callback which is called to retrieve the current stream - * limit for streams created by us. This mechanism is not used for - * peer-initiated streams. If a stream's stream ID is x, a stream is allowed if - * (x >> 2) < returned limit value; i.e., the returned value is exclusive. - * - * If uni is 1, get the limit for locally-initiated unidirectional streams, else - * get the limit for locally-initiated bidirectional streams. - * - * If the callback is NULL, stream limiting is not applied. - * Stream limiting is used to determine if frames can currently be produced for - * a stream. - */ -int ossl_quic_stream_map_init(QUIC_STREAM_MAP *qsm, - uint64_t (*get_stream_limit_cb)(int uni, void *arg), - void *get_stream_limit_cb_arg, - QUIC_RXFC *max_streams_bidi_rxfc, - QUIC_RXFC *max_streams_uni_rxfc, - int is_server); - -/* - * Any streams still in the map will be released as though - * ossl_quic_stream_map_release was called on them. - */ -void ossl_quic_stream_map_cleanup(QUIC_STREAM_MAP *qsm); - -/* - * Allocate a new stream. type is a combination of one QUIC_STREAM_INITIATOR_* - * value and one QUIC_STREAM_DIR_* value. Note that clients can e.g. allocate - * server-initiated streams as they will need to allocate a QUIC_STREAM - * structure to track any stream created by the server, etc. - * - * stream_id must be a valid value. Returns NULL if a stream already exists - * with the given ID. - */ -QUIC_STREAM *ossl_quic_stream_map_alloc(QUIC_STREAM_MAP *qsm, - uint64_t stream_id, - int type); - -/* - * Releases a stream object. Note that this must only be done once the teardown - * process is entirely complete and the object will never be referenced again. - */ -void ossl_quic_stream_map_release(QUIC_STREAM_MAP *qsm, QUIC_STREAM *stream); - -/* - * Calls visit_cb() for each stream in the map. visit_cb_arg is an opaque - * argument which is passed through. - */ -void ossl_quic_stream_map_visit(QUIC_STREAM_MAP *qsm, - void (*visit_cb)(QUIC_STREAM *stream, void *arg), - void *visit_cb_arg); - -/* - * Retrieves a stream by stream ID. Returns NULL if it does not exist. - */ -QUIC_STREAM *ossl_quic_stream_map_get_by_id(QUIC_STREAM_MAP *qsm, - uint64_t stream_id); - -/* - * Marks the given stream as active or inactive based on its state. Idempotent. - * - * When a stream is marked active, it becomes available in the iteration list, - * and when a stream is marked inactive, it no longer appears in the iteration - * list. - * - * Calling this function invalidates any iterator currently pointing at the - * given stream object, but iterators not currently pointing at the given stream - * object are not invalidated. - */ -void ossl_quic_stream_map_update_state(QUIC_STREAM_MAP *qsm, QUIC_STREAM *s); - -/* - * Sets the RR stepping value, n. The RR rotation will be advanced every n - * packets. The default value is 1. - */ -void ossl_quic_stream_map_set_rr_stepping(QUIC_STREAM_MAP *qsm, size_t stepping); - -/* - * Returns 1 if the stream ordinal given is allowed by the current stream count - * flow control limit, assuming a locally initiated stream of a type described - * by is_uni. - * - * Note that stream_ordinal is a stream ordinal, not a stream ID. - */ -int ossl_quic_stream_map_is_local_allowed_by_stream_limit(QUIC_STREAM_MAP *qsm, - uint64_t stream_ordinal, - int is_uni); - -/* - * Stream Send Part - * ================ - */ - -/* - * Ensures that the sending part has transitioned out of the READY state (i.e., - * to SEND, or a subsequent state). This function is named as it is because, - * while on paper the distinction between READY and SEND is whether we have - * started transmitting application data, in practice the meaningful distinction - * between the two states is whether we have allocated a stream ID to the stream - * or not. QUIC permits us to defer stream ID allocation until first STREAM (or - * STREAM_DATA_BLOCKED) frame transmission for locally-initiated streams. - * - * Our implementation does not currently do this and we allocate stream IDs up - * front, however we may revisit this in the future. Calling this represents a - * demand for a stream ID by the caller and ensures one has been allocated to - * the stream, and causes us to transition to SEND if we are still in the READY - * state. - * - * Returns 0 if there is no send part (caller error) and 1 otherwise. - */ -int ossl_quic_stream_map_ensure_send_part_id(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - -/* - * Transitions from SEND to the DATA_SENT state. Note that this is NOT the same - * as the point in time at which the final size of the stream becomes known - * (i.e., the time at which ossl_quic_sstream_fin()) is called as it occurs when - * we have SENT all data on a given stream send part, not merely buffered it. - * Note that this transition is NOT reversed in the event of some of that data - * being lost. - * - * Returns 1 if the state transition was successfully taken. Returns 0 if there - * is no send part (caller error) or if the state transition cannot be taken - * because the send part is not in the SEND state. - */ -int ossl_quic_stream_map_notify_all_data_sent(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - -/* - * Transitions from the DATA_SENT to DATA_RECVD state; should be called - * when all transmitted stream data is ACKed by the peer. - * - * Returns 1 if the state transition was successfully taken. Returns 0 if there - * is no send part (caller error) or the state transition cannot be taken - * because the send part is not in the DATA_SENT state. Because - * ossl_quic_stream_map_notify_all_data_sent() should always be called prior to - * this function, the send state must already be in DATA_SENT in order for this - * function to succeed. - */ -int ossl_quic_stream_map_notify_totally_acked(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - -/* - * Resets the sending part of a stream. This is a transition from the READY, - * SEND or DATA_SENT send stream states to the RESET_SENT state. - * - * This function returns 1 if the transition is taken (i.e., if the send stream - * part was in one of the states above), or if it is already in the RESET_SENT - * state (idempotent operation), or if it has reached the RESET_RECVD state. - * - * It returns 0 if in the DATA_RECVD state, as a send stream cannot be reset - * in this state. It also returns 0 if there is no send part (caller error). - */ -int ossl_quic_stream_map_reset_stream_send_part(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs, - uint64_t aec); - -/* - * Transitions from the RESET_SENT to the RESET_RECVD state. This should be - * called when a sent RESET_STREAM frame has been acknowledged by the peer. - * - * This function returns 1 if the transition is taken (i.e., if the send stream - * part was in one of the states above) or if it is already in the RESET_RECVD - * state (idempotent operation). - * - * It returns 0 if not in the RESET_SENT or RESET_RECVD states, as this function - * should only be called after we have already sent a RESET_STREAM frame and - * entered the RESET_SENT state. It also returns 0 if there is no send part - * (caller error). - */ -int ossl_quic_stream_map_notify_reset_stream_acked(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - - -/* - * Stream Receive Part - * =================== - */ - -/* - * Transitions from the RECV receive stream state to the SIZE_KNOWN state. This - * should be called once a STREAM frame is received for the stream with the FIN - * bit set. final_size should be the final size of the stream in bytes. - * - * Returns 1 if the transition was taken. - */ -int ossl_quic_stream_map_notify_size_known_recv_part(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs, - uint64_t final_size); - -/* - * Transitions from the SIZE_KNOWN receive stream state to the DATA_RECVD state. - * This should be called once all data for a receive stream is received. - * - * Returns 1 if the transition was taken. - */ -int ossl_quic_stream_map_notify_totally_received(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - -/* - * Transitions from the DATA_RECVD receive stream state to the DATA_READ state. - * This should be called once all data for a receive stream is read by the - * application. - * - * Returns 1 if the transition was taken. - */ -int ossl_quic_stream_map_notify_totally_read(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - -/* - * Transitions from the RECV, SIZE_KNOWN or DATA_RECVD receive stream state to - * the RESET_RECVD state. This should be called on RESET_STREAM. - * - * Returns 1 if the transition was taken. - */ -int ossl_quic_stream_map_notify_reset_recv_part(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs, - uint64_t app_error_code, - uint64_t final_size); - -/* - * Transitions from the RESET_RECVD receive stream state to the RESET_READ - * receive stream state. This should be called when the application is notified - * of a stream reset. - */ -int ossl_quic_stream_map_notify_app_read_reset_recv_part(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - -/* - * Marks the receiving part of a stream for STOP_SENDING. This is orthogonal to - * receive stream state as it does not affect it directly. - * - * Returns 1 if the receiving part of a stream was not already marked for - * STOP_SENDING. - * Returns 0 otherwise, which need not be considered an error. - */ -int ossl_quic_stream_map_stop_sending_recv_part(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs, - uint64_t aec); - -/* - * Marks the stream as wanting a STOP_SENDING frame transmitted. It is not valid - * to call this if ossl_quic_stream_map_stop_sending_recv_part() has not been - * called. For TXP use. - */ -int ossl_quic_stream_map_schedule_stop_sending(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - - -/* - * Accept Queue Management - * ======================= - */ - -/* - * Adds a stream to the accept queue. - */ -void ossl_quic_stream_map_push_accept_queue(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *s); - -/* - * Returns the next item to be popped from the accept queue, or NULL if it is - * empty. - */ -QUIC_STREAM *ossl_quic_stream_map_peek_accept_queue(QUIC_STREAM_MAP *qsm); - -/* - * Removes a stream from the accept queue. rtt is the estimated connection RTT. - * The stream is retired for the purposes of MAX_STREAMS RXFC. - * - * Precondition: s is in the accept queue. - */ -void ossl_quic_stream_map_remove_from_accept_queue(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *s, - OSSL_TIME rtt); - -/* Returns the length of the accept queue. */ -size_t ossl_quic_stream_map_get_accept_queue_len(QUIC_STREAM_MAP *qsm); - -/* - * Shutdown Flush and GC - * ===================== - */ - -/* - * Delete streams ready for GC. Pointers to those QUIC_STREAM objects become - * invalid. - */ -void ossl_quic_stream_map_gc(QUIC_STREAM_MAP *qsm); - -/* - * Begins shutdown stream flush triage. Analyses all streams, including deleted - * but not yet GC'd streams, to determine if we should wait for that stream to - * be fully flushed before shutdown. After calling this, call - * ossl_quic_stream_map_is_shutdown_flush_finished() to determine if all - * shutdown flush eligible streams have been flushed. - */ -void ossl_quic_stream_map_begin_shutdown_flush(QUIC_STREAM_MAP *qsm); - -/* - * Returns 1 if all shutdown flush eligible streams have finished flushing, - * or if ossl_quic_stream_map_begin_shutdown_flush() has not been called. - */ -int ossl_quic_stream_map_is_shutdown_flush_finished(QUIC_STREAM_MAP *qsm); - -/* - * QUIC Stream Iterator - * ==================== - * - * Allows the current set of active streams to be walked using a RR-based - * algorithm. Each time ossl_quic_stream_iter_init is called, the RR algorithm - * is stepped. The RR algorithm rotates the iteration order such that the next - * active stream is returned first after n calls to ossl_quic_stream_iter_init, - * where n is the stepping value configured via - * ossl_quic_stream_map_set_rr_stepping. - * - * Suppose there are three active streams and the configured stepping is n: - * - * Iteration 0n: [Stream 1] [Stream 2] [Stream 3] - * Iteration 1n: [Stream 2] [Stream 3] [Stream 1] - * Iteration 2n: [Stream 3] [Stream 1] [Stream 2] - * - */ -typedef struct quic_stream_iter_st { - QUIC_STREAM_MAP *qsm; - QUIC_STREAM *first_stream, *stream; -} QUIC_STREAM_ITER; - -/* - * Initialise an iterator, advancing the RR algorithm as necessary (if - * advance_rr is 1). After calling this, it->stream will be the first stream in - * the iteration sequence, or NULL if there are no active streams. - */ -void ossl_quic_stream_iter_init(QUIC_STREAM_ITER *it, QUIC_STREAM_MAP *qsm, - int advance_rr); - -/* - * Advances to next stream in iteration sequence. You do not need to call this - * immediately after calling ossl_quic_stream_iter_init(). If the end of the - * list is reached, it->stream will be NULL after calling this. - */ -void ossl_quic_stream_iter_next(QUIC_STREAM_ITER *it); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_thread_assist.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_thread_assist.h deleted file mode 100644 index 592c2ffa..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_thread_assist.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 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_QUIC_THREAD_ASSIST_H -# define OSSL_QUIC_THREAD_ASSIST_H - -# include -# include "internal/thread.h" -# include "internal/time.h" - -# if defined(OPENSSL_NO_QUIC) || defined(OPENSSL_NO_THREAD_POOL) -# define OPENSSL_NO_QUIC_THREAD_ASSIST -# endif - -# ifndef OPENSSL_NO_QUIC_THREAD_ASSIST - -/* - * QUIC Thread Assisted Functionality - * ================================== - * - * Where OS threading support is available, QUIC can optionally support a thread - * assisted mode of operation. The purpose of this mode of operation is to - * ensure that assorted timeout events which QUIC expects to be handled in a - * timely manner can be handled without the application needing to ensure that - * SSL_tick() is called on time. This is not needed if the application always - * has a call blocking to SSL_read() or SSL_write() (or another I/O function) on - * a QUIC SSL object, but if the application goes for long periods of time - * without making any such call to a QUIC SSL object, libssl cannot ordinarily - * guarantee that QUIC timeout events will be serviced in a timely fashion. - * Thread assisted mode is therefore of use to applications which do not always - * have an ongoing call to an I/O function on a QUIC SSL object but also do not - * want to have to arrange periodic ticking. - * - * A consequence of this is that the intrusiveness of thread assisted mode upon - * the general architecture of our QUIC engine is actually fairly limited and - * amounts to an automatic ticking of the QUIC engine when timeouts expire, - * synchronised correctly with an application's own threads using locking. - */ -typedef struct quic_thread_assist_st { - QUIC_CHANNEL *ch; - CRYPTO_CONDVAR *cv; - CRYPTO_THREAD *t; - int teardown, joined; - OSSL_TIME (*now_cb)(void *arg); - void *now_cb_arg; -} QUIC_THREAD_ASSIST; - -/* - * Initialise the thread assist object. The channel must have a valid mutex - * configured on it which will be retrieved automatically. It is assumed that - * the mutex is currently held when this function is called. This function does - * not affect the state of the mutex. - */ -int ossl_quic_thread_assist_init_start(QUIC_THREAD_ASSIST *qta, - QUIC_CHANNEL *ch, - OSSL_TIME (*now_cb)(void *arg), - void *now_cb_arg); - -/* - * Request the thread assist helper to begin stopping the assist thread. This - * returns before the teardown is complete. Idempotent; multiple calls to this - * function are inconsequential. - * - * Precondition: channel mutex must be held (unchecked) - */ -int ossl_quic_thread_assist_stop_async(QUIC_THREAD_ASSIST *qta); - -/* - * Wait until the thread assist helper is torn down. This automatically implies - * the effects of ossl_quic_thread_assist_stop_async(). Returns immediately - * if the teardown has already completed. - * - * Precondition: channel mutex must be held (unchecked) - */ -int ossl_quic_thread_assist_wait_stopped(QUIC_THREAD_ASSIST *qta); - -/* - * Deallocates state associated with the thread assist helper. - * ossl_quic_thread_assist_wait_stopped() must have returned successfully before - * calling this. It does not matter whether the channel mutex is held or not. - * - * Precondition: ossl_quic_thread_assist_wait_stopped() has returned 1 - * (asserted) - */ -int ossl_quic_thread_assist_cleanup(QUIC_THREAD_ASSIST *qta); - -/* - * Must be called to notify the assist thread if the channel deadline changes. - * - * Precondition: channel mutex must be held (unchecked) - */ -int ossl_quic_thread_assist_notify_deadline_changed(QUIC_THREAD_ASSIST *qta); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_tls.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_tls.h deleted file mode 100644 index 0e4a9d33..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_tls.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * 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_QUIC_TLS_H -# define OSSL_QUIC_TLS_H - -# include -# include "internal/quic_stream.h" - - -typedef struct quic_tls_st QUIC_TLS; - -typedef struct quic_tls_args_st { - /* - * The "inner" SSL object for the QUIC Connection. Contains an - * SSL_CONNECTION - */ - SSL *s; - - /* - * Called to send data on the crypto stream. We use a callback rather than - * passing the crypto stream QUIC_SSTREAM directly because this lets the CSM - * dynamically select the correct outgoing crypto stream based on the - * current EL. - */ - int (*crypto_send_cb)(const unsigned char *buf, size_t buf_len, - size_t *consumed, void *arg); - void *crypto_send_cb_arg; - - /* - * Call to receive crypto stream data. A pointer to the underlying buffer - * is provided, and subsequently released to avoid unnecessary copying of - * data. - */ - int (*crypto_recv_rcd_cb)(const unsigned char **buf, size_t *bytes_read, - void *arg); - void *crypto_recv_rcd_cb_arg; - int (*crypto_release_rcd_cb)(size_t bytes_read, void *arg); - void *crypto_release_rcd_cb_arg; - - - /* Called when a traffic secret is available for a given encryption level. */ - int (*yield_secret_cb)(uint32_t enc_level, int direction /* 0=RX, 1=TX */, - uint32_t suite_id, EVP_MD *md, - const unsigned char *secret, size_t secret_len, - void *arg); - void *yield_secret_cb_arg; - - /* - * Called when we receive transport parameters from the peer. - * - * Note: These parameters are not authenticated until the handshake is - * marked as completed. - */ - int (*got_transport_params_cb)(const unsigned char *params, - size_t params_len, - void *arg); - void *got_transport_params_cb_arg; - - /* - * Called when the handshake has been completed as far as the handshake - * protocol is concerned, meaning that the connection has been - * authenticated. - */ - int (*handshake_complete_cb)(void *arg); - void *handshake_complete_cb_arg; - - /* - * Called when something has gone wrong with the connection as far as the - * handshake layer is concerned, meaning that it should be immediately torn - * down. Note that this may happen at any time, including after a connection - * has been fully established. - */ - int (*alert_cb)(void *arg, unsigned char alert_code); - void *alert_cb_arg; - - /* Set to 1 if we are running in the server role. */ - int is_server; -} QUIC_TLS_ARGS; - -QUIC_TLS *ossl_quic_tls_new(const QUIC_TLS_ARGS *args); - -void ossl_quic_tls_free(QUIC_TLS *qtls); - -/* Advance the state machine */ -int ossl_quic_tls_tick(QUIC_TLS *qtls); - -int ossl_quic_tls_set_transport_params(QUIC_TLS *qtls, - const unsigned char *transport_params, - size_t transport_params_len); - -int ossl_quic_tls_get_error(QUIC_TLS *qtls, - uint64_t *error_code, - const char **error_msg, - ERR_STATE **error_state); - -int ossl_quic_tls_is_cert_request(QUIC_TLS *qtls); -int ossl_quic_tls_has_bad_max_early_data(QUIC_TLS *qtls); - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_tserver.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_tserver.h deleted file mode 100644 index 4f358dd4..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_tserver.h +++ /dev/null @@ -1,220 +0,0 @@ -/* - * 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_QUIC_TSERVER_H -# define OSSL_QUIC_TSERVER_H - -# include -# include -# include "internal/quic_stream.h" -# include "internal/quic_channel.h" -# include "internal/statem.h" -# include "internal/time.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Test Server Module - * ======================= - * - * This implements a QUIC test server. Since full QUIC server support is not yet - * implemented this server is limited in features and scope. It exists to - * provide a target for our QUIC client to talk to for testing purposes. - * - * A given QUIC test server instance supports only one client at a time. - * - * Note that this test server is not suitable for production use because it does - * not implement address verification, anti-amplification or retry logic. - */ -typedef struct quic_tserver_st QUIC_TSERVER; - -typedef struct quic_tserver_args_st { - OSSL_LIB_CTX *libctx; - const char *propq; - SSL_CTX *ctx; - BIO *net_rbio, *net_wbio; - OSSL_TIME (*now_cb)(void *arg); - void *now_cb_arg; - const unsigned char *alpn; - size_t alpnlen; -} QUIC_TSERVER_ARGS; - -QUIC_TSERVER *ossl_quic_tserver_new(const QUIC_TSERVER_ARGS *args, - const char *certfile, const char *keyfile); - -void ossl_quic_tserver_free(QUIC_TSERVER *srv); - -/* Set mutator callbacks for test framework support */ -int ossl_quic_tserver_set_plain_packet_mutator(QUIC_TSERVER *srv, - ossl_mutate_packet_cb mutatecb, - ossl_finish_mutate_cb finishmutatecb, - void *mutatearg); - -int ossl_quic_tserver_set_handshake_mutator(QUIC_TSERVER *srv, - ossl_statem_mutate_handshake_cb mutate_handshake_cb, - ossl_statem_finish_mutate_handshake_cb finish_mutate_handshake_cb, - void *mutatearg); - -/* Advances the state machine. */ -int ossl_quic_tserver_tick(QUIC_TSERVER *srv); - -/* Returns 1 if we have a (non-terminated) client. */ -int ossl_quic_tserver_is_connected(QUIC_TSERVER *srv); - -/* - * Returns 1 if we have finished the TLS handshake - */ -int ossl_quic_tserver_is_handshake_confirmed(const QUIC_TSERVER *srv); - -/* Returns 1 if the server is in any terminating or terminated state */ -int ossl_quic_tserver_is_term_any(const QUIC_TSERVER *srv); - -const QUIC_TERMINATE_CAUSE * -ossl_quic_tserver_get_terminate_cause(const QUIC_TSERVER *srv); - -/* Returns 1 if the server is in a terminated state */ -int ossl_quic_tserver_is_terminated(const QUIC_TSERVER *srv); - -/* - * Attempts to read from stream 0. Writes the number of bytes read to - * *bytes_read and returns 1 on success. If no bytes are available, 0 is written - * to *bytes_read and 1 is returned (this is considered a success case). - * - * Returns 0 if connection is not currently active. If the receive part of - * the stream has reached the end of stream condition, returns 0; call - * ossl_quic_tserver_has_read_ended() to identify this condition. - */ -int ossl_quic_tserver_read(QUIC_TSERVER *srv, - uint64_t stream_id, - unsigned char *buf, - size_t buf_len, - size_t *bytes_read); - -/* - * Returns 1 if the read part of the stream has ended normally. - */ -int ossl_quic_tserver_has_read_ended(QUIC_TSERVER *srv, uint64_t stream_id); - -/* - * Attempts to write to the given stream. Writes the number of bytes consumed to - * *bytes_written and returns 1 on success. If there is no space currently - * available to write any bytes, 0 is written to *consumed and 1 is returned - * (this is considered a success case). - * - * Note that unlike libssl public APIs, this API always works in a 'partial - * write' mode. - * - * Returns 0 if connection is not currently active. - */ -int ossl_quic_tserver_write(QUIC_TSERVER *srv, - uint64_t stream_id, - const unsigned char *buf, - size_t buf_len, - size_t *bytes_written); - -/* - * Signals normal end of the stream. - */ -int ossl_quic_tserver_conclude(QUIC_TSERVER *srv, uint64_t stream_id); - -/* - * Create a server-initiated stream. The stream ID of the newly - * created stream is written to *stream_id. - */ -int ossl_quic_tserver_stream_new(QUIC_TSERVER *srv, - int is_uni, - uint64_t *stream_id); - -BIO *ossl_quic_tserver_get0_rbio(QUIC_TSERVER *srv); - -SSL_CTX *ossl_quic_tserver_get0_ssl_ctx(QUIC_TSERVER *srv); - -/* - * Returns 1 if the peer has sent a STOP_SENDING frame for a stream. - * app_error_code is written if this returns 1. - */ -int ossl_quic_tserver_stream_has_peer_stop_sending(QUIC_TSERVER *srv, - uint64_t stream_id, - uint64_t *app_error_code); - -/* - * Returns 1 if the peer has sent a RESET_STREAM frame for a stream. - * app_error_code is written if this returns 1. - */ -int ossl_quic_tserver_stream_has_peer_reset_stream(QUIC_TSERVER *srv, - uint64_t stream_id, - uint64_t *app_error_code); - -/* - * Replaces existing local connection ID in the underlying QUIC_CHANNEL. - */ -int ossl_quic_tserver_set_new_local_cid(QUIC_TSERVER *srv, - const QUIC_CONN_ID *conn_id); - -/* - * Returns the stream ID of the next incoming stream, or UINT64_MAX if there - * currently is none. - */ -uint64_t ossl_quic_tserver_pop_incoming_stream(QUIC_TSERVER *srv); - -/* - * Returns 1 if all data sent on the given stream_id has been acked by the peer. - */ -int ossl_quic_tserver_is_stream_totally_acked(QUIC_TSERVER *srv, - uint64_t stream_id); - -/* Returns 1 if we are currently interested in reading data from the network */ -int ossl_quic_tserver_get_net_read_desired(QUIC_TSERVER *srv); - -/* Returns 1 if we are currently interested in writing data to the network */ -int ossl_quic_tserver_get_net_write_desired(QUIC_TSERVER *srv); - -/* Returns the next event deadline */ -OSSL_TIME ossl_quic_tserver_get_deadline(QUIC_TSERVER *srv); - -/* - * Shutdown the QUIC connection. Returns 1 if the connection is terminated and - * 0 otherwise. - */ -int ossl_quic_tserver_shutdown(QUIC_TSERVER *srv, uint64_t app_error_code); - -/* Force generation of an ACK-eliciting packet. */ -int ossl_quic_tserver_ping(QUIC_TSERVER *srv); - -/* Set tracing callback on channel. */ -void ossl_quic_tserver_set_msg_callback(QUIC_TSERVER *srv, - void (*f)(int write_p, int version, - int content_type, - const void *buf, size_t len, - SSL *ssl, void *arg), - void *arg); - -/* - * This is similar to ossl_quic_conn_get_channel; it should be used for test - * instrumentation only and not to bypass QUIC_TSERVER for 'normal' operations. - */ -QUIC_CHANNEL *ossl_quic_tserver_get_channel(QUIC_TSERVER *srv); - -/* Send a TLS new session ticket */ -int ossl_quic_tserver_new_ticket(QUIC_TSERVER *srv); - -/* - * Set the max_early_data value to be sent in NewSessionTickets. Only the - * values 0 and 0xffffffff are valid for use in QUIC. - */ -int ossl_quic_tserver_set_max_early_data(QUIC_TSERVER *srv, - uint32_t max_early_data); - -/* Set the find session callback for getting a server PSK */ -void ossl_quic_tserver_set_psk_find_session_cb(QUIC_TSERVER *srv, - SSL_psk_find_session_cb_func cb); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_txp.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_txp.h deleted file mode 100644 index ae508f23..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_txp.h +++ /dev/null @@ -1,209 +0,0 @@ -/* - * 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_QUIC_TXP_H -# define OSSL_QUIC_TXP_H - -# include -# include "internal/quic_types.h" -# include "internal/quic_record_tx.h" -# include "internal/quic_cfq.h" -# include "internal/quic_txpim.h" -# include "internal/quic_stream.h" -# include "internal/quic_stream_map.h" -# include "internal/quic_fc.h" -# include "internal/bio_addr.h" -# include "internal/time.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC TX Packetiser - * ================== - */ -typedef struct ossl_quic_tx_packetiser_args_st { - /* Configuration Settings */ - QUIC_CONN_ID cur_scid; /* Current Source Connection ID we use. */ - QUIC_CONN_ID cur_dcid; /* Current Destination Connection ID we use. */ - BIO_ADDR peer; /* Current destination L4 address we use. */ - uint32_t ack_delay_exponent; /* ACK delay exponent used when encoding. */ - - /* Injected Dependencies */ - OSSL_QTX *qtx; /* QUIC Record Layer TX we are using */ - QUIC_TXPIM *txpim; /* QUIC TX'd Packet Information Manager */ - QUIC_CFQ *cfq; /* QUIC Control Frame Queue */ - OSSL_ACKM *ackm; /* QUIC Acknowledgement Manager */ - QUIC_STREAM_MAP *qsm; /* QUIC Streams Map */ - QUIC_TXFC *conn_txfc; /* QUIC Connection-Level TX Flow Controller */ - QUIC_RXFC *conn_rxfc; /* QUIC Connection-Level RX Flow Controller */ - QUIC_RXFC *max_streams_bidi_rxfc; /* QUIC RXFC for MAX_STREAMS generation */ - QUIC_RXFC *max_streams_uni_rxfc; - const OSSL_CC_METHOD *cc_method; /* QUIC Congestion Controller */ - OSSL_CC_DATA *cc_data; /* QUIC Congestion Controller Instance */ - OSSL_TIME (*now)(void *arg); /* Callback to get current time. */ - void *now_arg; - - /* - * Injected dependencies - crypto streams. - * - * Note: There is no crypto stream for the 0-RTT EL. - * crypto[QUIC_PN_SPACE_APP] is the 1-RTT crypto stream. - */ - QUIC_SSTREAM *crypto[QUIC_PN_SPACE_NUM]; - - } OSSL_QUIC_TX_PACKETISER_ARGS; - -typedef struct ossl_quic_tx_packetiser_st OSSL_QUIC_TX_PACKETISER; - -OSSL_QUIC_TX_PACKETISER *ossl_quic_tx_packetiser_new(const OSSL_QUIC_TX_PACKETISER_ARGS *args); - -typedef void (ossl_quic_initial_token_free_fn)(const unsigned char *buf, - size_t buf_len, void *arg); - -void ossl_quic_tx_packetiser_free(OSSL_QUIC_TX_PACKETISER *txp); - -/* - * When in the closing state we need to maintain a count of received bytes - * so that we can limit the number of close connection frames we send. - * Refer RFC 9000 s. 10.2.1 Closing Connection State. - */ -void ossl_quic_tx_packetiser_record_received_closing_bytes( - OSSL_QUIC_TX_PACKETISER *txp, size_t n); - -/* - * Generates a datagram by polling the various ELs to determine if they want to - * generate any frames, and generating a datagram which coalesces packets for - * any ELs which do. - * - * Returns 0 on failure (e.g. allocation error or other errors), 1 otherwise. - * - * *status is filled with status information about the generated packet. - * It is always filled even in case of failure. In particular, packets can be - * sent even if failure is later returned. - * See QUIC_TXP_STATUS for details. - */ -typedef struct quic_txp_status_st { - int sent_ack_eliciting; /* Was an ACK-eliciting packet sent? */ - int sent_handshake; /* Was a Handshake packet sent? */ - size_t sent_pkt; /* Number of packets sent (0 if nothing was sent) */ -} QUIC_TXP_STATUS; - -int ossl_quic_tx_packetiser_generate(OSSL_QUIC_TX_PACKETISER *txp, - QUIC_TXP_STATUS *status); - -/* - * Returns a deadline after which a call to ossl_quic_tx_packetiser_generate() - * might succeed even if it did not previously. This may return - * ossl_time_infinite() if there is no such deadline currently applicable. It - * returns ossl_time_zero() if there is (potentially) more data to be generated - * immediately. The value returned is liable to change after any call to - * ossl_quic_tx_packetiser_generate() (or after ACKM or CC state changes). Note - * that ossl_quic_tx_packetiser_generate() can also start to succeed for other - * non-chronological reasons, such as changes to send stream buffers, etc. - */ -OSSL_TIME ossl_quic_tx_packetiser_get_deadline(OSSL_QUIC_TX_PACKETISER *txp); - -/* - * Set the token used in Initial packets. The callback is called when the buffer - * is no longer needed; for example, when the TXP is freed or when this function - * is called again with a new buffer. Fails returning 0 if the token is too big - * to ever be reasonably encapsulated in an outgoing packet based on our current - * understanding of our PMTU. - */ -int ossl_quic_tx_packetiser_set_initial_token(OSSL_QUIC_TX_PACKETISER *txp, - const unsigned char *token, - size_t token_len, - ossl_quic_initial_token_free_fn *free_cb, - void *free_cb_arg); - -/* Change the DCID the TXP uses to send outgoing packets. */ -int ossl_quic_tx_packetiser_set_cur_dcid(OSSL_QUIC_TX_PACKETISER *txp, - const QUIC_CONN_ID *dcid); - -/* Change the SCID the TXP uses to send outgoing (long) packets. */ -int ossl_quic_tx_packetiser_set_cur_scid(OSSL_QUIC_TX_PACKETISER *txp, - const QUIC_CONN_ID *scid); - -/* - * Change the destination L4 address the TXP uses to send datagrams. Specify - * NULL (or AF_UNSPEC) to disable use of addressed mode. - */ -int ossl_quic_tx_packetiser_set_peer(OSSL_QUIC_TX_PACKETISER *txp, - const BIO_ADDR *peer); - -/* - * Inform the TX packetiser that an EL has been discarded. Idempotent. - * - * This does not inform the QTX as well; the caller must also inform the QTX. - * - * The TXP will no longer reference the crypto[enc_level] QUIC_SSTREAM which was - * provided in the TXP arguments. However, it is the callers responsibility to - * free that QUIC_SSTREAM if desired. - */ -int ossl_quic_tx_packetiser_discard_enc_level(OSSL_QUIC_TX_PACKETISER *txp, - uint32_t enc_level); - -/* - * Informs the TX packetiser that the handshake is complete. The TX packetiser - * will not send 1-RTT application data until the handshake is complete, - * as the authenticity of the peer is not confirmed until the handshake - * complete event occurs. - */ -void ossl_quic_tx_packetiser_notify_handshake_complete(OSSL_QUIC_TX_PACKETISER *txp); - -/* Asks the TXP to generate a HANDSHAKE_DONE frame in the next 1-RTT packet. */ -void ossl_quic_tx_packetiser_schedule_handshake_done(OSSL_QUIC_TX_PACKETISER *txp); - -/* Asks the TXP to ensure the next packet in the given PN space is ACK-eliciting. */ -void ossl_quic_tx_packetiser_schedule_ack_eliciting(OSSL_QUIC_TX_PACKETISER *txp, - uint32_t pn_space); - -/* - * Asks the TXP to ensure an ACK is put in the next packet in the given PN - * space. - */ -void ossl_quic_tx_packetiser_schedule_ack(OSSL_QUIC_TX_PACKETISER *txp, - uint32_t pn_space); - -/* - * Schedules a connection close. *f and f->reason are copied. This operation is - * irreversible and causes all further packets generated by the TXP to contain a - * CONNECTION_CLOSE frame. This function fails if it has already been called - * successfully; the information in *f cannot be changed after the first - * successful call to this function. - */ -int ossl_quic_tx_packetiser_schedule_conn_close(OSSL_QUIC_TX_PACKETISER *txp, - const OSSL_QUIC_FRAME_CONN_CLOSE *f); - -/* Setters for the msg_callback and msg_callback_arg */ -void ossl_quic_tx_packetiser_set_msg_callback(OSSL_QUIC_TX_PACKETISER *txp, - ossl_msg_cb msg_callback, - SSL *msg_callback_ssl); -void ossl_quic_tx_packetiser_set_msg_callback_arg(OSSL_QUIC_TX_PACKETISER *txp, - void *msg_callback_arg); - -/* - * Determines the next PN which will be used for a given PN space. - */ -QUIC_PN ossl_quic_tx_packetiser_get_next_pn(OSSL_QUIC_TX_PACKETISER *txp, - uint32_t pn_space); - -/* - * Sets a callback which is called whenever TXP sends an ACK frame. The callee - * must not modify the ACK frame data. Can be used to snoop on PNs being ACKed. - */ -void ossl_quic_tx_packetiser_set_ack_tx_cb(OSSL_QUIC_TX_PACKETISER *txp, - void (*cb)(const OSSL_QUIC_FRAME_ACK *ack, - uint32_t pn_space, - void *arg), - void *cb_arg); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_txpim.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_txpim.h deleted file mode 100644 index ed6e3875..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_txpim.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * 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_QUIC_TXPIM_H -# define OSSL_QUIC_TXPIM_H - -# include -# include "internal/quic_types.h" -# include "internal/quic_cfq.h" -# include "internal/quic_ackm.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Transmitted Packet Information Manager - * =========================================== - */ -typedef struct quic_txpim_st QUIC_TXPIM; -typedef struct quic_fifd_st QUIC_FIFD; - -typedef struct quic_txpim_pkt_st { - /* ACKM-specific data. Caller should fill this. */ - OSSL_ACKM_TX_PKT ackm_pkt; - - /* Linked list of CFQ items in this packet. */ - QUIC_CFQ_ITEM *retx_head; - - /* Reserved for FIFD use. */ - QUIC_FIFD *fifd; - - /* Regenerate-strategy frames. */ - unsigned int had_handshake_done_frame : 1; - unsigned int had_max_data_frame : 1; - unsigned int had_max_streams_bidi_frame : 1; - unsigned int had_max_streams_uni_frame : 1; - unsigned int had_ack_frame : 1; - unsigned int had_conn_close : 1; - - /* Private data follows. */ -} QUIC_TXPIM_PKT; - -/* Represents a range of bytes in an application or CRYPTO stream. */ -typedef struct quic_txpim_chunk_st { - /* The stream ID, or UINT64_MAX for the CRYPTO stream. */ - uint64_t stream_id; - /* - * The inclusive range of bytes in the stream. Exceptionally, if end < - * start, designates a frame of zero length (used for FIN-only frames). In - * this case end is the number of the final byte (i.e., one less than the - * final size of the stream). - */ - uint64_t start, end; - /* - * Whether a FIN was sent for this stream in the packet. Not valid for - * CRYPTO stream. - */ - unsigned int has_fin : 1; - /* - * If set, a STOP_SENDING frame was sent for this stream ID. (If no data was - * sent for the stream, set end < start.) - */ - unsigned int has_stop_sending : 1; - /* - * If set, a RESET_STREAM frame was sent for this stream ID. (If no data was - * sent for the stream, set end < start.) - */ - unsigned int has_reset_stream : 1; -} QUIC_TXPIM_CHUNK; - -QUIC_TXPIM *ossl_quic_txpim_new(void); - -/* - * Frees the TXPIM. All QUIC_TXPIM_PKTs which have been handed out by the TXPIM - * must be released via a call to ossl_quic_txpim_pkt_release() before calling - * this function. - */ -void ossl_quic_txpim_free(QUIC_TXPIM *txpim); - -/* - * Allocates a new QUIC_TXPIM_PKT structure from the pool. Returns NULL on - * failure. The returned structure is cleared of all data and is in a fresh - * initial state. - */ -QUIC_TXPIM_PKT *ossl_quic_txpim_pkt_alloc(QUIC_TXPIM *txpim); - -/* - * Releases the TXPIM packet, returning it to the pool. - */ -void ossl_quic_txpim_pkt_release(QUIC_TXPIM *txpim, QUIC_TXPIM_PKT *fpkt); - -/* Clears the chunk list of the packet, removing all entries. */ -void ossl_quic_txpim_pkt_clear_chunks(QUIC_TXPIM_PKT *fpkt); - -/* Appends a chunk to the packet. The structure is copied. */ -int ossl_quic_txpim_pkt_append_chunk(QUIC_TXPIM_PKT *fpkt, - const QUIC_TXPIM_CHUNK *chunk); - -/* Adds a CFQ item to the packet by prepending it to the retx_head list. */ -void ossl_quic_txpim_pkt_add_cfq_item(QUIC_TXPIM_PKT *fpkt, - QUIC_CFQ_ITEM *item); - -/* - * Returns a pointer to an array of stream chunk information structures for the - * given packet. The caller must call ossl_quic_txpim_pkt_get_num_chunks() to - * determine the length of this array. The returned pointer is invalidated - * if the chunk list is mutated, for example via a call to - * ossl_quic_txpim_pkt_append_chunk() or ossl_quic_txpim_pkt_clear_chunks(). - * - * The chunks are sorted by (stream_id, start) in ascending order. - */ -const QUIC_TXPIM_CHUNK *ossl_quic_txpim_pkt_get_chunks(const QUIC_TXPIM_PKT *fpkt); - -/* - * Returns the number of entries in the array returned by - * ossl_quic_txpim_pkt_get_chunks(). - */ -size_t ossl_quic_txpim_pkt_get_num_chunks(const QUIC_TXPIM_PKT *fpkt); - -/* - * Returns the number of QUIC_TXPIM_PKTs allocated by the given TXPIM that have - * yet to be returned to the TXPIM. - */ -size_t ossl_quic_txpim_get_in_use(const QUIC_TXPIM *txpim); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_types.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_types.h deleted file mode 100644 index d42164ba..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_types.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 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_QUIC_TYPES_H -# define OSSL_QUIC_TYPES_H - -# include -# include -# include -# include - -# ifndef OPENSSL_NO_QUIC - -/* QUIC encryption levels. */ -enum { - QUIC_ENC_LEVEL_INITIAL = 0, - QUIC_ENC_LEVEL_HANDSHAKE, - QUIC_ENC_LEVEL_0RTT, - QUIC_ENC_LEVEL_1RTT, - QUIC_ENC_LEVEL_NUM /* Must be the ultimate entry */ -}; - -/* QUIC packet number spaces. */ -enum { - QUIC_PN_SPACE_INITIAL = 0, - QUIC_PN_SPACE_HANDSHAKE, - /* New entries must go here, so that QUIC_PN_SPACE_APP is the penultimate */ - QUIC_PN_SPACE_APP, - QUIC_PN_SPACE_NUM /* Must be the ultimate entry */ -}; - -static ossl_unused ossl_inline uint32_t -ossl_quic_enc_level_to_pn_space(uint32_t enc_level) -{ - switch (enc_level) { - case QUIC_ENC_LEVEL_INITIAL: - return QUIC_PN_SPACE_INITIAL; - case QUIC_ENC_LEVEL_HANDSHAKE: - return QUIC_PN_SPACE_HANDSHAKE; - case QUIC_ENC_LEVEL_0RTT: - case QUIC_ENC_LEVEL_1RTT: - return QUIC_PN_SPACE_APP; - default: - assert(0); - return QUIC_PN_SPACE_APP; - } -} - -/* QUIC packet number representation. */ -typedef uint64_t QUIC_PN; -# define QUIC_PN_INVALID UINT64_MAX - -static ossl_unused ossl_inline QUIC_PN ossl_quic_pn_max(QUIC_PN a, QUIC_PN b) -{ - return a > b ? a : b; -} - -static ossl_unused ossl_inline QUIC_PN ossl_quic_pn_min(QUIC_PN a, QUIC_PN b) -{ - return a < b ? a : b; -} - -static ossl_unused ossl_inline int ossl_quic_pn_valid(QUIC_PN pn) -{ - return pn < (((QUIC_PN)1) << 62); -} - -/* QUIC connection ID representation. */ -# define QUIC_MAX_CONN_ID_LEN 20 - -typedef struct quic_conn_id_st { - unsigned char id_len, id[QUIC_MAX_CONN_ID_LEN]; -} QUIC_CONN_ID; - -static ossl_unused ossl_inline int ossl_quic_conn_id_eq(const QUIC_CONN_ID *a, - const QUIC_CONN_ID *b) -{ - if (a->id_len != b->id_len || a->id_len > QUIC_MAX_CONN_ID_LEN) - return 0; - return memcmp(a->id, b->id, a->id_len) == 0; -} - -# define QUIC_MIN_INITIAL_DGRAM_LEN 1200 - -# define QUIC_DEFAULT_ACK_DELAY_EXP 3 -# define QUIC_MAX_ACK_DELAY_EXP 20 - -# define QUIC_DEFAULT_MAX_ACK_DELAY 25 - -# define QUIC_MIN_ACTIVE_CONN_ID_LIMIT 2 - -/* Arbitrary choice of default idle timeout (not an RFC value). */ -# define QUIC_DEFAULT_IDLE_TIMEOUT 30000 - -# define QUIC_STATELESS_RESET_TOKEN_LEN 16 - -typedef struct { - unsigned char token[QUIC_STATELESS_RESET_TOKEN_LEN]; -} QUIC_STATELESS_RESET_TOKEN; - -/* - * An encoded preferred_addr transport parameter cannot be shorter or longer - * than these lengths in bytes. - */ -# define QUIC_MIN_ENCODED_PREFERRED_ADDR_LEN 41 -# define QUIC_MAX_ENCODED_PREFERRED_ADDR_LEN 61 - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_vlint.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_vlint.h deleted file mode 100644 index d4b70b22..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_vlint.h +++ /dev/null @@ -1,127 +0,0 @@ -/* -* 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_INTERNAL_QUIC_VLINT_H -# define OSSL_INTERNAL_QUIC_VLINT_H -# pragma once - -# include "internal/e_os.h" - -# ifndef OPENSSL_NO_QUIC - -/* The smallest value requiring a 1, 2, 4, or 8-byte representation. */ -#define OSSL_QUIC_VLINT_1B_MIN 0 -#define OSSL_QUIC_VLINT_2B_MIN 64 -#define OSSL_QUIC_VLINT_4B_MIN 16384 -#define OSSL_QUIC_VLINT_8B_MIN 1073741824 - -/* The largest value representable in a given number of bytes. */ -#define OSSL_QUIC_VLINT_1B_MAX (OSSL_QUIC_VLINT_2B_MIN - 1) -#define OSSL_QUIC_VLINT_2B_MAX (OSSL_QUIC_VLINT_4B_MIN - 1) -#define OSSL_QUIC_VLINT_4B_MAX (OSSL_QUIC_VLINT_8B_MIN - 1) -#define OSSL_QUIC_VLINT_8B_MAX (((uint64_t)1 << 62) - 1) - -/* The largest value representable as a variable-length integer. */ -#define OSSL_QUIC_VLINT_MAX OSSL_QUIC_VLINT_8B_MAX - -/* - * Returns the number of bytes needed to encode v in the QUIC variable-length - * integer encoding. - * - * Returns 0 if v exceeds OSSL_QUIC_VLINT_MAX. - */ -static ossl_unused ossl_inline size_t ossl_quic_vlint_encode_len(uint64_t v) -{ - if (v < OSSL_QUIC_VLINT_2B_MIN) - return 1; - - if (v < OSSL_QUIC_VLINT_4B_MIN) - return 2; - - if (v < OSSL_QUIC_VLINT_8B_MIN) - return 4; - - if (v <= OSSL_QUIC_VLINT_MAX) - return 8; - - return 0; -} - -/* - * This function writes a QUIC varable-length encoded integer to buf. - * The smallest usable representation is used. - * - * It is the caller's responsibility to ensure that the buffer is big enough by - * calling ossl_quic_vlint_encode_len(v) before calling this function. - * - * Precondition: buf is at least ossl_quic_vlint_enc_len(v) bytes in size - * (unchecked) - * Precondition: v does not exceed OSSL_QUIC_VLINT_MAX - * (unchecked) - */ -void ossl_quic_vlint_encode(unsigned char *buf, uint64_t v); - -/* - * This function writes a QUIC variable-length encoded integer to buf. The - * specified number of bytes n are used for the encoding, which means that the - * encoded value may take up more space than necessary. - * - * It is the caller's responsibility to ensure that the buffer is of at least n - * bytes, and that v is representable by a n-byte QUIC variable-length integer. - * The representable ranges are: - * - * 1-byte encoding: [0, 2** 6-1] - * 2-byte encoding: [0, 2**14-1] - * 4-byte encoding: [0, 2**30-1] - * 8-byte encoding: [0, 2**62-1] - * - * Precondition: buf is at least n bytes in size (unchecked) - * Precondition: v does not exceed the representable range - * (ossl_quic_vlint_encode_len(v) <= n) (unchecked) - * Precondition: v does not exceed OSSL_QUIC_VLINT_MAX - * (unchecked) - */ -void ossl_quic_vlint_encode_n(unsigned char *buf, uint64_t v, int n); - -/* - * Given the first byte of an encoded QUIC variable-length integer, returns - * the number of bytes comprising the encoded integer, including the first - * byte. - */ -static ossl_unused ossl_inline size_t ossl_quic_vlint_decode_len(uint8_t first_byte) -{ - return 1U << ((first_byte & 0xC0) >> 6); -} - -/* - * Given a buffer containing an encoded QUIC variable-length integer, returns - * the decoded value. The buffer must be of at least - * ossl_quic_vlint_decode_len(buf[0]) bytes in size, and the caller is responsible - * for checking this. - * - * Precondition: buf is at least ossl_quic_vlint_decode_len(buf[0]) bytes in size - * (unchecked) - */ -uint64_t ossl_quic_vlint_decode_unchecked(const unsigned char *buf); - -/* - * Given a buffer buf of buf_len bytes in length, attempts to decode an encoded - * QUIC variable-length integer at the start of the buffer and writes the result - * to *v. If buf_len is inadequate, suggesting a truncated encoded integer, the - * function fails and 0 is returned. Otherwise, returns the number of bytes - * consumed. - * - * Precondition: buf is at least buf_len bytes in size - * Precondition: v (unchecked) - */ -int ossl_quic_vlint_decode(const unsigned char *buf, size_t buf_len, uint64_t *v); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_wire.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_wire.h deleted file mode 100644 index cd01feb0..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_wire.h +++ /dev/null @@ -1,784 +0,0 @@ -/* -* 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_INTERNAL_QUIC_WIRE_H -# define OSSL_INTERNAL_QUIC_WIRE_H -# pragma once - -# include "internal/e_os.h" -# include "internal/time.h" -# include "internal/quic_types.h" -# include "internal/packet_quic.h" - -# ifndef OPENSSL_NO_QUIC - -# define OSSL_QUIC_FRAME_TYPE_PADDING 0x00 -# define OSSL_QUIC_FRAME_TYPE_PING 0x01 -# define OSSL_QUIC_FRAME_TYPE_ACK_WITHOUT_ECN 0x02 -# define OSSL_QUIC_FRAME_TYPE_ACK_WITH_ECN 0x03 -# define OSSL_QUIC_FRAME_TYPE_RESET_STREAM 0x04 -# define OSSL_QUIC_FRAME_TYPE_STOP_SENDING 0x05 -# define OSSL_QUIC_FRAME_TYPE_CRYPTO 0x06 -# define OSSL_QUIC_FRAME_TYPE_NEW_TOKEN 0x07 -# define OSSL_QUIC_FRAME_TYPE_MAX_DATA 0x10 -# define OSSL_QUIC_FRAME_TYPE_MAX_STREAM_DATA 0x11 -# define OSSL_QUIC_FRAME_TYPE_MAX_STREAMS_BIDI 0x12 -# define OSSL_QUIC_FRAME_TYPE_MAX_STREAMS_UNI 0x13 -# define OSSL_QUIC_FRAME_TYPE_DATA_BLOCKED 0x14 -# define OSSL_QUIC_FRAME_TYPE_STREAM_DATA_BLOCKED 0x15 -# define OSSL_QUIC_FRAME_TYPE_STREAMS_BLOCKED_BIDI 0x16 -# define OSSL_QUIC_FRAME_TYPE_STREAMS_BLOCKED_UNI 0x17 -# define OSSL_QUIC_FRAME_TYPE_NEW_CONN_ID 0x18 -# define OSSL_QUIC_FRAME_TYPE_RETIRE_CONN_ID 0x19 -# define OSSL_QUIC_FRAME_TYPE_PATH_CHALLENGE 0x1A -# define OSSL_QUIC_FRAME_TYPE_PATH_RESPONSE 0x1B -# define OSSL_QUIC_FRAME_TYPE_CONN_CLOSE_TRANSPORT 0x1C -# define OSSL_QUIC_FRAME_TYPE_CONN_CLOSE_APP 0x1D -# define OSSL_QUIC_FRAME_TYPE_HANDSHAKE_DONE 0x1E - -# define OSSL_QUIC_FRAME_FLAG_STREAM_FIN 0x01 -# define OSSL_QUIC_FRAME_FLAG_STREAM_LEN 0x02 -# define OSSL_QUIC_FRAME_FLAG_STREAM_OFF 0x04 -# define OSSL_QUIC_FRAME_FLAG_STREAM_MASK ((uint64_t)0x07) - -/* Low 3 bits of the type contain flags */ -# define OSSL_QUIC_FRAME_TYPE_STREAM 0x08 /* base ID */ -# define OSSL_QUIC_FRAME_TYPE_STREAM_FIN \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_FIN) -# define OSSL_QUIC_FRAME_TYPE_STREAM_LEN \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_LEN) -# define OSSL_QUIC_FRAME_TYPE_STREAM_LEN_FIN \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_LEN | \ - OSSL_QUIC_FRAME_FLAG_STREAM_FIN) -# define OSSL_QUIC_FRAME_TYPE_STREAM_OFF \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_OFF) -# define OSSL_QUIC_FRAME_TYPE_STREAM_OFF_FIN \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_OFF | \ - OSSL_QUIC_FRAME_FLAG_STREAM_FIN) -# define OSSL_QUIC_FRAME_TYPE_STREAM_OFF_LEN \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_OFF | \ - OSSL_QUIC_FRAME_FLAG_STREAM_LEN) -# define OSSL_QUIC_FRAME_TYPE_STREAM_OFF_LEN_FIN \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_OFF | \ - OSSL_QUIC_FRAME_FLAG_STREAM_LEN | \ - OSSL_QUIC_FRAME_FLAG_STREAM_FIN) - -# define OSSL_QUIC_FRAME_TYPE_IS_STREAM(x) \ - (((x) & ~OSSL_QUIC_FRAME_FLAG_STREAM_MASK) == OSSL_QUIC_FRAME_TYPE_STREAM) -# define OSSL_QUIC_FRAME_TYPE_IS_ACK(x) \ - (((x) & ~(uint64_t)1) == OSSL_QUIC_FRAME_TYPE_ACK_WITHOUT_ECN) -# define OSSL_QUIC_FRAME_TYPE_IS_MAX_STREAMS(x) \ - (((x) & ~(uint64_t)1) == OSSL_QUIC_FRAME_TYPE_MAX_STREAMS_BIDI) -# define OSSL_QUIC_FRAME_TYPE_IS_STREAMS_BLOCKED(x) \ - (((x) & ~(uint64_t)1) == OSSL_QUIC_FRAME_TYPE_STREAMS_BLOCKED_BIDI) -# define OSSL_QUIC_FRAME_TYPE_IS_CONN_CLOSE(x) \ - (((x) & ~(uint64_t)1) == OSSL_QUIC_FRAME_TYPE_CONN_CLOSE_TRANSPORT) - -const char *ossl_quic_frame_type_to_string(uint64_t frame_type); - -static ossl_unused ossl_inline int -ossl_quic_frame_type_is_ack_eliciting(uint64_t frame_type) -{ - switch (frame_type) { - case OSSL_QUIC_FRAME_TYPE_PADDING: - case OSSL_QUIC_FRAME_TYPE_ACK_WITHOUT_ECN: - case OSSL_QUIC_FRAME_TYPE_ACK_WITH_ECN: - case OSSL_QUIC_FRAME_TYPE_CONN_CLOSE_TRANSPORT: - case OSSL_QUIC_FRAME_TYPE_CONN_CLOSE_APP: - return 0; - default: - return 1; - } -} - -/* QUIC Transport Parameter Types */ -# define QUIC_TPARAM_ORIG_DCID 0x00 -# define QUIC_TPARAM_MAX_IDLE_TIMEOUT 0x01 -# define QUIC_TPARAM_STATELESS_RESET_TOKEN 0x02 -# define QUIC_TPARAM_MAX_UDP_PAYLOAD_SIZE 0x03 -# define QUIC_TPARAM_INITIAL_MAX_DATA 0x04 -# define QUIC_TPARAM_INITIAL_MAX_STREAM_DATA_BIDI_LOCAL 0x05 -# define QUIC_TPARAM_INITIAL_MAX_STREAM_DATA_BIDI_REMOTE 0x06 -# define QUIC_TPARAM_INITIAL_MAX_STREAM_DATA_UNI 0x07 -# define QUIC_TPARAM_INITIAL_MAX_STREAMS_BIDI 0x08 -# define QUIC_TPARAM_INITIAL_MAX_STREAMS_UNI 0x09 -# define QUIC_TPARAM_ACK_DELAY_EXP 0x0A -# define QUIC_TPARAM_MAX_ACK_DELAY 0x0B -# define QUIC_TPARAM_DISABLE_ACTIVE_MIGRATION 0x0C -# define QUIC_TPARAM_PREFERRED_ADDR 0x0D -# define QUIC_TPARAM_ACTIVE_CONN_ID_LIMIT 0x0E -# define QUIC_TPARAM_INITIAL_SCID 0x0F -# define QUIC_TPARAM_RETRY_SCID 0x10 - -/* - * QUIC Frame Logical Representations - * ================================== - */ - -/* QUIC Frame: ACK */ -typedef struct ossl_quic_ack_range_st { - /* - * Represents an inclusive range of packet numbers [start, end]. - * start must be <= end. - */ - QUIC_PN start, end; -} OSSL_QUIC_ACK_RANGE; - -typedef struct ossl_quic_frame_ack_st { - /* - * A sequence of packet number ranges [[start, end]...]. - * - * The ranges must be sorted in descending order, for example: - * [ 95, 100] - * [ 90, 92] - * etc. - * - * As such, ack_ranges[0].end is always the highest packet number - * being acknowledged and ack_ranges[num_ack_ranges-1].start is - * always the lowest packet number being acknowledged. - * - * num_ack_ranges must be greater than zero, as an ACK frame must - * acknowledge at least one packet number. - */ - OSSL_QUIC_ACK_RANGE *ack_ranges; - size_t num_ack_ranges; - - OSSL_TIME delay_time; - uint64_t ect0, ect1, ecnce; - unsigned int ecn_present : 1; -} OSSL_QUIC_FRAME_ACK; - -/* Returns 1 if the given frame contains the given PN. */ -int ossl_quic_frame_ack_contains_pn(const OSSL_QUIC_FRAME_ACK *ack, QUIC_PN pn); - -/* QUIC Frame: STREAM */ -typedef struct ossl_quic_frame_stream_st { - uint64_t stream_id; /* Stream ID */ - uint64_t offset; /* Logical offset in stream */ - uint64_t len; /* Length of data in bytes */ - const unsigned char *data; - - /* - * On encode, this determines whether the len field should be encoded or - * not. If zero, the len field is not encoded and it is assumed the frame - * runs to the end of the packet. - * - * On decode, this determines whether the frame had an explicitly encoded - * length. If not set, the frame runs to the end of the packet and len has - * been set accordingly. - */ - unsigned int has_explicit_len : 1; - - /* 1 if this is the end of the stream */ - unsigned int is_fin : 1; -} OSSL_QUIC_FRAME_STREAM; - -/* QUIC Frame: CRYPTO */ -typedef struct ossl_quic_frame_crypto_st { - uint64_t offset; /* Logical offset in stream */ - uint64_t len; /* Length of the data in bytes */ - const unsigned char *data; -} OSSL_QUIC_FRAME_CRYPTO; - -/* QUIC Frame: RESET_STREAM */ -typedef struct ossl_quic_frame_reset_stream_st { - uint64_t stream_id; - uint64_t app_error_code; - uint64_t final_size; -} OSSL_QUIC_FRAME_RESET_STREAM; - -/* QUIC Frame: STOP_SENDING */ -typedef struct ossl_quic_frame_stop_sending_st { - uint64_t stream_id; - uint64_t app_error_code; -} OSSL_QUIC_FRAME_STOP_SENDING; - -/* QUIC Frame: NEW_CONNECTION_ID */ -typedef struct ossl_quic_frame_new_conn_id_st { - uint64_t seq_num; - uint64_t retire_prior_to; - QUIC_CONN_ID conn_id; - QUIC_STATELESS_RESET_TOKEN stateless_reset; -} OSSL_QUIC_FRAME_NEW_CONN_ID; - -/* QUIC Frame: CONNECTION_CLOSE */ -typedef struct ossl_quic_frame_conn_close_st { - unsigned int is_app : 1; /* 0: transport error, 1: app error */ - uint64_t error_code; /* 62-bit transport or app error code */ - uint64_t frame_type; /* transport errors only */ - char *reason; /* UTF-8 string, not necessarily zero-terminated */ - size_t reason_len; /* Length of reason in bytes */ -} OSSL_QUIC_FRAME_CONN_CLOSE; - -/* - * QUIC Wire Format Encoding - * ========================= - * - * These functions return 1 on success and 0 on failure. - */ - -/* - * Encodes zero or more QUIC PADDING frames to the packet writer. Each PADDING - * frame consumes one byte; num_bytes specifies the number of bytes of padding - * to write. - */ -int ossl_quic_wire_encode_padding(WPACKET *pkt, size_t num_bytes); - -/* - * Encodes a QUIC PING frame to the packet writer. This frame type takes - * no arguments. -*/ -int ossl_quic_wire_encode_frame_ping(WPACKET *pkt); - -/* - * Encodes a QUIC ACK frame to the packet writer, given a logical representation - * of the ACK frame. - * - * The ACK ranges passed must be sorted in descending order. - * - * The logical representation stores a list of packet number ranges. The wire - * encoding is slightly different and stores the first range in the list - * in a different manner. - * - * The ack_delay_exponent argument specifies the index of a power of two by - * which the ack->ack_delay field is be divided. This exponent value must match - * the value used when decoding. - */ -int ossl_quic_wire_encode_frame_ack(WPACKET *pkt, - uint32_t ack_delay_exponent, - const OSSL_QUIC_FRAME_ACK *ack); - -/* - * Encodes a QUIC RESET_STREAM frame to the packet writer, given a logical - * representation of the RESET_STREAM frame. - */ -int ossl_quic_wire_encode_frame_reset_stream(WPACKET *pkt, - const OSSL_QUIC_FRAME_RESET_STREAM *f); - -/* - * Encodes a QUIC STOP_SENDING frame to the packet writer, given a logical - * representation of the STOP_SENDING frame. - */ -int ossl_quic_wire_encode_frame_stop_sending(WPACKET *pkt, - const OSSL_QUIC_FRAME_STOP_SENDING *f); - -/* - * Encodes a QUIC CRYPTO frame header to the packet writer. - * - * To create a well-formed frame, the data written using this function must be - * immediately followed by f->len bytes of data. - */ -int ossl_quic_wire_encode_frame_crypto_hdr(WPACKET *hdr, - const OSSL_QUIC_FRAME_CRYPTO *f); - -/* - * Returns the number of bytes which will be required to encode the given - * CRYPTO frame header. Does not include the payload bytes in the count. - * Returns 0 if input is invalid. - */ -size_t ossl_quic_wire_get_encoded_frame_len_crypto_hdr(const OSSL_QUIC_FRAME_CRYPTO *f); - -/* - * Encodes a QUIC CRYPTO frame to the packet writer. - * - * This function returns a pointer to a buffer of f->len bytes which the caller - * should fill however it wishes. If f->data is non-NULL, it is automatically - * copied to the target buffer, otherwise the caller must fill the returned - * buffer. Returns NULL on failure. - */ -void *ossl_quic_wire_encode_frame_crypto(WPACKET *pkt, - const OSSL_QUIC_FRAME_CRYPTO *f); - -/* - * Encodes a QUIC NEW_TOKEN frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_new_token(WPACKET *pkt, - const unsigned char *token, - size_t token_len); - -/* - * Encodes a QUIC STREAM frame's header to the packet writer. The f->stream_id, - * f->offset and f->len fields are the values for the respective Stream ID, - * Offset and Length fields. - * - * If f->is_fin is non-zero, the frame is marked as the final frame in the - * stream. - * - * If f->has_explicit_len is zerro, the frame is assumed to be the final frame - * in the packet, which the caller is responsible for ensuring; the Length - * field is then omitted. - * - * To create a well-formed frame, the data written using this function must be - * immediately followed by f->len bytes of stream data. - */ -int ossl_quic_wire_encode_frame_stream_hdr(WPACKET *pkt, - const OSSL_QUIC_FRAME_STREAM *f); - -/* - * Returns the number of bytes which will be required to encode the given - * STREAM frame header. Does not include the payload bytes in the count. - * Returns 0 if input is invalid. - */ -size_t ossl_quic_wire_get_encoded_frame_len_stream_hdr(const OSSL_QUIC_FRAME_STREAM *f); - -/* - * Functions similarly to ossl_quic_wire_encode_frame_stream_hdr, but it also - * allocates space for f->len bytes of data after the header, creating a - * well-formed QUIC STREAM frame in one call. - * - * A pointer to the bytes allocated for the framme payload is returned, - * which the caller can fill however it wishes. If f->data is non-NULL, - * it is automatically copied to the target buffer, otherwise the caller - * must fill the returned buffer. Returns NULL on failure. - */ -void *ossl_quic_wire_encode_frame_stream(WPACKET *pkt, - const OSSL_QUIC_FRAME_STREAM *f); - -/* - * Encodes a QUIC MAX_DATA frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_max_data(WPACKET *pkt, - uint64_t max_data); - -/* - * Encodes a QUIC MAX_STREAM_DATA frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_max_stream_data(WPACKET *pkt, - uint64_t stream_id, - uint64_t max_data); - -/* - * Encodes a QUIC MAX_STREAMS frame to the packet writer. - * - * If is_uni is 0, the count specifies the maximum number of - * bidirectional streams; else it specifies the maximum number of unidirectional - * streams. - */ -int ossl_quic_wire_encode_frame_max_streams(WPACKET *pkt, - char is_uni, - uint64_t max_streams); - -/* - * Encodes a QUIC DATA_BLOCKED frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_data_blocked(WPACKET *pkt, - uint64_t max_data); - -/* - * Encodes a QUIC STREAM_DATA_BLOCKED frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_stream_data_blocked(WPACKET *pkt, - uint64_t stream_id, - uint64_t max_stream_data); -/* - * Encodes a QUIC STREAMS_BLOCKED frame to the packet writer. - * - * If is_uni is 0, the count specifies the maximum number of - * bidirectional streams; else it specifies the maximum number of unidirectional - * streams. - */ -int ossl_quic_wire_encode_frame_streams_blocked(WPACKET *pkt, - char is_uni, - uint64_t max_streams); - -/* - * Encodes a QUIC NEW_CONNECTION_ID frame to the packet writer, given a logical - * representation of the NEW_CONNECTION_ID frame. - * - * The buffer pointed to by the conn_id field must be valid for the duration of - * the call. - */ -int ossl_quic_wire_encode_frame_new_conn_id(WPACKET *pkt, - const OSSL_QUIC_FRAME_NEW_CONN_ID *f); - -/* - * Encodes a QUIC RETIRE_CONNECTION_ID frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_retire_conn_id(WPACKET *pkt, - uint64_t seq_num); - -/* - * Encodes a QUIC PATH_CHALLENGE frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_path_challenge(WPACKET *pkt, - uint64_t data); - -/* - * Encodes a QUIC PATH_RESPONSE frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_path_response(WPACKET *pkt, - uint64_t data); - -/* - * Encodes a QUIC CONNECTION_CLOSE frame to the packet writer, given a logical - * representation of the CONNECTION_CLOSE frame. - * - * The reason field may be NULL, in which case no reason is encoded. If the - * reason field is non-NULL, it must point to a valid UTF-8 string and - * reason_len must be set to the length of the reason string in bytes. The - * reason string need not be zero terminated. - */ -int ossl_quic_wire_encode_frame_conn_close(WPACKET *pkt, - const OSSL_QUIC_FRAME_CONN_CLOSE *f); - -/* - * Encodes a QUIC HANDSHAKE_DONE frame to the packet writer. This frame type - * takes no arguiments. - */ -int ossl_quic_wire_encode_frame_handshake_done(WPACKET *pkt); - -/* - * Encodes a QUIC transport parameter TLV with the given ID into the WPACKET. - * The payload is an arbitrary buffer. - * - * If value is non-NULL, the value is copied into the packet. - * If it is NULL, value_len bytes are allocated for the payload and the caller - * should fill the buffer using the returned pointer. - * - * Returns a pointer to the start of the payload on success, or NULL on failure. - */ -unsigned char *ossl_quic_wire_encode_transport_param_bytes(WPACKET *pkt, - uint64_t id, - const unsigned char *value, - size_t value_len); - -/* - * Encodes a QUIC transport parameter TLV with the given ID into the WPACKET. - * The payload is a QUIC variable-length integer with the given value. - */ -int ossl_quic_wire_encode_transport_param_int(WPACKET *pkt, - uint64_t id, - uint64_t value); - -/* - * Encodes a QUIC transport parameter TLV with a given ID into the WPACKET. - * The payload is a QUIC connection ID. - */ -int ossl_quic_wire_encode_transport_param_cid(WPACKET *wpkt, - uint64_t id, - const QUIC_CONN_ID *cid); - -/* - * QUIC Wire Format Decoding - * ========================= - * - * These functions return 1 on success or 0 for failure. Typical reasons - * why these functions may fail include: - * - * - A frame decode function is called but the frame in the PACKET's buffer - * is not of the correct type. - * - * - A variable-length field in the encoded frame appears to exceed the bounds - * of the PACKET's buffer. - * - * These functions should be called with the PACKET pointing to the start of the - * frame (including the initial type field), and consume an entire frame - * including its type field. The expectation is that the caller will have - * already discerned the frame type using ossl_quic_wire_peek_frame_header(). - */ - -/* - * Decodes the type field header of a QUIC frame (without advancing the current - * position). This can be used to determine the frame type and determine which - * frame decoding function to call. - */ -int ossl_quic_wire_peek_frame_header(PACKET *pkt, uint64_t *type, - int *was_minimal); - -/* - * Like ossl_quic_wire_peek_frame_header, but advances the current position - * so that the type field is consumed. For advanced use only. - */ -int ossl_quic_wire_skip_frame_header(PACKET *pkt, uint64_t *type); - -/* - * Determines how many ranges are needed to decode a QUIC ACK frame. - * - * The number of ranges which must be allocated before the call to - * ossl_quic_wire_decode_frame_ack is written to *total_ranges. - * - * The PACKET is not advanced. - */ -int ossl_quic_wire_peek_frame_ack_num_ranges(const PACKET *pkt, - uint64_t *total_ranges); - -/* - * Decodes a QUIC ACK frame. The ack_ranges field of the passed structure should - * point to a preallocated array of ACK ranges and the num_ack_ranges field - * should specify the length of allocation. - * - * *total_ranges is written with the number of ranges in the decoded frame, - * which may be greater than the number of ranges which were decoded (i.e. if - * num_ack_ranges was too small to decode all ranges). - * - * On success, this function modifies the num_ack_ranges field to indicate the - * number of ranges in the decoded frame. This is the number of entries in the - * ACK ranges array written by this function; any additional entries are not - * modified. - * - * If the number of ACK ranges in the decoded frame exceeds that in - * num_ack_ranges, as many ACK ranges as possible are decoded into the range - * array. The caller can use the value written to *total_ranges to detect this - * condition, as *total_ranges will exceed num_ack_ranges. - * - * If ack is NULL, the frame is still decoded, but only *total_ranges is - * written. This can be used to determine the number of ranges which must be - * allocated. - * - * The ack_delay_exponent argument specifies the index of a power of two used to - * decode the ack_delay field. This must match the ack_delay_exponent value used - * to encode the frame. - */ -int ossl_quic_wire_decode_frame_ack(PACKET *pkt, - uint32_t ack_delay_exponent, - OSSL_QUIC_FRAME_ACK *ack, - uint64_t *total_ranges); - -/* - * Decodes a QUIC RESET_STREAM frame. - */ -int ossl_quic_wire_decode_frame_reset_stream(PACKET *pkt, - OSSL_QUIC_FRAME_RESET_STREAM *f); - -/* - * Decodes a QUIC STOP_SENDING frame. - */ -int ossl_quic_wire_decode_frame_stop_sending(PACKET *pkt, - OSSL_QUIC_FRAME_STOP_SENDING *f); - -/* - * Decodes a QUIC CRYPTO frame. - * - * f->data is set to point inside the packet buffer inside the PACKET, therefore - * it is safe to access for as long as the packet buffer exists. If nodata is - * set to 1 then reading the PACKET stops after the frame header and f->data is - * set to NULL. - */ -int ossl_quic_wire_decode_frame_crypto(PACKET *pkt, int nodata, - OSSL_QUIC_FRAME_CRYPTO *f); - -/* - * Decodes a QUIC NEW_TOKEN frame. *token is written with a pointer to the token - * bytes and *token_len is written with the length of the token in bytes. - */ -int ossl_quic_wire_decode_frame_new_token(PACKET *pkt, - const unsigned char **token, - size_t *token_len); - -/* - * Decodes a QUIC STREAM frame. - * - * If nodata is set to 1 then reading the PACKET stops after the frame header - * and f->data is set to NULL. In this case f->len will also be 0 in the event - * that "has_explicit_len" is 0. - * - * If the frame did not contain an offset field, f->offset is set to 0, as the - * absence of an offset field is equivalent to an offset of 0. - * - * If the frame contained a length field, f->has_explicit_len is set to 1 and - * the length of the data is placed in f->len. This function ensures that the - * length does not exceed the packet buffer, thus it is safe to access f->data. - * - * If the frame did not contain a length field, this means that the frame runs - * until the end of the packet. This function sets f->has_explicit_len to zero, - * and f->len to the amount of data remaining in the input buffer. Therefore, - * this function should be used with a PACKET representing a single packet (and - * not e.g. multiple packets). - * - * Note also that this means f->len is always valid after this function returns - * successfully, regardless of the value of f->has_explicit_len. - * - * f->data points inside the packet buffer inside the PACKET, therefore it is - * safe to access for as long as the packet buffer exists. - * - * f->is_fin is set according to whether the frame was marked as ending the - * stream. - */ -int ossl_quic_wire_decode_frame_stream(PACKET *pkt, int nodata, - OSSL_QUIC_FRAME_STREAM *f); - -/* - * Decodes a QUIC MAX_DATA frame. The Maximum Data field is written to - * *max_data. - */ -int ossl_quic_wire_decode_frame_max_data(PACKET *pkt, - uint64_t *max_data); - -/* - * Decodes a QUIC MAX_STREAM_DATA frame. The Stream ID is written to *stream_id - * and Maximum Stream Data field is written to *max_stream_data. - */ -int ossl_quic_wire_decode_frame_max_stream_data(PACKET *pkt, - uint64_t *stream_id, - uint64_t *max_stream_data); -/* - * Decodes a QUIC MAX_STREAMS frame. The Maximum Streams field is written to - * *max_streams. - * - * Whether the limit concerns bidirectional streams or unidirectional streams is - * denoted by the frame type; the caller should examine the frame type to - * determine this. - */ -int ossl_quic_wire_decode_frame_max_streams(PACKET *pkt, - uint64_t *max_streams); - -/* - * Decodes a QUIC DATA_BLOCKED frame. The Maximum Data field is written to - * *max_data. - */ -int ossl_quic_wire_decode_frame_data_blocked(PACKET *pkt, - uint64_t *max_data); - -/* - * Decodes a QUIC STREAM_DATA_BLOCKED frame. The Stream ID and Maximum Stream - * Data fields are written to *stream_id and *max_stream_data respectively. - */ -int ossl_quic_wire_decode_frame_stream_data_blocked(PACKET *pkt, - uint64_t *stream_id, - uint64_t *max_stream_data); - -/* - * Decodes a QUIC STREAMS_BLOCKED frame. The Maximum Streams field is written to - * *max_streams. - * - * Whether the limit concerns bidirectional streams or unidirectional streams is - * denoted by the frame type; the caller should examine the frame type to - * determine this. - */ -int ossl_quic_wire_decode_frame_streams_blocked(PACKET *pkt, - uint64_t *max_streams); - - -/* - * Decodes a QUIC NEW_CONNECTION_ID frame. The logical representation of the - * frame is written to *f. - * - * The conn_id field is set to point to the connection ID string inside the - * packet buffer; it is therefore valid for as long as the PACKET's buffer is - * valid. The conn_id_len field is set to the length of the connection ID string - * in bytes. - */ -int ossl_quic_wire_decode_frame_new_conn_id(PACKET *pkt, - OSSL_QUIC_FRAME_NEW_CONN_ID *f); - -/* - * Decodes a QUIC RETIRE_CONNECTION_ID frame. The Sequence Number field - * is written to *seq_num. - */ -int ossl_quic_wire_decode_frame_retire_conn_id(PACKET *pkt, - uint64_t *seq_num); - -/* - * Decodes a QUIC PATH_CHALLENGE frame. The Data field is written to *data. - */ -int ossl_quic_wire_decode_frame_path_challenge(PACKET *pkt, - uint64_t *data); - -/* - * Decodes a QUIC PATH_CHALLENGE frame. The Data field is written to *data. - */ -int ossl_quic_wire_decode_frame_path_response(PACKET *pkt, - uint64_t *data); - -/* - * Decodes a QUIC CONNECTION_CLOSE frame. The logical representation - * of the frame is written to *f. - * - * The reason field is set to point to the UTF-8 reason string inside - * the packet buffer; it is therefore valid for as long as the PACKET's - * buffer is valid. The reason_len field is set to the length of the - * reason string in bytes. - * - * IMPORTANT: The reason string is not zero-terminated. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_wire_decode_frame_conn_close(PACKET *pkt, - OSSL_QUIC_FRAME_CONN_CLOSE *f); - -/* - * Decodes one or more PADDING frames. PADDING frames have no arguments. - * - * Returns the number of PADDING frames decoded or 0 on error. - */ -size_t ossl_quic_wire_decode_padding(PACKET *pkt); - -/* - * Decodes a PING frame. The frame has no arguments. - */ -int ossl_quic_wire_decode_frame_ping(PACKET *pkt); - -/* - * Decodes a HANDSHAKE_DONE frame. The frame has no arguments. - */ -int ossl_quic_wire_decode_frame_handshake_done(PACKET *pkt); - -/* - * Peeks at the ID of the next QUIC transport parameter TLV in the stream. - * The ID is written to *id. - */ -int ossl_quic_wire_peek_transport_param(PACKET *pkt, uint64_t *id); - -/* - * Decodes a QUIC transport parameter TLV. A pointer to the value buffer is - * returned on success. This points inside the PACKET's buffer and is therefore - * valid as long as the PACKET's buffer is valid. - * - * The transport parameter ID is written to *id (if non-NULL) and the length of - * the payload in bytes is written to *len. - * - * Returns NULL on failure. - */ -const unsigned char *ossl_quic_wire_decode_transport_param_bytes(PACKET *pkt, - uint64_t *id, - size_t *len); - -/* - * Decodes a QUIC transport parameter TLV containing a variable-length integer. - * - * The transport parameter ID is written to *id (if non-NULL) and the value is - * written to *value. - */ -int ossl_quic_wire_decode_transport_param_int(PACKET *pkt, - uint64_t *id, - uint64_t *value); - -/* - * Decodes a QUIC transport parameter TLV containing a connection ID. - * - * The transport parameter ID is written to *id (if non-NULL) and the value is - * written to *value. - */ -int ossl_quic_wire_decode_transport_param_cid(PACKET *pkt, - uint64_t *id, - QUIC_CONN_ID *cid); - -/* - * Decodes a QUIC transport parameter TLV containing a preferred_address. - */ -typedef struct quic_preferred_addr_st { - uint16_t ipv4_port, ipv6_port; - unsigned char ipv4[4], ipv6[16]; - QUIC_STATELESS_RESET_TOKEN stateless_reset; - QUIC_CONN_ID cid; -} QUIC_PREFERRED_ADDR; - -int ossl_quic_wire_decode_transport_param_preferred_addr(PACKET *pkt, - QUIC_PREFERRED_ADDR *p); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_wire_pkt.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_wire_pkt.h deleted file mode 100644 index 18a483fc..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_wire_pkt.h +++ /dev/null @@ -1,629 +0,0 @@ -/* - * 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_QUIC_WIRE_PKT_H -# define OSSL_QUIC_WIRE_PKT_H - -# include -# include "internal/packet_quic.h" -# include "internal/quic_types.h" - -# ifndef OPENSSL_NO_QUIC - -# define QUIC_VERSION_NONE ((uint32_t)0) /* Used for version negotiation */ -# define QUIC_VERSION_1 ((uint32_t)1) /* QUIC v1 */ - -/* QUIC logical packet type. These do not match wire values. */ -# define QUIC_PKT_TYPE_INITIAL 1 -# define QUIC_PKT_TYPE_0RTT 2 -# define QUIC_PKT_TYPE_HANDSHAKE 3 -# define QUIC_PKT_TYPE_RETRY 4 -# define QUIC_PKT_TYPE_1RTT 5 -# define QUIC_PKT_TYPE_VERSION_NEG 6 - -/* - * Determine encryption level from packet type. Returns QUIC_ENC_LEVEL_NUM if - * the packet is not of a type which is encrypted. - */ -static ossl_inline ossl_unused uint32_t -ossl_quic_pkt_type_to_enc_level(uint32_t pkt_type) -{ - switch (pkt_type) { - case QUIC_PKT_TYPE_INITIAL: - return QUIC_ENC_LEVEL_INITIAL; - case QUIC_PKT_TYPE_HANDSHAKE: - return QUIC_ENC_LEVEL_HANDSHAKE; - case QUIC_PKT_TYPE_0RTT: - return QUIC_ENC_LEVEL_0RTT; - case QUIC_PKT_TYPE_1RTT: - return QUIC_ENC_LEVEL_1RTT; - default: - return QUIC_ENC_LEVEL_NUM; - } -} - -static ossl_inline ossl_unused uint32_t -ossl_quic_enc_level_to_pkt_type(uint32_t enc_level) -{ - switch (enc_level) { - case QUIC_ENC_LEVEL_INITIAL: - return QUIC_PKT_TYPE_INITIAL; - case QUIC_ENC_LEVEL_HANDSHAKE: - return QUIC_PKT_TYPE_HANDSHAKE; - case QUIC_ENC_LEVEL_0RTT: - return QUIC_PKT_TYPE_0RTT; - case QUIC_ENC_LEVEL_1RTT: - return QUIC_PKT_TYPE_1RTT; - default: - return UINT32_MAX; - } -} - -/* Determine if a packet type contains an encrypted payload. */ -static ossl_inline ossl_unused int -ossl_quic_pkt_type_is_encrypted(uint32_t pkt_type) -{ - switch (pkt_type) { - case QUIC_PKT_TYPE_RETRY: - case QUIC_PKT_TYPE_VERSION_NEG: - return 0; - default: - return 1; - } -} - -/* Determine if a packet type contains a PN field. */ -static ossl_inline ossl_unused int -ossl_quic_pkt_type_has_pn(uint32_t pkt_type) -{ - /* - * Currently a packet has a PN iff it is encrypted. This could change - * someday. - */ - return ossl_quic_pkt_type_is_encrypted(pkt_type); -} - -/* - * Determine if a packet type can appear with other packets in a datagram. Some - * packet types must be the sole packet in a datagram. - */ -static ossl_inline ossl_unused int -ossl_quic_pkt_type_can_share_dgram(uint32_t pkt_type) -{ - /* - * Currently only the encrypted packet types can share a datagram. This - * could change someday. - */ - return ossl_quic_pkt_type_is_encrypted(pkt_type); -} - -/* - * Determine if the packet type must come at the end of the datagram (due to the - * lack of a length field). - */ -static ossl_inline ossl_unused int -ossl_quic_pkt_type_must_be_last(uint32_t pkt_type) -{ - /* - * Any packet type which cannot share a datagram obviously must come last. - * 1-RTT also must come last as it lacks a length field. - */ - return !ossl_quic_pkt_type_can_share_dgram(pkt_type) - || pkt_type == QUIC_PKT_TYPE_1RTT; -} - -/* - * Determine if the packet type has a version field. - */ -static ossl_inline ossl_unused int -ossl_quic_pkt_type_has_version(uint32_t pkt_type) -{ - return pkt_type != QUIC_PKT_TYPE_1RTT && pkt_type != QUIC_PKT_TYPE_VERSION_NEG; -} - -/* - * Determine if the packet type has a SCID field. - */ -static ossl_inline ossl_unused int -ossl_quic_pkt_type_has_scid(uint32_t pkt_type) -{ - return pkt_type != QUIC_PKT_TYPE_1RTT; -} - -/* - * Smallest possible QUIC packet size as per RFC (aside from version negotiation - * packets). - */ -# define QUIC_MIN_VALID_PKT_LEN_CRYPTO 21 -# define QUIC_MIN_VALID_PKT_LEN_VERSION_NEG 7 -# define QUIC_MIN_VALID_PKT_LEN QUIC_MIN_VALID_PKT_LEN_VERSION_NEG - -typedef struct quic_pkt_hdr_ptrs_st QUIC_PKT_HDR_PTRS; - -/* - * QUIC Packet Header Protection - * ============================= - * - * Functions to apply and remove QUIC packet header protection. A header - * protector is initialised using ossl_quic_hdr_protector_init and must be - * destroyed using ossl_quic_hdr_protector_cleanup when no longer needed. - */ -typedef struct quic_hdr_protector_st { - OSSL_LIB_CTX *libctx; - const char *propq; - EVP_CIPHER_CTX *cipher_ctx; - EVP_CIPHER *cipher; - uint32_t cipher_id; -} QUIC_HDR_PROTECTOR; - -# define QUIC_HDR_PROT_CIPHER_AES_128 1 -# define QUIC_HDR_PROT_CIPHER_AES_256 2 -# define QUIC_HDR_PROT_CIPHER_CHACHA 3 - -/* - * Initialises a header protector. - * - * cipher_id: - * The header protection cipher method to use. One of - * QUIC_HDR_PROT_CIPHER_*. Must be chosen based on negotiated TLS cipher - * suite. - * - * quic_hp_key: - * This must be the "quic hp" key derived from a traffic secret. - * - * The length of the quic_hp_key must correspond to that expected for the - * given cipher ID. - * - * The header protector performs amortisable initialisation in this function, - * therefore a header protector should be used for as long as possible. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_hdr_protector_init(QUIC_HDR_PROTECTOR *hpr, - OSSL_LIB_CTX *libctx, - const char *propq, - uint32_t cipher_id, - const unsigned char *quic_hp_key, - size_t quic_hp_key_len); - -/* - * Destroys a header protector. This is also safe to call on a zero-initialized - * OSSL_QUIC_HDR_PROTECTOR structure which has not been initialized, or which - * has already been destroyed. - */ -void ossl_quic_hdr_protector_cleanup(QUIC_HDR_PROTECTOR *hpr); - -/* - * Removes header protection from a packet. The packet payload must currently be - * encrypted (i.e., you must remove header protection before decrypting packets - * received). The function examines the header buffer to determine which bytes - * of the header need to be decrypted. - * - * If this function fails, no data is modified. - * - * This is implemented as a call to ossl_quic_hdr_protector_decrypt_fields(). - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_hdr_protector_decrypt(QUIC_HDR_PROTECTOR *hpr, - QUIC_PKT_HDR_PTRS *ptrs); - -/* - * Applies header protection to a packet. The packet payload must already have - * been encrypted (i.e., you must apply header protection after encrypting - * a packet). The function examines the header buffer to determine which bytes - * of the header need to be encrypted. - * - * This is implemented as a call to ossl_quic_hdr_protector_encrypt_fields(). - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_hdr_protector_encrypt(QUIC_HDR_PROTECTOR *hpr, - QUIC_PKT_HDR_PTRS *ptrs); - -/* - * Removes header protection from a packet. The packet payload must currently - * be encrypted. This is a low-level function which assumes you have already - * determined which parts of the packet header need to be decrypted. - * - * sample: - * The range of bytes in the packet to be used to generate the header - * protection mask. It is permissible to set sample_len to the size of the - * remainder of the packet; this function will only use as many bytes as - * needed. If not enough sample bytes are provided, this function fails. - * - * first_byte: - * The first byte of the QUIC packet header to be decrypted. - * - * pn: - * Pointer to the start of the PN field. The caller is responsible - * for ensuring at least four bytes follow this pointer. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_hdr_protector_decrypt_fields(QUIC_HDR_PROTECTOR *hpr, - const unsigned char *sample, - size_t sample_len, - unsigned char *first_byte, - unsigned char *pn_bytes); - -/* - * Works analogously to ossl_hdr_protector_decrypt_fields, but applies header - * protection instead of removing it. - */ -int ossl_quic_hdr_protector_encrypt_fields(QUIC_HDR_PROTECTOR *hpr, - const unsigned char *sample, - size_t sample_len, - unsigned char *first_byte, - unsigned char *pn_bytes); - -/* - * QUIC Packet Header - * ================== - * - * This structure provides a logical representation of a QUIC packet header. - * - * QUIC packet formats fall into the following categories: - * - * Long Packets, which is subdivided into five possible packet types: - * Version Negotiation (a special case); - * Initial; - * 0-RTT; - * Handshake; and - * Retry - * - * Short Packets, which comprises only a single packet type (1-RTT). - * - * The packet formats vary and common fields are found in some packets but - * not others. The below table indicates which fields are present in which - * kinds of packet. * indicates header protection is applied. - * - * SLLLLL Legend: 1=1-RTT, i=Initial, 0=0-RTT, h=Handshake - * 1i0hrv r=Retry, v=Version Negotiation - * ------ - * 1i0hrv Header Form (0=Short, 1=Long) - * 1i0hr Fixed Bit (always 1) - * 1 Spin Bit - * 1 * Reserved Bits - * 1 * Key Phase - * 1i0h * Packet Number Length - * i0hr? Long Packet Type - * i0h Type-Specific Bits - * i0hr Version (note: always 0 for Version Negotiation packets) - * 1i0hrv Destination Connection ID - * i0hrv Source Connection ID - * 1i0h * Packet Number - * i Token - * i0h Length - * r Retry Token - * r Retry Integrity Tag - * - * For each field below, the conditions under which the field is valid are - * specified. If a field is not currently valid, it is initialized to a zero or - * NULL value. - */ -typedef struct quic_pkt_hdr_st { - /* [ALL] A QUIC_PKT_TYPE_* value. Always valid. */ - unsigned int type :8; - - /* [S] Value of the spin bit. Valid if (type == 1RTT). */ - unsigned int spin_bit :1; - - /* - * [S] Value of the Key Phase bit in the short packet. - * Valid if (type == 1RTT && !partial). - */ - unsigned int key_phase :1; - - /* - * [1i0h] Length of packet number in bytes. This is the decoded value. - * Valid if ((type == 1RTT || (version && type != RETRY)) && !partial). - */ - unsigned int pn_len :4; - - /* - * [ALL] Set to 1 if this is a partial decode because the packet header - * has not yet been deprotected. pn_len, pn and key_phase are not valid if - * this is set. - */ - unsigned int partial :1; - - /* - * [ALL] Whether the fixed bit was set. Note that only Version Negotiation - * packets are allowed to have this unset, so this will always be 1 for all - * other packet types (decode will fail if it is not set). Ignored when - * encoding unless encoding a Version Negotiation packet. - */ - unsigned int fixed :1; - - /* - * The unused bits in the low 4 bits of a Retry packet header's first byte. - * This is used to ensure that Retry packets have the same bit-for-bit - * representation in their header when decoding and encoding them again. - * This is necessary to validate Retry packet headers. - */ - unsigned int unused :4; - - /* - * The 'Reserved' bits in an Initial, Handshake, 0-RTT or 1-RTT packet - * header's first byte. These are provided so that the caller can validate - * that they are zero, as this must be done after packet protection is - * successfully removed to avoid creating a timing channel. - */ - unsigned int reserved :2; - - /* [L] Version field. Valid if (type != 1RTT). */ - uint32_t version; - - /* [ALL] The destination connection ID. Always valid. */ - QUIC_CONN_ID dst_conn_id; - - /* - * [L] The source connection ID. - * Valid if (type != 1RTT). - */ - QUIC_CONN_ID src_conn_id; - - /* - * [1i0h] Relatively-encoded packet number in raw, encoded form. The correct - * decoding of this value is context-dependent. The number of bytes valid in - * this buffer is determined by pn_len above. If the decode was partial, - * this field is not valid. - * - * Valid if ((type == 1RTT || (version && type != RETRY)) && !partial). - */ - unsigned char pn[4]; - - /* - * [i] Token field in Initial packet. Points to memory inside the decoded - * PACKET, and therefore is valid for as long as the PACKET's buffer is - * valid. token_len is the length of the token in bytes. - * - * Valid if (type == INITIAL). - */ - const unsigned char *token; - size_t token_len; - - /* - * [ALL] Payload length in bytes. - * - * Though 1-RTT, Retry and Version Negotiation packets do not contain an - * explicit length field, this field is always valid and is used by the - * packet header encoding and decoding routines to describe the payload - * length, regardless of whether the packet type encoded or decoded uses an - * explicit length indication. - */ - size_t len; - - /* - * Pointer to start of payload data in the packet. Points to memory inside - * the decoded PACKET, and therefore is valid for as long as the PACKET'S - * buffer is valid. The length of the buffer in bytes is in len above. - * - * For Version Negotiation packets, points to the array of supported - * versions. - * - * For Retry packets, points to the Retry packet payload, which comprises - * the Retry Token followed by a 16-byte Retry Integrity Tag. - * - * Regardless of whether a packet is a Version Negotiation packet (where the - * payload contains a list of supported versions), a Retry packet (where the - * payload contains a Retry Token and Retry Integrity Tag), or any other - * packet type (where the payload contains frames), the payload is not - * validated and the user must parse the payload bearing this in mind. - * - * If the decode was partial (partial is set), this points to the start of - * the packet number field, rather than the protected payload, as the length - * of the packet number field is unknown. The len field reflects this in - * this case (i.e., the len field is the number of payload bytes plus the - * number of bytes comprising the PN). - */ - const unsigned char *data; -} QUIC_PKT_HDR; - -/* - * Extra information which can be output by the packet header decode functions - * for the assistance of the header protector. This avoids the header protector - * needing to partially re-decode the packet header. - */ -struct quic_pkt_hdr_ptrs_st { - unsigned char *raw_start; /* start of packet */ - unsigned char *raw_sample; /* start of sampling range */ - size_t raw_sample_len; /* maximum length of sampling range */ - - /* - * Start of PN field. Guaranteed to be NULL unless at least four bytes are - * available via this pointer. - */ - unsigned char *raw_pn; -}; - -/* - * If partial is 1, reads the unprotected parts of a protected packet header - * from a PACKET, performing a partial decode. - * - * If partial is 0, the input is assumed to have already had header protection - * removed, and all header fields are decoded. - * - * If nodata is 1, the input is assumed to have no payload data in it. Otherwise - * payload data must be present. - * - * On success, the logical decode of the packet header is written to *hdr. - * hdr->partial is set or cleared according to whether a partial decode was - * performed. *ptrs is filled with pointers to various parts of the packet - * buffer. - * - * In order to decode short packets, the connection ID length being used must be - * known contextually, and should be passed as short_conn_id_len. If - * short_conn_id_len is set to an invalid value (a value greater than - * QUIC_MAX_CONN_ID_LEN), this function fails when trying to decode a short - * packet, but succeeds for long packets. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_wire_decode_pkt_hdr(PACKET *pkt, - size_t short_conn_id_len, - int partial, - int nodata, - QUIC_PKT_HDR *hdr, - QUIC_PKT_HDR_PTRS *ptrs); - -/* - * Encodes a packet header. The packet is written to pkt. - * - * The length of the (encrypted) packet payload should be written to hdr->len - * and will be placed in the serialized packet header. The payload data itself - * is not copied; the caller should write hdr->len bytes of encrypted payload to - * the WPACKET immediately after the call to this function. However, - * WPACKET_reserve_bytes is called for the payload size. - * - * This function does not apply header protection. You must apply header - * protection yourself after calling this function. *ptrs is filled with - * pointers which can be passed to a header protector, but this must be - * performed after the encrypted payload is written. - * - * The pointers in *ptrs are direct pointers into the WPACKET buffer. If more - * data is written to the WPACKET buffer, WPACKET buffer reallocations may - * occur, causing these pointers to become invalid. Therefore, you must not call - * any write WPACKET function between this call and the call to - * ossl_quic_hdr_protector_encrypt. This function calls WPACKET_reserve_bytes - * for the payload length, so you may assume hdr->len bytes are already free to - * write at the WPACKET cursor location once this function returns successfully. - * It is recommended that you call this function, write the encrypted payload, - * call ossl_quic_hdr_protector_encrypt, and then call - * WPACKET_allocate_bytes(hdr->len). - * - * Version Negotiation and Retry packets do not use header protection; for these - * header types, the fields in *ptrs are all written as zero. Version - * Negotiation, Retry and 1-RTT packets do not contain a Length field, but - * hdr->len bytes of data are still reserved in the WPACKET. - * - * If serializing a short packet and short_conn_id_len does not match the DCID - * specified in hdr, the function fails. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_wire_encode_pkt_hdr(WPACKET *pkt, - size_t short_conn_id_len, - const QUIC_PKT_HDR *hdr, - QUIC_PKT_HDR_PTRS *ptrs); - -/* - * Retrieves only the DCID from a packet header. This is intended for demuxer - * use. It avoids the need to parse the rest of the packet header twice. - * - * Information on packet length is not decoded, as this only needs to be used on - * the first packet in a datagram, therefore this takes a buffer and not a - * PACKET. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_wire_get_pkt_hdr_dst_conn_id(const unsigned char *buf, - size_t buf_len, - size_t short_conn_id_len, - QUIC_CONN_ID *dst_conn_id); - -/* - * Precisely predicts the encoded length of a packet header structure. - * - * May return 0 if the packet header is not valid, but the fact that this - * function returns non-zero does not guarantee that - * ossl_quic_wire_encode_pkt_hdr() will succeed. - */ -int ossl_quic_wire_get_encoded_pkt_hdr_len(size_t short_conn_id_len, - const QUIC_PKT_HDR *hdr); - -/* - * Packet Number Encoding - * ====================== - */ - -/* - * Decode an encoded packet header QUIC PN. - * - * enc_pn is the raw encoded PN to decode. enc_pn_len is its length in bytes as - * indicated by packet headers. largest_pn is the largest PN successfully - * processed in the relevant PN space. - * - * The resulting PN is written to *res_pn. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_wire_decode_pkt_hdr_pn(const unsigned char *enc_pn, - size_t enc_pn_len, - QUIC_PN largest_pn, - QUIC_PN *res_pn); - -/* - * Determine how many bytes should be used to encode a PN. Returns the number of - * bytes (which will be in range [1, 4]). - */ -int ossl_quic_wire_determine_pn_len(QUIC_PN pn, QUIC_PN largest_acked); - -/* - * Encode a PN for a packet header using the specified number of bytes, which - * should have been determined by calling ossl_quic_wire_determine_pn_len. The - * PN encoding process is done in two parts to allow the caller to override PN - * encoding length if it wishes. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_wire_encode_pkt_hdr_pn(QUIC_PN pn, - unsigned char *enc_pn, - size_t enc_pn_len); - -/* - * Retry Integrity Tags - * ==================== - */ - -# define QUIC_RETRY_INTEGRITY_TAG_LEN 16 - -/* - * Validate a retry integrity tag. Returns 1 if the tag is valid. - * - * Must be called on a hdr with a type of QUIC_PKT_TYPE_RETRY with a valid data - * pointer. - * - * client_initial_dcid must be the original DCID used by the client in its first - * Initial packet, as this is used to calculate the Retry Integrity Tag. - * - * Returns 0 if the tag is invalid, if called on any other type of packet or if - * the body is too short. - */ -int ossl_quic_validate_retry_integrity_tag(OSSL_LIB_CTX *libctx, - const char *propq, - const QUIC_PKT_HDR *hdr, - const QUIC_CONN_ID *client_initial_dcid); - -/* - * Calculates a retry integrity tag. Returns 0 on error, for example if hdr does - * not have a type of QUIC_PKT_TYPE_RETRY. - * - * client_initial_dcid must be the original DCID used by the client in its first - * Initial packet, as this is used to calculate the Retry Integrity Tag. - * - * tag must point to a buffer of QUIC_RETRY_INTEGRITY_TAG_LEN bytes in size. - * - * Note that hdr->data must point to the Retry packet body, and hdr->len must - * include the space for the Retry Integrity Tag. (This means that you can - * easily fill in a tag in a Retry packet you are generating by calling this - * function and passing (hdr->data + hdr->len - QUIC_RETRY_INTEGRITY_TAG_LEN) as - * the tag argument.) This function fails if hdr->len is too short to contain a - * Retry Integrity Tag. - */ -int ossl_quic_calculate_retry_integrity_tag(OSSL_LIB_CTX *libctx, - const char *propq, - const QUIC_PKT_HDR *hdr, - const QUIC_CONN_ID *client_initial_dcid, - unsigned char *tag); - -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/recordmethod.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/recordmethod.h deleted file mode 100644 index 53bd4ca6..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/recordmethod.h +++ /dev/null @@ -1,339 +0,0 @@ -/* - * 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_INTERNAL_RECORDMETHOD_H -# define OSSL_INTERNAL_RECORDMETHOD_H -# pragma once - -# include - -/* - * We use the term "record" here to refer to a packet of data. Records are - * typically protected via a cipher and MAC, or an AEAD cipher (although not - * always). This usage of the term record is consistent with the TLS concept. - * In QUIC the term "record" is not used but it is analogous to the QUIC term - * "packet". The interface in this file applies to all protocols that protect - * records/packets of data, i.e. (D)TLS and QUIC. The term record is used to - * refer to both contexts. - */ - -/* - * An OSSL_RECORD_METHOD is a protocol specific method which provides the - * functions for reading and writing records for that protocol. Which - * OSSL_RECORD_METHOD to use for a given protocol is defined by the SSL_METHOD. - */ -typedef struct ossl_record_method_st OSSL_RECORD_METHOD; - -/* - * An OSSL_RECORD_LAYER is just an externally defined opaque pointer created by - * the method - */ -typedef struct ossl_record_layer_st OSSL_RECORD_LAYER; - - -# define OSSL_RECORD_ROLE_CLIENT 0 -# define OSSL_RECORD_ROLE_SERVER 1 - -# define OSSL_RECORD_DIRECTION_READ 0 -# define OSSL_RECORD_DIRECTION_WRITE 1 - -/* - * Protection level. For <= TLSv1.2 only "NONE" and "APPLICATION" are used. - */ -# define OSSL_RECORD_PROTECTION_LEVEL_NONE 0 -# define OSSL_RECORD_PROTECTION_LEVEL_EARLY 1 -# define OSSL_RECORD_PROTECTION_LEVEL_HANDSHAKE 2 -# define OSSL_RECORD_PROTECTION_LEVEL_APPLICATION 3 - -# define OSSL_RECORD_RETURN_SUCCESS 1 -# define OSSL_RECORD_RETURN_RETRY 0 -# define OSSL_RECORD_RETURN_NON_FATAL_ERR -1 -# define OSSL_RECORD_RETURN_FATAL -2 -# define OSSL_RECORD_RETURN_EOF -3 - -/* - * Template for creating a record. A record consists of the |type| of data it - * will contain (e.g. alert, handshake, application data, etc) along with a - * buffer of payload data in |buf| of length |buflen|. - */ -struct ossl_record_template_st { - unsigned char type; - unsigned int version; - const unsigned char *buf; - size_t buflen; -}; - -typedef struct ossl_record_template_st OSSL_RECORD_TEMPLATE; - -/* - * Rather than a "method" approach, we could make this fetchable - Should we? - * There could be some complexity in finding suitable record layer implementations - * e.g. we need to find one that matches the negotiated protocol, cipher, - * extensions, etc. The selection_cb approach given above doesn't work so well - * if unknown third party providers with OSSL_RECORD_METHOD implementations are - * loaded. - */ - -/* - * If this becomes public API then we will need functions to create and - * free an OSSL_RECORD_METHOD, as well as functions to get/set the various - * function pointers....unless we make it fetchable. - */ -struct ossl_record_method_st { - /* - * Create a new OSSL_RECORD_LAYER object for handling the protocol version - * set by |vers|. |role| is 0 for client and 1 for server. |direction| - * indicates either read or write. |level| is the protection level as - * described above. |settings| are mandatory settings that will cause the - * new() call to fail if they are not understood (for example to require - * Encrypt-Then-Mac support). |options| are optional settings that will not - * cause the new() call to fail if they are not understood (for example - * whether to use "read ahead" or not). - * - * The BIO in |transport| is the BIO for the underlying transport layer. - * Where the direction is "read", then this BIO will only ever be used for - * reading data. Where the direction is "write", then this BIO will only - * every be used for writing data. - * - * An SSL object will always have at least 2 OSSL_RECORD_LAYER objects in - * force at any one time (one for reading and one for writing). In some - * protocols more than 2 might be used (e.g. in DTLS for retransmitting - * messages from an earlier epoch). - * - * The created OSSL_RECORD_LAYER object is stored in *ret on success (or - * NULL otherwise). The return value will be one of - * OSSL_RECORD_RETURN_SUCCESS, OSSL_RECORD_RETURN_FATAL or - * OSSL_RECORD_RETURN_NON_FATAL. A non-fatal return means that creation of - * the record layer has failed because it is unsuitable, but an alternative - * record layer can be tried instead. - */ - - /* - * If we eventually make this fetchable then we will need to use something - * other than EVP_CIPHER. Also mactype would not be a NID, but a string. For - * now though, this works. - */ - int (*new_record_layer)(OSSL_LIB_CTX *libctx, - const char *propq, int vers, - int role, int direction, - int level, - uint16_t epoch, - unsigned char *secret, - size_t secretlen, - unsigned char *key, - size_t keylen, - unsigned char *iv, - size_t ivlen, - unsigned char *mackey, - size_t mackeylen, - const EVP_CIPHER *ciph, - size_t taglen, - int mactype, - const EVP_MD *md, - COMP_METHOD *comp, - const EVP_MD *kdfdigest, - BIO *prev, - BIO *transport, - BIO *next, - BIO_ADDR *local, - BIO_ADDR *peer, - const OSSL_PARAM *settings, - const OSSL_PARAM *options, - const OSSL_DISPATCH *fns, - void *cbarg, - void *rlarg, - OSSL_RECORD_LAYER **ret); - int (*free)(OSSL_RECORD_LAYER *rl); - - /* Returns 1 if we have unprocessed data buffered or 0 otherwise */ - int (*unprocessed_read_pending)(OSSL_RECORD_LAYER *rl); - - /* - * Returns 1 if we have processed data buffered that can be read or 0 otherwise - * - not necessarily app data - */ - int (*processed_read_pending)(OSSL_RECORD_LAYER *rl); - - /* - * The amount of processed app data that is internally buffered and - * available to read - */ - size_t (*app_data_pending)(OSSL_RECORD_LAYER *rl); - - /* - * Find out the maximum number of records that the record layer is prepared - * to process in a single call to write_records. It is the caller's - * responsibility to ensure that no call to write_records exceeds this - * number of records. |type| is the type of the records that the caller - * wants to write, and |len| is the total amount of data that it wants - * to send. |maxfrag| is the maximum allowed fragment size based on user - * configuration, or TLS parameter negotiation. |*preffrag| contains on - * entry the default fragment size that will actually be used based on user - * configuration. This will always be less than or equal to |maxfrag|. On - * exit the record layer may update this to an alternative fragment size to - * be used. This must always be less than or equal to |maxfrag|. - */ - size_t (*get_max_records)(OSSL_RECORD_LAYER *rl, uint8_t type, size_t len, - size_t maxfrag, size_t *preffrag); - - /* - * Write |numtempl| records from the array of record templates pointed to - * by |templates|. Each record should be no longer than the value returned - * by get_max_record_len(), and there should be no more records than the - * value returned by get_max_records(). - * Where possible the caller will attempt to ensure that all records are the - * same length, except the last record. This may not always be possible so - * the record method implementation should not rely on this being the case. - * In the event of a retry the caller should call retry_write_records() - * to try again. No more calls to write_records() should be attempted until - * retry_write_records() returns success. - * Buffers allocated for the record templates can be freed immediately after - * write_records() returns - even in the case a retry. - * The record templates represent the plaintext payload. The encrypted - * output is written to the |transport| BIO. - * Returns: - * 1 on success - * 0 on retry - * -1 on failure - */ - int (*write_records)(OSSL_RECORD_LAYER *rl, OSSL_RECORD_TEMPLATE *templates, - size_t numtempl); - - /* - * Retry a previous call to write_records. The caller should continue to - * call this until the function returns with success or failure. After - * each retry more of the data may have been incrementally sent. - * Returns: - * 1 on success - * 0 on retry - * -1 on failure - */ - int (*retry_write_records)(OSSL_RECORD_LAYER *rl); - - /* - * Read a record and return the record layer version and record type in - * the |rversion| and |type| parameters. |*data| is set to point to a - * record layer buffer containing the record payload data and |*datalen| - * is filled in with the length of that data. The |epoch| and |seq_num| - * values are only used if DTLS has been negotiated. In that case they are - * filled in with the epoch and sequence number from the record. - * An opaque record layer handle for the record is returned in |*rechandle| - * which is used in a subsequent call to |release_record|. The buffer must - * remain available until all the bytes from record are released via one or - * more release_record calls. - * - * Internally the OSSL_RECORD_METHOD implementation may read/process - * multiple records in one go and buffer them. - */ - int (*read_record)(OSSL_RECORD_LAYER *rl, void **rechandle, int *rversion, - uint8_t *type, const unsigned char **data, size_t *datalen, - uint16_t *epoch, unsigned char *seq_num); - /* - * Release length bytes from a buffer associated with a record previously - * read with read_record. Once all the bytes from a record are released, the - * whole record and its associated buffer is released. Records are - * guaranteed to be released in the order that they are read. - */ - int (*release_record)(OSSL_RECORD_LAYER *rl, void *rechandle, size_t length); - - /* - * In the event that a fatal error is returned from the functions above then - * get_alert_code() can be called to obtain a more details identifier for - * the error. In (D)TLS this is the alert description code. - */ - int (*get_alert_code)(OSSL_RECORD_LAYER *rl); - - /* - * Update the transport BIO from the one originally set in the - * new_record_layer call - */ - int (*set1_bio)(OSSL_RECORD_LAYER *rl, BIO *bio); - - /* Called when protocol negotiation selects a protocol version to use */ - int (*set_protocol_version)(OSSL_RECORD_LAYER *rl, int version); - - /* - * Whether we are allowed to receive unencrypted alerts, even if we might - * otherwise expect encrypted records. Ignored by protocol versions where - * this isn't relevant - */ - void (*set_plain_alerts)(OSSL_RECORD_LAYER *rl, int allow); - - /* - * Called immediately after creation of the record layer if we are in a - * first handshake. Also called at the end of the first handshake - */ - void (*set_first_handshake)(OSSL_RECORD_LAYER *rl, int first); - - /* - * Set the maximum number of pipelines that the record layer should process. - * The default is 1. - */ - void (*set_max_pipelines)(OSSL_RECORD_LAYER *rl, size_t max_pipelines); - - /* - * Called to tell the record layer whether we are currently "in init" or - * not. Default at creation of the record layer is "yes". - */ - void (*set_in_init)(OSSL_RECORD_LAYER *rl, int in_init); - - /* - * Get a short or long human readable description of the record layer state - */ - void (*get_state)(OSSL_RECORD_LAYER *rl, const char **shortstr, - const char **longstr); - - /* - * Set new options or modify ones that were originally specified in the - * new_record_layer call. - */ - int (*set_options)(OSSL_RECORD_LAYER *rl, const OSSL_PARAM *options); - - const COMP_METHOD *(*get_compression)(OSSL_RECORD_LAYER *rl); - - /* - * Set the maximum fragment length to be used for the record layer. This - * will override any previous value supplied for the "max_frag_len" - * setting during construction of the record layer. - */ - void (*set_max_frag_len)(OSSL_RECORD_LAYER *rl, size_t max_frag_len); - - /* - * The maximum expansion in bytes that the record layer might add while - * writing a record - */ - size_t (*get_max_record_overhead)(OSSL_RECORD_LAYER *rl); - - /* - * Increment the record sequence number - */ - int (*increment_sequence_ctr)(OSSL_RECORD_LAYER *rl); - - /* - * Allocate read or write buffers. Does nothing if already allocated. - * Assumes default buffer length and 1 pipeline. - */ - int (*alloc_buffers)(OSSL_RECORD_LAYER *rl); - - /* - * Free read or write buffers. Fails if there is pending read or write - * data. Buffers are automatically reallocated on next read/write. - */ - int (*free_buffers)(OSSL_RECORD_LAYER *rl); -}; - - -/* Standard built-in record methods */ -extern const OSSL_RECORD_METHOD ossl_tls_record_method; -# ifndef OPENSSL_NO_KTLS -extern const OSSL_RECORD_METHOD ossl_ktls_record_method; -# endif -extern const OSSL_RECORD_METHOD ossl_dtls_record_method; - -#endif /* !defined(OSSL_INTERNAL_RECORDMETHOD_H) */ 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 deleted file mode 100644 index 4c9ab266..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/refcount.h +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright 2016-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_REFCOUNT_H -# define OSSL_INTERNAL_REFCOUNT_H -# pragma once - -# include -# 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 - -# if defined(HAVE_C11_ATOMICS) && defined(ATOMIC_INT_LOCK_FREE) \ - && ATOMIC_INT_LOCK_FREE > 0 - -# define HAVE_ATOMICS 1 - -typedef struct { - _Atomic int val; -} CRYPTO_REF_COUNT; - -static inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = atomic_fetch_add_explicit(&refcnt->val, 1, memory_order_relaxed) + 1; - return 1; -} - -/* - * Changes to shared structure other than reference counter have to be - * serialized. And any kind of serialization implies a release fence. This - * means that by the time reference counter is decremented all other - * changes are visible on all processors. Hence decrement itself can be - * relaxed. In case it hits zero, object will be destructed. Since it's - * last use of the object, destructor programmer might reason that access - * 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(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = atomic_fetch_sub_explicit(&refcnt->val, 1, memory_order_relaxed) - 1; - if (*ret == 0) - atomic_thread_fence(memory_order_acquire); - return 1; -} - -static inline int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = atomic_load_explicit(&refcnt->val, memory_order_relaxed); - return 1; -} - -# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) && __GCC_ATOMIC_INT_LOCK_FREE > 0 - -# define HAVE_ATOMICS 1 - -typedef struct { - int val; -} CRYPTO_REF_COUNT; - -static __inline__ int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = __atomic_fetch_add(&refcnt->val, 1, __ATOMIC_RELAXED) + 1; - return 1; -} - -static __inline__ int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = __atomic_fetch_sub(&refcnt->val, 1, __ATOMIC_RELAXED) - 1; - if (*ret == 0) - __atomic_thread_fence(__ATOMIC_ACQUIRE); - return 1; -} - -static __inline__ int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = __atomic_load_n(&refcnt->val, __ATOMIC_RELAXED); - return 1; -} - -# elif defined(__ICL) && defined(_WIN32) -# define HAVE_ATOMICS 1 - -typedef struct { - volatile int val; -} CRYPTO_REF_COUNT; - -static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedExchangeAdd((void *)&refcnt->val, 1) + 1; - return 1; -} - -static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *val, int *refcnt) -{ - *ret = _InterlockedExchangeAdd((void *)&refcnt->val, -1) - 1; - return 1; -} - -static __inline int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedOr((void *)&refcnt->val, 0); - return 1; -} - -# elif defined(_MSC_VER) && _MSC_VER>=1200 - -# define HAVE_ATOMICS 1 - -typedef struct { - volatile int val; -} 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 - -static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedExchangeAdd_nf(&refcnt->val, 1) + 1; - return 1; -} - -static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedExchangeAdd_nf(&refcnt->val, -1) - 1; - if (*ret == 0) - __dmb(_ARM_BARRIER_ISH); - return 1; -} - -static __inline int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedOr_nf((void *)&refcnt->val, 0); - return 1; -} - -# else -# if !defined(_WIN32_WCE) -# pragma intrinsic(_InterlockedExchangeAdd) -# else -# 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 - -static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedExchangeAdd(&refcnt->val, 1) + 1; - return 1; -} - -static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedExchangeAdd(&refcnt->val, -1) - 1; - return 1; -} - -static __inline int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedExchangeAdd(&refcnt->val, 0); - return 1; -} - -# endif - -# 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 struct { - int val; -# ifdef OPENSSL_THREADS - CRYPTO_RWLOCK *lock; -# endif -} CRYPTO_REF_COUNT; - -# ifdef OPENSSL_THREADS - -static ossl_unused ossl_inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, - int *ret) -{ - return CRYPTO_atomic_add(&refcnt->val, 1, ret, refcnt->lock); -} - -static ossl_unused ossl_inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, - int *ret) -{ - return CRYPTO_atomic_add(&refcnt->val, -1, ret, refcnt->lock); -} - -static ossl_unused ossl_inline int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, - int *ret) -{ - return CRYPTO_atomic_load_int(&refcnt->val, ret, refcnt->lock); -} - -# define CRYPTO_NEW_FREE_DEFINED 1 -static ossl_unused ossl_inline int CRYPTO_NEW_REF(CRYPTO_REF_COUNT *refcnt, int n) -{ - refcnt->val = n; - refcnt->lock = CRYPTO_THREAD_lock_new(); - if (refcnt->lock == NULL) { - ERR_raise(ERR_LIB_CRYPTO, ERR_R_CRYPTO_LIB); - return 0; - } - return 1; -} - -static ossl_unused ossl_inline void CRYPTO_FREE_REF(CRYPTO_REF_COUNT *refcnt) \ -{ - if (refcnt != NULL) - CRYPTO_THREAD_lock_free(refcnt->lock); -} - -# else /* OPENSSL_THREADS */ - -static ossl_unused ossl_inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, - int *ret) -{ - refcnt->val++; - *ret = refcnt->val; - return 1; -} - -static ossl_unused ossl_inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, - int *ret) -{ - refcnt->val--; - *ret = refcnt->val; - return 1; -} - -static ossl_unused ossl_inline int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, - int *ret) -{ - *ret = refcnt->val; - return 1; -} - -# endif /* OPENSSL_THREADS */ -# endif - -# ifndef CRYPTO_NEW_FREE_DEFINED -static ossl_unused ossl_inline int CRYPTO_NEW_REF(CRYPTO_REF_COUNT *refcnt, int n) -{ - refcnt->val = n; - return 1; -} - -static ossl_unused ossl_inline void CRYPTO_FREE_REF(CRYPTO_REF_COUNT *refcnt) \ -{ -} -# endif /* CRYPTO_NEW_FREE_DEFINED */ -#undef CRYPTO_NEW_FREE_DEFINED - -# if !defined(NDEBUG) && !defined(OPENSSL_NO_STDIO) -# define REF_ASSERT_ISNT(test) \ - (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0) -# else -# define REF_ASSERT_ISNT(i) -# 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.val, (void *)object) - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/ring_buf.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/ring_buf.h deleted file mode 100644 index 436f1ca1..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/ring_buf.h +++ /dev/null @@ -1,277 +0,0 @@ -/* - * 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_INTERNAL_RING_BUF_H -# define OSSL_INTERNAL_RING_BUF_H -# pragma once - -# include /* For 'ossl_inline' */ -# include "internal/safe_math.h" - -/* - * ================================================================== - * Byte-wise ring buffer which supports pushing and popping blocks of multiple - * bytes at a time. The logical offset of each byte for the purposes of a QUIC - * stream is tracked. Bytes can be popped from the ring buffer in two stages; - * first they are popped, and then they are culled. Bytes which have been popped - * but not yet culled will not be overwritten, and can be restored. - */ -struct ring_buf { - void *start; - size_t alloc; /* size of buffer allocation in bytes */ - - /* - * Logical offset of the head (where we append to). This is the current size - * of the QUIC stream. This increases monotonically. - */ - uint64_t head_offset; - - /* - * Logical offset of the cull tail. Data is no longer needed and is - * deallocated as the cull tail advances, which occurs as data is - * acknowledged. This increases monotonically. - */ - uint64_t ctail_offset; -}; - -OSSL_SAFE_MATH_UNSIGNED(u64, uint64_t) - -#define MAX_OFFSET (((uint64_t)1) << 62) /* QUIC-imposed limit */ - -static ossl_inline int ring_buf_init(struct ring_buf *r) -{ - r->start = NULL; - r->alloc = 0; - r->head_offset = r->ctail_offset = 0; - return 1; -} - -static ossl_inline void ring_buf_destroy(struct ring_buf *r, int cleanse) -{ - if (cleanse) - OPENSSL_clear_free(r->start, r->alloc); - else - OPENSSL_free(r->start); - r->start = NULL; - r->alloc = 0; -} - -static ossl_inline size_t ring_buf_used(struct ring_buf *r) -{ - return (size_t)(r->head_offset - r->ctail_offset); -} - -static ossl_inline size_t ring_buf_avail(struct ring_buf *r) -{ - return r->alloc - ring_buf_used(r); -} - -static ossl_inline int ring_buf_write_at(struct ring_buf *r, - uint64_t logical_offset, - const unsigned char *buf, - size_t buf_len) -{ - size_t avail, idx, l; - unsigned char *start = r->start; - int i, err = 0; - - avail = ring_buf_avail(r); - if (logical_offset < r->ctail_offset - || safe_add_u64(logical_offset, buf_len, &err) - > safe_add_u64(r->head_offset, avail, &err) - || safe_add_u64(r->head_offset, buf_len, &err) - > MAX_OFFSET - || err) - return 0; - - for (i = 0; buf_len > 0 && i < 2; ++i) { - idx = logical_offset % r->alloc; - l = r->alloc - idx; - if (buf_len < l) - l = buf_len; - - memcpy(start + idx, buf, l); - if (r->head_offset < logical_offset + l) - r->head_offset = logical_offset + l; - - logical_offset += l; - buf += l; - buf_len -= l; - } - - assert(buf_len == 0); - - return 1; -} - -static ossl_inline size_t ring_buf_push(struct ring_buf *r, - const unsigned char *buf, - size_t buf_len) -{ - size_t pushed = 0, avail, idx, l; - unsigned char *start = r->start; - - for (;;) { - avail = ring_buf_avail(r); - if (buf_len > avail) - buf_len = avail; - - if (buf_len > MAX_OFFSET - r->head_offset) - buf_len = (size_t)(MAX_OFFSET - r->head_offset); - - if (buf_len == 0) - break; - - idx = r->head_offset % r->alloc; - l = r->alloc - idx; - if (buf_len < l) - l = buf_len; - - memcpy(start + idx, buf, l); - r->head_offset += l; - buf += l; - buf_len -= l; - pushed += l; - } - - return pushed; -} - -static ossl_inline const unsigned char *ring_buf_get_ptr(const struct ring_buf *r, - uint64_t logical_offset, - size_t *max_len) -{ - unsigned char *start = r->start; - size_t idx; - - if (logical_offset >= r->head_offset || logical_offset < r->ctail_offset) - return NULL; - idx = logical_offset % r->alloc; - *max_len = r->alloc - idx; - return start + idx; -} - -/* - * Retrieves data out of the read side of the ring buffer starting at the given - * logical offset. *buf is set to point to a contiguous span of bytes and - * *buf_len is set to the number of contiguous bytes. After this function - * returns, there may or may not be more bytes available at the logical offset - * of (logical_offset + *buf_len) by calling this function again. If the logical - * offset is out of the range retained by the ring buffer, returns 0, else - * returns 1. A logical offset at the end of the range retained by the ring - * buffer is not considered an error and is returned with a *buf_len of 0. - * - * The ring buffer state is not changed. - */ -static ossl_inline int ring_buf_get_buf_at(const struct ring_buf *r, - uint64_t logical_offset, - const unsigned char **buf, - size_t *buf_len) -{ - const unsigned char *start = r->start; - size_t idx, l; - - if (logical_offset > r->head_offset || logical_offset < r->ctail_offset) - return 0; - - if (r->alloc == 0) { - *buf = NULL; - *buf_len = 0; - return 1; - } - - idx = logical_offset % r->alloc; - l = (size_t)(r->head_offset - logical_offset); - if (l > r->alloc - idx) - l = r->alloc - idx; - - *buf = start + idx; - *buf_len = l; - return 1; -} - -static ossl_inline void ring_buf_cpop_range(struct ring_buf *r, - uint64_t start, uint64_t end, - int cleanse) -{ - assert(end >= start); - - if (start > r->ctail_offset || end >= MAX_OFFSET) - return; - - if (cleanse && r->alloc > 0 && end > r->ctail_offset) { - size_t idx = r->ctail_offset % r->alloc; - uint64_t cleanse_end = end + 1; - size_t l; - - if (cleanse_end > r->head_offset) - cleanse_end = r->head_offset; - l = (size_t)(cleanse_end - r->ctail_offset); - if (l > r->alloc - idx) { - OPENSSL_cleanse((unsigned char *)r->start + idx, r->alloc - idx); - l -= r->alloc - idx; - idx = 0; - } - if (l > 0) - OPENSSL_cleanse((unsigned char *)r->start + idx, l); - } - - r->ctail_offset = end + 1; - /* Allow culling unpushed data */ - if (r->head_offset < r->ctail_offset) - r->head_offset = r->ctail_offset; -} - -static ossl_inline int ring_buf_resize(struct ring_buf *r, size_t num_bytes, - int cleanse) -{ - struct ring_buf rnew = {0}; - const unsigned char *src = NULL; - size_t src_len = 0, copied = 0; - - if (num_bytes == r->alloc) - return 1; - - if (num_bytes < ring_buf_used(r)) - return 0; - - rnew.start = OPENSSL_malloc(num_bytes); - if (rnew.start == NULL) - return 0; - - rnew.alloc = num_bytes; - rnew.head_offset = r->head_offset - ring_buf_used(r); - rnew.ctail_offset = rnew.head_offset; - - for (;;) { - if (!ring_buf_get_buf_at(r, r->ctail_offset + copied, &src, &src_len)) { - OPENSSL_free(rnew.start); - return 0; - } - - if (src_len == 0) - break; - - if (ring_buf_push(&rnew, src, src_len) != src_len) { - OPENSSL_free(rnew.start); - return 0; - } - - copied += src_len; - } - - assert(rnew.head_offset == r->head_offset); - rnew.ctail_offset = r->ctail_offset; - - ring_buf_destroy(r, cleanse); - memcpy(r, &rnew, sizeof(*r)); - return 1; -} - -#endif /* OSSL_INTERNAL_RING_BUF_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/safe_math.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/safe_math.h deleted file mode 100644 index be37e6ab..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/safe_math.h +++ /dev/null @@ -1,443 +0,0 @@ -/* - * Copyright 2021-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_SAFE_MATH_H -# define OSSL_INTERNAL_SAFE_MATH_H -# pragma once - -# include /* For 'ossl_inline' */ - -# ifndef OPENSSL_NO_BUILTIN_OVERFLOW_CHECKING -# ifdef __has_builtin -# define has(func) __has_builtin(func) -# elif __GNUC__ > 5 -# define has(func) 1 -# endif -# endif /* OPENSSL_NO_BUILTIN_OVERFLOW_CHECKING */ - -# ifndef has -# define has(func) 0 -# endif - -/* - * Safe addition helpers - */ -# if has(__builtin_add_overflow) -# define OSSL_SAFE_MATH_ADDS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_add_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - type r; \ - \ - if (!__builtin_add_overflow(a, b, &r)) \ - return r; \ - *err |= 1; \ - return a < 0 ? min : max; \ - } - -# define OSSL_SAFE_MATH_ADDU(type_name, type, max) \ - static ossl_inline ossl_unused type safe_add_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - type r; \ - \ - if (!__builtin_add_overflow(a, b, &r)) \ - return r; \ - *err |= 1; \ - return a + b; \ - } - -# else /* has(__builtin_add_overflow) */ -# define OSSL_SAFE_MATH_ADDS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_add_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if ((a < 0) ^ (b < 0) \ - || (a > 0 && b <= max - a) \ - || (a < 0 && b >= min - a) \ - || a == 0) \ - return a + b; \ - *err |= 1; \ - return a < 0 ? min : max; \ - } - -# define OSSL_SAFE_MATH_ADDU(type_name, type, max) \ - static ossl_inline ossl_unused type safe_add_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b > max - a) \ - *err |= 1; \ - return a + b; \ - } -# endif /* has(__builtin_add_overflow) */ - -/* - * Safe subtraction helpers - */ -# if has(__builtin_sub_overflow) -# define OSSL_SAFE_MATH_SUBS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_sub_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - type r; \ - \ - if (!__builtin_sub_overflow(a, b, &r)) \ - return r; \ - *err |= 1; \ - return a < 0 ? min : max; \ - } - -# else /* has(__builtin_sub_overflow) */ -# define OSSL_SAFE_MATH_SUBS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_sub_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (!((a < 0) ^ (b < 0)) \ - || (b > 0 && a >= min + b) \ - || (b < 0 && a <= max + b) \ - || b == 0) \ - return a - b; \ - *err |= 1; \ - return a < 0 ? min : max; \ - } - -# endif /* has(__builtin_sub_overflow) */ - -# define OSSL_SAFE_MATH_SUBU(type_name, type) \ - static ossl_inline ossl_unused type safe_sub_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b > a) \ - *err |= 1; \ - return a - b; \ - } - -/* - * Safe multiplication helpers - */ -# if has(__builtin_mul_overflow) -# define OSSL_SAFE_MATH_MULS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_mul_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - type r; \ - \ - if (!__builtin_mul_overflow(a, b, &r)) \ - return r; \ - *err |= 1; \ - return (a < 0) ^ (b < 0) ? min : max; \ - } - -# define OSSL_SAFE_MATH_MULU(type_name, type, max) \ - static ossl_inline ossl_unused type safe_mul_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - type r; \ - \ - if (!__builtin_mul_overflow(a, b, &r)) \ - return r; \ - *err |= 1; \ - return a * b; \ - } - -# else /* has(__builtin_mul_overflow) */ -# define OSSL_SAFE_MATH_MULS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_mul_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (a == 0 || b == 0) \ - return 0; \ - if (a == 1) \ - return b; \ - if (b == 1) \ - return a; \ - if (a != min && b != min) { \ - const type x = a < 0 ? -a : a; \ - const type y = b < 0 ? -b : b; \ - \ - if (x <= max / y) \ - return a * b; \ - } \ - *err |= 1; \ - return (a < 0) ^ (b < 0) ? min : max; \ - } - -# define OSSL_SAFE_MATH_MULU(type_name, type, max) \ - static ossl_inline ossl_unused type safe_mul_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b != 0 && a > max / b) \ - *err |= 1; \ - return a * b; \ - } -# endif /* has(__builtin_mul_overflow) */ - -/* - * Safe division helpers - */ -# define OSSL_SAFE_MATH_DIVS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_div_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b == 0) { \ - *err |= 1; \ - return a < 0 ? min : max; \ - } \ - if (b == -1 && a == min) { \ - *err |= 1; \ - return max; \ - } \ - return a / b; \ - } - -# define OSSL_SAFE_MATH_DIVU(type_name, type, max) \ - static ossl_inline ossl_unused type safe_div_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b != 0) \ - return a / b; \ - *err |= 1; \ - return max; \ - } - -/* - * Safe modulus helpers - */ -# define OSSL_SAFE_MATH_MODS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_mod_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b == 0) { \ - *err |= 1; \ - return 0; \ - } \ - if (b == -1 && a == min) { \ - *err |= 1; \ - return max; \ - } \ - return a % b; \ - } - -# define OSSL_SAFE_MATH_MODU(type_name, type) \ - static ossl_inline ossl_unused type safe_mod_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b != 0) \ - return a % b; \ - *err |= 1; \ - return 0; \ - } - -/* - * Safe negation helpers - */ -# define OSSL_SAFE_MATH_NEGS(type_name, type, min) \ - static ossl_inline ossl_unused type safe_neg_ ## type_name(type a, \ - int *err) \ - { \ - if (a != min) \ - return -a; \ - *err |= 1; \ - return min; \ - } - -# define OSSL_SAFE_MATH_NEGU(type_name, type) \ - static ossl_inline ossl_unused type safe_neg_ ## type_name(type a, \ - int *err) \ - { \ - if (a == 0) \ - return a; \ - *err |= 1; \ - return 1 + ~a; \ - } - -/* - * Safe absolute value helpers - */ -# define OSSL_SAFE_MATH_ABSS(type_name, type, min) \ - static ossl_inline ossl_unused type safe_abs_ ## type_name(type a, \ - int *err) \ - { \ - if (a != min) \ - return a < 0 ? -a : a; \ - *err |= 1; \ - return min; \ - } - -# define OSSL_SAFE_MATH_ABSU(type_name, type) \ - static ossl_inline ossl_unused type safe_abs_ ## type_name(type a, \ - int *err) \ - { \ - return a; \ - } - -/* - * Safe fused multiply divide helpers - * - * These are a bit obscure: - * . They begin by checking the denominator for zero and getting rid of this - * corner case. - * - * . Second is an attempt to do the multiplication directly, if it doesn't - * overflow, the quotient is returned (for signed values there is a - * potential problem here which isn't present for unsigned). - * - * . Finally, the multiplication/division is transformed so that the larger - * of the numerators is divided first. This requires a remainder - * correction: - * - * a b / c = (a / c) b + (a mod c) b / c, where a > b - * - * The individual operations need to be overflow checked (again signed - * being more problematic). - * - * The algorithm used is not perfect but it should be "good enough". - */ -# define OSSL_SAFE_MATH_MULDIVS(type_name, type, max) \ - static ossl_inline ossl_unused type safe_muldiv_ ## type_name(type a, \ - type b, \ - type c, \ - int *err) \ - { \ - int e2 = 0; \ - type q, r, x, y; \ - \ - if (c == 0) { \ - *err |= 1; \ - return a == 0 || b == 0 ? 0 : max; \ - } \ - x = safe_mul_ ## type_name(a, b, &e2); \ - if (!e2) \ - return safe_div_ ## type_name(x, c, err); \ - if (b > a) { \ - x = b; \ - b = a; \ - a = x; \ - } \ - q = safe_div_ ## type_name(a, c, err); \ - r = safe_mod_ ## type_name(a, c, err); \ - x = safe_mul_ ## type_name(r, b, err); \ - y = safe_mul_ ## type_name(q, b, err); \ - q = safe_div_ ## type_name(x, c, err); \ - return safe_add_ ## type_name(y, q, err); \ - } - -# define OSSL_SAFE_MATH_MULDIVU(type_name, type, max) \ - static ossl_inline ossl_unused type safe_muldiv_ ## type_name(type a, \ - type b, \ - type c, \ - int *err) \ - { \ - int e2 = 0; \ - type x, y; \ - \ - if (c == 0) { \ - *err |= 1; \ - return a == 0 || b == 0 ? 0 : max; \ - } \ - x = safe_mul_ ## type_name(a, b, &e2); \ - if (!e2) \ - return x / c; \ - if (b > a) { \ - x = b; \ - b = a; \ - a = x; \ - } \ - x = safe_mul_ ## type_name(a % c, b, err); \ - y = safe_mul_ ## type_name(a / c, b, err); \ - return safe_add_ ## type_name(y, x / c, err); \ - } - -/* - * Calculate a / b rounding up: - * i.e. a / b + (a % b != 0) - * Which is usually (less safely) converted to (a + b - 1) / b - * If you *know* that b != 0, then it's safe to ignore err. - */ -#define OSSL_SAFE_MATH_DIV_ROUND_UP(type_name, type, max) \ - static ossl_inline ossl_unused type safe_div_round_up_ ## type_name \ - (type a, type b, int *errp) \ - { \ - type x; \ - int *err, err_local = 0; \ - \ - /* Allow errors to be ignored by callers */ \ - err = errp != NULL ? errp : &err_local; \ - /* Fast path, both positive */ \ - if (b > 0 && a > 0) { \ - /* Faster path: no overflow concerns */ \ - if (a < max - b) \ - return (a + b - 1) / b; \ - return a / b + (a % b != 0); \ - } \ - if (b == 0) { \ - *err |= 1; \ - return a == 0 ? 0 : max; \ - } \ - if (a == 0) \ - return 0; \ - /* Rather slow path because there are negatives involved */ \ - x = safe_mod_ ## type_name(a, b, err); \ - return safe_add_ ## type_name(safe_div_ ## type_name(a, b, err), \ - x != 0, err); \ - } - -/* Calculate ranges of types */ -# define OSSL_SAFE_MATH_MINS(type) ((type)1 << (sizeof(type) * 8 - 1)) -# define OSSL_SAFE_MATH_MAXS(type) (~OSSL_SAFE_MATH_MINS(type)) -# define OSSL_SAFE_MATH_MAXU(type) (~(type)0) - -/* - * Wrapper macros to create all the functions of a given type - */ -# define OSSL_SAFE_MATH_SIGNED(type_name, type) \ - OSSL_SAFE_MATH_ADDS(type_name, type, OSSL_SAFE_MATH_MINS(type), \ - OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_SUBS(type_name, type, OSSL_SAFE_MATH_MINS(type), \ - OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_MULS(type_name, type, OSSL_SAFE_MATH_MINS(type), \ - OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_DIVS(type_name, type, OSSL_SAFE_MATH_MINS(type), \ - OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_MODS(type_name, type, OSSL_SAFE_MATH_MINS(type), \ - OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_DIV_ROUND_UP(type_name, type, \ - OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_MULDIVS(type_name, type, OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_NEGS(type_name, type, OSSL_SAFE_MATH_MINS(type)) \ - OSSL_SAFE_MATH_ABSS(type_name, type, OSSL_SAFE_MATH_MINS(type)) - -# define OSSL_SAFE_MATH_UNSIGNED(type_name, type) \ - OSSL_SAFE_MATH_ADDU(type_name, type, OSSL_SAFE_MATH_MAXU(type)) \ - OSSL_SAFE_MATH_SUBU(type_name, type) \ - OSSL_SAFE_MATH_MULU(type_name, type, OSSL_SAFE_MATH_MAXU(type)) \ - OSSL_SAFE_MATH_DIVU(type_name, type, OSSL_SAFE_MATH_MAXU(type)) \ - OSSL_SAFE_MATH_MODU(type_name, type) \ - OSSL_SAFE_MATH_DIV_ROUND_UP(type_name, type, \ - OSSL_SAFE_MATH_MAXU(type)) \ - OSSL_SAFE_MATH_MULDIVU(type_name, type, OSSL_SAFE_MATH_MAXU(type)) \ - OSSL_SAFE_MATH_NEGU(type_name, type) \ - OSSL_SAFE_MATH_ABSU(type_name, type) - -#endif /* OSSL_INTERNAL_SAFE_MATH_H */ 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 deleted file mode 100644 index 80ad86e5..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/sha3.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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 deleted file mode 100644 index f6496c81..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/sizes.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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/internal/sm3.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sm3.h deleted file mode 100644 index db1d61f0..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/sm3.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2017 Ribose Inc. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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_SM3_H -# define OSSL_INTERNAL_SM3_H -# pragma once - -# include - -# ifdef OPENSSL_NO_SM3 -# error SM3 is disabled. -# endif - -# define SM3_DIGEST_LENGTH 32 -# define SM3_WORD unsigned int - -# define SM3_CBLOCK 64 -# define SM3_LBLOCK (SM3_CBLOCK/4) - -typedef struct SM3state_st { - SM3_WORD A, B, C, D, E, F, G, H; - SM3_WORD Nl, Nh; - SM3_WORD data[SM3_LBLOCK]; - unsigned int num; -} SM3_CTX; - -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); - -#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 deleted file mode 100644 index 2550c56b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/sockets.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - * 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 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 -# endif -# ifdef WIN32 -# define NO_SYS_UN_H -# endif -# ifdef OPENSSL_SYS_VMS -# define NO_SYS_PARAM_H -# define NO_SYS_UN_H -# endif - -# ifdef OPENSSL_NO_SOCK - -# elif defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) -# if defined(__DJGPP__) -# define WATT32 -# define WATT32_NO_OLDIES -# include -# include -# include -# include -# include -# include -# elif defined(_WIN32_WCE) && _WIN32_WCE<410 -# define getservbyname _masked_declaration_getservbyname -# endif -# if !defined(IPPROTO_IP) - /* winsock[2].h was included already? */ -# include -# endif -# ifdef getservbyname - /* this is used to be wcecompat/include/winsock_extras.h */ -# undef getservbyname -struct servent *PASCAL getservbyname(const char *, const char *); -# endif - -# ifdef _WIN64 -/* - * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because - * the value constitutes an index in per-process table of limited size - * and not a real pointer. And we also depend on fact that all processors - * Windows run on happen to be two's-complement, which allows to - * interchange INVALID_SOCKET and -1. - */ -# define socket(d,t,p) ((int)socket(d,t,p)) -# define accept(s,f,l) ((int)accept(s,f,l)) -# endif - -/* Windows have other names for shutdown() reasons */ -# ifndef SHUT_RD -# define SHUT_RD SD_RECEIVE -# endif -# ifndef SHUT_WR -# define SHUT_WR SD_SEND -# endif -# ifndef SHUT_RDWR -# define SHUT_RDWR SD_BOTH -# endif - -# else -# if defined(__APPLE__) - /* - * This must be defined before including to get - * IPV6_RECVPKTINFO - */ -# define __APPLE_USE_RFC_3542 -# endif - -# ifndef NO_SYS_PARAM_H -# include -# endif -# ifdef OPENSSL_SYS_VXWORKS -# include -# endif - -# include -# if defined(OPENSSL_SYS_VMS) -typedef size_t socklen_t; /* Currently appears to be missing on VMS */ -# endif -# if defined(OPENSSL_SYS_VMS_NODECC) -# include -# include -# include -# else -# include -# 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) -# endif -# endif -# ifdef FILIO_H -# include /* FIONBIO in some SVR4, e.g. unixware, solaris */ -# endif -# include -# include -# include -# endif - -# ifdef OPENSSL_SYS_AIX -# include -# endif - -# ifdef OPENSSL_SYS_UNIX -# ifndef OPENSSL_SYS_TANDEM -# include -# endif -# include -# endif - -# ifndef VMS -# include -# else -# if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000) - /* ioctl is only in VMS > 7.0 and when socketshr is not used */ -# include -# endif -# include -# if defined(TCPIP_TYPE_SOCKETSHR) -# include -# endif -# endif - -# ifndef INVALID_SOCKET -# define INVALID_SOCKET (-1) -# endif -# endif - -/* - * Some IPv6 implementations are broken, you can disable them in known - * bad versions. - */ -# if !defined(OPENSSL_USE_IPV6) -# if defined(AF_INET6) -# define OPENSSL_USE_IPV6 1 -# else -# define OPENSSL_USE_IPV6 0 -# 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 -# define get_last_socket_error_is_eintr() (get_last_socket_error() == EINTR) - -# if defined(OPENSSL_SYS_WINDOWS) -# undef get_last_socket_error -# undef clear_socket_error -# undef get_last_socket_error_is_eintr -# define get_last_socket_error() WSAGetLastError() -# define clear_socket_error() WSASetLastError(0) -# define get_last_socket_error_is_eintr() (get_last_socket_error() == WSAEINTR) -# define readsocket(s,b,n) recv((s),(b),(n),0) -# define writesocket(s,b,n) send((s),(b),(n),0) -# elif defined(__DJGPP__) -# 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) -# elif defined(OPENSSL_SYS_VMS) -# define ioctlsocket(a,b,c) ioctl(a,b,c) -# define closesocket(s) close(s) -# define readsocket(s,b,n) recv((s),(b),(n),0) -# define writesocket(s,b,n) send((s),(b),(n),0) -# elif defined(OPENSSL_SYS_VXWORKS) -# define ioctlsocket(a,b,c) ioctl((a),(b),(int)(c)) -# 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) -# define readsocket(s,b,n) read((s),(b),(n)) -# 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/ssl.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/ssl.h deleted file mode 100644 index 8a0c7974..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/ssl.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 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 - */ - -#include - -#ifndef OSSL_INTERNAL_SSL_H -# define OSSL_INTERNAL_SSL_H -# pragma once - -typedef void (*ossl_msg_cb)(int write_p, int version, int content_type, - const void *buf, size_t len, SSL *ssl, void *arg); - -int ossl_ssl_get_error(const SSL *s, int i, int check_err); - -/* Set if this is the QUIC handshake layer */ -# define TLS1_FLAGS_QUIC 0x2000 - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/ssl3_cbc.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/ssl3_cbc.h deleted file mode 100644 index 4fb5da19..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/ssl3_cbc.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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 - */ - -#include - -/* tls_pad.c */ -int ssl3_cbc_remove_padding_and_mac(size_t *reclen, - size_t origreclen, - unsigned char *recdata, - unsigned char **mac, - int *alloced, - size_t block_size, size_t mac_size, - OSSL_LIB_CTX *libctx); - -int tls1_cbc_remove_padding_and_mac(size_t *reclen, - size_t origreclen, - unsigned char *recdata, - unsigned char **mac, - int *alloced, - size_t block_size, size_t mac_size, - int aead, - OSSL_LIB_CTX *libctx); - -/* ssl3_cbc.c */ -__owur char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx); -__owur int ssl3_cbc_digest_record(const EVP_MD *md, - unsigned char *md_out, - size_t *md_out_size, - const unsigned char *header, - const unsigned char *data, - size_t data_size, - size_t data_plus_mac_plus_padding_size, - const unsigned char *mac_secret, - size_t mac_secret_length, char is_sslv3); 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 deleted file mode 100644 index fd7f7e33..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/sslconf.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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 - */ - -#ifndef OSSL_INTERNAL_SSLCONF_H -# define OSSL_INTERNAL_SSLCONF_H -# pragma once - -typedef struct ssl_conf_cmd_st SSL_CONF_CMD; - -const SSL_CONF_CMD *conf_ssl_get(size_t idx, const char **name, size_t *cnt); -int conf_ssl_name_find(const char *name, size_t *idx); -void conf_ssl_get_cmd(const SSL_CONF_CMD *cmd, size_t idx, char **cmdstr, - char **arg); - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/statem.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/statem.h deleted file mode 100644 index 136e6523..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/statem.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright 2015-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_STATEM_H -# define OSSL_INTERNAL_STATEM_H - -/***************************************************************************** - * * - * These enums should be considered PRIVATE to the state machine. No * - * non-state machine code should need to use these * - * * - *****************************************************************************/ -/* - * Valid return codes used for functions performing work prior to or after - * sending or receiving a message - */ -typedef enum { - /* Something went wrong */ - WORK_ERROR, - /* We're done working and there shouldn't be anything else to do after */ - WORK_FINISHED_STOP, - /* We're done working move onto the next thing */ - WORK_FINISHED_CONTINUE, - /* We're working on phase A */ - WORK_MORE_A, - /* We're working on phase B */ - WORK_MORE_B, - /* We're working on phase C */ - WORK_MORE_C -} WORK_STATE; - -/* Write transition return codes */ -typedef enum { - /* Something went wrong */ - WRITE_TRAN_ERROR, - /* A transition was successfully completed and we should continue */ - WRITE_TRAN_CONTINUE, - /* There is no more write work to be done */ - WRITE_TRAN_FINISHED -} WRITE_TRAN; - -/* Message flow states */ -typedef enum { - /* No handshake in progress */ - MSG_FLOW_UNINITED, - /* A permanent error with this connection */ - MSG_FLOW_ERROR, - /* We are reading messages */ - MSG_FLOW_READING, - /* We are writing messages */ - MSG_FLOW_WRITING, - /* Handshake has finished */ - MSG_FLOW_FINISHED -} MSG_FLOW_STATE; - -/* Read states */ -typedef enum { - READ_STATE_HEADER, - READ_STATE_BODY, - READ_STATE_POST_PROCESS -} READ_STATE; - -/* Write states */ -typedef enum { - WRITE_STATE_TRANSITION, - WRITE_STATE_PRE_WORK, - WRITE_STATE_SEND, - WRITE_STATE_POST_WORK -} WRITE_STATE; - -typedef enum { - CON_FUNC_ERROR = 0, - CON_FUNC_SUCCESS, - CON_FUNC_DONT_SEND -} CON_FUNC_RETURN; - -typedef int (*ossl_statem_mutate_handshake_cb)(const unsigned char *msgin, - size_t inlen, - unsigned char **msgout, - size_t *outlen, - void *arg); - -typedef void (*ossl_statem_finish_mutate_handshake_cb)(void *arg); - -/***************************************************************************** - * * - * This structure should be considered "opaque" to anything outside of the * - * state machine. No non-state machine code should be accessing the members * - * of this structure. * - * * - *****************************************************************************/ - -struct ossl_statem_st { - MSG_FLOW_STATE state; - WRITE_STATE write_state; - WORK_STATE write_state_work; - READ_STATE read_state; - WORK_STATE read_state_work; - OSSL_HANDSHAKE_STATE hand_state; - /* The handshake state requested by an API call (e.g. HelloRequest) */ - OSSL_HANDSHAKE_STATE request_state; - int in_init; - int read_state_first_init; - /* true when we are actually in SSL_accept() or SSL_connect() */ - int in_handshake; - /* - * True when are processing a "real" handshake that needs cleaning up (not - * just a HelloRequest or similar). - */ - int cleanuphand; - /* Should we skip the CertificateVerify message? */ - unsigned int no_cert_verify; - int use_timer; - - /* Test harness message mutator callbacks */ - ossl_statem_mutate_handshake_cb mutate_handshake_cb; - ossl_statem_finish_mutate_handshake_cb finish_mutate_handshake_cb; - void *mutatearg; - unsigned int write_in_progress : 1; -}; -typedef struct ossl_statem_st OSSL_STATEM; - -/***************************************************************************** - * * - * The following macros/functions represent the libssl internal API to the * - * state machine. Any libssl code may call these functions/macros * - * * - *****************************************************************************/ - -typedef struct ssl_connection_st SSL_CONNECTION; - -__owur int ossl_statem_accept(SSL *s); -__owur int ossl_statem_connect(SSL *s); -OSSL_HANDSHAKE_STATE ossl_statem_get_state(SSL_CONNECTION *s); -void ossl_statem_clear(SSL_CONNECTION *s); -void ossl_statem_set_renegotiate(SSL_CONNECTION *s); -void ossl_statem_send_fatal(SSL_CONNECTION *s, int al); -void ossl_statem_fatal(SSL_CONNECTION *s, int al, int reason, - const char *fmt, ...); -# define SSLfatal_alert(s, al) ossl_statem_send_fatal((s), (al)) -# define SSLfatal(s, al, r) SSLfatal_data((s), (al), (r), NULL) -# define SSLfatal_data \ - (ERR_new(), \ - ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \ - ossl_statem_fatal) - -int ossl_statem_in_error(const SSL_CONNECTION *s); -void ossl_statem_set_in_init(SSL_CONNECTION *s, int init); -int ossl_statem_get_in_handshake(SSL_CONNECTION *s); -void ossl_statem_set_in_handshake(SSL_CONNECTION *s, int inhand); -__owur int ossl_statem_skip_early_data(SSL_CONNECTION *s); -void ossl_statem_check_finish_init(SSL_CONNECTION *s, int send); -void ossl_statem_set_hello_verify_done(SSL_CONNECTION *s); -__owur int ossl_statem_app_data_allowed(SSL_CONNECTION *s); -__owur int ossl_statem_export_allowed(SSL_CONNECTION *s); -__owur int ossl_statem_export_early_allowed(SSL_CONNECTION *s); - -/* Flush the write BIO */ -int statem_flush(SSL_CONNECTION *s); - -int ossl_statem_set_mutator(SSL *s, - ossl_statem_mutate_handshake_cb mutate_handshake_cb, - ossl_statem_finish_mutate_handshake_cb finish_mutate_handshake_cb, - void *mutatearg); - -#endif 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 deleted file mode 100644 index 33bae51e..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/symhacks.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread.h deleted file mode 100644 index 8c5bad77..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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_INTERNAL_THREAD_H -# define OPENSSL_INTERNAL_THREAD_H -# include -# include -# include -# include -# include -# include "crypto/context.h" - -void *ossl_crypto_thread_start(OSSL_LIB_CTX *ctx, CRYPTO_THREAD_ROUTINE start, - void *data); -int ossl_crypto_thread_join(void *task, CRYPTO_THREAD_RETVAL *retval); -int ossl_crypto_thread_clean(void *vhandle); -uint64_t ossl_get_avail_threads(OSSL_LIB_CTX *ctx); - -# if defined(OPENSSL_THREADS) - -# define OSSL_LIB_CTX_GET_THREADS(CTX) \ - ossl_lib_ctx_get_data(CTX, OSSL_LIB_CTX_THREAD_INDEX); - -typedef struct openssl_threads_st { - uint64_t max_threads; - uint64_t active_threads; - CRYPTO_MUTEX *lock; - CRYPTO_CONDVAR *cond_finished; -} OSSL_LIB_CTX_THREADS; - -# endif /* defined(OPENSSL_THREADS) */ - -#endif /* OPENSSL_INTERNAL_THREAD_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread_arch.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread_arch.h deleted file mode 100644 index 1bfc0ebb..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread_arch.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * 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_THREAD_ARCH_H -# define OSSL_INTERNAL_THREAD_ARCH_H -# include -# include -# include "internal/time.h" - -# if defined(_WIN32) -# include -# endif - -# if defined(OPENSSL_THREADS) && defined(OPENSSL_SYS_UNIX) -# define OPENSSL_THREADS_POSIX -# elif defined(OPENSSL_THREADS) && defined(OPENSSL_SYS_VMS) -# define OPENSSL_THREADS_POSIX -# elif defined(OPENSSL_THREADS) && defined(OPENSSL_SYS_WINDOWS) && \ - defined(_WIN32_WINNT) -# if _WIN32_WINNT >= 0x0600 -# define OPENSSL_THREADS_WINNT -# elif _WIN32_WINNT >= 0x0501 -# define OPENSSL_THREADS_WINNT -# define OPENSSL_THREADS_WINNT_LEGACY -# else -# define OPENSSL_THREADS_NONE -# endif -# else -# define OPENSSL_THREADS_NONE -# endif - -# include - -typedef void CRYPTO_MUTEX; -typedef void CRYPTO_CONDVAR; - -CRYPTO_MUTEX *ossl_crypto_mutex_new(void); -void ossl_crypto_mutex_lock(CRYPTO_MUTEX *mutex); -int ossl_crypto_mutex_try_lock(CRYPTO_MUTEX *mutex); -void ossl_crypto_mutex_unlock(CRYPTO_MUTEX *mutex); -void ossl_crypto_mutex_free(CRYPTO_MUTEX **mutex); - -CRYPTO_CONDVAR *ossl_crypto_condvar_new(void); -void ossl_crypto_condvar_wait(CRYPTO_CONDVAR *cv, CRYPTO_MUTEX *mutex); -void ossl_crypto_condvar_wait_timeout(CRYPTO_CONDVAR *cv, CRYPTO_MUTEX *mutex, - OSSL_TIME deadline); -void ossl_crypto_condvar_broadcast(CRYPTO_CONDVAR *cv); -void ossl_crypto_condvar_signal(CRYPTO_CONDVAR *cv); -void ossl_crypto_condvar_free(CRYPTO_CONDVAR **cv); - -typedef uint32_t CRYPTO_THREAD_RETVAL; -typedef CRYPTO_THREAD_RETVAL (*CRYPTO_THREAD_ROUTINE)(void *); -typedef CRYPTO_THREAD_RETVAL (*CRYPTO_THREAD_ROUTINE_CB)(void *, - void (**)(void *), - void **); - -# define CRYPTO_THREAD_NO_STATE 0UL -# define CRYPTO_THREAD_FINISHED (1UL << 0) -# define CRYPTO_THREAD_JOIN_AWAIT (1UL << 1) -# define CRYPTO_THREAD_JOINED (1UL << 2) - -# define CRYPTO_THREAD_GET_STATE(THREAD, FLAG) ((THREAD)->state & (FLAG)) -# define CRYPTO_THREAD_GET_ERROR(THREAD, FLAG) (((THREAD)->state >> 16) & (FLAG)) - -typedef struct crypto_thread_st { - uint32_t state; - void *data; - CRYPTO_THREAD_ROUTINE routine; - CRYPTO_THREAD_RETVAL retval; - void *handle; - CRYPTO_MUTEX *lock; - CRYPTO_MUTEX *statelock; - CRYPTO_CONDVAR *condvar; - unsigned long thread_id; - int joinable; - OSSL_LIB_CTX *ctx; -} CRYPTO_THREAD; - -# if defined(OPENSSL_THREADS) - -# define CRYPTO_THREAD_UNSET_STATE(THREAD, FLAG) \ - do { \ - (THREAD)->state &= ~(FLAG); \ - } while ((void)0, 0) - -# define CRYPTO_THREAD_SET_STATE(THREAD, FLAG) \ - do { \ - (THREAD)->state |= (FLAG); \ - } while ((void)0, 0) - -# define CRYPTO_THREAD_SET_ERROR(THREAD, FLAG) \ - do { \ - (THREAD)->state |= ((FLAG) << 16); \ - } while ((void)0, 0) - -# define CRYPTO_THREAD_UNSET_ERROR(THREAD, FLAG) \ - do { \ - (THREAD)->state &= ~((FLAG) << 16); \ - } while ((void)0, 0) - -# else - -# define CRYPTO_THREAD_UNSET_STATE(THREAD, FLAG) -# define CRYPTO_THREAD_SET_STATE(THREAD, FLAG) -# define CRYPTO_THREAD_SET_ERROR(THREAD, FLAG) -# define CRYPTO_THREAD_UNSET_ERROR(THREAD, FLAG) - -# endif /* defined(OPENSSL_THREADS) */ - -CRYPTO_THREAD * ossl_crypto_thread_native_start(CRYPTO_THREAD_ROUTINE routine, - void *data, int joinable); -int ossl_crypto_thread_native_spawn(CRYPTO_THREAD *thread); -int ossl_crypto_thread_native_join(CRYPTO_THREAD *thread, - CRYPTO_THREAD_RETVAL *retval); -int ossl_crypto_thread_native_perform_join(CRYPTO_THREAD *thread, - CRYPTO_THREAD_RETVAL *retval); -int ossl_crypto_thread_native_exit(void); -int ossl_crypto_thread_native_is_self(CRYPTO_THREAD *thread); -int ossl_crypto_thread_native_clean(CRYPTO_THREAD *thread); - -#endif /* OSSL_INTERNAL_THREAD_ARCH_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 deleted file mode 100644 index d6cb2eee..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread_once.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * 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_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 an int result (1 for success or - * 0 for failure). Typical usage might be: - * - * DEFINE_RUN_ONCE(myinitfunc) - * { - * do_some_initialisation(); - * if (init_is_successful()) - * return 1; - * - * return 0; - * } - */ -# define DEFINE_RUN_ONCE(init) \ - static int init(void); \ - int init##_ossl_ret_ = 0; \ - void init##_ossl_(void) \ - { \ - init##_ossl_ret_ = init(); \ - } \ - static int init(void) - -/* - * 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) \ - 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 an int result (1 for success or 0 for - * failure). Typical usage might be: - * - * DEFINE_RUN_ONCE_STATIC(myinitfunc) - * { - * do_some_initialisation(); - * if (init_is_successful()) - * return 1; - * - * return 0; - * } - */ -# define DEFINE_RUN_ONCE_STATIC(init) \ - static int init(void); \ - static int init##_ossl_ret_ = 0; \ - static void init##_ossl_(void) \ - { \ - init##_ossl_ret_ = init(); \ - } \ - static int init(void) - -/* - * DEFINE_RUN_ONCE_STATIC_ALT: Define an alternative initialiser function. This - * function will be declared as static within the file. It takes no arguments - * and returns an int result (1 for success or 0 for failure). An alternative - * initialiser function is expected to be associated with a primary initialiser - * function defined via DEFINE_ONCE_STATIC where both functions use the same - * CRYPTO_ONCE object to synchronise. Where an alternative initialiser function - * is used only one of the primary or the alternative initialiser function will - * ever be called - and that function will be called exactly once. Definition - * of an alternative initialiser function MUST occur AFTER the definition of the - * primary initialiser function. - * - * Typical usage might be: - * - * DEFINE_RUN_ONCE_STATIC(myinitfunc) - * { - * do_some_initialisation(); - * if (init_is_successful()) - * return 1; - * - * return 0; - * } - * - * DEFINE_RUN_ONCE_STATIC_ALT(myaltinitfunc, myinitfunc) - * { - * do_some_alternative_initialisation(); - * if (init_is_successful()) - * return 1; - * - * return 0; - * } - */ -# define DEFINE_RUN_ONCE_STATIC_ALT(initalt, init) \ - static int initalt(void); \ - static void initalt##_ossl_(void) \ - { \ - init##_ossl_ret_ = initalt(); \ - } \ - static int initalt(void) - -/* - * RUN_ONCE - use CRYPTO_THREAD_run_once, and check if the init succeeded - * @once: pointer to static object of type CRYPTO_ONCE - * @init: function name that was previously given to DEFINE_RUN_ONCE, - * DEFINE_RUN_ONCE_STATIC or DECLARE_RUN_ONCE. This function - * must return 1 for success or 0 for failure. - * - * The return value is 1 on success (*) or 0 in case of error. - * - * (*) by convention, since the init function must return 1 on success. - */ -# define RUN_ONCE(once, init) \ - (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0) - -/* - * RUN_ONCE_ALT - use CRYPTO_THREAD_run_once, to run an alternative initialiser - * function and check if that initialisation succeeded - * @once: pointer to static object of type CRYPTO_ONCE - * @initalt: alternative initialiser function name that was previously given to - * DEFINE_RUN_ONCE_STATIC_ALT. This function must return 1 for - * success or 0 for failure. - * @init: primary initialiser function name that was previously given to - * DEFINE_RUN_ONCE_STATIC. This function must return 1 for success or - * 0 for failure. - * - * The return value is 1 on success (*) or 0 in case of error. - * - * (*) by convention, since the init function must return 1 on success. - */ -# 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/time.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/time.h deleted file mode 100644 index 14d724ab..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/time.h +++ /dev/null @@ -1,242 +0,0 @@ -/* - * 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_INTERNAL_TIME_H -# define OSSL_INTERNAL_TIME_H -# pragma once - -# include /* uint64_t */ -# include "internal/e_os.h" /* for struct timeval */ -# include "internal/safe_math.h" - -/* - * Internal type defining a time. - * This should be treated as an opaque structure. - * - * The time datum is Unix's 1970 and at nanosecond precision, this gives - * a range of 584 years roughly. - */ -typedef struct { - uint64_t t; /* Ticks since the epoch */ -} OSSL_TIME; - -/* The precision of times allows this many values per second */ -# define OSSL_TIME_SECOND ((uint64_t)1000000000) - -/* One millisecond. */ -# define OSSL_TIME_MS (OSSL_TIME_SECOND / 1000) - -/* One microsecond. */ -# define OSSL_TIME_US (OSSL_TIME_MS / 1000) - -/* One nanosecond. */ -# define OSSL_TIME_NS (OSSL_TIME_US / 1000) - -#define ossl_seconds2time(s) ossl_ticks2time((s) * OSSL_TIME_SECOND) -#define ossl_time2seconds(t) (ossl_time2ticks(t) / OSSL_TIME_SECOND) -#define ossl_ms2time(ms) ossl_ticks2time((ms) * OSSL_TIME_MS) -#define ossl_time2ms(t) (ossl_time2ticks(t) / OSSL_TIME_MS) -#define ossl_us2time(us) ossl_ticks2time((us) * OSSL_TIME_US) -#define ossl_time2us(t) (ossl_time2ticks(t) / OSSL_TIME_US) - -/* - * Arithmetic operations on times. - * These operations are saturating, in that an overflow or underflow returns - * the largest or smallest value respectively. - */ -OSSL_SAFE_MATH_UNSIGNED(time, uint64_t) - -/* Convert a tick count into a time */ -static ossl_unused ossl_inline -OSSL_TIME ossl_ticks2time(uint64_t ticks) -{ - OSSL_TIME r; - - r.t = ticks; - return r; -} - -/* Convert a time to a tick count */ -static ossl_unused ossl_inline -uint64_t ossl_time2ticks(OSSL_TIME t) -{ - return t.t; -} - -/* Get current time */ -OSSL_TIME ossl_time_now(void); - -/* The beginning and end of the time range */ -static ossl_unused ossl_inline -OSSL_TIME ossl_time_zero(void) -{ - return ossl_ticks2time(0); -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_time_infinite(void) -{ - return ossl_ticks2time(~(uint64_t)0); -} - - -/* Convert time to timeval */ -static ossl_unused ossl_inline -struct timeval ossl_time_to_timeval(OSSL_TIME t) -{ - struct timeval tv; - int err = 0; - - /* - * Round up any nano secs which struct timeval doesn't support. Ensures that - * we never return a zero time if the input time is non zero - */ - t.t = safe_add_time(t.t, OSSL_TIME_US - 1, &err); - if (err) - t = ossl_time_infinite(); - -#ifdef _WIN32 - tv.tv_sec = (long int)(t.t / OSSL_TIME_SECOND); -#else - tv.tv_sec = (time_t)(t.t / OSSL_TIME_SECOND); -#endif - tv.tv_usec = (t.t % OSSL_TIME_SECOND) / OSSL_TIME_US; - return tv; -} - -/* Convert timeval to time */ -static ossl_unused ossl_inline -OSSL_TIME ossl_time_from_timeval(struct timeval tv) -{ - OSSL_TIME t; - -#ifndef __DJGPP__ /* tv_sec is unsigned on djgpp. */ - if (tv.tv_sec < 0) - return ossl_time_zero(); -#endif - t.t = tv.tv_sec * OSSL_TIME_SECOND + tv.tv_usec * OSSL_TIME_US; - return t; -} - -/* Convert OSSL_TIME to time_t */ -static ossl_unused ossl_inline -time_t ossl_time_to_time_t(OSSL_TIME t) -{ - return (time_t)(t.t / OSSL_TIME_SECOND); -} - -/* Convert time_t to OSSL_TIME */ -static ossl_unused ossl_inline -OSSL_TIME ossl_time_from_time_t(time_t t) -{ - OSSL_TIME ot; - - ot.t = t; - ot.t *= OSSL_TIME_SECOND; - return ot; -} - -/* Compare two time values, return -1 if less, 1 if greater and 0 if equal */ -static ossl_unused ossl_inline -int ossl_time_compare(OSSL_TIME a, OSSL_TIME b) -{ - if (a.t > b.t) - return 1; - if (a.t < b.t) - return -1; - return 0; -} - -/* Returns true if an OSSL_TIME is ossl_time_zero(). */ -static ossl_unused ossl_inline -int ossl_time_is_zero(OSSL_TIME t) -{ - return ossl_time_compare(t, ossl_time_zero()) == 0; -} - -/* Returns true if an OSSL_TIME is ossl_time_infinite(). */ -static ossl_unused ossl_inline -int ossl_time_is_infinite(OSSL_TIME t) -{ - return ossl_time_compare(t, ossl_time_infinite()) == 0; -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_time_add(OSSL_TIME a, OSSL_TIME b) -{ - OSSL_TIME r; - int err = 0; - - r.t = safe_add_time(a.t, b.t, &err); - return err ? ossl_time_infinite() : r; -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_time_subtract(OSSL_TIME a, OSSL_TIME b) -{ - OSSL_TIME r; - int err = 0; - - r.t = safe_sub_time(a.t, b.t, &err); - return err ? ossl_time_zero() : r; -} - -/* Returns |a - b|. */ -static ossl_unused ossl_inline -OSSL_TIME ossl_time_abs_difference(OSSL_TIME a, OSSL_TIME b) -{ - return a.t > b.t ? ossl_time_subtract(a, b) - : ossl_time_subtract(b, a); -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_time_multiply(OSSL_TIME a, uint64_t b) -{ - OSSL_TIME r; - int err = 0; - - r.t = safe_mul_time(a.t, b, &err); - return err ? ossl_time_infinite() : r; -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_time_divide(OSSL_TIME a, uint64_t b) -{ - OSSL_TIME r; - int err = 0; - - r.t = safe_div_time(a.t, b, &err); - return err ? ossl_time_zero() : r; -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_time_muldiv(OSSL_TIME a, uint64_t b, uint64_t c) -{ - OSSL_TIME r; - int err = 0; - - r.t = safe_muldiv_time(a.t, b, c, &err); - return err ? ossl_time_zero() : r; -} - -/* Return higher of the two given time values. */ -static ossl_unused ossl_inline -OSSL_TIME ossl_time_max(OSSL_TIME a, OSSL_TIME b) -{ - return a.t > b.t ? a : b; -} - -/* Return the lower of the two given time values. */ -static ossl_unused ossl_inline -OSSL_TIME ossl_time_min(OSSL_TIME a, OSSL_TIME b) -{ - return a.t < b.t ? a : b; -} - -#endif 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 deleted file mode 100644 index 73fb53bc..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/tlsgroups.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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_brainpoolP256r1_tls13 0x001F -# define OSSL_TLS_GROUP_ID_brainpoolP384r1_tls13 0x0020 -# define OSSL_TLS_GROUP_ID_brainpoolP512r1_tls13 0x0021 -# define OSSL_TLS_GROUP_ID_gc256A 0x0022 -# define OSSL_TLS_GROUP_ID_gc256B 0x0023 -# define OSSL_TLS_GROUP_ID_gc256C 0x0024 -# define OSSL_TLS_GROUP_ID_gc256D 0x0025 -# define OSSL_TLS_GROUP_ID_gc512A 0x0026 -# define OSSL_TLS_GROUP_ID_gc512B 0x0027 -# define OSSL_TLS_GROUP_ID_gc512C 0x0028 -# 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 deleted file mode 100644 index a840df0b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/tsan_assist.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * 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 - */ - -/* - * Contemporary compilers implement lock-free atomic memory access - * primitives that facilitate writing "thread-opportunistic" or even real - * multi-threading low-overhead code. "Thread-opportunistic" is when - * exact result is not required, e.g. some statistics, or execution flow - * doesn't have to be unambiguous. Simplest example is lazy "constant" - * initialization when one can synchronize on variable itself, e.g. - * - * if (var == NOT_YET_INITIALIZED) - * var = function_returning_same_value(); - * - * This does work provided that loads and stores are single-instruction - * operations (and integer ones are on *all* supported platforms), but - * it upsets Thread Sanitizer. Suggested solution is - * - * if (tsan_load(&var) == NOT_YET_INITIALIZED) - * tsan_store(&var, function_returning_same_value()); - * - * Production machine code would be the same, so one can wonder why - * bother. Having Thread Sanitizer accept "thread-opportunistic" code - * allows to move on trouble-shooting real bugs. - * - * Resolving Thread Sanitizer nits was the initial purpose for this module, - * but it was later extended with more nuanced primitives that are useful - * even in "non-opportunistic" scenarios. Most notably verifying if a shared - * structure is fully initialized and bypassing the initialization lock. - * It's suggested to view macros defined in this module as "annotations" for - * thread-safe lock-free code, "Thread-Safe ANnotations"... - * - * It's assumed that ATOMIC_{LONG|INT}_LOCK_FREE are assigned same value as - * ATOMIC_POINTER_LOCK_FREE. And check for >= 2 ensures that corresponding - * code is inlined. It should be noted that statistics counters become - * accurate in such case. - * - * Special note about TSAN_QUALIFIER. It might be undesired to use it in - * a shared header. Because whether operation on specific variable or member - * is atomic or not might be irrelevant in other modules. In such case one - * can use TSAN_QUALIFIER in cast specifically when it has to count. - */ - -#ifndef OSSL_INTERNAL_TSAN_ASSIST_H -# define OSSL_INTERNAL_TSAN_ASSIST_H -# pragma once - -# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ - && !defined(__STDC_NO_ATOMICS__) -# include - -# if defined(ATOMIC_POINTER_LOCK_FREE) \ - && ATOMIC_POINTER_LOCK_FREE >= 2 -# 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_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 - -# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) - -# if defined(__GCC_ATOMIC_POINTER_LOCK_FREE) \ - && __GCC_ATOMIC_POINTER_LOCK_FREE >= 2 -# 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_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 - -# elif defined(_MSC_VER) && _MSC_VER>=1200 \ - && (defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \ - defined(_M_ARM64) || (defined(_M_ARM) && _M_ARM >= 7 && !defined(_WIN32_WCE))) -/* - * There is subtle dependency on /volatile: command-line option. - * "ms" implies same semantic as memory_order_acquire for loads and - * memory_order_release for stores, while "iso" - memory_order_relaxed for - * either. Real complication is that defaults are different on x86 and ARM. - * There is explanation for that, "ms" is backward compatible with earlier - * compiler versions, while multi-processor ARM can be viewed as brand new - * platform to MSC and its users, and with non-relaxed semantic taking toll - * with additional instructions and penalties, it kind of makes sense to - * default to "iso"... - */ -# define TSAN_QUALIFIER volatile -# if defined(_M_ARM) || defined(_M_ARM64) -# define _InterlockedExchangeAdd _InterlockedExchangeAdd_nf -# pragma intrinsic(_InterlockedExchangeAdd_nf) -# pragma intrinsic(__iso_volatile_load32, __iso_volatile_store32) -# ifdef _WIN64 -# define _InterlockedExchangeAdd64 _InterlockedExchangeAdd64_nf -# pragma intrinsic(_InterlockedExchangeAdd64_nf) -# pragma intrinsic(__iso_volatile_load64, __iso_volatile_store64) -# define tsan_load(ptr) (sizeof(*(ptr)) == 8 ? __iso_volatile_load64(ptr) \ - : __iso_volatile_load32(ptr)) -# define tsan_store(ptr, val) (sizeof(*(ptr)) == 8 ? __iso_volatile_store64((ptr), (val)) \ - : __iso_volatile_store32((ptr), (val))) -# else -# define tsan_load(ptr) __iso_volatile_load32(ptr) -# define tsan_store(ptr, val) __iso_volatile_store32((ptr), (val)) -# endif -# else -# define tsan_load(ptr) (*(ptr)) -# define tsan_store(ptr, val) (*(ptr) = (val)) -# endif -# pragma intrinsic(_InterlockedExchangeAdd) -# ifdef _WIN64 -# pragma intrinsic(_InterlockedExchangeAdd64) -# define tsan_add(ptr, n) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), (n)) \ - : _InterlockedExchangeAdd((ptr), (n))) -# else -# define tsan_add(ptr, n) _InterlockedExchangeAdd((ptr), (n)) -# endif -# if !defined(_ISO_VOLATILE) -# define tsan_ld_acq(ptr) (*(ptr)) -# define tsan_st_rel(ptr, val) (*(ptr) = (val)) -# endif - -# endif - -# ifndef TSAN_QUALIFIER - -# 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_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 - * protected with #ifdef tsan_ld_acq with locked fallback. - */ - -# endif - -# define tsan_counter(ptr) tsan_add((ptr), 1) -# define tsan_decr(ptr) tsan_add((ptr), -1) - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/uint_set.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/uint_set.h deleted file mode 100644 index dcb29b33..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/uint_set.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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_UINT_SET_H -# define OSSL_UINT_SET_H - -#include "openssl/params.h" -#include "internal/list.h" - -/* - * uint64_t Integer Sets - * ===================== - * - * Utilities for managing a logical set of unsigned 64-bit integers. The - * structure tracks each contiguous range of integers using one allocation and - * is thus optimised for cases where integers tend to appear consecutively. - * Queries are optimised under the assumption that they will generally be made - * on integers near the end of the set. - * - * Discussion of implementation details can be found in uint_set.c. - */ -typedef struct uint_range_st { - uint64_t start, end; -} UINT_RANGE; - -typedef struct uint_set_item_st UINT_SET_ITEM; -struct uint_set_item_st { - OSSL_LIST_MEMBER(uint_set, UINT_SET_ITEM); - UINT_RANGE range; -}; - -DEFINE_LIST_OF(uint_set, UINT_SET_ITEM); - -typedef OSSL_LIST(uint_set) UINT_SET; - -void ossl_uint_set_init(UINT_SET *s); -void ossl_uint_set_destroy(UINT_SET *s); - -/* - * Insert a range into a integer set. Returns 0 on allocation failure, in which - * case the integer set is in a valid but undefined state. Otherwise, returns 1. - * Ranges can overlap existing ranges without limitation. If a range is a subset - * of an existing range in the set, this is a no-op and returns 1. - */ -int ossl_uint_set_insert(UINT_SET *s, const UINT_RANGE *range); - -/* - * Remove a range from the set. Returns 0 on allocation failure, in which case - * the integer set is unchanged. Otherwise, returns 1. Ranges which are not - * already in the set can be removed without issue. If a passed range is not in - * the integer set at all, this is a no-op and returns 1. - */ -int ossl_uint_set_remove(UINT_SET *s, const UINT_RANGE *range); - -/* Returns 1 iff the given integer is in the integer set. */ -int ossl_uint_set_query(const UINT_SET *s, uint64_t v); - -#endif 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 deleted file mode 100644 index a6de8352..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/unicode.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 deleted file mode 100644 index d251d0a0..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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 - */ - -/* - * This file is only used by HP C/C++ on VMS, and is included automatically - * after each header file from this directory - */ - -/* - * The C++ compiler doesn't understand these pragmas, even though it - * understands the corresponding command line qualifier. - */ -#ifndef __cplusplus -/* restore state. Must correspond to the save in __decc_include_prologue.h */ -# pragma names restore -#endif 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 deleted file mode 100644 index 91ac6b33..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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 - */ - -/* - * This file is only used by HP C/C++ on VMS, and is included automatically - * after each header file from this directory - */ - -/* - * The C++ compiler doesn't understand these pragmas, even though it - * understands the corresponding command line qualifier. - */ -#ifndef __cplusplus -/* save state */ -# pragma names save -/* have the compiler shorten symbols larger than 31 chars to 23 chars - * followed by a 8 hex char CRC - */ -# pragma names as_is,shortened -#endif 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 deleted file mode 100644 index d0f9dfc6..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/aes.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2002-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_AES_H -# define OPENSSL_AES_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_AES_H -# endif - -# include - -# include -# ifdef __cplusplus -extern "C" { -# endif - -# 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 - unsigned long rd_key[4 * (AES_MAXNR + 1)]; -# else - unsigned int rd_key[4 * (AES_MAXNR + 1)]; -# endif - int rounds; -}; -typedef struct aes_key_st AES_KEY; - -# 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); -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); -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); -# endif - - -# ifdef __cplusplus -} -# endif - -#endif 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 deleted file mode 100644 index 09712345..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h +++ /dev/null @@ -1,1133 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/asn1.h.in - * - * 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_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 */ -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 */ -/* - * 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; -}; - -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))) - - -/* 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; -}; - -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))) - - -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); - -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_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); - -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); -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); - -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) -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); - -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) -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); -void *ASN1_item_unpack_ex(const ASN1_STRING *oct, const ASN1_ITEM *it, - OSSL_LIB_CTX *libctx, const char *propq); - -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.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h.in deleted file mode 100644 index 798b2211..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h.in +++ /dev/null @@ -1,966 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * 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 - */ - -{- -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); -void *ASN1_item_unpack_ex(const ASN1_STRING *oct, const ASN1_ITEM *it, - OSSL_LIB_CTX *libctx, const char *propq); - -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 deleted file mode 100644 index fdcb9836..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1_mac.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#error "This file is obsolete; please update your software." 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 deleted file mode 100644 index d4276220..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1err.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * 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_ASN1ERR_H -# define OPENSSL_ASN1ERR_H -# pragma once - -# include -# include -# include - - - -/* - * ASN1 reason codes. - */ -# define ASN1_R_ADDING_OBJECT 171 -# define ASN1_R_ASN1_PARSE_ERROR 203 -# define ASN1_R_ASN1_SIG_PARSE_ERROR 204 -# define ASN1_R_AUX_ERROR 100 -# define ASN1_R_BAD_OBJECT_HEADER 102 -# define ASN1_R_BAD_TEMPLATE 230 -# define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 -# define ASN1_R_BN_LIB 105 -# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 -# define ASN1_R_BUFFER_TOO_SMALL 107 -# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 -# define ASN1_R_CONTEXT_NOT_INITIALISED 217 -# define ASN1_R_DATA_IS_WRONG 109 -# define ASN1_R_DECODE_ERROR 110 -# define ASN1_R_DEPTH_EXCEEDED 174 -# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 -# define ASN1_R_ENCODE_ERROR 112 -# define ASN1_R_ERROR_GETTING_TIME 173 -# define ASN1_R_ERROR_LOADING_SECTION 172 -# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 -# define ASN1_R_EXPECTING_AN_INTEGER 115 -# define ASN1_R_EXPECTING_AN_OBJECT 116 -# define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 -# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 -# define ASN1_R_FIELD_MISSING 121 -# define ASN1_R_FIRST_NUM_TOO_LARGE 122 -# define ASN1_R_HEADER_TOO_LONG 123 -# define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 -# define ASN1_R_ILLEGAL_BOOLEAN 176 -# define ASN1_R_ILLEGAL_CHARACTERS 124 -# define ASN1_R_ILLEGAL_FORMAT 177 -# define ASN1_R_ILLEGAL_HEX 178 -# define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 -# define ASN1_R_ILLEGAL_INTEGER 180 -# define ASN1_R_ILLEGAL_NEGATIVE_VALUE 226 -# define ASN1_R_ILLEGAL_NESTED_TAGGING 181 -# define ASN1_R_ILLEGAL_NULL 125 -# define ASN1_R_ILLEGAL_NULL_VALUE 182 -# define ASN1_R_ILLEGAL_OBJECT 183 -# define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 -# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 -# define ASN1_R_ILLEGAL_PADDING 221 -# define ASN1_R_ILLEGAL_TAGGED_ANY 127 -# define ASN1_R_ILLEGAL_TIME_VALUE 184 -# define ASN1_R_ILLEGAL_ZERO_CONTENT 222 -# define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 -# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 -# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 -# define ASN1_R_INVALID_BMPSTRING_LENGTH 129 -# define ASN1_R_INVALID_DIGIT 130 -# define ASN1_R_INVALID_MIME_TYPE 205 -# define ASN1_R_INVALID_MODIFIER 186 -# define ASN1_R_INVALID_NUMBER 187 -# define ASN1_R_INVALID_OBJECT_ENCODING 216 -# define ASN1_R_INVALID_SCRYPT_PARAMETERS 227 -# define ASN1_R_INVALID_SEPARATOR 131 -# define ASN1_R_INVALID_STRING_TABLE_VALUE 218 -# 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 -# define ASN1_R_MIME_SIG_PARSE_ERROR 208 -# define ASN1_R_MISSING_EOC 137 -# define ASN1_R_MISSING_SECOND_NUMBER 138 -# define ASN1_R_MISSING_VALUE 189 -# define ASN1_R_MSTRING_NOT_UNIVERSAL 139 -# define ASN1_R_MSTRING_WRONG_TAG 140 -# define ASN1_R_NESTED_ASN1_STRING 197 -# define ASN1_R_NESTED_TOO_DEEP 201 -# define ASN1_R_NON_HEX_CHARACTERS 141 -# define ASN1_R_NOT_ASCII_FORMAT 190 -# define ASN1_R_NOT_ENOUGH_DATA 142 -# define ASN1_R_NO_CONTENT_TYPE 209 -# define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 -# define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 -# define ASN1_R_NO_MULTIPART_BOUNDARY 211 -# define ASN1_R_NO_SIG_CONTENT_TYPE 212 -# define ASN1_R_NULL_IS_WRONG_LENGTH 144 -# define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 -# define ASN1_R_ODD_NUMBER_OF_CHARS 145 -# define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 -# define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 -# define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 -# define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 -# define ASN1_R_SHORT_LINE 150 -# define ASN1_R_SIG_INVALID_MIME_TYPE 213 -# define ASN1_R_STREAMING_NOT_SUPPORTED 202 -# define ASN1_R_STRING_TOO_LONG 151 -# define ASN1_R_STRING_TOO_SHORT 152 -# define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 -# define ASN1_R_TIME_NOT_ASCII_FORMAT 193 -# define ASN1_R_TOO_LARGE 223 -# define ASN1_R_TOO_LONG 155 -# define ASN1_R_TOO_SMALL 224 -# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 -# 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 -# define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 -# define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 -# define ASN1_R_UNKNOWN_TAG 194 -# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 -# define ASN1_R_UNSUPPORTED_CIPHER 228 -# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 -# define ASN1_R_UNSUPPORTED_TYPE 196 -# define ASN1_R_WRONG_INTEGER_TYPE 225 -# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 -# define ASN1_R_WRONG_TAG 168 - -#endif 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 deleted file mode 100644 index 74ba47d0..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h +++ /dev/null @@ -1,946 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/asn1t.h.in - * - * 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_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 - -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 */ - -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/asn1t.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h.in deleted file mode 100644 index b536fe51..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1t.h.in +++ /dev/null @@ -1,923 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 826ffb99..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include - -#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) -/* application has to include to use this */ -#define OSSL_ASYNC_FD HANDLE -#define OSSL_BAD_ASYNC_FD INVALID_HANDLE_VALUE -# endif -#else -#define OSSL_ASYNC_FD int -#define OSSL_BAD_ASYNC_FD -1 -#endif -# include - - -# ifdef __cplusplus -extern "C" { -# endif - -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); - -#ifdef OSSL_ASYNC_FD -ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void); -void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx); -int ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX *ctx, const void *key, - OSSL_ASYNC_FD fd, - void *custom_data, - void (*cleanup)(ASYNC_WAIT_CTX *, const void *, - OSSL_ASYNC_FD, void *)); -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); -int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); -#endif - -int ASYNC_is_capable(void); - -typedef void *(*ASYNC_stack_alloc_fn)(size_t *num); -typedef void (*ASYNC_stack_free_fn)(void *addr); - -int ASYNC_set_mem_functions(ASYNC_stack_alloc_fn alloc_fn, - ASYNC_stack_free_fn free_fn); -void ASYNC_get_mem_functions(ASYNC_stack_alloc_fn *alloc_fn, - ASYNC_stack_free_fn *free_fn); - -int ASYNC_start_job(ASYNC_JOB **job, ASYNC_WAIT_CTX *ctx, int *ret, - int (*func)(void *), void *args, size_t size); -int ASYNC_pause_job(void); - -ASYNC_JOB *ASYNC_get_current_job(void); -ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job); -void ASYNC_block_pause(void); -void ASYNC_unblock_pause(void); - - -# ifdef __cplusplus -} -# endif -#endif 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 deleted file mode 100644 index c093f7be..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asyncerr.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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_ASYNCERR_H -# define OPENSSL_ASYNCERR_H -# pragma once - -# include -# include -# include - - - -/* - * ASYNC reason codes. - */ -# define ASYNC_R_FAILED_TO_SET_POOL 101 -# define ASYNC_R_FAILED_TO_SWAP_CONTEXT 102 -# define ASYNC_R_INIT_FAILED 105 -# define ASYNC_R_INVALID_POOL_SIZE 103 - -#endif 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 deleted file mode 100644 index ea584def..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h +++ /dev/null @@ -1,1010 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/bio.h.in - * - * 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_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_DGRAM_PAIR (26|BIO_TYPE_SOURCE_SINK) -# define BIO_TYPE_DGRAM_MEM (27|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 - -# define BIO_CTRL_DGRAM_GET_LOCAL_ADDR_CAP 82 -# define BIO_CTRL_DGRAM_GET_LOCAL_ADDR_ENABLE 83 -# define BIO_CTRL_DGRAM_SET_LOCAL_ADDR_ENABLE 84 -# define BIO_CTRL_DGRAM_GET_EFFECTIVE_CAPS 85 -# define BIO_CTRL_DGRAM_GET_CAPS 86 -# define BIO_CTRL_DGRAM_SET_CAPS 87 -# define BIO_CTRL_DGRAM_GET_NO_TRUNC 88 -# define BIO_CTRL_DGRAM_SET_NO_TRUNC 89 - -/* - * internal BIO: - * # define BIO_CTRL_SET_KTLS_TX_ZEROCOPY_SENDFILE 90 - */ - -# define BIO_CTRL_GET_RPOLL_DESCRIPTOR 91 -# define BIO_CTRL_GET_WPOLL_DESCRIPTOR 92 -# define BIO_CTRL_DGRAM_DETECT_PEER_ADDR 93 - -# define BIO_DGRAM_CAP_NONE 0U -# define BIO_DGRAM_CAP_HANDLES_SRC_ADDR (1U << 0) -# define BIO_DGRAM_CAP_HANDLES_DST_ADDR (1U << 1) -# define BIO_DGRAM_CAP_PROVIDES_SRC_ADDR (1U << 2) -# define BIO_DGRAM_CAP_PROVIDES_DST_ADDR (1U << 3) - -# 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 0x8000 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 -# define BIO_CB_RECVMMSG 0x07 -# define BIO_CB_SENDMMSG 0x08 - -/* - * 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 */ - -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 { - 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 - -/* BIO_sendmmsg/BIO_recvmmsg-related definitions */ -typedef struct bio_msg_st { - void *data; - size_t data_len; - BIO_ADDR *peer, *local; - uint64_t flags; -} BIO_MSG; - -typedef struct bio_mmsg_cb_args_st { - BIO_MSG *msg; - size_t stride, num_msg; - uint64_t flags; - size_t *msgs_processed; -} BIO_MMSG_CB_ARGS; - -#define BIO_POLL_DESCRIPTOR_TYPE_NONE 0 -#define BIO_POLL_DESCRIPTOR_TYPE_SOCK_FD 1 -#define BIO_POLL_DESCRIPTOR_CUSTOM_START 8192 - -typedef struct bio_poll_descriptor_st { - uint32_t type; - union { - int fd; - void *custom; - uintptr_t custom_ui; - } value; -} BIO_POLL_DESCRIPTOR; - -/* - * #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_C_SET_TFO 156 /* like BIO_C_SET_NBIO */ - -# define BIO_C_SET_SOCK_TYPE 157 -# define BIO_C_GET_SOCK_TYPE 158 -# define BIO_C_GET_DGRAM_BIO 159 - -# 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) -# define BIO_set_tfo(b,n) BIO_ctrl(b,BIO_C_SET_TFO,(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_get_conn_mode(b) BIO_ctrl(b,BIO_C_GET_CONNECT,4,NULL) -# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) -# define BIO_set_sock_type(b,t) BIO_ctrl(b,BIO_C_SET_SOCK_TYPE,(t),NULL) -# define BIO_get_sock_type(b) BIO_ctrl(b,BIO_C_GET_SOCK_TYPE,0,NULL) -# define BIO_get0_dgram_bio(b, p) BIO_ctrl(b,BIO_C_GET_DGRAM_BIO,0,(void *)(BIO **)(p)) - -/* 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) -# define BIO_set_tfo_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,5,(n)?(void *)"a":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_detect_peer_addr(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_DETECT_PEER_ADDR, 0, (char *)(peer)) -# define BIO_dgram_get_mtu_overhead(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) -# define BIO_dgram_get_local_addr_cap(b) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_LOCAL_ADDR_CAP, 0, NULL) -# define BIO_dgram_get_local_addr_enable(b, penable) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_LOCAL_ADDR_ENABLE, 0, (char *)(penable)) -# define BIO_dgram_set_local_addr_enable(b, enable) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_LOCAL_ADDR_ENABLE, (enable), NULL) -# define BIO_dgram_get_effective_caps(b) \ - (uint32_t)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_EFFECTIVE_CAPS, 0, NULL) -# define BIO_dgram_get_caps(b) \ - (uint32_t)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_CAPS, 0, NULL) -# define BIO_dgram_set_caps(b, caps) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_CAPS, (long)(caps), NULL) -# define BIO_dgram_get_no_trunc(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_NO_TRUNC, 0, NULL) -# define BIO_dgram_set_no_trunc(b, enable) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_NO_TRUNC, (enable), NULL) -# define BIO_dgram_get_mtu(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU, 0, NULL) -# define BIO_dgram_set_mtu(b, mtu) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_MTU, (mtu), 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); -__owur int BIO_recvmmsg(BIO *b, BIO_MSG *msg, - size_t stride, size_t num_msg, uint64_t flags, - size_t *msgs_processed); -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); -__owur int BIO_sendmmsg(BIO *b, BIO_MSG *msg, - size_t stride, size_t num_msg, uint64_t flags, - size_t *msgs_processed); -__owur int BIO_get_rpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc); -__owur int BIO_get_wpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc); -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); -# ifndef OPENSSL_NO_DGRAM -const BIO_METHOD *BIO_s_dgram_mem(void); -# endif -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_dgram_pair(void); -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_err_is_non_fatal(unsigned int errcode); -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_copy(BIO_ADDR *dst, const BIO_ADDR *src); -BIO_ADDR *BIO_ADDR_dup(const BIO_ADDR *ap); -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 -# define BIO_SOCK_TFO 0x20 - -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); -# ifndef OPENSSL_NO_DGRAM -int BIO_new_bio_dgram_pair(BIO **bio1, size_t writebuf1, - BIO **bio2, size_t writebuf2); -# endif - -/* - * 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_set_sendmmsg(BIO_METHOD *biom, - int (*f) (BIO *, BIO_MSG *, size_t, size_t, - uint64_t, size_t *)); -int (*BIO_meth_get_sendmmsg(const BIO_METHOD *biom))(BIO *, BIO_MSG *, - size_t, size_t, - uint64_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_set_recvmmsg(BIO_METHOD *biom, - int (*f) (BIO *, BIO_MSG *, size_t, size_t, - uint64_t, size_t *)); -int (*BIO_meth_get_recvmmsg(const BIO_METHOD *biom))(BIO *, BIO_MSG *, - size_t, size_t, - uint64_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 (*ossl_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/bio.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h.in deleted file mode 100644 index 418d1197..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h.in +++ /dev/null @@ -1,987 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * 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 - */ -{- -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_DGRAM_PAIR (26|BIO_TYPE_SOURCE_SINK) -# define BIO_TYPE_DGRAM_MEM (27|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 - -# define BIO_CTRL_DGRAM_GET_LOCAL_ADDR_CAP 82 -# define BIO_CTRL_DGRAM_GET_LOCAL_ADDR_ENABLE 83 -# define BIO_CTRL_DGRAM_SET_LOCAL_ADDR_ENABLE 84 -# define BIO_CTRL_DGRAM_GET_EFFECTIVE_CAPS 85 -# define BIO_CTRL_DGRAM_GET_CAPS 86 -# define BIO_CTRL_DGRAM_SET_CAPS 87 -# define BIO_CTRL_DGRAM_GET_NO_TRUNC 88 -# define BIO_CTRL_DGRAM_SET_NO_TRUNC 89 - -/* - * internal BIO: - * # define BIO_CTRL_SET_KTLS_TX_ZEROCOPY_SENDFILE 90 - */ - -# define BIO_CTRL_GET_RPOLL_DESCRIPTOR 91 -# define BIO_CTRL_GET_WPOLL_DESCRIPTOR 92 -# define BIO_CTRL_DGRAM_DETECT_PEER_ADDR 93 - -# define BIO_DGRAM_CAP_NONE 0U -# define BIO_DGRAM_CAP_HANDLES_SRC_ADDR (1U << 0) -# define BIO_DGRAM_CAP_HANDLES_DST_ADDR (1U << 1) -# define BIO_DGRAM_CAP_PROVIDES_SRC_ADDR (1U << 2) -# define BIO_DGRAM_CAP_PROVIDES_DST_ADDR (1U << 3) - -# 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 0x8000 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 -# define BIO_CB_RECVMMSG 0x07 -# define BIO_CB_SENDMMSG 0x08 - -/* - * 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 - -/* BIO_sendmmsg/BIO_recvmmsg-related definitions */ -typedef struct bio_msg_st { - void *data; - size_t data_len; - BIO_ADDR *peer, *local; - uint64_t flags; -} BIO_MSG; - -typedef struct bio_mmsg_cb_args_st { - BIO_MSG *msg; - size_t stride, num_msg; - uint64_t flags; - size_t *msgs_processed; -} BIO_MMSG_CB_ARGS; - -#define BIO_POLL_DESCRIPTOR_TYPE_NONE 0 -#define BIO_POLL_DESCRIPTOR_TYPE_SOCK_FD 1 -#define BIO_POLL_DESCRIPTOR_CUSTOM_START 8192 - -typedef struct bio_poll_descriptor_st { - uint32_t type; - union { - int fd; - void *custom; - uintptr_t custom_ui; - } value; -} BIO_POLL_DESCRIPTOR; - -/* - * #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_C_SET_TFO 156 /* like BIO_C_SET_NBIO */ - -# define BIO_C_SET_SOCK_TYPE 157 -# define BIO_C_GET_SOCK_TYPE 158 -# define BIO_C_GET_DGRAM_BIO 159 - -# 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) -# define BIO_set_tfo(b,n) BIO_ctrl(b,BIO_C_SET_TFO,(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_get_conn_mode(b) BIO_ctrl(b,BIO_C_GET_CONNECT,4,NULL) -# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) -# define BIO_set_sock_type(b,t) BIO_ctrl(b,BIO_C_SET_SOCK_TYPE,(t),NULL) -# define BIO_get_sock_type(b) BIO_ctrl(b,BIO_C_GET_SOCK_TYPE,0,NULL) -# define BIO_get0_dgram_bio(b, p) BIO_ctrl(b,BIO_C_GET_DGRAM_BIO,0,(void *)(BIO **)(p)) - -/* 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) -# define BIO_set_tfo_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,5,(n)?(void *)"a":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_detect_peer_addr(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_DETECT_PEER_ADDR, 0, (char *)(peer)) -# define BIO_dgram_get_mtu_overhead(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) -# define BIO_dgram_get_local_addr_cap(b) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_LOCAL_ADDR_CAP, 0, NULL) -# define BIO_dgram_get_local_addr_enable(b, penable) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_LOCAL_ADDR_ENABLE, 0, (char *)(penable)) -# define BIO_dgram_set_local_addr_enable(b, enable) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_LOCAL_ADDR_ENABLE, (enable), NULL) -# define BIO_dgram_get_effective_caps(b) \ - (uint32_t)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_EFFECTIVE_CAPS, 0, NULL) -# define BIO_dgram_get_caps(b) \ - (uint32_t)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_CAPS, 0, NULL) -# define BIO_dgram_set_caps(b, caps) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_CAPS, (long)(caps), NULL) -# define BIO_dgram_get_no_trunc(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_NO_TRUNC, 0, NULL) -# define BIO_dgram_set_no_trunc(b, enable) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_NO_TRUNC, (enable), NULL) -# define BIO_dgram_get_mtu(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU, 0, NULL) -# define BIO_dgram_set_mtu(b, mtu) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_MTU, (mtu), 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); -__owur int BIO_recvmmsg(BIO *b, BIO_MSG *msg, - size_t stride, size_t num_msg, uint64_t flags, - size_t *msgs_processed); -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); -__owur int BIO_sendmmsg(BIO *b, BIO_MSG *msg, - size_t stride, size_t num_msg, uint64_t flags, - size_t *msgs_processed); -__owur int BIO_get_rpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc); -__owur int BIO_get_wpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc); -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); -# ifndef OPENSSL_NO_DGRAM -const BIO_METHOD *BIO_s_dgram_mem(void); -# endif -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_dgram_pair(void); -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_err_is_non_fatal(unsigned int errcode); -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_copy(BIO_ADDR *dst, const BIO_ADDR *src); -BIO_ADDR *BIO_ADDR_dup(const BIO_ADDR *ap); -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 -# define BIO_SOCK_TFO 0x20 - -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); -# ifndef OPENSSL_NO_DGRAM -int BIO_new_bio_dgram_pair(BIO **bio1, size_t writebuf1, - BIO **bio2, size_t writebuf2); -# endif - -/* - * 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_set_sendmmsg(BIO_METHOD *biom, - int (*f) (BIO *, BIO_MSG *, size_t, size_t, - uint64_t, size_t *)); -int (*BIO_meth_get_sendmmsg(const BIO_METHOD *biom))(BIO *, BIO_MSG *, - size_t, size_t, - uint64_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_set_recvmmsg(BIO_METHOD *biom, - int (*f) (BIO *, BIO_MSG *, size_t, size_t, - uint64_t, size_t *)); -int (*BIO_meth_get_recvmmsg(const BIO_METHOD *biom))(BIO *, BIO_MSG *, - size_t, size_t, - uint64_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 (*ossl_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 deleted file mode 100644 index e4fdb649..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * 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 OPENSSL_BIOERR_H -# define OPENSSL_BIOERR_H -# pragma once - -# include -# include -# include - - - -/* - * BIO reason codes. - */ -# define BIO_R_ACCEPT_ERROR 100 -# define BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET 141 -# define BIO_R_AMBIGUOUS_HOST_OR_SERVICE 129 -# 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 -# define BIO_R_GETTING_SOCKTYPE 134 -# define BIO_R_INVALID_ARGUMENT 125 -# define BIO_R_INVALID_SOCKET 135 -# define BIO_R_IN_USE 123 -# define BIO_R_LENGTH_TOO_LONG 102 -# define BIO_R_LISTEN_V6_ONLY 136 -# define BIO_R_LOCAL_ADDR_NOT_AVAILABLE 111 -# define BIO_R_LOOKUP_RETURNED_NOTHING 142 -# define BIO_R_MALFORMED_HOST_OR_SERVICE 130 -# define BIO_R_NBIO_CONNECT_ERROR 110 -# define BIO_R_NON_FATAL 112 -# define BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED 143 -# 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 /* unused */ -# define BIO_R_TFO_DISABLED 106 -# define BIO_R_TFO_NO_KERNEL_SUPPORT 108 -# 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 -# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 -# define BIO_R_UNABLE_TO_NODELAY 138 -# define BIO_R_UNABLE_TO_REUSEADDR 139 -# define BIO_R_UNABLE_TO_TFO 109 -# define BIO_R_UNAVAILABLE_IP_FAMILY 145 -# define BIO_R_UNINITIALIZED 120 -# define BIO_R_UNKNOWN_INFO_TYPE 140 -# define BIO_R_UNSUPPORTED_IP_FAMILY 146 -# define BIO_R_UNSUPPORTED_METHOD 121 -# define BIO_R_UNSUPPORTED_PROTOCOL_FAMILY 131 -# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 -# define BIO_R_WSASTARTUP 122 -# define BIO_R_PORT_MISMATCH 150 -# define BIO_R_PEER_ADDR_NOT_AVAILABLE 151 - -#endif 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 deleted file mode 100644 index 667d6423..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/blowfish.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 1995-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_BLOWFISH_H -# define OPENSSL_BLOWFISH_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_BLOWFISH_H -# endif - -# include - -# ifndef OPENSSL_NO_BF -# include -# ifdef __cplusplus -extern "C" { -# endif - -# 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_ROUNDS 16 - -typedef struct bf_key_st { - BF_LONG P[BF_ROUNDS + 2]; - BF_LONG S[4 * 256]; -} BF_KEY; - -# 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 -} -# endif -# endif - -#endif 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 deleted file mode 100644 index ea706dca..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h +++ /dev/null @@ -1,590 +0,0 @@ -/* - * 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 - */ - -#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 - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * 64-bit processor with LP64 ABI - */ -# ifdef SIXTY_FOUR_BIT_LONG -# define BN_ULONG unsigned long -# define BN_BYTES 8 -# endif - -/* - * 64-bit processor other than LP64 ABI - */ -# ifdef SIXTY_FOUR_BIT -# define BN_ULONG unsigned long long -# define BN_BYTES 8 -# endif - -# ifdef THIRTY_TWO_BIT -# define BN_ULONG unsigned int -# define BN_BYTES 4 -# endif - -# define BN_BITS2 (BN_BYTES * 8) -# define BN_BITS (BN_BITS2 * 2) -# define BN_TBIT ((BN_ULONG)1 << (BN_BITS2 - 1)) - -# define BN_FLG_MALLOCED 0x01 -# define BN_FLG_STATIC_DATA 0x02 - -/* - * avoid leaking exponent information through timing, - * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime, - * BN_div() will call BN_div_no_branch, - * BN_mod_inverse() will call bn_mod_inverse_no_branch. - */ -# define BN_FLG_CONSTTIME 0x04 -# define BN_FLG_SECURE 0x08 - -# 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 */ -# endif - -void BN_set_flags(BIGNUM *b, int n); -int BN_get_flags(const BIGNUM *b, int n); - -/* Values for |top| in BN_rand() */ -#define BN_RAND_TOP_ANY -1 -#define BN_RAND_TOP_ONE 0 -#define BN_RAND_TOP_TWO 1 - -/* Values for |bottom| in BN_rand() */ -#define BN_RAND_BOTTOM_ANY 0 -#define BN_RAND_BOTTOM_ODD 1 - -/* - * get a clone of a BIGNUM with changed flags, for *temporary* use only (the - * two BIGNUMs cannot be used in parallel!). Also only for *read only* use. The - * value |dest| should be a newly allocated BIGNUM obtained via BN_new() that - * has not been otherwise initialised or used. - */ -void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags); - -/* Wrapper function to make using BN_GENCB easier */ -int BN_GENCB_call(BN_GENCB *cb, int a, int b); - -BN_GENCB *BN_GENCB_new(void); -void BN_GENCB_free(BN_GENCB *cb); - -/* Populate a BN_GENCB structure with an "old"-style callback */ -void BN_GENCB_set_old(BN_GENCB *gencb, void (*callback) (int, int, void *), - void *cb_arg); - -/* Populate a BN_GENCB structure with a "new"-style callback */ -void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *), - void *cb_arg); - -void *BN_GENCB_get_arg(BN_GENCB *cb); - -# 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 - * that will be done for checking that a random number is probably prime. The - * error rate for accepting a composite number as prime depends on the size of - * the prime |b|. The error rates used are for calculating an RSA key with 2 primes, - * and so the level is what you would expect for a key of double the size of the - * prime. - * - * This table is generated using the algorithm of FIPS PUB 186-4 - * Digital Signature Standard (DSS), section F.1, page 117. - * (https://dx.doi.org/10.6028/NIST.FIPS.186-4) - * - * The following magma script was used to generate the output: - * securitybits:=125; - * k:=1024; - * for t:=1 to 65 do - * for M:=3 to Floor(2*Sqrt(k-1)-1) do - * S:=0; - * // Sum over m - * for m:=3 to M do - * s:=0; - * // Sum over j - * for j:=2 to m do - * s+:=(RealField(32)!2)^-(j+(k-1)/j); - * end for; - * S+:=2^(m-(m-1)*t)*s; - * end for; - * A:=2^(k-2-M*t); - * B:=8*(Pi(RealField(32))^2-6)/3*2^(k-2)*S; - * pkt:=2.00743*Log(2)*k*2^-k*(A+B); - * seclevel:=Floor(-Log(2,pkt)); - * if seclevel ge securitybits then - * printf "k: %5o, security: %o bits (t: %o, M: %o)\n",k,seclevel,t,M; - * break; - * end if; - * end for; - * if seclevel ge securitybits then break; end if; - * end for; - * - * It can be run online at: - * http://magma.maths.usyd.edu.au/calc - * - * And will output: - * k: 1024, security: 129 bits (t: 6, M: 23) - * - * k is the number of bits of the prime, securitybits is the level we want to - * reach. - * - * prime length | RSA key size | # MR tests | security level - * -------------+--------------|------------+--------------- - * (b) >= 6394 | >= 12788 | 3 | 256 bit - * (b) >= 3747 | >= 7494 | 3 | 192 bit - * (b) >= 1345 | >= 2690 | 4 | 128 bit - * (b) >= 1080 | >= 2160 | 5 | 128 bit - * (b) >= 852 | >= 1704 | 5 | 112 bit - * (b) >= 476 | >= 952 | 5 | 80 bit - * (b) >= 400 | >= 800 | 6 | 80 bit - * (b) >= 347 | >= 694 | 7 | 80 bit - * (b) >= 308 | >= 616 | 8 | 80 bit - * (b) >= 55 | >= 110 | 27 | 64 bit - * (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) -# endif - -# define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) - -int BN_abs_is_word(const BIGNUM *a, const BN_ULONG w); -int BN_is_zero(const BIGNUM *a); -int BN_is_one(const BIGNUM *a); -int BN_is_word(const BIGNUM *a, const BN_ULONG w); -int BN_is_odd(const BIGNUM *a); - -# define BN_one(a) (BN_set_word((a),1)) - -void BN_zero_ex(BIGNUM *a); - -# if OPENSSL_API_LEVEL > 908 -# define BN_zero(a) BN_zero_ex(a) -# else -# define BN_zero(a) (BN_set_word((a),0)) -# endif - -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); -BIGNUM *BN_new(void); -BIGNUM *BN_secure_new(void); -void BN_clear_free(BIGNUM *a); -BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); -void BN_swap(BIGNUM *a, BIGNUM *b); -BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); -BIGNUM *BN_signed_bin2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2bin(const BIGNUM *a, unsigned char *to); -int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); -int BN_signed_bn2bin(const BIGNUM *a, unsigned char *to, int tolen); -BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); -BIGNUM *BN_signed_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); -int BN_signed_bn2lebin(const BIGNUM *a, unsigned char *to, int tolen); -BIGNUM *BN_native2bn(const unsigned char *s, int len, BIGNUM *ret); -BIGNUM *BN_signed_native2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2nativepad(const BIGNUM *a, unsigned char *to, int tolen); -int BN_signed_bn2native(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); -int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); -/** BN_set_negative sets sign of a BIGNUM - * \param b pointer to the BIGNUM object - * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise - */ -void BN_set_negative(BIGNUM *b, int n); -/** BN_is_negative returns 1 if the BIGNUM is negative - * \param b pointer to the BIGNUM object - * \return 1 if a < 0 and 0 otherwise - */ -int BN_is_negative(const BIGNUM *b); - -int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, - BN_CTX *ctx); -# define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx)) -int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); -int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); -int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); -int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m); -int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m); - -BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); -BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); -int BN_mul_word(BIGNUM *a, BN_ULONG w); -int BN_add_word(BIGNUM *a, BN_ULONG w); -int BN_sub_word(BIGNUM *a, BN_ULONG w); -int BN_set_word(BIGNUM *a, BN_ULONG w); -BN_ULONG BN_get_word(const BIGNUM *a); - -int BN_cmp(const BIGNUM *a, const BIGNUM *b); -void BN_free(BIGNUM *a); -int BN_is_bit_set(const BIGNUM *a, int n); -int BN_lshift(BIGNUM *r, const BIGNUM *a, int n); -int BN_lshift1(BIGNUM *r, const BIGNUM *a); -int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); - -int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); -int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *in_mont); -int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, - const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, - 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 -int BN_print_fp(FILE *fp, const BIGNUM *a); -# endif -int BN_print(BIO *bio, const BIGNUM *a); -int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); -int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); -int BN_rshift1(BIGNUM *r, const BIGNUM *a); -void BN_clear(BIGNUM *a); -BIGNUM *BN_dup(const BIGNUM *a); -int BN_ucmp(const BIGNUM *a, const BIGNUM *b); -int BN_set_bit(BIGNUM *a, int n); -int BN_clear_bit(BIGNUM *a, int n); -char *BN_bn2hex(const BIGNUM *a); -char *BN_bn2dec(const BIGNUM *a); -int BN_hex2bn(BIGNUM **a, const char *str); -int BN_dec2bn(BIGNUM **a, const char *str); -int BN_asc2bn(BIGNUM **a, const char *str); -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, - const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); - -void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); - -/* Deprecated versions */ -# 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, - BN_MONT_CTX *mont, BN_CTX *ctx); -int BN_to_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); -int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); -void BN_MONT_CTX_free(BN_MONT_CTX *mont); -int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx); -BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from); -BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_RWLOCK *lock, - const BIGNUM *mod, BN_CTX *ctx); - -/* BN_BLINDING flags */ -# define BN_BLINDING_NO_UPDATE 0x00000001 -# define BN_BLINDING_NO_RECREATE 0x00000002 - -BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod); -void BN_BLINDING_free(BN_BLINDING *b); -int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *); -int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, - BN_CTX *); - -int BN_BLINDING_is_current_thread(BN_BLINDING *b); -void BN_BLINDING_set_current_thread(BN_BLINDING *b); -int BN_BLINDING_lock(BN_BLINDING *b); -int BN_BLINDING_unlock(BN_BLINDING *b); - -unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); -void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); -BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, - const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, - int (*bn_mod_exp) (BIGNUM *r, - const BIGNUM *a, - const BIGNUM *p, - const BIGNUM *m, - BN_CTX *ctx, - BN_MONT_CTX *m_ctx), - BN_MONT_CTX *m_ctx); -# 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); -int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx); -int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, - BN_RECP_CTX *recp, BN_CTX *ctx); -int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); -int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, - BN_RECP_CTX *recp, BN_CTX *ctx); - -# ifndef OPENSSL_NO_EC2M - -/* - * Functions for arithmetic over binary polynomials represented by BIGNUMs. - * The BIGNUM::neg property of BIGNUMs representing binary polynomials is - * ignored. Note that input arguments are not const so that their bit arrays - * can be expanded to the appropriate size if needed. - */ - -/* - * r = a + b - */ -int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -# define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b) -/* - * r=a mod p - */ -int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); -/* r = (a * b) mod p */ -int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = (a * a) mod p */ -int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -/* r = (1 / b) mod p */ -int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); -/* r = (a / b) mod p */ -int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = (a ^ b) mod p */ -int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = sqrt(a) mod p */ -int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx); -/* r^2 + r = a mod p */ -int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx); -# define BN_GF2m_cmp(a, b) BN_ucmp((a), (b)) -/*- - * Some functions allow for representation of the irreducible polynomials - * as an unsigned int[], say p. The irreducible f(t) is then of the form: - * t^p[0] + t^p[1] + ... + t^p[k] - * where m = p[0] > p[1] > ... > p[k] = 0. - */ -/* r = a mod p */ -int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]); -/* r = (a * b) mod p */ -int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = (a * a) mod p */ -int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], - BN_CTX *ctx); -/* r = (1 / b) mod p */ -int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[], - BN_CTX *ctx); -/* r = (a / b) mod p */ -int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = (a ^ b) mod p */ -int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = sqrt(a) mod p */ -int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, - const int p[], BN_CTX *ctx); -/* r^2 + r = a mod p */ -int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a, - const int p[], BN_CTX *ctx); -int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max); -int BN_GF2m_arr2poly(const int p[], BIGNUM *a); - -# endif - -/* - * faster mod functions for the 'NIST primes' 0 <= a < p^2 - */ -int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); - -const BIGNUM *BN_get0_nist_prime_192(void); -const BIGNUM *BN_get0_nist_prime_224(void); -const BIGNUM *BN_get0_nist_prime_256(void); -const BIGNUM *BN_get0_nist_prime_384(void); -const BIGNUM *BN_get0_nist_prime_521(void); - -int (*BN_nist_mod_func(const BIGNUM *p)) (BIGNUM *r, const BIGNUM *a, - const BIGNUM *field, BN_CTX *ctx); - -int BN_generate_dsa_nonce(BIGNUM *out, const BIGNUM *range, - const BIGNUM *priv, const unsigned char *message, - size_t message_len, BN_CTX *ctx); - -/* Primes from RFC 2409 */ -BIGNUM *BN_get_rfc2409_prime_768(BIGNUM *bn); -BIGNUM *BN_get_rfc2409_prime_1024(BIGNUM *bn); - -/* Primes from RFC 3526 */ -BIGNUM *BN_get_rfc3526_prime_1536(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_2048(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_3072(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); - -# 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); - - -# ifdef __cplusplus -} -# endif -#endif 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 deleted file mode 100644 index 7c3f6ef3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bnerr.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * 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 OPENSSL_BNERR_H -# define OPENSSL_BNERR_H -# pragma once - -# include -# include -# include - - - -/* - * BN reason codes. - */ -# define BN_R_ARG2_LT_ARG3 100 -# define BN_R_BAD_RECIPROCAL 101 -# define BN_R_BIGNUM_TOO_LONG 114 -# define BN_R_BITS_TOO_SMALL 118 -# define BN_R_CALLED_WITH_EVEN_MODULUS 102 -# define BN_R_DIV_BY_ZERO 103 -# define BN_R_ENCODING_ERROR 104 -# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 -# define BN_R_INPUT_NOT_REDUCED 110 -# define BN_R_INVALID_LENGTH 106 -# define BN_R_INVALID_RANGE 115 -# define BN_R_INVALID_SHIFT 119 -# 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 -# define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 - -#endif 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 deleted file mode 100644 index 5773b986..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffer.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_BUFFER_H -# define OPENSSL_BUFFER_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_BUFFER_H -# endif - -# include -# ifndef OPENSSL_CRYPTO_H -# include -# endif -# include - - -#ifdef __cplusplus -extern "C" { -#endif - -# include -# include - -# 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 */ - char *data; - size_t max; /* size of buffer */ - unsigned long flags; -}; - -# define BUF_MEM_FLAG_SECURE 0x01 - -BUF_MEM *BUF_MEM_new(void); -BUF_MEM *BUF_MEM_new_ex(unsigned long flags); -void BUF_MEM_free(BUF_MEM *a); -size_t BUF_MEM_grow(BUF_MEM *str, size_t len); -size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len); -void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); - - -# ifdef __cplusplus -} -# endif -#endif 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 deleted file mode 100644 index d18b1f8f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/buffererr.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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_BUFFERERR_H -# define OPENSSL_BUFFERERR_H -# pragma once - -# include -# include -# include - - - -/* - * BUF reason codes. - */ - -#endif 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 deleted file mode 100644 index 88c2279e..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/camellia.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2006-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_CAMELLIA_H -# define OPENSSL_CAMELLIA_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_CAMELLIA_H -# endif - -# include - -# ifndef OPENSSL_NO_CAMELLIA -# include -#ifdef __cplusplus -extern "C" { -#endif - -# 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. - * Both sizes are in bytes. - */ - -/* This should be a hidden type, but EVP requires that the size be known */ - -# 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 */ - -struct camellia_key_st { - union { - double d; /* ensures 64-bit align */ - KEY_TABLE_TYPE rd_key; - } u; - int grand_rounds; -}; -typedef struct camellia_key_st CAMELLIA_KEY; - -# 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 -} -# endif -# endif - -#endif 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 deleted file mode 100644 index 0bf217be..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cast.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 1995-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_CAST_H -# define OPENSSL_CAST_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_CAST_H -# endif - -# include - -# ifndef OPENSSL_NO_CAST -# ifdef __cplusplus -extern "C" { -# endif - -# 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 -} -# endif -# endif - -#endif 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 deleted file mode 100644 index f5086183..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmac.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2010-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_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 -extern "C" { -# endif - -# 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 60beffd5..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h +++ /dev/null @@ -1,629 +0,0 @@ -/* - * 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 2 -# define OSSL_CMP_PVNO_3 3 -# define OSSL_CMP_PVNO OSSL_CMP_PVNO_2 /* v2 is the default */ - -/*- - * 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); - -OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_caCerts(const STACK_OF(X509) *caCerts); -int OSSL_CMP_ITAV_get0_caCerts(const OSSL_CMP_ITAV *itav, STACK_OF(X509) **out); - -OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaCert(const X509 *rootCaCert); -int OSSL_CMP_ITAV_get0_rootCaCert(const OSSL_CMP_ITAV *itav, X509 **out); -OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaKeyUpdate(const X509 *newWithNew, - const X509 *newWithOld, - const X509 *oldWithNew); -int OSSL_CMP_ITAV_get0_rootCaKeyUpdate(const OSSL_CMP_ITAV *itav, - X509 **newWithNew, - X509 **newWithOld, - X509 **oldWithNew); - -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); -OSSL_LIB_CTX *OSSL_CMP_CTX_get0_libctx(const OSSL_CMP_CTX *ctx); -const char *OSSL_CMP_CTX_get0_propq(const 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 -# define OSSL_CMP_OPT_USE_TLS 13 -/* 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); -# ifndef OPENSSL_NO_HTTP -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); -# endif -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); -# define OSSL_CMP_CTX_set0_trusted OSSL_CMP_CTX_set0_trustedStore -X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); -# define OSSL_CMP_CTX_get0_trusted OSSL_CMP_CTX_get0_trustedStore -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_serialNumber(OSSL_CMP_CTX *ctx, const ASN1_INTEGER *sn); -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_validatedSrvCert(const OSSL_CMP_CTX *ctx); -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 */ -# ifndef OPENSSL_NO_HTTP -OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, - const OSSL_CMP_MSG *req); -# endif - -/* 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); - -/* from cmp_genm.c */ -int OSSL_CMP_get1_caCerts(OSSL_CMP_CTX *ctx, STACK_OF(X509) **out); -int OSSL_CMP_get1_rootCaKeyUpdate(OSSL_CMP_CTX *ctx, - const X509 *oldWithOld, X509 **newWithNew, - X509 **newWithOld, X509 **oldWithNew); - -# 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 deleted file mode 100644 index 5bd8beb5..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h.in +++ /dev/null @@ -1,510 +0,0 @@ -/* - * {- 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 2 -# define OSSL_CMP_PVNO_3 3 -# define OSSL_CMP_PVNO OSSL_CMP_PVNO_2 /* v2 is the default */ - -/*- - * 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); - -OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_caCerts(const STACK_OF(X509) *caCerts); -int OSSL_CMP_ITAV_get0_caCerts(const OSSL_CMP_ITAV *itav, STACK_OF(X509) **out); - -OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaCert(const X509 *rootCaCert); -int OSSL_CMP_ITAV_get0_rootCaCert(const OSSL_CMP_ITAV *itav, X509 **out); -OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaKeyUpdate(const X509 *newWithNew, - const X509 *newWithOld, - const X509 *oldWithNew); -int OSSL_CMP_ITAV_get0_rootCaKeyUpdate(const OSSL_CMP_ITAV *itav, - X509 **newWithNew, - X509 **newWithOld, - X509 **oldWithNew); - -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); -OSSL_LIB_CTX *OSSL_CMP_CTX_get0_libctx(const OSSL_CMP_CTX *ctx); -const char *OSSL_CMP_CTX_get0_propq(const 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 -# define OSSL_CMP_OPT_USE_TLS 13 -/* 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); -# ifndef OPENSSL_NO_HTTP -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); -# endif -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); -# define OSSL_CMP_CTX_set0_trusted OSSL_CMP_CTX_set0_trustedStore -X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); -# define OSSL_CMP_CTX_get0_trusted OSSL_CMP_CTX_get0_trustedStore -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_serialNumber(OSSL_CMP_CTX *ctx, const ASN1_INTEGER *sn); -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_validatedSrvCert(const OSSL_CMP_CTX *ctx); -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 */ -# ifndef OPENSSL_NO_HTTP -OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, - const OSSL_CMP_MSG *req); -# endif - -/* 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); - -/* from cmp_genm.c */ -int OSSL_CMP_get1_caCerts(OSSL_CMP_CTX *ctx, STACK_OF(X509) **out); -int OSSL_CMP_get1_rootCaKeyUpdate(OSSL_CMP_CTX *ctx, - const X509 *oldWithOld, X509 **newWithNew, - X509 **newWithOld, X509 **oldWithNew); - -# 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 deleted file mode 100644 index 9a168922..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp_util.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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 deleted file mode 100644 index 57a6effb..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmperr.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * 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_GETTING_GENP 192 -# define CMP_R_INVALID_ARGS 100 -# define CMP_R_INVALID_GENP 193 -# define CMP_R_INVALID_OPTION 174 -# define CMP_R_INVALID_ROOTCAKEYUPDATE 195 -# 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_UNCLEAN_CTX 191 -# 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 deleted file mode 100644 index fe86a5c7..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h +++ /dev/null @@ -1,508 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/cms.h.in - * - * Copyright 2008-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_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_EnvelopedData_st CMS_EnvelopedData; -typedef struct CMS_ContentInfo_st CMS_ContentInfo; -typedef struct CMS_SignerInfo_st CMS_SignerInfo; -typedef struct CMS_SignedData_st CMS_SignedData; -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; - -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_ITEM(CMS_EnvelopedData) -DECLARE_ASN1_ALLOC_FUNCTIONS(CMS_SignedData) -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); -int CMS_final_digest(CMS_ContentInfo *cms, - const unsigned char *md, unsigned int mdlen, 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 *libctx, - 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 *libctx, 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 *libctx, - 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 *libctx, - 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 *libctx, 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 *libctx, - 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 *libctx, - const char *propq); -BIO *CMS_EnvelopedData_decrypt(CMS_EnvelopedData *env, BIO *detached_data, - EVP_PKEY *pkey, X509 *cert, - ASN1_OCTET_STRING *secret, unsigned int flags, - OSSL_LIB_CTX *libctx, 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); -BIO *CMS_SignedData_verify(CMS_SignedData *sd, BIO *detached_data, - STACK_OF(X509) *scerts, X509_STORE *store, - STACK_OF(X509) *extra, STACK_OF(X509_CRL) *crls, - unsigned int flags, - OSSL_LIB_CTX *libctx, const char *propq); - -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 *libctx); - -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/cms.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h.in deleted file mode 100644 index 23966770..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h.in +++ /dev/null @@ -1,410 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 2008-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_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_EnvelopedData_st CMS_EnvelopedData; -typedef struct CMS_ContentInfo_st CMS_ContentInfo; -typedef struct CMS_SignerInfo_st CMS_SignerInfo; -typedef struct CMS_SignedData_st CMS_SignedData; -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_ITEM(CMS_EnvelopedData) -DECLARE_ASN1_ALLOC_FUNCTIONS(CMS_SignedData) -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); -int CMS_final_digest(CMS_ContentInfo *cms, - const unsigned char *md, unsigned int mdlen, 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 *libctx, - 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 *libctx, 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 *libctx, - 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 *libctx, - 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 *libctx, 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 *libctx, - 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 *libctx, - const char *propq); -BIO *CMS_EnvelopedData_decrypt(CMS_EnvelopedData *env, BIO *detached_data, - EVP_PKEY *pkey, X509 *cert, - ASN1_OCTET_STRING *secret, unsigned int flags, - OSSL_LIB_CTX *libctx, 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); -BIO *CMS_SignedData_verify(CMS_SignedData *sd, BIO *detached_data, - STACK_OF(X509) *scerts, X509_STORE *store, - STACK_OF(X509) *extra, STACK_OF(X509_CRL) *crls, - unsigned int flags, - OSSL_LIB_CTX *libctx, const char *propq); - -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 *libctx); - -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 deleted file mode 100644 index 887035b1..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * 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_CMSERR_H -# define OPENSSL_CMSERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_CMS - - -/* - * CMS reason codes. - */ -# define CMS_R_ADD_SIGNER_ERROR 99 -# define CMS_R_ATTRIBUTE_ERROR 161 -# 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 -# define CMS_R_CMS_LIB 104 -# define CMS_R_CONTENTIDENTIFIER_MISMATCH 170 -# define CMS_R_CONTENT_NOT_FOUND 105 -# define CMS_R_CONTENT_TYPE_MISMATCH 171 -# define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106 -# define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107 -# define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108 -# 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 -# define CMS_R_MSGSIGDIGEST_ERROR 172 -# define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162 -# define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163 -# define CMS_R_NEED_ONE_SIGNER 164 -# define CMS_R_NOT_A_SIGNED_RECEIPT 165 -# define CMS_R_NOT_ENCRYPTED_DATA 122 -# define CMS_R_NOT_KEK 123 -# define CMS_R_NOT_KEY_AGREEMENT 181 -# define CMS_R_NOT_KEY_TRANSPORT 124 -# define CMS_R_NOT_PWRI 177 -# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125 -# define CMS_R_NO_CIPHER 126 -# define CMS_R_NO_CONTENT 127 -# define CMS_R_NO_CONTENT_TYPE 173 -# define CMS_R_NO_DEFAULT_DIGEST 128 -# define CMS_R_NO_DIGEST_SET 129 -# define CMS_R_NO_KEY 130 -# define CMS_R_NO_KEY_OR_CERT 174 -# define CMS_R_NO_MATCHING_DIGEST 131 -# define CMS_R_NO_MATCHING_RECIPIENT 132 -# define CMS_R_NO_MATCHING_SIGNATURE 166 -# define CMS_R_NO_MSGSIGDIGEST 167 -# define CMS_R_NO_PASSWORD 178 -# define CMS_R_NO_PRIVATE_KEY 133 -# define CMS_R_NO_PUBLIC_KEY 134 -# define CMS_R_NO_RECEIPT_REQUEST 168 -# define CMS_R_NO_SIGNERS 135 -# define CMS_R_OPERATION_UNSUPPORTED 182 -# 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 -# define CMS_R_STORE_INIT_ERROR 141 -# define CMS_R_TYPE_NOT_COMPRESSED_DATA 142 -# define CMS_R_TYPE_NOT_DATA 143 -# define CMS_R_TYPE_NOT_DIGESTED_DATA 144 -# define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145 -# define CMS_R_TYPE_NOT_ENVELOPED_DATA 146 -# define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147 -# define CMS_R_UNKNOWN_CIPHER 148 -# define CMS_R_UNKNOWN_DIGEST_ALGORITHM 149 -# define CMS_R_UNKNOWN_ID 150 -# 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_SIGNATURE_ALGORITHM 195 -# define CMS_R_UNSUPPORTED_TYPE 156 -# define CMS_R_UNWRAP_ERROR 157 -# define CMS_R_UNWRAP_FAILURE 180 -# define CMS_R_VERIFICATION_FAILURE 158 -# define CMS_R_WRAP_ERROR 159 - -# endif -#endif 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 deleted file mode 100644 index f81ba0f3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_COMP_H -# define OPENSSL_COMP_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_COMP_H -# endif - -# include - -# ifndef OPENSSL_NO_COMP -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - - - -COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); -const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx); -int COMP_CTX_get_type(const COMP_CTX* comp); -int COMP_get_type(const COMP_METHOD *meth); -const char *COMP_get_name(const COMP_METHOD *meth); -void COMP_CTX_free(COMP_CTX *ctx); - -int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, - unsigned char *in, int ilen); -int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, - unsigned char *in, int ilen); - -COMP_METHOD *COMP_zlib(void); -COMP_METHOD *COMP_zlib_oneshot(void); -COMP_METHOD *COMP_brotli(void); -COMP_METHOD *COMP_brotli_oneshot(void); -COMP_METHOD *COMP_zstd(void); -COMP_METHOD *COMP_zstd_oneshot(void); - -#ifndef OPENSSL_NO_DEPRECATED_1_1_0 -# define COMP_zlib_cleanup() while(0) continue -#endif - -# ifdef OPENSSL_BIO_H -const BIO_METHOD *BIO_f_zlib(void); -const BIO_METHOD *BIO_f_brotli(void); -const BIO_METHOD *BIO_f_zstd(void); -# endif - - -# ifdef __cplusplus -} -# endif -# endif -#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 deleted file mode 100644 index 1948d37f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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_COMPERR_H -# define OPENSSL_COMPERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_COMP - - -/* - * COMP reason codes. - */ -# define COMP_R_BROTLI_DECODE_ERROR 102 -# define COMP_R_BROTLI_ENCODE_ERROR 103 -# define COMP_R_BROTLI_NOT_SUPPORTED 104 -# define COMP_R_ZLIB_DEFLATE_ERROR 99 -# define COMP_R_ZLIB_INFLATE_ERROR 100 -# define COMP_R_ZLIB_NOT_SUPPORTED 101 -# define COMP_R_ZSTD_COMPRESS_ERROR 105 -# define COMP_R_ZSTD_DECODE_ERROR 106 -# define COMP_R_ZSTD_DECOMPRESS_ERROR 107 -# define COMP_R_ZSTD_NOT_SUPPORTED 108 - -# endif -#endif 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 deleted file mode 100644 index 61bb0087..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h +++ /dev/null @@ -1,214 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/conf.h.in - * - * 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_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; - -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; - -# 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.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h.in deleted file mode 100644 index 56632870..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h.in +++ /dev/null @@ -1,177 +0,0 @@ -/* - * {- 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 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 deleted file mode 100644 index ed67d577..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf_api.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_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 - -#ifdef __cplusplus -extern "C" { -#endif - -/* Up until OpenSSL 0.9.5a, this was new_section */ -CONF_VALUE *_CONF_new_section(CONF *conf, const char *section); -/* Up until OpenSSL 0.9.5a, this was get_section */ -CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section); -/* Up until OpenSSL 0.9.5a, this was CONF_get_section */ -STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, - const char *section); - -int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value); -char *_CONF_get_string(const CONF *conf, const char *section, - const char *name); -long _CONF_get_number(const CONF *conf, const char *section, - const char *name); - -int _CONF_new_data(CONF *conf); -void _CONF_free_data(CONF *conf); - -#ifdef __cplusplus -} -#endif -#endif 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 deleted file mode 100644 index a8798e79..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conferr.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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_CONFERR_H -# define OPENSSL_CONFERR_H -# pragma once - -# include -# include -# include - - - -/* - * 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 -# define CONF_R_MODULE_INITIALIZATION_ERROR 109 -# define CONF_R_NO_CLOSE_BRACE 102 -# define CONF_R_NO_CONF 105 -# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 -# define CONF_R_NO_SECTION 107 -# 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_RECURSIVE_SECTION_REFERENCE 126 -# 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 -# define CONF_R_SSL_SECTION_NOT_FOUND 120 -# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 -# define CONF_R_UNKNOWN_MODULE_NAME 113 -# define CONF_R_VARIABLE_EXPANSION_TOO_LONG 116 -# define CONF_R_VARIABLE_HAS_NO_VALUE 104 - -#endif 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 deleted file mode 100644 index bea47258..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h +++ /dev/null @@ -1,281 +0,0 @@ -/* - * 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 30200 -# 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_APPS -# define OPENSSL_NO_APPS -# endif -# ifndef OPENSSL_NO_ASAN -# define OPENSSL_NO_ASAN -# endif -# ifndef OPENSSL_NO_ASM -# define OPENSSL_NO_ASM -# endif -# ifndef OPENSSL_NO_ASYNC -# define OPENSSL_NO_ASYNC -# endif -# ifndef OPENSSL_NO_AUTOERRINIT -# define OPENSSL_NO_AUTOERRINIT -# endif -# ifndef OPENSSL_NO_BROTLI -# define OPENSSL_NO_BROTLI -# endif -# ifndef OPENSSL_NO_BROTLI_DYNAMIC -# define OPENSSL_NO_BROTLI_DYNAMIC -# endif -# ifndef OPENSSL_NO_CAPIENG -# define OPENSSL_NO_CAPIENG -# endif -# ifndef OPENSSL_NO_CMP -# define OPENSSL_NO_CMP -# endif -# ifndef OPENSSL_NO_CMS -# define OPENSSL_NO_CMS -# endif -# ifndef OPENSSL_NO_COMP -# define OPENSSL_NO_COMP -# endif -# ifndef OPENSSL_NO_CRMF -# define OPENSSL_NO_CRMF -# 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_DEFAULT_THREAD_POOL -# define OPENSSL_NO_DEFAULT_THREAD_POOL -# endif -# ifndef OPENSSL_NO_DEPRECATED -# define OPENSSL_NO_DEPRECATED -# endif -# ifndef OPENSSL_NO_DEVCRYPTOENG -# define OPENSSL_NO_DEVCRYPTOENG -# endif -# ifndef OPENSSL_NO_DGRAM -# define OPENSSL_NO_DGRAM -# endif -# ifndef OPENSSL_NO_DOCS -# define OPENSSL_NO_DOCS -# endif -# ifndef OPENSSL_NO_DSA -# define OPENSSL_NO_DSA -# endif -# ifndef OPENSSL_NO_DSO -# define OPENSSL_NO_DSO -# endif -# ifndef OPENSSL_NO_DTLS -# define OPENSSL_NO_DTLS -# endif -# ifndef OPENSSL_NO_DTLS1 -# define OPENSSL_NO_DTLS1 -# endif -# ifndef OPENSSL_NO_DTLS1_2 -# define OPENSSL_NO_DTLS1_2 -# endif -# ifndef OPENSSL_NO_EC2M -# define OPENSSL_NO_EC2M -# 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_ENGINE -# define OPENSSL_NO_ENGINE -# endif -# ifndef OPENSSL_NO_ERR -# define OPENSSL_NO_ERR -# endif -# ifndef OPENSSL_NO_EXTERNAL_TESTS -# define OPENSSL_NO_EXTERNAL_TESTS -# endif -# ifndef OPENSSL_NO_FILENAMES -# define OPENSSL_NO_FILENAMES -# 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_GOST -# define OPENSSL_NO_GOST -# endif -# ifndef OPENSSL_NO_HTTP -# define OPENSSL_NO_HTTP -# endif -# ifndef OPENSSL_NO_IDEA -# define OPENSSL_NO_IDEA -# 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_MD4 -# define OPENSSL_NO_MD4 -# endif -# ifndef OPENSSL_NO_MSAN -# define OPENSSL_NO_MSAN -# endif -# ifndef OPENSSL_NO_MULTIBLOCK -# define OPENSSL_NO_MULTIBLOCK -# endif -# ifndef OPENSSL_NO_NEXTPROTONEG -# define OPENSSL_NO_NEXTPROTONEG -# endif -# ifndef OPENSSL_NO_OCSP -# define OPENSSL_NO_OCSP -# endif -# ifndef OPENSSL_NO_PADLOCKENG -# define OPENSSL_NO_PADLOCKENG -# endif -# ifndef OPENSSL_NO_PSK -# define OPENSSL_NO_PSK -# endif -# ifndef OPENSSL_NO_QUIC -# define OPENSSL_NO_QUIC -# endif -# ifndef OPENSSL_NO_RC5 -# define OPENSSL_NO_RC5 -# endif -# ifndef OPENSSL_NO_SCTP -# define OPENSSL_NO_SCTP -# endif -# ifndef OPENSSL_NO_SOCK -# define OPENSSL_NO_SOCK -# endif -# ifndef OPENSSL_NO_SRP -# define OPENSSL_NO_SRP -# 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_STDIO -# define OPENSSL_NO_STDIO -# endif -# ifndef OPENSSL_NO_TESTS -# define OPENSSL_NO_TESTS -# endif -# ifndef OPENSSL_NO_TFO -# define OPENSSL_NO_TFO -# endif -# ifndef OPENSSL_NO_THREAD_POOL -# define OPENSSL_NO_THREAD_POOL -# endif -# ifndef OPENSSL_NO_TRACE -# define OPENSSL_NO_TRACE -# endif -# ifndef OPENSSL_NO_UBSAN -# define OPENSSL_NO_UBSAN -# endif -# ifndef OPENSSL_NO_UI_CONSOLE -# define OPENSSL_NO_UI_CONSOLE -# 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_WINSTORE -# define OPENSSL_NO_WINSTORE -# endif -# ifndef OPENSSL_NO_ZLIB -# define OPENSSL_NO_ZLIB -# endif -# ifndef OPENSSL_NO_ZLIB_DYNAMIC -# define OPENSSL_NO_ZLIB_DYNAMIC -# endif -# ifndef OPENSSL_NO_ZSTD -# define OPENSSL_NO_ZSTD -# endif -# ifndef OPENSSL_NO_ZSTD_DYNAMIC -# define OPENSSL_NO_ZSTD_DYNAMIC -# 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 - -# if defined(OPENSSL_NO_COMP) || (defined(OPENSSL_NO_BROTLI) && defined(OPENSSL_NO_ZSTD) && defined(OPENSSL_NO_ZLIB)) -# define OPENSSL_NO_COMP_ALG -# else -# undef OPENSSL_NO_COMP_ALG -# endif - -# 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 deleted file mode 100644 index 86077d0a..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h.in +++ /dev/null @@ -1,75 +0,0 @@ -/* - * {- 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} -} - -# if defined(OPENSSL_NO_COMP) || (defined(OPENSSL_NO_BROTLI) && defined(OPENSSL_NO_ZSTD) && defined(OPENSSL_NO_ZLIB)) -# define OPENSSL_NO_COMP_ALG -# else -# undef OPENSSL_NO_COMP_ALG -# endif - -# 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 deleted file mode 100644 index 17cefaa4..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conftypes.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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 deleted file mode 100644 index 18c19918..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core.h +++ /dev/null @@ -1,236 +0,0 @@ -/* - * 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_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); -}; - -# define OSSL_DISPATCH_END \ - { 0, NULL } - -/* - * 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 deleted file mode 100644 index 9b03f20c..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_dispatch.h +++ /dev/null @@ -1,984 +0,0 @@ -/* - * 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_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)) - -/* New seeding functions prototypes with the 101-104 series */ -#define OSSL_FUNC_CLEANUP_USER_ENTROPY 96 -#define OSSL_FUNC_CLEANUP_USER_NONCE 97 -#define OSSL_FUNC_GET_USER_ENTROPY 98 -#define OSSL_FUNC_GET_USER_NONCE 99 - -#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(size_t, get_user_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(void, cleanup_user_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(size_t, get_user_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)) -OSSL_CORE_MAKE_FUNC(void, cleanup_user_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)) - -/* Extended import and export functions */ -# define OSSL_FUNC_KEYMGMT_IMPORT_TYPES_EX 45 -# define OSSL_FUNC_KEYMGMT_EXPORT_TYPES_EX 46 -OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_import_types_ex, - (void *provctx, int selection)) -OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types_ex, - (void *provctx, 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 -# define OSSL_FUNC_KEM_AUTH_ENCAPSULATE_INIT 12 -# define OSSL_FUNC_KEM_AUTH_DECAPSULATE_INIT 13 - -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_auth_encapsulate_init, (void *ctx, void *provkey, - void *authprivkey, - 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_auth_decapsulate_init, (void *ctx, void *provkey, - void *authpubkey, - 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 -#define OSSL_FUNC_STORE_DELETE 9 -#define OSSL_FUNC_STORE_OPEN_EX 10 -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)) -OSSL_CORE_MAKE_FUNC(int, store_delete, - (void *provctx, const char *uri, const OSSL_PARAM params[], - OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) -OSSL_CORE_MAKE_FUNC(void *, store_open_ex, - (void *provctx, const char *uri, const OSSL_PARAM params[], - OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_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 deleted file mode 100644 index ffffe90f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_names.h +++ /dev/null @@ -1,475 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/core_names.h.in - * - * 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 - -/* 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" - -/* Known CIPHER names (not a complete list) */ -# define OSSL_CIPHER_NAME_AES_128_GCM_SIV "AES-128-GCM-SIV" -# define OSSL_CIPHER_NAME_AES_192_GCM_SIV "AES-192-GCM-SIV" -# define OSSL_CIPHER_NAME_AES_256_GCM_SIV "AES-256-GCM-SIV" - -/* 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_256_192 "SHA2-256/192" -# 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" - -/* 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" - -/* 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" -# define OSSL_KDF_NAME_HMACDRBGKDF "HMAC-DRBG-KDF" - -/* 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" - -/* 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" - -/* OSSL_KEM_PARAM_OPERATION values */ -#define OSSL_KEM_PARAM_OPERATION_RSASVE "RSASVE" -#define OSSL_KEM_PARAM_OPERATION_DHKEM "DHKEM" - -/* Parameter name definitions - generated by util/perl/OpenSSL/paramnames.pm */ -# define OSSL_ALG_PARAM_CIPHER "cipher" -# define OSSL_ALG_PARAM_DIGEST "digest" -# define OSSL_ALG_PARAM_ENGINE "engine" -# define OSSL_ALG_PARAM_MAC "mac" -# define OSSL_ALG_PARAM_PROPERTIES "properties" -# define OSSL_ASYM_CIPHER_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -# define OSSL_ASYM_CIPHER_PARAM_ENGINE OSSL_PKEY_PARAM_ENGINE -# define OSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION "implicit-rejection" -# 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" -# define OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL "oaep-label" -# define OSSL_ASYM_CIPHER_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE -# define OSSL_ASYM_CIPHER_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES -# define OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION "tls-client-version" -# define OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION "tls-negotiated-version" -# define OSSL_CAPABILITY_TLS_GROUP_ALG "tls-group-alg" -# define OSSL_CAPABILITY_TLS_GROUP_ID "tls-group-id" -# define OSSL_CAPABILITY_TLS_GROUP_IS_KEM "tls-group-is-kem" -# define OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS "tls-max-dtls" -# 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_MIN_TLS "tls-min-tls" -# 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_SECURITY_BITS "tls-group-sec-bits" -# define OSSL_CAPABILITY_TLS_SIGALG_CODE_POINT "tls-sigalg-code-point" -# define OSSL_CAPABILITY_TLS_SIGALG_HASH_NAME "tls-sigalg-hash-name" -# define OSSL_CAPABILITY_TLS_SIGALG_HASH_OID "tls-sigalg-hash-oid" -# define OSSL_CAPABILITY_TLS_SIGALG_IANA_NAME "tls-sigalg-iana-name" -# define OSSL_CAPABILITY_TLS_SIGALG_KEYTYPE "tls-sigalg-keytype" -# define OSSL_CAPABILITY_TLS_SIGALG_KEYTYPE_OID "tls-sigalg-keytype-oid" -# define OSSL_CAPABILITY_TLS_SIGALG_MAX_TLS "tls-max-tls" -# define OSSL_CAPABILITY_TLS_SIGALG_MIN_TLS "tls-min-tls" -# define OSSL_CAPABILITY_TLS_SIGALG_NAME "tls-sigalg-name" -# define OSSL_CAPABILITY_TLS_SIGALG_OID "tls-sigalg-oid" -# define OSSL_CAPABILITY_TLS_SIGALG_SECURITY_BITS "tls-sigalg-sec-bits" -# define OSSL_CAPABILITY_TLS_SIGALG_SIG_NAME "tls-sigalg-sig-name" -# define OSSL_CAPABILITY_TLS_SIGALG_SIG_OID "tls-sigalg-sig-oid" -# define OSSL_CIPHER_PARAM_AEAD "aead" -# define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN -# define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey" -# define OSSL_CIPHER_PARAM_AEAD_TAG "tag" -# define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" -# define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD "tlsaad" -# define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD "tlsaadpad" -# define OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN "tlsivgen" -# define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" -# define OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV "tlsivinv" -# define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS "alg_id_param" -# define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize" -# define OSSL_CIPHER_PARAM_CTS "cts" -# define OSSL_CIPHER_PARAM_CTS_MODE "cts_mode" -# define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv" -# define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey" -# define OSSL_CIPHER_PARAM_IV "iv" -# define OSSL_CIPHER_PARAM_IVLEN "ivlen" -# define OSSL_CIPHER_PARAM_KEYLEN "keylen" -# define OSSL_CIPHER_PARAM_MODE "mode" -# define OSSL_CIPHER_PARAM_NUM "num" -# define OSSL_CIPHER_PARAM_PADDING "padding" -# define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" -# define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" -# define OSSL_CIPHER_PARAM_ROUNDS "rounds" -# define OSSL_CIPHER_PARAM_SPEED "speed" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD "tls1multi_aad" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN "tls1multi_aadpacklen" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC "tls1multi_enc" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN "tls1multi_encin" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN "tls1multi_enclen" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE "tls1multi_interleave" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE "tls1multi_maxbufsz" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT "tls1multi_maxsndfrag" -# define OSSL_CIPHER_PARAM_TLS_MAC "tls-mac" -# define OSSL_CIPHER_PARAM_TLS_MAC_SIZE "tls-mac-size" -# define OSSL_CIPHER_PARAM_TLS_VERSION "tls-version" -# define OSSL_CIPHER_PARAM_UPDATED_IV "updated-iv" -# define OSSL_CIPHER_PARAM_USE_BITS "use-bits" -# define OSSL_CIPHER_PARAM_XTS_STANDARD "xts_standard" -# define OSSL_DECODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -# define OSSL_DIGEST_PARAM_ALGID_ABSENT "algid-absent" -# define OSSL_DIGEST_PARAM_BLOCK_SIZE "blocksize" -# define OSSL_DIGEST_PARAM_MICALG "micalg" -# define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type" -# define OSSL_DIGEST_PARAM_SIZE "size" -# define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms" -# define OSSL_DIGEST_PARAM_XOF "xof" -# define OSSL_DIGEST_PARAM_XOFLEN "xoflen" -# define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -# define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -# define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required" -# define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC -# define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen" -# define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen" -# define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length" -# define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen" -# define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen" -# define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen" -# define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length" -# define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen" -# define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance" -# define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -# define OSSL_DRBG_PARAM_RANDOM_DATA "random_data" -# define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter" -# define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests" -# define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time" -# define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval" -# define OSSL_DRBG_PARAM_SIZE "size" -# define OSSL_DRBG_PARAM_USE_DF "use_derivation_function" -# define OSSL_ENCODER_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -# define OSSL_ENCODER_PARAM_ENCRYPT_LEVEL "encrypt-level" -# define OSSL_ENCODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -# define OSSL_ENCODER_PARAM_SAVE_PARAMETERS "save-parameters" -# define OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE "ecdh-cofactor-mode" -# define OSSL_EXCHANGE_PARAM_KDF_DIGEST "kdf-digest" -# define OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS "kdf-digest-props" -# define OSSL_EXCHANGE_PARAM_KDF_OUTLEN "kdf-outlen" -# define OSSL_EXCHANGE_PARAM_KDF_TYPE "kdf-type" -# define OSSL_EXCHANGE_PARAM_KDF_UKM "kdf-ukm" -# define OSSL_EXCHANGE_PARAM_PAD "pad" -# define OSSL_GEN_PARAM_ITERATION "iteration" -# define OSSL_GEN_PARAM_POTENTIAL "potential" -# define OSSL_KDF_PARAM_ARGON2_AD "ad" -# define OSSL_KDF_PARAM_ARGON2_LANES "lanes" -# define OSSL_KDF_PARAM_ARGON2_MEMCOST "memcost" -# define OSSL_KDF_PARAM_ARGON2_VERSION "version" -# define OSSL_KDF_PARAM_CEK_ALG "cekalg" -# define OSSL_KDF_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -# define OSSL_KDF_PARAM_CONSTANT "constant" -# define OSSL_KDF_PARAM_DATA "data" -# define OSSL_KDF_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -# define OSSL_KDF_PARAM_EARLY_CLEAN "early_clean" -# define OSSL_KDF_PARAM_HMACDRBG_ENTROPY "entropy" -# define OSSL_KDF_PARAM_HMACDRBG_NONCE "nonce" -# define OSSL_KDF_PARAM_INFO "info" -# define OSSL_KDF_PARAM_ITER "iter" -# define OSSL_KDF_PARAM_KBKDF_R "r" -# define OSSL_KDF_PARAM_KBKDF_USE_L "use-l" -# define OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR "use-separator" -# define OSSL_KDF_PARAM_KEY "key" -# define OSSL_KDF_PARAM_LABEL "label" -# define OSSL_KDF_PARAM_MAC OSSL_ALG_PARAM_MAC -# define OSSL_KDF_PARAM_MAC_SIZE "maclen" -# define OSSL_KDF_PARAM_MODE "mode" -# define OSSL_KDF_PARAM_PASSWORD "pass" -# define OSSL_KDF_PARAM_PKCS12_ID "id" -# define OSSL_KDF_PARAM_PKCS5 "pkcs5" -# define OSSL_KDF_PARAM_PREFIX "prefix" -# define OSSL_KDF_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -# define OSSL_KDF_PARAM_SALT "salt" -# define OSSL_KDF_PARAM_SCRYPT_MAXMEM "maxmem_bytes" -# define OSSL_KDF_PARAM_SCRYPT_N "n" -# define OSSL_KDF_PARAM_SCRYPT_P "p" -# define OSSL_KDF_PARAM_SCRYPT_R "r" -# define OSSL_KDF_PARAM_SECRET "secret" -# define OSSL_KDF_PARAM_SEED "seed" -# define OSSL_KDF_PARAM_SIZE "size" -# define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id" -# define OSSL_KDF_PARAM_SSHKDF_TYPE "type" -# define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash" -# define OSSL_KDF_PARAM_THREADS "threads" -# define OSSL_KDF_PARAM_UKM "ukm" -# 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_PRIVINFO "supp-privinfo" -# define OSSL_KDF_PARAM_X942_SUPP_PUBINFO "supp-pubinfo" -# define OSSL_KDF_PARAM_X942_USE_KEYBITS "use-keybits" -# define OSSL_KEM_PARAM_IKME "ikme" -# define OSSL_KEM_PARAM_OPERATION "operation" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_BLOCK_PADDING "block_padding" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_MAX_EARLY_DATA "max_early_data" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_MAX_FRAG_LEN "max_frag_len" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_MODE "mode" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_OPTIONS "options" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_READ_AHEAD "read_ahead" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_STREAM_MAC "stream_mac" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_TLSTREE "tlstree" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_USE_ETM "use_etm" -# define OSSL_LIBSSL_RECORD_LAYER_READ_BUFFER_LEN "read_buffer_len" -# define OSSL_MAC_PARAM_BLOCK_SIZE "block-size" -# define OSSL_MAC_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -# define OSSL_MAC_PARAM_CUSTOM "custom" -# define OSSL_MAC_PARAM_C_ROUNDS "c-rounds" -# define OSSL_MAC_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -# define OSSL_MAC_PARAM_DIGEST_NOINIT "digest-noinit" -# define OSSL_MAC_PARAM_DIGEST_ONESHOT "digest-oneshot" -# define OSSL_MAC_PARAM_D_ROUNDS "d-rounds" -# define OSSL_MAC_PARAM_IV "iv" -# define OSSL_MAC_PARAM_KEY "key" -# define OSSL_MAC_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -# define OSSL_MAC_PARAM_SALT "salt" -# define OSSL_MAC_PARAM_SIZE "size" -# define OSSL_MAC_PARAM_TLS_DATA_SIZE "tls-data-size" -# define OSSL_MAC_PARAM_XOF "xof" -# define OSSL_OBJECT_PARAM_DATA "data" -# define OSSL_OBJECT_PARAM_DATA_STRUCTURE "data-structure" -# define OSSL_OBJECT_PARAM_DATA_TYPE "data-type" -# define OSSL_OBJECT_PARAM_DESC "desc" -# define OSSL_OBJECT_PARAM_REFERENCE "reference" -# define OSSL_OBJECT_PARAM_TYPE "type" -# define OSSL_PASSPHRASE_PARAM_INFO "info" -# define OSSL_PKEY_PARAM_BITS "bits" -# define OSSL_PKEY_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -# define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" -# define OSSL_PKEY_PARAM_DHKEM_IKM "dhkem-ikm" -# define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator" -# define OSSL_PKEY_PARAM_DH_PRIV_LEN "priv_len" -# define OSSL_PKEY_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -# define OSSL_PKEY_PARAM_DIGEST_SIZE "digest-size" -# define OSSL_PKEY_PARAM_DIST_ID "distid" -# define OSSL_PKEY_PARAM_EC_A "a" -# define OSSL_PKEY_PARAM_EC_B "b" -# define OSSL_PKEY_PARAM_EC_CHAR2_M "m" -# 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_CHAR2_TP_BASIS "tp" -# define OSSL_PKEY_PARAM_EC_CHAR2_TYPE "basis-type" -# define OSSL_PKEY_PARAM_EC_COFACTOR "cofactor" -# define OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS "decoded-from-explicit" -# define OSSL_PKEY_PARAM_EC_ENCODING "encoding" -# define OSSL_PKEY_PARAM_EC_FIELD_TYPE "field-type" -# define OSSL_PKEY_PARAM_EC_GENERATOR "generator" -# define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check" -# define OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC "include-public" -# define OSSL_PKEY_PARAM_EC_ORDER "order" -# define OSSL_PKEY_PARAM_EC_P "p" -# define OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT "point-format" -# define OSSL_PKEY_PARAM_EC_PUB_X "qx" -# define OSSL_PKEY_PARAM_EC_PUB_Y "qy" -# define OSSL_PKEY_PARAM_EC_SEED "seed" -# define OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY "encoded-pub-key" -# define OSSL_PKEY_PARAM_ENGINE OSSL_ALG_PARAM_ENGINE -# define OSSL_PKEY_PARAM_FFC_COFACTOR "j" -# 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_FFC_G "g" -# define OSSL_PKEY_PARAM_FFC_GINDEX "gindex" -# define OSSL_PKEY_PARAM_FFC_H "hindex" -# define OSSL_PKEY_PARAM_FFC_P "p" -# define OSSL_PKEY_PARAM_FFC_PBITS "pbits" -# define OSSL_PKEY_PARAM_FFC_PCOUNTER "pcounter" -# define OSSL_PKEY_PARAM_FFC_Q "q" -# define OSSL_PKEY_PARAM_FFC_QBITS "qbits" -# define OSSL_PKEY_PARAM_FFC_SEED "seed" -# define OSSL_PKEY_PARAM_FFC_TYPE "type" -# define OSSL_PKEY_PARAM_FFC_VALIDATE_G "validate-g" -# define OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY "validate-legacy" -# define OSSL_PKEY_PARAM_FFC_VALIDATE_PQ "validate-pq" -# define OSSL_PKEY_PARAM_GROUP_NAME "group" -# define OSSL_PKEY_PARAM_IMPLICIT_REJECTION "implicit-rejection" -# define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest" -# define OSSL_PKEY_PARAM_MASKGENFUNC "mgf" -# define OSSL_PKEY_PARAM_MAX_SIZE "max-size" -# define OSSL_PKEY_PARAM_MGF1_DIGEST "mgf1-digest" -# define OSSL_PKEY_PARAM_MGF1_PROPERTIES "mgf1-properties" -# define OSSL_PKEY_PARAM_PAD_MODE "pad-mode" -# define OSSL_PKEY_PARAM_PRIV_KEY "priv" -# define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -# define OSSL_PKEY_PARAM_PUB_KEY "pub" -# define OSSL_PKEY_PARAM_RSA_BITS OSSL_PKEY_PARAM_BITS -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 "rsa-coefficient1" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT2 "rsa-coefficient2" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT3 "rsa-coefficient3" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT4 "rsa-coefficient4" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT5 "rsa-coefficient5" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT6 "rsa-coefficient6" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT7 "rsa-coefficient7" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT8 "rsa-coefficient8" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT9 "rsa-coefficient9" -# define OSSL_PKEY_PARAM_RSA_D "d" -# 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_E "e" -# define OSSL_PKEY_PARAM_RSA_EXPONENT "rsa-exponent" -# define OSSL_PKEY_PARAM_RSA_EXPONENT1 "rsa-exponent1" -# define OSSL_PKEY_PARAM_RSA_EXPONENT10 "rsa-exponent10" -# define OSSL_PKEY_PARAM_RSA_EXPONENT2 "rsa-exponent2" -# define OSSL_PKEY_PARAM_RSA_EXPONENT3 "rsa-exponent3" -# define OSSL_PKEY_PARAM_RSA_EXPONENT4 "rsa-exponent4" -# define OSSL_PKEY_PARAM_RSA_EXPONENT5 "rsa-exponent5" -# define OSSL_PKEY_PARAM_RSA_EXPONENT6 "rsa-exponent6" -# define OSSL_PKEY_PARAM_RSA_EXPONENT7 "rsa-exponent7" -# define OSSL_PKEY_PARAM_RSA_EXPONENT8 "rsa-exponent8" -# define OSSL_PKEY_PARAM_RSA_EXPONENT9 "rsa-exponent9" -# define OSSL_PKEY_PARAM_RSA_FACTOR "rsa-factor" -# define OSSL_PKEY_PARAM_RSA_FACTOR1 "rsa-factor1" -# define OSSL_PKEY_PARAM_RSA_FACTOR10 "rsa-factor10" -# define OSSL_PKEY_PARAM_RSA_FACTOR2 "rsa-factor2" -# define OSSL_PKEY_PARAM_RSA_FACTOR3 "rsa-factor3" -# define OSSL_PKEY_PARAM_RSA_FACTOR4 "rsa-factor4" -# define OSSL_PKEY_PARAM_RSA_FACTOR5 "rsa-factor5" -# define OSSL_PKEY_PARAM_RSA_FACTOR6 "rsa-factor6" -# define OSSL_PKEY_PARAM_RSA_FACTOR7 "rsa-factor7" -# define OSSL_PKEY_PARAM_RSA_FACTOR8 "rsa-factor8" -# define OSSL_PKEY_PARAM_RSA_FACTOR9 "rsa-factor9" -# 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_N "n" -# define OSSL_PKEY_PARAM_RSA_PRIMES "primes" -# define OSSL_PKEY_PARAM_RSA_PSS_SALTLEN "saltlen" -# 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_PKEY_PARAM_RSA_TEST_XP "xp" -# define OSSL_PKEY_PARAM_RSA_TEST_XP1 "xp1" -# define OSSL_PKEY_PARAM_RSA_TEST_XP2 "xp2" -# define OSSL_PKEY_PARAM_RSA_TEST_XQ "xq" -# define OSSL_PKEY_PARAM_RSA_TEST_XQ1 "xq1" -# define OSSL_PKEY_PARAM_RSA_TEST_XQ2 "xq2" -# define OSSL_PKEY_PARAM_SECURITY_BITS "security-bits" -# define OSSL_PKEY_PARAM_USE_COFACTOR_ECDH OSSL_PKEY_PARAM_USE_COFACTOR_FLAG -# define OSSL_PKEY_PARAM_USE_COFACTOR_FLAG "use-cofactor-flag" -# define OSSL_PROV_PARAM_BUILDINFO "buildinfo" -# define OSSL_PROV_PARAM_CORE_MODULE_FILENAME "module-filename" -# define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name" -# define OSSL_PROV_PARAM_CORE_VERSION "openssl-version" -# define OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" -# define OSSL_PROV_PARAM_NAME "name" -# define OSSL_PROV_PARAM_SECURITY_CHECKS "security-checks" -# define OSSL_PROV_PARAM_SELF_TEST_DESC "st-desc" -# define OSSL_PROV_PARAM_SELF_TEST_PHASE "st-phase" -# define OSSL_PROV_PARAM_SELF_TEST_TYPE "st-type" -# define OSSL_PROV_PARAM_STATUS "status" -# define OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" -# define OSSL_PROV_PARAM_VERSION "version" -# define OSSL_RAND_PARAM_GENERATE "generate" -# define OSSL_RAND_PARAM_MAX_REQUEST "max_request" -# define OSSL_RAND_PARAM_STATE "state" -# define OSSL_RAND_PARAM_STRENGTH "strength" -# define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy" -# define OSSL_RAND_PARAM_TEST_NONCE "test_nonce" -# define OSSL_SIGNATURE_PARAM_ALGORITHM_ID "algorithm-id" -# define OSSL_SIGNATURE_PARAM_CONTEXT_STRING "context-string" -# define OSSL_SIGNATURE_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -# define OSSL_SIGNATURE_PARAM_DIGEST_SIZE OSSL_PKEY_PARAM_DIGEST_SIZE -# define OSSL_SIGNATURE_PARAM_INSTANCE "instance" -# define OSSL_SIGNATURE_PARAM_KAT "kat" -# 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_NONCE_TYPE "nonce-type" -# define OSSL_SIGNATURE_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE -# define OSSL_SIGNATURE_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES -# define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen" -# define OSSL_STORE_PARAM_ALIAS "alias" -# define OSSL_STORE_PARAM_DIGEST "digest" -# define OSSL_STORE_PARAM_EXPECT "expect" -# define OSSL_STORE_PARAM_FINGERPRINT "fingerprint" -# define OSSL_STORE_PARAM_INPUT_TYPE "input-type" -# define OSSL_STORE_PARAM_ISSUER "name" -# define OSSL_STORE_PARAM_PROPERTIES "properties" -# define OSSL_STORE_PARAM_SERIAL "serial" -# define OSSL_STORE_PARAM_SUBJECT "subject" - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_names.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_names.h.in deleted file mode 100644 index c14520fe..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_names.h.in +++ /dev/null @@ -1,119 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * 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 - */ -{- -use OpenSSL::paramnames qw(generate_public_macros); --} - -#ifndef OPENSSL_CORE_NAMES_H -# define OPENSSL_CORE_NAMES_H -# pragma once - -# ifdef __cplusplus -extern "C" { -# endif - -/* 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" - -/* Known CIPHER names (not a complete list) */ -# define OSSL_CIPHER_NAME_AES_128_GCM_SIV "AES-128-GCM-SIV" -# define OSSL_CIPHER_NAME_AES_192_GCM_SIV "AES-192-GCM-SIV" -# define OSSL_CIPHER_NAME_AES_256_GCM_SIV "AES-256-GCM-SIV" - -/* 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_256_192 "SHA2-256/192" -# 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" - -/* 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" - -/* 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" -# define OSSL_KDF_NAME_HMACDRBGKDF "HMAC-DRBG-KDF" - -/* 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" - -/* 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" - -/* OSSL_KEM_PARAM_OPERATION values */ -#define OSSL_KEM_PARAM_OPERATION_RSASVE "RSASVE" -#define OSSL_KEM_PARAM_OPERATION_DHKEM "DHKEM" - -/* Parameter name definitions - generated by util/perl/OpenSSL/paramnames.pm */ -{- generate_public_macros(); -} - -# 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 deleted file mode 100644 index 62ccf39d..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_object.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 deleted file mode 100644 index 1f901f35..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h +++ /dev/null @@ -1,229 +0,0 @@ -/*- - * WARNING: do not edit! - * Generated by Makefile from include/openssl/crmf.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 - * - * 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); -X509_PUBKEY -*OSSL_CRMF_CERTTEMPLATE_get0_publicKey(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); -const ASN1_INTEGER -*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(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 deleted file mode 100644 index 43411fa4..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h.in +++ /dev/null @@ -1,182 +0,0 @@ -/*- - * {- 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 - * - * 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); -X509_PUBKEY -*OSSL_CRMF_CERTTEMPLATE_get0_publicKey(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); -const ASN1_INTEGER -*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(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 deleted file mode 100644 index b242b922..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmferr.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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 deleted file mode 100644 index 55e00dcc..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h +++ /dev/null @@ -1,561 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/crypto.h.in - * - * Copyright 1995-2023 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 - */ - - - -#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); -int CRYPTO_atomic_load_int(int *val, int *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; -}; - -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); -__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); - -void OSSL_sleep(uint64_t millis); - -# ifdef __cplusplus -} -# endif -#endif 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 deleted file mode 100644 index b2d691b9..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h.in +++ /dev/null @@ -1,538 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 1995-2023 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); -int CRYPTO_atomic_load_int(int *val, int *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); - -void OSSL_sleep(uint64_t millis); - -# 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 deleted file mode 100644 index e84b12df..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * 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 OPENSSL_CRYPTOERR_H -# define OPENSSL_CRYPTOERR_H -# pragma once - -# include -# include -# include - - - -/* - * CRYPTO reason codes. - */ -# 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 deleted file mode 100644 index ccab33a5..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cryptoerr_legacy.h +++ /dev/null @@ -1,1466 +0,0 @@ -/* - * 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 deleted file mode 100644 index e6dd1192..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h +++ /dev/null @@ -1,573 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/ct.h.in - * - * 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 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 - -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, - 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/ct.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h.in deleted file mode 100644 index 3fc2aaa9..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h.in +++ /dev/null @@ -1,525 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 935d32d8..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cterr.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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_CTERR_H -# define OPENSSL_CTERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_CT - - -/* - * CT reason codes. - */ -# define CT_R_BASE64_DECODE_ERROR 108 -# define CT_R_INVALID_LOG_ID_LENGTH 100 -# define CT_R_LOG_CONF_INVALID 109 -# define CT_R_LOG_CONF_INVALID_KEY 110 -# define CT_R_LOG_CONF_MISSING_DESCRIPTION 111 -# define CT_R_LOG_CONF_MISSING_KEY 112 -# define CT_R_LOG_KEY_INVALID 113 -# define CT_R_SCT_FUTURE_TIMESTAMP 116 -# define CT_R_SCT_INVALID 104 -# define CT_R_SCT_INVALID_SIGNATURE 107 -# define CT_R_SCT_LIST_INVALID 105 -# define CT_R_SCT_LOG_ID_MISMATCH 114 -# define CT_R_SCT_NOT_SET 106 -# define CT_R_SCT_UNSUPPORTED_VERSION 115 -# define CT_R_UNRECOGNIZED_SIGNATURE_NID 101 -# define CT_R_UNSUPPORTED_ENTRY_TYPE 102 -# define CT_R_UNSUPPORTED_VERSION 103 - -# endif -#endif 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 deleted file mode 100644 index d4ee2cf4..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/decoder.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * 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 deleted file mode 100644 index 4212a38b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/decodererr.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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 deleted file mode 100644 index 09798a61..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/des.h +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# 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 - -typedef unsigned char DES_cblock[8]; -typedef /* const */ unsigned char const_DES_cblock[8]; -/* - * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and - * const_DES_cblock * are incompatible pointer types. - */ - -typedef struct DES_ks { - union { - DES_cblock cblock; - /* - * make sure things are correct size on machines with 8 byte longs - */ - DES_LONG deslong[2]; - } ks[16]; -} 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_CBC_MODE 0 -# define DES_PCBC_MODE 1 - -# 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) \ - 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) \ - 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) \ - DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) - -# 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); -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); -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); -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); -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 - * other DES routine in the library. You should not use this function except - * to implement 'modes' of DES. I say this because the functions that call - * this routine do the conversion from 'char *' to long, and this needs to be - * done to make sure 'non-aligned' memory access do not occur. The - * characters are loaded 'little endian'. Data is a pointer to 2 unsigned - * 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 - * permutation (IP) and final permutation (FP) have been left out. As for - * DES_encrypt1(), you should not use this function. It is used by the - * routines in the library that implement triple DES. IP() DES_encrypt2() - * 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); -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); -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); -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); -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 - */ -# 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); -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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index f1c0ed06..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h +++ /dev/null @@ -1,335 +0,0 @@ -/* - * 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_DH_H -# define OPENSSL_DH_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_DH_H -# endif - -# include -# include - -# ifdef __cplusplus -extern "C" { -# endif - -#include - -/* 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 */ - -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); - -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) -# define EVP_PKEY_CTRL_DH_RFC5114 (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_DH_KDF_TYPE (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 13) -# define EVP_PKEY_CTRL_GET_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 14) -# define EVP_PKEY_CTRL_DH_NID (EVP_PKEY_ALG_CTRL + 15) -# define EVP_PKEY_CTRL_DH_PAD (EVP_PKEY_ALG_CTRL + 16) - -/* KDF types */ -# define EVP_PKEY_DH_KDF_NONE 1 -# define EVP_PKEY_DH_KDF_X9_42 2 - -# ifndef OPENSSL_NO_STDIO -# include -# endif -# 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, some of them shared with DH_check_pub_key */ -/* - * 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 /* +DH_check_pub_key */ -# define DH_CHECK_INVALID_J_VALUE 0x40 -# define DH_MODULUS_TOO_SMALL 0x80 -# define DH_MODULUS_TOO_LARGE 0x100 /* +DH_check_pub_key */ - -/* 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 deleted file mode 100644 index 2997d7d4..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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_DHERR_H -# define OPENSSL_DHERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_DH - - -/* - * 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 -# define DH_R_CHECK_INVALID_J_VALUE 115 -# define DH_R_CHECK_INVALID_Q_VALUE 116 -# define DH_R_CHECK_PUBKEY_INVALID 122 -# define DH_R_CHECK_PUBKEY_TOO_LARGE 123 -# define DH_R_CHECK_PUBKEY_TOO_SMALL 124 -# define DH_R_CHECK_P_NOT_PRIME 117 -# define DH_R_CHECK_P_NOT_SAFE_PRIME 118 -# define DH_R_CHECK_Q_NOT_PRIME 119 -# define DH_R_DECODE_ERROR 104 -# 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_INVALID_SIZE 129 -# 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 -# define DH_R_PARAMETER_ENCODING_ERROR 105 -# define DH_R_PEER_KEY_ERROR 111 -# define DH_R_Q_TOO_LARGE 130 -# define DH_R_SHARED_INFO_ERROR 113 -# define DH_R_UNABLE_TO_CHECK_GENERATOR 121 - -# endif -#endif 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 deleted file mode 100644 index 109878e6..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h +++ /dev/null @@ -1,280 +0,0 @@ -/* - * 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_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 - -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 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) - -# 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 - -# 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 - * 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 DSA_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 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; */ - -# 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) - -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); - -OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_OpenSSL(void); - -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); - -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 */ -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 */ -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); - -# 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 */ -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 */ -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); - -OSSL_DEPRECATEDIN_3_0 int DSA_generate_key(DSA *a); - -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 -/* - * 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) - -# ifndef OPENSSL_NO_DH -/* - * Convert DSA structure (key or just parameters) into DH structure (be - * careful to avoid small subgroup attacks when using this!) - */ -OSSL_DEPRECATEDIN_3_0 DH *DSA_dup_DH(const DSA *r); -# endif - -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); - -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 *); -OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign(DSA_METHOD *dsam, - DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); -OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) - (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); -OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign_setup(DSA_METHOD *dsam, - int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); -OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) - (const unsigned char *, int, DSA_SIG *, DSA *); -OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_verify(DSA_METHOD *dsam, - int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); -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 *); -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 *)); -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 *); -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 *)); -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 *); -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 *)); -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 *)); - -# 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 deleted file mode 100644 index 26ada57d..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsaerr.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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_DSAERR_H -# define OPENSSL_DSAERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_DSA - - -/* - * 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 -# define DSA_R_DECODE_ERROR 104 -# define DSA_R_INVALID_DIGEST_TYPE 106 -# define DSA_R_INVALID_PARAMETERS 112 -# define DSA_R_MISSING_PARAMETERS 101 -# define DSA_R_MISSING_PRIVATE_KEY 111 -# 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 deleted file mode 100644 index 5dc6b541..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dtls1.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_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 - -#include - -/* 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 */ - -# define DTLS1_COOKIE_LENGTH 255 - -# define DTLS1_RT_HEADER_LENGTH 13 - -# define DTLS1_HM_HEADER_LENGTH 12 - -# define DTLS1_HM_BAD_FRAGMENT -2 -# define DTLS1_HM_FRAGMENT_RETRY -3 - -# define DTLS1_CCS_HEADER_LENGTH 1 - -# define DTLS1_AL_HEADER_LENGTH 2 - -# define DTLS1_TMO_ALERT_COUNT 12 - -#ifdef __cplusplus -} -#endif -#endif 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 deleted file mode 100644 index e01f6275..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h +++ /dev/null @@ -1,308 +0,0 @@ -/* - * 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_E_OS2_H -# define OPENSSL_E_OS2_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_E_OS2_H -# endif - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************** - * Detect operating systems. This probably needs completing. - * The result is that at least one OPENSSL_SYS_os macro should be defined. - * However, if none is defined, Unix is assumed. - **/ - -# define OPENSSL_SYS_UNIX - -/* --------------------- Microsoft operating systems ---------------------- */ - -/* - * Note that MSDOS actually denotes 32-bit environments running on top of - * MS-DOS, such as DJGPP one. - */ -# if defined(OPENSSL_SYS_MSDOS) -# undef OPENSSL_SYS_UNIX -# endif - -/* - * For 32 bit environment, there seems to be the CygWin environment and then - * all the others that try to do the same thing Microsoft does... - */ -/* - * UEFI lives here because it might be built with a Microsoft toolchain and - * we need to avoid the false positive match on Windows. - */ -# if defined(OPENSSL_SYS_UEFI) -# undef OPENSSL_SYS_UNIX -# elif defined(OPENSSL_SYS_UWIN) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WIN32_UWIN -# else -# if defined(__CYGWIN__) || defined(OPENSSL_SYS_CYGWIN) -# define OPENSSL_SYS_WIN32_CYGWIN -# else -# if defined(_WIN32) || defined(OPENSSL_SYS_WIN32) -# undef OPENSSL_SYS_UNIX -# if !defined(OPENSSL_SYS_WIN32) -# define OPENSSL_SYS_WIN32 -# endif -# endif -# if defined(_WIN64) || defined(OPENSSL_SYS_WIN64) -# undef OPENSSL_SYS_UNIX -# if !defined(OPENSSL_SYS_WIN64) -# define OPENSSL_SYS_WIN64 -# endif -# endif -# if defined(OPENSSL_SYS_WINNT) -# undef OPENSSL_SYS_UNIX -# endif -# if defined(OPENSSL_SYS_WINCE) -# undef OPENSSL_SYS_UNIX -# endif -# endif -# endif - -/* Anything that tries to look like Microsoft is "Windows" */ -# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WINDOWS -# ifndef OPENSSL_SYS_MSDOS -# define OPENSSL_SYS_MSDOS -# endif -# endif - -/* - * DLL settings. This part is a bit tough, because it's up to the - * application implementer how he or she will link the application, so it - * requires some macro to be used. - */ -# ifdef OPENSSL_SYS_WINDOWS -# ifndef OPENSSL_OPT_WINDLL -# if defined(_WINDLL) /* This is used when building OpenSSL to - * indicate that DLL linkage should be used */ -# define OPENSSL_OPT_WINDLL -# endif -# endif -# endif - -/* ------------------------------- OpenVMS -------------------------------- */ -# if defined(__VMS) || defined(VMS) -# if !defined(OPENSSL_SYS_VMS) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_VMS -# endif -# if defined(__DECC) -# define OPENSSL_SYS_VMS_DECC -# elif defined(__DECCXX) -# define OPENSSL_SYS_VMS_DECC -# define OPENSSL_SYS_VMS_DECCXX -# else -# define OPENSSL_SYS_VMS_NODECC -# endif -# endif - -/* -------------------------------- Unix ---------------------------------- */ -# ifdef OPENSSL_SYS_UNIX -# if defined(linux) || defined(__linux__) && !defined(OPENSSL_SYS_LINUX) -# define OPENSSL_SYS_LINUX -# endif -# if defined(_AIX) && !defined(OPENSSL_SYS_AIX) -# define OPENSSL_SYS_AIX -# endif -# endif - -/* -------------------------------- VOS ----------------------------------- */ -# if defined(__VOS__) && !defined(OPENSSL_SYS_VOS) -# define OPENSSL_SYS_VOS -# ifdef __HPPA__ -# define OPENSSL_SYS_VOS_HPPA -# endif -# ifdef __IA32__ -# define OPENSSL_SYS_VOS_IA32 -# 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 - *****************************************************************************/ - -/*- - * OPENSSL_EXTERN is normally used to declare a symbol with possible extra - * attributes to handle its presence in a shared library. - * OPENSSL_EXPORT is used to define a symbol with extra possible attributes - * to make it visible in a shared library. - * Care needs to be taken when a header file is used both to declare and - * define symbols. Basically, for any library that exports some global - * variables, the following code must be present in the header file that - * declares them, before OPENSSL_EXTERN is used: - * - * #ifdef SOME_BUILD_FLAG_MACRO - * # undef OPENSSL_EXTERN - * # define OPENSSL_EXTERN OPENSSL_EXPORT - * #endif - * - * The default is to have OPENSSL_EXPORT and OPENSSL_EXTERN - * have some generally sensible values. - */ - -# if defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) -# define OPENSSL_EXPORT extern __declspec(dllexport) -# define OPENSSL_EXTERN extern __declspec(dllimport) -# else -# define OPENSSL_EXPORT extern -# define OPENSSL_EXTERN extern -# endif - -# ifdef _WIN32 -# ifdef _WIN64 -# define ossl_ssize_t __int64 -# define OSSL_SSIZE_MAX _I64_MAX -# else -# define ossl_ssize_t int -# define OSSL_SSIZE_MAX INT_MAX -# endif -# endif - -# if defined(OPENSSL_SYS_UEFI) && !defined(ossl_ssize_t) -# define ossl_ssize_t INTN -# define OSSL_SSIZE_MAX MAX_INTN -# endif - -# ifndef ossl_ssize_t -# define ossl_ssize_t ssize_t -# if defined(SSIZE_MAX) -# define OSSL_SSIZE_MAX SSIZE_MAX -# elif defined(_POSIX_SSIZE_MAX) -# define OSSL_SSIZE_MAX _POSIX_SSIZE_MAX -# else -# define OSSL_SSIZE_MAX ((ssize_t)(SIZE_MAX>>1)) -# endif -# endif - -# 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; -typedef INT16 int16_t; -typedef UINT16 uint16_t; -typedef INT32 int32_t; -typedef UINT32 uint32_t; -typedef INT64 int64_t; -typedef UINT64 uint64_t; -# elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ - 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 - * stdint.h: currently just older VC++ - */ -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef short int16_t; -typedef unsigned short uint16_t; -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 */ -# if !defined(inline) && !defined(__cplusplus) -# if defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L - /* just use inline */ -# define ossl_inline inline -# elif defined(__GNUC__) && __GNUC__>=2 -# define ossl_inline __inline__ -# elif defined(_MSC_VER) - /* - * Visual Studio: inline is available in C++ only, however - * __inline is available for C, see - * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx - */ -# define ossl_inline __inline -# else -# define ossl_inline -# endif -# else -# define ossl_inline inline -# endif - -# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && \ - !defined(__cplusplus) -# define ossl_noreturn _Noreturn -# elif defined(__GNUC__) && __GNUC__ >= 2 -# define ossl_noreturn __attribute__((noreturn)) -# else -# define ossl_noreturn -# endif - -/* ossl_unused: portable unused attribute for use in public headers */ -# if defined(__GNUC__) -# define ossl_unused __attribute__((unused)) -# else -# define ossl_unused -# endif - -#ifdef __cplusplus -} -#endif -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_ostime.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_ostime.h deleted file mode 100644 index 0e174875..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_ostime.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 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_E_OSTIME_H -# define OPENSSL_E_OSTIME_H -# pragma once - -# include -# include -# include - -/* - * This header guarantees that 'struct timeval' will be available. It includes - * the minimum headers needed to facilitate this. This may still be a - * substantial set of headers on some platforms (e.g. on Win32). - */ - -# if defined(OPENSSL_SYS_WINDOWS) -# if !defined(_WINSOCKAPI_) - /* - * winsock2.h defines _WINSOCK2API_ and both winsock2.h and winsock.h define - * _WINSOCKAPI_. Both of these provide struct timeval. Don't include - * winsock2.h if either header has been included to avoid breakage with - * applications that prefer to use over . - */ -# include -# endif -# else -# include -# endif - -#endif 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 deleted file mode 100644 index e0ae1aa8..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ebcdic.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_EBCDIC_H -# define OPENSSL_EBCDIC_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_EBCDIC_H -# endif - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Avoid name clashes with other applications */ -# define os_toascii _openssl_os_toascii -# define os_toebcdic _openssl_os_toebcdic -# define ebcdic2ascii _openssl_ebcdic2ascii -# define ascii2ebcdic _openssl_ascii2ebcdic - -extern const unsigned char os_toascii[256]; -extern const unsigned char os_toebcdic[256]; -void *ebcdic2ascii(void *dest, const void *srce, size_t count); -void *ascii2ebcdic(void *dest, const void *srce, size_t count); - -#ifdef __cplusplus -} -#endif -#endif 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 deleted file mode 100644 index e1cbe982..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ec.h +++ /dev/null @@ -1,1588 +0,0 @@ -/* - * Copyright 2002-2023 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 - */ - -#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 - -# ifdef __cplusplus -extern "C" { -# endif - -/* 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 { - /** the point is encoded as z||x, where the octet z specifies - * which solution of the quadratic equation y is */ - POINT_CONVERSION_COMPRESSED = 2, - /** the point is encoded as z||x||y, where z is the octet 0x04 */ - POINT_CONVERSION_UNCOMPRESSED = 4, - /** the point is encoded as z||x||y, where the octet z specifies - * which solution of the quadratic equation y is */ - 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; -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 - */ -OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_simple_method(void); - -/** Returns GFp methods using montgomery multiplication. - * \return EC_METHOD object - */ -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 - */ -OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nist_method(void); - -# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 -/** Returns 64-bit optimized methods for nistp224 - * \return EC_METHOD object - */ -OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp224_method(void); - -/** Returns 64-bit optimized methods for nistp256 - * \return EC_METHOD object - */ -OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp256_method(void); - -/** Returns 64-bit optimized methods for nistp521 - * \return EC_METHOD object - */ -OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp521_method(void); -# endif /* OPENSSL_NO_EC_NISTP_64_GCC_128 */ - -# ifndef OPENSSL_NO_EC2M -/********************************************************************/ -/* EC_METHOD for curves over GF(2^m) */ -/********************************************************************/ - -/** Returns the basic GF2m ec method - * \return EC_METHOD object - */ -OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GF2m_simple_method(void); - -# endif - -/********************************************************************/ -/* EC_GROUP functions */ -/********************************************************************/ - -/** - * 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. - */ -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); - -/** 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 - * \return 1 on success and 0 if an error occurred. - */ -int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); - -/** 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); - -/** 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. - * \param order the order of the group generated by the generator. - * \param cofactor the index of the sub-group generated by the generator - * in the group of all points on the elliptic curve. - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, - const BIGNUM *order, const BIGNUM *cofactor); - -/** Returns the generator of a EC_GROUP object. - * \param group EC_GROUP object - * \return the currently used generator (possibly NULL). - */ -const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); - -/** Returns the montgomery data for order(Generator) - * \param group EC_GROUP object - * \return the currently used montgomery data (possibly NULL). -*/ -BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group); - -/** Gets the order of a EC_GROUP - * \param group EC_GROUP object - * \param order BIGNUM to which the order is copied - * \param ctx unused - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); - -/** Gets the order of an EC_GROUP - * \param group EC_GROUP object - * \return the group order - */ -const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group); - -/** Gets the number of bits of the order of an EC_GROUP - * \param group EC_GROUP object - * \return number of bits of group order. - */ -int EC_GROUP_order_bits(const EC_GROUP *group); - -/** Gets the cofactor of a EC_GROUP - * \param group EC_GROUP object - * \param cofactor BIGNUM to which the cofactor is copied - * \param ctx unused - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, - BN_CTX *ctx); - -/** Gets the cofactor of an EC_GROUP - * \param group EC_GROUP object - * \return the group cofactor - */ -const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group); - -/** Sets the name of a EC_GROUP object - * \param group EC_GROUP object - * \param nid NID of the curve name OID - */ -void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); - -/** Returns the curve name of a EC_GROUP object - * \param group EC_GROUP object - * \return NID of the curve name OID or 0 if not set. - */ -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); - -void EC_GROUP_set_point_conversion_form(EC_GROUP *group, - point_conversion_form_t form); -point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); - -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 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 - * defining the underlying field (GF2m) - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); - -/** Gets the parameters of the 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 - * defining the underlying field (GF2m) - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * defining the underlying field (GF2m) - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p BIGNUM with the prime number (GFp) or the polynomial - * defining the underlying field (GF2m) - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 -/** 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 - * defining the underlying field (GF2m) - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p BIGNUM with the prime number (GFp) or the polynomial - * defining the underlying field (GF2m) - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - */ -int EC_GROUP_get_degree(const EC_GROUP *group); - -/** Checks whether the parameter in the EC_GROUP define a valid ec group - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 if group is a valid ec group and 0 otherwise - */ -int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); - -/** Checks whether the discriminant of the elliptic curve is zero or not - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 if the discriminant is not zero and 0 otherwise - */ -int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); - -/** Compares two EC_GROUP objects - * \param a first EC_GROUP object - * \param b second EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 0 if the groups are equal, 1 if not, or -1 on error - */ -int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); - -/* - * EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() after - * choosing an appropriate EC_METHOD - */ - -/** Creates a new EC_GROUP object with the specified parameters defined - * over GFp (defined by the equation y^2 = x^3 + a*x + b) - * \param p BIGNUM with the prime number - * \param a BIGNUM with the parameter a of the equation - * \param b BIGNUM with the parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return newly created EC_GROUP object with the specified parameters - */ -EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); -# 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 - * \param a BIGNUM with the parameter a of the equation - * \param b BIGNUM with the parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return newly created EC_GROUP object with the specified parameters - */ -EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); -# endif - -/** - * 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 an OSSL_PARAM array with the parameters describing the given - * EC_GROUP. - * The resulting parameters may contain an explicit or a named curve depending - * on the EC_GROUP. - * \param group pointer to the EC_GROUP object - * \param libctx The associated library context or NULL for the default - * context - * \param propq A property query string - * \param bnctx BN_CTX object (optional) - * \return newly created OSSL_PARAM array with the parameters - * describing the given EC_GROUP or NULL if an error occurred - */ -OSSL_PARAM *EC_GROUP_to_params(const EC_GROUP *group, OSSL_LIB_CTX *libctx, - const char *propq, BN_CTX *bnctx); - -/** - * 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 - */ -EC_GROUP *EC_GROUP_new_by_curve_name(int nid); - -/** Creates a new EC_GROUP object from an ECPARAMETERS object - * \param params pointer to the ECPARAMETERS object - * \return newly created EC_GROUP object with specified curve or NULL - * if an error occurred - */ -EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params); - -/** Creates an ECPARAMETERS object for the given EC_GROUP object. - * \param group pointer to the EC_GROUP object - * \param params pointer to an existing ECPARAMETERS object or NULL - * \return pointer to the new ECPARAMETERS object or NULL - * if an error occurred. - */ -ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group, - ECPARAMETERS *params); - -/** Creates a new EC_GROUP object from an ECPKPARAMETERS object - * \param params pointer to an existing ECPKPARAMETERS object, or NULL - * \return newly created EC_GROUP object with specified curve, or NULL - * if an error occurred - */ -EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params); - -/** Creates an ECPKPARAMETERS object for the given EC_GROUP object. - * \param group pointer to the EC_GROUP object - * \param params pointer to an existing ECPKPARAMETERS object or NULL - * \return pointer to the new ECPKPARAMETERS object or NULL - * if an error occurred. - */ -ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group, - ECPKPARAMETERS *params); - -/********************************************************************/ -/* handling of internal curves */ -/********************************************************************/ - -typedef struct { - int nid; - const char *comment; -} EC_builtin_curve; - -/* - * EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number of all - * available curves or zero if a error occurred. In case r is not zero, - * nitems EC_builtin_curve structures are filled with the data of the first - * nitems internal groups - */ -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 */ -/********************************************************************/ - -/** Creates a new EC_POINT object for the specified EC_GROUP - * \param group EC_GROUP the underlying EC_GROUP object - * \return newly created EC_POINT object or NULL if an error occurred - */ -EC_POINT *EC_POINT_new(const EC_GROUP *group); - -/** Frees a EC_POINT object - * \param point EC_POINT object to be freed - */ -void EC_POINT_free(EC_POINT *point); - -/** Clears and frees a EC_POINT object - * \param point EC_POINT object to be cleared and freed - */ -void EC_POINT_clear_free(EC_POINT *point); - -/** Copies EC_POINT object - * \param dst destination EC_POINT object - * \param src source EC_POINT object - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); - -/** Creates a new EC_POINT object and copies the content of the supplied - * EC_POINT - * \param src source EC_POINT object - * \param group underlying the EC_GROUP object - * \return newly created EC_POINT object or NULL if an error occurred - */ -EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); - -/** Sets a point to infinity (neutral element) - * \param group underlying EC_GROUP object - * \param point EC_POINT to set to infinity - * \return 1 on success and 0 if an error occurred - */ -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 - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param z BIGNUM with the z-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param z BIGNUM for the z-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p, - const BIGNUM *x, const BIGNUM *y, - BN_CTX *ctx); - -/** Gets the affine coordinates of an EC_POINT. - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param form point conversion form - * \param buf memory buffer for the result. If NULL the function returns - * required buffer size. - * \param len length of the memory buffer - * \param ctx BN_CTX object (optional) - * \return the length of the encoded octet string or 0 if an error occurred - */ -size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, - point_conversion_form_t form, - unsigned char *buf, size_t len, BN_CTX *ctx); - -/** Decodes a EC_POINT from a octet string - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param buf memory buffer with the encoded ec point - * \param len length of the encoded ec point - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, - const unsigned char *buf, size_t len, BN_CTX *ctx); - -/** Encodes an EC_POINT object to an allocated octet string - * \param group underlying EC_GROUP object - * \param point EC_POINT object - * \param form point conversion form - * \param pbuf returns pointer to allocated buffer - * \param ctx BN_CTX object (optional) - * \return the length of the encoded octet string or 0 if an error occurred - */ -size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point, - point_conversion_form_t form, - unsigned char **pbuf, BN_CTX *ctx); - -/* other interfaces to point2oct/oct2point: */ -# 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 *, - EC_POINT *, BN_CTX *); - -/********************************************************************/ -/* functions for doing EC_POINT arithmetic */ -/********************************************************************/ - -/** Computes the sum of two EC_POINT - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result (r = a + b) - * \param a EC_POINT object with the first summand - * \param b EC_POINT object with the second summand - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - const EC_POINT *b, BN_CTX *ctx); - -/** Computes the double of a EC_POINT - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result (r = 2 * a) - * \param a EC_POINT object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - BN_CTX *ctx); - -/** Computes the inverse of a EC_POINT - * \param group underlying EC_GROUP object - * \param a EC_POINT object to be inverted (it's used for the result as well) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); - -/** Checks whether the point is the neutral element of the group - * \param group the underlying EC_GROUP object - * \param p EC_POINT object - * \return 1 if the point is the neutral element and 0 otherwise - */ -int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); - -/** Checks whether the point is on the curve - * \param group underlying EC_GROUP object - * \param point EC_POINT object to check - * \param ctx BN_CTX object (optional) - * \return 1 if the point is on the curve, 0 if not, or -1 on error - */ -int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, - BN_CTX *ctx); - -/** Compares two EC_POINTs - * \param group underlying EC_GROUP object - * \param a first EC_POINT object - * \param b second EC_POINT object - * \param ctx BN_CTX object (optional) - * \return 1 if the points are not equal, 0 if they are, or -1 on error - */ -int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, - 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 - * \param r EC_POINT object for the result - * \param n BIGNUM with the multiplier for the group generator (optional) - * \param num number further summands - * \param p array of size num of EC_POINT objects - * \param m array of size num of BIGNUM objects - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param r EC_POINT object for the result - * \param n BIGNUM with the multiplier for the group generator (optional) - * \param q EC_POINT object with the first factor of the second summand - * \param m BIGNUM with the second factor of the second summand - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - */ -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 - */ -OSSL_DEPRECATEDIN_3_0 int EC_GROUP_have_precompute_mult(const EC_GROUP *group); -# endif /* OPENSSL_NO_DEPRECATED_3_0 */ - -/********************************************************************/ -/* ASN1 stuff */ -/********************************************************************/ - -DECLARE_ASN1_ITEM(ECPKPARAMETERS) -DECLARE_ASN1_ALLOC_FUNCTIONS(ECPKPARAMETERS) -DECLARE_ASN1_ITEM(ECPARAMETERS) -DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) - -/* - * EC_GROUP_get_basis_type() returns the NID of the basis type used to - * represent the field elements - */ -int EC_GROUP_get_basis_type(const EC_GROUP *); -# 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 - -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) \ - ASN1_d2i_bio_of(EC_GROUP, NULL, d2i_ECPKParameters, bp, 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) \ - ASN1_i2d_fp((i2d_of_void *)i2d_ECPKParameters, (fp), (void *)(x)) - -# 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 - -/* some values for the flags field */ -# 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) - -/* 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. - */ -OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_ex(OSSL_LIB_CTX *ctx, const char *propq); - -/** - * 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); - -OSSL_DEPRECATEDIN_3_0 int EC_KEY_get_flags(const EC_KEY *key); - -OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_flags(EC_KEY *key, int flags); - -OSSL_DEPRECATEDIN_3_0 void EC_KEY_clear_flags(EC_KEY *key, int flags); - -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. - */ -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. - */ -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. - */ -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. - */ -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. - */ -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). - */ -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). - */ -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 - * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY - * object will use an own copy of the EC_GROUP). - * \return 1 on success and 0 if an error occurred. - */ -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). - */ -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 - * \param prv BIGNUM with the private key (note: the EC_KEY object - * will use an own copy of the BIGNUM). - * \return 1 on success and 0 if an error occurred. - */ -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) - */ -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 - * \param pub EC_POINT object with the public key (note: the EC_KEY object - * will use an own copy of the EC_POINT object). - * \return 1 on success and 0 if an error occurred. - */ -OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); - -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) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef) - -# 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 */ -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. - * \param key EC_KEY object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred. - */ -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. - */ -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. - */ -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 sign and 0 otherwise. - */ -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. - * \param key the EC_KEY object - * \param x public key x coordinate - * \param y public key y coordinate - * \return 1 on success and 0 otherwise. - */ -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 - * \param form point conversion form - * \param pbuf returns pointer to allocated buffer - * \param ctx BN_CTX object (optional) - * \return the length of the encoded octet string or 0 if an error occurred - */ -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 - * \param buf memory buffer with the encoded ec point - * \param len length of the encoded ec point - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ - -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 - * \param buf memory buffer with the encoded private key - * \param len length of the encoded key - * \return 1 on success and 0 if an error occurred - */ - -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 - * \param buf memory buffer for the result. If NULL the function returns - * required buffer size. - * \param len length of the memory buffer - * \return the length of the encoded octet string or 0 if an error occurred - */ - -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 - */ -OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_priv2buf(const EC_KEY *eckey, - unsigned char **pbuf); - -/********************************************************************/ -/* de- and encoding functions for SEC1 ECPrivateKey */ -/********************************************************************/ - -/** Decodes a private key from a memory buffer. - * \param key a pointer to a EC_KEY object which should be used (or NULL) - * \param in pointer to memory with the DER encoded private key - * \param len length of the DER encoded private key - * \return the decoded private key or NULL if an error occurred. - */ -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 - * \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. - */ -OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey(const EC_KEY *key, - unsigned char **out); - -/********************************************************************/ -/* de- and encoding functions for EC parameters */ -/********************************************************************/ - -/** Decodes ec parameter from a memory buffer. - * \param key a pointer to a EC_KEY object which should be used (or NULL) - * \param in pointer to memory with the DER encoded ec parameters - * \param len length of the DER encoded ec parameters - * \return a EC_KEY object with the decoded parameters or NULL if an error - * occurred. - */ -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 - * \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. - */ -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 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. - */ -OSSL_DEPRECATEDIN_3_0 EC_KEY *o2i_ECPublicKey(EC_KEY **key, - const unsigned char **in, long len); - -/** 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 - */ -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 - */ -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 - * \param key EC_KEY object - * \param off line offset - * \return 1 on success and 0 if an error occurred - */ -OSSL_DEPRECATEDIN_3_0 int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); - -# 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 - */ -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 - * \param key EC_KEY object - * \param off line offset - * \return 1 on success and 0 if an error occurred - */ -OSSL_DEPRECATEDIN_3_0 int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); -# endif /* OPENSSL_NO_STDIO */ - -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 mistakenly attributed to ANSI X9.62, - * it is actually specified in ANSI X9.63. - * This identifier is retained for backwards compatibility - */ -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); - -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; - -/** Allocates and initialize a ECDSA_SIG structure - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_SIG_new(void); - -/** frees a ECDSA_SIG structure - * \param sig pointer to the ECDSA_SIG structure - */ -void ECDSA_SIG_free(ECDSA_SIG *sig); - -/** 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 - */ -DECLARE_ASN1_ENCODE_FUNCTIONS_only(ECDSA_SIG, ECDSA_SIG) - -/** 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) - */ - -/** Accessor for r and s fields of ECDSA_SIG - * \param sig pointer to ECDSA_SIG structure - * \param pr pointer to BIGNUM pointer for r (may be NULL) - * \param ps pointer to BIGNUM pointer for s (may be NULL) - */ -void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); - -/** Accessor for r field of ECDSA_SIG - * \param sig pointer to ECDSA_SIG structure - */ -const BIGNUM *ECDSA_SIG_get0_r(const ECDSA_SIG *sig); - -/** Accessor for s field of ECDSA_SIG - * \param sig pointer to ECDSA_SIG structure - */ -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 - * \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 - * \param dgst_len length of the hash value - * \param eckey EC_KEY object containing a private EC key - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -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). - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param kinv BIGNUM with a pre-computed inverse k (optional) - * \param rp BIGNUM with a pre-computed rp value (optional), - * see ECDSA_sign_setup - * \param eckey EC_KEY object containing a private EC key - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -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. - * \param dgst pointer to the hash value - * \param dgst_len length of the hash value - * \param sig ECDSA_SIG structure - * \param eckey EC_KEY object containing a public EC key - * \return 1 if the signature is valid, 0 if the signature is invalid - * and -1 on error - */ -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 - * \param ctx BN_CTX object (optional) - * \param kinv BIGNUM pointer for the inverse of k - * \param rp BIGNUM pointer for x coordinate of k * generator - * \return 1 on success and 0 otherwise - */ -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). - * \param type this parameter is ignored - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param sig memory for the DER encoded created signature - * \param siglen pointer to the length of the returned signature - * \param eckey EC_KEY object containing a private EC key - * \return 1 on success and 0 otherwise - */ -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). - * \param type this parameter is ignored - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param sig buffer to hold the DER encoded signature - * \param siglen pointer to the length of the returned signature - * \param kinv BIGNUM with a pre-computed inverse k (optional) - * \param rp BIGNUM with a pre-computed rp value (optional), - * see ECDSA_sign_setup - * \param eckey EC_KEY object containing a private EC key - * \return 1 on success and 0 otherwise - */ -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. - * \param type this parameter is ignored - * \param dgst pointer to the hash value - * \param dgstlen length of the hash value - * \param sig pointer to the DER encoded signature - * \param siglen length of the DER encoded signature - * \param eckey EC_KEY object containing a public EC key - * \return 1 if the signature is valid, 0 if the signature is invalid - * and -1 on error - */ -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 - */ -OSSL_DEPRECATEDIN_3_0 int ECDSA_size(const EC_KEY *eckey); - -/********************************************************************/ -/* EC_KEY_METHOD constructors, destructors, writers and accessors */ -/********************************************************************/ - -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)); - -OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, - int (*keygen)(EC_KEY *key)); - -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)); - -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)); - -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 BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); - -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 */ - -# 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) - -# 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 -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 56bd4cc2..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdh.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 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 deleted file mode 100644 index 56bd4cc2..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecdsa.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 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 deleted file mode 100644 index f15f91f6..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ecerr.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * 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_ECERR_H -# define OPENSSL_ECERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_EC - - -/* - * EC reason codes. - */ -# define EC_R_ASN1_ERROR 115 -# define EC_R_BAD_SIGNATURE 156 -# define EC_R_BIGNUM_OUT_OF_RANGE 144 -# define EC_R_BUFFER_TOO_SMALL 100 -# 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_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 -# define EC_R_INVALID_DIGEST 151 -# define EC_R_INVALID_DIGEST_TYPE 138 -# 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 -# define EC_R_LADDER_POST_FAILURE 136 -# define EC_R_LADDER_PRE_FAILURE 153 -# define EC_R_LADDER_STEP_FAILURE 162 -# define EC_R_MISSING_OID 167 -# define EC_R_MISSING_PARAMETERS 124 -# define EC_R_MISSING_PRIVATE_KEY 125 -# define EC_R_NEED_NEW_SETUP_VALUES 157 -# define EC_R_NOT_A_NIST_PRIME 135 -# define EC_R_NOT_IMPLEMENTED 126 -# define EC_R_NOT_INITIALIZED 111 -# define EC_R_NO_PARAMETERS_SET 139 -# define EC_R_NO_PRIVATE_VALUE 154 -# define EC_R_OPERATION_NOT_SUPPORTED 152 -# define EC_R_PASSED_NULL_PARAMETER 134 -# define EC_R_PEER_KEY_ERROR 149 -# define EC_R_POINT_ARITHMETIC_FAILURE 155 -# define EC_R_POINT_AT_INFINITY 106 -# define EC_R_POINT_COORDINATES_BLIND_FAILURE 163 -# define EC_R_POINT_IS_NOT_ON_CURVE 107 -# 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 -# define EC_R_UNKNOWN_GROUP 129 -# define EC_R_UNKNOWN_ORDER 114 -# define EC_R_UNSUPPORTED_FIELD 131 -# define EC_R_WRONG_CURVE_PARAMETERS 145 -# define EC_R_WRONG_ORDER 130 - -# endif -#endif 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 deleted file mode 100644 index c37a6f16..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/encoder.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * 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 deleted file mode 100644 index 5e318b14..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/encodererr.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2fbc82c3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engine.h +++ /dev/null @@ -1,833 +0,0 @@ -/* - * Copyright 2000-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 - */ - -#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 -# 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 - -/* - * 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 -/* Obvious all-or-nothing cases. */ -# 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 - * internally to control registration of ENGINE implementations, and can be - * 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 - -/* ENGINE flags that can be set by ENGINE_set_flags(). */ -/* Not used */ -/* #define ENGINE_FLAGS_MALLOCED 0x0001 */ - -/* - * This flag is for ENGINEs that wish to handle the various 'CMD'-related - * control commands on their own. Without this flag, ENGINE_ctrl() handles - * these control commands on behalf of the ENGINE using their "cmd_defns" - * data. - */ -# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 - -/* - * This flag is for ENGINEs who return new duplicate structures when found - * via "ENGINE_by_id()". When an ENGINE must store state (eg. if - * ENGINE_ctrl() commands are called in sequence as part of some stateful - * process like key-generation setup and execution), it can set this flag - - * then each attempt to obtain the ENGINE will result in it being copied into - * a new structure. Normally, ENGINEs don't declare this flag so - * ENGINE_by_id() just increments the existing ENGINE's structural reference - * count. - */ -# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 - -/* - * This flag if for an ENGINE that does not want its methods registered as - * part of ENGINE_register_all_complete() for example if the methods are not - * usable as default methods. - */ - -# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 - -/* - * ENGINEs can support their own command types, and these flags are used in - * ENGINE_CTRL_GET_CMD_FLAGS to indicate to the caller what kind of input - * each command expects. Currently only numeric and string input is - * supported. If a control command supports none of the _NUMERIC, _STRING, or - * _NO_INPUT options, then it is regarded as an "internal" control command - - * and not for use in config setting situations. As such, they're not - * available to the ENGINE_ctrl_cmd_string() function, only raw ENGINE_ctrl() - * access. Changes to this list of 'command types' should be reflected - * carefully in ENGINE_cmd_is_executable() and ENGINE_ctrl_cmd_string(). - */ - -/* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ -# 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 -/* - * Indicates that the control command takes *no* input. Ie. the control - * command is unparameterised. - */ -# 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 - -/* - * NB: These 3 control commands are deprecated and should not be used. - * ENGINEs relying on these commands should compile conditional support for - * compatibility (eg. if these symbols are defined) but should also migrate - * the same functionality to their own ENGINE-specific control functions that - * can be "discovered" by calling applications. The fact these control - * commands wouldn't be "executable" (ie. usable by text-based config) - * doesn't change the fact that application code can find and use them - * without requiring per-ENGINE hacking. - */ - -/* - * These flags are used to tell the ctrl function what should be done. All - * command numbers are shared between all engines, even if some don't make - * 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 - * 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 - * when calling the password - * callback and the user - * interface */ -# 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 - * section in the already - * loaded configuration */ - -/* - * These control commands allow an application to deal with an arbitrary - * engine in a dynamic way. Warn: Negative return values indicate errors FOR - * THESE COMMANDS because zero is used to indicate 'end-of-list'. Other - * commands, including ENGINE-specific command types, return zero for an - * error. An ENGINE can choose to implement these ctrl functions, and can - * internally manage things however it chooses - it does so by setting the - * ENGINE_FLAGS_MANUAL_CMD_CTRL flag (using ENGINE_set_flags()). Otherwise - * the ENGINE_ctrl() code handles this on the ENGINE's behalf using the - * cmd_defns data (set using ENGINE_set_cmd_defns()). This means an ENGINE's - * ctrl() handler need only implement its own commands - the above "meta" - * commands will be taken care of. - */ - -/* - * Returns non-zero if the supplied ENGINE has a ctrl() handler. If "not", - * then all the remaining control commands will return failure, so it is - * 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 -/* - * 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 -/* - * 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 -/* - * 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 -/* - * 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 - * NAME_LEN case, the return value is the length of the command name (not - * counting a trailing EOL). In the NAME case, the 'void*' argument must be a - * 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 -/* 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 -/* - * 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 - -/* - * 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 - -/* - * NB: These 2 nCipher "chil" control commands are deprecated, and their - * functionality is now available through ENGINE-specific control commands - * (exposed through the above-mentioned 'CMD'-handling). Code using these 2 - * commands should be migrated to the more general command handling before - * these are removed. - */ - -/* 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. - */ - -/* - * If an ENGINE supports its own specific control commands and wishes the - * framework to handle the above 'ENGINE_CMD_***'-manipulation commands on - * its behalf, it should supply a null-terminated array of ENGINE_CMD_DEFN - * entries to ENGINE_set_cmd_defns(). It should also implement a ctrl() - * handler that supports the stated commands (ie. the "cmd_num" entries as - * described by the array). NB: The array must be ordered in increasing order - * of cmd_num. "null-terminated" means that the last ENGINE_CMD_DEFN element - * has cmd_num set to zero and/or cmd_name set to NULL. - */ -typedef struct ENGINE_CMD_DEFN_st { - unsigned int cmd_num; /* The command number */ - const char *cmd_name; /* The command name itself */ - const char *cmd_desc; /* A short description of the command */ - unsigned int cmd_flags; /* The input the command expects */ -} ENGINE_CMD_DEFN; - -/* Generic function pointer */ -typedef int (*ENGINE_GEN_FUNC_PTR) (void); -/* Generic function pointer taking no arguments */ -typedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *); -/* Specific control function pointer */ -typedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *, - void (*f) (void)); -/* Generic load_key function pointer */ -typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *, - UI_METHOD *ui_method, - void *callback_data); -typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, - STACK_OF(X509_NAME) *ca_dn, - X509 **pcert, EVP_PKEY **pkey, - STACK_OF(X509) **pother, - UI_METHOD *ui_method, - void *callback_data); -/*- - * These callback types are for an ENGINE's handler for cipher and digest logic. - * These handlers have these prototypes; - * int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid); - * int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid); - * Looking at how to implement these handlers in the case of cipher support, if - * the framework wants the EVP_CIPHER for 'nid', it will call; - * foo(e, &p_evp_cipher, NULL, nid); (return zero for failure) - * If the framework wants a list of supported 'nid's, it will call; - * foo(e, NULL, &p_nids, 0); (returns number of 'nids' or -1 for error) - */ -/* - * Returns to a pointer to the array of supported cipher 'nid's. If the - * second parameter is non-NULL it is set to the size of the returned array. - */ -typedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **, - const int **, int); -typedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **, - int); -typedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **, - const int **, int); -typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, - const int **, int); -/* - * STRUCTURE functions ... all of these functions deal with pointers to - * ENGINE structures where the pointers have a "structural reference". This - * means that their reference is to allowed access to the structure but it - * does not imply that the structure is functional. To simply increment or - * decrement the structural reference count, use ENGINE_by_id and - * ENGINE_free. NB: This is not required when iterating using ENGINE_get_next - * as it will automatically decrement the structural reference count of the - * "current" ENGINE and increment the structural reference count of the - * ENGINE it returns (unless it is NULL). - */ - -/* Get the first/last "ENGINE" type available. */ -# 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). */ -# 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. */ -# ifndef OPENSSL_NO_DEPRECATED_3_0 -OSSL_DEPRECATEDIN_3_0 int ENGINE_add(ENGINE *e); -# endif -/* Remove an existing "ENGINE" type from the array. */ -# 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. */ -# ifndef OPENSSL_NO_DEPRECATED_3_0 -OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_by_id(const char *id); -# endif - -# 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. - */ -# 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; - * ENGINE_register_***(e) - registers the implementation from 'e' (if it has one) - * ENGINE_unregister_***(e) - unregister the implementation from 'e' - * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list - * Cleanup is automatically registered from each table when required. - */ -# 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 - * of these functions can result in static linkage of code your application - * may not need. If you only need a subset of functionality, consider using - * more selective initialisation. - */ -# 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 - * send down an integer, a pointer to data or a function pointer are - * provided. Any of the parameters may or may not be NULL, depending on the - * command number. In actuality, this function only requires a structural - * (rather than functional) reference to an engine, but many control commands - * may require the engine be functional. The caller should be aware of trying - * commands that require an operational ENGINE, and only use functional - * references in such situations. - */ -# 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 - * "setting". Eg. in an application's config file that gets processed through - * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to - * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). - */ -# 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 - * command name instead of a command number, and can handle optional - * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation - * on how to use the cmd_name and 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 - * cmd_name is converted to a command number and the control command is - * called using 'arg' as an argument (unless the ENGINE doesn't support such - * a command, in which case no control command is called). The command is - * checked for input flags, and if necessary the argument will be converted - * to a numeric value. If cmd_optional is non-zero, then if the ENGINE - * doesn't support the given cmd_name the return value will be success - * anyway. This function is intended for applications to use so that users - * (or config files) can supply engine-specific config data to the ENGINE at - * run-time to control behaviour of specific engines. As such, it shouldn't - * be used for calling ENGINE_ctrl() functions that return data, deal with - * binary data, or that are otherwise supposed to be used directly through - * ENGINE_ctrl() in application code. Any "return" data from an ENGINE_ctrl() - * operation in this function will be lost - the return value is interpreted - * as failure if the return value is zero, success otherwise, and this - * function returns a boolean value as a result. In other words, vendors of - * 'ENGINE'-enabled devices should write ENGINE implementations with - * parameterisations that work in this scheme, so that compliant ENGINE-based - * 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 - * don't address reference counting at all - one uses them to populate an - * ENGINE structure with personalised implementations of things prior to - * using it directly or adding it to the builtin ENGINE list in OpenSSL. - * These are also here so that the ENGINE structure doesn't have to be - * exposed and break binary compatibility! - */ -# 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); -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); -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); -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) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) -# 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 - -# 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 - -/* - * These return values from within the ENGINE structure. These can be useful - * with functional references as well as structural references - it depends - * which you obtained. Using the result for functional purposes if you only - * obtained a structural reference may be problematic! - */ -# 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); -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); -OSSL_DEPRECATEDIN_3_0 -const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); -OSSL_DEPRECATEDIN_3_0 int ENGINE_get_flags(const ENGINE *e); -# endif - -/* - * FUNCTIONAL functions. These functions deal with ENGINE structures that - * have (or will) be initialised for use. Broadly speaking, the structural - * functions are useful for iterating the list of available engine types, - * creating new engine types, and other "list" operations. These functions - * actually deal with ENGINEs that are to be used. As such these functions - * can fail (if applicable) when particular engines are unavailable - eg. if - * a hardware accelerator is not attached or not functioning correctly. Each - * ENGINE has 2 reference counts; structural and functional. Every time a - * functional reference is obtained or released, a corresponding structural - * reference is automatically obtained or released too. - */ - -/* - * 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. - */ -# ifndef OPENSSL_NO_DEPRECATED_3_0 -OSSL_DEPRECATEDIN_3_0 int ENGINE_init(ENGINE *e); -# endif -/* - * 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. - */ -# 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); -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 - * default) performing any RSA operations. The value returned is an - * incremented reference, so it should be free'd (ENGINE_finish) before it is - * discarded. - */ -# ifndef OPENSSL_NO_DEPRECATED_3_0 -OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_RSA(void); -# endif -/* Same for the other "methods" */ -# 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". - */ -# 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 - * the result is non-zero (success) then the ENGINE structure will have had - * its reference count up'd so the caller should still free their own - * reference 'e'. - */ -# 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" */ -# 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 - * ENGINE_METHOD_*** defines above. As with the "ENGINE_register_complete()" - * function, this function can result in unnecessary static linkage. If your - * application requires only specific functionality, consider using more - * selective functions. - */ -# 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); */ - -/**************************/ -/* DYNAMIC ENGINE SUPPORT */ -/**************************/ - -/* Binary/behaviour compatibility levels */ -# 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 - -/* - * When compiling an ENGINE entirely as an external shared library, loadable - * by the "dynamic" ENGINE, these types are needed. The 'dynamic_fns' - * structure type provides the calling application's (or library's) error - * functionality and memory management function pointers to the loaded - * library. These should be used/set in the loaded library code so that the - * loading application's 'state' will be used/changed in all operations. The - * 'static_state' pointer allows the loaded library to know if it shares the - * same static data as the calling application (or library), and thus whether - * these callbacks need to be set or not. - */ -typedef void *(*dyn_MEM_malloc_fn) (size_t, const char *, int); -typedef void *(*dyn_MEM_realloc_fn) (void *, size_t, const char *, int); -typedef void (*dyn_MEM_free_fn) (void *, const char *, int); -typedef struct st_dynamic_MEM_fns { - dyn_MEM_malloc_fn malloc_fn; - dyn_MEM_realloc_fn realloc_fn; - dyn_MEM_free_fn free_fn; -} dynamic_MEM_fns; -/* - * FIXME: Perhaps the memory and locking code (crypto.h) should declare and - * use these types so we (and any other dependent code) can simplify a bit?? - */ -/* The top-level structure */ -typedef struct st_dynamic_fns { - void *static_state; - dynamic_MEM_fns mem_fns; -} dynamic_fns; - -/* - * The version checking function should be of this prototype. NB: The - * ossl_version value passed in is the OSSL_DYNAMIC_VERSION of the loading - * code. If this function returns zero, it indicates a (potential) version - * incompatibility and the loaded library doesn't believe it can proceed. - * Otherwise, the returned value is the (latest) version supported by the - * loading library. The loader may still decide that the loaded code's - * version is unsatisfactory and could veto the load. The function is - * expected to be implemented with the symbol name "v_check", and a default - * implementation can be fully instantiated with - * IMPLEMENT_DYNAMIC_CHECK_FN(). - */ -typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); -# 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; \ - return 0; } - -/* - * This function is passed the ENGINE structure to initialise with its own - * function and command settings. It should not adjust the structural or - * functional reference counts. If this function returns zero, (a) the load - * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto - * the structure, and (c) the shared library will be unloaded. So - * implementations should do their own internal cleanup in failure - * circumstances otherwise they could leak. The 'id' parameter, if non-NULL, - * represents the ENGINE id that the loader is looking for. If this is NULL, - * the shared library can choose to return failure or to initialise a - * 'default' ENGINE. If non-NULL, the shared library must initialise only an - * ENGINE matching the passed 'id'. The function is expected to be - * implemented with the symbol name "bind_engine". A standard implementation - * can be instantiated with IMPLEMENT_DYNAMIC_BIND_FN(fn) where the parameter - * 'fn' is a callback function that populates the ENGINE structure and - * returns an int value (zero for failure). 'fn' should have prototype; - * [static] int fn(ENGINE *e, const char *id); - */ -typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, - const dynamic_fns *fns); -# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \ - if (ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \ - CRYPTO_set_mem_functions(fns->mem_fns.malloc_fn, \ - fns->mem_fns.realloc_fn, \ - fns->mem_fns.free_fn); \ - OPENSSL_init_crypto(OPENSSL_INIT_NO_ATEXIT, NULL); \ - skip_cbs: \ - if (!fn(e, id)) return 0; \ - return 1; } - -/* - * If the loading application (or library) and the loaded ENGINE library - * share the same static data (eg. they're both dynamically linked to the - * same libcrypto.so) we need a way to avoid trying to set system callbacks - - * this would fail, and for the same reason that it's unnecessary to try. If - * the loaded ENGINE has (or gets from through the loader) its own copy of - * the libcrypto static data, we will need to set the callbacks. The easiest - * way to detect this is to have a function that returns a pointer to some - * static data and let the loading application and loaded ENGINE compare - * their respective values. - */ -void *ENGINE_get_static_state(void); - -# 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 /* 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 deleted file mode 100644 index d439b682..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/engineerr.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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_ENGINEERR_H -# define OPENSSL_ENGINEERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_ENGINE - - -/* - * ENGINE reason codes. - */ -# define ENGINE_R_ALREADY_LOADED 100 -# define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133 -# define ENGINE_R_CMD_NOT_EXECUTABLE 134 -# define ENGINE_R_COMMAND_TAKES_INPUT 135 -# define ENGINE_R_COMMAND_TAKES_NO_INPUT 136 -# define ENGINE_R_CONFLICTING_ENGINE_ID 103 -# define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119 -# define ENGINE_R_DSO_FAILURE 104 -# define ENGINE_R_DSO_NOT_FOUND 132 -# define ENGINE_R_ENGINES_SECTION_ERROR 148 -# define ENGINE_R_ENGINE_CONFIGURATION_ERROR 102 -# define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105 -# define ENGINE_R_ENGINE_SECTION_ERROR 149 -# define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128 -# define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129 -# define ENGINE_R_FINISH_FAILED 106 -# define ENGINE_R_ID_OR_NAME_MISSING 108 -# define ENGINE_R_INIT_FAILED 109 -# define ENGINE_R_INTERNAL_LIST_ERROR 110 -# define ENGINE_R_INVALID_ARGUMENT 143 -# define ENGINE_R_INVALID_CMD_NAME 137 -# define ENGINE_R_INVALID_CMD_NUMBER 138 -# define ENGINE_R_INVALID_INIT_VALUE 151 -# define ENGINE_R_INVALID_STRING 150 -# define ENGINE_R_NOT_INITIALISED 117 -# define ENGINE_R_NOT_LOADED 112 -# define ENGINE_R_NO_CONTROL_FUNCTION 120 -# define ENGINE_R_NO_INDEX 144 -# define ENGINE_R_NO_LOAD_FUNCTION 125 -# define ENGINE_R_NO_REFERENCE 130 -# define ENGINE_R_NO_SUCH_ENGINE 116 -# define ENGINE_R_UNIMPLEMENTED_CIPHER 146 -# define ENGINE_R_UNIMPLEMENTED_DIGEST 147 -# define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD 101 -# define ENGINE_R_VERSION_INCOMPATIBILITY 145 - -# endif -#endif 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 deleted file mode 100644 index b987e31f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h +++ /dev/null @@ -1,511 +0,0 @@ -/* - * 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_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; - -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_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); -int ERR_count_to_mark(void); - -ERR_STATE *OSSL_ERR_STATE_new(void); -void OSSL_ERR_STATE_save(ERR_STATE *es); -void OSSL_ERR_STATE_save_to_mark(ERR_STATE *es); -void OSSL_ERR_STATE_restore(const ERR_STATE *es); -void OSSL_ERR_STATE_free(ERR_STATE *es); - -#ifdef __cplusplus -} -#endif - -#endif 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 deleted file mode 100644 index 1ef09de0..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h.in +++ /dev/null @@ -1,500 +0,0 @@ -/* - * 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 - */ - -{- -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); -int ERR_count_to_mark(void); - -ERR_STATE *OSSL_ERR_STATE_new(void); -void OSSL_ERR_STATE_save(ERR_STATE *es); -void OSSL_ERR_STATE_save_to_mark(ERR_STATE *es); -void OSSL_ERR_STATE_restore(const ERR_STATE *es); -void OSSL_ERR_STATE_free(ERR_STATE *es); - -#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 deleted file mode 100644 index 4055bebb..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ess.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * 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 deleted file mode 100644 index d1a685b9..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ess.h.in +++ /dev/null @@ -1,81 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 165ce7c4..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/esserr.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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 deleted file mode 100644 index ea7620d6..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h +++ /dev/null @@ -1,2181 +0,0 @@ -/* - * 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_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 - -# define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ -# define EVP_MAX_KEY_LENGTH 64 -# define EVP_MAX_IV_LENGTH 16 -# define EVP_MAX_BLOCK_LENGTH 32 -# define EVP_MAX_AEAD_TAG_LENGTH 16 - -# define PKCS5_SALT_LEN 8 -/* Default PKCS#5 iteration count */ -# define PKCS5_DEFAULT_ITER 2048 - -# include - -# 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 -# define EVP_PKEY_RSA2 NID_rsa -# define EVP_PKEY_RSA_PSS NID_rsassaPss -# define EVP_PKEY_DSA NID_dsa -# define EVP_PKEY_DSA1 NID_dsa_2 -# define EVP_PKEY_DSA2 NID_dsaWithSHA -# define EVP_PKEY_DSA3 NID_dsaWithSHA1 -# define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 -# define EVP_PKEY_DH NID_dhKeyAgreement -# define EVP_PKEY_DHX NID_dhpublicnumber -# define EVP_PKEY_EC NID_X9_62_id_ecPublicKey -# define EVP_PKEY_SM2 NID_sm2 -# define EVP_PKEY_HMAC NID_hmac -# define EVP_PKEY_CMAC NID_cmac -# define EVP_PKEY_SCRYPT NID_id_scrypt -# define EVP_PKEY_TLS1_PRF NID_tls1_prf -# define EVP_PKEY_HKDF NID_hkdf -# define EVP_PKEY_POLY1305 NID_poly1305 -# define EVP_PKEY_SIPHASH NID_siphash -# define EVP_PKEY_X25519 NID_X25519 -# 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_PRIVATE_KEY \ - ( EVP_PKEY_KEY_PARAMETERS | OSSL_KEYMGMT_SELECT_PRIVATE_KEY ) -# 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 -# 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)); -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); -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 - -/* digest is extensible-output function, XOF */ -# define EVP_MD_FLAG_XOF 0x0002 - -/* DigestAlgorithmIdentifier flags... */ - -# define EVP_MD_FLAG_DIGALGID_MASK 0x0018 - -/* NULL or absent parameter accepted. Use NULL */ - -# define EVP_MD_FLAG_DIGALGID_NULL 0x0000 - -/* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */ - -# define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008 - -/* Custom handling via ctrl */ - -# define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018 - -/* Note if suitable for use in FIPS mode */ -# define EVP_MD_FLAG_FIPS 0x0400 - -/* Digest ctrls */ - -# 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 */ - -# define EVP_MD_CTRL_ALG_CTRL 0x1000 - -# endif /* !EVP_MD */ - -/* values for EVP_MD_CTX flags */ - -# define EVP_MD_CTX_FLAG_ONESHOT 0x0001/* digest update will be - * called once only */ -# define EVP_MD_CTX_FLAG_CLEANED 0x0002/* context has already been - * cleaned */ -# define EVP_MD_CTX_FLAG_REUSE 0x0004/* Don't free up ctx->md_data - * in EVP_MD_CTX_reset */ -/* - * FIPS and pad options are ignored in 1.0.0, definitions are here so we - * don't accidentally reuse the values for other purposes. - */ - -/* 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 - * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() - * instead. - */ -# define EVP_MD_CTX_FLAG_PAD_MASK 0xF0/* RSA mode to use */ -# define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00/* PKCS#1 v1.5 mode */ -# define EVP_MD_CTX_FLAG_PAD_X931 0x10/* X9.31 mode */ -# define EVP_MD_CTX_FLAG_PAD_PSS 0x20/* PSS mode */ - -# define EVP_MD_CTX_FLAG_NO_INIT 0x0100/* Don't initialize md_data */ -/* - * Some functions such as EVP_DigestSign only finalise copies of internal - * contexts so additional data can be included after the finalisation call. - * This is inefficient if this functionality is not required: it is disabled - * if the following flag is set. - */ -# define EVP_MD_CTX_FLAG_FINALISE 0x0200 -/* NOTE: 0x0400 and 0x0800 are 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)); -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 */ - -/* Modes for ciphers */ - -# define EVP_CIPH_STREAM_CIPHER 0x0 -# define EVP_CIPH_ECB_MODE 0x1 -# define EVP_CIPH_CBC_MODE 0x2 -# define EVP_CIPH_CFB_MODE 0x3 -# define EVP_CIPH_OFB_MODE 0x4 -# define EVP_CIPH_CTR_MODE 0x5 -# define EVP_CIPH_GCM_MODE 0x6 -# define EVP_CIPH_CCM_MODE 0x7 -# 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_GCM_SIV_MODE 0x10005 -# define EVP_CIPH_MODE 0xF0007 -/* Set if variable length cipher */ -# define EVP_CIPH_VARIABLE_LENGTH 0x8 -/* Set if the iv handling should be done by the cipher itself */ -# define EVP_CIPH_CUSTOM_IV 0x10 -/* Set if the cipher's init() function should be called if key is NULL */ -# define EVP_CIPH_ALWAYS_CALL_INIT 0x20 -/* Call ctrl() to init cipher parameters */ -# define EVP_CIPH_CTRL_INIT 0x40 -/* Don't use standard key length function */ -# define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 -/* Don't use standard block padding */ -# define EVP_CIPH_NO_PADDING 0x100 -/* cipher handles random key generation */ -# define EVP_CIPH_RAND_KEY 0x200 -/* cipher has its own additional copying logic */ -# define EVP_CIPH_CUSTOM_COPY 0x400 -/* Don't use standard iv length function */ -# define EVP_CIPH_CUSTOM_IV_LENGTH 0x800 -/* 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 -/* 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 - * older applications it could overflow buffers. - */ - -# define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1 - -/* ctrl() values */ - -# define EVP_CTRL_INIT 0x0 -# define EVP_CTRL_SET_KEY_LENGTH 0x1 -# define EVP_CTRL_GET_RC2_KEY_BITS 0x2 -# define EVP_CTRL_SET_RC2_KEY_BITS 0x3 -# define EVP_CTRL_GET_RC5_ROUNDS 0x4 -# define EVP_CTRL_SET_RC5_ROUNDS 0x5 -# define EVP_CTRL_RAND_KEY 0x6 -# define EVP_CTRL_PBE_PRF_NID 0x7 -# define EVP_CTRL_COPY 0x8 -# define EVP_CTRL_AEAD_SET_IVLEN 0x9 -# define EVP_CTRL_AEAD_GET_TAG 0x10 -# define EVP_CTRL_AEAD_SET_TAG 0x11 -# define EVP_CTRL_AEAD_SET_IV_FIXED 0x12 -# define EVP_CTRL_GCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN -# define EVP_CTRL_GCM_GET_TAG EVP_CTRL_AEAD_GET_TAG -# define EVP_CTRL_GCM_SET_TAG EVP_CTRL_AEAD_SET_TAG -# define EVP_CTRL_GCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED -# define EVP_CTRL_GCM_IV_GEN 0x13 -# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN -# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_AEAD_GET_TAG -# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_AEAD_SET_TAG -# define EVP_CTRL_CCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED -# define EVP_CTRL_CCM_SET_L 0x14 -# define EVP_CTRL_CCM_SET_MSGLEN 0x15 -/* - * AEAD cipher deduces payload length and returns number of bytes required to - * store MAC and eventual padding. Subsequent call to EVP_Cipher even - * appends/verifies MAC. - */ -# define EVP_CTRL_AEAD_TLS1_AAD 0x16 -/* Used by composite AEAD ciphers, no-op in GCM, CCM... */ -# define EVP_CTRL_AEAD_SET_MAC_KEY 0x17 -/* Set the GCM invocation field, decrypt only */ -# define EVP_CTRL_GCM_SET_IV_INV 0x18 - -# define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19 -# define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a -# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b -# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c - -# define EVP_CTRL_SSL3_MASTER_SECRET 0x1d - -/* EVP_CTRL_SET_SBOX takes the char * specifying S-boxes */ -# define EVP_CTRL_SET_SBOX 0x1e -/* - * EVP_CTRL_SBOX_USED takes a 'size_t' and 'char *', pointing at a - * pre-allocated buffer with specified size - */ -# define EVP_CTRL_SBOX_USED 0x1f -/* EVP_CTRL_KEY_MESH takes 'size_t' number of bytes to mesh the key after, - * 0 switches meshing off - */ -# define EVP_CTRL_KEY_MESH 0x20 -/* EVP_CTRL_BLOCK_PADDING_MODE takes the padding mode */ -# define EVP_CTRL_BLOCK_PADDING_MODE 0x21 - -/* Set the output buffers to use for a pipelined operation */ -# define EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS 0x22 -/* Set the input buffers to use for a pipelined operation */ -# 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 -#define EVP_PADDING_ISO7816_4 2 -#define EVP_PADDING_ANSI923 3 -#define EVP_PADDING_ISO10126 4 -#define EVP_PADDING_ZERO 5 - -/* RFC 5246 defines additional data to be 13 bytes in length */ -# define EVP_AEAD_TLS1_AAD_LEN 13 - -typedef struct { - unsigned char *out; - const unsigned char *inp; - size_t len; - unsigned int interleave; -} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM; - -/* GCM TLS constants */ -/* Length of fixed part of IV derived from PRF */ -# define EVP_GCM_TLS_FIXED_IV_LEN 4 -/* Length of explicit part of IV part of TLS records */ -# define EVP_GCM_TLS_EXPLICIT_IV_LEN 8 -/* Length of tag for TLS */ -# define EVP_GCM_TLS_TAG_LEN 16 - -/* CCM TLS constants */ -/* Length of fixed part of IV derived from PRF */ -# define EVP_CCM_TLS_FIXED_IV_LEN 4 -/* Length of explicit part of IV part of TLS records */ -# define EVP_CCM_TLS_EXPLICIT_IV_LEN 8 -/* Total length of CCM IV length for TLS */ -# define EVP_CCM_TLS_IV_LEN 12 -/* Length of tag for TLS */ -# define EVP_CCM_TLS_TAG_LEN 16 -/* Length of CCM8 tag for TLS */ -# define EVP_CCM8_TLS_TAG_LEN 8 - -/* Length of tag for TLS */ -# define EVP_CHACHAPOLY_TLS_TAG_LEN 16 - -typedef struct evp_cipher_info_st { - const EVP_CIPHER *cipher; - unsigned char iv[EVP_MAX_IV_LENGTH]; -} EVP_CIPHER_INFO; - - -/* Password based encryption function */ -typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, - int passlen, ASN1_TYPE *param, - const EVP_CIPHER *cipher, const EVP_MD *md, - int en_de); - -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,\ - (rsa)) -# endif - -# ifndef OPENSSL_NO_DSA -# define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ - (dsa)) -# endif - -# 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_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,(shkey)) -# endif - -# ifndef OPENSSL_NO_POLY1305 -# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),\ - EVP_PKEY_POLY1305,(polykey)) -# endif - -/* Add some extra combinations */ -# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) -# define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) -# 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_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)); -# 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_get0_md_data(const EVP_MD_CTX *ctx); -# define EVP_MD_CTX_md_data EVP_MD_CTX_get0_md_data - -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); -# 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); -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); -# 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_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_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) - -# define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) -# define EVP_SignInit(a,b) EVP_DigestInit(a,b) -# define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) -# define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) -# 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) - -# 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,(void *)(md)) -# endif -# 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,(c_pp)) - -__owur int EVP_Cipher(EVP_CIPHER_CTX *c, - unsigned char *out, - const unsigned char *in, unsigned int inl); - -# define EVP_add_cipher_alias(n,alias) \ - OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) -# define EVP_add_digest_alias(n,alias) \ - OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)) -# define EVP_delete_cipher_alias(alias) \ - OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); -# 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); -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, - size_t cnt); -__owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, - unsigned int *s); -__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); -__owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, - unsigned int *s); -__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); -void EVP_set_pw_prompt(const char *prompt); -char *EVP_get_pw_prompt(void); - -__owur int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, - const unsigned char *salt, - const unsigned char *data, int datal, int count, - unsigned char *key, unsigned char *iv); - -void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); -void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); -int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags); - -__owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv); -__owur int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, - 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, - int *outl); -__owur int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, - int *outl); - -__owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv); -__owur int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, - 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, - int *outl); -__owur int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, - int *outl); - -__owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv, - int enc); -__owur int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, - 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, - int *outl); -__owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, - int *outl); - -__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, - size_t tbslen); - -__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); - -__owur 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); -__owur 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); - -__owur 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); - -__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); -__owur int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); - -__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); - -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, 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, - const unsigned char *in, int inl); -void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); -int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); - -void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); -int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned - char *out, int *outl); -int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); - -# 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 -EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); -int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c); -void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c); -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); -const BIO_METHOD *BIO_f_cipher(void); -const BIO_METHOD *BIO_f_reliable(void); -__owur int BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, - const unsigned char *i, int enc); - -const EVP_MD *EVP_md_null(void); -# ifndef OPENSSL_NO_MD2 -const EVP_MD *EVP_md2(void); -# endif -# ifndef OPENSSL_NO_MD4 -const EVP_MD *EVP_md4(void); -# endif -# ifndef OPENSSL_NO_MD5 -const EVP_MD *EVP_md5(void); -const EVP_MD *EVP_md5_sha1(void); -# endif -# ifndef OPENSSL_NO_BLAKE2 -const EVP_MD *EVP_blake2b512(void); -const EVP_MD *EVP_blake2s256(void); -# endif -const EVP_MD *EVP_sha1(void); -const EVP_MD *EVP_sha224(void); -const EVP_MD *EVP_sha256(void); -const EVP_MD *EVP_sha384(void); -const EVP_MD *EVP_sha512(void); -const EVP_MD *EVP_sha512_224(void); -const EVP_MD *EVP_sha512_256(void); -const EVP_MD *EVP_sha3_224(void); -const EVP_MD *EVP_sha3_256(void); -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 -# ifndef OPENSSL_NO_RMD160 -const EVP_MD *EVP_ripemd160(void); -# endif -# ifndef OPENSSL_NO_WHIRLPOOL -const EVP_MD *EVP_whirlpool(void); -# endif -# ifndef OPENSSL_NO_SM3 -const EVP_MD *EVP_sm3(void); -# endif -const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ -# ifndef OPENSSL_NO_DES -const EVP_CIPHER *EVP_des_ecb(void); -const EVP_CIPHER *EVP_des_ede(void); -const EVP_CIPHER *EVP_des_ede3(void); -const EVP_CIPHER *EVP_des_ede_ecb(void); -const EVP_CIPHER *EVP_des_ede3_ecb(void); -const EVP_CIPHER *EVP_des_cfb64(void); -# define EVP_des_cfb EVP_des_cfb64 -const EVP_CIPHER *EVP_des_cfb1(void); -const EVP_CIPHER *EVP_des_cfb8(void); -const EVP_CIPHER *EVP_des_ede_cfb64(void); -# define EVP_des_ede_cfb EVP_des_ede_cfb64 -const EVP_CIPHER *EVP_des_ede3_cfb64(void); -# define EVP_des_ede3_cfb EVP_des_ede3_cfb64 -const EVP_CIPHER *EVP_des_ede3_cfb1(void); -const EVP_CIPHER *EVP_des_ede3_cfb8(void); -const EVP_CIPHER *EVP_des_ofb(void); -const EVP_CIPHER *EVP_des_ede_ofb(void); -const EVP_CIPHER *EVP_des_ede3_ofb(void); -const EVP_CIPHER *EVP_des_cbc(void); -const EVP_CIPHER *EVP_des_ede_cbc(void); -const EVP_CIPHER *EVP_des_ede3_cbc(void); -const EVP_CIPHER *EVP_desx_cbc(void); -const EVP_CIPHER *EVP_des_ede3_wrap(void); -/* - * This should now be supported through the dev_crypto ENGINE. But also, why - * are rc4 and md5 declarations made here inside a "NO_DES" precompiler - * branch? - */ -# endif -# ifndef OPENSSL_NO_RC4 -const EVP_CIPHER *EVP_rc4(void); -const EVP_CIPHER *EVP_rc4_40(void); -# ifndef OPENSSL_NO_MD5 -const EVP_CIPHER *EVP_rc4_hmac_md5(void); -# endif -# endif -# ifndef OPENSSL_NO_IDEA -const EVP_CIPHER *EVP_idea_ecb(void); -const EVP_CIPHER *EVP_idea_cfb64(void); -# define EVP_idea_cfb EVP_idea_cfb64 -const EVP_CIPHER *EVP_idea_ofb(void); -const EVP_CIPHER *EVP_idea_cbc(void); -# endif -# ifndef OPENSSL_NO_RC2 -const EVP_CIPHER *EVP_rc2_ecb(void); -const EVP_CIPHER *EVP_rc2_cbc(void); -const EVP_CIPHER *EVP_rc2_40_cbc(void); -const EVP_CIPHER *EVP_rc2_64_cbc(void); -const EVP_CIPHER *EVP_rc2_cfb64(void); -# define EVP_rc2_cfb EVP_rc2_cfb64 -const EVP_CIPHER *EVP_rc2_ofb(void); -# endif -# ifndef OPENSSL_NO_BF -const EVP_CIPHER *EVP_bf_ecb(void); -const EVP_CIPHER *EVP_bf_cbc(void); -const EVP_CIPHER *EVP_bf_cfb64(void); -# define EVP_bf_cfb EVP_bf_cfb64 -const EVP_CIPHER *EVP_bf_ofb(void); -# endif -# ifndef OPENSSL_NO_CAST -const EVP_CIPHER *EVP_cast5_ecb(void); -const EVP_CIPHER *EVP_cast5_cbc(void); -const EVP_CIPHER *EVP_cast5_cfb64(void); -# define EVP_cast5_cfb EVP_cast5_cfb64 -const EVP_CIPHER *EVP_cast5_ofb(void); -# endif -# ifndef OPENSSL_NO_RC5 -const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); -const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); -const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void); -# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64 -const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); -# endif -const EVP_CIPHER *EVP_aes_128_ecb(void); -const EVP_CIPHER *EVP_aes_128_cbc(void); -const EVP_CIPHER *EVP_aes_128_cfb1(void); -const EVP_CIPHER *EVP_aes_128_cfb8(void); -const EVP_CIPHER *EVP_aes_128_cfb128(void); -# define EVP_aes_128_cfb EVP_aes_128_cfb128 -const EVP_CIPHER *EVP_aes_128_ofb(void); -const EVP_CIPHER *EVP_aes_128_ctr(void); -const EVP_CIPHER *EVP_aes_128_ccm(void); -const EVP_CIPHER *EVP_aes_128_gcm(void); -const EVP_CIPHER *EVP_aes_128_xts(void); -const EVP_CIPHER *EVP_aes_128_wrap(void); -const EVP_CIPHER *EVP_aes_128_wrap_pad(void); -# ifndef OPENSSL_NO_OCB -const EVP_CIPHER *EVP_aes_128_ocb(void); -# endif -const EVP_CIPHER *EVP_aes_192_ecb(void); -const EVP_CIPHER *EVP_aes_192_cbc(void); -const EVP_CIPHER *EVP_aes_192_cfb1(void); -const EVP_CIPHER *EVP_aes_192_cfb8(void); -const EVP_CIPHER *EVP_aes_192_cfb128(void); -# define EVP_aes_192_cfb EVP_aes_192_cfb128 -const EVP_CIPHER *EVP_aes_192_ofb(void); -const EVP_CIPHER *EVP_aes_192_ctr(void); -const EVP_CIPHER *EVP_aes_192_ccm(void); -const EVP_CIPHER *EVP_aes_192_gcm(void); -const EVP_CIPHER *EVP_aes_192_wrap(void); -const EVP_CIPHER *EVP_aes_192_wrap_pad(void); -# ifndef OPENSSL_NO_OCB -const EVP_CIPHER *EVP_aes_192_ocb(void); -# endif -const EVP_CIPHER *EVP_aes_256_ecb(void); -const EVP_CIPHER *EVP_aes_256_cbc(void); -const EVP_CIPHER *EVP_aes_256_cfb1(void); -const EVP_CIPHER *EVP_aes_256_cfb8(void); -const EVP_CIPHER *EVP_aes_256_cfb128(void); -# define EVP_aes_256_cfb EVP_aes_256_cfb128 -const EVP_CIPHER *EVP_aes_256_ofb(void); -const EVP_CIPHER *EVP_aes_256_ctr(void); -const EVP_CIPHER *EVP_aes_256_ccm(void); -const EVP_CIPHER *EVP_aes_256_gcm(void); -const EVP_CIPHER *EVP_aes_256_xts(void); -const EVP_CIPHER *EVP_aes_256_wrap(void); -const EVP_CIPHER *EVP_aes_256_wrap_pad(void); -# ifndef OPENSSL_NO_OCB -const EVP_CIPHER *EVP_aes_256_ocb(void); -# endif -const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); -const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); -const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); -const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); -# ifndef OPENSSL_NO_ARIA -const EVP_CIPHER *EVP_aria_128_ecb(void); -const EVP_CIPHER *EVP_aria_128_cbc(void); -const EVP_CIPHER *EVP_aria_128_cfb1(void); -const EVP_CIPHER *EVP_aria_128_cfb8(void); -const EVP_CIPHER *EVP_aria_128_cfb128(void); -# define EVP_aria_128_cfb EVP_aria_128_cfb128 -const EVP_CIPHER *EVP_aria_128_ctr(void); -const EVP_CIPHER *EVP_aria_128_ofb(void); -const EVP_CIPHER *EVP_aria_128_gcm(void); -const EVP_CIPHER *EVP_aria_128_ccm(void); -const EVP_CIPHER *EVP_aria_192_ecb(void); -const EVP_CIPHER *EVP_aria_192_cbc(void); -const EVP_CIPHER *EVP_aria_192_cfb1(void); -const EVP_CIPHER *EVP_aria_192_cfb8(void); -const EVP_CIPHER *EVP_aria_192_cfb128(void); -# define EVP_aria_192_cfb EVP_aria_192_cfb128 -const EVP_CIPHER *EVP_aria_192_ctr(void); -const EVP_CIPHER *EVP_aria_192_ofb(void); -const EVP_CIPHER *EVP_aria_192_gcm(void); -const EVP_CIPHER *EVP_aria_192_ccm(void); -const EVP_CIPHER *EVP_aria_256_ecb(void); -const EVP_CIPHER *EVP_aria_256_cbc(void); -const EVP_CIPHER *EVP_aria_256_cfb1(void); -const EVP_CIPHER *EVP_aria_256_cfb8(void); -const EVP_CIPHER *EVP_aria_256_cfb128(void); -# define EVP_aria_256_cfb EVP_aria_256_cfb128 -const EVP_CIPHER *EVP_aria_256_ctr(void); -const EVP_CIPHER *EVP_aria_256_ofb(void); -const EVP_CIPHER *EVP_aria_256_gcm(void); -const EVP_CIPHER *EVP_aria_256_ccm(void); -# endif -# ifndef OPENSSL_NO_CAMELLIA -const EVP_CIPHER *EVP_camellia_128_ecb(void); -const EVP_CIPHER *EVP_camellia_128_cbc(void); -const EVP_CIPHER *EVP_camellia_128_cfb1(void); -const EVP_CIPHER *EVP_camellia_128_cfb8(void); -const EVP_CIPHER *EVP_camellia_128_cfb128(void); -# define EVP_camellia_128_cfb EVP_camellia_128_cfb128 -const EVP_CIPHER *EVP_camellia_128_ofb(void); -const EVP_CIPHER *EVP_camellia_128_ctr(void); -const EVP_CIPHER *EVP_camellia_192_ecb(void); -const EVP_CIPHER *EVP_camellia_192_cbc(void); -const EVP_CIPHER *EVP_camellia_192_cfb1(void); -const EVP_CIPHER *EVP_camellia_192_cfb8(void); -const EVP_CIPHER *EVP_camellia_192_cfb128(void); -# define EVP_camellia_192_cfb EVP_camellia_192_cfb128 -const EVP_CIPHER *EVP_camellia_192_ofb(void); -const EVP_CIPHER *EVP_camellia_192_ctr(void); -const EVP_CIPHER *EVP_camellia_256_ecb(void); -const EVP_CIPHER *EVP_camellia_256_cbc(void); -const EVP_CIPHER *EVP_camellia_256_cfb1(void); -const EVP_CIPHER *EVP_camellia_256_cfb8(void); -const EVP_CIPHER *EVP_camellia_256_cfb128(void); -# define EVP_camellia_256_cfb EVP_camellia_256_cfb128 -const EVP_CIPHER *EVP_camellia_256_ofb(void); -const EVP_CIPHER *EVP_camellia_256_ctr(void); -# endif -# ifndef OPENSSL_NO_CHACHA -const EVP_CIPHER *EVP_chacha20(void); -# ifndef OPENSSL_NO_POLY1305 -const EVP_CIPHER *EVP_chacha20_poly1305(void); -# endif -# endif - -# ifndef OPENSSL_NO_SEED -const EVP_CIPHER *EVP_seed_ecb(void); -const EVP_CIPHER *EVP_seed_cbc(void); -const EVP_CIPHER *EVP_seed_cfb128(void); -# define EVP_seed_cfb EVP_seed_cfb128 -const EVP_CIPHER *EVP_seed_ofb(void); -# endif - -# ifndef OPENSSL_NO_SM4 -const EVP_CIPHER *EVP_sm4_ecb(void); -const EVP_CIPHER *EVP_sm4_cbc(void); -const EVP_CIPHER *EVP_sm4_cfb128(void); -# define EVP_sm4_cfb EVP_sm4_cfb128 -const EVP_CIPHER *EVP_sm4_ofb(void); -const EVP_CIPHER *EVP_sm4_ctr(void); -# endif - -# 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 \ - | OPENSSL_INIT_LOAD_CONFIG, NULL) -# define OPENSSL_add_all_algorithms_noconf() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ - | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) - -# ifdef OPENSSL_LOAD_CONF -# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_conf() -# else -# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_noconf() -# endif - -# define OpenSSL_add_all_ciphers() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL) -# define OpenSSL_add_all_digests() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) - -# define EVP_cleanup() while(0) continue -# endif - -int EVP_add_cipher(const EVP_CIPHER *cipher); -int EVP_add_digest(const EVP_MD *digest); - -const EVP_CIPHER *EVP_get_cipherbyname(const char *name); -const EVP_MD *EVP_get_digestbyname(const char *name); - -void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, - const char *from, const char *to, void *x), - void *arg); -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), - void *arg); -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); - -/* 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_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_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 -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 -OSSL_DEPRECATEDIN_3_0 -const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); -# endif -# ifndef OPENSSL_NO_SIPHASH -OSSL_DEPRECATEDIN_3_0 -const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); -# endif - -struct rsa_st; -OSSL_DEPRECATEDIN_3_0 -int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); -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); - -# ifndef OPENSSL_NO_DSA -struct dsa_st; -OSSL_DEPRECATEDIN_3_0 -int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); -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 -struct dh_st; -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); -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 /* 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(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(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_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); -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); - -# 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_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); -int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); - -/* These are used by EVP_CIPHER methods */ -int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); -int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); - -/* PKCS5 password based encryption */ -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); -int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, - const unsigned char *salt, int saltlen, int iter, - const EVP_MD *digest, int keylen, unsigned char *out); -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); - -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 */ -# define EVP_PBE_TYPE_OUTER 0x0 -/* Is an PRF type OID */ -# define EVP_PBE_TYPE_PRF 0x1 -/* Is a PKCS#5 v2.0 KDF */ -# define EVP_PBE_TYPE_KDF 0x2 - -int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, - int md_nid, EVP_PBE_KEYGEN *keygen); -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); - -# define ASN1_PKEY_ALIAS 0x1 -# define ASN1_PKEY_DYNAMIC 0x2 -# define ASN1_PKEY_SIGPARAM_NULL 0x4 - -# define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1 -# define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2 -# define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3 -# define ASN1_PKEY_CTRL_CMS_SIGN 0x5 -# define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7 -# define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8 - -# 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); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, - const char *str, int len); -int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); -int EVP_PKEY_asn1_add_alias(int to, int from); -int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, - int *ppkey_flags, const char **pinfo, - const char **ppem_str, - const EVP_PKEY_ASN1_METHOD *ameth); - -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey); -EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, - const char *pem_str, - const char *info); -void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, - const EVP_PKEY_ASN1_METHOD *src); -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, - 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, ASN1_PCTX *pctx), - int (*pkey_size) (const EVP_PKEY *pk), - int (*pkey_bits) (const EVP_PKEY *pk)); -void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, - int (*priv_decode) (EVP_PKEY *pk, - const PKCS8_PRIV_KEY_INFO - *p8inf), - int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, - const EVP_PKEY *pk), - int (*priv_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, - ASN1_PCTX *pctx)); -void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, - int (*param_decode) (EVP_PKEY *pkey, - const unsigned char **pder, - int derlen), - int (*param_encode) (const EVP_PKEY *pkey, - unsigned char **pder), - int (*param_missing) (const EVP_PKEY *pk), - int (*param_copy) (EVP_PKEY *to, - const EVP_PKEY *from), - int (*param_cmp) (const EVP_PKEY *a, - const EVP_PKEY *b), - int (*param_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, - ASN1_PCTX *pctx)); - -void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, - void (*pkey_free) (EVP_PKEY *pkey)); -void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_ctrl) (EVP_PKEY *pkey, int op, - long arg1, void *arg2)); -void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, - 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)); - -void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth, - int (*siginf_set) (X509_SIG_INFO *siginf, - const X509_ALGOR *alg, - const ASN1_STRING *sig)); - -void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_check) (const EVP_PKEY *pk)); - -void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_pub_check) (const EVP_PKEY *pk)); - -void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_param_check) (const EVP_PKEY *pk)); - -void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*set_priv_key) (EVP_PKEY *pk, - const unsigned char - *priv, - size_t len)); -void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*set_pub_key) (EVP_PKEY *pk, - const unsigned char *pub, - size_t len)); -void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*get_priv_key) (const EVP_PKEY *pk, - unsigned char *priv, - size_t *len)); -void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*get_pub_key) (const EVP_PKEY *pk, - unsigned char *pub, - size_t *len)); - -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_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 \ - | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) - -# define EVP_PKEY_OP_TYPE_CRYPT \ - (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) - -# define EVP_PKEY_OP_TYPE_NOGEN \ - (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) - - -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_SET_MAC_KEY 6 -# define EVP_PKEY_CTRL_DIGESTINIT 7 -/* Used by GOST key encryption in TLS */ -# define EVP_PKEY_CTRL_SET_IV 8 -# 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 - -# define EVP_PKEY_FLAG_AUTOARGLEN 2 -/* - * 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 - -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_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, - const char *value); -int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype, - int cmd, uint64_t value); - -int EVP_PKEY_CTX_str2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *str); -int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex); - -int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md); - -int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx); -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); -int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, - size_t *len); -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(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); - -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_auth_encapsulate_init(EVP_PKEY_CTX *ctx, EVP_PKEY *authpriv, - 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_auth_decapsulate_init(EVP_PKEY_CTX *ctx, EVP_PKEY *authpub, - 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); -# 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 (*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_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_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 -} -# endif -#endif 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 deleted file mode 100644 index 11f3faa4..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * 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_EVPERR_H -# define OPENSSL_EVPERR_H -# pragma once - -# include -# include -# include - - - -/* - * 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_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_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_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_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_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_BITS 166 -# define EVP_R_UNKNOWN_CIPHER 160 -# define EVP_R_UNKNOWN_DIGEST 161 -# define EVP_R_UNKNOWN_KEY_TYPE 207 -# define EVP_R_UNKNOWN_MAX_SIZE 167 -# define EVP_R_UNKNOWN_OPTION 169 -# define EVP_R_UNKNOWN_PBE_ALGORITHM 121 -# define EVP_R_UNKNOWN_SECURITY_BITS 168 -# define EVP_R_UNSUPPORTED_ALGORITHM 156 -# define EVP_R_UNSUPPORTED_CIPHER 107 -# 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_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 deleted file mode 100644 index 5c77f6d6..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/fips_names.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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 deleted file mode 100644 index 42ba014b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/fipskey.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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 deleted file mode 100644 index 56b947e8..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/fipskey.h.in +++ /dev/null @@ -1,35 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index f9e1bff3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/hmac.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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_HMAC_H -# define OPENSSL_HMAC_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_HMAC_H -# endif - -# include - -# include - -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HMAC_MAX_MD_CBLOCK 200 /* Deprecated */ -# endif - -# ifdef __cplusplus -extern "C" { -# endif - -# 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 - -unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, - const unsigned char *data, size_t data_len, - unsigned char *md, unsigned int *md_len); - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/hpke.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/hpke.h deleted file mode 100644 index af637ac6..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/hpke.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright 2022-2023 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 - */ - -/* APIs and data structures for HPKE (RFC9180) */ -#ifndef OSSL_HPKE_H -# define OSSL_HPKE_H -# pragma once - -# include - -/* HPKE modes */ -# define OSSL_HPKE_MODE_BASE 0 /* Base mode */ -# define OSSL_HPKE_MODE_PSK 1 /* Pre-shared key mode */ -# define OSSL_HPKE_MODE_AUTH 2 /* Authenticated mode */ -# define OSSL_HPKE_MODE_PSKAUTH 3 /* PSK+authenticated mode */ - -/* - * Max for ikm, psk, pskid, info and exporter contexts. - * RFC9180, section 7.2.1 RECOMMENDS 64 octets but we have test vectors from - * Appendix A.6.1 with a 66 octet IKM so we'll allow that. - */ -# define OSSL_HPKE_MAX_PARMLEN 66 -# define OSSL_HPKE_MIN_PSKLEN 32 -# define OSSL_HPKE_MAX_INFOLEN 1024 - -/* - * The (16bit) HPKE algorithm ID IANA codepoints - * If/when new IANA codepoints are added there are tables in - * crypto/hpke/hpke_util.c that must also be updated. - */ -# define OSSL_HPKE_KEM_ID_RESERVED 0x0000 /* not used */ -# define OSSL_HPKE_KEM_ID_P256 0x0010 /* NIST P-256 */ -# define OSSL_HPKE_KEM_ID_P384 0x0011 /* NIST P-384 */ -# define OSSL_HPKE_KEM_ID_P521 0x0012 /* NIST P-521 */ -# define OSSL_HPKE_KEM_ID_X25519 0x0020 /* Curve25519 */ -# define OSSL_HPKE_KEM_ID_X448 0x0021 /* Curve448 */ - -# define OSSL_HPKE_KDF_ID_RESERVED 0x0000 /* not used */ -# define OSSL_HPKE_KDF_ID_HKDF_SHA256 0x0001 /* HKDF-SHA256 */ -# define OSSL_HPKE_KDF_ID_HKDF_SHA384 0x0002 /* HKDF-SHA384 */ -# define OSSL_HPKE_KDF_ID_HKDF_SHA512 0x0003 /* HKDF-SHA512 */ - -# define OSSL_HPKE_AEAD_ID_RESERVED 0x0000 /* not used */ -# define OSSL_HPKE_AEAD_ID_AES_GCM_128 0x0001 /* AES-GCM-128 */ -# define OSSL_HPKE_AEAD_ID_AES_GCM_256 0x0002 /* AES-GCM-256 */ -# define OSSL_HPKE_AEAD_ID_CHACHA_POLY1305 0x0003 /* Chacha20-Poly1305 */ -# define OSSL_HPKE_AEAD_ID_EXPORTONLY 0xFFFF /* export-only fake ID */ - -/* strings for suite components */ -# define OSSL_HPKE_KEMSTR_P256 "P-256" /* KEM id 0x10 */ -# define OSSL_HPKE_KEMSTR_P384 "P-384" /* KEM id 0x11 */ -# define OSSL_HPKE_KEMSTR_P521 "P-521" /* KEM id 0x12 */ -# define OSSL_HPKE_KEMSTR_X25519 "X25519" /* KEM id 0x20 */ -# define OSSL_HPKE_KEMSTR_X448 "X448" /* KEM id 0x21 */ -# define OSSL_HPKE_KDFSTR_256 "hkdf-sha256" /* KDF id 1 */ -# define OSSL_HPKE_KDFSTR_384 "hkdf-sha384" /* KDF id 2 */ -# define OSSL_HPKE_KDFSTR_512 "hkdf-sha512" /* KDF id 3 */ -# define OSSL_HPKE_AEADSTR_AES128GCM "aes-128-gcm" /* AEAD id 1 */ -# define OSSL_HPKE_AEADSTR_AES256GCM "aes-256-gcm" /* AEAD id 2 */ -# define OSSL_HPKE_AEADSTR_CP "chacha20-poly1305" /* AEAD id 3 */ -# define OSSL_HPKE_AEADSTR_EXP "exporter" /* AEAD id 0xff */ - -/* - * Roles for use in creating an OSSL_HPKE_CTX, most - * important use of this is to control nonce re-use. - */ -# define OSSL_HPKE_ROLE_SENDER 0 -# define OSSL_HPKE_ROLE_RECEIVER 1 - -# ifdef __cplusplus -extern "C" { -# endif - -typedef struct { - uint16_t kem_id; /* Key Encapsulation Method id */ - uint16_t kdf_id; /* Key Derivation Function id */ - uint16_t aead_id; /* AEAD alg id */ -} OSSL_HPKE_SUITE; - -/** - * Suite constants, use this like: - * OSSL_HPKE_SUITE myvar = OSSL_HPKE_SUITE_DEFAULT; - */ -# ifndef OPENSSL_NO_ECX -# define OSSL_HPKE_SUITE_DEFAULT \ - {\ - OSSL_HPKE_KEM_ID_X25519, \ - OSSL_HPKE_KDF_ID_HKDF_SHA256, \ - OSSL_HPKE_AEAD_ID_AES_GCM_128 \ - } -# else -# define OSSL_HPKE_SUITE_DEFAULT \ - {\ - OSSL_HPKE_KEM_ID_P256, \ - OSSL_HPKE_KDF_ID_HKDF_SHA256, \ - OSSL_HPKE_AEAD_ID_AES_GCM_128 \ - } -#endif - -typedef struct ossl_hpke_ctx_st OSSL_HPKE_CTX; - -OSSL_HPKE_CTX *OSSL_HPKE_CTX_new(int mode, OSSL_HPKE_SUITE suite, int role, - OSSL_LIB_CTX *libctx, const char *propq); -void OSSL_HPKE_CTX_free(OSSL_HPKE_CTX *ctx); - -int OSSL_HPKE_encap(OSSL_HPKE_CTX *ctx, - unsigned char *enc, size_t *enclen, - const unsigned char *pub, size_t publen, - const unsigned char *info, size_t infolen); -int OSSL_HPKE_seal(OSSL_HPKE_CTX *ctx, - unsigned char *ct, size_t *ctlen, - const unsigned char *aad, size_t aadlen, - const unsigned char *pt, size_t ptlen); - -int OSSL_HPKE_keygen(OSSL_HPKE_SUITE suite, - unsigned char *pub, size_t *publen, EVP_PKEY **priv, - const unsigned char *ikm, size_t ikmlen, - OSSL_LIB_CTX *libctx, const char *propq); -int OSSL_HPKE_decap(OSSL_HPKE_CTX *ctx, - const unsigned char *enc, size_t enclen, - EVP_PKEY *recippriv, - const unsigned char *info, size_t infolen); -int OSSL_HPKE_open(OSSL_HPKE_CTX *ctx, - unsigned char *pt, size_t *ptlen, - const unsigned char *aad, size_t aadlen, - const unsigned char *ct, size_t ctlen); - -int OSSL_HPKE_export(OSSL_HPKE_CTX *ctx, - unsigned char *secret, - size_t secretlen, - const unsigned char *label, - size_t labellen); - -int OSSL_HPKE_CTX_set1_authpriv(OSSL_HPKE_CTX *ctx, EVP_PKEY *priv); -int OSSL_HPKE_CTX_set1_authpub(OSSL_HPKE_CTX *ctx, - const unsigned char *pub, - size_t publen); -int OSSL_HPKE_CTX_set1_psk(OSSL_HPKE_CTX *ctx, - const char *pskid, - const unsigned char *psk, size_t psklen); - -int OSSL_HPKE_CTX_set1_ikme(OSSL_HPKE_CTX *ctx, - const unsigned char *ikme, size_t ikmelen); - -int OSSL_HPKE_CTX_set_seq(OSSL_HPKE_CTX *ctx, uint64_t seq); -int OSSL_HPKE_CTX_get_seq(OSSL_HPKE_CTX *ctx, uint64_t *seq); - -int OSSL_HPKE_suite_check(OSSL_HPKE_SUITE suite); -int OSSL_HPKE_get_grease_value(const OSSL_HPKE_SUITE *suite_in, - OSSL_HPKE_SUITE *suite, - unsigned char *enc, size_t *enclen, - unsigned char *ct, size_t ctlen, - OSSL_LIB_CTX *libctx, const char *propq); -int OSSL_HPKE_str2suite(const char *str, OSSL_HPKE_SUITE *suite); -size_t OSSL_HPKE_get_ciphertext_size(OSSL_HPKE_SUITE suite, size_t clearlen); -size_t OSSL_HPKE_get_public_encap_size(OSSL_HPKE_SUITE suite); -size_t OSSL_HPKE_get_recommended_ikmelen(OSSL_HPKE_SUITE suite); - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index a3cbf15f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/http.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2000-2023 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" - -# ifndef OPENSSL_NO_HTTP - -#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); - - -# endif /* !defined(OPENSSL_NO_HTTP) */ -# 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 deleted file mode 100644 index ee089592..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/httperr.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 deleted file mode 100644 index 1f9bb3b3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/idea.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# 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 - -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 - -# 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 0983230a..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdf.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * 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_KDF_H -# define OPENSSL_KDF_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_KDF_H -# endif - -# include -# include -# include -# include - -# ifdef __cplusplus -extern "C" { -# 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) -# define EVP_PKEY_CTRL_TLS_SEED (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_HKDF_MD (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_HKDF_SALT (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_HKDF_KEY (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_HKDF_INFO (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_HKDF_MODE (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_PASS (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_SCRYPT_SALT (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_SCRYPT_N (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_SCRYPT_R (EVP_PKEY_ALG_CTRL + 11) -# 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 \ - 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 - -int EVP_PKEY_CTX_set_tls1_prf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); - -int EVP_PKEY_CTX_set1_tls1_prf_secret(EVP_PKEY_CTX *pctx, - const unsigned char *sec, int seclen); - -int EVP_PKEY_CTX_add1_tls1_prf_seed(EVP_PKEY_CTX *pctx, - const unsigned char *seed, int seedlen); - -int EVP_PKEY_CTX_set_hkdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); - -int EVP_PKEY_CTX_set1_hkdf_salt(EVP_PKEY_CTX *ctx, - const unsigned char *salt, int saltlen); - -int EVP_PKEY_CTX_set1_hkdf_key(EVP_PKEY_CTX *ctx, - const unsigned char *key, int keylen); - -int EVP_PKEY_CTX_add1_hkdf_info(EVP_PKEY_CTX *ctx, - const unsigned char *info, int infolen); - -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 - -int EVP_PKEY_CTX_set1_pbe_pass(EVP_PKEY_CTX *ctx, const char *pass, - int passlen); - -int EVP_PKEY_CTX_set1_scrypt_salt(EVP_PKEY_CTX *ctx, - const unsigned char *salt, int saltlen); - -int EVP_PKEY_CTX_set_scrypt_N(EVP_PKEY_CTX *ctx, uint64_t n); - -int EVP_PKEY_CTX_set_scrypt_r(EVP_PKEY_CTX *ctx, uint64_t r); - -int EVP_PKEY_CTX_set_scrypt_p(EVP_PKEY_CTX *ctx, uint64_t p); - -int EVP_PKEY_CTX_set_scrypt_maxmem_bytes(EVP_PKEY_CTX *ctx, - uint64_t maxmem_bytes); - - -# 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 deleted file mode 100644 index 963d766d..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/kdferr.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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_KDFERR_H -# define OPENSSL_KDFERR_H -# pragma once - -#include - -#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 deleted file mode 100644 index 8af9edd2..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h +++ /dev/null @@ -1,331 +0,0 @@ -/* - * 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 - */ - - - -/* - * 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) - -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)) - - -#ifdef __cplusplus -} -#endif - -#endif 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 deleted file mode 100644 index c9dbd1f3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h.in +++ /dev/null @@ -1,306 +0,0 @@ -/* - * 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 - */ - -{- -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 deleted file mode 100644 index e9ef9387..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/macros.h +++ /dev/null @@ -1,326 +0,0 @@ -/* - * 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_DEPRECATEDIN_{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_1 -# 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 deleted file mode 100644 index 5d4cb77e..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md2.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# endif - -# define MD2_DIGEST_LENGTH 16 - -# if !defined(OPENSSL_NO_DEPRECATED_3_0) - -typedef unsigned char MD2_INT; - -# define MD2_BLOCK 16 - -typedef struct MD2state_st { - unsigned int num; - unsigned char data[MD2_BLOCK]; - 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 6c150a6c..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md4.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# 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_CBLOCK 64 -# define MD4_LBLOCK (MD4_CBLOCK/4) - -typedef struct MD4state_st { - MD4_LONG A, B, C, D; - MD4_LONG Nl, Nh; - 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 77a57734..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/md5.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# 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_CBLOCK 64 -# define MD5_LBLOCK (MD5_CBLOCK/4) - -typedef struct MD5state_st { - MD5_LONG A, B, C, D; - MD5_LONG Nl, Nh; - 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 5a7ee289..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/mdc2.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# endif - -# 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; - 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index e1907991..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/modes.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_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" { -# endif -typedef void (*block128_f) (const unsigned char in[16], - unsigned char out[16], const void *key); - -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]); - -typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out, - size_t blocks, const void *key, - const unsigned char ivec[16], - unsigned char cmac[16]); - -void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], block128_f block); -void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], block128_f block); - -void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], - unsigned char ecount_buf[16], unsigned int *num, - block128_f block); - -void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], - unsigned char ecount_buf[16], - unsigned int *num, ctr128_f ctr); - -void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int *num, - block128_f block); - -void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); -void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); -void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, - size_t bits, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); - -size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, unsigned char ivec[16], - block128_f block); -size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); -size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, unsigned char ivec[16], - block128_f block); -size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); - -size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, - unsigned char ivec[16], - block128_f block); -size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); -size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, - unsigned char ivec[16], - block128_f block); -size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); - -typedef struct gcm128_context GCM128_CONTEXT; - -GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); -void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block); -void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, - size_t len); -int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, - size_t len); -int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len); -int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len); -int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len, ctr128_f stream); -int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len, ctr128_f stream); -int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, - size_t len); -void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); -void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); - -typedef struct ccm128_context CCM128_CONTEXT; - -void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, - unsigned int M, unsigned int L, void *key, - block128_f block); -int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce, - size_t nlen, size_t mlen); -void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad, - size_t alen); -int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len); -int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len); -int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len, - ccm128_f stream); -int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len, - ccm128_f stream); -size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); - -typedef struct xts128_context XTS128_CONTEXT; - -int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, - const unsigned char iv[16], - const unsigned char *inp, unsigned char *out, - size_t len, int enc); - -size_t CRYPTO_128_wrap(void *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, size_t inlen, - block128_f block); - -size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, size_t inlen, - block128_f block); -size_t CRYPTO_128_wrap_pad(void *key, const unsigned char *icv, - unsigned char *out, const unsigned char *in, - size_t inlen, block128_f block); -size_t CRYPTO_128_unwrap_pad(void *key, const unsigned char *icv, - unsigned char *out, const unsigned char *in, - size_t inlen, block128_f block); - -# ifndef OPENSSL_NO_OCB -typedef struct ocb128_context OCB128_CONTEXT; - -typedef void (*ocb128_f) (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]); - -OCB128_CONTEXT *CRYPTO_ocb128_new(void *keyenc, void *keydec, - block128_f encrypt, block128_f decrypt, - ocb128_f stream); -int CRYPTO_ocb128_init(OCB128_CONTEXT *ctx, void *keyenc, void *keydec, - block128_f encrypt, block128_f decrypt, - ocb128_f stream); -int CRYPTO_ocb128_copy_ctx(OCB128_CONTEXT *dest, OCB128_CONTEXT *src, - void *keyenc, void *keydec); -int CRYPTO_ocb128_setiv(OCB128_CONTEXT *ctx, const unsigned char *iv, - size_t len, size_t taglen); -int CRYPTO_ocb128_aad(OCB128_CONTEXT *ctx, const unsigned char *aad, - size_t len); -int CRYPTO_ocb128_encrypt(OCB128_CONTEXT *ctx, const unsigned char *in, - unsigned char *out, size_t len); -int CRYPTO_ocb128_decrypt(OCB128_CONTEXT *ctx, const unsigned char *in, - unsigned char *out, size_t len); -int CRYPTO_ocb128_finish(OCB128_CONTEXT *ctx, const unsigned char *tag, - size_t len); -int CRYPTO_ocb128_tag(OCB128_CONTEXT *ctx, unsigned char *tag, size_t len); -void CRYPTO_ocb128_cleanup(OCB128_CONTEXT *ctx); -# endif /* OPENSSL_NO_OCB */ - -# ifdef __cplusplus -} -# endif - -#endif 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 deleted file mode 100644 index e1b441b3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h +++ /dev/null @@ -1,5802 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by crypto/objects/objects.pl - * - * Copyright 2000-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_OBJ_MAC_H -# define OPENSSL_OBJ_MAC_H -# pragma once - -#define SN_undef "UNDEF" -#define LN_undef "undefined" -#define NID_undef 0 -#define OBJ_undef 0L - -#define SN_itu_t "ITU-T" -#define LN_itu_t "itu-t" -#define NID_itu_t 645 -#define OBJ_itu_t 0L - -#define NID_ccitt 404 -#define OBJ_ccitt OBJ_itu_t - -#define SN_iso "ISO" -#define LN_iso "iso" -#define NID_iso 181 -#define OBJ_iso 1L - -#define SN_joint_iso_itu_t "JOINT-ISO-ITU-T" -#define LN_joint_iso_itu_t "joint-iso-itu-t" -#define NID_joint_iso_itu_t 646 -#define OBJ_joint_iso_itu_t 2L - -#define NID_joint_iso_ccitt 393 -#define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t - -#define SN_member_body "member-body" -#define LN_member_body "ISO Member Body" -#define NID_member_body 182 -#define OBJ_member_body OBJ_iso,2L - -#define SN_identified_organization "identified-organization" -#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 -#define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L - -#define SN_hmac_sha1 "HMAC-SHA1" -#define LN_hmac_sha1 "hmac-sha1" -#define NID_hmac_sha1 781 -#define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L - -#define SN_x509ExtAdmission "x509ExtAdmission" -#define LN_x509ExtAdmission "Professional Information or basis for Admission" -#define NID_x509ExtAdmission 1093 -#define OBJ_x509ExtAdmission OBJ_identified_organization,36L,8L,3L,3L - -#define SN_certicom_arc "certicom-arc" -#define NID_certicom_arc 677 -#define OBJ_certicom_arc OBJ_identified_organization,132L - -#define SN_ieee "ieee" -#define NID_ieee 1170 -#define OBJ_ieee OBJ_identified_organization,111L - -#define SN_ieee_siswg "ieee-siswg" -#define LN_ieee_siswg "IEEE Security in Storage Working Group" -#define NID_ieee_siswg 1171 -#define OBJ_ieee_siswg OBJ_ieee,2L,1619L - -#define SN_international_organizations "international-organizations" -#define LN_international_organizations "International Organizations" -#define NID_international_organizations 647 -#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L - -#define SN_wap "wap" -#define NID_wap 678 -#define OBJ_wap OBJ_international_organizations,43L - -#define SN_wap_wsg "wap-wsg" -#define NID_wap_wsg 679 -#define OBJ_wap_wsg OBJ_wap,1L - -#define SN_selected_attribute_types "selected-attribute-types" -#define LN_selected_attribute_types "Selected Attribute Types" -#define NID_selected_attribute_types 394 -#define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L - -#define SN_clearance "clearance" -#define NID_clearance 395 -#define OBJ_clearance OBJ_selected_attribute_types,55L - -#define SN_ISO_US "ISO-US" -#define LN_ISO_US "ISO US Member Body" -#define NID_ISO_US 183 -#define OBJ_ISO_US OBJ_member_body,840L - -#define SN_X9_57 "X9-57" -#define LN_X9_57 "X9.57" -#define NID_X9_57 184 -#define OBJ_X9_57 OBJ_ISO_US,10040L - -#define SN_X9cm "X9cm" -#define LN_X9cm "X9.57 CM ?" -#define NID_X9cm 185 -#define OBJ_X9cm OBJ_X9_57,4L - -#define SN_ISO_CN "ISO-CN" -#define LN_ISO_CN "ISO CN Member Body" -#define NID_ISO_CN 1140 -#define OBJ_ISO_CN OBJ_member_body,156L - -#define SN_oscca "oscca" -#define NID_oscca 1141 -#define OBJ_oscca OBJ_ISO_CN,10197L - -#define SN_sm_scheme "sm-scheme" -#define NID_sm_scheme 1142 -#define OBJ_sm_scheme OBJ_oscca,1L - -#define SN_dsa "DSA" -#define LN_dsa "dsaEncryption" -#define NID_dsa 116 -#define OBJ_dsa OBJ_X9cm,1L - -#define SN_dsaWithSHA1 "DSA-SHA1" -#define LN_dsaWithSHA1 "dsaWithSHA1" -#define NID_dsaWithSHA1 113 -#define OBJ_dsaWithSHA1 OBJ_X9cm,3L - -#define SN_ansi_X9_62 "ansi-X9-62" -#define LN_ansi_X9_62 "ANSI X9.62" -#define NID_ansi_X9_62 405 -#define OBJ_ansi_X9_62 OBJ_ISO_US,10045L - -#define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L - -#define SN_X9_62_prime_field "prime-field" -#define NID_X9_62_prime_field 406 -#define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L - -#define SN_X9_62_characteristic_two_field "characteristic-two-field" -#define NID_X9_62_characteristic_two_field 407 -#define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L - -#define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis" -#define NID_X9_62_id_characteristic_two_basis 680 -#define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L - -#define SN_X9_62_onBasis "onBasis" -#define NID_X9_62_onBasis 681 -#define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L - -#define SN_X9_62_tpBasis "tpBasis" -#define NID_X9_62_tpBasis 682 -#define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L - -#define SN_X9_62_ppBasis "ppBasis" -#define NID_X9_62_ppBasis 683 -#define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L - -#define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L - -#define SN_X9_62_id_ecPublicKey "id-ecPublicKey" -#define NID_X9_62_id_ecPublicKey 408 -#define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L - -#define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L - -#define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L - -#define SN_X9_62_c2pnb163v1 "c2pnb163v1" -#define NID_X9_62_c2pnb163v1 684 -#define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L - -#define SN_X9_62_c2pnb163v2 "c2pnb163v2" -#define NID_X9_62_c2pnb163v2 685 -#define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L - -#define SN_X9_62_c2pnb163v3 "c2pnb163v3" -#define NID_X9_62_c2pnb163v3 686 -#define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L - -#define SN_X9_62_c2pnb176v1 "c2pnb176v1" -#define NID_X9_62_c2pnb176v1 687 -#define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L - -#define SN_X9_62_c2tnb191v1 "c2tnb191v1" -#define NID_X9_62_c2tnb191v1 688 -#define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L - -#define SN_X9_62_c2tnb191v2 "c2tnb191v2" -#define NID_X9_62_c2tnb191v2 689 -#define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L - -#define SN_X9_62_c2tnb191v3 "c2tnb191v3" -#define NID_X9_62_c2tnb191v3 690 -#define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L - -#define SN_X9_62_c2onb191v4 "c2onb191v4" -#define NID_X9_62_c2onb191v4 691 -#define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L - -#define SN_X9_62_c2onb191v5 "c2onb191v5" -#define NID_X9_62_c2onb191v5 692 -#define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L - -#define SN_X9_62_c2pnb208w1 "c2pnb208w1" -#define NID_X9_62_c2pnb208w1 693 -#define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L - -#define SN_X9_62_c2tnb239v1 "c2tnb239v1" -#define NID_X9_62_c2tnb239v1 694 -#define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L - -#define SN_X9_62_c2tnb239v2 "c2tnb239v2" -#define NID_X9_62_c2tnb239v2 695 -#define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L - -#define SN_X9_62_c2tnb239v3 "c2tnb239v3" -#define NID_X9_62_c2tnb239v3 696 -#define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L - -#define SN_X9_62_c2onb239v4 "c2onb239v4" -#define NID_X9_62_c2onb239v4 697 -#define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L - -#define SN_X9_62_c2onb239v5 "c2onb239v5" -#define NID_X9_62_c2onb239v5 698 -#define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L - -#define SN_X9_62_c2pnb272w1 "c2pnb272w1" -#define NID_X9_62_c2pnb272w1 699 -#define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L - -#define SN_X9_62_c2pnb304w1 "c2pnb304w1" -#define NID_X9_62_c2pnb304w1 700 -#define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L - -#define SN_X9_62_c2tnb359v1 "c2tnb359v1" -#define NID_X9_62_c2tnb359v1 701 -#define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L - -#define SN_X9_62_c2pnb368w1 "c2pnb368w1" -#define NID_X9_62_c2pnb368w1 702 -#define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L - -#define SN_X9_62_c2tnb431r1 "c2tnb431r1" -#define NID_X9_62_c2tnb431r1 703 -#define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L - -#define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L - -#define SN_X9_62_prime192v1 "prime192v1" -#define NID_X9_62_prime192v1 409 -#define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L - -#define SN_X9_62_prime192v2 "prime192v2" -#define NID_X9_62_prime192v2 410 -#define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L - -#define SN_X9_62_prime192v3 "prime192v3" -#define NID_X9_62_prime192v3 411 -#define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L - -#define SN_X9_62_prime239v1 "prime239v1" -#define NID_X9_62_prime239v1 412 -#define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L - -#define SN_X9_62_prime239v2 "prime239v2" -#define NID_X9_62_prime239v2 413 -#define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L - -#define SN_X9_62_prime239v3 "prime239v3" -#define NID_X9_62_prime239v3 414 -#define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L - -#define SN_X9_62_prime256v1 "prime256v1" -#define NID_X9_62_prime256v1 415 -#define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L - -#define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L - -#define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1" -#define NID_ecdsa_with_SHA1 416 -#define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L - -#define SN_ecdsa_with_Recommended "ecdsa-with-Recommended" -#define NID_ecdsa_with_Recommended 791 -#define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L - -#define SN_ecdsa_with_Specified "ecdsa-with-Specified" -#define NID_ecdsa_with_Specified 792 -#define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L - -#define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224" -#define NID_ecdsa_with_SHA224 793 -#define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L - -#define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256" -#define NID_ecdsa_with_SHA256 794 -#define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L - -#define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384" -#define NID_ecdsa_with_SHA384 795 -#define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L - -#define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512" -#define NID_ecdsa_with_SHA512 796 -#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L - -#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L - -#define SN_secp112r1 "secp112r1" -#define NID_secp112r1 704 -#define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L - -#define SN_secp112r2 "secp112r2" -#define NID_secp112r2 705 -#define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L - -#define SN_secp128r1 "secp128r1" -#define NID_secp128r1 706 -#define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L - -#define SN_secp128r2 "secp128r2" -#define NID_secp128r2 707 -#define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L - -#define SN_secp160k1 "secp160k1" -#define NID_secp160k1 708 -#define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L - -#define SN_secp160r1 "secp160r1" -#define NID_secp160r1 709 -#define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L - -#define SN_secp160r2 "secp160r2" -#define NID_secp160r2 710 -#define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L - -#define SN_secp192k1 "secp192k1" -#define NID_secp192k1 711 -#define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L - -#define SN_secp224k1 "secp224k1" -#define NID_secp224k1 712 -#define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L - -#define SN_secp224r1 "secp224r1" -#define NID_secp224r1 713 -#define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L - -#define SN_secp256k1 "secp256k1" -#define NID_secp256k1 714 -#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L - -#define SN_secp384r1 "secp384r1" -#define NID_secp384r1 715 -#define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L - -#define SN_secp521r1 "secp521r1" -#define NID_secp521r1 716 -#define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L - -#define SN_sect113r1 "sect113r1" -#define NID_sect113r1 717 -#define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L - -#define SN_sect113r2 "sect113r2" -#define NID_sect113r2 718 -#define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L - -#define SN_sect131r1 "sect131r1" -#define NID_sect131r1 719 -#define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L - -#define SN_sect131r2 "sect131r2" -#define NID_sect131r2 720 -#define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L - -#define SN_sect163k1 "sect163k1" -#define NID_sect163k1 721 -#define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L - -#define SN_sect163r1 "sect163r1" -#define NID_sect163r1 722 -#define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L - -#define SN_sect163r2 "sect163r2" -#define NID_sect163r2 723 -#define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L - -#define SN_sect193r1 "sect193r1" -#define NID_sect193r1 724 -#define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L - -#define SN_sect193r2 "sect193r2" -#define NID_sect193r2 725 -#define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L - -#define SN_sect233k1 "sect233k1" -#define NID_sect233k1 726 -#define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L - -#define SN_sect233r1 "sect233r1" -#define NID_sect233r1 727 -#define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L - -#define SN_sect239k1 "sect239k1" -#define NID_sect239k1 728 -#define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L - -#define SN_sect283k1 "sect283k1" -#define NID_sect283k1 729 -#define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L - -#define SN_sect283r1 "sect283r1" -#define NID_sect283r1 730 -#define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L - -#define SN_sect409k1 "sect409k1" -#define NID_sect409k1 731 -#define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L - -#define SN_sect409r1 "sect409r1" -#define NID_sect409r1 732 -#define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L - -#define SN_sect571k1 "sect571k1" -#define NID_sect571k1 733 -#define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L - -#define SN_sect571r1 "sect571r1" -#define NID_sect571r1 734 -#define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L - -#define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L - -#define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1" -#define NID_wap_wsg_idm_ecid_wtls1 735 -#define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L - -#define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3" -#define NID_wap_wsg_idm_ecid_wtls3 736 -#define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L - -#define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4" -#define NID_wap_wsg_idm_ecid_wtls4 737 -#define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L - -#define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5" -#define NID_wap_wsg_idm_ecid_wtls5 738 -#define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L - -#define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6" -#define NID_wap_wsg_idm_ecid_wtls6 739 -#define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L - -#define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7" -#define NID_wap_wsg_idm_ecid_wtls7 740 -#define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L - -#define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8" -#define NID_wap_wsg_idm_ecid_wtls8 741 -#define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L - -#define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9" -#define NID_wap_wsg_idm_ecid_wtls9 742 -#define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L - -#define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10" -#define NID_wap_wsg_idm_ecid_wtls10 743 -#define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L - -#define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11" -#define NID_wap_wsg_idm_ecid_wtls11 744 -#define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L - -#define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12" -#define NID_wap_wsg_idm_ecid_wtls12 745 -#define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L - -#define SN_cast5_cbc "CAST5-CBC" -#define LN_cast5_cbc "cast5-cbc" -#define NID_cast5_cbc 108 -#define OBJ_cast5_cbc OBJ_ISO_US,113533L,7L,66L,10L - -#define SN_cast5_ecb "CAST5-ECB" -#define LN_cast5_ecb "cast5-ecb" -#define NID_cast5_ecb 109 - -#define SN_cast5_cfb64 "CAST5-CFB" -#define LN_cast5_cfb64 "cast5-cfb" -#define NID_cast5_cfb64 110 - -#define SN_cast5_ofb64 "CAST5-OFB" -#define LN_cast5_ofb64 "cast5-ofb" -#define NID_cast5_ofb64 111 - -#define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" -#define NID_pbeWithMD5AndCast5_CBC 112 -#define OBJ_pbeWithMD5AndCast5_CBC OBJ_ISO_US,113533L,7L,66L,12L - -#define SN_id_PasswordBasedMAC "id-PasswordBasedMAC" -#define LN_id_PasswordBasedMAC "password based MAC" -#define NID_id_PasswordBasedMAC 782 -#define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L - -#define SN_id_DHBasedMac "id-DHBasedMac" -#define LN_id_DHBasedMac "Diffie-Hellman based MAC" -#define NID_id_DHBasedMac 783 -#define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L - -#define SN_rsadsi "rsadsi" -#define LN_rsadsi "RSA Data Security, Inc." -#define NID_rsadsi 1 -#define OBJ_rsadsi OBJ_ISO_US,113549L - -#define SN_pkcs "pkcs" -#define LN_pkcs "RSA Data Security, Inc. PKCS" -#define NID_pkcs 2 -#define OBJ_pkcs OBJ_rsadsi,1L - -#define SN_pkcs1 "pkcs1" -#define NID_pkcs1 186 -#define OBJ_pkcs1 OBJ_pkcs,1L - -#define LN_rsaEncryption "rsaEncryption" -#define NID_rsaEncryption 6 -#define OBJ_rsaEncryption OBJ_pkcs1,1L - -#define SN_md2WithRSAEncryption "RSA-MD2" -#define LN_md2WithRSAEncryption "md2WithRSAEncryption" -#define NID_md2WithRSAEncryption 7 -#define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L - -#define SN_md4WithRSAEncryption "RSA-MD4" -#define LN_md4WithRSAEncryption "md4WithRSAEncryption" -#define NID_md4WithRSAEncryption 396 -#define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L - -#define SN_md5WithRSAEncryption "RSA-MD5" -#define LN_md5WithRSAEncryption "md5WithRSAEncryption" -#define NID_md5WithRSAEncryption 8 -#define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L - -#define SN_sha1WithRSAEncryption "RSA-SHA1" -#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" -#define NID_sha1WithRSAEncryption 65 -#define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L - -#define SN_rsaesOaep "RSAES-OAEP" -#define LN_rsaesOaep "rsaesOaep" -#define NID_rsaesOaep 919 -#define OBJ_rsaesOaep OBJ_pkcs1,7L - -#define SN_mgf1 "MGF1" -#define LN_mgf1 "mgf1" -#define NID_mgf1 911 -#define OBJ_mgf1 OBJ_pkcs1,8L - -#define SN_pSpecified "PSPECIFIED" -#define LN_pSpecified "pSpecified" -#define NID_pSpecified 935 -#define OBJ_pSpecified OBJ_pkcs1,9L - -#define SN_rsassaPss "RSASSA-PSS" -#define LN_rsassaPss "rsassaPss" -#define NID_rsassaPss 912 -#define OBJ_rsassaPss OBJ_pkcs1,10L - -#define SN_sha256WithRSAEncryption "RSA-SHA256" -#define LN_sha256WithRSAEncryption "sha256WithRSAEncryption" -#define NID_sha256WithRSAEncryption 668 -#define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L - -#define SN_sha384WithRSAEncryption "RSA-SHA384" -#define LN_sha384WithRSAEncryption "sha384WithRSAEncryption" -#define NID_sha384WithRSAEncryption 669 -#define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L - -#define SN_sha512WithRSAEncryption "RSA-SHA512" -#define LN_sha512WithRSAEncryption "sha512WithRSAEncryption" -#define NID_sha512WithRSAEncryption 670 -#define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L - -#define SN_sha224WithRSAEncryption "RSA-SHA224" -#define LN_sha224WithRSAEncryption "sha224WithRSAEncryption" -#define NID_sha224WithRSAEncryption 671 -#define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L - -#define SN_sha512_224WithRSAEncryption "RSA-SHA512/224" -#define LN_sha512_224WithRSAEncryption "sha512-224WithRSAEncryption" -#define NID_sha512_224WithRSAEncryption 1145 -#define OBJ_sha512_224WithRSAEncryption OBJ_pkcs1,15L - -#define SN_sha512_256WithRSAEncryption "RSA-SHA512/256" -#define LN_sha512_256WithRSAEncryption "sha512-256WithRSAEncryption" -#define NID_sha512_256WithRSAEncryption 1146 -#define OBJ_sha512_256WithRSAEncryption OBJ_pkcs1,16L - -#define SN_pkcs3 "pkcs3" -#define NID_pkcs3 27 -#define OBJ_pkcs3 OBJ_pkcs,3L - -#define LN_dhKeyAgreement "dhKeyAgreement" -#define NID_dhKeyAgreement 28 -#define OBJ_dhKeyAgreement OBJ_pkcs3,1L - -#define SN_pkcs5 "pkcs5" -#define NID_pkcs5 187 -#define OBJ_pkcs5 OBJ_pkcs,5L - -#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" -#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" -#define NID_pbeWithMD2AndDES_CBC 9 -#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L - -#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" -#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" -#define NID_pbeWithMD5AndDES_CBC 10 -#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L - -#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" -#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" -#define NID_pbeWithMD2AndRC2_CBC 168 -#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,4L - -#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" -#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" -#define NID_pbeWithMD5AndRC2_CBC 169 -#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs5,6L - -#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" -#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" -#define NID_pbeWithSHA1AndDES_CBC 170 -#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L - -#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" -#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" -#define NID_pbeWithSHA1AndRC2_CBC 68 -#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L - -#define LN_id_pbkdf2 "PBKDF2" -#define NID_id_pbkdf2 69 -#define OBJ_id_pbkdf2 OBJ_pkcs5,12L - -#define LN_pbes2 "PBES2" -#define NID_pbes2 161 -#define OBJ_pbes2 OBJ_pkcs5,13L - -#define LN_pbmac1 "PBMAC1" -#define NID_pbmac1 162 -#define OBJ_pbmac1 OBJ_pkcs5,14L - -#define SN_pkcs7 "pkcs7" -#define NID_pkcs7 20 -#define OBJ_pkcs7 OBJ_pkcs,7L - -#define LN_pkcs7_data "pkcs7-data" -#define NID_pkcs7_data 21 -#define OBJ_pkcs7_data OBJ_pkcs7,1L - -#define LN_pkcs7_signed "pkcs7-signedData" -#define NID_pkcs7_signed 22 -#define OBJ_pkcs7_signed OBJ_pkcs7,2L - -#define LN_pkcs7_enveloped "pkcs7-envelopedData" -#define NID_pkcs7_enveloped 23 -#define OBJ_pkcs7_enveloped OBJ_pkcs7,3L - -#define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" -#define NID_pkcs7_signedAndEnveloped 24 -#define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L - -#define LN_pkcs7_digest "pkcs7-digestData" -#define NID_pkcs7_digest 25 -#define OBJ_pkcs7_digest OBJ_pkcs7,5L - -#define LN_pkcs7_encrypted "pkcs7-encryptedData" -#define NID_pkcs7_encrypted 26 -#define OBJ_pkcs7_encrypted OBJ_pkcs7,6L - -#define SN_pkcs9 "pkcs9" -#define NID_pkcs9 47 -#define OBJ_pkcs9 OBJ_pkcs,9L - -#define LN_pkcs9_emailAddress "emailAddress" -#define NID_pkcs9_emailAddress 48 -#define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L - -#define LN_pkcs9_unstructuredName "unstructuredName" -#define NID_pkcs9_unstructuredName 49 -#define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L - -#define LN_pkcs9_contentType "contentType" -#define NID_pkcs9_contentType 50 -#define OBJ_pkcs9_contentType OBJ_pkcs9,3L - -#define LN_pkcs9_messageDigest "messageDigest" -#define NID_pkcs9_messageDigest 51 -#define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L - -#define LN_pkcs9_signingTime "signingTime" -#define NID_pkcs9_signingTime 52 -#define OBJ_pkcs9_signingTime OBJ_pkcs9,5L - -#define LN_pkcs9_countersignature "countersignature" -#define NID_pkcs9_countersignature 53 -#define OBJ_pkcs9_countersignature OBJ_pkcs9,6L - -#define LN_pkcs9_challengePassword "challengePassword" -#define NID_pkcs9_challengePassword 54 -#define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L - -#define LN_pkcs9_unstructuredAddress "unstructuredAddress" -#define NID_pkcs9_unstructuredAddress 55 -#define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L - -#define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" -#define NID_pkcs9_extCertAttributes 56 -#define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L - -#define SN_ext_req "extReq" -#define LN_ext_req "Extension Request" -#define NID_ext_req 172 -#define OBJ_ext_req OBJ_pkcs9,14L - -#define SN_SMIMECapabilities "SMIME-CAPS" -#define LN_SMIMECapabilities "S/MIME Capabilities" -#define NID_SMIMECapabilities 167 -#define OBJ_SMIMECapabilities OBJ_pkcs9,15L - -#define SN_SMIME "SMIME" -#define LN_SMIME "S/MIME" -#define NID_SMIME 188 -#define OBJ_SMIME OBJ_pkcs9,16L - -#define SN_id_smime_mod "id-smime-mod" -#define NID_id_smime_mod 189 -#define OBJ_id_smime_mod OBJ_SMIME,0L - -#define SN_id_smime_ct "id-smime-ct" -#define NID_id_smime_ct 190 -#define OBJ_id_smime_ct OBJ_SMIME,1L - -#define SN_id_smime_aa "id-smime-aa" -#define NID_id_smime_aa 191 -#define OBJ_id_smime_aa OBJ_SMIME,2L - -#define SN_id_smime_alg "id-smime-alg" -#define NID_id_smime_alg 192 -#define OBJ_id_smime_alg OBJ_SMIME,3L - -#define SN_id_smime_cd "id-smime-cd" -#define NID_id_smime_cd 193 -#define OBJ_id_smime_cd OBJ_SMIME,4L - -#define SN_id_smime_spq "id-smime-spq" -#define NID_id_smime_spq 194 -#define OBJ_id_smime_spq OBJ_SMIME,5L - -#define SN_id_smime_cti "id-smime-cti" -#define NID_id_smime_cti 195 -#define OBJ_id_smime_cti OBJ_SMIME,6L - -#define SN_id_smime_mod_cms "id-smime-mod-cms" -#define NID_id_smime_mod_cms 196 -#define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L - -#define SN_id_smime_mod_ess "id-smime-mod-ess" -#define NID_id_smime_mod_ess 197 -#define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L - -#define SN_id_smime_mod_oid "id-smime-mod-oid" -#define NID_id_smime_mod_oid 198 -#define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L - -#define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3" -#define NID_id_smime_mod_msg_v3 199 -#define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L - -#define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88" -#define NID_id_smime_mod_ets_eSignature_88 200 -#define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L - -#define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97" -#define NID_id_smime_mod_ets_eSignature_97 201 -#define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L - -#define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88" -#define NID_id_smime_mod_ets_eSigPolicy_88 202 -#define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L - -#define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97" -#define NID_id_smime_mod_ets_eSigPolicy_97 203 -#define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L - -#define SN_id_smime_ct_receipt "id-smime-ct-receipt" -#define NID_id_smime_ct_receipt 204 -#define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L - -#define SN_id_smime_ct_authData "id-smime-ct-authData" -#define NID_id_smime_ct_authData 205 -#define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L - -#define SN_id_smime_ct_publishCert "id-smime-ct-publishCert" -#define NID_id_smime_ct_publishCert 206 -#define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L - -#define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo" -#define NID_id_smime_ct_TSTInfo 207 -#define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L - -#define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo" -#define NID_id_smime_ct_TDTInfo 208 -#define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L - -#define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo" -#define NID_id_smime_ct_contentInfo 209 -#define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L - -#define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData" -#define NID_id_smime_ct_DVCSRequestData 210 -#define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L - -#define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData" -#define NID_id_smime_ct_DVCSResponseData 211 -#define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L - -#define SN_id_smime_ct_compressedData "id-smime-ct-compressedData" -#define NID_id_smime_ct_compressedData 786 -#define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L - -#define SN_id_smime_ct_contentCollection "id-smime-ct-contentCollection" -#define NID_id_smime_ct_contentCollection 1058 -#define OBJ_id_smime_ct_contentCollection OBJ_id_smime_ct,19L - -#define SN_id_smime_ct_authEnvelopedData "id-smime-ct-authEnvelopedData" -#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 - -#define SN_id_ct_xml "id-ct-xml" -#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_ct_ASPA "id-ct-ASPA" -#define NID_id_ct_ASPA 1250 -#define OBJ_id_ct_ASPA OBJ_id_smime_ct,49L - -#define SN_id_ct_signedTAL "id-ct-signedTAL" -#define NID_id_ct_signedTAL 1284 -#define OBJ_id_ct_signedTAL OBJ_id_smime_ct,50L - -#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 - -#define SN_id_smime_aa_securityLabel "id-smime-aa-securityLabel" -#define NID_id_smime_aa_securityLabel 213 -#define OBJ_id_smime_aa_securityLabel OBJ_id_smime_aa,2L - -#define SN_id_smime_aa_mlExpandHistory "id-smime-aa-mlExpandHistory" -#define NID_id_smime_aa_mlExpandHistory 214 -#define OBJ_id_smime_aa_mlExpandHistory OBJ_id_smime_aa,3L - -#define SN_id_smime_aa_contentHint "id-smime-aa-contentHint" -#define NID_id_smime_aa_contentHint 215 -#define OBJ_id_smime_aa_contentHint OBJ_id_smime_aa,4L - -#define SN_id_smime_aa_msgSigDigest "id-smime-aa-msgSigDigest" -#define NID_id_smime_aa_msgSigDigest 216 -#define OBJ_id_smime_aa_msgSigDigest OBJ_id_smime_aa,5L - -#define SN_id_smime_aa_encapContentType "id-smime-aa-encapContentType" -#define NID_id_smime_aa_encapContentType 217 -#define OBJ_id_smime_aa_encapContentType OBJ_id_smime_aa,6L - -#define SN_id_smime_aa_contentIdentifier "id-smime-aa-contentIdentifier" -#define NID_id_smime_aa_contentIdentifier 218 -#define OBJ_id_smime_aa_contentIdentifier OBJ_id_smime_aa,7L - -#define SN_id_smime_aa_macValue "id-smime-aa-macValue" -#define NID_id_smime_aa_macValue 219 -#define OBJ_id_smime_aa_macValue OBJ_id_smime_aa,8L - -#define SN_id_smime_aa_equivalentLabels "id-smime-aa-equivalentLabels" -#define NID_id_smime_aa_equivalentLabels 220 -#define OBJ_id_smime_aa_equivalentLabels OBJ_id_smime_aa,9L - -#define SN_id_smime_aa_contentReference "id-smime-aa-contentReference" -#define NID_id_smime_aa_contentReference 221 -#define OBJ_id_smime_aa_contentReference OBJ_id_smime_aa,10L - -#define SN_id_smime_aa_encrypKeyPref "id-smime-aa-encrypKeyPref" -#define NID_id_smime_aa_encrypKeyPref 222 -#define OBJ_id_smime_aa_encrypKeyPref OBJ_id_smime_aa,11L - -#define SN_id_smime_aa_signingCertificate "id-smime-aa-signingCertificate" -#define NID_id_smime_aa_signingCertificate 223 -#define OBJ_id_smime_aa_signingCertificate OBJ_id_smime_aa,12L - -#define SN_id_smime_aa_smimeEncryptCerts "id-smime-aa-smimeEncryptCerts" -#define NID_id_smime_aa_smimeEncryptCerts 224 -#define OBJ_id_smime_aa_smimeEncryptCerts OBJ_id_smime_aa,13L - -#define SN_id_smime_aa_timeStampToken "id-smime-aa-timeStampToken" -#define NID_id_smime_aa_timeStampToken 225 -#define OBJ_id_smime_aa_timeStampToken OBJ_id_smime_aa,14L - -#define SN_id_smime_aa_ets_sigPolicyId "id-smime-aa-ets-sigPolicyId" -#define NID_id_smime_aa_ets_sigPolicyId 226 -#define OBJ_id_smime_aa_ets_sigPolicyId OBJ_id_smime_aa,15L - -#define SN_id_smime_aa_ets_commitmentType "id-smime-aa-ets-commitmentType" -#define NID_id_smime_aa_ets_commitmentType 227 -#define OBJ_id_smime_aa_ets_commitmentType OBJ_id_smime_aa,16L - -#define SN_id_smime_aa_ets_signerLocation "id-smime-aa-ets-signerLocation" -#define NID_id_smime_aa_ets_signerLocation 228 -#define OBJ_id_smime_aa_ets_signerLocation OBJ_id_smime_aa,17L - -#define SN_id_smime_aa_ets_signerAttr "id-smime-aa-ets-signerAttr" -#define NID_id_smime_aa_ets_signerAttr 229 -#define OBJ_id_smime_aa_ets_signerAttr OBJ_id_smime_aa,18L - -#define SN_id_smime_aa_ets_otherSigCert "id-smime-aa-ets-otherSigCert" -#define NID_id_smime_aa_ets_otherSigCert 230 -#define OBJ_id_smime_aa_ets_otherSigCert OBJ_id_smime_aa,19L - -#define SN_id_smime_aa_ets_contentTimestamp "id-smime-aa-ets-contentTimestamp" -#define NID_id_smime_aa_ets_contentTimestamp 231 -#define OBJ_id_smime_aa_ets_contentTimestamp OBJ_id_smime_aa,20L - -#define SN_id_smime_aa_ets_CertificateRefs "id-smime-aa-ets-CertificateRefs" -#define NID_id_smime_aa_ets_CertificateRefs 232 -#define OBJ_id_smime_aa_ets_CertificateRefs OBJ_id_smime_aa,21L - -#define SN_id_smime_aa_ets_RevocationRefs "id-smime-aa-ets-RevocationRefs" -#define NID_id_smime_aa_ets_RevocationRefs 233 -#define OBJ_id_smime_aa_ets_RevocationRefs OBJ_id_smime_aa,22L - -#define SN_id_smime_aa_ets_certValues "id-smime-aa-ets-certValues" -#define NID_id_smime_aa_ets_certValues 234 -#define OBJ_id_smime_aa_ets_certValues OBJ_id_smime_aa,23L - -#define SN_id_smime_aa_ets_revocationValues "id-smime-aa-ets-revocationValues" -#define NID_id_smime_aa_ets_revocationValues 235 -#define OBJ_id_smime_aa_ets_revocationValues OBJ_id_smime_aa,24L - -#define SN_id_smime_aa_ets_escTimeStamp "id-smime-aa-ets-escTimeStamp" -#define NID_id_smime_aa_ets_escTimeStamp 236 -#define OBJ_id_smime_aa_ets_escTimeStamp OBJ_id_smime_aa,25L - -#define SN_id_smime_aa_ets_certCRLTimestamp "id-smime-aa-ets-certCRLTimestamp" -#define NID_id_smime_aa_ets_certCRLTimestamp 237 -#define OBJ_id_smime_aa_ets_certCRLTimestamp OBJ_id_smime_aa,26L - -#define SN_id_smime_aa_ets_archiveTimeStamp "id-smime-aa-ets-archiveTimeStamp" -#define NID_id_smime_aa_ets_archiveTimeStamp 238 -#define OBJ_id_smime_aa_ets_archiveTimeStamp OBJ_id_smime_aa,27L - -#define SN_id_smime_aa_signatureType "id-smime-aa-signatureType" -#define NID_id_smime_aa_signatureType 239 -#define OBJ_id_smime_aa_signatureType OBJ_id_smime_aa,28L - -#define SN_id_smime_aa_dvcs_dvc "id-smime-aa-dvcs-dvc" -#define NID_id_smime_aa_dvcs_dvc 240 -#define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L - -#define SN_id_aa_ets_attrCertificateRefs "id-aa-ets-attrCertificateRefs" -#define NID_id_aa_ets_attrCertificateRefs 1261 -#define OBJ_id_aa_ets_attrCertificateRefs OBJ_id_smime_aa,44L - -#define SN_id_aa_ets_attrRevocationRefs "id-aa-ets-attrRevocationRefs" -#define NID_id_aa_ets_attrRevocationRefs 1262 -#define OBJ_id_aa_ets_attrRevocationRefs OBJ_id_smime_aa,45L - -#define SN_id_smime_aa_signingCertificateV2 "id-smime-aa-signingCertificateV2" -#define NID_id_smime_aa_signingCertificateV2 1086 -#define OBJ_id_smime_aa_signingCertificateV2 OBJ_id_smime_aa,47L - -#define SN_id_aa_ets_archiveTimestampV2 "id-aa-ets-archiveTimestampV2" -#define NID_id_aa_ets_archiveTimestampV2 1280 -#define OBJ_id_aa_ets_archiveTimestampV2 OBJ_id_smime_aa,48L - -#define SN_id_smime_alg_ESDHwith3DES "id-smime-alg-ESDHwith3DES" -#define NID_id_smime_alg_ESDHwith3DES 241 -#define OBJ_id_smime_alg_ESDHwith3DES OBJ_id_smime_alg,1L - -#define SN_id_smime_alg_ESDHwithRC2 "id-smime-alg-ESDHwithRC2" -#define NID_id_smime_alg_ESDHwithRC2 242 -#define OBJ_id_smime_alg_ESDHwithRC2 OBJ_id_smime_alg,2L - -#define SN_id_smime_alg_3DESwrap "id-smime-alg-3DESwrap" -#define NID_id_smime_alg_3DESwrap 243 -#define OBJ_id_smime_alg_3DESwrap OBJ_id_smime_alg,3L - -#define SN_id_smime_alg_RC2wrap "id-smime-alg-RC2wrap" -#define NID_id_smime_alg_RC2wrap 244 -#define OBJ_id_smime_alg_RC2wrap OBJ_id_smime_alg,4L - -#define SN_id_smime_alg_ESDH "id-smime-alg-ESDH" -#define NID_id_smime_alg_ESDH 245 -#define OBJ_id_smime_alg_ESDH OBJ_id_smime_alg,5L - -#define SN_id_smime_alg_CMS3DESwrap "id-smime-alg-CMS3DESwrap" -#define NID_id_smime_alg_CMS3DESwrap 246 -#define OBJ_id_smime_alg_CMS3DESwrap OBJ_id_smime_alg,6L - -#define SN_id_smime_alg_CMSRC2wrap "id-smime-alg-CMSRC2wrap" -#define NID_id_smime_alg_CMSRC2wrap 247 -#define OBJ_id_smime_alg_CMSRC2wrap OBJ_id_smime_alg,7L - -#define SN_id_alg_PWRI_KEK "id-alg-PWRI-KEK" -#define NID_id_alg_PWRI_KEK 893 -#define OBJ_id_alg_PWRI_KEK OBJ_id_smime_alg,9L - -#define SN_id_smime_cd_ldap "id-smime-cd-ldap" -#define NID_id_smime_cd_ldap 248 -#define OBJ_id_smime_cd_ldap OBJ_id_smime_cd,1L - -#define SN_id_smime_spq_ets_sqt_uri "id-smime-spq-ets-sqt-uri" -#define NID_id_smime_spq_ets_sqt_uri 249 -#define OBJ_id_smime_spq_ets_sqt_uri OBJ_id_smime_spq,1L - -#define SN_id_smime_spq_ets_sqt_unotice "id-smime-spq-ets-sqt-unotice" -#define NID_id_smime_spq_ets_sqt_unotice 250 -#define OBJ_id_smime_spq_ets_sqt_unotice OBJ_id_smime_spq,2L - -#define SN_id_smime_cti_ets_proofOfOrigin "id-smime-cti-ets-proofOfOrigin" -#define NID_id_smime_cti_ets_proofOfOrigin 251 -#define OBJ_id_smime_cti_ets_proofOfOrigin OBJ_id_smime_cti,1L - -#define SN_id_smime_cti_ets_proofOfReceipt "id-smime-cti-ets-proofOfReceipt" -#define NID_id_smime_cti_ets_proofOfReceipt 252 -#define OBJ_id_smime_cti_ets_proofOfReceipt OBJ_id_smime_cti,2L - -#define SN_id_smime_cti_ets_proofOfDelivery "id-smime-cti-ets-proofOfDelivery" -#define NID_id_smime_cti_ets_proofOfDelivery 253 -#define OBJ_id_smime_cti_ets_proofOfDelivery OBJ_id_smime_cti,3L - -#define SN_id_smime_cti_ets_proofOfSender "id-smime-cti-ets-proofOfSender" -#define NID_id_smime_cti_ets_proofOfSender 254 -#define OBJ_id_smime_cti_ets_proofOfSender OBJ_id_smime_cti,4L - -#define SN_id_smime_cti_ets_proofOfApproval "id-smime-cti-ets-proofOfApproval" -#define NID_id_smime_cti_ets_proofOfApproval 255 -#define OBJ_id_smime_cti_ets_proofOfApproval OBJ_id_smime_cti,5L - -#define SN_id_smime_cti_ets_proofOfCreation "id-smime-cti-ets-proofOfCreation" -#define NID_id_smime_cti_ets_proofOfCreation 256 -#define OBJ_id_smime_cti_ets_proofOfCreation OBJ_id_smime_cti,6L - -#define LN_friendlyName "friendlyName" -#define NID_friendlyName 156 -#define OBJ_friendlyName OBJ_pkcs9,20L - -#define LN_localKeyID "localKeyID" -#define NID_localKeyID 157 -#define OBJ_localKeyID OBJ_pkcs9,21L - -#define OBJ_ms_corp 1L,3L,6L,1L,4L,1L,311L - -#define SN_ms_csp_name "CSPName" -#define LN_ms_csp_name "Microsoft CSP Name" -#define NID_ms_csp_name 417 -#define OBJ_ms_csp_name OBJ_ms_corp,17L,1L - -#define SN_LocalKeySet "LocalKeySet" -#define LN_LocalKeySet "Microsoft Local Key set" -#define NID_LocalKeySet 856 -#define OBJ_LocalKeySet OBJ_ms_corp,17L,2L - -#define OBJ_certTypes OBJ_pkcs9,22L - -#define LN_x509Certificate "x509Certificate" -#define NID_x509Certificate 158 -#define OBJ_x509Certificate OBJ_certTypes,1L - -#define LN_sdsiCertificate "sdsiCertificate" -#define NID_sdsiCertificate 159 -#define OBJ_sdsiCertificate OBJ_certTypes,2L - -#define OBJ_crlTypes OBJ_pkcs9,23L - -#define LN_x509Crl "x509Crl" -#define NID_x509Crl 160 -#define OBJ_x509Crl OBJ_crlTypes,1L - -#define SN_id_aa_CMSAlgorithmProtection "id-aa-CMSAlgorithmProtection" -#define NID_id_aa_CMSAlgorithmProtection 1263 -#define OBJ_id_aa_CMSAlgorithmProtection OBJ_pkcs9,52L - -#define OBJ_pkcs12 OBJ_pkcs,12L - -#define OBJ_pkcs12_pbeids OBJ_pkcs12,1L - -#define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" -#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" -#define NID_pbe_WithSHA1And128BitRC4 144 -#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids,1L - -#define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" -#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" -#define NID_pbe_WithSHA1And40BitRC4 145 -#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids,2L - -#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" -#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" -#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 -#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids,3L - -#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" -#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" -#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 -#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids,4L - -#define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" -#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" -#define NID_pbe_WithSHA1And128BitRC2_CBC 148 -#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids,5L - -#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" -#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" -#define NID_pbe_WithSHA1And40BitRC2_CBC 149 -#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids,6L - -#define OBJ_pkcs12_Version1 OBJ_pkcs12,10L - -#define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1,1L - -#define LN_keyBag "keyBag" -#define NID_keyBag 150 -#define OBJ_keyBag OBJ_pkcs12_BagIds,1L - -#define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" -#define NID_pkcs8ShroudedKeyBag 151 -#define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds,2L - -#define LN_certBag "certBag" -#define NID_certBag 152 -#define OBJ_certBag OBJ_pkcs12_BagIds,3L - -#define LN_crlBag "crlBag" -#define NID_crlBag 153 -#define OBJ_crlBag OBJ_pkcs12_BagIds,4L - -#define LN_secretBag "secretBag" -#define NID_secretBag 154 -#define OBJ_secretBag OBJ_pkcs12_BagIds,5L - -#define LN_safeContentsBag "safeContentsBag" -#define NID_safeContentsBag 155 -#define OBJ_safeContentsBag OBJ_pkcs12_BagIds,6L - -#define SN_md2 "MD2" -#define LN_md2 "md2" -#define NID_md2 3 -#define OBJ_md2 OBJ_rsadsi,2L,2L - -#define SN_md4 "MD4" -#define LN_md4 "md4" -#define NID_md4 257 -#define OBJ_md4 OBJ_rsadsi,2L,4L - -#define SN_md5 "MD5" -#define LN_md5 "md5" -#define NID_md5 4 -#define OBJ_md5 OBJ_rsadsi,2L,5L - -#define SN_md5_sha1 "MD5-SHA1" -#define LN_md5_sha1 "md5-sha1" -#define NID_md5_sha1 114 - -#define LN_hmacWithMD5 "hmacWithMD5" -#define NID_hmacWithMD5 797 -#define OBJ_hmacWithMD5 OBJ_rsadsi,2L,6L - -#define LN_hmacWithSHA1 "hmacWithSHA1" -#define NID_hmacWithSHA1 163 -#define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L - -#define SN_sm2 "SM2" -#define LN_sm2 "sm2" -#define NID_sm2 1172 -#define OBJ_sm2 OBJ_sm_scheme,301L - -#define SN_sm3 "SM3" -#define LN_sm3 "sm3" -#define NID_sm3 1143 -#define OBJ_sm3 OBJ_sm_scheme,401L - -#define SN_sm3WithRSAEncryption "RSA-SM3" -#define LN_sm3WithRSAEncryption "sm3WithRSAEncryption" -#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_hmacWithSM3 "hmacWithSM3" -#define NID_hmacWithSM3 1281 -#define OBJ_hmacWithSM3 OBJ_sm3,3L,1L - -#define LN_hmacWithSHA224 "hmacWithSHA224" -#define NID_hmacWithSHA224 798 -#define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L - -#define LN_hmacWithSHA256 "hmacWithSHA256" -#define NID_hmacWithSHA256 799 -#define OBJ_hmacWithSHA256 OBJ_rsadsi,2L,9L - -#define LN_hmacWithSHA384 "hmacWithSHA384" -#define NID_hmacWithSHA384 800 -#define OBJ_hmacWithSHA384 OBJ_rsadsi,2L,10L - -#define LN_hmacWithSHA512 "hmacWithSHA512" -#define NID_hmacWithSHA512 801 -#define OBJ_hmacWithSHA512 OBJ_rsadsi,2L,11L - -#define LN_hmacWithSHA512_224 "hmacWithSHA512-224" -#define NID_hmacWithSHA512_224 1193 -#define OBJ_hmacWithSHA512_224 OBJ_rsadsi,2L,12L - -#define LN_hmacWithSHA512_256 "hmacWithSHA512-256" -#define NID_hmacWithSHA512_256 1194 -#define OBJ_hmacWithSHA512_256 OBJ_rsadsi,2L,13L - -#define SN_rc2_cbc "RC2-CBC" -#define LN_rc2_cbc "rc2-cbc" -#define NID_rc2_cbc 37 -#define OBJ_rc2_cbc OBJ_rsadsi,3L,2L - -#define SN_rc2_ecb "RC2-ECB" -#define LN_rc2_ecb "rc2-ecb" -#define NID_rc2_ecb 38 - -#define SN_rc2_cfb64 "RC2-CFB" -#define LN_rc2_cfb64 "rc2-cfb" -#define NID_rc2_cfb64 39 - -#define SN_rc2_ofb64 "RC2-OFB" -#define LN_rc2_ofb64 "rc2-ofb" -#define NID_rc2_ofb64 40 - -#define SN_rc2_40_cbc "RC2-40-CBC" -#define LN_rc2_40_cbc "rc2-40-cbc" -#define NID_rc2_40_cbc 98 - -#define SN_rc2_64_cbc "RC2-64-CBC" -#define LN_rc2_64_cbc "rc2-64-cbc" -#define NID_rc2_64_cbc 166 - -#define SN_rc4 "RC4" -#define LN_rc4 "rc4" -#define NID_rc4 5 -#define OBJ_rc4 OBJ_rsadsi,3L,4L - -#define SN_rc4_40 "RC4-40" -#define LN_rc4_40 "rc4-40" -#define NID_rc4_40 97 - -#define SN_des_ede3_cbc "DES-EDE3-CBC" -#define LN_des_ede3_cbc "des-ede3-cbc" -#define NID_des_ede3_cbc 44 -#define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L - -#define SN_rc5_cbc "RC5-CBC" -#define LN_rc5_cbc "rc5-cbc" -#define NID_rc5_cbc 120 -#define OBJ_rc5_cbc OBJ_rsadsi,3L,8L - -#define SN_rc5_ecb "RC5-ECB" -#define LN_rc5_ecb "rc5-ecb" -#define NID_rc5_ecb 121 - -#define SN_rc5_cfb64 "RC5-CFB" -#define LN_rc5_cfb64 "rc5-cfb" -#define NID_rc5_cfb64 122 - -#define SN_rc5_ofb64 "RC5-OFB" -#define LN_rc5_ofb64 "rc5-ofb" -#define NID_rc5_ofb64 123 - -#define SN_ms_ext_req "msExtReq" -#define LN_ms_ext_req "Microsoft Extension Request" -#define NID_ms_ext_req 171 -#define OBJ_ms_ext_req OBJ_ms_corp,2L,1L,14L - -#define SN_ms_code_ind "msCodeInd" -#define LN_ms_code_ind "Microsoft Individual Code Signing" -#define NID_ms_code_ind 134 -#define OBJ_ms_code_ind OBJ_ms_corp,2L,1L,21L - -#define SN_ms_code_com "msCodeCom" -#define LN_ms_code_com "Microsoft Commercial Code Signing" -#define NID_ms_code_com 135 -#define OBJ_ms_code_com OBJ_ms_corp,2L,1L,22L - -#define SN_ms_ctl_sign "msCTLSign" -#define LN_ms_ctl_sign "Microsoft Trust List Signing" -#define NID_ms_ctl_sign 136 -#define OBJ_ms_ctl_sign OBJ_ms_corp,10L,3L,1L - -#define SN_ms_sgc "msSGC" -#define LN_ms_sgc "Microsoft Server Gated Crypto" -#define NID_ms_sgc 137 -#define OBJ_ms_sgc OBJ_ms_corp,10L,3L,3L - -#define SN_ms_efs "msEFS" -#define LN_ms_efs "Microsoft Encrypted File System" -#define NID_ms_efs 138 -#define OBJ_ms_efs OBJ_ms_corp,10L,3L,4L - -#define SN_ms_smartcard_login "msSmartcardLogin" -#define LN_ms_smartcard_login "Microsoft Smartcard Login" -#define NID_ms_smartcard_login 648 -#define OBJ_ms_smartcard_login OBJ_ms_corp,20L,2L,2L - -#define SN_ms_upn "msUPN" -#define LN_ms_upn "Microsoft User Principal Name" -#define NID_ms_upn 649 -#define OBJ_ms_upn OBJ_ms_corp,20L,2L,3L - -#define SN_ms_ntds_sec_ext "ms-ntds-sec-ext" -#define LN_ms_ntds_sec_ext "Microsoft NTDS CA Extension" -#define NID_ms_ntds_sec_ext 1292 -#define OBJ_ms_ntds_sec_ext OBJ_ms_corp,25L,2L - -#define SN_ms_ntds_obj_sid "ms-ntds-obj-sid" -#define LN_ms_ntds_obj_sid "Microsoft NTDS AD objectSid" -#define NID_ms_ntds_obj_sid 1291 -#define OBJ_ms_ntds_obj_sid OBJ_ms_corp,25L,2L,1L - -#define SN_ms_cert_templ "ms-cert-templ" -#define LN_ms_cert_templ "Microsoft certificate template" -#define NID_ms_cert_templ 1293 -#define OBJ_ms_cert_templ OBJ_ms_corp,21L,7L - -#define SN_ms_app_policies "ms-app-policies" -#define LN_ms_app_policies "Microsoft Application Policies Extension" -#define NID_ms_app_policies 1294 -#define OBJ_ms_app_policies OBJ_ms_corp,21L,10L - -#define SN_idea_cbc "IDEA-CBC" -#define LN_idea_cbc "idea-cbc" -#define NID_idea_cbc 34 -#define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L - -#define SN_idea_ecb "IDEA-ECB" -#define LN_idea_ecb "idea-ecb" -#define NID_idea_ecb 36 - -#define SN_idea_cfb64 "IDEA-CFB" -#define LN_idea_cfb64 "idea-cfb" -#define NID_idea_cfb64 35 - -#define SN_idea_ofb64 "IDEA-OFB" -#define LN_idea_ofb64 "idea-ofb" -#define NID_idea_ofb64 46 - -#define SN_bf_cbc "BF-CBC" -#define LN_bf_cbc "bf-cbc" -#define NID_bf_cbc 91 -#define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L - -#define SN_bf_ecb "BF-ECB" -#define LN_bf_ecb "bf-ecb" -#define NID_bf_ecb 92 - -#define SN_bf_cfb64 "BF-CFB" -#define LN_bf_cfb64 "bf-cfb" -#define NID_bf_cfb64 93 - -#define SN_bf_ofb64 "BF-OFB" -#define LN_bf_ofb64 "bf-ofb" -#define NID_bf_ofb64 94 - -#define SN_id_pkix "PKIX" -#define NID_id_pkix 127 -#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L - -#define SN_id_pkix_mod "id-pkix-mod" -#define NID_id_pkix_mod 258 -#define OBJ_id_pkix_mod OBJ_id_pkix,0L - -#define SN_id_pe "id-pe" -#define NID_id_pe 175 -#define OBJ_id_pe OBJ_id_pkix,1L - -#define SN_id_qt "id-qt" -#define NID_id_qt 259 -#define OBJ_id_qt OBJ_id_pkix,2L - -#define SN_id_kp "id-kp" -#define NID_id_kp 128 -#define OBJ_id_kp OBJ_id_pkix,3L - -#define SN_id_it "id-it" -#define NID_id_it 260 -#define OBJ_id_it OBJ_id_pkix,4L - -#define SN_id_pkip "id-pkip" -#define NID_id_pkip 261 -#define OBJ_id_pkip OBJ_id_pkix,5L - -#define SN_id_alg "id-alg" -#define NID_id_alg 262 -#define OBJ_id_alg OBJ_id_pkix,6L - -#define SN_id_cmc "id-cmc" -#define NID_id_cmc 263 -#define OBJ_id_cmc OBJ_id_pkix,7L - -#define SN_id_on "id-on" -#define NID_id_on 264 -#define OBJ_id_on OBJ_id_pkix,8L - -#define SN_id_pda "id-pda" -#define NID_id_pda 265 -#define OBJ_id_pda OBJ_id_pkix,9L - -#define SN_id_aca "id-aca" -#define NID_id_aca 266 -#define OBJ_id_aca OBJ_id_pkix,10L - -#define SN_id_qcs "id-qcs" -#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 - -#define SN_id_ppl "id-ppl" -#define NID_id_ppl 662 -#define OBJ_id_ppl OBJ_id_pkix,21L - -#define SN_id_ad "id-ad" -#define NID_id_ad 176 -#define OBJ_id_ad OBJ_id_pkix,48L - -#define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88" -#define NID_id_pkix1_explicit_88 269 -#define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L - -#define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88" -#define NID_id_pkix1_implicit_88 270 -#define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L - -#define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93" -#define NID_id_pkix1_explicit_93 271 -#define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L - -#define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93" -#define NID_id_pkix1_implicit_93 272 -#define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L - -#define SN_id_mod_crmf "id-mod-crmf" -#define NID_id_mod_crmf 273 -#define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L - -#define SN_id_mod_cmc "id-mod-cmc" -#define NID_id_mod_cmc 274 -#define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L - -#define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88" -#define NID_id_mod_kea_profile_88 275 -#define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L - -#define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93" -#define NID_id_mod_kea_profile_93 276 -#define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L - -#define SN_id_mod_cmp "id-mod-cmp" -#define NID_id_mod_cmp 277 -#define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L - -#define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88" -#define NID_id_mod_qualified_cert_88 278 -#define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L - -#define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93" -#define NID_id_mod_qualified_cert_93 279 -#define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L - -#define SN_id_mod_attribute_cert "id-mod-attribute-cert" -#define NID_id_mod_attribute_cert 280 -#define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L - -#define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol" -#define NID_id_mod_timestamp_protocol 281 -#define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L - -#define SN_id_mod_ocsp "id-mod-ocsp" -#define NID_id_mod_ocsp 282 -#define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L - -#define SN_id_mod_dvcs "id-mod-dvcs" -#define NID_id_mod_dvcs 283 -#define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L - -#define SN_id_mod_cmp2000 "id-mod-cmp2000" -#define NID_id_mod_cmp2000 284 -#define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L - -#define SN_id_mod_cmp2000_02 "id-mod-cmp2000-02" -#define NID_id_mod_cmp2000_02 1251 -#define OBJ_id_mod_cmp2000_02 OBJ_id_pkix_mod,50L - -#define SN_id_mod_cmp2021_88 "id-mod-cmp2021-88" -#define NID_id_mod_cmp2021_88 1252 -#define OBJ_id_mod_cmp2021_88 OBJ_id_pkix_mod,99L - -#define SN_id_mod_cmp2021_02 "id-mod-cmp2021-02" -#define NID_id_mod_cmp2021_02 1253 -#define OBJ_id_mod_cmp2021_02 OBJ_id_pkix_mod,100L - -#define SN_info_access "authorityInfoAccess" -#define LN_info_access "Authority Information Access" -#define NID_info_access 177 -#define OBJ_info_access OBJ_id_pe,1L - -#define SN_biometricInfo "biometricInfo" -#define LN_biometricInfo "Biometric Info" -#define NID_biometricInfo 285 -#define OBJ_biometricInfo OBJ_id_pe,2L - -#define SN_qcStatements "qcStatements" -#define NID_qcStatements 286 -#define OBJ_qcStatements OBJ_id_pe,3L - -#define SN_ac_auditEntity "ac-auditEntity" -#define NID_ac_auditEntity 287 -#define OBJ_ac_auditEntity OBJ_id_pe,4L - -#define SN_ac_targeting "ac-targeting" -#define NID_ac_targeting 288 -#define OBJ_ac_targeting OBJ_id_pe,5L - -#define SN_aaControls "aaControls" -#define NID_aaControls 289 -#define OBJ_aaControls OBJ_id_pe,6L - -#define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock" -#define NID_sbgp_ipAddrBlock 290 -#define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L - -#define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum" -#define NID_sbgp_autonomousSysNum 291 -#define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L - -#define SN_sbgp_routerIdentifier "sbgp-routerIdentifier" -#define NID_sbgp_routerIdentifier 292 -#define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L - -#define SN_ac_proxying "ac-proxying" -#define NID_ac_proxying 397 -#define OBJ_ac_proxying OBJ_id_pe,10L - -#define SN_sinfo_access "subjectInfoAccess" -#define LN_sinfo_access "Subject Information Access" -#define NID_sinfo_access 398 -#define OBJ_sinfo_access OBJ_id_pe,11L - -#define SN_proxyCertInfo "proxyCertInfo" -#define LN_proxyCertInfo "Proxy Certificate Information" -#define NID_proxyCertInfo 663 -#define OBJ_proxyCertInfo OBJ_id_pe,14L - -#define SN_tlsfeature "tlsfeature" -#define LN_tlsfeature "TLS Feature" -#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 -#define OBJ_id_qt_cps OBJ_id_qt,1L - -#define SN_id_qt_unotice "id-qt-unotice" -#define LN_id_qt_unotice "Policy Qualifier User Notice" -#define NID_id_qt_unotice 165 -#define OBJ_id_qt_unotice OBJ_id_qt,2L - -#define SN_textNotice "textNotice" -#define NID_textNotice 293 -#define OBJ_textNotice OBJ_id_qt,3L - -#define SN_server_auth "serverAuth" -#define LN_server_auth "TLS Web Server Authentication" -#define NID_server_auth 129 -#define OBJ_server_auth OBJ_id_kp,1L - -#define SN_client_auth "clientAuth" -#define LN_client_auth "TLS Web Client Authentication" -#define NID_client_auth 130 -#define OBJ_client_auth OBJ_id_kp,2L - -#define SN_code_sign "codeSigning" -#define LN_code_sign "Code Signing" -#define NID_code_sign 131 -#define OBJ_code_sign OBJ_id_kp,3L - -#define SN_email_protect "emailProtection" -#define LN_email_protect "E-mail Protection" -#define NID_email_protect 132 -#define OBJ_email_protect OBJ_id_kp,4L - -#define SN_ipsecEndSystem "ipsecEndSystem" -#define LN_ipsecEndSystem "IPSec End System" -#define NID_ipsecEndSystem 294 -#define OBJ_ipsecEndSystem OBJ_id_kp,5L - -#define SN_ipsecTunnel "ipsecTunnel" -#define LN_ipsecTunnel "IPSec Tunnel" -#define NID_ipsecTunnel 295 -#define OBJ_ipsecTunnel OBJ_id_kp,6L - -#define SN_ipsecUser "ipsecUser" -#define LN_ipsecUser "IPSec User" -#define NID_ipsecUser 296 -#define OBJ_ipsecUser OBJ_id_kp,7L - -#define SN_time_stamp "timeStamping" -#define LN_time_stamp "Time Stamping" -#define NID_time_stamp 133 -#define OBJ_time_stamp OBJ_id_kp,8L - -#define SN_OCSP_sign "OCSPSigning" -#define LN_OCSP_sign "OCSP Signing" -#define NID_OCSP_sign 180 -#define OBJ_OCSP_sign OBJ_id_kp,9L - -#define SN_dvcs "DVCS" -#define LN_dvcs "dvcs" -#define NID_dvcs 297 -#define OBJ_dvcs OBJ_id_kp,10L - -#define SN_ipsec_IKE "ipsecIKE" -#define LN_ipsec_IKE "ipsec Internet Key Exchange" -#define NID_ipsec_IKE 1022 -#define OBJ_ipsec_IKE OBJ_id_kp,17L - -#define SN_capwapAC "capwapAC" -#define LN_capwapAC "Ctrl/provision WAP Access" -#define NID_capwapAC 1023 -#define OBJ_capwapAC OBJ_id_kp,18L - -#define SN_capwapWTP "capwapWTP" -#define LN_capwapWTP "Ctrl/Provision WAP Termination" -#define NID_capwapWTP 1024 -#define OBJ_capwapWTP OBJ_id_kp,19L - -#define SN_sshClient "secureShellClient" -#define LN_sshClient "SSH Client" -#define NID_sshClient 1025 -#define OBJ_sshClient OBJ_id_kp,21L - -#define SN_sshServer "secureShellServer" -#define LN_sshServer "SSH Server" -#define NID_sshServer 1026 -#define OBJ_sshServer OBJ_id_kp,22L - -#define SN_sendRouter "sendRouter" -#define LN_sendRouter "Send Router" -#define NID_sendRouter 1027 -#define OBJ_sendRouter OBJ_id_kp,23L - -#define SN_sendProxiedRouter "sendProxiedRouter" -#define LN_sendProxiedRouter "Send Proxied Router" -#define NID_sendProxiedRouter 1028 -#define OBJ_sendProxiedRouter OBJ_id_kp,24L - -#define SN_sendOwner "sendOwner" -#define LN_sendOwner "Send Owner" -#define NID_sendOwner 1029 -#define OBJ_sendOwner OBJ_id_kp,25L - -#define SN_sendProxiedOwner "sendProxiedOwner" -#define LN_sendProxiedOwner "Send Proxied Owner" -#define NID_sendProxiedOwner 1030 -#define OBJ_sendProxiedOwner OBJ_id_kp,26L - -#define SN_cmcCA "cmcCA" -#define LN_cmcCA "CMC Certificate Authority" -#define NID_cmcCA 1131 -#define OBJ_cmcCA OBJ_id_kp,27L - -#define SN_cmcRA "cmcRA" -#define LN_cmcRA "CMC Registration Authority" -#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 - -#define SN_id_it_signKeyPairTypes "id-it-signKeyPairTypes" -#define NID_id_it_signKeyPairTypes 299 -#define OBJ_id_it_signKeyPairTypes OBJ_id_it,2L - -#define SN_id_it_encKeyPairTypes "id-it-encKeyPairTypes" -#define NID_id_it_encKeyPairTypes 300 -#define OBJ_id_it_encKeyPairTypes OBJ_id_it,3L - -#define SN_id_it_preferredSymmAlg "id-it-preferredSymmAlg" -#define NID_id_it_preferredSymmAlg 301 -#define OBJ_id_it_preferredSymmAlg OBJ_id_it,4L - -#define SN_id_it_caKeyUpdateInfo "id-it-caKeyUpdateInfo" -#define NID_id_it_caKeyUpdateInfo 302 -#define OBJ_id_it_caKeyUpdateInfo OBJ_id_it,5L - -#define SN_id_it_currentCRL "id-it-currentCRL" -#define NID_id_it_currentCRL 303 -#define OBJ_id_it_currentCRL OBJ_id_it,6L - -#define SN_id_it_unsupportedOIDs "id-it-unsupportedOIDs" -#define NID_id_it_unsupportedOIDs 304 -#define OBJ_id_it_unsupportedOIDs OBJ_id_it,7L - -#define SN_id_it_subscriptionRequest "id-it-subscriptionRequest" -#define NID_id_it_subscriptionRequest 305 -#define OBJ_id_it_subscriptionRequest OBJ_id_it,8L - -#define SN_id_it_subscriptionResponse "id-it-subscriptionResponse" -#define NID_id_it_subscriptionResponse 306 -#define OBJ_id_it_subscriptionResponse OBJ_id_it,9L - -#define SN_id_it_keyPairParamReq "id-it-keyPairParamReq" -#define NID_id_it_keyPairParamReq 307 -#define OBJ_id_it_keyPairParamReq OBJ_id_it,10L - -#define SN_id_it_keyPairParamRep "id-it-keyPairParamRep" -#define NID_id_it_keyPairParamRep 308 -#define OBJ_id_it_keyPairParamRep OBJ_id_it,11L - -#define SN_id_it_revPassphrase "id-it-revPassphrase" -#define NID_id_it_revPassphrase 309 -#define OBJ_id_it_revPassphrase OBJ_id_it,12L - -#define SN_id_it_implicitConfirm "id-it-implicitConfirm" -#define NID_id_it_implicitConfirm 310 -#define OBJ_id_it_implicitConfirm OBJ_id_it,13L - -#define SN_id_it_confirmWaitTime "id-it-confirmWaitTime" -#define NID_id_it_confirmWaitTime 311 -#define OBJ_id_it_confirmWaitTime OBJ_id_it,14L - -#define SN_id_it_origPKIMessage "id-it-origPKIMessage" -#define NID_id_it_origPKIMessage 312 -#define OBJ_id_it_origPKIMessage OBJ_id_it,15L - -#define SN_id_it_suppLangTags "id-it-suppLangTags" -#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_it_rootCaCert "id-it-rootCaCert" -#define NID_id_it_rootCaCert 1254 -#define OBJ_id_it_rootCaCert OBJ_id_it,20L - -#define SN_id_it_certProfile "id-it-certProfile" -#define NID_id_it_certProfile 1255 -#define OBJ_id_it_certProfile OBJ_id_it,21L - -#define SN_id_it_crlStatusList "id-it-crlStatusList" -#define NID_id_it_crlStatusList 1256 -#define OBJ_id_it_crlStatusList OBJ_id_it,22L - -#define SN_id_it_crls "id-it-crls" -#define NID_id_it_crls 1257 -#define OBJ_id_it_crls OBJ_id_it,23L - -#define SN_id_regCtrl "id-regCtrl" -#define NID_id_regCtrl 313 -#define OBJ_id_regCtrl OBJ_id_pkip,1L - -#define SN_id_regInfo "id-regInfo" -#define NID_id_regInfo 314 -#define OBJ_id_regInfo OBJ_id_pkip,2L - -#define SN_id_regCtrl_regToken "id-regCtrl-regToken" -#define NID_id_regCtrl_regToken 315 -#define OBJ_id_regCtrl_regToken OBJ_id_regCtrl,1L - -#define SN_id_regCtrl_authenticator "id-regCtrl-authenticator" -#define NID_id_regCtrl_authenticator 316 -#define OBJ_id_regCtrl_authenticator OBJ_id_regCtrl,2L - -#define SN_id_regCtrl_pkiPublicationInfo "id-regCtrl-pkiPublicationInfo" -#define NID_id_regCtrl_pkiPublicationInfo 317 -#define OBJ_id_regCtrl_pkiPublicationInfo OBJ_id_regCtrl,3L - -#define SN_id_regCtrl_pkiArchiveOptions "id-regCtrl-pkiArchiveOptions" -#define NID_id_regCtrl_pkiArchiveOptions 318 -#define OBJ_id_regCtrl_pkiArchiveOptions OBJ_id_regCtrl,4L - -#define SN_id_regCtrl_oldCertID "id-regCtrl-oldCertID" -#define NID_id_regCtrl_oldCertID 319 -#define OBJ_id_regCtrl_oldCertID OBJ_id_regCtrl,5L - -#define SN_id_regCtrl_protocolEncrKey "id-regCtrl-protocolEncrKey" -#define NID_id_regCtrl_protocolEncrKey 320 -#define OBJ_id_regCtrl_protocolEncrKey OBJ_id_regCtrl,6L - -#define SN_id_regCtrl_altCertTemplate "id-regCtrl-altCertTemplate" -#define NID_id_regCtrl_altCertTemplate 1258 -#define OBJ_id_regCtrl_altCertTemplate OBJ_id_regCtrl,7L - -#define SN_id_regCtrl_algId "id-regCtrl-algId" -#define NID_id_regCtrl_algId 1259 -#define OBJ_id_regCtrl_algId OBJ_id_regCtrl,11L - -#define SN_id_regCtrl_rsaKeyLen "id-regCtrl-rsaKeyLen" -#define NID_id_regCtrl_rsaKeyLen 1260 -#define OBJ_id_regCtrl_rsaKeyLen OBJ_id_regCtrl,12L - -#define SN_id_regInfo_utf8Pairs "id-regInfo-utf8Pairs" -#define NID_id_regInfo_utf8Pairs 321 -#define OBJ_id_regInfo_utf8Pairs OBJ_id_regInfo,1L - -#define SN_id_regInfo_certReq "id-regInfo-certReq" -#define NID_id_regInfo_certReq 322 -#define OBJ_id_regInfo_certReq OBJ_id_regInfo,2L - -#define SN_id_alg_des40 "id-alg-des40" -#define NID_id_alg_des40 323 -#define OBJ_id_alg_des40 OBJ_id_alg,1L - -#define SN_id_alg_noSignature "id-alg-noSignature" -#define NID_id_alg_noSignature 324 -#define OBJ_id_alg_noSignature OBJ_id_alg,2L - -#define SN_id_alg_dh_sig_hmac_sha1 "id-alg-dh-sig-hmac-sha1" -#define NID_id_alg_dh_sig_hmac_sha1 325 -#define OBJ_id_alg_dh_sig_hmac_sha1 OBJ_id_alg,3L - -#define SN_id_alg_dh_pop "id-alg-dh-pop" -#define NID_id_alg_dh_pop 326 -#define OBJ_id_alg_dh_pop OBJ_id_alg,4L - -#define SN_id_cmc_statusInfo "id-cmc-statusInfo" -#define NID_id_cmc_statusInfo 327 -#define OBJ_id_cmc_statusInfo OBJ_id_cmc,1L - -#define SN_id_cmc_identification "id-cmc-identification" -#define NID_id_cmc_identification 328 -#define OBJ_id_cmc_identification OBJ_id_cmc,2L - -#define SN_id_cmc_identityProof "id-cmc-identityProof" -#define NID_id_cmc_identityProof 329 -#define OBJ_id_cmc_identityProof OBJ_id_cmc,3L - -#define SN_id_cmc_dataReturn "id-cmc-dataReturn" -#define NID_id_cmc_dataReturn 330 -#define OBJ_id_cmc_dataReturn OBJ_id_cmc,4L - -#define SN_id_cmc_transactionId "id-cmc-transactionId" -#define NID_id_cmc_transactionId 331 -#define OBJ_id_cmc_transactionId OBJ_id_cmc,5L - -#define SN_id_cmc_senderNonce "id-cmc-senderNonce" -#define NID_id_cmc_senderNonce 332 -#define OBJ_id_cmc_senderNonce OBJ_id_cmc,6L - -#define SN_id_cmc_recipientNonce "id-cmc-recipientNonce" -#define NID_id_cmc_recipientNonce 333 -#define OBJ_id_cmc_recipientNonce OBJ_id_cmc,7L - -#define SN_id_cmc_addExtensions "id-cmc-addExtensions" -#define NID_id_cmc_addExtensions 334 -#define OBJ_id_cmc_addExtensions OBJ_id_cmc,8L - -#define SN_id_cmc_encryptedPOP "id-cmc-encryptedPOP" -#define NID_id_cmc_encryptedPOP 335 -#define OBJ_id_cmc_encryptedPOP OBJ_id_cmc,9L - -#define SN_id_cmc_decryptedPOP "id-cmc-decryptedPOP" -#define NID_id_cmc_decryptedPOP 336 -#define OBJ_id_cmc_decryptedPOP OBJ_id_cmc,10L - -#define SN_id_cmc_lraPOPWitness "id-cmc-lraPOPWitness" -#define NID_id_cmc_lraPOPWitness 337 -#define OBJ_id_cmc_lraPOPWitness OBJ_id_cmc,11L - -#define SN_id_cmc_getCert "id-cmc-getCert" -#define NID_id_cmc_getCert 338 -#define OBJ_id_cmc_getCert OBJ_id_cmc,15L - -#define SN_id_cmc_getCRL "id-cmc-getCRL" -#define NID_id_cmc_getCRL 339 -#define OBJ_id_cmc_getCRL OBJ_id_cmc,16L - -#define SN_id_cmc_revokeRequest "id-cmc-revokeRequest" -#define NID_id_cmc_revokeRequest 340 -#define OBJ_id_cmc_revokeRequest OBJ_id_cmc,17L - -#define SN_id_cmc_regInfo "id-cmc-regInfo" -#define NID_id_cmc_regInfo 341 -#define OBJ_id_cmc_regInfo OBJ_id_cmc,18L - -#define SN_id_cmc_responseInfo "id-cmc-responseInfo" -#define NID_id_cmc_responseInfo 342 -#define OBJ_id_cmc_responseInfo OBJ_id_cmc,19L - -#define SN_id_cmc_queryPending "id-cmc-queryPending" -#define NID_id_cmc_queryPending 343 -#define OBJ_id_cmc_queryPending OBJ_id_cmc,21L - -#define SN_id_cmc_popLinkRandom "id-cmc-popLinkRandom" -#define NID_id_cmc_popLinkRandom 344 -#define OBJ_id_cmc_popLinkRandom OBJ_id_cmc,22L - -#define SN_id_cmc_popLinkWitness "id-cmc-popLinkWitness" -#define NID_id_cmc_popLinkWitness 345 -#define OBJ_id_cmc_popLinkWitness OBJ_id_cmc,23L - -#define SN_id_cmc_confirmCertAcceptance "id-cmc-confirmCertAcceptance" -#define NID_id_cmc_confirmCertAcceptance 346 -#define OBJ_id_cmc_confirmCertAcceptance OBJ_id_cmc,24L - -#define SN_id_on_personalData "id-on-personalData" -#define NID_id_on_personalData 347 -#define OBJ_id_on_personalData OBJ_id_on,1L - -#define SN_id_on_permanentIdentifier "id-on-permanentIdentifier" -#define LN_id_on_permanentIdentifier "Permanent Identifier" -#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 - -#define SN_id_pda_placeOfBirth "id-pda-placeOfBirth" -#define NID_id_pda_placeOfBirth 349 -#define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L - -#define SN_id_pda_gender "id-pda-gender" -#define NID_id_pda_gender 351 -#define OBJ_id_pda_gender OBJ_id_pda,3L - -#define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship" -#define NID_id_pda_countryOfCitizenship 352 -#define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L - -#define SN_id_pda_countryOfResidence "id-pda-countryOfResidence" -#define NID_id_pda_countryOfResidence 353 -#define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L - -#define SN_id_aca_authenticationInfo "id-aca-authenticationInfo" -#define NID_id_aca_authenticationInfo 354 -#define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L - -#define SN_id_aca_accessIdentity "id-aca-accessIdentity" -#define NID_id_aca_accessIdentity 355 -#define OBJ_id_aca_accessIdentity OBJ_id_aca,2L - -#define SN_id_aca_chargingIdentity "id-aca-chargingIdentity" -#define NID_id_aca_chargingIdentity 356 -#define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L - -#define SN_id_aca_group "id-aca-group" -#define NID_id_aca_group 357 -#define OBJ_id_aca_group OBJ_id_aca,4L - -#define SN_id_aca_role "id-aca-role" -#define NID_id_aca_role 358 -#define OBJ_id_aca_role OBJ_id_aca,5L - -#define SN_id_aca_encAttrs "id-aca-encAttrs" -#define NID_id_aca_encAttrs 399 -#define OBJ_id_aca_encAttrs OBJ_id_aca,6L - -#define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1" -#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 - -#define SN_id_cct_PKIData "id-cct-PKIData" -#define NID_id_cct_PKIData 361 -#define OBJ_id_cct_PKIData OBJ_id_cct,2L - -#define SN_id_cct_PKIResponse "id-cct-PKIResponse" -#define NID_id_cct_PKIResponse 362 -#define OBJ_id_cct_PKIResponse OBJ_id_cct,3L - -#define SN_id_ppl_anyLanguage "id-ppl-anyLanguage" -#define LN_id_ppl_anyLanguage "Any language" -#define NID_id_ppl_anyLanguage 664 -#define OBJ_id_ppl_anyLanguage OBJ_id_ppl,0L - -#define SN_id_ppl_inheritAll "id-ppl-inheritAll" -#define LN_id_ppl_inheritAll "Inherit all" -#define NID_id_ppl_inheritAll 665 -#define OBJ_id_ppl_inheritAll OBJ_id_ppl,1L - -#define SN_Independent "id-ppl-independent" -#define LN_Independent "Independent" -#define NID_Independent 667 -#define OBJ_Independent OBJ_id_ppl,2L - -#define SN_ad_OCSP "OCSP" -#define LN_ad_OCSP "OCSP" -#define NID_ad_OCSP 178 -#define OBJ_ad_OCSP OBJ_id_ad,1L - -#define SN_ad_ca_issuers "caIssuers" -#define LN_ad_ca_issuers "CA Issuers" -#define NID_ad_ca_issuers 179 -#define OBJ_ad_ca_issuers OBJ_id_ad,2L - -#define SN_ad_timeStamping "ad_timestamping" -#define LN_ad_timeStamping "AD Time Stamping" -#define NID_ad_timeStamping 363 -#define OBJ_ad_timeStamping OBJ_id_ad,3L - -#define SN_ad_dvcs "AD_DVCS" -#define LN_ad_dvcs "ad dvcs" -#define NID_ad_dvcs 364 -#define OBJ_ad_dvcs OBJ_id_ad,4L - -#define SN_caRepository "caRepository" -#define LN_caRepository "CA Repository" -#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" -#define LN_id_pkix_OCSP_basic "Basic OCSP Response" -#define NID_id_pkix_OCSP_basic 365 -#define OBJ_id_pkix_OCSP_basic OBJ_id_pkix_OCSP,1L - -#define SN_id_pkix_OCSP_Nonce "Nonce" -#define LN_id_pkix_OCSP_Nonce "OCSP Nonce" -#define NID_id_pkix_OCSP_Nonce 366 -#define OBJ_id_pkix_OCSP_Nonce OBJ_id_pkix_OCSP,2L - -#define SN_id_pkix_OCSP_CrlID "CrlID" -#define LN_id_pkix_OCSP_CrlID "OCSP CRL ID" -#define NID_id_pkix_OCSP_CrlID 367 -#define OBJ_id_pkix_OCSP_CrlID OBJ_id_pkix_OCSP,3L - -#define SN_id_pkix_OCSP_acceptableResponses "acceptableResponses" -#define LN_id_pkix_OCSP_acceptableResponses "Acceptable OCSP Responses" -#define NID_id_pkix_OCSP_acceptableResponses 368 -#define OBJ_id_pkix_OCSP_acceptableResponses OBJ_id_pkix_OCSP,4L - -#define SN_id_pkix_OCSP_noCheck "noCheck" -#define LN_id_pkix_OCSP_noCheck "OCSP No Check" -#define NID_id_pkix_OCSP_noCheck 369 -#define OBJ_id_pkix_OCSP_noCheck OBJ_id_pkix_OCSP,5L - -#define SN_id_pkix_OCSP_archiveCutoff "archiveCutoff" -#define LN_id_pkix_OCSP_archiveCutoff "OCSP Archive Cutoff" -#define NID_id_pkix_OCSP_archiveCutoff 370 -#define OBJ_id_pkix_OCSP_archiveCutoff OBJ_id_pkix_OCSP,6L - -#define SN_id_pkix_OCSP_serviceLocator "serviceLocator" -#define LN_id_pkix_OCSP_serviceLocator "OCSP Service Locator" -#define NID_id_pkix_OCSP_serviceLocator 371 -#define OBJ_id_pkix_OCSP_serviceLocator OBJ_id_pkix_OCSP,7L - -#define SN_id_pkix_OCSP_extendedStatus "extendedStatus" -#define LN_id_pkix_OCSP_extendedStatus "Extended OCSP Status" -#define NID_id_pkix_OCSP_extendedStatus 372 -#define OBJ_id_pkix_OCSP_extendedStatus OBJ_id_pkix_OCSP,8L - -#define SN_id_pkix_OCSP_valid "valid" -#define NID_id_pkix_OCSP_valid 373 -#define OBJ_id_pkix_OCSP_valid OBJ_id_pkix_OCSP,9L - -#define SN_id_pkix_OCSP_path "path" -#define NID_id_pkix_OCSP_path 374 -#define OBJ_id_pkix_OCSP_path OBJ_id_pkix_OCSP,10L - -#define SN_id_pkix_OCSP_trustRoot "trustRoot" -#define LN_id_pkix_OCSP_trustRoot "Trust Root" -#define NID_id_pkix_OCSP_trustRoot 375 -#define OBJ_id_pkix_OCSP_trustRoot OBJ_id_pkix_OCSP,11L - -#define SN_algorithm "algorithm" -#define LN_algorithm "algorithm" -#define NID_algorithm 376 -#define OBJ_algorithm 1L,3L,14L,3L,2L - -#define SN_md5WithRSA "RSA-NP-MD5" -#define LN_md5WithRSA "md5WithRSA" -#define NID_md5WithRSA 104 -#define OBJ_md5WithRSA OBJ_algorithm,3L - -#define SN_des_ecb "DES-ECB" -#define LN_des_ecb "des-ecb" -#define NID_des_ecb 29 -#define OBJ_des_ecb OBJ_algorithm,6L - -#define SN_des_cbc "DES-CBC" -#define LN_des_cbc "des-cbc" -#define NID_des_cbc 31 -#define OBJ_des_cbc OBJ_algorithm,7L - -#define SN_des_ofb64 "DES-OFB" -#define LN_des_ofb64 "des-ofb" -#define NID_des_ofb64 45 -#define OBJ_des_ofb64 OBJ_algorithm,8L - -#define SN_des_cfb64 "DES-CFB" -#define LN_des_cfb64 "des-cfb" -#define NID_des_cfb64 30 -#define OBJ_des_cfb64 OBJ_algorithm,9L - -#define SN_rsaSignature "rsaSignature" -#define NID_rsaSignature 377 -#define OBJ_rsaSignature OBJ_algorithm,11L - -#define SN_dsa_2 "DSA-old" -#define LN_dsa_2 "dsaEncryption-old" -#define NID_dsa_2 67 -#define OBJ_dsa_2 OBJ_algorithm,12L - -#define SN_dsaWithSHA "DSA-SHA" -#define LN_dsaWithSHA "dsaWithSHA" -#define NID_dsaWithSHA 66 -#define OBJ_dsaWithSHA OBJ_algorithm,13L - -#define SN_shaWithRSAEncryption "RSA-SHA" -#define LN_shaWithRSAEncryption "shaWithRSAEncryption" -#define NID_shaWithRSAEncryption 42 -#define OBJ_shaWithRSAEncryption OBJ_algorithm,15L - -#define SN_des_ede_ecb "DES-EDE" -#define LN_des_ede_ecb "des-ede" -#define NID_des_ede_ecb 32 -#define OBJ_des_ede_ecb OBJ_algorithm,17L - -#define SN_des_ede3_ecb "DES-EDE3" -#define LN_des_ede3_ecb "des-ede3" -#define NID_des_ede3_ecb 33 - -#define SN_des_ede_cbc "DES-EDE-CBC" -#define LN_des_ede_cbc "des-ede-cbc" -#define NID_des_ede_cbc 43 - -#define SN_des_ede_cfb64 "DES-EDE-CFB" -#define LN_des_ede_cfb64 "des-ede-cfb" -#define NID_des_ede_cfb64 60 - -#define SN_des_ede3_cfb64 "DES-EDE3-CFB" -#define LN_des_ede3_cfb64 "des-ede3-cfb" -#define NID_des_ede3_cfb64 61 - -#define SN_des_ede_ofb64 "DES-EDE-OFB" -#define LN_des_ede_ofb64 "des-ede-ofb" -#define NID_des_ede_ofb64 62 - -#define SN_des_ede3_ofb64 "DES-EDE3-OFB" -#define LN_des_ede3_ofb64 "des-ede3-ofb" -#define NID_des_ede3_ofb64 63 - -#define SN_desx_cbc "DESX-CBC" -#define LN_desx_cbc "desx-cbc" -#define NID_desx_cbc 80 - -#define SN_sha "SHA" -#define LN_sha "sha" -#define NID_sha 41 -#define OBJ_sha OBJ_algorithm,18L - -#define SN_sha1 "SHA1" -#define LN_sha1 "sha1" -#define NID_sha1 64 -#define OBJ_sha1 OBJ_algorithm,26L - -#define SN_dsaWithSHA1_2 "DSA-SHA1-old" -#define LN_dsaWithSHA1_2 "dsaWithSHA1-old" -#define NID_dsaWithSHA1_2 70 -#define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L - -#define SN_sha1WithRSA "RSA-SHA1-2" -#define LN_sha1WithRSA "sha1WithRSA" -#define NID_sha1WithRSA 115 -#define OBJ_sha1WithRSA OBJ_algorithm,29L - -#define SN_ripemd160 "RIPEMD160" -#define LN_ripemd160 "ripemd160" -#define NID_ripemd160 117 -#define OBJ_ripemd160 1L,3L,36L,3L,2L,1L - -#define SN_ripemd160WithRSA "RSA-RIPEMD160" -#define LN_ripemd160WithRSA "ripemd160WithRSA" -#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 OBJ_blake2bmac,16L - -#define SN_blake2s256 "BLAKE2s256" -#define LN_blake2s256 "blake2s256" -#define NID_blake2s256 1057 -#define OBJ_blake2s256 OBJ_blake2smac,8L - -#define SN_sxnet "SXNetID" -#define LN_sxnet "Strong Extranet ID" -#define NID_sxnet 143 -#define OBJ_sxnet 1L,3L,101L,1L,4L,1L - -#define SN_X500 "X500" -#define LN_X500 "directory services (X.500)" -#define NID_X500 11 -#define OBJ_X500 2L,5L - -#define SN_X509 "X509" -#define NID_X509 12 -#define OBJ_X509 OBJ_X500,4L - -#define SN_commonName "CN" -#define LN_commonName "commonName" -#define NID_commonName 13 -#define OBJ_commonName OBJ_X509,3L - -#define SN_surname "SN" -#define LN_surname "surname" -#define NID_surname 100 -#define OBJ_surname OBJ_X509,4L - -#define LN_serialNumber "serialNumber" -#define NID_serialNumber 105 -#define OBJ_serialNumber OBJ_X509,5L - -#define SN_countryName "C" -#define LN_countryName "countryName" -#define NID_countryName 14 -#define OBJ_countryName OBJ_X509,6L - -#define SN_localityName "L" -#define LN_localityName "localityName" -#define NID_localityName 15 -#define OBJ_localityName OBJ_X509,7L - -#define SN_stateOrProvinceName "ST" -#define LN_stateOrProvinceName "stateOrProvinceName" -#define NID_stateOrProvinceName 16 -#define OBJ_stateOrProvinceName OBJ_X509,8L - -#define SN_streetAddress "street" -#define LN_streetAddress "streetAddress" -#define NID_streetAddress 660 -#define OBJ_streetAddress OBJ_X509,9L - -#define SN_organizationName "O" -#define LN_organizationName "organizationName" -#define NID_organizationName 17 -#define OBJ_organizationName OBJ_X509,10L - -#define SN_organizationalUnitName "OU" -#define LN_organizationalUnitName "organizationalUnitName" -#define NID_organizationalUnitName 18 -#define OBJ_organizationalUnitName OBJ_X509,11L - -#define SN_title "title" -#define LN_title "title" -#define NID_title 106 -#define OBJ_title OBJ_X509,12L - -#define LN_description "description" -#define NID_description 107 -#define OBJ_description OBJ_X509,13L - -#define LN_searchGuide "searchGuide" -#define NID_searchGuide 859 -#define OBJ_searchGuide OBJ_X509,14L - -#define LN_businessCategory "businessCategory" -#define NID_businessCategory 860 -#define OBJ_businessCategory OBJ_X509,15L - -#define LN_postalAddress "postalAddress" -#define NID_postalAddress 861 -#define OBJ_postalAddress OBJ_X509,16L - -#define LN_postalCode "postalCode" -#define NID_postalCode 661 -#define OBJ_postalCode OBJ_X509,17L - -#define LN_postOfficeBox "postOfficeBox" -#define NID_postOfficeBox 862 -#define OBJ_postOfficeBox OBJ_X509,18L - -#define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName" -#define NID_physicalDeliveryOfficeName 863 -#define OBJ_physicalDeliveryOfficeName OBJ_X509,19L - -#define LN_telephoneNumber "telephoneNumber" -#define NID_telephoneNumber 864 -#define OBJ_telephoneNumber OBJ_X509,20L - -#define LN_telexNumber "telexNumber" -#define NID_telexNumber 865 -#define OBJ_telexNumber OBJ_X509,21L - -#define LN_teletexTerminalIdentifier "teletexTerminalIdentifier" -#define NID_teletexTerminalIdentifier 866 -#define OBJ_teletexTerminalIdentifier OBJ_X509,22L - -#define LN_facsimileTelephoneNumber "facsimileTelephoneNumber" -#define NID_facsimileTelephoneNumber 867 -#define OBJ_facsimileTelephoneNumber OBJ_X509,23L - -#define LN_x121Address "x121Address" -#define NID_x121Address 868 -#define OBJ_x121Address OBJ_X509,24L - -#define LN_internationaliSDNNumber "internationaliSDNNumber" -#define NID_internationaliSDNNumber 869 -#define OBJ_internationaliSDNNumber OBJ_X509,25L - -#define LN_registeredAddress "registeredAddress" -#define NID_registeredAddress 870 -#define OBJ_registeredAddress OBJ_X509,26L - -#define LN_destinationIndicator "destinationIndicator" -#define NID_destinationIndicator 871 -#define OBJ_destinationIndicator OBJ_X509,27L - -#define LN_preferredDeliveryMethod "preferredDeliveryMethod" -#define NID_preferredDeliveryMethod 872 -#define OBJ_preferredDeliveryMethod OBJ_X509,28L - -#define LN_presentationAddress "presentationAddress" -#define NID_presentationAddress 873 -#define OBJ_presentationAddress OBJ_X509,29L - -#define LN_supportedApplicationContext "supportedApplicationContext" -#define NID_supportedApplicationContext 874 -#define OBJ_supportedApplicationContext OBJ_X509,30L - -#define SN_member "member" -#define NID_member 875 -#define OBJ_member OBJ_X509,31L - -#define SN_owner "owner" -#define NID_owner 876 -#define OBJ_owner OBJ_X509,32L - -#define LN_roleOccupant "roleOccupant" -#define NID_roleOccupant 877 -#define OBJ_roleOccupant OBJ_X509,33L - -#define SN_seeAlso "seeAlso" -#define NID_seeAlso 878 -#define OBJ_seeAlso OBJ_X509,34L - -#define LN_userPassword "userPassword" -#define NID_userPassword 879 -#define OBJ_userPassword OBJ_X509,35L - -#define LN_userCertificate "userCertificate" -#define NID_userCertificate 880 -#define OBJ_userCertificate OBJ_X509,36L - -#define LN_cACertificate "cACertificate" -#define NID_cACertificate 881 -#define OBJ_cACertificate OBJ_X509,37L - -#define LN_authorityRevocationList "authorityRevocationList" -#define NID_authorityRevocationList 882 -#define OBJ_authorityRevocationList OBJ_X509,38L - -#define LN_certificateRevocationList "certificateRevocationList" -#define NID_certificateRevocationList 883 -#define OBJ_certificateRevocationList OBJ_X509,39L - -#define LN_crossCertificatePair "crossCertificatePair" -#define NID_crossCertificatePair 884 -#define OBJ_crossCertificatePair OBJ_X509,40L - -#define SN_name "name" -#define LN_name "name" -#define NID_name 173 -#define OBJ_name OBJ_X509,41L - -#define SN_givenName "GN" -#define LN_givenName "givenName" -#define NID_givenName 99 -#define OBJ_givenName OBJ_X509,42L - -#define SN_initials "initials" -#define LN_initials "initials" -#define NID_initials 101 -#define OBJ_initials OBJ_X509,43L - -#define LN_generationQualifier "generationQualifier" -#define NID_generationQualifier 509 -#define OBJ_generationQualifier OBJ_X509,44L - -#define LN_x500UniqueIdentifier "x500UniqueIdentifier" -#define NID_x500UniqueIdentifier 503 -#define OBJ_x500UniqueIdentifier OBJ_X509,45L - -#define SN_dnQualifier "dnQualifier" -#define LN_dnQualifier "dnQualifier" -#define NID_dnQualifier 174 -#define OBJ_dnQualifier OBJ_X509,46L - -#define LN_enhancedSearchGuide "enhancedSearchGuide" -#define NID_enhancedSearchGuide 885 -#define OBJ_enhancedSearchGuide OBJ_X509,47L - -#define LN_protocolInformation "protocolInformation" -#define NID_protocolInformation 886 -#define OBJ_protocolInformation OBJ_X509,48L - -#define LN_distinguishedName "distinguishedName" -#define NID_distinguishedName 887 -#define OBJ_distinguishedName OBJ_X509,49L - -#define LN_uniqueMember "uniqueMember" -#define NID_uniqueMember 888 -#define OBJ_uniqueMember OBJ_X509,50L - -#define LN_houseIdentifier "houseIdentifier" -#define NID_houseIdentifier 889 -#define OBJ_houseIdentifier OBJ_X509,51L - -#define LN_supportedAlgorithms "supportedAlgorithms" -#define NID_supportedAlgorithms 890 -#define OBJ_supportedAlgorithms OBJ_X509,52L - -#define LN_deltaRevocationList "deltaRevocationList" -#define NID_deltaRevocationList 891 -#define OBJ_deltaRevocationList OBJ_X509,53L - -#define SN_dmdName "dmdName" -#define NID_dmdName 892 -#define OBJ_dmdName OBJ_X509,54L - -#define LN_pseudonym "pseudonym" -#define NID_pseudonym 510 -#define OBJ_pseudonym OBJ_X509,65L - -#define SN_role "role" -#define LN_role "role" -#define NID_role 400 -#define OBJ_role OBJ_X509,72L - -#define LN_organizationIdentifier "organizationIdentifier" -#define NID_organizationIdentifier 1089 -#define OBJ_organizationIdentifier OBJ_X509,97L - -#define SN_countryCode3c "c3" -#define LN_countryCode3c "countryCode3c" -#define NID_countryCode3c 1090 -#define OBJ_countryCode3c OBJ_X509,98L - -#define SN_countryCode3n "n3" -#define LN_countryCode3n "countryCode3n" -#define NID_countryCode3n 1091 -#define OBJ_countryCode3n OBJ_X509,99L - -#define LN_dnsName "dnsName" -#define NID_dnsName 1092 -#define OBJ_dnsName OBJ_X509,100L - -#define SN_X500algorithms "X500algorithms" -#define LN_X500algorithms "directory services - algorithms" -#define NID_X500algorithms 378 -#define OBJ_X500algorithms OBJ_X500,8L - -#define SN_rsa "RSA" -#define LN_rsa "rsa" -#define NID_rsa 19 -#define OBJ_rsa OBJ_X500algorithms,1L,1L - -#define SN_mdc2WithRSA "RSA-MDC2" -#define LN_mdc2WithRSA "mdc2WithRSA" -#define NID_mdc2WithRSA 96 -#define OBJ_mdc2WithRSA OBJ_X500algorithms,3L,100L - -#define SN_mdc2 "MDC2" -#define LN_mdc2 "mdc2" -#define NID_mdc2 95 -#define OBJ_mdc2 OBJ_X500algorithms,3L,101L - -#define SN_id_ce "id-ce" -#define NID_id_ce 81 -#define OBJ_id_ce OBJ_X500,29L - -#define SN_subject_directory_attributes "subjectDirectoryAttributes" -#define LN_subject_directory_attributes "X509v3 Subject Directory Attributes" -#define NID_subject_directory_attributes 769 -#define OBJ_subject_directory_attributes OBJ_id_ce,9L - -#define SN_subject_key_identifier "subjectKeyIdentifier" -#define LN_subject_key_identifier "X509v3 Subject Key Identifier" -#define NID_subject_key_identifier 82 -#define OBJ_subject_key_identifier OBJ_id_ce,14L - -#define SN_key_usage "keyUsage" -#define LN_key_usage "X509v3 Key Usage" -#define NID_key_usage 83 -#define OBJ_key_usage OBJ_id_ce,15L - -#define SN_private_key_usage_period "privateKeyUsagePeriod" -#define LN_private_key_usage_period "X509v3 Private Key Usage Period" -#define NID_private_key_usage_period 84 -#define OBJ_private_key_usage_period OBJ_id_ce,16L - -#define SN_subject_alt_name "subjectAltName" -#define LN_subject_alt_name "X509v3 Subject Alternative Name" -#define NID_subject_alt_name 85 -#define OBJ_subject_alt_name OBJ_id_ce,17L - -#define SN_issuer_alt_name "issuerAltName" -#define LN_issuer_alt_name "X509v3 Issuer Alternative Name" -#define NID_issuer_alt_name 86 -#define OBJ_issuer_alt_name OBJ_id_ce,18L - -#define SN_basic_constraints "basicConstraints" -#define LN_basic_constraints "X509v3 Basic Constraints" -#define NID_basic_constraints 87 -#define OBJ_basic_constraints OBJ_id_ce,19L - -#define SN_crl_number "crlNumber" -#define LN_crl_number "X509v3 CRL Number" -#define NID_crl_number 88 -#define OBJ_crl_number OBJ_id_ce,20L - -#define SN_crl_reason "CRLReason" -#define LN_crl_reason "X509v3 CRL Reason Code" -#define NID_crl_reason 141 -#define OBJ_crl_reason OBJ_id_ce,21L - -#define SN_invalidity_date "invalidityDate" -#define LN_invalidity_date "Invalidity Date" -#define NID_invalidity_date 142 -#define OBJ_invalidity_date OBJ_id_ce,24L - -#define SN_delta_crl "deltaCRL" -#define LN_delta_crl "X509v3 Delta CRL Indicator" -#define NID_delta_crl 140 -#define OBJ_delta_crl OBJ_id_ce,27L - -#define SN_issuing_distribution_point "issuingDistributionPoint" -#define LN_issuing_distribution_point "X509v3 Issuing Distribution Point" -#define NID_issuing_distribution_point 770 -#define OBJ_issuing_distribution_point OBJ_id_ce,28L - -#define SN_certificate_issuer "certificateIssuer" -#define LN_certificate_issuer "X509v3 Certificate Issuer" -#define NID_certificate_issuer 771 -#define OBJ_certificate_issuer OBJ_id_ce,29L - -#define SN_name_constraints "nameConstraints" -#define LN_name_constraints "X509v3 Name Constraints" -#define NID_name_constraints 666 -#define OBJ_name_constraints OBJ_id_ce,30L - -#define SN_crl_distribution_points "crlDistributionPoints" -#define LN_crl_distribution_points "X509v3 CRL Distribution Points" -#define NID_crl_distribution_points 103 -#define OBJ_crl_distribution_points OBJ_id_ce,31L - -#define SN_certificate_policies "certificatePolicies" -#define LN_certificate_policies "X509v3 Certificate Policies" -#define NID_certificate_policies 89 -#define OBJ_certificate_policies OBJ_id_ce,32L - -#define SN_any_policy "anyPolicy" -#define LN_any_policy "X509v3 Any Policy" -#define NID_any_policy 746 -#define OBJ_any_policy OBJ_certificate_policies,0L - -#define SN_policy_mappings "policyMappings" -#define LN_policy_mappings "X509v3 Policy Mappings" -#define NID_policy_mappings 747 -#define OBJ_policy_mappings OBJ_id_ce,33L - -#define SN_authority_key_identifier "authorityKeyIdentifier" -#define LN_authority_key_identifier "X509v3 Authority Key Identifier" -#define NID_authority_key_identifier 90 -#define OBJ_authority_key_identifier OBJ_id_ce,35L - -#define SN_policy_constraints "policyConstraints" -#define LN_policy_constraints "X509v3 Policy Constraints" -#define NID_policy_constraints 401 -#define OBJ_policy_constraints OBJ_id_ce,36L - -#define SN_ext_key_usage "extendedKeyUsage" -#define LN_ext_key_usage "X509v3 Extended Key Usage" -#define NID_ext_key_usage 126 -#define OBJ_ext_key_usage OBJ_id_ce,37L - -#define SN_authority_attribute_identifier "authorityAttributeIdentifier" -#define LN_authority_attribute_identifier "X509v3 Authority Attribute Identifier" -#define NID_authority_attribute_identifier 1295 -#define OBJ_authority_attribute_identifier OBJ_id_ce,38L - -#define SN_role_spec_cert_identifier "roleSpecCertIdentifier" -#define LN_role_spec_cert_identifier "X509v3 Role Specification Certificate Identifier" -#define NID_role_spec_cert_identifier 1296 -#define OBJ_role_spec_cert_identifier OBJ_id_ce,39L - -#define SN_basic_att_constraints "basicAttConstraints" -#define LN_basic_att_constraints "X509v3 Basic Attribute Certificate Constraints" -#define NID_basic_att_constraints 1297 -#define OBJ_basic_att_constraints OBJ_id_ce,41L - -#define SN_delegated_name_constraints "delegatedNameConstraints" -#define LN_delegated_name_constraints "X509v3 Delegated Name Constraints" -#define NID_delegated_name_constraints 1298 -#define OBJ_delegated_name_constraints OBJ_id_ce,42L - -#define SN_time_specification "timeSpecification" -#define LN_time_specification "X509v3 Time Specification" -#define NID_time_specification 1299 -#define OBJ_time_specification OBJ_id_ce,43L - -#define SN_freshest_crl "freshestCRL" -#define LN_freshest_crl "X509v3 Freshest CRL" -#define NID_freshest_crl 857 -#define OBJ_freshest_crl OBJ_id_ce,46L - -#define SN_attribute_descriptor "attributeDescriptor" -#define LN_attribute_descriptor "X509v3 Attribute Descriptor" -#define NID_attribute_descriptor 1300 -#define OBJ_attribute_descriptor OBJ_id_ce,48L - -#define SN_user_notice "userNotice" -#define LN_user_notice "X509v3 User Notice" -#define NID_user_notice 1301 -#define OBJ_user_notice OBJ_id_ce,49L - -#define SN_soa_identifier "sOAIdentifier" -#define LN_soa_identifier "X509v3 Source of Authority Identifier" -#define NID_soa_identifier 1302 -#define OBJ_soa_identifier OBJ_id_ce,50L - -#define SN_acceptable_cert_policies "acceptableCertPolicies" -#define LN_acceptable_cert_policies "X509v3 Acceptable Certification Policies" -#define NID_acceptable_cert_policies 1303 -#define OBJ_acceptable_cert_policies OBJ_id_ce,52L - -#define SN_inhibit_any_policy "inhibitAnyPolicy" -#define LN_inhibit_any_policy "X509v3 Inhibit Any Policy" -#define NID_inhibit_any_policy 748 -#define OBJ_inhibit_any_policy OBJ_id_ce,54L - -#define SN_target_information "targetInformation" -#define LN_target_information "X509v3 AC Targeting" -#define NID_target_information 402 -#define OBJ_target_information OBJ_id_ce,55L - -#define SN_no_rev_avail "noRevAvail" -#define LN_no_rev_avail "X509v3 No Revocation Available" -#define NID_no_rev_avail 403 -#define OBJ_no_rev_avail OBJ_id_ce,56L - -#define SN_acceptable_privilege_policies "acceptablePrivPolicies" -#define LN_acceptable_privilege_policies "X509v3 Acceptable Privilege Policies" -#define NID_acceptable_privilege_policies 1304 -#define OBJ_acceptable_privilege_policies OBJ_id_ce,57L - -#define SN_indirect_issuer "indirectIssuer" -#define LN_indirect_issuer "X509v3 Indirect Issuer" -#define NID_indirect_issuer 1305 -#define OBJ_indirect_issuer OBJ_id_ce,61L - -#define SN_no_assertion "noAssertion" -#define LN_no_assertion "X509v3 No Assertion" -#define NID_no_assertion 1306 -#define OBJ_no_assertion OBJ_id_ce,62L - -#define SN_id_aa_issuing_distribution_point "aAissuingDistributionPoint" -#define LN_id_aa_issuing_distribution_point "X509v3 Attribute Authority Issuing Distribution Point" -#define NID_id_aa_issuing_distribution_point 1307 -#define OBJ_id_aa_issuing_distribution_point OBJ_id_ce,63L - -#define SN_issued_on_behalf_of "issuedOnBehalfOf" -#define LN_issued_on_behalf_of "X509v3 Issued On Behalf Of" -#define NID_issued_on_behalf_of 1308 -#define OBJ_issued_on_behalf_of OBJ_id_ce,64L - -#define SN_single_use "singleUse" -#define LN_single_use "X509v3 Single Use" -#define NID_single_use 1309 -#define OBJ_single_use OBJ_id_ce,65L - -#define SN_group_ac "groupAC" -#define LN_group_ac "X509v3 Group Attribute Certificate" -#define NID_group_ac 1310 -#define OBJ_group_ac OBJ_id_ce,66L - -#define SN_allowed_attribute_assignments "allowedAttributeAssignments" -#define LN_allowed_attribute_assignments "X509v3 Allowed Attribute Assignments" -#define NID_allowed_attribute_assignments 1311 -#define OBJ_allowed_attribute_assignments OBJ_id_ce,67L - -#define SN_attribute_mappings "attributeMappings" -#define LN_attribute_mappings "X509v3 Attribute Mappings" -#define NID_attribute_mappings 1312 -#define OBJ_attribute_mappings OBJ_id_ce,68L - -#define SN_holder_name_constraints "holderNameConstraints" -#define LN_holder_name_constraints "X509v3 Holder Name Constraints" -#define NID_holder_name_constraints 1313 -#define OBJ_holder_name_constraints OBJ_id_ce,69L - -#define SN_authorization_validation "authorizationValidation" -#define LN_authorization_validation "X509v3 Authorization Validation" -#define NID_authorization_validation 1314 -#define OBJ_authorization_validation OBJ_id_ce,70L - -#define SN_prot_restrict "protRestrict" -#define LN_prot_restrict "X509v3 Protocol Restriction" -#define NID_prot_restrict 1315 -#define OBJ_prot_restrict OBJ_id_ce,71L - -#define SN_subject_alt_public_key_info "subjectAltPublicKeyInfo" -#define LN_subject_alt_public_key_info "X509v3 Subject Alternative Public Key Info" -#define NID_subject_alt_public_key_info 1316 -#define OBJ_subject_alt_public_key_info OBJ_id_ce,72L - -#define SN_alt_signature_algorithm "altSignatureAlgorithm" -#define LN_alt_signature_algorithm "X509v3 Alternative Signature Algorithm" -#define NID_alt_signature_algorithm 1317 -#define OBJ_alt_signature_algorithm OBJ_id_ce,73L - -#define SN_alt_signature_value "altSignatureValue" -#define LN_alt_signature_value "X509v3 Alternative Signature Value" -#define NID_alt_signature_value 1318 -#define OBJ_alt_signature_value OBJ_id_ce,74L - -#define SN_associated_information "associatedInformation" -#define LN_associated_information "X509v3 Associated Information" -#define NID_associated_information 1319 -#define OBJ_associated_information OBJ_id_ce,75L - -#define SN_anyExtendedKeyUsage "anyExtendedKeyUsage" -#define LN_anyExtendedKeyUsage "Any Extended Key Usage" -#define NID_anyExtendedKeyUsage 910 -#define OBJ_anyExtendedKeyUsage OBJ_ext_key_usage,0L - -#define SN_netscape "Netscape" -#define LN_netscape "Netscape Communications Corp." -#define NID_netscape 57 -#define OBJ_netscape 2L,16L,840L,1L,113730L - -#define SN_netscape_cert_extension "nsCertExt" -#define LN_netscape_cert_extension "Netscape Certificate Extension" -#define NID_netscape_cert_extension 58 -#define OBJ_netscape_cert_extension OBJ_netscape,1L - -#define SN_netscape_data_type "nsDataType" -#define LN_netscape_data_type "Netscape Data Type" -#define NID_netscape_data_type 59 -#define OBJ_netscape_data_type OBJ_netscape,2L - -#define SN_netscape_cert_type "nsCertType" -#define LN_netscape_cert_type "Netscape Cert Type" -#define NID_netscape_cert_type 71 -#define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L - -#define SN_netscape_base_url "nsBaseUrl" -#define LN_netscape_base_url "Netscape Base Url" -#define NID_netscape_base_url 72 -#define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L - -#define SN_netscape_revocation_url "nsRevocationUrl" -#define LN_netscape_revocation_url "Netscape Revocation Url" -#define NID_netscape_revocation_url 73 -#define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L - -#define SN_netscape_ca_revocation_url "nsCaRevocationUrl" -#define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" -#define NID_netscape_ca_revocation_url 74 -#define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L - -#define SN_netscape_renewal_url "nsRenewalUrl" -#define LN_netscape_renewal_url "Netscape Renewal Url" -#define NID_netscape_renewal_url 75 -#define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L - -#define SN_netscape_ca_policy_url "nsCaPolicyUrl" -#define LN_netscape_ca_policy_url "Netscape CA Policy Url" -#define NID_netscape_ca_policy_url 76 -#define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L - -#define SN_netscape_ssl_server_name "nsSslServerName" -#define LN_netscape_ssl_server_name "Netscape SSL Server Name" -#define NID_netscape_ssl_server_name 77 -#define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L - -#define SN_netscape_comment "nsComment" -#define LN_netscape_comment "Netscape Comment" -#define NID_netscape_comment 78 -#define OBJ_netscape_comment OBJ_netscape_cert_extension,13L - -#define SN_netscape_cert_sequence "nsCertSequence" -#define LN_netscape_cert_sequence "Netscape Certificate Sequence" -#define NID_netscape_cert_sequence 79 -#define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L - -#define SN_ns_sgc "nsSGC" -#define LN_ns_sgc "Netscape Server Gated Crypto" -#define NID_ns_sgc 139 -#define OBJ_ns_sgc OBJ_netscape,4L,1L - -#define SN_org "ORG" -#define LN_org "org" -#define NID_org 379 -#define OBJ_org OBJ_iso,3L - -#define SN_dod "DOD" -#define LN_dod "dod" -#define NID_dod 380 -#define OBJ_dod OBJ_org,6L - -#define SN_iana "IANA" -#define LN_iana "iana" -#define NID_iana 381 -#define OBJ_iana OBJ_dod,1L - -#define OBJ_internet OBJ_iana - -#define SN_Directory "directory" -#define LN_Directory "Directory" -#define NID_Directory 382 -#define OBJ_Directory OBJ_internet,1L - -#define SN_Management "mgmt" -#define LN_Management "Management" -#define NID_Management 383 -#define OBJ_Management OBJ_internet,2L - -#define SN_Experimental "experimental" -#define LN_Experimental "Experimental" -#define NID_Experimental 384 -#define OBJ_Experimental OBJ_internet,3L - -#define SN_Private "private" -#define LN_Private "Private" -#define NID_Private 385 -#define OBJ_Private OBJ_internet,4L - -#define SN_Security "security" -#define LN_Security "Security" -#define NID_Security 386 -#define OBJ_Security OBJ_internet,5L - -#define SN_SNMPv2 "snmpv2" -#define LN_SNMPv2 "SNMPv2" -#define NID_SNMPv2 387 -#define OBJ_SNMPv2 OBJ_internet,6L - -#define LN_Mail "Mail" -#define NID_Mail 388 -#define OBJ_Mail OBJ_internet,7L - -#define SN_Enterprises "enterprises" -#define LN_Enterprises "Enterprises" -#define NID_Enterprises 389 -#define OBJ_Enterprises OBJ_Private,1L - -#define SN_dcObject "dcobject" -#define LN_dcObject "dcObject" -#define NID_dcObject 390 -#define OBJ_dcObject OBJ_Enterprises,1466L,344L - -#define SN_mime_mhs "mime-mhs" -#define LN_mime_mhs "MIME MHS" -#define NID_mime_mhs 504 -#define OBJ_mime_mhs OBJ_Mail,1L - -#define SN_mime_mhs_headings "mime-mhs-headings" -#define LN_mime_mhs_headings "mime-mhs-headings" -#define NID_mime_mhs_headings 505 -#define OBJ_mime_mhs_headings OBJ_mime_mhs,1L - -#define SN_mime_mhs_bodies "mime-mhs-bodies" -#define LN_mime_mhs_bodies "mime-mhs-bodies" -#define NID_mime_mhs_bodies 506 -#define OBJ_mime_mhs_bodies OBJ_mime_mhs,2L - -#define SN_id_hex_partial_message "id-hex-partial-message" -#define LN_id_hex_partial_message "id-hex-partial-message" -#define NID_id_hex_partial_message 507 -#define OBJ_id_hex_partial_message OBJ_mime_mhs_headings,1L - -#define SN_id_hex_multipart_message "id-hex-multipart-message" -#define LN_id_hex_multipart_message "id-hex-multipart-message" -#define NID_id_hex_multipart_message 508 -#define OBJ_id_hex_multipart_message OBJ_mime_mhs_headings,2L - -#define SN_zlib_compression "ZLIB" -#define LN_zlib_compression "zlib compression" -#define NID_zlib_compression 125 -#define OBJ_zlib_compression OBJ_id_smime_alg,8L - -#define OBJ_csor 2L,16L,840L,1L,101L,3L - -#define OBJ_nistAlgorithms OBJ_csor,4L - -#define OBJ_aes OBJ_nistAlgorithms,1L - -#define SN_aes_128_ecb "AES-128-ECB" -#define LN_aes_128_ecb "aes-128-ecb" -#define NID_aes_128_ecb 418 -#define OBJ_aes_128_ecb OBJ_aes,1L - -#define SN_aes_128_cbc "AES-128-CBC" -#define LN_aes_128_cbc "aes-128-cbc" -#define NID_aes_128_cbc 419 -#define OBJ_aes_128_cbc OBJ_aes,2L - -#define SN_aes_128_ofb128 "AES-128-OFB" -#define LN_aes_128_ofb128 "aes-128-ofb" -#define NID_aes_128_ofb128 420 -#define OBJ_aes_128_ofb128 OBJ_aes,3L - -#define SN_aes_128_cfb128 "AES-128-CFB" -#define LN_aes_128_cfb128 "aes-128-cfb" -#define NID_aes_128_cfb128 421 -#define OBJ_aes_128_cfb128 OBJ_aes,4L - -#define SN_id_aes128_wrap "id-aes128-wrap" -#define NID_id_aes128_wrap 788 -#define OBJ_id_aes128_wrap OBJ_aes,5L - -#define SN_aes_128_gcm "id-aes128-GCM" -#define LN_aes_128_gcm "aes-128-gcm" -#define NID_aes_128_gcm 895 -#define OBJ_aes_128_gcm OBJ_aes,6L - -#define SN_aes_128_ccm "id-aes128-CCM" -#define LN_aes_128_ccm "aes-128-ccm" -#define NID_aes_128_ccm 896 -#define OBJ_aes_128_ccm OBJ_aes,7L - -#define SN_id_aes128_wrap_pad "id-aes128-wrap-pad" -#define NID_id_aes128_wrap_pad 897 -#define OBJ_id_aes128_wrap_pad OBJ_aes,8L - -#define SN_aes_192_ecb "AES-192-ECB" -#define LN_aes_192_ecb "aes-192-ecb" -#define NID_aes_192_ecb 422 -#define OBJ_aes_192_ecb OBJ_aes,21L - -#define SN_aes_192_cbc "AES-192-CBC" -#define LN_aes_192_cbc "aes-192-cbc" -#define NID_aes_192_cbc 423 -#define OBJ_aes_192_cbc OBJ_aes,22L - -#define SN_aes_192_ofb128 "AES-192-OFB" -#define LN_aes_192_ofb128 "aes-192-ofb" -#define NID_aes_192_ofb128 424 -#define OBJ_aes_192_ofb128 OBJ_aes,23L - -#define SN_aes_192_cfb128 "AES-192-CFB" -#define LN_aes_192_cfb128 "aes-192-cfb" -#define NID_aes_192_cfb128 425 -#define OBJ_aes_192_cfb128 OBJ_aes,24L - -#define SN_id_aes192_wrap "id-aes192-wrap" -#define NID_id_aes192_wrap 789 -#define OBJ_id_aes192_wrap OBJ_aes,25L - -#define SN_aes_192_gcm "id-aes192-GCM" -#define LN_aes_192_gcm "aes-192-gcm" -#define NID_aes_192_gcm 898 -#define OBJ_aes_192_gcm OBJ_aes,26L - -#define SN_aes_192_ccm "id-aes192-CCM" -#define LN_aes_192_ccm "aes-192-ccm" -#define NID_aes_192_ccm 899 -#define OBJ_aes_192_ccm OBJ_aes,27L - -#define SN_id_aes192_wrap_pad "id-aes192-wrap-pad" -#define NID_id_aes192_wrap_pad 900 -#define OBJ_id_aes192_wrap_pad OBJ_aes,28L - -#define SN_aes_256_ecb "AES-256-ECB" -#define LN_aes_256_ecb "aes-256-ecb" -#define NID_aes_256_ecb 426 -#define OBJ_aes_256_ecb OBJ_aes,41L - -#define SN_aes_256_cbc "AES-256-CBC" -#define LN_aes_256_cbc "aes-256-cbc" -#define NID_aes_256_cbc 427 -#define OBJ_aes_256_cbc OBJ_aes,42L - -#define SN_aes_256_ofb128 "AES-256-OFB" -#define LN_aes_256_ofb128 "aes-256-ofb" -#define NID_aes_256_ofb128 428 -#define OBJ_aes_256_ofb128 OBJ_aes,43L - -#define SN_aes_256_cfb128 "AES-256-CFB" -#define LN_aes_256_cfb128 "aes-256-cfb" -#define NID_aes_256_cfb128 429 -#define OBJ_aes_256_cfb128 OBJ_aes,44L - -#define SN_id_aes256_wrap "id-aes256-wrap" -#define NID_id_aes256_wrap 790 -#define OBJ_id_aes256_wrap OBJ_aes,45L - -#define SN_aes_256_gcm "id-aes256-GCM" -#define LN_aes_256_gcm "aes-256-gcm" -#define NID_aes_256_gcm 901 -#define OBJ_aes_256_gcm OBJ_aes,46L - -#define SN_aes_256_ccm "id-aes256-CCM" -#define LN_aes_256_ccm "aes-256-ccm" -#define NID_aes_256_ccm 902 -#define OBJ_aes_256_ccm OBJ_aes,47L - -#define SN_id_aes256_wrap_pad "id-aes256-wrap-pad" -#define NID_id_aes256_wrap_pad 903 -#define OBJ_id_aes256_wrap_pad OBJ_aes,48L - -#define SN_aes_128_xts "AES-128-XTS" -#define LN_aes_128_xts "aes-128-xts" -#define NID_aes_128_xts 913 -#define OBJ_aes_128_xts OBJ_ieee_siswg,0L,1L,1L - -#define SN_aes_256_xts "AES-256-XTS" -#define LN_aes_256_xts "aes-256-xts" -#define NID_aes_256_xts 914 -#define OBJ_aes_256_xts OBJ_ieee_siswg,0L,1L,2L - -#define SN_aes_128_cfb1 "AES-128-CFB1" -#define LN_aes_128_cfb1 "aes-128-cfb1" -#define NID_aes_128_cfb1 650 - -#define SN_aes_192_cfb1 "AES-192-CFB1" -#define LN_aes_192_cfb1 "aes-192-cfb1" -#define NID_aes_192_cfb1 651 - -#define SN_aes_256_cfb1 "AES-256-CFB1" -#define LN_aes_256_cfb1 "aes-256-cfb1" -#define NID_aes_256_cfb1 652 - -#define SN_aes_128_cfb8 "AES-128-CFB8" -#define LN_aes_128_cfb8 "aes-128-cfb8" -#define NID_aes_128_cfb8 653 - -#define SN_aes_192_cfb8 "AES-192-CFB8" -#define LN_aes_192_cfb8 "aes-192-cfb8" -#define NID_aes_192_cfb8 654 - -#define SN_aes_256_cfb8 "AES-256-CFB8" -#define LN_aes_256_cfb8 "aes-256-cfb8" -#define NID_aes_256_cfb8 655 - -#define SN_aes_128_ctr "AES-128-CTR" -#define LN_aes_128_ctr "aes-128-ctr" -#define NID_aes_128_ctr 904 - -#define SN_aes_192_ctr "AES-192-CTR" -#define LN_aes_192_ctr "aes-192-ctr" -#define NID_aes_192_ctr 905 - -#define SN_aes_256_ctr "AES-256-CTR" -#define LN_aes_256_ctr "aes-256-ctr" -#define NID_aes_256_ctr 906 - -#define SN_aes_128_ocb "AES-128-OCB" -#define LN_aes_128_ocb "aes-128-ocb" -#define NID_aes_128_ocb 958 - -#define SN_aes_192_ocb "AES-192-OCB" -#define LN_aes_192_ocb "aes-192-ocb" -#define NID_aes_192_ocb 959 - -#define SN_aes_256_ocb "AES-256-OCB" -#define LN_aes_256_ocb "aes-256-ocb" -#define NID_aes_256_ocb 960 - -#define SN_des_cfb1 "DES-CFB1" -#define LN_des_cfb1 "des-cfb1" -#define NID_des_cfb1 656 - -#define SN_des_cfb8 "DES-CFB8" -#define LN_des_cfb8 "des-cfb8" -#define NID_des_cfb8 657 - -#define SN_des_ede3_cfb1 "DES-EDE3-CFB1" -#define LN_des_ede3_cfb1 "des-ede3-cfb1" -#define NID_des_ede3_cfb1 658 - -#define SN_des_ede3_cfb8 "DES-EDE3-CFB8" -#define LN_des_ede3_cfb8 "des-ede3-cfb8" -#define NID_des_ede3_cfb8 659 - -#define OBJ_nist_hashalgs OBJ_nistAlgorithms,2L - -#define SN_sha256 "SHA256" -#define LN_sha256 "sha256" -#define NID_sha256 672 -#define OBJ_sha256 OBJ_nist_hashalgs,1L - -#define SN_sha384 "SHA384" -#define LN_sha384 "sha384" -#define NID_sha384 673 -#define OBJ_sha384 OBJ_nist_hashalgs,2L - -#define SN_sha512 "SHA512" -#define LN_sha512 "sha512" -#define NID_sha512 674 -#define OBJ_sha512 OBJ_nist_hashalgs,3L - -#define SN_sha224 "SHA224" -#define LN_sha224 "sha224" -#define NID_sha224 675 -#define OBJ_sha224 OBJ_nist_hashalgs,4L - -#define SN_sha512_224 "SHA512-224" -#define LN_sha512_224 "sha512-224" -#define NID_sha512_224 1094 -#define OBJ_sha512_224 OBJ_nist_hashalgs,5L - -#define SN_sha512_256 "SHA512-256" -#define LN_sha512_256 "sha512-256" -#define NID_sha512_256 1095 -#define OBJ_sha512_256 OBJ_nist_hashalgs,6L - -#define SN_sha3_224 "SHA3-224" -#define LN_sha3_224 "sha3-224" -#define NID_sha3_224 1096 -#define OBJ_sha3_224 OBJ_nist_hashalgs,7L - -#define SN_sha3_256 "SHA3-256" -#define LN_sha3_256 "sha3-256" -#define NID_sha3_256 1097 -#define OBJ_sha3_256 OBJ_nist_hashalgs,8L - -#define SN_sha3_384 "SHA3-384" -#define LN_sha3_384 "sha3-384" -#define NID_sha3_384 1098 -#define OBJ_sha3_384 OBJ_nist_hashalgs,9L - -#define SN_sha3_512 "SHA3-512" -#define LN_sha3_512 "sha3-512" -#define NID_sha3_512 1099 -#define OBJ_sha3_512 OBJ_nist_hashalgs,10L - -#define SN_shake128 "SHAKE128" -#define LN_shake128 "shake128" -#define NID_shake128 1100 -#define OBJ_shake128 OBJ_nist_hashalgs,11L - -#define SN_shake256 "SHAKE256" -#define LN_shake256 "shake256" -#define NID_shake256 1101 -#define OBJ_shake256 OBJ_nist_hashalgs,12L - -#define SN_hmac_sha3_224 "id-hmacWithSHA3-224" -#define LN_hmac_sha3_224 "hmac-sha3-224" -#define NID_hmac_sha3_224 1102 -#define OBJ_hmac_sha3_224 OBJ_nist_hashalgs,13L - -#define SN_hmac_sha3_256 "id-hmacWithSHA3-256" -#define LN_hmac_sha3_256 "hmac-sha3-256" -#define NID_hmac_sha3_256 1103 -#define OBJ_hmac_sha3_256 OBJ_nist_hashalgs,14L - -#define SN_hmac_sha3_384 "id-hmacWithSHA3-384" -#define LN_hmac_sha3_384 "hmac-sha3-384" -#define NID_hmac_sha3_384 1104 -#define OBJ_hmac_sha3_384 OBJ_nist_hashalgs,15L - -#define SN_hmac_sha3_512 "id-hmacWithSHA3-512" -#define LN_hmac_sha3_512 "hmac-sha3-512" -#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" -#define NID_dsa_with_SHA224 802 -#define OBJ_dsa_with_SHA224 OBJ_dsa_with_sha2,1L - -#define SN_dsa_with_SHA256 "dsa_with_SHA256" -#define NID_dsa_with_SHA256 803 -#define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L - -#define OBJ_sigAlgs OBJ_nistAlgorithms,3L - -#define SN_dsa_with_SHA384 "id-dsa-with-sha384" -#define LN_dsa_with_SHA384 "dsa_with_SHA384" -#define NID_dsa_with_SHA384 1106 -#define OBJ_dsa_with_SHA384 OBJ_sigAlgs,3L - -#define SN_dsa_with_SHA512 "id-dsa-with-sha512" -#define LN_dsa_with_SHA512 "dsa_with_SHA512" -#define NID_dsa_with_SHA512 1107 -#define OBJ_dsa_with_SHA512 OBJ_sigAlgs,4L - -#define SN_dsa_with_SHA3_224 "id-dsa-with-sha3-224" -#define LN_dsa_with_SHA3_224 "dsa_with_SHA3-224" -#define NID_dsa_with_SHA3_224 1108 -#define OBJ_dsa_with_SHA3_224 OBJ_sigAlgs,5L - -#define SN_dsa_with_SHA3_256 "id-dsa-with-sha3-256" -#define LN_dsa_with_SHA3_256 "dsa_with_SHA3-256" -#define NID_dsa_with_SHA3_256 1109 -#define OBJ_dsa_with_SHA3_256 OBJ_sigAlgs,6L - -#define SN_dsa_with_SHA3_384 "id-dsa-with-sha3-384" -#define LN_dsa_with_SHA3_384 "dsa_with_SHA3-384" -#define NID_dsa_with_SHA3_384 1110 -#define OBJ_dsa_with_SHA3_384 OBJ_sigAlgs,7L - -#define SN_dsa_with_SHA3_512 "id-dsa-with-sha3-512" -#define LN_dsa_with_SHA3_512 "dsa_with_SHA3-512" -#define NID_dsa_with_SHA3_512 1111 -#define OBJ_dsa_with_SHA3_512 OBJ_sigAlgs,8L - -#define SN_ecdsa_with_SHA3_224 "id-ecdsa-with-sha3-224" -#define LN_ecdsa_with_SHA3_224 "ecdsa_with_SHA3-224" -#define NID_ecdsa_with_SHA3_224 1112 -#define OBJ_ecdsa_with_SHA3_224 OBJ_sigAlgs,9L - -#define SN_ecdsa_with_SHA3_256 "id-ecdsa-with-sha3-256" -#define LN_ecdsa_with_SHA3_256 "ecdsa_with_SHA3-256" -#define NID_ecdsa_with_SHA3_256 1113 -#define OBJ_ecdsa_with_SHA3_256 OBJ_sigAlgs,10L - -#define SN_ecdsa_with_SHA3_384 "id-ecdsa-with-sha3-384" -#define LN_ecdsa_with_SHA3_384 "ecdsa_with_SHA3-384" -#define NID_ecdsa_with_SHA3_384 1114 -#define OBJ_ecdsa_with_SHA3_384 OBJ_sigAlgs,11L - -#define SN_ecdsa_with_SHA3_512 "id-ecdsa-with-sha3-512" -#define LN_ecdsa_with_SHA3_512 "ecdsa_with_SHA3-512" -#define NID_ecdsa_with_SHA3_512 1115 -#define OBJ_ecdsa_with_SHA3_512 OBJ_sigAlgs,12L - -#define SN_RSA_SHA3_224 "id-rsassa-pkcs1-v1_5-with-sha3-224" -#define LN_RSA_SHA3_224 "RSA-SHA3-224" -#define NID_RSA_SHA3_224 1116 -#define OBJ_RSA_SHA3_224 OBJ_sigAlgs,13L - -#define SN_RSA_SHA3_256 "id-rsassa-pkcs1-v1_5-with-sha3-256" -#define LN_RSA_SHA3_256 "RSA-SHA3-256" -#define NID_RSA_SHA3_256 1117 -#define OBJ_RSA_SHA3_256 OBJ_sigAlgs,14L - -#define SN_RSA_SHA3_384 "id-rsassa-pkcs1-v1_5-with-sha3-384" -#define LN_RSA_SHA3_384 "RSA-SHA3-384" -#define NID_RSA_SHA3_384 1118 -#define OBJ_RSA_SHA3_384 OBJ_sigAlgs,15L - -#define SN_RSA_SHA3_512 "id-rsassa-pkcs1-v1_5-with-sha3-512" -#define LN_RSA_SHA3_512 "RSA-SHA3-512" -#define NID_RSA_SHA3_512 1119 -#define OBJ_RSA_SHA3_512 OBJ_sigAlgs,16L - -#define SN_hold_instruction_code "holdInstructionCode" -#define LN_hold_instruction_code "Hold Instruction Code" -#define NID_hold_instruction_code 430 -#define OBJ_hold_instruction_code OBJ_id_ce,23L - -#define OBJ_holdInstruction OBJ_X9_57,2L - -#define SN_hold_instruction_none "holdInstructionNone" -#define LN_hold_instruction_none "Hold Instruction None" -#define NID_hold_instruction_none 431 -#define OBJ_hold_instruction_none OBJ_holdInstruction,1L - -#define SN_hold_instruction_call_issuer "holdInstructionCallIssuer" -#define LN_hold_instruction_call_issuer "Hold Instruction Call Issuer" -#define NID_hold_instruction_call_issuer 432 -#define OBJ_hold_instruction_call_issuer OBJ_holdInstruction,2L - -#define SN_hold_instruction_reject "holdInstructionReject" -#define LN_hold_instruction_reject "Hold Instruction Reject" -#define NID_hold_instruction_reject 433 -#define OBJ_hold_instruction_reject OBJ_holdInstruction,3L - -#define SN_itu_t_identified_organization "itu-t-identified-organization" -#define NID_itu_t_identified_organization 1264 -#define OBJ_itu_t_identified_organization OBJ_itu_t,4L - -#define SN_etsi "etsi" -#define NID_etsi 1265 -#define OBJ_etsi OBJ_itu_t_identified_organization,0L - -#define SN_electronic_signature_standard "electronic-signature-standard" -#define NID_electronic_signature_standard 1266 -#define OBJ_electronic_signature_standard OBJ_etsi,1733L - -#define SN_ess_attributes "ess-attributes" -#define NID_ess_attributes 1267 -#define OBJ_ess_attributes OBJ_electronic_signature_standard,2L - -#define SN_id_aa_ets_mimeType "id-aa-ets-mimeType" -#define NID_id_aa_ets_mimeType 1268 -#define OBJ_id_aa_ets_mimeType OBJ_ess_attributes,1L - -#define SN_id_aa_ets_longTermValidation "id-aa-ets-longTermValidation" -#define NID_id_aa_ets_longTermValidation 1269 -#define OBJ_id_aa_ets_longTermValidation OBJ_ess_attributes,2L - -#define SN_id_aa_ets_SignaturePolicyDocument "id-aa-ets-SignaturePolicyDocument" -#define NID_id_aa_ets_SignaturePolicyDocument 1270 -#define OBJ_id_aa_ets_SignaturePolicyDocument OBJ_ess_attributes,3L - -#define SN_id_aa_ets_archiveTimestampV3 "id-aa-ets-archiveTimestampV3" -#define NID_id_aa_ets_archiveTimestampV3 1271 -#define OBJ_id_aa_ets_archiveTimestampV3 OBJ_ess_attributes,4L - -#define SN_id_aa_ATSHashIndex "id-aa-ATSHashIndex" -#define NID_id_aa_ATSHashIndex 1272 -#define OBJ_id_aa_ATSHashIndex OBJ_ess_attributes,5L - -#define SN_cades "cades" -#define NID_cades 1273 -#define OBJ_cades OBJ_etsi,19122L - -#define SN_cades_attributes "cades-attributes" -#define NID_cades_attributes 1274 -#define OBJ_cades_attributes OBJ_cades,1L - -#define SN_id_aa_ets_signerAttrV2 "id-aa-ets-signerAttrV2" -#define NID_id_aa_ets_signerAttrV2 1275 -#define OBJ_id_aa_ets_signerAttrV2 OBJ_cades_attributes,1L - -#define SN_id_aa_ets_sigPolicyStore "id-aa-ets-sigPolicyStore" -#define NID_id_aa_ets_sigPolicyStore 1276 -#define OBJ_id_aa_ets_sigPolicyStore OBJ_cades_attributes,3L - -#define SN_id_aa_ATSHashIndex_v2 "id-aa-ATSHashIndex-v2" -#define NID_id_aa_ATSHashIndex_v2 1277 -#define OBJ_id_aa_ATSHashIndex_v2 OBJ_cades_attributes,4L - -#define SN_id_aa_ATSHashIndex_v3 "id-aa-ATSHashIndex-v3" -#define NID_id_aa_ATSHashIndex_v3 1278 -#define OBJ_id_aa_ATSHashIndex_v3 OBJ_cades_attributes,5L - -#define SN_signedAssertion "signedAssertion" -#define NID_signedAssertion 1279 -#define OBJ_signedAssertion OBJ_cades_attributes,6L - -#define SN_data "data" -#define NID_data 434 -#define OBJ_data OBJ_itu_t,9L - -#define SN_pss "pss" -#define NID_pss 435 -#define OBJ_pss OBJ_data,2342L - -#define SN_ucl "ucl" -#define NID_ucl 436 -#define OBJ_ucl OBJ_pss,19200300L - -#define SN_pilot "pilot" -#define NID_pilot 437 -#define OBJ_pilot OBJ_ucl,100L - -#define LN_pilotAttributeType "pilotAttributeType" -#define NID_pilotAttributeType 438 -#define OBJ_pilotAttributeType OBJ_pilot,1L - -#define LN_pilotAttributeSyntax "pilotAttributeSyntax" -#define NID_pilotAttributeSyntax 439 -#define OBJ_pilotAttributeSyntax OBJ_pilot,3L - -#define LN_pilotObjectClass "pilotObjectClass" -#define NID_pilotObjectClass 440 -#define OBJ_pilotObjectClass OBJ_pilot,4L - -#define LN_pilotGroups "pilotGroups" -#define NID_pilotGroups 441 -#define OBJ_pilotGroups OBJ_pilot,10L - -#define LN_iA5StringSyntax "iA5StringSyntax" -#define NID_iA5StringSyntax 442 -#define OBJ_iA5StringSyntax OBJ_pilotAttributeSyntax,4L - -#define LN_caseIgnoreIA5StringSyntax "caseIgnoreIA5StringSyntax" -#define NID_caseIgnoreIA5StringSyntax 443 -#define OBJ_caseIgnoreIA5StringSyntax OBJ_pilotAttributeSyntax,5L - -#define LN_pilotObject "pilotObject" -#define NID_pilotObject 444 -#define OBJ_pilotObject OBJ_pilotObjectClass,3L - -#define LN_pilotPerson "pilotPerson" -#define NID_pilotPerson 445 -#define OBJ_pilotPerson OBJ_pilotObjectClass,4L - -#define SN_account "account" -#define NID_account 446 -#define OBJ_account OBJ_pilotObjectClass,5L - -#define SN_document "document" -#define NID_document 447 -#define OBJ_document OBJ_pilotObjectClass,6L - -#define SN_room "room" -#define NID_room 448 -#define OBJ_room OBJ_pilotObjectClass,7L - -#define LN_documentSeries "documentSeries" -#define NID_documentSeries 449 -#define OBJ_documentSeries OBJ_pilotObjectClass,9L - -#define SN_Domain "domain" -#define LN_Domain "Domain" -#define NID_Domain 392 -#define OBJ_Domain OBJ_pilotObjectClass,13L - -#define LN_rFC822localPart "rFC822localPart" -#define NID_rFC822localPart 450 -#define OBJ_rFC822localPart OBJ_pilotObjectClass,14L - -#define LN_dNSDomain "dNSDomain" -#define NID_dNSDomain 451 -#define OBJ_dNSDomain OBJ_pilotObjectClass,15L - -#define LN_domainRelatedObject "domainRelatedObject" -#define NID_domainRelatedObject 452 -#define OBJ_domainRelatedObject OBJ_pilotObjectClass,17L - -#define LN_friendlyCountry "friendlyCountry" -#define NID_friendlyCountry 453 -#define OBJ_friendlyCountry OBJ_pilotObjectClass,18L - -#define LN_simpleSecurityObject "simpleSecurityObject" -#define NID_simpleSecurityObject 454 -#define OBJ_simpleSecurityObject OBJ_pilotObjectClass,19L - -#define LN_pilotOrganization "pilotOrganization" -#define NID_pilotOrganization 455 -#define OBJ_pilotOrganization OBJ_pilotObjectClass,20L - -#define LN_pilotDSA "pilotDSA" -#define NID_pilotDSA 456 -#define OBJ_pilotDSA OBJ_pilotObjectClass,21L - -#define LN_qualityLabelledData "qualityLabelledData" -#define NID_qualityLabelledData 457 -#define OBJ_qualityLabelledData OBJ_pilotObjectClass,22L - -#define SN_userId "UID" -#define LN_userId "userId" -#define NID_userId 458 -#define OBJ_userId OBJ_pilotAttributeType,1L - -#define LN_textEncodedORAddress "textEncodedORAddress" -#define NID_textEncodedORAddress 459 -#define OBJ_textEncodedORAddress OBJ_pilotAttributeType,2L - -#define SN_rfc822Mailbox "mail" -#define LN_rfc822Mailbox "rfc822Mailbox" -#define NID_rfc822Mailbox 460 -#define OBJ_rfc822Mailbox OBJ_pilotAttributeType,3L - -#define SN_info "info" -#define NID_info 461 -#define OBJ_info OBJ_pilotAttributeType,4L - -#define LN_favouriteDrink "favouriteDrink" -#define NID_favouriteDrink 462 -#define OBJ_favouriteDrink OBJ_pilotAttributeType,5L - -#define LN_roomNumber "roomNumber" -#define NID_roomNumber 463 -#define OBJ_roomNumber OBJ_pilotAttributeType,6L - -#define SN_photo "photo" -#define NID_photo 464 -#define OBJ_photo OBJ_pilotAttributeType,7L - -#define LN_userClass "userClass" -#define NID_userClass 465 -#define OBJ_userClass OBJ_pilotAttributeType,8L - -#define SN_host "host" -#define NID_host 466 -#define OBJ_host OBJ_pilotAttributeType,9L - -#define SN_manager "manager" -#define NID_manager 467 -#define OBJ_manager OBJ_pilotAttributeType,10L - -#define LN_documentIdentifier "documentIdentifier" -#define NID_documentIdentifier 468 -#define OBJ_documentIdentifier OBJ_pilotAttributeType,11L - -#define LN_documentTitle "documentTitle" -#define NID_documentTitle 469 -#define OBJ_documentTitle OBJ_pilotAttributeType,12L - -#define LN_documentVersion "documentVersion" -#define NID_documentVersion 470 -#define OBJ_documentVersion OBJ_pilotAttributeType,13L - -#define LN_documentAuthor "documentAuthor" -#define NID_documentAuthor 471 -#define OBJ_documentAuthor OBJ_pilotAttributeType,14L - -#define LN_documentLocation "documentLocation" -#define NID_documentLocation 472 -#define OBJ_documentLocation OBJ_pilotAttributeType,15L - -#define LN_homeTelephoneNumber "homeTelephoneNumber" -#define NID_homeTelephoneNumber 473 -#define OBJ_homeTelephoneNumber OBJ_pilotAttributeType,20L - -#define SN_secretary "secretary" -#define NID_secretary 474 -#define OBJ_secretary OBJ_pilotAttributeType,21L - -#define LN_otherMailbox "otherMailbox" -#define NID_otherMailbox 475 -#define OBJ_otherMailbox OBJ_pilotAttributeType,22L - -#define LN_lastModifiedTime "lastModifiedTime" -#define NID_lastModifiedTime 476 -#define OBJ_lastModifiedTime OBJ_pilotAttributeType,23L - -#define LN_lastModifiedBy "lastModifiedBy" -#define NID_lastModifiedBy 477 -#define OBJ_lastModifiedBy OBJ_pilotAttributeType,24L - -#define SN_domainComponent "DC" -#define LN_domainComponent "domainComponent" -#define NID_domainComponent 391 -#define OBJ_domainComponent OBJ_pilotAttributeType,25L - -#define LN_aRecord "aRecord" -#define NID_aRecord 478 -#define OBJ_aRecord OBJ_pilotAttributeType,26L - -#define LN_pilotAttributeType27 "pilotAttributeType27" -#define NID_pilotAttributeType27 479 -#define OBJ_pilotAttributeType27 OBJ_pilotAttributeType,27L - -#define LN_mXRecord "mXRecord" -#define NID_mXRecord 480 -#define OBJ_mXRecord OBJ_pilotAttributeType,28L - -#define LN_nSRecord "nSRecord" -#define NID_nSRecord 481 -#define OBJ_nSRecord OBJ_pilotAttributeType,29L - -#define LN_sOARecord "sOARecord" -#define NID_sOARecord 482 -#define OBJ_sOARecord OBJ_pilotAttributeType,30L - -#define LN_cNAMERecord "cNAMERecord" -#define NID_cNAMERecord 483 -#define OBJ_cNAMERecord OBJ_pilotAttributeType,31L - -#define LN_associatedDomain "associatedDomain" -#define NID_associatedDomain 484 -#define OBJ_associatedDomain OBJ_pilotAttributeType,37L - -#define LN_associatedName "associatedName" -#define NID_associatedName 485 -#define OBJ_associatedName OBJ_pilotAttributeType,38L - -#define LN_homePostalAddress "homePostalAddress" -#define NID_homePostalAddress 486 -#define OBJ_homePostalAddress OBJ_pilotAttributeType,39L - -#define LN_personalTitle "personalTitle" -#define NID_personalTitle 487 -#define OBJ_personalTitle OBJ_pilotAttributeType,40L - -#define LN_mobileTelephoneNumber "mobileTelephoneNumber" -#define NID_mobileTelephoneNumber 488 -#define OBJ_mobileTelephoneNumber OBJ_pilotAttributeType,41L - -#define LN_pagerTelephoneNumber "pagerTelephoneNumber" -#define NID_pagerTelephoneNumber 489 -#define OBJ_pagerTelephoneNumber OBJ_pilotAttributeType,42L - -#define LN_friendlyCountryName "friendlyCountryName" -#define NID_friendlyCountryName 490 -#define OBJ_friendlyCountryName OBJ_pilotAttributeType,43L - -#define SN_uniqueIdentifier "uid" -#define LN_uniqueIdentifier "uniqueIdentifier" -#define NID_uniqueIdentifier 102 -#define OBJ_uniqueIdentifier OBJ_pilotAttributeType,44L - -#define LN_organizationalStatus "organizationalStatus" -#define NID_organizationalStatus 491 -#define OBJ_organizationalStatus OBJ_pilotAttributeType,45L - -#define LN_janetMailbox "janetMailbox" -#define NID_janetMailbox 492 -#define OBJ_janetMailbox OBJ_pilotAttributeType,46L - -#define LN_mailPreferenceOption "mailPreferenceOption" -#define NID_mailPreferenceOption 493 -#define OBJ_mailPreferenceOption OBJ_pilotAttributeType,47L - -#define LN_buildingName "buildingName" -#define NID_buildingName 494 -#define OBJ_buildingName OBJ_pilotAttributeType,48L - -#define LN_dSAQuality "dSAQuality" -#define NID_dSAQuality 495 -#define OBJ_dSAQuality OBJ_pilotAttributeType,49L - -#define LN_singleLevelQuality "singleLevelQuality" -#define NID_singleLevelQuality 496 -#define OBJ_singleLevelQuality OBJ_pilotAttributeType,50L - -#define LN_subtreeMinimumQuality "subtreeMinimumQuality" -#define NID_subtreeMinimumQuality 497 -#define OBJ_subtreeMinimumQuality OBJ_pilotAttributeType,51L - -#define LN_subtreeMaximumQuality "subtreeMaximumQuality" -#define NID_subtreeMaximumQuality 498 -#define OBJ_subtreeMaximumQuality OBJ_pilotAttributeType,52L - -#define LN_personalSignature "personalSignature" -#define NID_personalSignature 499 -#define OBJ_personalSignature OBJ_pilotAttributeType,53L - -#define LN_dITRedirect "dITRedirect" -#define NID_dITRedirect 500 -#define OBJ_dITRedirect OBJ_pilotAttributeType,54L - -#define SN_audio "audio" -#define NID_audio 501 -#define OBJ_audio OBJ_pilotAttributeType,55L - -#define LN_documentPublisher "documentPublisher" -#define NID_documentPublisher 502 -#define OBJ_documentPublisher OBJ_pilotAttributeType,56L - -#define SN_id_set "id-set" -#define LN_id_set "Secure Electronic Transactions" -#define NID_id_set 512 -#define OBJ_id_set OBJ_international_organizations,42L - -#define SN_set_ctype "set-ctype" -#define LN_set_ctype "content types" -#define NID_set_ctype 513 -#define OBJ_set_ctype OBJ_id_set,0L - -#define SN_set_msgExt "set-msgExt" -#define LN_set_msgExt "message extensions" -#define NID_set_msgExt 514 -#define OBJ_set_msgExt OBJ_id_set,1L - -#define SN_set_attr "set-attr" -#define NID_set_attr 515 -#define OBJ_set_attr OBJ_id_set,3L - -#define SN_set_policy "set-policy" -#define NID_set_policy 516 -#define OBJ_set_policy OBJ_id_set,5L - -#define SN_set_certExt "set-certExt" -#define LN_set_certExt "certificate extensions" -#define NID_set_certExt 517 -#define OBJ_set_certExt OBJ_id_set,7L - -#define SN_set_brand "set-brand" -#define NID_set_brand 518 -#define OBJ_set_brand OBJ_id_set,8L - -#define SN_setct_PANData "setct-PANData" -#define NID_setct_PANData 519 -#define OBJ_setct_PANData OBJ_set_ctype,0L - -#define SN_setct_PANToken "setct-PANToken" -#define NID_setct_PANToken 520 -#define OBJ_setct_PANToken OBJ_set_ctype,1L - -#define SN_setct_PANOnly "setct-PANOnly" -#define NID_setct_PANOnly 521 -#define OBJ_setct_PANOnly OBJ_set_ctype,2L - -#define SN_setct_OIData "setct-OIData" -#define NID_setct_OIData 522 -#define OBJ_setct_OIData OBJ_set_ctype,3L - -#define SN_setct_PI "setct-PI" -#define NID_setct_PI 523 -#define OBJ_setct_PI OBJ_set_ctype,4L - -#define SN_setct_PIData "setct-PIData" -#define NID_setct_PIData 524 -#define OBJ_setct_PIData OBJ_set_ctype,5L - -#define SN_setct_PIDataUnsigned "setct-PIDataUnsigned" -#define NID_setct_PIDataUnsigned 525 -#define OBJ_setct_PIDataUnsigned OBJ_set_ctype,6L - -#define SN_setct_HODInput "setct-HODInput" -#define NID_setct_HODInput 526 -#define OBJ_setct_HODInput OBJ_set_ctype,7L - -#define SN_setct_AuthResBaggage "setct-AuthResBaggage" -#define NID_setct_AuthResBaggage 527 -#define OBJ_setct_AuthResBaggage OBJ_set_ctype,8L - -#define SN_setct_AuthRevReqBaggage "setct-AuthRevReqBaggage" -#define NID_setct_AuthRevReqBaggage 528 -#define OBJ_setct_AuthRevReqBaggage OBJ_set_ctype,9L - -#define SN_setct_AuthRevResBaggage "setct-AuthRevResBaggage" -#define NID_setct_AuthRevResBaggage 529 -#define OBJ_setct_AuthRevResBaggage OBJ_set_ctype,10L - -#define SN_setct_CapTokenSeq "setct-CapTokenSeq" -#define NID_setct_CapTokenSeq 530 -#define OBJ_setct_CapTokenSeq OBJ_set_ctype,11L - -#define SN_setct_PInitResData "setct-PInitResData" -#define NID_setct_PInitResData 531 -#define OBJ_setct_PInitResData OBJ_set_ctype,12L - -#define SN_setct_PI_TBS "setct-PI-TBS" -#define NID_setct_PI_TBS 532 -#define OBJ_setct_PI_TBS OBJ_set_ctype,13L - -#define SN_setct_PResData "setct-PResData" -#define NID_setct_PResData 533 -#define OBJ_setct_PResData OBJ_set_ctype,14L - -#define SN_setct_AuthReqTBS "setct-AuthReqTBS" -#define NID_setct_AuthReqTBS 534 -#define OBJ_setct_AuthReqTBS OBJ_set_ctype,16L - -#define SN_setct_AuthResTBS "setct-AuthResTBS" -#define NID_setct_AuthResTBS 535 -#define OBJ_setct_AuthResTBS OBJ_set_ctype,17L - -#define SN_setct_AuthResTBSX "setct-AuthResTBSX" -#define NID_setct_AuthResTBSX 536 -#define OBJ_setct_AuthResTBSX OBJ_set_ctype,18L - -#define SN_setct_AuthTokenTBS "setct-AuthTokenTBS" -#define NID_setct_AuthTokenTBS 537 -#define OBJ_setct_AuthTokenTBS OBJ_set_ctype,19L - -#define SN_setct_CapTokenData "setct-CapTokenData" -#define NID_setct_CapTokenData 538 -#define OBJ_setct_CapTokenData OBJ_set_ctype,20L - -#define SN_setct_CapTokenTBS "setct-CapTokenTBS" -#define NID_setct_CapTokenTBS 539 -#define OBJ_setct_CapTokenTBS OBJ_set_ctype,21L - -#define SN_setct_AcqCardCodeMsg "setct-AcqCardCodeMsg" -#define NID_setct_AcqCardCodeMsg 540 -#define OBJ_setct_AcqCardCodeMsg OBJ_set_ctype,22L - -#define SN_setct_AuthRevReqTBS "setct-AuthRevReqTBS" -#define NID_setct_AuthRevReqTBS 541 -#define OBJ_setct_AuthRevReqTBS OBJ_set_ctype,23L - -#define SN_setct_AuthRevResData "setct-AuthRevResData" -#define NID_setct_AuthRevResData 542 -#define OBJ_setct_AuthRevResData OBJ_set_ctype,24L - -#define SN_setct_AuthRevResTBS "setct-AuthRevResTBS" -#define NID_setct_AuthRevResTBS 543 -#define OBJ_setct_AuthRevResTBS OBJ_set_ctype,25L - -#define SN_setct_CapReqTBS "setct-CapReqTBS" -#define NID_setct_CapReqTBS 544 -#define OBJ_setct_CapReqTBS OBJ_set_ctype,26L - -#define SN_setct_CapReqTBSX "setct-CapReqTBSX" -#define NID_setct_CapReqTBSX 545 -#define OBJ_setct_CapReqTBSX OBJ_set_ctype,27L - -#define SN_setct_CapResData "setct-CapResData" -#define NID_setct_CapResData 546 -#define OBJ_setct_CapResData OBJ_set_ctype,28L - -#define SN_setct_CapRevReqTBS "setct-CapRevReqTBS" -#define NID_setct_CapRevReqTBS 547 -#define OBJ_setct_CapRevReqTBS OBJ_set_ctype,29L - -#define SN_setct_CapRevReqTBSX "setct-CapRevReqTBSX" -#define NID_setct_CapRevReqTBSX 548 -#define OBJ_setct_CapRevReqTBSX OBJ_set_ctype,30L - -#define SN_setct_CapRevResData "setct-CapRevResData" -#define NID_setct_CapRevResData 549 -#define OBJ_setct_CapRevResData OBJ_set_ctype,31L - -#define SN_setct_CredReqTBS "setct-CredReqTBS" -#define NID_setct_CredReqTBS 550 -#define OBJ_setct_CredReqTBS OBJ_set_ctype,32L - -#define SN_setct_CredReqTBSX "setct-CredReqTBSX" -#define NID_setct_CredReqTBSX 551 -#define OBJ_setct_CredReqTBSX OBJ_set_ctype,33L - -#define SN_setct_CredResData "setct-CredResData" -#define NID_setct_CredResData 552 -#define OBJ_setct_CredResData OBJ_set_ctype,34L - -#define SN_setct_CredRevReqTBS "setct-CredRevReqTBS" -#define NID_setct_CredRevReqTBS 553 -#define OBJ_setct_CredRevReqTBS OBJ_set_ctype,35L - -#define SN_setct_CredRevReqTBSX "setct-CredRevReqTBSX" -#define NID_setct_CredRevReqTBSX 554 -#define OBJ_setct_CredRevReqTBSX OBJ_set_ctype,36L - -#define SN_setct_CredRevResData "setct-CredRevResData" -#define NID_setct_CredRevResData 555 -#define OBJ_setct_CredRevResData OBJ_set_ctype,37L - -#define SN_setct_PCertReqData "setct-PCertReqData" -#define NID_setct_PCertReqData 556 -#define OBJ_setct_PCertReqData OBJ_set_ctype,38L - -#define SN_setct_PCertResTBS "setct-PCertResTBS" -#define NID_setct_PCertResTBS 557 -#define OBJ_setct_PCertResTBS OBJ_set_ctype,39L - -#define SN_setct_BatchAdminReqData "setct-BatchAdminReqData" -#define NID_setct_BatchAdminReqData 558 -#define OBJ_setct_BatchAdminReqData OBJ_set_ctype,40L - -#define SN_setct_BatchAdminResData "setct-BatchAdminResData" -#define NID_setct_BatchAdminResData 559 -#define OBJ_setct_BatchAdminResData OBJ_set_ctype,41L - -#define SN_setct_CardCInitResTBS "setct-CardCInitResTBS" -#define NID_setct_CardCInitResTBS 560 -#define OBJ_setct_CardCInitResTBS OBJ_set_ctype,42L - -#define SN_setct_MeAqCInitResTBS "setct-MeAqCInitResTBS" -#define NID_setct_MeAqCInitResTBS 561 -#define OBJ_setct_MeAqCInitResTBS OBJ_set_ctype,43L - -#define SN_setct_RegFormResTBS "setct-RegFormResTBS" -#define NID_setct_RegFormResTBS 562 -#define OBJ_setct_RegFormResTBS OBJ_set_ctype,44L - -#define SN_setct_CertReqData "setct-CertReqData" -#define NID_setct_CertReqData 563 -#define OBJ_setct_CertReqData OBJ_set_ctype,45L - -#define SN_setct_CertReqTBS "setct-CertReqTBS" -#define NID_setct_CertReqTBS 564 -#define OBJ_setct_CertReqTBS OBJ_set_ctype,46L - -#define SN_setct_CertResData "setct-CertResData" -#define NID_setct_CertResData 565 -#define OBJ_setct_CertResData OBJ_set_ctype,47L - -#define SN_setct_CertInqReqTBS "setct-CertInqReqTBS" -#define NID_setct_CertInqReqTBS 566 -#define OBJ_setct_CertInqReqTBS OBJ_set_ctype,48L - -#define SN_setct_ErrorTBS "setct-ErrorTBS" -#define NID_setct_ErrorTBS 567 -#define OBJ_setct_ErrorTBS OBJ_set_ctype,49L - -#define SN_setct_PIDualSignedTBE "setct-PIDualSignedTBE" -#define NID_setct_PIDualSignedTBE 568 -#define OBJ_setct_PIDualSignedTBE OBJ_set_ctype,50L - -#define SN_setct_PIUnsignedTBE "setct-PIUnsignedTBE" -#define NID_setct_PIUnsignedTBE 569 -#define OBJ_setct_PIUnsignedTBE OBJ_set_ctype,51L - -#define SN_setct_AuthReqTBE "setct-AuthReqTBE" -#define NID_setct_AuthReqTBE 570 -#define OBJ_setct_AuthReqTBE OBJ_set_ctype,52L - -#define SN_setct_AuthResTBE "setct-AuthResTBE" -#define NID_setct_AuthResTBE 571 -#define OBJ_setct_AuthResTBE OBJ_set_ctype,53L - -#define SN_setct_AuthResTBEX "setct-AuthResTBEX" -#define NID_setct_AuthResTBEX 572 -#define OBJ_setct_AuthResTBEX OBJ_set_ctype,54L - -#define SN_setct_AuthTokenTBE "setct-AuthTokenTBE" -#define NID_setct_AuthTokenTBE 573 -#define OBJ_setct_AuthTokenTBE OBJ_set_ctype,55L - -#define SN_setct_CapTokenTBE "setct-CapTokenTBE" -#define NID_setct_CapTokenTBE 574 -#define OBJ_setct_CapTokenTBE OBJ_set_ctype,56L - -#define SN_setct_CapTokenTBEX "setct-CapTokenTBEX" -#define NID_setct_CapTokenTBEX 575 -#define OBJ_setct_CapTokenTBEX OBJ_set_ctype,57L - -#define SN_setct_AcqCardCodeMsgTBE "setct-AcqCardCodeMsgTBE" -#define NID_setct_AcqCardCodeMsgTBE 576 -#define OBJ_setct_AcqCardCodeMsgTBE OBJ_set_ctype,58L - -#define SN_setct_AuthRevReqTBE "setct-AuthRevReqTBE" -#define NID_setct_AuthRevReqTBE 577 -#define OBJ_setct_AuthRevReqTBE OBJ_set_ctype,59L - -#define SN_setct_AuthRevResTBE "setct-AuthRevResTBE" -#define NID_setct_AuthRevResTBE 578 -#define OBJ_setct_AuthRevResTBE OBJ_set_ctype,60L - -#define SN_setct_AuthRevResTBEB "setct-AuthRevResTBEB" -#define NID_setct_AuthRevResTBEB 579 -#define OBJ_setct_AuthRevResTBEB OBJ_set_ctype,61L - -#define SN_setct_CapReqTBE "setct-CapReqTBE" -#define NID_setct_CapReqTBE 580 -#define OBJ_setct_CapReqTBE OBJ_set_ctype,62L - -#define SN_setct_CapReqTBEX "setct-CapReqTBEX" -#define NID_setct_CapReqTBEX 581 -#define OBJ_setct_CapReqTBEX OBJ_set_ctype,63L - -#define SN_setct_CapResTBE "setct-CapResTBE" -#define NID_setct_CapResTBE 582 -#define OBJ_setct_CapResTBE OBJ_set_ctype,64L - -#define SN_setct_CapRevReqTBE "setct-CapRevReqTBE" -#define NID_setct_CapRevReqTBE 583 -#define OBJ_setct_CapRevReqTBE OBJ_set_ctype,65L - -#define SN_setct_CapRevReqTBEX "setct-CapRevReqTBEX" -#define NID_setct_CapRevReqTBEX 584 -#define OBJ_setct_CapRevReqTBEX OBJ_set_ctype,66L - -#define SN_setct_CapRevResTBE "setct-CapRevResTBE" -#define NID_setct_CapRevResTBE 585 -#define OBJ_setct_CapRevResTBE OBJ_set_ctype,67L - -#define SN_setct_CredReqTBE "setct-CredReqTBE" -#define NID_setct_CredReqTBE 586 -#define OBJ_setct_CredReqTBE OBJ_set_ctype,68L - -#define SN_setct_CredReqTBEX "setct-CredReqTBEX" -#define NID_setct_CredReqTBEX 587 -#define OBJ_setct_CredReqTBEX OBJ_set_ctype,69L - -#define SN_setct_CredResTBE "setct-CredResTBE" -#define NID_setct_CredResTBE 588 -#define OBJ_setct_CredResTBE OBJ_set_ctype,70L - -#define SN_setct_CredRevReqTBE "setct-CredRevReqTBE" -#define NID_setct_CredRevReqTBE 589 -#define OBJ_setct_CredRevReqTBE OBJ_set_ctype,71L - -#define SN_setct_CredRevReqTBEX "setct-CredRevReqTBEX" -#define NID_setct_CredRevReqTBEX 590 -#define OBJ_setct_CredRevReqTBEX OBJ_set_ctype,72L - -#define SN_setct_CredRevResTBE "setct-CredRevResTBE" -#define NID_setct_CredRevResTBE 591 -#define OBJ_setct_CredRevResTBE OBJ_set_ctype,73L - -#define SN_setct_BatchAdminReqTBE "setct-BatchAdminReqTBE" -#define NID_setct_BatchAdminReqTBE 592 -#define OBJ_setct_BatchAdminReqTBE OBJ_set_ctype,74L - -#define SN_setct_BatchAdminResTBE "setct-BatchAdminResTBE" -#define NID_setct_BatchAdminResTBE 593 -#define OBJ_setct_BatchAdminResTBE OBJ_set_ctype,75L - -#define SN_setct_RegFormReqTBE "setct-RegFormReqTBE" -#define NID_setct_RegFormReqTBE 594 -#define OBJ_setct_RegFormReqTBE OBJ_set_ctype,76L - -#define SN_setct_CertReqTBE "setct-CertReqTBE" -#define NID_setct_CertReqTBE 595 -#define OBJ_setct_CertReqTBE OBJ_set_ctype,77L - -#define SN_setct_CertReqTBEX "setct-CertReqTBEX" -#define NID_setct_CertReqTBEX 596 -#define OBJ_setct_CertReqTBEX OBJ_set_ctype,78L - -#define SN_setct_CertResTBE "setct-CertResTBE" -#define NID_setct_CertResTBE 597 -#define OBJ_setct_CertResTBE OBJ_set_ctype,79L - -#define SN_setct_CRLNotificationTBS "setct-CRLNotificationTBS" -#define NID_setct_CRLNotificationTBS 598 -#define OBJ_setct_CRLNotificationTBS OBJ_set_ctype,80L - -#define SN_setct_CRLNotificationResTBS "setct-CRLNotificationResTBS" -#define NID_setct_CRLNotificationResTBS 599 -#define OBJ_setct_CRLNotificationResTBS OBJ_set_ctype,81L - -#define SN_setct_BCIDistributionTBS "setct-BCIDistributionTBS" -#define NID_setct_BCIDistributionTBS 600 -#define OBJ_setct_BCIDistributionTBS OBJ_set_ctype,82L - -#define SN_setext_genCrypt "setext-genCrypt" -#define LN_setext_genCrypt "generic cryptogram" -#define NID_setext_genCrypt 601 -#define OBJ_setext_genCrypt OBJ_set_msgExt,1L - -#define SN_setext_miAuth "setext-miAuth" -#define LN_setext_miAuth "merchant initiated auth" -#define NID_setext_miAuth 602 -#define OBJ_setext_miAuth OBJ_set_msgExt,3L - -#define SN_setext_pinSecure "setext-pinSecure" -#define NID_setext_pinSecure 603 -#define OBJ_setext_pinSecure OBJ_set_msgExt,4L - -#define SN_setext_pinAny "setext-pinAny" -#define NID_setext_pinAny 604 -#define OBJ_setext_pinAny OBJ_set_msgExt,5L - -#define SN_setext_track2 "setext-track2" -#define NID_setext_track2 605 -#define OBJ_setext_track2 OBJ_set_msgExt,7L - -#define SN_setext_cv "setext-cv" -#define LN_setext_cv "additional verification" -#define NID_setext_cv 606 -#define OBJ_setext_cv OBJ_set_msgExt,8L - -#define SN_set_policy_root "set-policy-root" -#define NID_set_policy_root 607 -#define OBJ_set_policy_root OBJ_set_policy,0L - -#define SN_setCext_hashedRoot "setCext-hashedRoot" -#define NID_setCext_hashedRoot 608 -#define OBJ_setCext_hashedRoot OBJ_set_certExt,0L - -#define SN_setCext_certType "setCext-certType" -#define NID_setCext_certType 609 -#define OBJ_setCext_certType OBJ_set_certExt,1L - -#define SN_setCext_merchData "setCext-merchData" -#define NID_setCext_merchData 610 -#define OBJ_setCext_merchData OBJ_set_certExt,2L - -#define SN_setCext_cCertRequired "setCext-cCertRequired" -#define NID_setCext_cCertRequired 611 -#define OBJ_setCext_cCertRequired OBJ_set_certExt,3L - -#define SN_setCext_tunneling "setCext-tunneling" -#define NID_setCext_tunneling 612 -#define OBJ_setCext_tunneling OBJ_set_certExt,4L - -#define SN_setCext_setExt "setCext-setExt" -#define NID_setCext_setExt 613 -#define OBJ_setCext_setExt OBJ_set_certExt,5L - -#define SN_setCext_setQualf "setCext-setQualf" -#define NID_setCext_setQualf 614 -#define OBJ_setCext_setQualf OBJ_set_certExt,6L - -#define SN_setCext_PGWYcapabilities "setCext-PGWYcapabilities" -#define NID_setCext_PGWYcapabilities 615 -#define OBJ_setCext_PGWYcapabilities OBJ_set_certExt,7L - -#define SN_setCext_TokenIdentifier "setCext-TokenIdentifier" -#define NID_setCext_TokenIdentifier 616 -#define OBJ_setCext_TokenIdentifier OBJ_set_certExt,8L - -#define SN_setCext_Track2Data "setCext-Track2Data" -#define NID_setCext_Track2Data 617 -#define OBJ_setCext_Track2Data OBJ_set_certExt,9L - -#define SN_setCext_TokenType "setCext-TokenType" -#define NID_setCext_TokenType 618 -#define OBJ_setCext_TokenType OBJ_set_certExt,10L - -#define SN_setCext_IssuerCapabilities "setCext-IssuerCapabilities" -#define NID_setCext_IssuerCapabilities 619 -#define OBJ_setCext_IssuerCapabilities OBJ_set_certExt,11L - -#define SN_setAttr_Cert "setAttr-Cert" -#define NID_setAttr_Cert 620 -#define OBJ_setAttr_Cert OBJ_set_attr,0L - -#define SN_setAttr_PGWYcap "setAttr-PGWYcap" -#define LN_setAttr_PGWYcap "payment gateway capabilities" -#define NID_setAttr_PGWYcap 621 -#define OBJ_setAttr_PGWYcap OBJ_set_attr,1L - -#define SN_setAttr_TokenType "setAttr-TokenType" -#define NID_setAttr_TokenType 622 -#define OBJ_setAttr_TokenType OBJ_set_attr,2L - -#define SN_setAttr_IssCap "setAttr-IssCap" -#define LN_setAttr_IssCap "issuer capabilities" -#define NID_setAttr_IssCap 623 -#define OBJ_setAttr_IssCap OBJ_set_attr,3L - -#define SN_set_rootKeyThumb "set-rootKeyThumb" -#define NID_set_rootKeyThumb 624 -#define OBJ_set_rootKeyThumb OBJ_setAttr_Cert,0L - -#define SN_set_addPolicy "set-addPolicy" -#define NID_set_addPolicy 625 -#define OBJ_set_addPolicy OBJ_setAttr_Cert,1L - -#define SN_setAttr_Token_EMV "setAttr-Token-EMV" -#define NID_setAttr_Token_EMV 626 -#define OBJ_setAttr_Token_EMV OBJ_setAttr_TokenType,1L - -#define SN_setAttr_Token_B0Prime "setAttr-Token-B0Prime" -#define NID_setAttr_Token_B0Prime 627 -#define OBJ_setAttr_Token_B0Prime OBJ_setAttr_TokenType,2L - -#define SN_setAttr_IssCap_CVM "setAttr-IssCap-CVM" -#define NID_setAttr_IssCap_CVM 628 -#define OBJ_setAttr_IssCap_CVM OBJ_setAttr_IssCap,3L - -#define SN_setAttr_IssCap_T2 "setAttr-IssCap-T2" -#define NID_setAttr_IssCap_T2 629 -#define OBJ_setAttr_IssCap_T2 OBJ_setAttr_IssCap,4L - -#define SN_setAttr_IssCap_Sig "setAttr-IssCap-Sig" -#define NID_setAttr_IssCap_Sig 630 -#define OBJ_setAttr_IssCap_Sig OBJ_setAttr_IssCap,5L - -#define SN_setAttr_GenCryptgrm "setAttr-GenCryptgrm" -#define LN_setAttr_GenCryptgrm "generate cryptogram" -#define NID_setAttr_GenCryptgrm 631 -#define OBJ_setAttr_GenCryptgrm OBJ_setAttr_IssCap_CVM,1L - -#define SN_setAttr_T2Enc "setAttr-T2Enc" -#define LN_setAttr_T2Enc "encrypted track 2" -#define NID_setAttr_T2Enc 632 -#define OBJ_setAttr_T2Enc OBJ_setAttr_IssCap_T2,1L - -#define SN_setAttr_T2cleartxt "setAttr-T2cleartxt" -#define LN_setAttr_T2cleartxt "cleartext track 2" -#define NID_setAttr_T2cleartxt 633 -#define OBJ_setAttr_T2cleartxt OBJ_setAttr_IssCap_T2,2L - -#define SN_setAttr_TokICCsig "setAttr-TokICCsig" -#define LN_setAttr_TokICCsig "ICC or token signature" -#define NID_setAttr_TokICCsig 634 -#define OBJ_setAttr_TokICCsig OBJ_setAttr_IssCap_Sig,1L - -#define SN_setAttr_SecDevSig "setAttr-SecDevSig" -#define LN_setAttr_SecDevSig "secure device signature" -#define NID_setAttr_SecDevSig 635 -#define OBJ_setAttr_SecDevSig OBJ_setAttr_IssCap_Sig,2L - -#define SN_set_brand_IATA_ATA "set-brand-IATA-ATA" -#define NID_set_brand_IATA_ATA 636 -#define OBJ_set_brand_IATA_ATA OBJ_set_brand,1L - -#define SN_set_brand_Diners "set-brand-Diners" -#define NID_set_brand_Diners 637 -#define OBJ_set_brand_Diners OBJ_set_brand,30L - -#define SN_set_brand_AmericanExpress "set-brand-AmericanExpress" -#define NID_set_brand_AmericanExpress 638 -#define OBJ_set_brand_AmericanExpress OBJ_set_brand,34L - -#define SN_set_brand_JCB "set-brand-JCB" -#define NID_set_brand_JCB 639 -#define OBJ_set_brand_JCB OBJ_set_brand,35L - -#define SN_set_brand_Visa "set-brand-Visa" -#define NID_set_brand_Visa 640 -#define OBJ_set_brand_Visa OBJ_set_brand,4L - -#define SN_set_brand_MasterCard "set-brand-MasterCard" -#define NID_set_brand_MasterCard 641 -#define OBJ_set_brand_MasterCard OBJ_set_brand,5L - -#define SN_set_brand_Novus "set-brand-Novus" -#define NID_set_brand_Novus 642 -#define OBJ_set_brand_Novus OBJ_set_brand,6011L - -#define SN_des_cdmf "DES-CDMF" -#define LN_des_cdmf "des-cdmf" -#define NID_des_cdmf 643 -#define OBJ_des_cdmf OBJ_rsadsi,3L,10L - -#define SN_rsaOAEPEncryptionSET "rsaOAEPEncryptionSET" -#define NID_rsaOAEPEncryptionSET 644 -#define OBJ_rsaOAEPEncryptionSET OBJ_rsadsi,1L,1L,6L - -#define SN_ipsec3 "Oakley-EC2N-3" -#define LN_ipsec3 "ipsec3" -#define NID_ipsec3 749 - -#define SN_ipsec4 "Oakley-EC2N-4" -#define LN_ipsec4 "ipsec4" -#define NID_ipsec4 750 - -#define SN_whirlpool "whirlpool" -#define NID_whirlpool 804 -#define OBJ_whirlpool OBJ_iso,0L,10118L,3L,0L,55L - -#define SN_cryptopro "cryptopro" -#define NID_cryptopro 805 -#define OBJ_cryptopro OBJ_member_body,643L,2L,2L - -#define SN_cryptocom "cryptocom" -#define NID_cryptocom 806 -#define OBJ_cryptocom OBJ_member_body,643L,2L,9L - -#define SN_id_tc26 "id-tc26" -#define NID_id_tc26 974 -#define OBJ_id_tc26 OBJ_member_body,643L,7L,1L - -#define SN_id_GostR3411_94_with_GostR3410_2001 "id-GostR3411-94-with-GostR3410-2001" -#define LN_id_GostR3411_94_with_GostR3410_2001 "GOST R 34.11-94 with GOST R 34.10-2001" -#define NID_id_GostR3411_94_with_GostR3410_2001 807 -#define OBJ_id_GostR3411_94_with_GostR3410_2001 OBJ_cryptopro,3L - -#define SN_id_GostR3411_94_with_GostR3410_94 "id-GostR3411-94-with-GostR3410-94" -#define LN_id_GostR3411_94_with_GostR3410_94 "GOST R 34.11-94 with GOST R 34.10-94" -#define NID_id_GostR3411_94_with_GostR3410_94 808 -#define OBJ_id_GostR3411_94_with_GostR3410_94 OBJ_cryptopro,4L - -#define SN_id_GostR3411_94 "md_gost94" -#define LN_id_GostR3411_94 "GOST R 34.11-94" -#define NID_id_GostR3411_94 809 -#define OBJ_id_GostR3411_94 OBJ_cryptopro,9L - -#define SN_id_HMACGostR3411_94 "id-HMACGostR3411-94" -#define LN_id_HMACGostR3411_94 "HMAC GOST 34.11-94" -#define NID_id_HMACGostR3411_94 810 -#define OBJ_id_HMACGostR3411_94 OBJ_cryptopro,10L - -#define SN_id_GostR3410_2001 "gost2001" -#define LN_id_GostR3410_2001 "GOST R 34.10-2001" -#define NID_id_GostR3410_2001 811 -#define OBJ_id_GostR3410_2001 OBJ_cryptopro,19L - -#define SN_id_GostR3410_94 "gost94" -#define LN_id_GostR3410_94 "GOST R 34.10-94" -#define NID_id_GostR3410_94 812 -#define OBJ_id_GostR3410_94 OBJ_cryptopro,20L - -#define SN_id_Gost28147_89 "gost89" -#define LN_id_Gost28147_89 "GOST 28147-89" -#define NID_id_Gost28147_89 813 -#define OBJ_id_Gost28147_89 OBJ_cryptopro,21L - -#define SN_gost89_cnt "gost89-cnt" -#define NID_gost89_cnt 814 - -#define SN_gost89_cnt_12 "gost89-cnt-12" -#define NID_gost89_cnt_12 975 - -#define SN_gost89_cbc "gost89-cbc" -#define NID_gost89_cbc 1009 - -#define SN_gost89_ecb "gost89-ecb" -#define NID_gost89_ecb 1010 - -#define SN_gost89_ctr "gost89-ctr" -#define NID_gost89_ctr 1011 - -#define SN_id_Gost28147_89_MAC "gost-mac" -#define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC" -#define NID_id_Gost28147_89_MAC 815 -#define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L - -#define SN_gost_mac_12 "gost-mac-12" -#define NID_gost_mac_12 976 - -#define SN_id_GostR3411_94_prf "prf-gostr3411-94" -#define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF" -#define NID_id_GostR3411_94_prf 816 -#define OBJ_id_GostR3411_94_prf OBJ_cryptopro,23L - -#define SN_id_GostR3410_2001DH "id-GostR3410-2001DH" -#define LN_id_GostR3410_2001DH "GOST R 34.10-2001 DH" -#define NID_id_GostR3410_2001DH 817 -#define OBJ_id_GostR3410_2001DH OBJ_cryptopro,98L - -#define SN_id_GostR3410_94DH "id-GostR3410-94DH" -#define LN_id_GostR3410_94DH "GOST R 34.10-94 DH" -#define NID_id_GostR3410_94DH 818 -#define OBJ_id_GostR3410_94DH OBJ_cryptopro,99L - -#define SN_id_Gost28147_89_CryptoPro_KeyMeshing "id-Gost28147-89-CryptoPro-KeyMeshing" -#define NID_id_Gost28147_89_CryptoPro_KeyMeshing 819 -#define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing OBJ_cryptopro,14L,1L - -#define SN_id_Gost28147_89_None_KeyMeshing "id-Gost28147-89-None-KeyMeshing" -#define NID_id_Gost28147_89_None_KeyMeshing 820 -#define OBJ_id_Gost28147_89_None_KeyMeshing OBJ_cryptopro,14L,0L - -#define SN_id_GostR3411_94_TestParamSet "id-GostR3411-94-TestParamSet" -#define NID_id_GostR3411_94_TestParamSet 821 -#define OBJ_id_GostR3411_94_TestParamSet OBJ_cryptopro,30L,0L - -#define SN_id_GostR3411_94_CryptoProParamSet "id-GostR3411-94-CryptoProParamSet" -#define NID_id_GostR3411_94_CryptoProParamSet 822 -#define OBJ_id_GostR3411_94_CryptoProParamSet OBJ_cryptopro,30L,1L - -#define SN_id_Gost28147_89_TestParamSet "id-Gost28147-89-TestParamSet" -#define NID_id_Gost28147_89_TestParamSet 823 -#define OBJ_id_Gost28147_89_TestParamSet OBJ_cryptopro,31L,0L - -#define SN_id_Gost28147_89_CryptoPro_A_ParamSet "id-Gost28147-89-CryptoPro-A-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_A_ParamSet 824 -#define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet OBJ_cryptopro,31L,1L - -#define SN_id_Gost28147_89_CryptoPro_B_ParamSet "id-Gost28147-89-CryptoPro-B-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_B_ParamSet 825 -#define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet OBJ_cryptopro,31L,2L - -#define SN_id_Gost28147_89_CryptoPro_C_ParamSet "id-Gost28147-89-CryptoPro-C-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_C_ParamSet 826 -#define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet OBJ_cryptopro,31L,3L - -#define SN_id_Gost28147_89_CryptoPro_D_ParamSet "id-Gost28147-89-CryptoPro-D-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_D_ParamSet 827 -#define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet OBJ_cryptopro,31L,4L - -#define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet 828 -#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet OBJ_cryptopro,31L,5L - -#define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet 829 -#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet OBJ_cryptopro,31L,6L - -#define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet 830 -#define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet OBJ_cryptopro,31L,7L - -#define SN_id_GostR3410_94_TestParamSet "id-GostR3410-94-TestParamSet" -#define NID_id_GostR3410_94_TestParamSet 831 -#define OBJ_id_GostR3410_94_TestParamSet OBJ_cryptopro,32L,0L - -#define SN_id_GostR3410_94_CryptoPro_A_ParamSet "id-GostR3410-94-CryptoPro-A-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_A_ParamSet 832 -#define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet OBJ_cryptopro,32L,2L - -#define SN_id_GostR3410_94_CryptoPro_B_ParamSet "id-GostR3410-94-CryptoPro-B-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_B_ParamSet 833 -#define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet OBJ_cryptopro,32L,3L - -#define SN_id_GostR3410_94_CryptoPro_C_ParamSet "id-GostR3410-94-CryptoPro-C-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_C_ParamSet 834 -#define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet OBJ_cryptopro,32L,4L - -#define SN_id_GostR3410_94_CryptoPro_D_ParamSet "id-GostR3410-94-CryptoPro-D-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_D_ParamSet 835 -#define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet OBJ_cryptopro,32L,5L - -#define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet "id-GostR3410-94-CryptoPro-XchA-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet 836 -#define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet OBJ_cryptopro,33L,1L - -#define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet "id-GostR3410-94-CryptoPro-XchB-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet 837 -#define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet OBJ_cryptopro,33L,2L - -#define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet "id-GostR3410-94-CryptoPro-XchC-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet 838 -#define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet OBJ_cryptopro,33L,3L - -#define SN_id_GostR3410_2001_TestParamSet "id-GostR3410-2001-TestParamSet" -#define NID_id_GostR3410_2001_TestParamSet 839 -#define OBJ_id_GostR3410_2001_TestParamSet OBJ_cryptopro,35L,0L - -#define SN_id_GostR3410_2001_CryptoPro_A_ParamSet "id-GostR3410-2001-CryptoPro-A-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_A_ParamSet 840 -#define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet OBJ_cryptopro,35L,1L - -#define SN_id_GostR3410_2001_CryptoPro_B_ParamSet "id-GostR3410-2001-CryptoPro-B-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_B_ParamSet 841 -#define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet OBJ_cryptopro,35L,2L - -#define SN_id_GostR3410_2001_CryptoPro_C_ParamSet "id-GostR3410-2001-CryptoPro-C-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_C_ParamSet 842 -#define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet OBJ_cryptopro,35L,3L - -#define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet "id-GostR3410-2001-CryptoPro-XchA-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet 843 -#define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet OBJ_cryptopro,36L,0L - -#define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet "id-GostR3410-2001-CryptoPro-XchB-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet 844 -#define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet OBJ_cryptopro,36L,1L - -#define SN_id_GostR3410_94_a "id-GostR3410-94-a" -#define NID_id_GostR3410_94_a 845 -#define OBJ_id_GostR3410_94_a OBJ_id_GostR3410_94,1L - -#define SN_id_GostR3410_94_aBis "id-GostR3410-94-aBis" -#define NID_id_GostR3410_94_aBis 846 -#define OBJ_id_GostR3410_94_aBis OBJ_id_GostR3410_94,2L - -#define SN_id_GostR3410_94_b "id-GostR3410-94-b" -#define NID_id_GostR3410_94_b 847 -#define OBJ_id_GostR3410_94_b OBJ_id_GostR3410_94,3L - -#define SN_id_GostR3410_94_bBis "id-GostR3410-94-bBis" -#define NID_id_GostR3410_94_bBis 848 -#define OBJ_id_GostR3410_94_bBis OBJ_id_GostR3410_94,4L - -#define SN_id_Gost28147_89_cc "id-Gost28147-89-cc" -#define LN_id_Gost28147_89_cc "GOST 28147-89 Cryptocom ParamSet" -#define NID_id_Gost28147_89_cc 849 -#define OBJ_id_Gost28147_89_cc OBJ_cryptocom,1L,6L,1L - -#define SN_id_GostR3410_94_cc "gost94cc" -#define LN_id_GostR3410_94_cc "GOST 34.10-94 Cryptocom" -#define NID_id_GostR3410_94_cc 850 -#define OBJ_id_GostR3410_94_cc OBJ_cryptocom,1L,5L,3L - -#define SN_id_GostR3410_2001_cc "gost2001cc" -#define LN_id_GostR3410_2001_cc "GOST 34.10-2001 Cryptocom" -#define NID_id_GostR3410_2001_cc 851 -#define OBJ_id_GostR3410_2001_cc OBJ_cryptocom,1L,5L,4L - -#define SN_id_GostR3411_94_with_GostR3410_94_cc "id-GostR3411-94-with-GostR3410-94-cc" -#define LN_id_GostR3411_94_with_GostR3410_94_cc "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" -#define NID_id_GostR3411_94_with_GostR3410_94_cc 852 -#define OBJ_id_GostR3411_94_with_GostR3410_94_cc OBJ_cryptocom,1L,3L,3L - -#define SN_id_GostR3411_94_with_GostR3410_2001_cc "id-GostR3411-94-with-GostR3410-2001-cc" -#define LN_id_GostR3411_94_with_GostR3410_2001_cc "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" -#define NID_id_GostR3411_94_with_GostR3410_2001_cc 853 -#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc OBJ_cryptocom,1L,3L,4L - -#define SN_id_GostR3410_2001_ParamSet_cc "id-GostR3410-2001-ParamSet-cc" -#define LN_id_GostR3410_2001_ParamSet_cc "GOST R 3410-2001 Parameter Set Cryptocom" -#define NID_id_GostR3410_2001_ParamSet_cc 854 -#define OBJ_id_GostR3410_2001_ParamSet_cc OBJ_cryptocom,1L,8L,1L - -#define SN_id_tc26_algorithms "id-tc26-algorithms" -#define NID_id_tc26_algorithms 977 -#define OBJ_id_tc26_algorithms OBJ_id_tc26,1L - -#define SN_id_tc26_sign "id-tc26-sign" -#define NID_id_tc26_sign 978 -#define OBJ_id_tc26_sign OBJ_id_tc26_algorithms,1L - -#define SN_id_GostR3410_2012_256 "gost2012_256" -#define LN_id_GostR3410_2012_256 "GOST R 34.10-2012 with 256 bit modulus" -#define NID_id_GostR3410_2012_256 979 -#define OBJ_id_GostR3410_2012_256 OBJ_id_tc26_sign,1L - -#define SN_id_GostR3410_2012_512 "gost2012_512" -#define LN_id_GostR3410_2012_512 "GOST R 34.10-2012 with 512 bit modulus" -#define NID_id_GostR3410_2012_512 980 -#define OBJ_id_GostR3410_2012_512 OBJ_id_tc26_sign,2L - -#define SN_id_tc26_digest "id-tc26-digest" -#define NID_id_tc26_digest 981 -#define OBJ_id_tc26_digest OBJ_id_tc26_algorithms,2L - -#define SN_id_GostR3411_2012_256 "md_gost12_256" -#define LN_id_GostR3411_2012_256 "GOST R 34.11-2012 with 256 bit hash" -#define NID_id_GostR3411_2012_256 982 -#define OBJ_id_GostR3411_2012_256 OBJ_id_tc26_digest,2L - -#define SN_id_GostR3411_2012_512 "md_gost12_512" -#define LN_id_GostR3411_2012_512 "GOST R 34.11-2012 with 512 bit hash" -#define NID_id_GostR3411_2012_512 983 -#define OBJ_id_GostR3411_2012_512 OBJ_id_tc26_digest,3L - -#define SN_id_tc26_signwithdigest "id-tc26-signwithdigest" -#define NID_id_tc26_signwithdigest 984 -#define OBJ_id_tc26_signwithdigest OBJ_id_tc26_algorithms,3L - -#define SN_id_tc26_signwithdigest_gost3410_2012_256 "id-tc26-signwithdigest-gost3410-2012-256" -#define LN_id_tc26_signwithdigest_gost3410_2012_256 "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)" -#define NID_id_tc26_signwithdigest_gost3410_2012_256 985 -#define OBJ_id_tc26_signwithdigest_gost3410_2012_256 OBJ_id_tc26_signwithdigest,2L - -#define SN_id_tc26_signwithdigest_gost3410_2012_512 "id-tc26-signwithdigest-gost3410-2012-512" -#define LN_id_tc26_signwithdigest_gost3410_2012_512 "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)" -#define NID_id_tc26_signwithdigest_gost3410_2012_512 986 -#define OBJ_id_tc26_signwithdigest_gost3410_2012_512 OBJ_id_tc26_signwithdigest,3L - -#define SN_id_tc26_mac "id-tc26-mac" -#define NID_id_tc26_mac 987 -#define OBJ_id_tc26_mac OBJ_id_tc26_algorithms,4L - -#define SN_id_tc26_hmac_gost_3411_2012_256 "id-tc26-hmac-gost-3411-2012-256" -#define LN_id_tc26_hmac_gost_3411_2012_256 "HMAC GOST 34.11-2012 256 bit" -#define NID_id_tc26_hmac_gost_3411_2012_256 988 -#define OBJ_id_tc26_hmac_gost_3411_2012_256 OBJ_id_tc26_mac,1L - -#define SN_id_tc26_hmac_gost_3411_2012_512 "id-tc26-hmac-gost-3411-2012-512" -#define LN_id_tc26_hmac_gost_3411_2012_512 "HMAC GOST 34.11-2012 512 bit" -#define NID_id_tc26_hmac_gost_3411_2012_512 989 -#define OBJ_id_tc26_hmac_gost_3411_2012_512 OBJ_id_tc26_mac,2L - -#define SN_id_tc26_cipher "id-tc26-cipher" -#define NID_id_tc26_cipher 990 -#define OBJ_id_tc26_cipher OBJ_id_tc26_algorithms,5L - -#define SN_id_tc26_cipher_gostr3412_2015_magma "id-tc26-cipher-gostr3412-2015-magma" -#define NID_id_tc26_cipher_gostr3412_2015_magma 1173 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma OBJ_id_tc26_cipher,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_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_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_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 -#define OBJ_id_tc26_agreement OBJ_id_tc26_algorithms,6L - -#define SN_id_tc26_agreement_gost_3410_2012_256 "id-tc26-agreement-gost-3410-2012-256" -#define NID_id_tc26_agreement_gost_3410_2012_256 992 -#define OBJ_id_tc26_agreement_gost_3410_2012_256 OBJ_id_tc26_agreement,1L - -#define SN_id_tc26_agreement_gost_3410_2012_512 "id-tc26-agreement-gost-3410-2012-512" -#define NID_id_tc26_agreement_gost_3410_2012_512 993 -#define OBJ_id_tc26_agreement_gost_3410_2012_512 OBJ_id_tc26_agreement,2L - -#define SN_id_tc26_wrap "id-tc26-wrap" -#define NID_id_tc26_wrap 1179 -#define OBJ_id_tc26_wrap OBJ_id_tc26_algorithms,7L - -#define SN_id_tc26_wrap_gostr3412_2015_magma "id-tc26-wrap-gostr3412-2015-magma" -#define NID_id_tc26_wrap_gostr3412_2015_magma 1180 -#define OBJ_id_tc26_wrap_gostr3412_2015_magma OBJ_id_tc26_wrap,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_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 -#define OBJ_id_tc26_constants OBJ_id_tc26,2L - -#define SN_id_tc26_sign_constants "id-tc26-sign-constants" -#define NID_id_tc26_sign_constants 995 -#define OBJ_id_tc26_sign_constants OBJ_id_tc26_constants,1L - -#define SN_id_tc26_gost_3410_2012_256_constants "id-tc26-gost-3410-2012-256-constants" -#define NID_id_tc26_gost_3410_2012_256_constants 1147 -#define OBJ_id_tc26_gost_3410_2012_256_constants OBJ_id_tc26_sign_constants,1L - -#define SN_id_tc26_gost_3410_2012_256_paramSetA "id-tc26-gost-3410-2012-256-paramSetA" -#define LN_id_tc26_gost_3410_2012_256_paramSetA "GOST R 34.10-2012 (256 bit) ParamSet A" -#define NID_id_tc26_gost_3410_2012_256_paramSetA 1148 -#define OBJ_id_tc26_gost_3410_2012_256_paramSetA OBJ_id_tc26_gost_3410_2012_256_constants,1L - -#define SN_id_tc26_gost_3410_2012_256_paramSetB "id-tc26-gost-3410-2012-256-paramSetB" -#define LN_id_tc26_gost_3410_2012_256_paramSetB "GOST R 34.10-2012 (256 bit) ParamSet B" -#define NID_id_tc26_gost_3410_2012_256_paramSetB 1184 -#define OBJ_id_tc26_gost_3410_2012_256_paramSetB OBJ_id_tc26_gost_3410_2012_256_constants,2L - -#define SN_id_tc26_gost_3410_2012_256_paramSetC "id-tc26-gost-3410-2012-256-paramSetC" -#define LN_id_tc26_gost_3410_2012_256_paramSetC "GOST R 34.10-2012 (256 bit) ParamSet C" -#define NID_id_tc26_gost_3410_2012_256_paramSetC 1185 -#define OBJ_id_tc26_gost_3410_2012_256_paramSetC OBJ_id_tc26_gost_3410_2012_256_constants,3L - -#define SN_id_tc26_gost_3410_2012_256_paramSetD "id-tc26-gost-3410-2012-256-paramSetD" -#define LN_id_tc26_gost_3410_2012_256_paramSetD "GOST R 34.10-2012 (256 bit) ParamSet D" -#define NID_id_tc26_gost_3410_2012_256_paramSetD 1186 -#define OBJ_id_tc26_gost_3410_2012_256_paramSetD OBJ_id_tc26_gost_3410_2012_256_constants,4L - -#define SN_id_tc26_gost_3410_2012_512_constants "id-tc26-gost-3410-2012-512-constants" -#define NID_id_tc26_gost_3410_2012_512_constants 996 -#define OBJ_id_tc26_gost_3410_2012_512_constants OBJ_id_tc26_sign_constants,2L - -#define SN_id_tc26_gost_3410_2012_512_paramSetTest "id-tc26-gost-3410-2012-512-paramSetTest" -#define LN_id_tc26_gost_3410_2012_512_paramSetTest "GOST R 34.10-2012 (512 bit) testing parameter set" -#define NID_id_tc26_gost_3410_2012_512_paramSetTest 997 -#define OBJ_id_tc26_gost_3410_2012_512_paramSetTest OBJ_id_tc26_gost_3410_2012_512_constants,0L - -#define SN_id_tc26_gost_3410_2012_512_paramSetA "id-tc26-gost-3410-2012-512-paramSetA" -#define LN_id_tc26_gost_3410_2012_512_paramSetA "GOST R 34.10-2012 (512 bit) ParamSet A" -#define NID_id_tc26_gost_3410_2012_512_paramSetA 998 -#define OBJ_id_tc26_gost_3410_2012_512_paramSetA OBJ_id_tc26_gost_3410_2012_512_constants,1L - -#define SN_id_tc26_gost_3410_2012_512_paramSetB "id-tc26-gost-3410-2012-512-paramSetB" -#define LN_id_tc26_gost_3410_2012_512_paramSetB "GOST R 34.10-2012 (512 bit) ParamSet B" -#define NID_id_tc26_gost_3410_2012_512_paramSetB 999 -#define OBJ_id_tc26_gost_3410_2012_512_paramSetB OBJ_id_tc26_gost_3410_2012_512_constants,2L - -#define SN_id_tc26_gost_3410_2012_512_paramSetC "id-tc26-gost-3410-2012-512-paramSetC" -#define LN_id_tc26_gost_3410_2012_512_paramSetC "GOST R 34.10-2012 (512 bit) ParamSet C" -#define NID_id_tc26_gost_3410_2012_512_paramSetC 1149 -#define OBJ_id_tc26_gost_3410_2012_512_paramSetC OBJ_id_tc26_gost_3410_2012_512_constants,3L - -#define SN_id_tc26_digest_constants "id-tc26-digest-constants" -#define NID_id_tc26_digest_constants 1000 -#define OBJ_id_tc26_digest_constants OBJ_id_tc26_constants,2L - -#define SN_id_tc26_cipher_constants "id-tc26-cipher-constants" -#define NID_id_tc26_cipher_constants 1001 -#define OBJ_id_tc26_cipher_constants OBJ_id_tc26_constants,5L - -#define SN_id_tc26_gost_28147_constants "id-tc26-gost-28147-constants" -#define NID_id_tc26_gost_28147_constants 1002 -#define OBJ_id_tc26_gost_28147_constants OBJ_id_tc26_cipher_constants,1L - -#define SN_id_tc26_gost_28147_param_Z "id-tc26-gost-28147-param-Z" -#define LN_id_tc26_gost_28147_param_Z "GOST 28147-89 TC26 parameter set" -#define NID_id_tc26_gost_28147_param_Z 1003 -#define OBJ_id_tc26_gost_28147_param_Z OBJ_id_tc26_gost_28147_constants,1L - -#define SN_INN "INN" -#define LN_INN "INN" -#define NID_INN 1004 -#define OBJ_INN OBJ_member_body,643L,3L,131L,1L,1L - -#define SN_OGRN "OGRN" -#define LN_OGRN "OGRN" -#define NID_OGRN 1005 -#define OBJ_OGRN OBJ_member_body,643L,100L,1L - -#define SN_SNILS "SNILS" -#define LN_SNILS "SNILS" -#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 -#define OBJ_subjectSignTool OBJ_member_body,643L,100L,111L - -#define SN_issuerSignTool "issuerSignTool" -#define LN_issuerSignTool "Signing Tool of Issuer" -#define NID_issuerSignTool 1008 -#define OBJ_issuerSignTool OBJ_member_body,643L,100L,112L - -#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_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_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_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_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_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 - -#define SN_magma_ctr "magma-ctr" -#define NID_magma_ctr 1188 - -#define SN_magma_ofb "magma-ofb" -#define NID_magma_ofb 1189 - -#define SN_magma_cbc "magma-cbc" -#define NID_magma_cbc 1190 - -#define SN_magma_cfb "magma-cfb" -#define NID_magma_cfb 1191 - -#define SN_magma_mac "magma-mac" -#define NID_magma_mac 1192 - -#define SN_camellia_128_cbc "CAMELLIA-128-CBC" -#define LN_camellia_128_cbc "camellia-128-cbc" -#define NID_camellia_128_cbc 751 -#define OBJ_camellia_128_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,2L - -#define SN_camellia_192_cbc "CAMELLIA-192-CBC" -#define LN_camellia_192_cbc "camellia-192-cbc" -#define NID_camellia_192_cbc 752 -#define OBJ_camellia_192_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,3L - -#define SN_camellia_256_cbc "CAMELLIA-256-CBC" -#define LN_camellia_256_cbc "camellia-256-cbc" -#define NID_camellia_256_cbc 753 -#define OBJ_camellia_256_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,4L - -#define SN_id_camellia128_wrap "id-camellia128-wrap" -#define NID_id_camellia128_wrap 907 -#define OBJ_id_camellia128_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,2L - -#define SN_id_camellia192_wrap "id-camellia192-wrap" -#define NID_id_camellia192_wrap 908 -#define OBJ_id_camellia192_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,3L - -#define SN_id_camellia256_wrap "id-camellia256-wrap" -#define NID_id_camellia256_wrap 909 -#define OBJ_id_camellia256_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,4L - -#define OBJ_ntt_ds 0L,3L,4401L,5L - -#define OBJ_camellia OBJ_ntt_ds,3L,1L,9L - -#define SN_camellia_128_ecb "CAMELLIA-128-ECB" -#define LN_camellia_128_ecb "camellia-128-ecb" -#define NID_camellia_128_ecb 754 -#define OBJ_camellia_128_ecb OBJ_camellia,1L - -#define SN_camellia_128_ofb128 "CAMELLIA-128-OFB" -#define LN_camellia_128_ofb128 "camellia-128-ofb" -#define NID_camellia_128_ofb128 766 -#define OBJ_camellia_128_ofb128 OBJ_camellia,3L - -#define SN_camellia_128_cfb128 "CAMELLIA-128-CFB" -#define LN_camellia_128_cfb128 "camellia-128-cfb" -#define NID_camellia_128_cfb128 757 -#define OBJ_camellia_128_cfb128 OBJ_camellia,4L - -#define SN_camellia_128_gcm "CAMELLIA-128-GCM" -#define LN_camellia_128_gcm "camellia-128-gcm" -#define NID_camellia_128_gcm 961 -#define OBJ_camellia_128_gcm OBJ_camellia,6L - -#define SN_camellia_128_ccm "CAMELLIA-128-CCM" -#define LN_camellia_128_ccm "camellia-128-ccm" -#define NID_camellia_128_ccm 962 -#define OBJ_camellia_128_ccm OBJ_camellia,7L - -#define SN_camellia_128_ctr "CAMELLIA-128-CTR" -#define LN_camellia_128_ctr "camellia-128-ctr" -#define NID_camellia_128_ctr 963 -#define OBJ_camellia_128_ctr OBJ_camellia,9L - -#define SN_camellia_128_cmac "CAMELLIA-128-CMAC" -#define LN_camellia_128_cmac "camellia-128-cmac" -#define NID_camellia_128_cmac 964 -#define OBJ_camellia_128_cmac OBJ_camellia,10L - -#define SN_camellia_192_ecb "CAMELLIA-192-ECB" -#define LN_camellia_192_ecb "camellia-192-ecb" -#define NID_camellia_192_ecb 755 -#define OBJ_camellia_192_ecb OBJ_camellia,21L - -#define SN_camellia_192_ofb128 "CAMELLIA-192-OFB" -#define LN_camellia_192_ofb128 "camellia-192-ofb" -#define NID_camellia_192_ofb128 767 -#define OBJ_camellia_192_ofb128 OBJ_camellia,23L - -#define SN_camellia_192_cfb128 "CAMELLIA-192-CFB" -#define LN_camellia_192_cfb128 "camellia-192-cfb" -#define NID_camellia_192_cfb128 758 -#define OBJ_camellia_192_cfb128 OBJ_camellia,24L - -#define SN_camellia_192_gcm "CAMELLIA-192-GCM" -#define LN_camellia_192_gcm "camellia-192-gcm" -#define NID_camellia_192_gcm 965 -#define OBJ_camellia_192_gcm OBJ_camellia,26L - -#define SN_camellia_192_ccm "CAMELLIA-192-CCM" -#define LN_camellia_192_ccm "camellia-192-ccm" -#define NID_camellia_192_ccm 966 -#define OBJ_camellia_192_ccm OBJ_camellia,27L - -#define SN_camellia_192_ctr "CAMELLIA-192-CTR" -#define LN_camellia_192_ctr "camellia-192-ctr" -#define NID_camellia_192_ctr 967 -#define OBJ_camellia_192_ctr OBJ_camellia,29L - -#define SN_camellia_192_cmac "CAMELLIA-192-CMAC" -#define LN_camellia_192_cmac "camellia-192-cmac" -#define NID_camellia_192_cmac 968 -#define OBJ_camellia_192_cmac OBJ_camellia,30L - -#define SN_camellia_256_ecb "CAMELLIA-256-ECB" -#define LN_camellia_256_ecb "camellia-256-ecb" -#define NID_camellia_256_ecb 756 -#define OBJ_camellia_256_ecb OBJ_camellia,41L - -#define SN_camellia_256_ofb128 "CAMELLIA-256-OFB" -#define LN_camellia_256_ofb128 "camellia-256-ofb" -#define NID_camellia_256_ofb128 768 -#define OBJ_camellia_256_ofb128 OBJ_camellia,43L - -#define SN_camellia_256_cfb128 "CAMELLIA-256-CFB" -#define LN_camellia_256_cfb128 "camellia-256-cfb" -#define NID_camellia_256_cfb128 759 -#define OBJ_camellia_256_cfb128 OBJ_camellia,44L - -#define SN_camellia_256_gcm "CAMELLIA-256-GCM" -#define LN_camellia_256_gcm "camellia-256-gcm" -#define NID_camellia_256_gcm 969 -#define OBJ_camellia_256_gcm OBJ_camellia,46L - -#define SN_camellia_256_ccm "CAMELLIA-256-CCM" -#define LN_camellia_256_ccm "camellia-256-ccm" -#define NID_camellia_256_ccm 970 -#define OBJ_camellia_256_ccm OBJ_camellia,47L - -#define SN_camellia_256_ctr "CAMELLIA-256-CTR" -#define LN_camellia_256_ctr "camellia-256-ctr" -#define NID_camellia_256_ctr 971 -#define OBJ_camellia_256_ctr OBJ_camellia,49L - -#define SN_camellia_256_cmac "CAMELLIA-256-CMAC" -#define LN_camellia_256_cmac "camellia-256-cmac" -#define NID_camellia_256_cmac 972 -#define OBJ_camellia_256_cmac OBJ_camellia,50L - -#define SN_camellia_128_cfb1 "CAMELLIA-128-CFB1" -#define LN_camellia_128_cfb1 "camellia-128-cfb1" -#define NID_camellia_128_cfb1 760 - -#define SN_camellia_192_cfb1 "CAMELLIA-192-CFB1" -#define LN_camellia_192_cfb1 "camellia-192-cfb1" -#define NID_camellia_192_cfb1 761 - -#define SN_camellia_256_cfb1 "CAMELLIA-256-CFB1" -#define LN_camellia_256_cfb1 "camellia-256-cfb1" -#define NID_camellia_256_cfb1 762 - -#define SN_camellia_128_cfb8 "CAMELLIA-128-CFB8" -#define LN_camellia_128_cfb8 "camellia-128-cfb8" -#define NID_camellia_128_cfb8 763 - -#define SN_camellia_192_cfb8 "CAMELLIA-192-CFB8" -#define LN_camellia_192_cfb8 "camellia-192-cfb8" -#define NID_camellia_192_cfb8 764 - -#define SN_camellia_256_cfb8 "CAMELLIA-256-CFB8" -#define LN_camellia_256_cfb8 "camellia-256-cfb8" -#define NID_camellia_256_cfb8 765 - -#define OBJ_aria 1L,2L,410L,200046L,1L,1L - -#define SN_aria_128_ecb "ARIA-128-ECB" -#define LN_aria_128_ecb "aria-128-ecb" -#define NID_aria_128_ecb 1065 -#define OBJ_aria_128_ecb OBJ_aria,1L - -#define SN_aria_128_cbc "ARIA-128-CBC" -#define LN_aria_128_cbc "aria-128-cbc" -#define NID_aria_128_cbc 1066 -#define OBJ_aria_128_cbc OBJ_aria,2L - -#define SN_aria_128_cfb128 "ARIA-128-CFB" -#define LN_aria_128_cfb128 "aria-128-cfb" -#define NID_aria_128_cfb128 1067 -#define OBJ_aria_128_cfb128 OBJ_aria,3L - -#define SN_aria_128_ofb128 "ARIA-128-OFB" -#define LN_aria_128_ofb128 "aria-128-ofb" -#define NID_aria_128_ofb128 1068 -#define OBJ_aria_128_ofb128 OBJ_aria,4L - -#define SN_aria_128_ctr "ARIA-128-CTR" -#define LN_aria_128_ctr "aria-128-ctr" -#define NID_aria_128_ctr 1069 -#define OBJ_aria_128_ctr OBJ_aria,5L - -#define SN_aria_192_ecb "ARIA-192-ECB" -#define LN_aria_192_ecb "aria-192-ecb" -#define NID_aria_192_ecb 1070 -#define OBJ_aria_192_ecb OBJ_aria,6L - -#define SN_aria_192_cbc "ARIA-192-CBC" -#define LN_aria_192_cbc "aria-192-cbc" -#define NID_aria_192_cbc 1071 -#define OBJ_aria_192_cbc OBJ_aria,7L - -#define SN_aria_192_cfb128 "ARIA-192-CFB" -#define LN_aria_192_cfb128 "aria-192-cfb" -#define NID_aria_192_cfb128 1072 -#define OBJ_aria_192_cfb128 OBJ_aria,8L - -#define SN_aria_192_ofb128 "ARIA-192-OFB" -#define LN_aria_192_ofb128 "aria-192-ofb" -#define NID_aria_192_ofb128 1073 -#define OBJ_aria_192_ofb128 OBJ_aria,9L - -#define SN_aria_192_ctr "ARIA-192-CTR" -#define LN_aria_192_ctr "aria-192-ctr" -#define NID_aria_192_ctr 1074 -#define OBJ_aria_192_ctr OBJ_aria,10L - -#define SN_aria_256_ecb "ARIA-256-ECB" -#define LN_aria_256_ecb "aria-256-ecb" -#define NID_aria_256_ecb 1075 -#define OBJ_aria_256_ecb OBJ_aria,11L - -#define SN_aria_256_cbc "ARIA-256-CBC" -#define LN_aria_256_cbc "aria-256-cbc" -#define NID_aria_256_cbc 1076 -#define OBJ_aria_256_cbc OBJ_aria,12L - -#define SN_aria_256_cfb128 "ARIA-256-CFB" -#define LN_aria_256_cfb128 "aria-256-cfb" -#define NID_aria_256_cfb128 1077 -#define OBJ_aria_256_cfb128 OBJ_aria,13L - -#define SN_aria_256_ofb128 "ARIA-256-OFB" -#define LN_aria_256_ofb128 "aria-256-ofb" -#define NID_aria_256_ofb128 1078 -#define OBJ_aria_256_ofb128 OBJ_aria,14L - -#define SN_aria_256_ctr "ARIA-256-CTR" -#define LN_aria_256_ctr "aria-256-ctr" -#define NID_aria_256_ctr 1079 -#define OBJ_aria_256_ctr OBJ_aria,15L - -#define SN_aria_128_cfb1 "ARIA-128-CFB1" -#define LN_aria_128_cfb1 "aria-128-cfb1" -#define NID_aria_128_cfb1 1080 - -#define SN_aria_192_cfb1 "ARIA-192-CFB1" -#define LN_aria_192_cfb1 "aria-192-cfb1" -#define NID_aria_192_cfb1 1081 - -#define SN_aria_256_cfb1 "ARIA-256-CFB1" -#define LN_aria_256_cfb1 "aria-256-cfb1" -#define NID_aria_256_cfb1 1082 - -#define SN_aria_128_cfb8 "ARIA-128-CFB8" -#define LN_aria_128_cfb8 "aria-128-cfb8" -#define NID_aria_128_cfb8 1083 - -#define SN_aria_192_cfb8 "ARIA-192-CFB8" -#define LN_aria_192_cfb8 "aria-192-cfb8" -#define NID_aria_192_cfb8 1084 - -#define SN_aria_256_cfb8 "ARIA-256-CFB8" -#define LN_aria_256_cfb8 "aria-256-cfb8" -#define NID_aria_256_cfb8 1085 - -#define SN_aria_128_ccm "ARIA-128-CCM" -#define LN_aria_128_ccm "aria-128-ccm" -#define NID_aria_128_ccm 1120 -#define OBJ_aria_128_ccm OBJ_aria,37L - -#define SN_aria_192_ccm "ARIA-192-CCM" -#define LN_aria_192_ccm "aria-192-ccm" -#define NID_aria_192_ccm 1121 -#define OBJ_aria_192_ccm OBJ_aria,38L - -#define SN_aria_256_ccm "ARIA-256-CCM" -#define LN_aria_256_ccm "aria-256-ccm" -#define NID_aria_256_ccm 1122 -#define OBJ_aria_256_ccm OBJ_aria,39L - -#define SN_aria_128_gcm "ARIA-128-GCM" -#define LN_aria_128_gcm "aria-128-gcm" -#define NID_aria_128_gcm 1123 -#define OBJ_aria_128_gcm OBJ_aria,34L - -#define SN_aria_192_gcm "ARIA-192-GCM" -#define LN_aria_192_gcm "aria-192-gcm" -#define NID_aria_192_gcm 1124 -#define OBJ_aria_192_gcm OBJ_aria,35L - -#define SN_aria_256_gcm "ARIA-256-GCM" -#define LN_aria_256_gcm "aria-256-gcm" -#define NID_aria_256_gcm 1125 -#define OBJ_aria_256_gcm OBJ_aria,36L - -#define SN_kisa "KISA" -#define LN_kisa "kisa" -#define NID_kisa 773 -#define OBJ_kisa OBJ_member_body,410L,200004L - -#define SN_seed_ecb "SEED-ECB" -#define LN_seed_ecb "seed-ecb" -#define NID_seed_ecb 776 -#define OBJ_seed_ecb OBJ_kisa,1L,3L - -#define SN_seed_cbc "SEED-CBC" -#define LN_seed_cbc "seed-cbc" -#define NID_seed_cbc 777 -#define OBJ_seed_cbc OBJ_kisa,1L,4L - -#define SN_seed_cfb128 "SEED-CFB" -#define LN_seed_cfb128 "seed-cfb" -#define NID_seed_cfb128 779 -#define OBJ_seed_cfb128 OBJ_kisa,1L,5L - -#define SN_seed_ofb128 "SEED-OFB" -#define LN_seed_ofb128 "seed-ofb" -#define NID_seed_ofb128 778 -#define OBJ_seed_ofb128 OBJ_kisa,1L,6L - -#define SN_sm4_ecb "SM4-ECB" -#define LN_sm4_ecb "sm4-ecb" -#define NID_sm4_ecb 1133 -#define OBJ_sm4_ecb OBJ_sm_scheme,104L,1L - -#define SN_sm4_cbc "SM4-CBC" -#define LN_sm4_cbc "sm4-cbc" -#define NID_sm4_cbc 1134 -#define OBJ_sm4_cbc OBJ_sm_scheme,104L,2L - -#define SN_sm4_ofb128 "SM4-OFB" -#define LN_sm4_ofb128 "sm4-ofb" -#define NID_sm4_ofb128 1135 -#define OBJ_sm4_ofb128 OBJ_sm_scheme,104L,3L - -#define SN_sm4_cfb128 "SM4-CFB" -#define LN_sm4_cfb128 "sm4-cfb" -#define NID_sm4_cfb128 1137 -#define OBJ_sm4_cfb128 OBJ_sm_scheme,104L,4L - -#define SN_sm4_cfb1 "SM4-CFB1" -#define LN_sm4_cfb1 "sm4-cfb1" -#define NID_sm4_cfb1 1136 -#define OBJ_sm4_cfb1 OBJ_sm_scheme,104L,5L - -#define SN_sm4_cfb8 "SM4-CFB8" -#define LN_sm4_cfb8 "sm4-cfb8" -#define NID_sm4_cfb8 1138 -#define OBJ_sm4_cfb8 OBJ_sm_scheme,104L,6L - -#define SN_sm4_ctr "SM4-CTR" -#define LN_sm4_ctr "sm4-ctr" -#define NID_sm4_ctr 1139 -#define OBJ_sm4_ctr OBJ_sm_scheme,104L,7L - -#define SN_sm4_gcm "SM4-GCM" -#define LN_sm4_gcm "sm4-gcm" -#define NID_sm4_gcm 1248 -#define OBJ_sm4_gcm OBJ_sm_scheme,104L,8L - -#define SN_sm4_ccm "SM4-CCM" -#define LN_sm4_ccm "sm4-ccm" -#define NID_sm4_ccm 1249 -#define OBJ_sm4_ccm OBJ_sm_scheme,104L,9L - -#define SN_sm4_xts "SM4-XTS" -#define LN_sm4_xts "sm4-xts" -#define NID_sm4_xts 1290 -#define OBJ_sm4_xts OBJ_sm_scheme,104L,10L - -#define SN_hmac "HMAC" -#define LN_hmac "hmac" -#define NID_hmac 855 - -#define SN_cmac "CMAC" -#define LN_cmac "cmac" -#define NID_cmac 894 - -#define SN_rc4_hmac_md5 "RC4-HMAC-MD5" -#define LN_rc4_hmac_md5 "rc4-hmac-md5" -#define NID_rc4_hmac_md5 915 - -#define SN_aes_128_cbc_hmac_sha1 "AES-128-CBC-HMAC-SHA1" -#define LN_aes_128_cbc_hmac_sha1 "aes-128-cbc-hmac-sha1" -#define NID_aes_128_cbc_hmac_sha1 916 - -#define SN_aes_192_cbc_hmac_sha1 "AES-192-CBC-HMAC-SHA1" -#define LN_aes_192_cbc_hmac_sha1 "aes-192-cbc-hmac-sha1" -#define NID_aes_192_cbc_hmac_sha1 917 - -#define SN_aes_256_cbc_hmac_sha1 "AES-256-CBC-HMAC-SHA1" -#define LN_aes_256_cbc_hmac_sha1 "aes-256-cbc-hmac-sha1" -#define NID_aes_256_cbc_hmac_sha1 918 - -#define SN_aes_128_cbc_hmac_sha256 "AES-128-CBC-HMAC-SHA256" -#define LN_aes_128_cbc_hmac_sha256 "aes-128-cbc-hmac-sha256" -#define NID_aes_128_cbc_hmac_sha256 948 - -#define SN_aes_192_cbc_hmac_sha256 "AES-192-CBC-HMAC-SHA256" -#define LN_aes_192_cbc_hmac_sha256 "aes-192-cbc-hmac-sha256" -#define NID_aes_192_cbc_hmac_sha256 949 - -#define SN_aes_256_cbc_hmac_sha256 "AES-256-CBC-HMAC-SHA256" -#define LN_aes_256_cbc_hmac_sha256 "aes-256-cbc-hmac-sha256" -#define NID_aes_256_cbc_hmac_sha256 950 - -#define SN_chacha20_poly1305 "ChaCha20-Poly1305" -#define LN_chacha20_poly1305 "chacha20-poly1305" -#define NID_chacha20_poly1305 1018 - -#define SN_chacha20 "ChaCha20" -#define LN_chacha20 "chacha20" -#define NID_chacha20 1019 - -#define SN_dhpublicnumber "dhpublicnumber" -#define LN_dhpublicnumber "X9.42 DH" -#define NID_dhpublicnumber 920 -#define OBJ_dhpublicnumber OBJ_ISO_US,10046L,2L,1L - -#define SN_brainpoolP160r1 "brainpoolP160r1" -#define NID_brainpoolP160r1 921 -#define OBJ_brainpoolP160r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,1L - -#define SN_brainpoolP160t1 "brainpoolP160t1" -#define NID_brainpoolP160t1 922 -#define OBJ_brainpoolP160t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,2L - -#define SN_brainpoolP192r1 "brainpoolP192r1" -#define NID_brainpoolP192r1 923 -#define OBJ_brainpoolP192r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,3L - -#define SN_brainpoolP192t1 "brainpoolP192t1" -#define NID_brainpoolP192t1 924 -#define OBJ_brainpoolP192t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,4L - -#define SN_brainpoolP224r1 "brainpoolP224r1" -#define NID_brainpoolP224r1 925 -#define OBJ_brainpoolP224r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,5L - -#define SN_brainpoolP224t1 "brainpoolP224t1" -#define NID_brainpoolP224t1 926 -#define OBJ_brainpoolP224t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,6L - -#define SN_brainpoolP256r1 "brainpoolP256r1" -#define NID_brainpoolP256r1 927 -#define OBJ_brainpoolP256r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,7L - -#define SN_brainpoolP256r1tls13 "brainpoolP256r1tls13" -#define NID_brainpoolP256r1tls13 1285 - -#define SN_brainpoolP256t1 "brainpoolP256t1" -#define NID_brainpoolP256t1 928 -#define OBJ_brainpoolP256t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,8L - -#define SN_brainpoolP320r1 "brainpoolP320r1" -#define NID_brainpoolP320r1 929 -#define OBJ_brainpoolP320r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,9L - -#define SN_brainpoolP320t1 "brainpoolP320t1" -#define NID_brainpoolP320t1 930 -#define OBJ_brainpoolP320t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,10L - -#define SN_brainpoolP384r1 "brainpoolP384r1" -#define NID_brainpoolP384r1 931 -#define OBJ_brainpoolP384r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,11L - -#define SN_brainpoolP384r1tls13 "brainpoolP384r1tls13" -#define NID_brainpoolP384r1tls13 1286 - -#define SN_brainpoolP384t1 "brainpoolP384t1" -#define NID_brainpoolP384t1 932 -#define OBJ_brainpoolP384t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,12L - -#define SN_brainpoolP512r1 "brainpoolP512r1" -#define NID_brainpoolP512r1 933 -#define OBJ_brainpoolP512r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,13L - -#define SN_brainpoolP512r1tls13 "brainpoolP512r1tls13" -#define NID_brainpoolP512r1tls13 1287 - -#define SN_brainpoolP512t1 "brainpoolP512t1" -#define NID_brainpoolP512t1 934 -#define OBJ_brainpoolP512t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,14L - -#define OBJ_x9_63_scheme 1L,3L,133L,16L,840L,63L,0L - -#define OBJ_secg_scheme OBJ_certicom_arc,1L - -#define SN_dhSinglePass_stdDH_sha1kdf_scheme "dhSinglePass-stdDH-sha1kdf-scheme" -#define NID_dhSinglePass_stdDH_sha1kdf_scheme 936 -#define OBJ_dhSinglePass_stdDH_sha1kdf_scheme OBJ_x9_63_scheme,2L - -#define SN_dhSinglePass_stdDH_sha224kdf_scheme "dhSinglePass-stdDH-sha224kdf-scheme" -#define NID_dhSinglePass_stdDH_sha224kdf_scheme 937 -#define OBJ_dhSinglePass_stdDH_sha224kdf_scheme OBJ_secg_scheme,11L,0L - -#define SN_dhSinglePass_stdDH_sha256kdf_scheme "dhSinglePass-stdDH-sha256kdf-scheme" -#define NID_dhSinglePass_stdDH_sha256kdf_scheme 938 -#define OBJ_dhSinglePass_stdDH_sha256kdf_scheme OBJ_secg_scheme,11L,1L - -#define SN_dhSinglePass_stdDH_sha384kdf_scheme "dhSinglePass-stdDH-sha384kdf-scheme" -#define NID_dhSinglePass_stdDH_sha384kdf_scheme 939 -#define OBJ_dhSinglePass_stdDH_sha384kdf_scheme OBJ_secg_scheme,11L,2L - -#define SN_dhSinglePass_stdDH_sha512kdf_scheme "dhSinglePass-stdDH-sha512kdf-scheme" -#define NID_dhSinglePass_stdDH_sha512kdf_scheme 940 -#define OBJ_dhSinglePass_stdDH_sha512kdf_scheme OBJ_secg_scheme,11L,3L - -#define SN_dhSinglePass_cofactorDH_sha1kdf_scheme "dhSinglePass-cofactorDH-sha1kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha1kdf_scheme 941 -#define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme OBJ_x9_63_scheme,3L - -#define SN_dhSinglePass_cofactorDH_sha224kdf_scheme "dhSinglePass-cofactorDH-sha224kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha224kdf_scheme 942 -#define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme OBJ_secg_scheme,14L,0L - -#define SN_dhSinglePass_cofactorDH_sha256kdf_scheme "dhSinglePass-cofactorDH-sha256kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha256kdf_scheme 943 -#define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme OBJ_secg_scheme,14L,1L - -#define SN_dhSinglePass_cofactorDH_sha384kdf_scheme "dhSinglePass-cofactorDH-sha384kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha384kdf_scheme 944 -#define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme OBJ_secg_scheme,14L,2L - -#define SN_dhSinglePass_cofactorDH_sha512kdf_scheme "dhSinglePass-cofactorDH-sha512kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha512kdf_scheme 945 -#define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme OBJ_secg_scheme,14L,3L - -#define SN_dh_std_kdf "dh-std-kdf" -#define NID_dh_std_kdf 946 - -#define SN_dh_cofactor_kdf "dh-cofactor-kdf" -#define NID_dh_cofactor_kdf 947 - -#define SN_ct_precert_scts "ct_precert_scts" -#define LN_ct_precert_scts "CT Precertificate SCTs" -#define NID_ct_precert_scts 951 -#define OBJ_ct_precert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L - -#define SN_ct_precert_poison "ct_precert_poison" -#define LN_ct_precert_poison "CT Precertificate Poison" -#define NID_ct_precert_poison 952 -#define OBJ_ct_precert_poison 1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L - -#define SN_ct_precert_signer "ct_precert_signer" -#define LN_ct_precert_signer "CT Precertificate Signer" -#define NID_ct_precert_signer 953 -#define OBJ_ct_precert_signer 1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L - -#define SN_ct_cert_scts "ct_cert_scts" -#define LN_ct_cert_scts "CT Certificate SCTs" -#define NID_ct_cert_scts 954 -#define OBJ_ct_cert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L - -#define SN_jurisdictionLocalityName "jurisdictionL" -#define LN_jurisdictionLocalityName "jurisdictionLocalityName" -#define NID_jurisdictionLocalityName 955 -#define OBJ_jurisdictionLocalityName OBJ_ms_corp,60L,2L,1L,1L - -#define SN_jurisdictionStateOrProvinceName "jurisdictionST" -#define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName" -#define NID_jurisdictionStateOrProvinceName 956 -#define OBJ_jurisdictionStateOrProvinceName OBJ_ms_corp,60L,2L,1L,2L - -#define SN_jurisdictionCountryName "jurisdictionC" -#define LN_jurisdictionCountryName "jurisdictionCountryName" -#define NID_jurisdictionCountryName 957 -#define OBJ_jurisdictionCountryName OBJ_ms_corp,60L,2L,1L,3L - -#define SN_id_scrypt "id-scrypt" -#define LN_id_scrypt "scrypt" -#define NID_id_scrypt 973 -#define OBJ_id_scrypt 1L,3L,6L,1L,4L,1L,11591L,4L,11L - -#define SN_tls1_prf "TLS1-PRF" -#define LN_tls1_prf "tls1-prf" -#define NID_tls1_prf 1021 - -#define SN_hkdf "HKDF" -#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 - -#define SN_pkInitClientAuth "pkInitClientAuth" -#define LN_pkInitClientAuth "PKINIT Client Auth" -#define NID_pkInitClientAuth 1032 -#define OBJ_pkInitClientAuth OBJ_id_pkinit,4L - -#define SN_pkInitKDC "pkInitKDC" -#define LN_pkInitKDC "Signing KDC Response" -#define NID_pkInitKDC 1033 -#define OBJ_pkInitKDC OBJ_id_pkinit,5L - -#define SN_X25519 "X25519" -#define NID_X25519 1034 -#define OBJ_X25519 1L,3L,101L,110L - -#define SN_X448 "X448" -#define NID_X448 1035 -#define OBJ_X448 1L,3L,101L,111L - -#define SN_ED25519 "ED25519" -#define NID_ED25519 1087 -#define OBJ_ED25519 1L,3L,101L,112L - -#define SN_ED448 "ED448" -#define NID_ED448 1088 -#define OBJ_ED448 1L,3L,101L,113L - -#define SN_kx_rsa "KxRSA" -#define LN_kx_rsa "kx-rsa" -#define NID_kx_rsa 1037 - -#define SN_kx_ecdhe "KxECDHE" -#define LN_kx_ecdhe "kx-ecdhe" -#define NID_kx_ecdhe 1038 - -#define SN_kx_dhe "KxDHE" -#define LN_kx_dhe "kx-dhe" -#define NID_kx_dhe 1039 - -#define SN_kx_ecdhe_psk "KxECDHE-PSK" -#define LN_kx_ecdhe_psk "kx-ecdhe-psk" -#define NID_kx_ecdhe_psk 1040 - -#define SN_kx_dhe_psk "KxDHE-PSK" -#define LN_kx_dhe_psk "kx-dhe-psk" -#define NID_kx_dhe_psk 1041 - -#define SN_kx_rsa_psk "KxRSA_PSK" -#define LN_kx_rsa_psk "kx-rsa-psk" -#define NID_kx_rsa_psk 1042 - -#define SN_kx_psk "KxPSK" -#define LN_kx_psk "kx-psk" -#define NID_kx_psk 1043 - -#define SN_kx_srp "KxSRP" -#define LN_kx_srp "kx-srp" -#define NID_kx_srp 1044 - -#define SN_kx_gost "KxGOST" -#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 - -#define SN_auth_rsa "AuthRSA" -#define LN_auth_rsa "auth-rsa" -#define NID_auth_rsa 1046 - -#define SN_auth_ecdsa "AuthECDSA" -#define LN_auth_ecdsa "auth-ecdsa" -#define NID_auth_ecdsa 1047 - -#define SN_auth_psk "AuthPSK" -#define LN_auth_psk "auth-psk" -#define NID_auth_psk 1048 - -#define SN_auth_dss "AuthDSS" -#define LN_auth_dss "auth-dss" -#define NID_auth_dss 1049 - -#define SN_auth_gost01 "AuthGOST01" -#define LN_auth_gost01 "auth-gost01" -#define NID_auth_gost01 1050 - -#define SN_auth_gost12 "AuthGOST12" -#define LN_auth_gost12 "auth-gost12" -#define NID_auth_gost12 1051 - -#define SN_auth_srp "AuthSRP" -#define LN_auth_srp "auth-srp" -#define NID_auth_srp 1052 - -#define SN_auth_null "AuthNULL" -#define LN_auth_null "auth-null" -#define NID_auth_null 1053 - -#define SN_auth_any "AuthANY" -#define LN_auth_any "auth-any" -#define NID_auth_any 1064 - -#define SN_poly1305 "Poly1305" -#define LN_poly1305 "poly1305" -#define NID_poly1305 1061 - -#define SN_siphash "SipHash" -#define LN_siphash "siphash" -#define NID_siphash 1062 - -#define SN_ffdhe2048 "ffdhe2048" -#define NID_ffdhe2048 1126 - -#define SN_ffdhe3072 "ffdhe3072" -#define NID_ffdhe3072 1127 - -#define SN_ffdhe4096 "ffdhe4096" -#define NID_ffdhe4096 1128 - -#define SN_ffdhe6144 "ffdhe6144" -#define NID_ffdhe6144 1129 - -#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 - -#define SN_ua_pki "ua-pki" -#define NID_ua_pki 1151 -#define OBJ_ua_pki OBJ_ISO_UA,2L,1L,1L,1L - -#define SN_dstu28147 "dstu28147" -#define LN_dstu28147 "DSTU Gost 28147-2009" -#define NID_dstu28147 1152 -#define OBJ_dstu28147 OBJ_ua_pki,1L,1L,1L - -#define SN_dstu28147_ofb "dstu28147-ofb" -#define LN_dstu28147_ofb "DSTU Gost 28147-2009 OFB mode" -#define NID_dstu28147_ofb 1153 -#define OBJ_dstu28147_ofb OBJ_dstu28147,2L - -#define SN_dstu28147_cfb "dstu28147-cfb" -#define LN_dstu28147_cfb "DSTU Gost 28147-2009 CFB mode" -#define NID_dstu28147_cfb 1154 -#define OBJ_dstu28147_cfb OBJ_dstu28147,3L - -#define SN_dstu28147_wrap "dstu28147-wrap" -#define LN_dstu28147_wrap "DSTU Gost 28147-2009 key wrap" -#define NID_dstu28147_wrap 1155 -#define OBJ_dstu28147_wrap OBJ_dstu28147,5L - -#define SN_hmacWithDstu34311 "hmacWithDstu34311" -#define LN_hmacWithDstu34311 "HMAC DSTU Gost 34311-95" -#define NID_hmacWithDstu34311 1156 -#define OBJ_hmacWithDstu34311 OBJ_ua_pki,1L,1L,2L - -#define SN_dstu34311 "dstu34311" -#define LN_dstu34311 "DSTU Gost 34311-95" -#define NID_dstu34311 1157 -#define OBJ_dstu34311 OBJ_ua_pki,1L,2L,1L - -#define SN_dstu4145le "dstu4145le" -#define LN_dstu4145le "DSTU 4145-2002 little endian" -#define NID_dstu4145le 1158 -#define OBJ_dstu4145le OBJ_ua_pki,1L,3L,1L,1L - -#define SN_dstu4145be "dstu4145be" -#define LN_dstu4145be "DSTU 4145-2002 big endian" -#define NID_dstu4145be 1159 -#define OBJ_dstu4145be OBJ_dstu4145le,1L,1L - -#define SN_uacurve0 "uacurve0" -#define LN_uacurve0 "DSTU curve 0" -#define NID_uacurve0 1160 -#define OBJ_uacurve0 OBJ_dstu4145le,2L,0L - -#define SN_uacurve1 "uacurve1" -#define LN_uacurve1 "DSTU curve 1" -#define NID_uacurve1 1161 -#define OBJ_uacurve1 OBJ_dstu4145le,2L,1L - -#define SN_uacurve2 "uacurve2" -#define LN_uacurve2 "DSTU curve 2" -#define NID_uacurve2 1162 -#define OBJ_uacurve2 OBJ_dstu4145le,2L,2L - -#define SN_uacurve3 "uacurve3" -#define LN_uacurve3 "DSTU curve 3" -#define NID_uacurve3 1163 -#define OBJ_uacurve3 OBJ_dstu4145le,2L,3L - -#define SN_uacurve4 "uacurve4" -#define LN_uacurve4 "DSTU curve 4" -#define NID_uacurve4 1164 -#define OBJ_uacurve4 OBJ_dstu4145le,2L,4L - -#define SN_uacurve5 "uacurve5" -#define LN_uacurve5 "DSTU curve 5" -#define NID_uacurve5 1165 -#define OBJ_uacurve5 OBJ_dstu4145le,2L,5L - -#define SN_uacurve6 "uacurve6" -#define LN_uacurve6 "DSTU curve 6" -#define NID_uacurve6 1166 -#define OBJ_uacurve6 OBJ_dstu4145le,2L,6L - -#define SN_uacurve7 "uacurve7" -#define LN_uacurve7 "DSTU curve 7" -#define NID_uacurve7 1167 -#define OBJ_uacurve7 OBJ_dstu4145le,2L,7L - -#define SN_uacurve8 "uacurve8" -#define LN_uacurve8 "DSTU curve 8" -#define NID_uacurve8 1168 -#define OBJ_uacurve8 OBJ_dstu4145le,2L,8L - -#define SN_uacurve9 "uacurve9" -#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 - -#define SN_oracle "oracle-organization" -#define LN_oracle "Oracle organization" -#define NID_oracle 1282 -#define OBJ_oracle OBJ_joint_iso_itu_t,16L,840L,1L,113894L - -#define SN_oracle_jdk_trustedkeyusage "oracle-jdk-trustedkeyusage" -#define LN_oracle_jdk_trustedkeyusage "Trusted key usage (Oracle)" -#define NID_oracle_jdk_trustedkeyusage 1283 -#define OBJ_oracle_jdk_trustedkeyusage OBJ_oracle,746875L,1L,1L - -#define SN_brotli "brotli" -#define LN_brotli "Brotli compression" -#define NID_brotli 1288 - -#define SN_zstd "zstd" -#define LN_zstd "Zstandard compression" -#define NID_zstd 1289 - -#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 deleted file mode 100644 index 9ea91c27..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objects.h +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_OBJECTS_H -# define OPENSSL_OBJECTS_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_OBJECTS_H -# endif - -# include -# include -# include -# include - -# define OBJ_NAME_TYPE_UNDEF 0x00 -# define OBJ_NAME_TYPE_MD_METH 0x01 -# 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_MAC_METH 0x05 -# define OBJ_NAME_TYPE_KDF_METH 0x06 -# define OBJ_NAME_TYPE_NUM 0x07 - -# define OBJ_NAME_ALIAS 0x8000 - -# define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01 -# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 - - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct obj_name_st { - int type; - int alias; - const char *name; - const char *data; -} OBJ_NAME; - -# define OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c) - -int OBJ_NAME_init(void); -int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), - int (*cmp_func) (const char *, const char *), - void (*free_func) (const char *, int, const char *)); -const char *OBJ_NAME_get(const char *name, int type); -int OBJ_NAME_add(const char *name, int type, const char *data); -int OBJ_NAME_remove(const char *name, int type); -void OBJ_NAME_cleanup(int type); /* -1 for everything */ -void OBJ_NAME_do_all(int type, void (*fn) (const OBJ_NAME *, void *arg), - void *arg); -void OBJ_NAME_do_all_sorted(int type, - void (*fn) (const OBJ_NAME *, void *arg), - void *arg); - -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); -int OBJ_obj2nid(const ASN1_OBJECT *o); -ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); -int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); -int OBJ_txt2nid(const char *s); -int OBJ_ln2nid(const char *s); -int OBJ_sn2nid(const char *s); -int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b); -const void *OBJ_bsearch_(const void *key, const void *base, int num, int size, - int (*cmp) (const void *, const void *)); -const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, - int size, - int (*cmp) (const void *, const void *), - int flags); - -# define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \ - static int nm##_cmp(type1 const *, type2 const *); \ - scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) - -# define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \ - _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp) -# define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ - type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) - -/*- - * Unsolved problem: if a type is actually a pointer type, like - * nid_triple is, then its impossible to get a const where you need - * it. Consider: - * - * typedef int nid_triple[3]; - * const void *a_; - * const nid_triple const *a = a_; - * - * The assignment discards a const because what you really want is: - * - * const int const * const *a = a_; - * - * But if you do that, you lose the fact that a is an array of 3 ints, - * which breaks comparison functions. - * - * Thus we end up having to cast, sadly, or unpack the - * declarations. Or, as I finally did in this case, declare nid_triple - * to be a struct, which it should have been in the first place. - * - * Ben, August 2008. - * - * Also, strictly speaking not all types need be const, but handling - * the non-constness means a lot of complication, and in practice - * comparison routines do always not touch their arguments. - */ - -# define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ - { \ - type1 const *a = a_; \ - type2 const *b = b_; \ - return nm##_cmp(a,b); \ - } \ - static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ - { \ - return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ - nm##_cmp_BSEARCH_CMP_FN); \ - } \ - extern void dummy_prototype(void) - -# define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ - { \ - type1 const *a = a_; \ - type2 const *b = b_; \ - return nm##_cmp(a,b); \ - } \ - type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ - { \ - return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ - nm##_cmp_BSEARCH_CMP_FN); \ - } \ - extern void dummy_prototype(void) - -# define OBJ_bsearch(type1,key,type2,base,num,cmp) \ - ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ - num,sizeof(type2), \ - ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ - (void)CHECKED_PTR_OF(type2,cmp##_type_2), \ - cmp##_BSEARCH_CMP_FN))) - -# define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags) \ - ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ - num,sizeof(type2), \ - ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ - (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \ - cmp##_BSEARCH_CMP_FN)),flags) - -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); -#ifndef OPENSSL_NO_DEPRECATED_1_1_0 -# define OBJ_cleanup() while(0) continue -#endif -int OBJ_create_objects(BIO *in); - -size_t OBJ_length(const ASN1_OBJECT *obj); -const unsigned char *OBJ_get0_data(const ASN1_OBJECT *obj); - -int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid); -int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); -int OBJ_add_sigid(int signid, int dig_id, int pkey_id); -void OBJ_sigid_free(void); - - -# ifdef __cplusplus -} -# endif -#endif 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 deleted file mode 100644 index 585217f6..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/objectserr.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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_OBJECTSERR_H -# define OPENSSL_OBJECTSERR_H -# pragma once - -# include -# include -# include - - - -/* - * 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 deleted file mode 100644 index 142b1831..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h +++ /dev/null @@ -1,483 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/ocsp.h.in - * - * 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_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; - -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 -# 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 - -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; - -# 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; - -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; - -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/ocsp.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h.in deleted file mode 100644 index e2cc2716..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsp.h.in +++ /dev/null @@ -1,387 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 46a0523c..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ocsperr.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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_OCSPERR_H -# define OPENSSL_OCSPERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_OCSP - - -/* - * 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_MISSING_OCSPSIGNING_USAGE 103 -# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 -# define OCSP_R_NOT_BASIC_RESPONSE 104 -# define OCSP_R_NO_CERTIFICATES_IN_CHAIN 105 -# define OCSP_R_NO_RESPONSE_DATA 108 -# define OCSP_R_NO_REVOKED_TIME 109 -# define OCSP_R_NO_SIGNER_KEY 130 -# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 110 -# 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_SIGNATURE_FAILURE 117 -# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 -# define OCSP_R_STATUS_EXPIRED 125 -# define OCSP_R_STATUS_NOT_YET_VALID 126 -# define OCSP_R_STATUS_TOO_OLD 127 -# define OCSP_R_UNKNOWN_MESSAGE_DIGEST 119 -# define OCSP_R_UNKNOWN_NID 120 -# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE 129 - -# endif -#endif 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 deleted file mode 100644 index 1e83371f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslconf.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * 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_OPENSSLCONF_H -# define OPENSSL_OPENSSLCONF_H -# pragma once - -# include -# include - -#endif /* OPENSSL_OPENSSLCONF_H */ 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 deleted file mode 100644 index b38d64da..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/opensslv.h.in - * - * 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 3 -# define OPENSSL_VERSION_MINOR 2 -# define OPENSSL_VERSION_PATCH 1 - -/* - * 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 "" -/* 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.2.1" -# define OPENSSL_FULL_VERSION_STR "3.2.1" - -/* - * SECTION 3: ADDITIONAL METADATA - * - * These strings are defined separately to allow them to be parsable. - */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" - -/* - * SECTION 4: BACKWARD COMPATIBILITY - */ - -# define OPENSSL_VERSION_TEXT "OpenSSL 3.2.1 30 Jan 2024" - -/* 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/opensslv.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h.in deleted file mode 100644 index 3f47a2ac..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h.in +++ /dev/null @@ -1,113 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 82a58988..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ossl_typ.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -/* - * The original was renamed to - * - * This header file only exists for compatibility reasons with older - * applications which #include . - */ -# 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 deleted file mode 100644 index f29fdb29..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/param_build.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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 deleted file mode 100644 index d75eab07..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/params.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * 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 deleted file mode 100644 index 0446c770..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h +++ /dev/null @@ -1,542 +0,0 @@ -/* - * 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_PEM_H -# define OPENSSL_PEM_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_PEM_H -# endif - -# include -# include -# include -# include -# include -# include -# ifndef OPENSSL_NO_STDIO -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define PEM_BUFSIZE 1024 - -# define PEM_STRING_X509_OLD "X509 CERTIFICATE" -# define PEM_STRING_X509 "CERTIFICATE" -# define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" -# define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" -# define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" -# define PEM_STRING_X509_CRL "X509 CRL" -# define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" -# define PEM_STRING_PUBLIC "PUBLIC KEY" -# define PEM_STRING_RSA "RSA PRIVATE KEY" -# define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" -# define PEM_STRING_DSA "DSA PRIVATE KEY" -# define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" -# define PEM_STRING_PKCS7 "PKCS7" -# define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" -# define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" -# define PEM_STRING_PKCS8INF "PRIVATE KEY" -# define PEM_STRING_DHPARAMS "DH PARAMETERS" -# define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS" -# define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" -# define PEM_STRING_DSAPARAMS "DSA PARAMETERS" -# define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" -# define PEM_STRING_ECPARAMETERS "EC PARAMETERS" -# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" -# define PEM_STRING_PARAMETERS "PARAMETERS" -# define PEM_STRING_CMS "CMS" -# define PEM_STRING_SM2PARAMETERS "SM2 PARAMETERS" - -# define PEM_TYPE_ENCRYPTED 10 -# define PEM_TYPE_MIC_ONLY 20 -# define PEM_TYPE_MIC_CLEAR 30 -# define PEM_TYPE_CLEAR 40 - -/* - * These macros make the PEM_read/PEM_write functions easier to maintain and - * write. Now they are all implemented with either: IMPLEMENT_PEM_rw(...) or - * 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) /**/ -# 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) /**/ -# 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_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); \ - } - -# 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) \ - 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_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); \ - } - -# 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) \ - 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); \ - } - -# 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) - -# 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) - -# 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) \ - IMPLEMENT_PEM_read_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write(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) \ - IMPLEMENT_PEM_write_cb(name, type, str, asn1) - -/* 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_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_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_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_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_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_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) - -# 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_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_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_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, - pem_password_cb *callback, void *u); - -int PEM_read_bio(BIO *bp, char **name, char **header, - unsigned char **data, long *len); -# define PEM_FLAG_SECURE 0x1 -# define PEM_FLAG_EAY_COMPATIBLE 0x2 -# define PEM_FLAG_ONLY_B64 0x4 -int PEM_read_bio_ex(BIO *bp, char **name, char **header, - unsigned char **data, long *len, unsigned int flags); -int PEM_bytes_read_bio_secmem(unsigned char **pdata, long *plen, char **pnm, - const char *name, BIO *bp, pem_password_cb *cb, - void *u); -int PEM_write_bio(BIO *bp, const char *name, const char *hdr, - const unsigned char *data, long len); -int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, - const char *name, BIO *bp, pem_password_cb *cb, - 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, - 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); -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 -int PEM_read(FILE *fp, char **name, char **header, - unsigned char **data, long *len); -int PEM_write(FILE *fp, const char *name, const char *hdr, - const unsigned char *data, long len); -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, - 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, 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, const char *str); - -# include - -DECLARE_PEM_rw(X509, X509) -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_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_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_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, - const unsigned char *kstr, int klen, - pem_password_cb *cb, void *u); - -/* 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 *, 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, 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, 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, const EVP_PKEY *x, int nid, - const char *kstr, int klen, - pem_password_cb *cb, void *u); -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, 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, const EVP_PKEY *x); - -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, 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); -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); -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 -} -# endif -#endif 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 deleted file mode 100644 index a8a5325b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem2.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_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 deleted file mode 100644 index 18f6d9ef..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pemerr.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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_PEMERR_H -# define OPENSSL_PEMERR_H -# pragma once - -# include -# include -# include - - - -/* - * PEM reason codes. - */ -# define PEM_R_BAD_BASE64_DECODE 100 -# define PEM_R_BAD_DECRYPT 101 -# define PEM_R_BAD_END_LINE 102 -# define PEM_R_BAD_IV_CHARS 103 -# define PEM_R_BAD_MAGIC_NUMBER 116 -# define PEM_R_BAD_PASSWORD_READ 104 -# define PEM_R_BAD_VERSION_NUMBER 117 -# 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 -# define PEM_R_KEYBLOB_TOO_SHORT 123 -# define PEM_R_MISSING_DEK_IV 129 -# define PEM_R_NOT_DEK_INFO 105 -# define PEM_R_NOT_ENCRYPTED 106 -# define PEM_R_NOT_PROC_TYPE 107 -# define PEM_R_NO_START_LINE 108 -# define PEM_R_PROBLEMS_GETTING_PASSWORD 109 -# define PEM_R_PVK_DATA_TOO_SHORT 124 -# define PEM_R_PVK_TOO_SHORT 125 -# define PEM_R_READ_KEY 111 -# define PEM_R_SHORT_HEADER 112 -# define PEM_R_UNEXPECTED_DEK_IV 130 -# define PEM_R_UNSUPPORTED_CIPHER 113 -# define PEM_R_UNSUPPORTED_ENCRYPTION 114 -# define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 -# define PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE 110 - -#endif 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 deleted file mode 100644 index b08b0bc2..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h +++ /dev/null @@ -1,363 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/pkcs12.h.in - * - * 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 - */ - - - -#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 - -/* The macro is expected to be used only internally. Kept for backwards compatibility. */ -# 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; - -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; - -# 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_ex(const PKCS12_SAFEBAG *bag, OSSL_LIB_CTX *libctx, const char *propq); -X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); -X509_CRL *PKCS12_SAFEBAG_get1_crl_ex(const PKCS12_SAFEBAG *bag, OSSL_LIB_CTX *libctx, const char *propq); -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); -void PKCS12_SAFEBAG_set0_attrs(PKCS12_SAFEBAG *bag, STACK_OF(X509_ATTRIBUTE) *attrs); -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); -typedef int PKCS12_create_cb(PKCS12_SAFEBAG *bag, void *cbarg); -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 *PKCS12_create_ex2(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_create_cb *cb, void *cbarg); - -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/pkcs12.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h.in deleted file mode 100644 index 35759d4d..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h.in +++ /dev/null @@ -1,340 +0,0 @@ -/* - * {- 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_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 - -/* The macro is expected to be used only internally. Kept for backwards compatibility. */ -# 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_ex(const PKCS12_SAFEBAG *bag, OSSL_LIB_CTX *libctx, const char *propq); -X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); -X509_CRL *PKCS12_SAFEBAG_get1_crl_ex(const PKCS12_SAFEBAG *bag, OSSL_LIB_CTX *libctx, const char *propq); -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); -void PKCS12_SAFEBAG_set0_attrs(PKCS12_SAFEBAG *bag, STACK_OF(X509_ATTRIBUTE) *attrs); -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); -typedef int PKCS12_create_cb(PKCS12_SAFEBAG *bag, void *cbarg); -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 *PKCS12_create_ex2(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_create_cb *cb, void *cbarg); - -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 deleted file mode 100644 index abce3736..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * 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 OPENSSL_PKCS12ERR_H -# define OPENSSL_PKCS12ERR_H -# pragma once - -# include -# include -# include - - - -/* - * PKCS12 reason codes. - */ -# define PKCS12_R_CALLBACK_FAILED 115 -# define PKCS12_R_CANT_PACK_STRUCTURE 100 -# define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 -# define PKCS12_R_DECODE_ERROR 101 -# define PKCS12_R_ENCODE_ERROR 102 -# define PKCS12_R_ENCRYPT_ERROR 103 -# 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 -# define PKCS12_R_MAC_GENERATION_ERROR 109 -# define PKCS12_R_MAC_SETUP_ERROR 110 -# 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_CIPHERFINAL_ERROR 116 -# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 -# define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 - -#endif 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 deleted file mode 100644 index dc46c511..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h +++ /dev/null @@ -1,430 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/pkcs7.h.in - * - * 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_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; /* confusing name, actually used for signing */ - ASN1_OCTET_STRING *enc_digest; /* confusing name, actually signature */ - 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))) - - -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; -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))) - - - -typedef struct pkcs7_signed_st { - ASN1_INTEGER *version; /* version 1 */ - STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ /* name should be 'certificates' */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ /* name should be 'crls' */ - 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 ] */ /* name should be 'certificates' */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ /* name should be 'crls' */ - 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; /* field name 'signed' would clash with C keyword */ - /* 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; -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 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 *cert); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *crl); -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 *signer); - -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/pkcs7.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h.in deleted file mode 100644 index 11a636e1..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h.in +++ /dev/null @@ -1,359 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * 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 - */ - -{- -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; /* confusing name, actually used for signing */ - ASN1_OCTET_STRING *enc_digest; /* confusing name, actually signature */ - 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 ] */ /* name should be 'certificates' */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ /* name should be 'crls' */ - 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 ] */ /* name should be 'certificates' */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ /* name should be 'crls' */ - 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; /* field name 'signed' would clash with C keyword */ - /* 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 *cert); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *crl); -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 *signer); - -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 deleted file mode 100644 index ceb1a501..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7err.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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_PKCS7ERR_H -# define OPENSSL_PKCS7ERR_H -# pragma once - -# include -# include -# include - - - -/* - * PKCS7 reason codes. - */ -# define PKCS7_R_CERTIFICATE_VERIFY_ERROR 117 -# define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 144 -# define PKCS7_R_CIPHER_NOT_INITIALIZED 116 -# define PKCS7_R_CONTENT_AND_DATA_PRESENT 118 -# define PKCS7_R_CTRL_ERROR 152 -# define PKCS7_R_DECRYPT_ERROR 119 -# define PKCS7_R_DIGEST_FAILURE 101 -# define PKCS7_R_ENCRYPTION_CTRL_FAILURE 149 -# define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150 -# define PKCS7_R_ERROR_ADDING_RECIPIENT 120 -# define PKCS7_R_ERROR_SETTING_CIPHER 121 -# define PKCS7_R_INVALID_NULL_POINTER 143 -# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 -# define PKCS7_R_NO_CONTENT 122 -# define PKCS7_R_NO_DEFAULT_DIGEST 151 -# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 -# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 -# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 -# define PKCS7_R_NO_SIGNERS 142 -# define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 104 -# define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 124 -# define PKCS7_R_PKCS7_ADD_SIGNER_ERROR 153 -# define PKCS7_R_PKCS7_DATASIGN 145 -# define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 127 -# define PKCS7_R_SIGNATURE_FAILURE 105 -# define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 128 -# define PKCS7_R_SIGNING_CTRL_FAILURE 147 -# define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 148 -# define PKCS7_R_SMIME_TEXT_ERROR 129 -# define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 106 -# define PKCS7_R_UNABLE_TO_FIND_MEM_BIO 107 -# define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 108 -# define PKCS7_R_UNKNOWN_DIGEST_TYPE 109 -# define PKCS7_R_UNKNOWN_OPERATION 110 -# define PKCS7_R_UNSUPPORTED_CIPHER_TYPE 111 -# define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112 -# define PKCS7_R_WRONG_CONTENT_TYPE 113 -# define PKCS7_R_WRONG_PKCS7_TYPE 114 - -#endif 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 deleted file mode 100644 index 76d01e1e..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/prov_ssl.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2021-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_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 - -/* SSL/TLS uses a 2 byte unsigned version number */ -# 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 - -/* QUIC uses a 4 byte unsigned version number */ -# define OSSL_QUIC1_VERSION 0x0000001 - -# 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 deleted file mode 100644 index d9ef5681..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/proverr.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * 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_AEAD 231 -# 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_KDF 232 -# define PROV_R_INVALID_KEY 158 -# define PROV_R_INVALID_KEY_LENGTH 105 -# define PROV_R_INVALID_MAC 151 -# define PROV_R_INVALID_MEMORY_SIZE 235 -# 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_THREAD_POOL_SIZE 234 -# 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 deleted file mode 100644 index 24ec0827..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/provider.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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_PROVIDER_H -# define OPENSSL_PROVIDER_H -# pragma once - -# include - -# ifdef __cplusplus -extern "C" { -# endif - -/* Set and Get a library context search path */ -int OSSL_PROVIDER_set_default_search_path(OSSL_LIB_CTX *, const char *path); -const char *OSSL_PROVIDER_get0_default_search_path(OSSL_LIB_CTX *libctx); - -/* Load and unload a provider */ -OSSL_PROVIDER *OSSL_PROVIDER_load(OSSL_LIB_CTX *, const char *name); -OSSL_PROVIDER *OSSL_PROVIDER_load_ex(OSSL_LIB_CTX *, const char *name, - OSSL_PARAM *params); -OSSL_PROVIDER *OSSL_PROVIDER_try_load(OSSL_LIB_CTX *, const char *name, - int retain_fallbacks); -OSSL_PROVIDER *OSSL_PROVIDER_try_load_ex(OSSL_LIB_CTX *, const char *name, - OSSL_PARAM *params, - 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/quic.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/quic.h deleted file mode 100644 index 74a6345d..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/quic.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 OPENSSL_QUIC_H -# define OPENSSL_QUIC_H -# pragma once - -# include -# include - -# ifndef OPENSSL_NO_QUIC - -# ifdef __cplusplus -extern "C" { -# endif - -/* - * Method used for non-thread-assisted QUIC client operation. - */ -__owur const SSL_METHOD *OSSL_QUIC_client_method(void); -/* - * Method used for thread-assisted QUIC client operation. - */ -__owur const SSL_METHOD *OSSL_QUIC_client_thread_method(void); - -# ifdef __cplusplus -} -# endif - -# endif /* OPENSSL_NO_QUIC */ -#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 deleted file mode 100644 index 1fa1129e..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * 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_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 - -#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); - void (*cleanup) (void); - int (*add) (const void *buf, int num, double randomness); - int (*pseudorand) (unsigned char *buf, int num); - int (*status) (void); -}; - -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 - -OSSL_DEPRECATEDIN_3_0 RAND_METHOD *RAND_OpenSSL(void); -# endif /* OPENSSL_NO_DEPRECATED_3_0 */ - -# 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); - -/* - * 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 */ -# endif -void RAND_add(const void *buf, int num, double randomness); -int RAND_load_file(const char *file, long max_bytes); -int RAND_write_file(const char *file); -const char *RAND_file_name(char *file, size_t num); -int RAND_status(void); - -# ifndef OPENSSL_NO_EGD -int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); -int RAND_egd(const char *path); -int RAND_egd_bytes(const char *path, int bytes); -# endif - -int RAND_poll(void); - -# if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) -/* application has to include in order to use these */ -# 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 - -#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 deleted file mode 100644 index 04880374..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/randerr.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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_RANDERR_H -# define OPENSSL_RANDERR_H -# pragma once - -# include -# include -# include - - - -/* - * RAND reason codes. - */ -# define RAND_R_ADDITIONAL_INPUT_TOO_LONG 102 -# define RAND_R_ALREADY_INSTANTIATED 103 -# define RAND_R_ARGUMENT_OUT_OF_RANGE 105 -# define RAND_R_CANNOT_OPEN_FILE 121 -# define RAND_R_DRBG_ALREADY_INITIALIZED 129 -# define RAND_R_DRBG_NOT_INITIALISED 104 -# define RAND_R_ENTROPY_INPUT_TOO_LONG 106 -# define RAND_R_ENTROPY_OUT_OF_RANGE 124 -# define RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED 127 -# define RAND_R_ERROR_INITIALISING_DRBG 107 -# define RAND_R_ERROR_INSTANTIATING_DRBG 108 -# define RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT 109 -# define RAND_R_ERROR_RETRIEVING_ENTROPY 110 -# define RAND_R_ERROR_RETRIEVING_NONCE 111 -# define RAND_R_FAILED_TO_CREATE_LOCK 126 -# 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_INVALID_PROPERTY_QUERY 137 -# define RAND_R_IN_ERROR_STATE 114 -# define RAND_R_NOT_A_REGULAR_FILE 122 -# define RAND_R_NOT_INSTANTIATED 115 -# define RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED 128 -# define RAND_R_PARENT_LOCKING_NOT_ENABLED 130 -# define RAND_R_PARENT_STRENGTH_TOO_WEAK 131 -# define RAND_R_PERSONALISATION_STRING_TOO_LONG 116 -# define RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED 133 -# define RAND_R_PRNG_NOT_SEEDED 100 -# define RAND_R_RANDOM_POOL_OVERFLOW 125 -# define RAND_R_RANDOM_POOL_UNDERFLOW 134 -# define RAND_R_REQUEST_TOO_LARGE_FOR_DRBG 117 -# define RAND_R_RESEED_ERROR 118 -# 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 - -#endif 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 deleted file mode 100644 index ff633fd8..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc2.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# 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 - -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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 600b2885..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc4.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index de833523..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rc5.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# endif - -# define RC5_32_BLOCK 8 -# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ - -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define RC5_ENCRYPT 1 -# define RC5_DECRYPT 0 - -# 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 - -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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 900ee317..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ripemd.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 1995-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_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 - -# define RIPEMD160_DIGEST_LENGTH 20 - -# ifdef __cplusplus -extern "C" { -# endif -# if !defined(OPENSSL_NO_DEPRECATED_3_0) - -# define RIPEMD160_LONG unsigned int - -# define RIPEMD160_CBLOCK 64 -# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) - -typedef struct RIPEMD160state_st { - RIPEMD160_LONG A, B, C, D, E; - RIPEMD160_LONG Nl, Nh; - 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 167427d3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h +++ /dev/null @@ -1,615 +0,0 @@ -/* - * 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_RSA_H -# define OPENSSL_RSA_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_RSA_H -# endif - -# include - -# include -# include -# include -# include -# ifndef OPENSSL_NO_DEPRECATED_1_1_0 -# include -# endif -# include -# include -# ifndef OPENSSL_NO_STDIO -# include -# endif - -# ifdef __cplusplus -extern "C" { -# endif - -# ifndef OPENSSL_RSA_MAX_MODULUS_BITS -# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 -# 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_DEFAULT_PRIME_NUM 2 - -# 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 - -/* - * new with 0.9.6j and 0.9.7b; the built-in - * RSA implementation now uses blinding by - * default (ignoring RSA_FLAG_BLINDING), - * but other engines might not need it - */ -# 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 -/* deprecated name for the flag*/ -/* - * new with 0.9.7h; the built-in RSA - * implementation now uses constant time - * modular exponentiation for secret exponents - * by default. This flag causes the - * 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 - -/*- - * 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 - -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 - -/* 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 - -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); - -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); - -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) - -# define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 5) - -# define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8) - -# define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 10) - -# define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12) - -# define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES (EVP_PKEY_ALG_CTRL + 13) - -# define EVP_PKEY_CTRL_RSA_IMPLICIT_REJECTION (EVP_PKEY_ALG_CTRL + 14) - -# define RSA_PKCS1_PADDING 1 -# 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_WITH_TLS_PADDING 7 - -/* internal RSA_ only */ -# define RSA_PKCS1_NO_IMPLICIT_REJECT_PADDING 8 - -# 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) - -# 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); - -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[]); -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 */ -# 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 */ -# 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 */ -OSSL_DEPRECATEDIN_3_0 int RSA_generate_multi_prime_key(RSA *rsa, int bits, - int primes, 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); - -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 */ -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 */ -OSSL_DEPRECATEDIN_3_0 int RSA_up_ref(RSA *r); -OSSL_DEPRECATEDIN_3_0 int RSA_flags(const RSA *r); - -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 */ -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); - -struct rsa_pss_params_st { - X509_ALGOR *hashAlgorithm; - X509_ALGOR *maskGenAlgorithm; - ASN1_INTEGER *saltLength; - ASN1_INTEGER *trailerField; - /* Decoded hash algorithm from maskGenAlgorithm */ - X509_ALGOR *maskHash; -}; - -DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) -DECLARE_ASN1_DUP_FUNCTION(RSA_PSS_PARAMS) - -typedef struct rsa_oaep_params_st { - X509_ALGOR *hashFunc; - X509_ALGOR *maskGenFunc; - X509_ALGOR *pSourceFunc; - /* Decoded hash algorithm from maskGenFunc */ - X509_ALGOR *maskHash; -} RSA_OAEP_PARAMS; - -DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) - -# 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 - -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 - */ -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); -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); - -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); -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); -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) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) -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); - -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 - * 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 RSA_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 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 - -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)); -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)); -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)); -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)); -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)); -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, - const BIGNUM *p, - 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)); -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)); -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)); -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)); -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 -} -# 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 deleted file mode 100644 index c58463c7..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsaerr.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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_RSAERR_H -# define OPENSSL_RSAERR_H -# pragma once - -# include -# include -# include - - - -/* - * RSA reason codes. - */ -# define RSA_R_ALGORITHM_MISMATCH 100 -# define RSA_R_BAD_E_VALUE 101 -# define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 -# define RSA_R_BAD_PAD_BYTE_COUNT 103 -# define RSA_R_BAD_SIGNATURE 104 -# define RSA_R_BLOCK_TYPE_IS_NOT_01 106 -# define RSA_R_BLOCK_TYPE_IS_NOT_02 107 -# define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 -# define RSA_R_DATA_TOO_LARGE 109 -# define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 -# define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 -# define RSA_R_DATA_TOO_SMALL 111 -# define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 -# define RSA_R_DIGEST_DOES_NOT_MATCH 158 -# define RSA_R_DIGEST_NOT_ALLOWED 145 -# define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 -# define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 -# define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 -# define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 -# define RSA_R_FIRST_OCTET_INVALID 133 -# define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 -# 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_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 -# define RSA_R_MP_R_NOT_PRIME 170 -# define RSA_R_NO_PUBLIC_EXPONENT 140 -# define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 -# define RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES 172 -# define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 -# 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 -# define RSA_R_SSLV3_ROLLBACK_ATTACK 115 -# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 -# define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 -# define RSA_R_UNKNOWN_DIGEST 166 -# define RSA_R_UNKNOWN_MASK_DIGEST 151 -# define RSA_R_UNKNOWN_PADDING_TYPE 118 -# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 162 -# define RSA_R_UNSUPPORTED_LABEL_SOURCE 163 -# define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 -# define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 -# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 -# define RSA_R_VALUE_MISSING 147 -# define RSA_R_WRONG_SIGNATURE_LENGTH 119 - -#endif 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 deleted file mode 100644 index 0499700b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h +++ /dev/null @@ -1,297 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/safestack.h.in - * - * 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 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. - */ -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) -/* - * 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; -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))) - -#endif - -# ifdef __cplusplus -} -# endif -#endif 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 deleted file mode 100644 index 6b366079..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/safestack.h.in +++ /dev/null @@ -1,227 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index edb218ae..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/seed.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2007-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 - */ - -/* - * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Neither the name of author nor the names of its contributors may - * be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#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 - -# ifdef __cplusplus -extern "C" { -# endif - -# 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 - - -typedef struct seed_key_st { -# ifdef SEED_LONG - unsigned long data[32]; -# else - unsigned int data[32]; -# 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); -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); -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); -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); -# endif - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 337a3190..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/self_test.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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 deleted file mode 100644 index 163a7d58..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - * 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_SHA_H -# define OPENSSL_SHA_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_SHA_H -# endif - -# include -# include - -# ifdef __cplusplus -extern "C" { -# 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_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; - SHA_LONG Nl, Nh; - SHA_LONG data[SHA_LBLOCK]; - unsigned int num; -} SHA_CTX; - -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 - -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. */ - -typedef struct SHA256state_st { - SHA_LONG h[8]; - SHA_LONG Nl, Nh; - SHA_LONG data[SHA_LBLOCK]; - unsigned int num, md_len; -} SHA256_CTX; - -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); -unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); - -# define SHA256_192_DIGEST_LENGTH 24 -# 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 - * for further details. - */ -/* - * SHA-512 treats input data as a - * 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 -# elif defined(__arch64__) -# define SHA_LONG64 unsigned long -# else -# define SHA_LONG64 unsigned long long -# endif - -typedef struct SHA512state_st { - SHA_LONG64 h[8]; - SHA_LONG64 Nl, Nh; - union { - SHA_LONG64 d[SHA_LBLOCK]; - unsigned char p[SHA512_CBLOCK]; - } u; - unsigned int num, md_len; -} SHA512_CTX; - -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); -unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index a48766c6..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h +++ /dev/null @@ -1,285 +0,0 @@ -/* - * 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 Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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. - */ - - - -#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; -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))) - - - -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; -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); - -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; -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))) - - - -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/srp.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h.in deleted file mode 100644 index dfbe845b..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srp.h.in +++ /dev/null @@ -1,214 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 2c2c3344..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -/* - * DTLS code by Eric Rescorla - * - * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. - */ - -#ifndef OPENSSL_SRTP_H -# define OPENSSL_SRTP_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_D1_SRTP_H -# endif - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define SRTP_AES128_CM_SHA1_80 0x0001 -# define SRTP_AES128_CM_SHA1_32 0x0002 -# define SRTP_AES128_F8_SHA1_80 0x0003 -# define SRTP_AES128_F8_SHA1_32 0x0004 -# define SRTP_NULL_SHA1_80 0x0005 -# define SRTP_NULL_SHA1_32 0x0006 - -/* AEAD SRTP protection profiles from RFC 7714 */ -# define SRTP_AEAD_AES_128_GCM 0x0007 -# define SRTP_AEAD_AES_256_GCM 0x0008 - -/* DOUBLE AEAD SRTP protection profiles from RFC 8723 */ -# define SRTP_DOUBLE_AEAD_AES_128_GCM_AEAD_AES_128_GCM 0x0009 -# define SRTP_DOUBLE_AEAD_AES_256_GCM_AEAD_AES_256_GCM 0x000A - -/* ARIA SRTP protection profiles from RFC 8269 */ -# define SRTP_ARIA_128_CTR_HMAC_SHA1_80 0x000B -# define SRTP_ARIA_128_CTR_HMAC_SHA1_32 0x000C -# define SRTP_ARIA_256_CTR_HMAC_SHA1_80 0x000D -# define SRTP_ARIA_256_CTR_HMAC_SHA1_32 0x000E -# define SRTP_AEAD_ARIA_128_GCM 0x000F -# define SRTP_AEAD_ARIA_256_GCM 0x0010 - -# ifndef OPENSSL_NO_SRTP - -__owur int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); -__owur int SSL_set_tlsext_use_srtp(SSL *ssl, const char *profiles); - -__owur STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); -__owur SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); - -# endif - -#ifdef __cplusplus -} -#endif - -#endif 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 deleted file mode 100644 index 2b43485f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h +++ /dev/null @@ -1,2765 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/ssl.h.in - * - * Copyright 1995-2023 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 - */ - - - -#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 -# 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; -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))) - - - -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 0x00001 -/* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x00002 -/* Some extensions may be allowed in DTLS but we don't implement them for it */ -#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 -/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x00008 -/* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 -/* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x00020 -/* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x00040 -#define SSL_EXT_CLIENT_HELLO 0x00080 -/* Really means TLS1.2 or below */ -#define SSL_EXT_TLS1_2_SERVER_HELLO 0x00100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x00200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x00400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x00800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x01000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x02000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x04000 -#define SSL_EXT_TLS1_3_CERTIFICATE_COMPRESSION 0x08000 -/* When sending a raw public key in a certificate message */ -#define SSL_EXT_TLS1_3_RAW_PUBLIC_KEY 0x10000 - -/* 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) -/* - * Disable RFC8879 certificate compression - * SSL_OP_NO_TX_CERTIFICATE_COMPRESSION: don't send compressed certificates, - * and ignore the extension when received. - * SSL_OP_NO_RX_CERTIFICATE_COMPRESSION: don't send the extension, and - * subsequently indicating that receiving is not supported - */ -# define SSL_OP_NO_TX_CERTIFICATE_COMPRESSION SSL_OP_BIT(32) -# define SSL_OP_NO_RX_CERTIFICATE_COMPRESSION SSL_OP_BIT(33) - /* Enable KTLS TX zerocopy on Linux */ -# define SSL_OP_ENABLE_KTLS_TX_ZEROCOPY_SENDFILE SSL_OP_BIT(34) - -/* - * 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 -/* Cert pkey valid for raw public key use */ -# define CERT_PKEY_RPK 0x1000 - -# 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 */ -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * These need to be after the above set of includes due to a compiler bug - * in VisualStudio 2015 - */ -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))) -# 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_COMP_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_COMP_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_COMP_CERT, - TLS_ST_SW_KEY_EXCH, - TLS_ST_SW_CERT_REQ, - TLS_ST_SW_SRVR_DONE, - TLS_ST_SR_CERT, - TLS_ST_SR_COMP_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_GET_IANA_GROUPS 135 -# 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_get0_iana_groups(s, plst) \ - SSL_ctrl(s,SSL_CTRL_GET_IANA_GROUPS,0,(uint16_t **)(plst)) -# 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_get0_group_name(SSL *s); -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); -SSL_SESSION *d2i_SSL_SESSION_ex(SSL_SESSION **a, const unsigned char **pp, - long length, OSSL_LIB_CTX *libctx, - const char *propq); - -# 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); -int SSL_is_tls(const SSL *s); -int SSL_is_quic(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_get_extension_order(SSL *s, uint16_t *exts, - size_t *num_exts); -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); -__owur int SSL_get_handshake_rtt(const SSL *s, uint64_t *rtt); - -/* 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); - -/* QUIC support */ -int SSL_handle_events(SSL *s); -__owur int SSL_get_event_timeout(SSL *s, struct timeval *tv, int *is_infinite); -__owur int SSL_get_rpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc); -__owur int SSL_get_wpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc); -__owur int SSL_net_read_desired(SSL *s); -__owur int SSL_net_write_desired(SSL *s); -__owur int SSL_set_blocking_mode(SSL *s, int blocking); -__owur int SSL_get_blocking_mode(SSL *s); -__owur int SSL_set1_initial_peer_addr(SSL *s, const BIO_ADDR *peer_addr); -__owur SSL *SSL_get0_connection(SSL *s); -__owur int SSL_is_connection(SSL *s); - -#define SSL_STREAM_TYPE_NONE 0 -#define SSL_STREAM_TYPE_READ (1U << 0) -#define SSL_STREAM_TYPE_WRITE (1U << 1) -#define SSL_STREAM_TYPE_BIDI (SSL_STREAM_TYPE_READ | SSL_STREAM_TYPE_WRITE) -__owur int SSL_get_stream_type(SSL *s); - -__owur uint64_t SSL_get_stream_id(SSL *s); -__owur int SSL_is_stream_local(SSL *s); - -#define SSL_DEFAULT_STREAM_MODE_NONE 0 -#define SSL_DEFAULT_STREAM_MODE_AUTO_BIDI 1 -#define SSL_DEFAULT_STREAM_MODE_AUTO_UNI 2 -__owur int SSL_set_default_stream_mode(SSL *s, uint32_t mode); - -#define SSL_STREAM_FLAG_UNI (1U << 0) -#define SSL_STREAM_FLAG_NO_BLOCK (1U << 1) -#define SSL_STREAM_FLAG_ADVANCE (1U << 2) -__owur SSL *SSL_new_stream(SSL *s, uint64_t flags); - -#define SSL_INCOMING_STREAM_POLICY_AUTO 0 -#define SSL_INCOMING_STREAM_POLICY_ACCEPT 1 -#define SSL_INCOMING_STREAM_POLICY_REJECT 2 -__owur int SSL_set_incoming_stream_policy(SSL *s, int policy, uint64_t aec); - -#define SSL_ACCEPT_STREAM_NO_BLOCK (1U << 0) -__owur SSL *SSL_accept_stream(SSL *s, uint64_t flags); -__owur size_t SSL_get_accept_stream_queue_len(SSL *s); - -# ifndef OPENSSL_NO_QUIC -__owur int SSL_inject_net_dgram(SSL *s, const unsigned char *buf, - size_t buf_len, - const BIO_ADDR *peer, - const BIO_ADDR *local); -# endif - -typedef struct ssl_shutdown_ex_args_st { - uint64_t quic_error_code; - const char *quic_reason; -} SSL_SHUTDOWN_EX_ARGS; - -#define SSL_SHUTDOWN_FLAG_RAPID (1U << 0) -#define SSL_SHUTDOWN_FLAG_NO_STREAM_FLUSH (1U << 1) -#define SSL_SHUTDOWN_FLAG_NO_BLOCK (1U << 2) -#define SSL_SHUTDOWN_FLAG_WAIT_PEER (1U << 3) - -__owur int SSL_shutdown_ex(SSL *ssl, uint64_t flags, - const SSL_SHUTDOWN_EX_ARGS *args, - size_t args_len); - -__owur int SSL_stream_conclude(SSL *ssl, uint64_t flags); - -typedef struct ssl_stream_reset_args_st { - uint64_t quic_error_code; -} SSL_STREAM_RESET_ARGS; - -__owur int SSL_stream_reset(SSL *ssl, - const SSL_STREAM_RESET_ARGS *args, - size_t args_len); - -#define SSL_STREAM_STATE_NONE 0 -#define SSL_STREAM_STATE_OK 1 -#define SSL_STREAM_STATE_WRONG_DIR 2 -#define SSL_STREAM_STATE_FINISHED 3 -#define SSL_STREAM_STATE_RESET_LOCAL 4 -#define SSL_STREAM_STATE_RESET_REMOTE 5 -#define SSL_STREAM_STATE_CONN_CLOSED 6 -__owur int SSL_get_stream_read_state(SSL *ssl); -__owur int SSL_get_stream_write_state(SSL *ssl); - -__owur int SSL_get_stream_read_error_code(SSL *ssl, uint64_t *app_error_code); -__owur int SSL_get_stream_write_error_code(SSL *ssl, uint64_t *app_error_code); - -#define SSL_CONN_CLOSE_FLAG_LOCAL (1U << 0) -#define SSL_CONN_CLOSE_FLAG_TRANSPORT (1U << 1) - -typedef struct ssl_conn_close_info_st { - uint64_t error_code, frame_type; - const char *reason; - size_t reason_len; - uint32_t flags; -} SSL_CONN_CLOSE_INFO; - -__owur int SSL_get_conn_close_info(SSL *ssl, - SSL_CONN_CLOSE_INFO *info, - size_t info_len); - -# 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); - -/* RFC8879 Certificate compression APIs */ - -int SSL_CTX_compress_certs(SSL_CTX *ctx, int alg); -int SSL_compress_certs(SSL *ssl, int alg); - -int SSL_CTX_set1_cert_comp_preference(SSL_CTX *ctx, int *algs, size_t len); -int SSL_set1_cert_comp_preference(SSL *ssl, int *algs, size_t len); - -int SSL_CTX_set1_compressed_cert(SSL_CTX *ctx, int algorithm, unsigned char *comp_data, - size_t comp_length, size_t orig_length); -int SSL_set1_compressed_cert(SSL *ssl, int algorithm, unsigned char *comp_data, - size_t comp_length, size_t orig_length); -size_t SSL_CTX_get1_compressed_cert(SSL_CTX *ctx, int alg, unsigned char **data, size_t *orig_len); -size_t SSL_get1_compressed_cert(SSL *ssl, int alg, unsigned char **data, size_t *orig_len); - -__owur int SSL_add_expected_rpk(SSL *s, EVP_PKEY *rpk); -__owur EVP_PKEY *SSL_get0_peer_rpk(const SSL *s); -__owur EVP_PKEY *SSL_SESSION_get0_peer_rpk(SSL_SESSION *s); -__owur int SSL_get_negotiated_client_cert_type(const SSL *s); -__owur int SSL_get_negotiated_server_cert_type(const SSL *s); - -__owur int SSL_set1_client_cert_type(SSL *s, const unsigned char *val, size_t len); -__owur int SSL_set1_server_cert_type(SSL *s, const unsigned char *val, size_t len); -__owur int SSL_CTX_set1_client_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len); -__owur int SSL_CTX_set1_server_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len); -__owur int SSL_get0_client_cert_type(const SSL *s, unsigned char **t, size_t *len); -__owur int SSL_get0_server_cert_type(const SSL *s, unsigned char **t, size_t *len); -__owur int SSL_CTX_get0_client_cert_type(const SSL_CTX *ctx, unsigned char **t, size_t *len); -__owur int SSL_CTX_get0_server_cert_type(const SSL_CTX *s, unsigned char **t, size_t *len); - -# ifdef __cplusplus -} -# endif -#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 deleted file mode 100644 index 9f91039f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h.in +++ /dev/null @@ -1,2693 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 1995-2023 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 -# 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 0x00001 -/* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x00002 -/* Some extensions may be allowed in DTLS but we don't implement them for it */ -#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 -/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x00008 -/* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 -/* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x00020 -/* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x00040 -#define SSL_EXT_CLIENT_HELLO 0x00080 -/* Really means TLS1.2 or below */ -#define SSL_EXT_TLS1_2_SERVER_HELLO 0x00100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x00200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x00400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x00800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x01000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x02000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x04000 -#define SSL_EXT_TLS1_3_CERTIFICATE_COMPRESSION 0x08000 -/* When sending a raw public key in a certificate message */ -#define SSL_EXT_TLS1_3_RAW_PUBLIC_KEY 0x10000 - -/* 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) -/* - * Disable RFC8879 certificate compression - * SSL_OP_NO_TX_CERTIFICATE_COMPRESSION: don't send compressed certificates, - * and ignore the extension when received. - * SSL_OP_NO_RX_CERTIFICATE_COMPRESSION: don't send the extension, and - * subsequently indicating that receiving is not supported - */ -# define SSL_OP_NO_TX_CERTIFICATE_COMPRESSION SSL_OP_BIT(32) -# define SSL_OP_NO_RX_CERTIFICATE_COMPRESSION SSL_OP_BIT(33) - /* Enable KTLS TX zerocopy on Linux */ -# define SSL_OP_ENABLE_KTLS_TX_ZEROCOPY_SENDFILE SSL_OP_BIT(34) - -/* - * 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 -/* Cert pkey valid for raw public key use */ -# define CERT_PKEY_RPK 0x1000 - -# 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 */ -# include - -#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_COMP_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_COMP_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_COMP_CERT, - TLS_ST_SW_KEY_EXCH, - TLS_ST_SW_CERT_REQ, - TLS_ST_SW_SRVR_DONE, - TLS_ST_SR_CERT, - TLS_ST_SR_COMP_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_GET_IANA_GROUPS 135 -# 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_get0_iana_groups(s, plst) \ - SSL_ctrl(s,SSL_CTRL_GET_IANA_GROUPS,0,(uint16_t **)(plst)) -# 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_get0_group_name(SSL *s); -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); -SSL_SESSION *d2i_SSL_SESSION_ex(SSL_SESSION **a, const unsigned char **pp, - long length, OSSL_LIB_CTX *libctx, - const char *propq); - -# 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); -int SSL_is_tls(const SSL *s); -int SSL_is_quic(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_get_extension_order(SSL *s, uint16_t *exts, - size_t *num_exts); -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); -__owur int SSL_get_handshake_rtt(const SSL *s, uint64_t *rtt); - -/* 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); - -/* QUIC support */ -int SSL_handle_events(SSL *s); -__owur int SSL_get_event_timeout(SSL *s, struct timeval *tv, int *is_infinite); -__owur int SSL_get_rpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc); -__owur int SSL_get_wpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc); -__owur int SSL_net_read_desired(SSL *s); -__owur int SSL_net_write_desired(SSL *s); -__owur int SSL_set_blocking_mode(SSL *s, int blocking); -__owur int SSL_get_blocking_mode(SSL *s); -__owur int SSL_set1_initial_peer_addr(SSL *s, const BIO_ADDR *peer_addr); -__owur SSL *SSL_get0_connection(SSL *s); -__owur int SSL_is_connection(SSL *s); - -#define SSL_STREAM_TYPE_NONE 0 -#define SSL_STREAM_TYPE_READ (1U << 0) -#define SSL_STREAM_TYPE_WRITE (1U << 1) -#define SSL_STREAM_TYPE_BIDI (SSL_STREAM_TYPE_READ | SSL_STREAM_TYPE_WRITE) -__owur int SSL_get_stream_type(SSL *s); - -__owur uint64_t SSL_get_stream_id(SSL *s); -__owur int SSL_is_stream_local(SSL *s); - -#define SSL_DEFAULT_STREAM_MODE_NONE 0 -#define SSL_DEFAULT_STREAM_MODE_AUTO_BIDI 1 -#define SSL_DEFAULT_STREAM_MODE_AUTO_UNI 2 -__owur int SSL_set_default_stream_mode(SSL *s, uint32_t mode); - -#define SSL_STREAM_FLAG_UNI (1U << 0) -#define SSL_STREAM_FLAG_NO_BLOCK (1U << 1) -#define SSL_STREAM_FLAG_ADVANCE (1U << 2) -__owur SSL *SSL_new_stream(SSL *s, uint64_t flags); - -#define SSL_INCOMING_STREAM_POLICY_AUTO 0 -#define SSL_INCOMING_STREAM_POLICY_ACCEPT 1 -#define SSL_INCOMING_STREAM_POLICY_REJECT 2 -__owur int SSL_set_incoming_stream_policy(SSL *s, int policy, uint64_t aec); - -#define SSL_ACCEPT_STREAM_NO_BLOCK (1U << 0) -__owur SSL *SSL_accept_stream(SSL *s, uint64_t flags); -__owur size_t SSL_get_accept_stream_queue_len(SSL *s); - -# ifndef OPENSSL_NO_QUIC -__owur int SSL_inject_net_dgram(SSL *s, const unsigned char *buf, - size_t buf_len, - const BIO_ADDR *peer, - const BIO_ADDR *local); -# endif - -typedef struct ssl_shutdown_ex_args_st { - uint64_t quic_error_code; - const char *quic_reason; -} SSL_SHUTDOWN_EX_ARGS; - -#define SSL_SHUTDOWN_FLAG_RAPID (1U << 0) -#define SSL_SHUTDOWN_FLAG_NO_STREAM_FLUSH (1U << 1) -#define SSL_SHUTDOWN_FLAG_NO_BLOCK (1U << 2) -#define SSL_SHUTDOWN_FLAG_WAIT_PEER (1U << 3) - -__owur int SSL_shutdown_ex(SSL *ssl, uint64_t flags, - const SSL_SHUTDOWN_EX_ARGS *args, - size_t args_len); - -__owur int SSL_stream_conclude(SSL *ssl, uint64_t flags); - -typedef struct ssl_stream_reset_args_st { - uint64_t quic_error_code; -} SSL_STREAM_RESET_ARGS; - -__owur int SSL_stream_reset(SSL *ssl, - const SSL_STREAM_RESET_ARGS *args, - size_t args_len); - -#define SSL_STREAM_STATE_NONE 0 -#define SSL_STREAM_STATE_OK 1 -#define SSL_STREAM_STATE_WRONG_DIR 2 -#define SSL_STREAM_STATE_FINISHED 3 -#define SSL_STREAM_STATE_RESET_LOCAL 4 -#define SSL_STREAM_STATE_RESET_REMOTE 5 -#define SSL_STREAM_STATE_CONN_CLOSED 6 -__owur int SSL_get_stream_read_state(SSL *ssl); -__owur int SSL_get_stream_write_state(SSL *ssl); - -__owur int SSL_get_stream_read_error_code(SSL *ssl, uint64_t *app_error_code); -__owur int SSL_get_stream_write_error_code(SSL *ssl, uint64_t *app_error_code); - -#define SSL_CONN_CLOSE_FLAG_LOCAL (1U << 0) -#define SSL_CONN_CLOSE_FLAG_TRANSPORT (1U << 1) - -typedef struct ssl_conn_close_info_st { - uint64_t error_code, frame_type; - const char *reason; - size_t reason_len; - uint32_t flags; -} SSL_CONN_CLOSE_INFO; - -__owur int SSL_get_conn_close_info(SSL *ssl, - SSL_CONN_CLOSE_INFO *info, - size_t info_len); - -# 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); - -/* RFC8879 Certificate compression APIs */ - -int SSL_CTX_compress_certs(SSL_CTX *ctx, int alg); -int SSL_compress_certs(SSL *ssl, int alg); - -int SSL_CTX_set1_cert_comp_preference(SSL_CTX *ctx, int *algs, size_t len); -int SSL_set1_cert_comp_preference(SSL *ssl, int *algs, size_t len); - -int SSL_CTX_set1_compressed_cert(SSL_CTX *ctx, int algorithm, unsigned char *comp_data, - size_t comp_length, size_t orig_length); -int SSL_set1_compressed_cert(SSL *ssl, int algorithm, unsigned char *comp_data, - size_t comp_length, size_t orig_length); -size_t SSL_CTX_get1_compressed_cert(SSL_CTX *ctx, int alg, unsigned char **data, size_t *orig_len); -size_t SSL_get1_compressed_cert(SSL *ssl, int alg, unsigned char **data, size_t *orig_len); - -__owur int SSL_add_expected_rpk(SSL *s, EVP_PKEY *rpk); -__owur EVP_PKEY *SSL_get0_peer_rpk(const SSL *s); -__owur EVP_PKEY *SSL_SESSION_get0_peer_rpk(SSL_SESSION *s); -__owur int SSL_get_negotiated_client_cert_type(const SSL *s); -__owur int SSL_get_negotiated_server_cert_type(const SSL *s); - -__owur int SSL_set1_client_cert_type(SSL *s, const unsigned char *val, size_t len); -__owur int SSL_set1_server_cert_type(SSL *s, const unsigned char *val, size_t len); -__owur int SSL_CTX_set1_client_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len); -__owur int SSL_CTX_set1_server_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len); -__owur int SSL_get0_client_cert_type(const SSL *s, unsigned char **t, size_t *len); -__owur int SSL_get0_server_cert_type(const SSL *s, unsigned char **t, size_t *len); -__owur int SSL_CTX_get0_client_cert_type(const SSL_CTX *ctx, unsigned char **t, size_t *len); -__owur int SSL_CTX_get0_server_cert_type(const SSL_CTX *s, unsigned char **t, size_t *len); - -# 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 deleted file mode 100644 index 428ead05..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl2.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_SSL2_H -# define OPENSSL_SSL2_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_SSL2_H -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define SSL2_VERSION 0x0002 - -# define SSL2_MT_CLIENT_HELLO 1 - -#ifdef __cplusplus -} -#endif -#endif 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 deleted file mode 100644 index 4f076c6c..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h +++ /dev/null @@ -1,357 +0,0 @@ -/* - * Copyright 1995-2023 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 - */ - -#ifndef OPENSSL_SSL3_H -# define OPENSSL_SSL3_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_SSL3_H -# endif - -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Signalling cipher suite value from RFC 5746 - * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV) - */ -# define SSL3_CK_SCSV 0x030000FF - -/* - * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00 - * (TLS_FALLBACK_SCSV) - */ -# define SSL3_CK_FALLBACK_SCSV 0x03005600 - -# define SSL3_CK_RSA_NULL_MD5 0x03000001 -# define SSL3_CK_RSA_NULL_SHA 0x03000002 -# define SSL3_CK_RSA_RC4_40_MD5 0x03000003 -# define SSL3_CK_RSA_RC4_128_MD5 0x03000004 -# define SSL3_CK_RSA_RC4_128_SHA 0x03000005 -# define SSL3_CK_RSA_RC2_40_MD5 0x03000006 -# define SSL3_CK_RSA_IDEA_128_SHA 0x03000007 -# define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008 -# define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009 -# define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A - -# define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B -# define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C -# define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D -# define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E -# define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F -# define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010 - -# define SSL3_CK_DHE_DSS_DES_40_CBC_SHA 0x03000011 -# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA SSL3_CK_DHE_DSS_DES_40_CBC_SHA -# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA 0x03000012 -# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA SSL3_CK_DHE_DSS_DES_64_CBC_SHA -# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA 0x03000013 -# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA SSL3_CK_DHE_DSS_DES_192_CBC3_SHA -# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA 0x03000014 -# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA SSL3_CK_DHE_RSA_DES_40_CBC_SHA -# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA 0x03000015 -# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA SSL3_CK_DHE_RSA_DES_64_CBC_SHA -# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA 0x03000016 -# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA SSL3_CK_DHE_RSA_DES_192_CBC3_SHA - -# define SSL3_CK_ADH_RC4_40_MD5 0x03000017 -# define SSL3_CK_ADH_RC4_128_MD5 0x03000018 -# define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019 -# define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A -# define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B - -/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ -# define SSL3_RFC_RSA_NULL_MD5 "TLS_RSA_WITH_NULL_MD5" -# define SSL3_RFC_RSA_NULL_SHA "TLS_RSA_WITH_NULL_SHA" -# define SSL3_RFC_RSA_DES_192_CBC3_SHA "TLS_RSA_WITH_3DES_EDE_CBC_SHA" -# define SSL3_RFC_DHE_DSS_DES_192_CBC3_SHA "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA" -# define SSL3_RFC_DHE_RSA_DES_192_CBC3_SHA "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA" -# define SSL3_RFC_ADH_DES_192_CBC_SHA "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA" -# define SSL3_RFC_RSA_IDEA_128_SHA "TLS_RSA_WITH_IDEA_CBC_SHA" -# define SSL3_RFC_RSA_RC4_128_MD5 "TLS_RSA_WITH_RC4_128_MD5" -# define SSL3_RFC_RSA_RC4_128_SHA "TLS_RSA_WITH_RC4_128_SHA" -# define SSL3_RFC_ADH_RC4_128_MD5 "TLS_DH_anon_WITH_RC4_128_MD5" - -# define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5" -# define SSL3_TXT_RSA_NULL_SHA "NULL-SHA" -# define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5" -# define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5" -# define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA" -# define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5" -# define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA" -# define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA" -# define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA" -# define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA" - -# define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA" -# define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA" -# define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA" -# define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA" -# define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA" -# define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA" - -# define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA "EXP-DHE-DSS-DES-CBC-SHA" -# define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA "DHE-DSS-DES-CBC-SHA" -# define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA "DHE-DSS-DES-CBC3-SHA" -# define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA "EXP-DHE-RSA-DES-CBC-SHA" -# define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA "DHE-RSA-DES-CBC-SHA" -# define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA "DHE-RSA-DES-CBC3-SHA" - -/* - * This next block of six "EDH" labels is for backward compatibility with - * older versions of OpenSSL. New code should use the six "DHE" labels above - * instead: - */ -# define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA" -# define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA" -# define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA" -# define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA" -# define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA" -# define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA" - -# define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5" -# define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5" -# define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA" -# define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA" -# define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA" - -# define SSL3_SSL_SESSION_ID_LENGTH 32 -# define SSL3_MAX_SSL_SESSION_ID_LENGTH 32 - -# define SSL3_MASTER_SECRET_SIZE 48 -# define SSL3_RANDOM_SIZE 32 -# define SSL3_SESSION_ID_SIZE 32 -# define SSL3_RT_HEADER_LENGTH 5 - -# define SSL3_HM_HEADER_LENGTH 4 - -# ifndef SSL3_ALIGN_PAYLOAD - /* - * Some will argue that this increases memory footprint, but it's not - * actually true. Point is that malloc has to return at least 64-bit aligned - * pointers, meaning that allocating 5 bytes wastes 3 bytes in either case. - * Suggested pre-gaping simply moves these wasted bytes from the end of - * allocated region to its front, but makes data payload aligned, which - * improves performance:-) - */ -# define SSL3_ALIGN_PAYLOAD 8 -# else -# if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0 -# error "insane SSL3_ALIGN_PAYLOAD" -# undef SSL3_ALIGN_PAYLOAD -# endif -# endif - -/* - * This is the maximum MAC (digest) size used by the SSL library. Currently - * maximum of 20 is used by SHA1, but we reserve for future extension for - * 512-bit hashes. - */ - -# define SSL3_RT_MAX_MD_SIZE 64 - -/* - * Maximum block size used in all ciphersuites. Currently 16 for AES. - */ - -# define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16 - -# define SSL3_RT_MAX_EXTRA (16384) - -/* Maximum plaintext length: defined by SSL/TLS standards */ -# define SSL3_RT_MAX_PLAIN_LENGTH 16384 -/* Maximum compression overhead: defined by SSL/TLS standards */ -# define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024 - -/* - * The standards give a maximum encryption overhead of 1024 bytes. In - * practice the value is lower than this. The overhead is the maximum number - * of padding bytes (256) plus the mac size. - */ -# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE) -# define SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD 256 - -/* - * OpenSSL currently only uses a padding length of at most one block so the - * send overhead is smaller. - */ - -# define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \ - (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE) - -/* If compression isn't used don't include the compression overhead */ - -# ifdef OPENSSL_NO_COMP -# define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH -# else -# define SSL3_RT_MAX_COMPRESSED_LENGTH \ - (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) -# endif -# define SSL3_RT_MAX_ENCRYPTED_LENGTH \ - (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) -# define SSL3_RT_MAX_TLS13_ENCRYPTED_LENGTH \ - (SSL3_RT_MAX_PLAIN_LENGTH + SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD) -# define SSL3_RT_MAX_PACKET_SIZE \ - (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) - -# define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" -# define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" - -/* SSL3_VERSION is defined in prov_ssl.h */ -# define SSL3_VERSION_MAJOR 0x03 -# define SSL3_VERSION_MINOR 0x00 - -# define SSL3_RT_CHANGE_CIPHER_SPEC 20 -# define SSL3_RT_ALERT 21 -# define SSL3_RT_HANDSHAKE 22 -# define SSL3_RT_APPLICATION_DATA 23 - -/* Pseudo content types to indicate additional parameters */ -# define TLS1_RT_CRYPTO 0x1000 -# define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1) -# define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2) -# define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3) -# define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4) - -# define TLS1_RT_CRYPTO_READ 0x0000 -# define TLS1_RT_CRYPTO_WRITE 0x0100 -# define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5) -# define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6) -# define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7) -# define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8) - -/* Pseudo content types for SSL/TLS header info */ -# define SSL3_RT_HEADER 0x100 -# define SSL3_RT_INNER_CONTENT_TYPE 0x101 - -/* Pseudo content types for QUIC */ -# define SSL3_RT_QUIC_DATAGRAM 0x200 -# define SSL3_RT_QUIC_PACKET 0x201 -# define SSL3_RT_QUIC_FRAME_FULL 0x202 -# define SSL3_RT_QUIC_FRAME_HEADER 0x203 -# define SSL3_RT_QUIC_FRAME_PADDING 0x204 - -# define SSL3_AL_WARNING 1 -# define SSL3_AL_FATAL 2 - -# define SSL3_AD_CLOSE_NOTIFY 0 -# define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */ -# define SSL3_AD_BAD_RECORD_MAC 20/* fatal */ -# define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */ -# define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */ -# define SSL3_AD_NO_CERTIFICATE 41 -# define SSL3_AD_BAD_CERTIFICATE 42 -# define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 -# define SSL3_AD_CERTIFICATE_REVOKED 44 -# define SSL3_AD_CERTIFICATE_EXPIRED 45 -# define SSL3_AD_CERTIFICATE_UNKNOWN 46 -# define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */ - -# define TLS1_HB_REQUEST 1 -# define TLS1_HB_RESPONSE 2 - - -# define SSL3_CT_RSA_SIGN 1 -# define SSL3_CT_DSS_SIGN 2 -# define SSL3_CT_RSA_FIXED_DH 3 -# define SSL3_CT_DSS_FIXED_DH 4 -# define SSL3_CT_RSA_EPHEMERAL_DH 5 -# define SSL3_CT_DSS_EPHEMERAL_DH 6 -# define SSL3_CT_FORTEZZA_DMS 20 -/* - * 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 12 - -# if defined(TLS_CT_NUMBER) -# if TLS_CT_NUMBER != SSL3_CT_NUMBER -# error "SSL/TLS CT_NUMBER values do not match" -# endif -# endif - -/* No longer used as of OpenSSL 1.1.1 */ -# define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 - -/* Removed from OpenSSL 1.1.0 */ -# define TLS1_FLAGS_TLS_PADDING_BUG 0x0 - -# define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 - -/* Set if we encrypt then mac instead of usual mac then encrypt */ -# define TLS1_FLAGS_ENCRYPT_THEN_MAC_READ 0x0100 -# define TLS1_FLAGS_ENCRYPT_THEN_MAC TLS1_FLAGS_ENCRYPT_THEN_MAC_READ - -/* Set if extended master secret extension received from peer */ -# define TLS1_FLAGS_RECEIVED_EXTMS 0x0200 - -# define TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE 0x0400 - -# define TLS1_FLAGS_STATELESS 0x0800 - -/* Set if extended master secret extension required on renegotiation */ -# define TLS1_FLAGS_REQUIRED_EXTMS 0x1000 - -/* 0x2000 is reserved for TLS1_FLAGS_QUIC (internal) */ - -# define SSL3_MT_HELLO_REQUEST 0 -# define SSL3_MT_CLIENT_HELLO 1 -# define SSL3_MT_SERVER_HELLO 2 -# define SSL3_MT_NEWSESSION_TICKET 4 -# define SSL3_MT_END_OF_EARLY_DATA 5 -# define SSL3_MT_ENCRYPTED_EXTENSIONS 8 -# define SSL3_MT_CERTIFICATE 11 -# define SSL3_MT_SERVER_KEY_EXCHANGE 12 -# define SSL3_MT_CERTIFICATE_REQUEST 13 -# define SSL3_MT_SERVER_DONE 14 -# define SSL3_MT_CERTIFICATE_VERIFY 15 -# define SSL3_MT_CLIENT_KEY_EXCHANGE 16 -# define SSL3_MT_FINISHED 20 -# define SSL3_MT_CERTIFICATE_URL 21 -# define SSL3_MT_CERTIFICATE_STATUS 22 -# define SSL3_MT_SUPPLEMENTAL_DATA 23 -# define SSL3_MT_KEY_UPDATE 24 -# define SSL3_MT_COMPRESSED_CERTIFICATE 25 -# ifndef OPENSSL_NO_NEXTPROTONEG -# define SSL3_MT_NEXT_PROTO 67 -# endif -# define SSL3_MT_MESSAGE_HASH 254 -# define DTLS1_MT_HELLO_VERIFY_REQUEST 3 - -/* Dummy message type for handling CCS like a normal handshake message */ -# define SSL3_MT_CHANGE_CIPHER_SPEC 0x0101 - -# define SSL3_MT_CCS 1 - -/* These are used when changing over to a new cipher */ -# define SSL3_CC_READ 0x001 -# define SSL3_CC_WRITE 0x002 -# define SSL3_CC_CLIENT 0x010 -# define SSL3_CC_SERVER 0x020 -# define SSL3_CC_EARLY 0x040 -# define SSL3_CC_HANDSHAKE 0x080 -# define SSL3_CC_APPLICATION 0x100 -# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE) -# define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ) -# define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ) -# define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE) - -#ifdef __cplusplus -} -#endif -#endif 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 deleted file mode 100644 index e1eb9a56..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h +++ /dev/null @@ -1,368 +0,0 @@ -/* - * 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_SSLERR_H -# define OPENSSL_SSLERR_H -# pragma once - -# include -# include -# include - - - -/* - * SSL reason codes. - */ -# 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_2_NEEDED_IN_SUITEB_MODE 158 -# define SSL_R_BAD_CERTIFICATE 348 -# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 -# define SSL_R_BAD_CIPHER 186 -# define SSL_R_BAD_COMPRESSION_ALGORITHM 326 -# define SSL_R_BAD_DATA 390 -# define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 -# define SSL_R_BAD_DECOMPRESSION 107 -# define SSL_R_BAD_DH_VALUE 102 -# define SSL_R_BAD_DIGEST_LENGTH 111 -# define SSL_R_BAD_EARLY_DATA 233 -# define SSL_R_BAD_ECC_CERT 304 -# define SSL_R_BAD_ECPOINT 306 -# define SSL_R_BAD_EXTENSION 110 -# define SSL_R_BAD_HANDSHAKE_LENGTH 332 -# define SSL_R_BAD_HANDSHAKE_STATE 236 -# define SSL_R_BAD_HELLO_REQUEST 105 -# define SSL_R_BAD_HRR_VERSION 263 -# define SSL_R_BAD_KEY_SHARE 108 -# define SSL_R_BAD_KEY_UPDATE 122 -# define SSL_R_BAD_LEGACY_VERSION 292 -# define SSL_R_BAD_LENGTH 271 -# define SSL_R_BAD_PACKET 240 -# define SSL_R_BAD_PACKET_LENGTH 115 -# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 -# define SSL_R_BAD_PSK 219 -# define SSL_R_BAD_PSK_IDENTITY 114 -# define SSL_R_BAD_RECORD_TYPE 443 -# define SSL_R_BAD_RSA_ENCRYPT 119 -# define SSL_R_BAD_SIGNATURE 123 -# define SSL_R_BAD_SRP_A_LENGTH 347 -# define SSL_R_BAD_SRP_PARAMETERS 371 -# define SSL_R_BAD_SRTP_MKI_VALUE 352 -# define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST 353 -# define SSL_R_BAD_SSL_FILETYPE 124 -# define SSL_R_BAD_VALUE 384 -# define SSL_R_BAD_WRITE_RETRY 127 -# define SSL_R_BINDER_DOES_NOT_VERIFY 253 -# define SSL_R_BIO_NOT_SET 128 -# define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129 -# 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 -# define SSL_R_CCS_RECEIVED_EARLY 133 -# define SSL_R_CERTIFICATE_VERIFY_FAILED 134 -# define SSL_R_CERT_CB_ERROR 377 -# 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_CLIENTHELLO_TLSEXT 226 -# define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 -# define SSL_R_COMPRESSION_DISABLED 343 -# define SSL_R_COMPRESSION_FAILURE 141 -# define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 -# define SSL_R_COMPRESSION_LIBRARY_ERROR 142 -# define SSL_R_CONNECTION_TYPE_NOT_SET 144 -# define SSL_R_CONN_USE_ONLY 356 -# 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 -# define SSL_R_DANE_NOT_ENABLED 175 -# define SSL_R_DANE_TLSA_BAD_CERTIFICATE 180 -# define SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE 184 -# define SSL_R_DANE_TLSA_BAD_DATA_LENGTH 189 -# define SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH 192 -# define SSL_R_DANE_TLSA_BAD_MATCHING_TYPE 200 -# define SSL_R_DANE_TLSA_BAD_PUBLIC_KEY 201 -# define SSL_R_DANE_TLSA_BAD_SELECTOR 202 -# define SSL_R_DANE_TLSA_NULL_DATA 203 -# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 -# define SSL_R_DATA_LENGTH_TOO_LONG 146 -# define SSL_R_DECRYPTION_FAILED 147 -# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 -# define SSL_R_DH_KEY_TOO_SMALL 394 -# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 -# define SSL_R_DIGEST_CHECK_FAILED 149 -# define SSL_R_DTLS_MESSAGE_TOO_BIG 334 -# define SSL_R_DUPLICATE_COMPRESSION_ID 309 -# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 -# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 -# define SSL_R_EE_KEY_TOO_SMALL 399 -# define SSL_R_EMPTY_RAW_PUBLIC_KEY 349 -# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 -# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 -# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 -# define SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN 204 -# define SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE 194 -# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 -# define SSL_R_EXTENSION_NOT_RECEIVED 279 -# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 -# define SSL_R_EXT_LENGTH_MISMATCH 163 -# define SSL_R_FAILED_TO_GET_PARAMETER 316 -# define SSL_R_FAILED_TO_INIT_ASYNC 405 -# define SSL_R_FRAGMENTED_CLIENT_HELLO 401 -# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 -# define SSL_R_HTTPS_PROXY_REQUEST 155 -# define SSL_R_HTTP_REQUEST 156 -# define SSL_R_ILLEGAL_POINT_COMPRESSION 162 -# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 -# define SSL_R_INAPPROPRIATE_FALLBACK 373 -# define SSL_R_INCONSISTENT_COMPRESSION 340 -# define SSL_R_INCONSISTENT_EARLY_DATA_ALPN 222 -# define SSL_R_INCONSISTENT_EARLY_DATA_SNI 231 -# define SSL_R_INCONSISTENT_EXTMS 104 -# define SSL_R_INSUFFICIENT_SECURITY 241 -# define SSL_R_INVALID_ALERT 205 -# define SSL_R_INVALID_CCS_MESSAGE 260 -# define SSL_R_INVALID_CERTIFICATE_OR_ALG 238 -# define SSL_R_INVALID_COMMAND 280 -# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 -# define SSL_R_INVALID_CONFIG 283 -# define SSL_R_INVALID_CONFIGURATION_NAME 113 -# define SSL_R_INVALID_CONTEXT 282 -# define SSL_R_INVALID_CT_VALIDATION_TYPE 212 -# define SSL_R_INVALID_KEY_UPDATE_TYPE 120 -# define SSL_R_INVALID_MAX_EARLY_DATA 174 -# define SSL_R_INVALID_NULL_CMD_NAME 385 -# define SSL_R_INVALID_RAW_PUBLIC_KEY 350 -# define SSL_R_INVALID_RECORD 317 -# define SSL_R_INVALID_SEQUENCE_NUMBER 402 -# define SSL_R_INVALID_SERVERINFO_DATA 388 -# define SSL_R_INVALID_SESSION_ID 999 -# 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 -# define SSL_R_LIBRARY_BUG 274 -# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 -# define SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED 395 -# define SSL_R_MISSING_DSA_SIGNING_CERT 165 -# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 -# define SSL_R_MISSING_FATAL 256 -# define SSL_R_MISSING_PARAMETERS 290 -# define SSL_R_MISSING_PSK_KEX_MODES_EXTENSION 310 -# define SSL_R_MISSING_RSA_CERTIFICATE 168 -# define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 -# define SSL_R_MISSING_RSA_SIGNING_CERT 170 -# define SSL_R_MISSING_SIGALGS_EXTENSION 112 -# define SSL_R_MISSING_SIGNING_CERT 221 -# define SSL_R_MISSING_SRP_PARAM 358 -# define SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION 209 -# define SSL_R_MISSING_TMP_DH_KEY 171 -# define SSL_R_MISSING_TMP_ECDH_KEY 311 -# define SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA 293 -# define SSL_R_NOT_ON_RECORD_BOUNDARY 182 -# define SSL_R_NOT_REPLACING_CERTIFICATE 289 -# define SSL_R_NOT_SERVER 284 -# define SSL_R_NO_APPLICATION_PROTOCOL 235 -# define SSL_R_NO_CERTIFICATES_RETURNED 176 -# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 -# define SSL_R_NO_CERTIFICATE_SET 179 -# define SSL_R_NO_CHANGE_FOLLOWING_HRR 214 -# define SSL_R_NO_CIPHERS_AVAILABLE 181 -# define SSL_R_NO_CIPHERS_SPECIFIED 183 -# define SSL_R_NO_CIPHER_MATCH 185 -# define SSL_R_NO_CLIENT_CERT_METHOD 331 -# define SSL_R_NO_COMPRESSION_SPECIFIED 187 -# define SSL_R_NO_COOKIE_CALLBACK_SET 287 -# define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330 -# define SSL_R_NO_METHOD_SPECIFIED 188 -# define SSL_R_NO_PEM_EXTENSIONS 389 -# define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 -# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 -# define SSL_R_NO_RENEGOTIATION 339 -# define SSL_R_NO_REQUIRED_DIGEST 324 -# define SSL_R_NO_SHARED_CIPHER 193 -# 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_STREAM 355 -# 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_RECORD_LAYER 322 -# 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 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 -# define SSL_R_PACKET_LENGTH_TOO_LONG 198 -# define SSL_R_PARSE_TLSEXT 227 -# define SSL_R_PATH_TOO_LONG 270 -# define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 199 -# define SSL_R_PEM_NAME_BAD_PREFIX 391 -# define SSL_R_PEM_NAME_TOO_SHORT 392 -# define SSL_R_PIPELINE_FAILURE 406 -# define SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR 278 -# define SSL_R_PRIVATE_KEY_MISMATCH 288 -# define SSL_R_PROTOCOL_IS_SHUTDOWN 207 -# define SSL_R_PSK_IDENTITY_NOT_FOUND 223 -# define SSL_R_PSK_NO_CLIENT_CB 224 -# define SSL_R_PSK_NO_SERVER_CB 225 -# define SSL_R_QUIC_HANDSHAKE_LAYER_ERROR 393 -# define SSL_R_QUIC_NETWORK_ERROR 387 -# define SSL_R_QUIC_PROTOCOL_ERROR 382 -# define SSL_R_READ_BIO_NOT_SET 211 -# define SSL_R_READ_TIMEOUT_EXPIRED 312 -# define SSL_R_RECORDS_NOT_RELEASED 321 -# define SSL_R_RECORD_LAYER_FAILURE 313 -# define SSL_R_RECORD_LENGTH_MISMATCH 213 -# define SSL_R_RECORD_TOO_SMALL 298 -# define SSL_R_REMOTE_PEER_ADDRESS_NOT_SET 346 -# define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 -# define SSL_R_RENEGOTIATION_ENCODING_ERR 336 -# define SSL_R_RENEGOTIATION_MISMATCH 337 -# define SSL_R_REQUEST_PENDING 285 -# define SSL_R_REQUEST_SENT 286 -# define SSL_R_REQUIRED_CIPHER_MISSING 215 -# define SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING 342 -# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 -# define SSL_R_SCT_VERIFICATION_FAILED 208 -# define SSL_R_SEQUENCE_CTR_WRAPPED 327 -# define SSL_R_SERVERHELLO_TLSEXT 275 -# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 -# define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 -# define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 -# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 -# define SSL_R_SRP_A_CALC 361 -# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 -# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 -# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 -# define SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH 232 -# define SSL_R_SSL3_EXT_INVALID_SERVERNAME 319 -# define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 320 -# define SSL_R_SSL3_SESSION_ID_TOO_LONG 300 -# define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 -# define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 -# define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 -# define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 -# define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 -# define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 -# define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 -# define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 -# define SSL_R_SSL_COMMAND_SECTION_EMPTY 117 -# define SSL_R_SSL_COMMAND_SECTION_NOT_FOUND 125 -# define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 228 -# define SSL_R_SSL_HANDSHAKE_FAILURE 229 -# define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 230 -# define SSL_R_SSL_NEGATIVE_LENGTH 372 -# define SSL_R_SSL_SECTION_EMPTY 126 -# define SSL_R_SSL_SECTION_NOT_FOUND 136 -# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 -# define SSL_R_SSL_SESSION_ID_CONFLICT 302 -# define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 273 -# define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 -# define SSL_R_SSL_SESSION_ID_TOO_LONG 408 -# define SSL_R_SSL_SESSION_VERSION_MISMATCH 210 -# define SSL_R_STILL_IN_INIT 121 -# define SSL_R_STREAM_COUNT_LIMITED 411 -# define SSL_R_STREAM_FINISHED 365 -# define SSL_R_STREAM_RECV_ONLY 366 -# define SSL_R_STREAM_RESET 375 -# define SSL_R_STREAM_SEND_ONLY 379 -# define SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED 1116 -# define SSL_R_TLSV13_ALERT_MISSING_EXTENSION 1109 -# define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 -# define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 -# define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 -# define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 -# define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 -# define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 -# define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 -# define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 -# define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 -# define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 -# define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 -# define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 -# define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 -# define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 -# define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 -# 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_ILLEGAL_EXPORTER_LABEL 367 -# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 -# define SSL_R_TOO_MANY_KEY_UPDATES 132 -# define SSL_R_TOO_MANY_WARN_ALERTS 409 -# define SSL_R_TOO_MUCH_EARLY_DATA 164 -# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 -# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 -# define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 242 -# 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 -# define SSL_R_UNKNOWN_ALERT_TYPE 246 -# define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 -# define SSL_R_UNKNOWN_CIPHER_RETURNED 248 -# define SSL_R_UNKNOWN_CIPHER_TYPE 249 -# define SSL_R_UNKNOWN_CMD_NAME 386 -# define SSL_R_UNKNOWN_COMMAND 139 -# define SSL_R_UNKNOWN_DIGEST 368 -# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 -# define SSL_R_UNKNOWN_MANDATORY_PARAMETER 323 -# define SSL_R_UNKNOWN_PKEY_TYPE 251 -# define SSL_R_UNKNOWN_PROTOCOL 252 -# define SSL_R_UNKNOWN_SSL_VERSION 254 -# define SSL_R_UNKNOWN_STATE 255 -# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 -# define SSL_R_UNSOLICITED_EXTENSION 217 -# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 -# define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 -# define SSL_R_UNSUPPORTED_PROTOCOL 258 -# define SSL_R_UNSUPPORTED_SSL_VERSION 259 -# define SSL_R_UNSUPPORTED_STATUS_TYPE 329 -# define SSL_R_USE_SRTP_NOT_NEGOTIATED 369 -# define SSL_R_VERSION_TOO_HIGH 166 -# define SSL_R_VERSION_TOO_LOW 396 -# define SSL_R_WRONG_CERTIFICATE_TYPE 383 -# define SSL_R_WRONG_CIPHER_RETURNED 261 -# define SSL_R_WRONG_CURVE 378 -# define SSL_R_WRONG_RPK_TYPE 351 -# define SSL_R_WRONG_SIGNATURE_LENGTH 264 -# define SSL_R_WRONG_SIGNATURE_SIZE 265 -# define SSL_R_WRONG_SIGNATURE_TYPE 370 -# define SSL_R_WRONG_SSL_VERSION 266 -# define SSL_R_WRONG_VERSION_NUMBER 267 -# define SSL_R_X509_LIB 268 -# define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 - -#endif 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 deleted file mode 100644 index ccf6d3b3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr_legacy.h +++ /dev/null @@ -1,468 +0,0 @@ -/* - * 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 deleted file mode 100644 index f0c5c547..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/stack.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * 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_STACK_H -# define OPENSSL_STACK_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_STACK_H -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct stack_st OPENSSL_STACK; /* Use STACK_OF(...) instead */ - -typedef int (*OPENSSL_sk_compfunc)(const void *, const void *); -typedef void (*OPENSSL_sk_freefunc)(void *); -typedef void *(*OPENSSL_sk_copyfunc)(const void *); - -int OPENSSL_sk_num(const OPENSSL_STACK *); -void *OPENSSL_sk_value(const OPENSSL_STACK *, int); - -void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data); - -OPENSSL_STACK *OPENSSL_sk_new(OPENSSL_sk_compfunc cmp); -OPENSSL_STACK *OPENSSL_sk_new_null(void); -OPENSSL_STACK *OPENSSL_sk_new_reserve(OPENSSL_sk_compfunc c, int n); -int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n); -void OPENSSL_sk_free(OPENSSL_STACK *); -void OPENSSL_sk_pop_free(OPENSSL_STACK *st, void (*func) (void *)); -OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *, - OPENSSL_sk_copyfunc c, - OPENSSL_sk_freefunc f); -int OPENSSL_sk_insert(OPENSSL_STACK *sk, const void *data, int where); -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); -void *OPENSSL_sk_pop(OPENSSL_STACK *st); -void OPENSSL_sk_zero(OPENSSL_STACK *st); -OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, - OPENSSL_sk_compfunc cmp); -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); - -# ifndef OPENSSL_NO_DEPRECATED_1_1_0 -# define _STACK OPENSSL_STACK -# define sk_num OPENSSL_sk_num -# define sk_value OPENSSL_sk_value -# define sk_set OPENSSL_sk_set -# define sk_new OPENSSL_sk_new -# define sk_new_null OPENSSL_sk_new_null -# define sk_free OPENSSL_sk_free -# define sk_pop_free OPENSSL_sk_pop_free -# define sk_deep_copy OPENSSL_sk_deep_copy -# define sk_insert OPENSSL_sk_insert -# define sk_delete OPENSSL_sk_delete -# define sk_delete_ptr OPENSSL_sk_delete_ptr -# define sk_find OPENSSL_sk_find -# define sk_find_ex OPENSSL_sk_find_ex -# define sk_push OPENSSL_sk_push -# define sk_unshift OPENSSL_sk_unshift -# define sk_shift OPENSSL_sk_shift -# define sk_pop OPENSSL_sk_pop -# define sk_zero OPENSSL_sk_zero -# define sk_set_cmp_func OPENSSL_sk_set_cmp_func -# define sk_dup OPENSSL_sk_dup -# define sk_sort OPENSSL_sk_sort -# define sk_is_sorted OPENSSL_sk_is_sorted -# endif - -#ifdef __cplusplus -} -#endif - -#endif 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 deleted file mode 100644 index e6ea3cf8..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h +++ /dev/null @@ -1,377 +0,0 @@ -/* - * Copyright 2016-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_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 - -# ifdef __cplusplus -extern "C" { -# endif - -/*- - * The main OSSL_STORE functions. - * ------------------------------ - * - * These allow applications to open a channel to a resource with supported - * data (keys, certs, crls, ...), read the data a piece at a time and decide - * what to do with it, and finally close. - */ - -typedef struct ossl_store_ctx_st OSSL_STORE_CTX; - -/* - * Typedef for the OSSL_STORE_INFO post processing callback. This can be used - * to massage the given OSSL_STORE_INFO, or to drop it entirely (by returning - * NULL). - */ -typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, - void *); - -/* - * Open a channel given a URI. 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. - */ -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 - * done, and depends on the underlying loader (use OSSL_STORE_get0_scheme to - * determine which loader is used), except for common commands (see below). - * Each command takes different arguments. - */ -# 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. - */ -/* int on = 0 or 1; STORE_ctrl(ctx, STORE_C_USE_SECMEM, &on); */ -# define OSSL_STORE_C_USE_SECMEM 1 -/* 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. - * Returns a OSSL_STORE_INFO pointer, from which OpenSSL typed data can be - * extracted with OSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT(), ... - * NULL is returned on error, which may include that the data found at the URI - * can't be figured out for certain or is ambiguous. - */ -OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx); - -/* - * Deletes the object in the store by URI. - * Returns 1 on success, 0 otherwise. - */ -int OSSL_STORE_delete(const char *uri, OSSL_LIB_CTX *libctx, const char *propq, - const UI_METHOD *ui_method, void *ui_data, - const OSSL_PARAM params[]); - -/* - * Check if end of data (end of file) is reached - * Returns 1 on end, 0 otherwise. - */ -int OSSL_STORE_eof(OSSL_STORE_CTX *ctx); - -/* - * Check if an error occurred - * Returns 1 if it did, 0 otherwise. - */ -int OSSL_STORE_error(OSSL_STORE_CTX *ctx); - -/* - * Close the channel - * Returns 1 on success, 0 on error. - */ -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 - * --------------------------------------------------------------- - */ - -/* - * Types of data that can be ossl_stored in a OSSL_STORE_INFO. - * OSSL_STORE_INFO_NAME is typically found when getting a listing of - * available "files" / "tokens" / what have you. - */ -# define OSSL_STORE_INFO_NAME 1 /* char * */ -# define OSSL_STORE_INFO_PARAMS 2 /* EVP_PKEY * */ -# 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 - * support having in them, as well as a generic constructor. - * - * 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); - -/* - * 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); -X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *info); -X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *info); -X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *info); - -const char *OSSL_STORE_INFO_type_string(int type); - -/* - * Free the OSSL_STORE_INFO - */ -void OSSL_STORE_INFO_free(OSSL_STORE_INFO *info); - - -/*- - * Functions to construct a search URI from a base URI and search criteria - * ----------------------------------------------------------------------- - */ - -/* OSSL_STORE search types */ -# define OSSL_STORE_SEARCH_BY_NAME 1 /* subject in certs, issuer in CRLs */ -# define OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 2 -# define OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 3 -# define OSSL_STORE_SEARCH_BY_ALIAS 4 - -/* To check what search types the scheme handler supports */ -int OSSL_STORE_supports_search(OSSL_STORE_CTX *ctx, int search_type); - -/* Search term constructors */ -/* - * The input is considered to be owned by the caller, and must therefore - * remain present throughout the lifetime of the returned OSSL_STORE_SEARCH - */ -OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name); -OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name, - const ASN1_INTEGER - *serial); -OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest, - const unsigned char - *bytes, size_t len); -OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias); - -/* Search term destructor */ -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(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 - *criterion, size_t *length); -const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion); -const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion); - -/* - * Add search criterion and expected return type (which can be unspecified) - * 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, 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. - * ------------------------------------------------------- - * - * The loader receives all the main components of an URI except for the - * scheme. - */ - -# 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_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); -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); -OSSL_DEPRECATEDIN_3_0 -int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, - OSSL_STORE_expect_fn expect_function); -OSSL_DEPRECATEDIN_3_0 -int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, - OSSL_STORE_find_fn find_function); -OSSL_DEPRECATEDIN_3_0 -int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, - OSSL_STORE_load_fn load_function); -OSSL_DEPRECATEDIN_3_0 -int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, - OSSL_STORE_eof_fn eof_function); -OSSL_DEPRECATEDIN_3_0 -int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, - OSSL_STORE_error_fn error_function); -OSSL_DEPRECATEDIN_3_0 -int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, - OSSL_STORE_close_fn close_function); -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 - * ------------------------------- - */ -# 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 -} -# endif -#endif 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 deleted file mode 100644 index 00529c88..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/storeerr.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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_STOREERR_H -# define OPENSSL_STOREERR_H -# pragma once - -# include -# include -# include - - - -/* - * OSSL_STORE reason codes. - */ -# define OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE 107 -# define OSSL_STORE_R_BAD_PASSWORD_READ 115 -# define OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC 113 -# define OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST 121 -# define OSSL_STORE_R_INVALID_SCHEME 106 -# define OSSL_STORE_R_IS_NOT_A 112 -# define OSSL_STORE_R_LOADER_INCOMPLETE 116 -# 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_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 -# define OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED 109 -# define OSSL_STORE_R_UNREGISTERED_SCHEME 105 -# define OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE 110 -# define OSSL_STORE_R_UNSUPPORTED_OPERATION 118 -# define OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE 120 -# define OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED 111 - -#endif 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 deleted file mode 100644 index 816f8f99..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/symhacks.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 OPENSSL_SYMHACKS_H -# define OPENSSL_SYMHACKS_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_SYMHACKS_H -# endif - -# include - -/* Case insensitive linking causes problems.... */ -# if defined(OPENSSL_SYS_VMS) -# undef ERR_load_CRYPTO_strings -# define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings -# undef OCSP_crlID_new -# define OCSP_crlID_new OCSP_crlID2_new - -# undef d2i_ECPARAMETERS -# define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS -# undef i2d_ECPARAMETERS -# define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS -# undef d2i_ECPKPARAMETERS -# define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS -# undef i2d_ECPKPARAMETERS -# define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS - -# endif - -#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/thread.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/thread.h deleted file mode 100644 index 3926ce54..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/thread.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 1995-2023 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 - */ - -#ifndef OPENSSL_THREAD_H -# define OPENSSL_THREAD_H - -# define OSSL_THREAD_SUPPORT_FLAG_THREAD_POOL (1U<<0) -# define OSSL_THREAD_SUPPORT_FLAG_DEFAULT_SPAWN (1U<<1) - -# include - -# ifdef __cplusplus -extern "C" { -# endif - -uint32_t OSSL_get_thread_support_flags(void); -int OSSL_set_max_threads(OSSL_LIB_CTX *ctx, uint64_t max_threads); -uint64_t OSSL_get_max_threads(OSSL_LIB_CTX *ctx); - -# ifdef __cplusplus -} -# endif - -#endif /* OPENSSL_THREAD_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 deleted file mode 100644 index 7e3d1a72..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tls1.h +++ /dev/null @@ -1,1210 +0,0 @@ -/* - * Copyright 1995-2023 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 - */ - -#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" { -#endif - -/* Default security level if not overridden at config time */ -# ifndef OPENSSL_TLS_SECURITY_LEVEL -# define OPENSSL_TLS_SECURITY_LEVEL 2 -# endif - -/* 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 - -# define TLS1_VERSION_MAJOR 0x03 -# define TLS1_VERSION_MINOR 0x01 - -# define TLS1_1_VERSION_MAJOR 0x03 -# define TLS1_1_VERSION_MINOR 0x02 - -# define TLS1_2_VERSION_MAJOR 0x03 -# define TLS1_2_VERSION_MINOR 0x03 - -# define TLS1_get_version(s) \ - ((SSL_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_version(s) : 0) - -# define TLS1_get_client_version(s) \ - ((SSL_client_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_client_version(s) : 0) - -# define TLS1_AD_DECRYPTION_FAILED 21 -# define TLS1_AD_RECORD_OVERFLOW 22 -# define TLS1_AD_UNKNOWN_CA 48/* fatal */ -# define TLS1_AD_ACCESS_DENIED 49/* fatal */ -# define TLS1_AD_DECODE_ERROR 50/* fatal */ -# define TLS1_AD_DECRYPT_ERROR 51 -# define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ -# define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ -# define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ -# define TLS1_AD_INTERNAL_ERROR 80/* fatal */ -# define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ -# define TLS1_AD_USER_CANCELLED 90 -# define TLS1_AD_NO_RENEGOTIATION 100 -/* TLSv1.3 alerts */ -# define TLS13_AD_MISSING_EXTENSION 109 /* fatal */ -# define TLS13_AD_CERTIFICATE_REQUIRED 116 /* fatal */ -/* codes 110-114 are from RFC3546 */ -# define TLS1_AD_UNSUPPORTED_EXTENSION 110 -# define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 -# define TLS1_AD_UNRECOGNIZED_NAME 112 -# define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 -# define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 -# define TLS1_AD_UNKNOWN_PSK_IDENTITY 115/* fatal */ -# define TLS1_AD_NO_APPLICATION_PROTOCOL 120 /* fatal */ - -/* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */ -# define TLSEXT_TYPE_server_name 0 -# define TLSEXT_TYPE_max_fragment_length 1 -# define TLSEXT_TYPE_client_certificate_url 2 -# define TLSEXT_TYPE_trusted_ca_keys 3 -# define TLSEXT_TYPE_truncated_hmac 4 -# define TLSEXT_TYPE_status_request 5 -/* ExtensionType values from RFC4681 */ -# define TLSEXT_TYPE_user_mapping 6 -/* ExtensionType values from RFC5878 */ -# define TLSEXT_TYPE_client_authz 7 -# define TLSEXT_TYPE_server_authz 8 -/* ExtensionType values from RFC6091 */ -# define TLSEXT_TYPE_cert_type 9 - -/* ExtensionType values from RFC4492 */ -/* - * Prior to TLSv1.3 the supported_groups extension was known as - * elliptic_curves - */ -# define TLSEXT_TYPE_supported_groups 10 -# define TLSEXT_TYPE_elliptic_curves TLSEXT_TYPE_supported_groups -# define TLSEXT_TYPE_ec_point_formats 11 - - -/* ExtensionType value from RFC5054 */ -# define TLSEXT_TYPE_srp 12 - -/* ExtensionType values from RFC5246 */ -# define TLSEXT_TYPE_signature_algorithms 13 - -/* ExtensionType value from RFC5764 */ -# define TLSEXT_TYPE_use_srtp 14 - -/* ExtensionType value from RFC7301 */ -# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 - -/* - * Extension type for Certificate Transparency - * https://tools.ietf.org/html/rfc6962#section-3.3.1 - */ -# define TLSEXT_TYPE_signed_certificate_timestamp 18 - -/* - * Extension type for Raw Public Keys - * https://tools.ietf.org/html/rfc7250 - * https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml - */ -# define TLSEXT_TYPE_client_cert_type 19 -# define TLSEXT_TYPE_server_cert_type 20 - -/* - * ExtensionType value for TLS padding extension. - * http://tools.ietf.org/html/draft-agl-tls-padding - */ -# define TLSEXT_TYPE_padding 21 - -/* ExtensionType value from RFC7366 */ -# define TLSEXT_TYPE_encrypt_then_mac 22 - -/* ExtensionType value from RFC7627 */ -# define TLSEXT_TYPE_extended_master_secret 23 - -/* ExtensionType value from RFC8879 */ -# define TLSEXT_TYPE_compress_certificate 27 - -/* ExtensionType value from RFC4507 */ -# define TLSEXT_TYPE_session_ticket 35 - -/* As defined for TLS1.3 */ -# define TLSEXT_TYPE_psk 41 -# define TLSEXT_TYPE_early_data 42 -# define TLSEXT_TYPE_supported_versions 43 -# define TLSEXT_TYPE_cookie 44 -# define TLSEXT_TYPE_psk_kex_modes 45 -# define TLSEXT_TYPE_certificate_authorities 47 -# define TLSEXT_TYPE_post_handshake_auth 49 -# define TLSEXT_TYPE_signature_algorithms_cert 50 -# define TLSEXT_TYPE_key_share 51 -# define TLSEXT_TYPE_quic_transport_parameters 57 - -/* Temporary extension type */ -# define TLSEXT_TYPE_renegotiate 0xff01 - -# ifndef OPENSSL_NO_NEXTPROTONEG -/* This is not an IANA defined extension number */ -# define TLSEXT_TYPE_next_proto_neg 13172 -# endif - -/* NameType value from RFC3546 */ -# define TLSEXT_NAMETYPE_host_name 0 -/* status request value from RFC3546 */ -# define TLSEXT_STATUSTYPE_ocsp 1 - -/* ECPointFormat values from RFC4492 */ -# define TLSEXT_ECPOINTFORMAT_first 0 -# define TLSEXT_ECPOINTFORMAT_uncompressed 0 -# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 -# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 -# define TLSEXT_ECPOINTFORMAT_last 2 - -/* Signature and hash algorithms from RFC5246 */ -# define TLSEXT_signature_anonymous 0 -# define TLSEXT_signature_rsa 1 -# define TLSEXT_signature_dsa 2 -# define TLSEXT_signature_ecdsa 3 -# define TLSEXT_signature_gostr34102001 237 -# define TLSEXT_signature_gostr34102012_256 238 -# define TLSEXT_signature_gostr34102012_512 239 - -/* Total number of different signature algorithms */ -# define TLSEXT_signature_num 7 - -# define TLSEXT_hash_none 0 -# define TLSEXT_hash_md5 1 -# define TLSEXT_hash_sha1 2 -# define TLSEXT_hash_sha224 3 -# define TLSEXT_hash_sha256 4 -# define TLSEXT_hash_sha384 5 -# define TLSEXT_hash_sha512 6 -# define TLSEXT_hash_gostr3411 237 -# define TLSEXT_hash_gostr34112012_256 238 -# define TLSEXT_hash_gostr34112012_512 239 - -/* Total number of different digest algorithms */ - -# define TLSEXT_hash_num 10 - -/* Possible compression values from RFC8879 */ -/* Not defined in RFC8879, but used internally for no-compression */ -# define TLSEXT_comp_cert_none 0 -# define TLSEXT_comp_cert_zlib 1 -# define TLSEXT_comp_cert_brotli 2 -# define TLSEXT_comp_cert_zstd 3 -/* one more than the number of defined values - used as size of 0-terminated array */ -# define TLSEXT_comp_cert_limit 4 - -/* Flag set for unrecognised algorithms */ -# define TLSEXT_nid_unknown 0x1000000 - -/* ECC curves */ - -# define TLSEXT_curve_P_256 23 -# define TLSEXT_curve_P_384 24 - -/* OpenSSL value to disable maximum fragment length extension */ -# define TLSEXT_max_fragment_length_DISABLED 0 -/* Allowed values for max fragment length extension */ -# define TLSEXT_max_fragment_length_512 1 -# define TLSEXT_max_fragment_length_1024 2 -# define TLSEXT_max_fragment_length_2048 3 -# define TLSEXT_max_fragment_length_4096 4 - -/* - * TLS Certificate Type (for RFC7250) - * https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#tls-extensiontype-values-3 - */ -# define TLSEXT_cert_type_x509 0 -# define TLSEXT_cert_type_pgp 1 /* recognized, but not supported */ -# define TLSEXT_cert_type_rpk 2 -# define TLSEXT_cert_type_1609dot2 3 /* recognized, but not supported */ - -int SSL_CTX_set_tlsext_max_fragment_length(SSL_CTX *ctx, uint8_t mode); -int SSL_set_tlsext_max_fragment_length(SSL *ssl, uint8_t mode); - -# define TLSEXT_MAXLEN_host_name 255 - -__owur const char *SSL_get_servername(const SSL *s, const int type); -__owur int SSL_get_servername_type(const SSL *s); -/* - * SSL_export_keying_material exports a value derived from the master secret, - * as specified in RFC 5705. It writes |olen| bytes to |out| given a label and - * optional context. (Since a zero length context is allowed, the |use_context| - * flag controls whether a context is included.) It returns 1 on success and - * 0 or -1 otherwise. - */ -__owur int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, - const char *label, size_t llen, - const unsigned char *context, - size_t contextlen, int use_context); - -/* - * SSL_export_keying_material_early exports a value derived from the - * early exporter master secret, as specified in - * https://tools.ietf.org/html/draft-ietf-tls-tls13-23. It writes - * |olen| bytes to |out| given a label and optional context. It - * returns 1 on success and 0 otherwise. - */ -__owur int SSL_export_keying_material_early(SSL *s, unsigned char *out, - size_t olen, const char *label, - size_t llen, - const unsigned char *context, - size_t contextlen); - -int SSL_get_peer_signature_type_nid(const SSL *s, int *pnid); -int SSL_get_signature_type_nid(const SSL *s, int *pnid); - -int SSL_get_sigalgs(SSL *s, int idx, - int *psign, int *phash, int *psignandhash, - unsigned char *rsig, unsigned char *rhash); - -int SSL_get_shared_sigalgs(SSL *s, int idx, - int *psign, int *phash, int *psignandhash, - unsigned char *rsig, unsigned char *rhash); - -__owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain); - -# define SSL_set_tlsext_host_name(s,name) \ - SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,\ - (void *)name) - -# define SSL_set_tlsext_debug_callback(ssl, cb) \ - SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,\ - (void (*)(void))cb) - -# define SSL_set_tlsext_debug_arg(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0,arg) - -# define SSL_get_tlsext_status_type(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) - -# define SSL_set_tlsext_status_type(ssl, type) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) - -# define SSL_get_tlsext_status_exts(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0,arg) - -# define SSL_set_tlsext_status_exts(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0,arg) - -# define SSL_get_tlsext_status_ids(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0,arg) - -# define SSL_set_tlsext_status_ids(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0,arg) - -# define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0,arg) - -# define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen,arg) - -# define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \ - SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,\ - (void (*)(void))cb) - -# define SSL_TLSEXT_ERR_OK 0 -# define SSL_TLSEXT_ERR_ALERT_WARNING 1 -# define SSL_TLSEXT_ERR_ALERT_FATAL 2 -# define SSL_TLSEXT_ERR_NOACK 3 - -# define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0,arg) - -# define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_TLSEXT_TICKET_KEYS,keylen,keys) -# define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_TICKET_KEYS,keylen,keys) - -# define SSL_CTX_get_tlsext_status_cb(ssl, cb) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB,0,(void *)cb) -# define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ - SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,\ - (void (*)(void))cb) - -# define SSL_CTX_get_tlsext_status_arg(ssl, arg) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) -# define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) - -# define SSL_CTX_set_tlsext_status_type(ssl, type) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) - -# define SSL_CTX_get_tlsext_status_type(ssl) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) - -# 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) -# 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 -# define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B -# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C -# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D -# define TLS1_CK_DHE_PSK_WITH_RC4_128_SHA 0x0300008E -# define TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008F -# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA 0x03000090 -# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA 0x03000091 -# define TLS1_CK_RSA_PSK_WITH_RC4_128_SHA 0x03000092 -# define TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x03000093 -# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA 0x03000094 -# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA 0x03000095 - -/* PSK ciphersuites from 5487 */ -# define TLS1_CK_PSK_WITH_AES_128_GCM_SHA256 0x030000A8 -# define TLS1_CK_PSK_WITH_AES_256_GCM_SHA384 0x030000A9 -# define TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256 0x030000AA -# define TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384 0x030000AB -# define TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256 0x030000AC -# define TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384 0x030000AD -# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA256 0x030000AE -# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA384 0x030000AF -# define TLS1_CK_PSK_WITH_NULL_SHA256 0x030000B0 -# define TLS1_CK_PSK_WITH_NULL_SHA384 0x030000B1 -# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256 0x030000B2 -# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384 0x030000B3 -# define TLS1_CK_DHE_PSK_WITH_NULL_SHA256 0x030000B4 -# define TLS1_CK_DHE_PSK_WITH_NULL_SHA384 0x030000B5 -# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256 0x030000B6 -# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384 0x030000B7 -# define TLS1_CK_RSA_PSK_WITH_NULL_SHA256 0x030000B8 -# define TLS1_CK_RSA_PSK_WITH_NULL_SHA384 0x030000B9 - -/* NULL PSK ciphersuites from RFC4785 */ -# define TLS1_CK_PSK_WITH_NULL_SHA 0x0300002C -# define TLS1_CK_DHE_PSK_WITH_NULL_SHA 0x0300002D -# define TLS1_CK_RSA_PSK_WITH_NULL_SHA 0x0300002E - -/* AES ciphersuites from RFC3268 */ -# define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F -# define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 -# define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 -# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032 -# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033 -# define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034 -# define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035 -# define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036 -# define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037 -# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038 -# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039 -# define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A - -/* TLS v1.2 ciphersuites */ -# define TLS1_CK_RSA_WITH_NULL_SHA256 0x0300003B -# define TLS1_CK_RSA_WITH_AES_128_SHA256 0x0300003C -# define TLS1_CK_RSA_WITH_AES_256_SHA256 0x0300003D -# define TLS1_CK_DH_DSS_WITH_AES_128_SHA256 0x0300003E -# define TLS1_CK_DH_RSA_WITH_AES_128_SHA256 0x0300003F -# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256 0x03000040 - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045 -# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046 - -/* TLS v1.2 ciphersuites */ -# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256 0x03000067 -# define TLS1_CK_DH_DSS_WITH_AES_256_SHA256 0x03000068 -# define TLS1_CK_DH_RSA_WITH_AES_256_SHA256 0x03000069 -# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256 0x0300006A -# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256 0x0300006B -# define TLS1_CK_ADH_WITH_AES_128_SHA256 0x0300006C -# define TLS1_CK_ADH_WITH_AES_256_SHA256 0x0300006D - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088 -# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089 - -/* SEED ciphersuites from RFC4162 */ -# define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096 -# define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097 -# define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098 -# define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099 -# define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A -# define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B - -/* TLS v1.2 GCM ciphersuites from RFC5288 */ -# define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 0x0300009C -# define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 0x0300009D -# define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256 0x0300009E -# define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384 0x0300009F -# define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256 0x030000A0 -# define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384 0x030000A1 -# define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256 0x030000A2 -# define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384 0x030000A3 -# define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256 0x030000A4 -# define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384 0x030000A5 -# define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256 0x030000A6 -# define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384 0x030000A7 - -/* CCM ciphersuites from RFC6655 */ -# define TLS1_CK_RSA_WITH_AES_128_CCM 0x0300C09C -# define TLS1_CK_RSA_WITH_AES_256_CCM 0x0300C09D -# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM 0x0300C09E -# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM 0x0300C09F -# define TLS1_CK_RSA_WITH_AES_128_CCM_8 0x0300C0A0 -# define TLS1_CK_RSA_WITH_AES_256_CCM_8 0x0300C0A1 -# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8 0x0300C0A2 -# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8 0x0300C0A3 -# define TLS1_CK_PSK_WITH_AES_128_CCM 0x0300C0A4 -# define TLS1_CK_PSK_WITH_AES_256_CCM 0x0300C0A5 -# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM 0x0300C0A6 -# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM 0x0300C0A7 -# define TLS1_CK_PSK_WITH_AES_128_CCM_8 0x0300C0A8 -# define TLS1_CK_PSK_WITH_AES_256_CCM_8 0x0300C0A9 -# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8 0x0300C0AA -# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8 0x0300C0AB - -/* CCM ciphersuites from RFC7251 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM 0x0300C0AC -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM 0x0300C0AD -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8 0x0300C0AE -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8 0x0300C0AF - -/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BA -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BB -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BC -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BD -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BE -# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256 0x030000BF - -# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C0 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C1 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C2 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C3 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C4 -# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256 0x030000C5 - -/* ECC ciphersuites from RFC4492 */ -# define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001 -# define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002 -# define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005 - -# define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006 -# define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007 -# define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A - -# define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B -# define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C -# define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D -# define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E -# define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F - -# define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010 -# define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011 -# define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012 -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013 -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014 - -# define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015 -# define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016 -# define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017 -# define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018 -# define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019 - -/* SRP ciphersuites from RFC 5054 */ -# define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA 0x0300C01A -# define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA 0x0300C01B -# define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA 0x0300C01C -# define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA 0x0300C01D -# define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA 0x0300C01E -# define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA 0x0300C01F -# define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA 0x0300C020 -# define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA 0x0300C021 -# define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 - -/* ECDH HMAC based ciphersuites from RFC5289 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384 0x0300C026 -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256 0x0300C027 -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384 0x0300C028 -# define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256 0x0300C029 -# define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384 0x0300C02A - -/* ECDH GCM based ciphersuites from RFC5289 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02B -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02C -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02D -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 -# define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 -# define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 - -/* ECDHE PSK ciphersuites from RFC5489 */ -# define TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA 0x0300C033 -# define TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300C034 -# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA 0x0300C035 -# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA 0x0300C036 - -# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256 0x0300C037 -# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384 0x0300C038 - -/* NULL PSK ciphersuites from RFC4785 */ -# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA 0x0300C039 -# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256 0x0300C03A -# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384 0x0300C03B - -/* Camellia-CBC ciphersuites from RFC6367 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C072 -# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C073 -# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C074 -# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C075 -# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C076 -# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C077 -# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C078 -# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C079 - -# define TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C094 -# define TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C095 -# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C096 -# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C097 -# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C098 -# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C099 -# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C09A -# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C09B - -/* draft-ietf-tls-chacha20-poly1305-03 */ -# define TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCA8 -# define TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 0x0300CCA9 -# define TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCAA -# define TLS1_CK_PSK_WITH_CHACHA20_POLY1305 0x0300CCAB -# define TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAC -# define TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAD -# define TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305 0x0300CCAE - -/* TLS v1.3 ciphersuites */ -# define TLS1_3_CK_AES_128_GCM_SHA256 0x03001301 -# define TLS1_3_CK_AES_256_GCM_SHA384 0x03001302 -# define TLS1_3_CK_CHACHA20_POLY1305_SHA256 0x03001303 -# define TLS1_3_CK_AES_128_CCM_SHA256 0x03001304 -# define TLS1_3_CK_AES_128_CCM_8_SHA256 0x03001305 - -/* Aria ciphersuites from RFC6209 */ -# define TLS1_CK_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C050 -# define TLS1_CK_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C051 -# define TLS1_CK_DHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C052 -# define TLS1_CK_DHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C053 -# define TLS1_CK_DH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C054 -# define TLS1_CK_DH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C055 -# define TLS1_CK_DHE_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C056 -# define TLS1_CK_DHE_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C057 -# define TLS1_CK_DH_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C058 -# define TLS1_CK_DH_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C059 -# define TLS1_CK_DH_anon_WITH_ARIA_128_GCM_SHA256 0x0300C05A -# define TLS1_CK_DH_anon_WITH_ARIA_256_GCM_SHA384 0x0300C05B -# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05C -# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05D -# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05E -# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05F -# define TLS1_CK_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C060 -# define TLS1_CK_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C061 -# define TLS1_CK_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C062 -# define TLS1_CK_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C063 -# define TLS1_CK_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06A -# define TLS1_CK_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06B -# define TLS1_CK_DHE_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06C -# define TLS1_CK_DHE_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06D -# define TLS1_CK_RSA_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06E -# define TLS1_CK_RSA_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06F - -/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ -# define TLS1_RFC_RSA_WITH_AES_128_SHA "TLS_RSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA "TLS_DHE_DSS_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA "TLS_DHE_RSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ADH_WITH_AES_128_SHA "TLS_DH_anon_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_RSA_WITH_AES_256_SHA "TLS_RSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA "TLS_DHE_DSS_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA "TLS_DHE_RSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ADH_WITH_AES_256_SHA "TLS_DH_anon_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_RSA_WITH_NULL_SHA256 "TLS_RSA_WITH_NULL_SHA256" -# define TLS1_RFC_RSA_WITH_AES_128_SHA256 "TLS_RSA_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_RSA_WITH_AES_256_SHA256 "TLS_RSA_WITH_AES_256_CBC_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA256 "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA256 "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA256 "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA256 "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256" -# define TLS1_RFC_ADH_WITH_AES_128_SHA256 "TLS_DH_anon_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_ADH_WITH_AES_256_SHA256 "TLS_DH_anon_WITH_AES_256_CBC_SHA256" -# define TLS1_RFC_RSA_WITH_AES_128_GCM_SHA256 "TLS_RSA_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_RSA_WITH_AES_256_GCM_SHA384 "TLS_RSA_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_DHE_DSS_WITH_AES_128_GCM_SHA256 "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_AES_256_GCM_SHA384 "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_ADH_WITH_AES_128_GCM_SHA256 "TLS_DH_anon_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_ADH_WITH_AES_256_GCM_SHA384 "TLS_DH_anon_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_RSA_WITH_AES_128_CCM "TLS_RSA_WITH_AES_128_CCM" -# define TLS1_RFC_RSA_WITH_AES_256_CCM "TLS_RSA_WITH_AES_256_CCM" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM "TLS_DHE_RSA_WITH_AES_128_CCM" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM "TLS_DHE_RSA_WITH_AES_256_CCM" -# define TLS1_RFC_RSA_WITH_AES_128_CCM_8 "TLS_RSA_WITH_AES_128_CCM_8" -# define TLS1_RFC_RSA_WITH_AES_256_CCM_8 "TLS_RSA_WITH_AES_256_CCM_8" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM_8 "TLS_DHE_RSA_WITH_AES_128_CCM_8" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM_8 "TLS_DHE_RSA_WITH_AES_256_CCM_8" -# define TLS1_RFC_PSK_WITH_AES_128_CCM "TLS_PSK_WITH_AES_128_CCM" -# define TLS1_RFC_PSK_WITH_AES_256_CCM "TLS_PSK_WITH_AES_256_CCM" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM "TLS_DHE_PSK_WITH_AES_128_CCM" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM "TLS_DHE_PSK_WITH_AES_256_CCM" -# define TLS1_RFC_PSK_WITH_AES_128_CCM_8 "TLS_PSK_WITH_AES_128_CCM_8" -# define TLS1_RFC_PSK_WITH_AES_256_CCM_8 "TLS_PSK_WITH_AES_256_CCM_8" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM_8 "TLS_PSK_DHE_WITH_AES_128_CCM_8" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM_8 "TLS_PSK_DHE_WITH_AES_256_CCM_8" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM "TLS_ECDHE_ECDSA_WITH_AES_128_CCM" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM "TLS_ECDHE_ECDSA_WITH_AES_256_CCM" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8" -# define TLS1_3_RFC_AES_128_GCM_SHA256 "TLS_AES_128_GCM_SHA256" -# define TLS1_3_RFC_AES_256_GCM_SHA384 "TLS_AES_256_GCM_SHA384" -# define TLS1_3_RFC_CHACHA20_POLY1305_SHA256 "TLS_CHACHA20_POLY1305_SHA256" -# define TLS1_3_RFC_AES_128_CCM_SHA256 "TLS_AES_128_CCM_SHA256" -# define TLS1_3_RFC_AES_128_CCM_8_SHA256 "TLS_AES_128_CCM_8_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_NULL_SHA "TLS_ECDHE_ECDSA_WITH_NULL_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_NULL_SHA "TLS_ECDHE_RSA_WITH_NULL_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ECDH_anon_WITH_NULL_SHA "TLS_ECDH_anon_WITH_NULL_SHA" -# define TLS1_RFC_ECDH_anon_WITH_DES_192_CBC3_SHA "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_ECDH_anon_WITH_AES_128_CBC_SHA "TLS_ECDH_anon_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ECDH_anon_WITH_AES_256_CBC_SHA "TLS_ECDH_anon_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_PSK_WITH_NULL_SHA "TLS_PSK_WITH_NULL_SHA" -# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA "TLS_DHE_PSK_WITH_NULL_SHA" -# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA "TLS_RSA_PSK_WITH_NULL_SHA" -# define TLS1_RFC_PSK_WITH_3DES_EDE_CBC_SHA "TLS_PSK_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA "TLS_PSK_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA "TLS_PSK_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_DHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA "TLS_DHE_PSK_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA "TLS_DHE_PSK_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_RSA_PSK_WITH_3DES_EDE_CBC_SHA "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA "TLS_RSA_PSK_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA "TLS_RSA_PSK_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_PSK_WITH_AES_128_GCM_SHA256 "TLS_PSK_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_PSK_WITH_AES_256_GCM_SHA384 "TLS_PSK_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_GCM_SHA256 "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_GCM_SHA384 "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_AES_128_GCM_SHA256 "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_AES_256_GCM_SHA384 "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA256 "TLS_PSK_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA384 "TLS_PSK_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_PSK_WITH_NULL_SHA256 "TLS_PSK_WITH_NULL_SHA256" -# define TLS1_RFC_PSK_WITH_NULL_SHA384 "TLS_PSK_WITH_NULL_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA256 "TLS_DHE_PSK_WITH_NULL_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA384 "TLS_DHE_PSK_WITH_NULL_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA256 "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA384 "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA256 "TLS_RSA_PSK_WITH_NULL_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA384 "TLS_RSA_PSK_WITH_NULL_SHA384" -# define TLS1_RFC_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA "TLS_ECDHE_PSK_WITH_NULL_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA256 "TLS_ECDHE_PSK_WITH_NULL_SHA256" -# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA384 "TLS_ECDHE_PSK_WITH_NULL_SHA384" -# define TLS1_RFC_SRP_SHA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_SRP_SHA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_SRP_SHA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_CHACHA20_POLY1305 "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_PSK_WITH_CHACHA20_POLY1305 "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_ECDHE_PSK_WITH_CHACHA20_POLY1305 "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_CHACHA20_POLY1305 "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_CHACHA20_POLY1305 "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256" -# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256" -# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA" -# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA" -# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA" -# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_RSA_WITH_SEED_SHA "TLS_RSA_WITH_SEED_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_SEED_SHA "TLS_DHE_DSS_WITH_SEED_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_SEED_SHA "TLS_DHE_RSA_WITH_SEED_CBC_SHA" -# define TLS1_RFC_ADH_WITH_SEED_SHA "TLS_DH_anon_WITH_SEED_CBC_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_RC4_128_SHA "TLS_ECDHE_PSK_WITH_RC4_128_SHA" -# define TLS1_RFC_ECDH_anon_WITH_RC4_128_SHA "TLS_ECDH_anon_WITH_RC4_128_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_RC4_128_SHA "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_RC4_128_SHA "TLS_ECDHE_RSA_WITH_RC4_128_SHA" -# define TLS1_RFC_PSK_WITH_RC4_128_SHA "TLS_PSK_WITH_RC4_128_SHA" -# define TLS1_RFC_RSA_PSK_WITH_RC4_128_SHA "TLS_RSA_PSK_WITH_RC4_128_SHA" -# define TLS1_RFC_DHE_PSK_WITH_RC4_128_SHA "TLS_DHE_PSK_WITH_RC4_128_SHA" -# define TLS1_RFC_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DH_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DH_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DH_anon_WITH_ARIA_128_GCM_SHA256 "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DH_anon_WITH_ARIA_256_GCM_SHA384 "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_PSK_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_PSK_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384" - - -/* - * XXX Backward compatibility alert: Older versions of OpenSSL gave some DHE - * ciphers names with "EDH" instead of "DHE". Going forward, we should be - * using DHE everywhere, though we may indefinitely maintain aliases for - * users or configurations that used "EDH" - */ -# define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" - -# define TLS1_TXT_PSK_WITH_NULL_SHA "PSK-NULL-SHA" -# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA "DHE-PSK-NULL-SHA" -# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA "RSA-PSK-NULL-SHA" - -/* AES ciphersuites from RFC3268 */ -# define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" -# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" -# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" -# define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" - -# define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" -# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" -# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" -# define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" - -/* ECC ciphersuites from RFC4492 */ -# define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" - -# define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" - -# define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" - -# define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" - -# define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" -# define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" -# define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" -# define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" - -/* PSK ciphersuites from RFC 4279 */ -# define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" -# define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" -# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" - -# define TLS1_TXT_DHE_PSK_WITH_RC4_128_SHA "DHE-PSK-RC4-SHA" -# define TLS1_TXT_DHE_PSK_WITH_3DES_EDE_CBC_SHA "DHE-PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA "DHE-PSK-AES128-CBC-SHA" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA "DHE-PSK-AES256-CBC-SHA" -# define TLS1_TXT_RSA_PSK_WITH_RC4_128_SHA "RSA-PSK-RC4-SHA" -# define TLS1_TXT_RSA_PSK_WITH_3DES_EDE_CBC_SHA "RSA-PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA "RSA-PSK-AES128-CBC-SHA" -# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA "RSA-PSK-AES256-CBC-SHA" - -/* PSK ciphersuites from RFC 5487 */ -# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" -# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" -# define TLS1_TXT_DHE_PSK_WITH_AES_128_GCM_SHA256 "DHE-PSK-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_GCM_SHA384 "DHE-PSK-AES256-GCM-SHA384" -# define TLS1_TXT_RSA_PSK_WITH_AES_128_GCM_SHA256 "RSA-PSK-AES128-GCM-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_AES_256_GCM_SHA384 "RSA-PSK-AES256-GCM-SHA384" - -# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA256 "PSK-AES128-CBC-SHA256" -# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA384 "PSK-AES256-CBC-SHA384" -# define TLS1_TXT_PSK_WITH_NULL_SHA256 "PSK-NULL-SHA256" -# define TLS1_TXT_PSK_WITH_NULL_SHA384 "PSK-NULL-SHA384" - -# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA256 "DHE-PSK-AES128-CBC-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA384 "DHE-PSK-AES256-CBC-SHA384" -# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA256 "DHE-PSK-NULL-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA384 "DHE-PSK-NULL-SHA384" - -# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA256 "RSA-PSK-AES128-CBC-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA384 "RSA-PSK-AES256-CBC-SHA384" -# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA256 "RSA-PSK-NULL-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA384 "RSA-PSK-NULL-SHA384" - -/* SRP ciphersuite from RFC 5054 */ -# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "SRP-DSS-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA "SRP-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "SRP-RSA-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "SRP-DSS-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA "SRP-AES-256-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "SRP-RSA-AES-256-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "SRP-DSS-AES-256-CBC-SHA" - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA "CAMELLIA128-SHA" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA "DH-DSS-CAMELLIA128-SHA" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA "DH-RSA-CAMELLIA128-SHA" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "DHE-DSS-CAMELLIA128-SHA" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "DHE-RSA-CAMELLIA128-SHA" -# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA "ADH-CAMELLIA128-SHA" - -# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA "CAMELLIA256-SHA" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA "DH-DSS-CAMELLIA256-SHA" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA "DH-RSA-CAMELLIA256-SHA" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "DHE-DSS-CAMELLIA256-SHA" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "DHE-RSA-CAMELLIA256-SHA" -# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA "ADH-CAMELLIA256-SHA" - -/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ -# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA256 "CAMELLIA128-SHA256" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DH-DSS-CAMELLIA128-SHA256" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DH-RSA-CAMELLIA128-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DHE-DSS-CAMELLIA128-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DHE-RSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256 "ADH-CAMELLIA128-SHA256" - -# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA256 "CAMELLIA256-SHA256" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DH-DSS-CAMELLIA256-SHA256" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DH-RSA-CAMELLIA256-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DHE-DSS-CAMELLIA256-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DHE-RSA-CAMELLIA256-SHA256" -# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256 "ADH-CAMELLIA256-SHA256" - -# define TLS1_TXT_PSK_WITH_CAMELLIA_128_CBC_SHA256 "PSK-CAMELLIA128-SHA256" -# define TLS1_TXT_PSK_WITH_CAMELLIA_256_CBC_SHA384 "PSK-CAMELLIA256-SHA384" -# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "DHE-PSK-CAMELLIA128-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "DHE-PSK-CAMELLIA256-SHA384" -# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "RSA-PSK-CAMELLIA128-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "RSA-PSK-CAMELLIA256-SHA384" -# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-PSK-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-PSK-CAMELLIA256-SHA384" - -/* SEED ciphersuites from RFC4162 */ -# define TLS1_TXT_RSA_WITH_SEED_SHA "SEED-SHA" -# define TLS1_TXT_DH_DSS_WITH_SEED_SHA "DH-DSS-SEED-SHA" -# define TLS1_TXT_DH_RSA_WITH_SEED_SHA "DH-RSA-SEED-SHA" -# define TLS1_TXT_DHE_DSS_WITH_SEED_SHA "DHE-DSS-SEED-SHA" -# define TLS1_TXT_DHE_RSA_WITH_SEED_SHA "DHE-RSA-SEED-SHA" -# define TLS1_TXT_ADH_WITH_SEED_SHA "ADH-SEED-SHA" - -/* TLS v1.2 ciphersuites */ -# define TLS1_TXT_RSA_WITH_NULL_SHA256 "NULL-SHA256" -# define TLS1_TXT_RSA_WITH_AES_128_SHA256 "AES128-SHA256" -# define TLS1_TXT_RSA_WITH_AES_256_SHA256 "AES256-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA256 "DH-DSS-AES128-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA256 "DH-RSA-AES128-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256 "DHE-DSS-AES128-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256 "DHE-RSA-AES128-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA256 "DH-DSS-AES256-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA256 "DH-RSA-AES256-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256 "DHE-DSS-AES256-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256 "DHE-RSA-AES256-SHA256" -# define TLS1_TXT_ADH_WITH_AES_128_SHA256 "ADH-AES128-SHA256" -# define TLS1_TXT_ADH_WITH_AES_256_SHA256 "ADH-AES256-SHA256" - -/* TLS v1.2 GCM ciphersuites from RFC5288 */ -# define TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256 "AES128-GCM-SHA256" -# define TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384 "AES256-GCM-SHA384" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256 "DHE-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384 "DHE-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256 "DH-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384 "DH-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256 "DHE-DSS-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384 "DHE-DSS-AES256-GCM-SHA384" -# define TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256 "DH-DSS-AES128-GCM-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384 "DH-DSS-AES256-GCM-SHA384" -# define TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256 "ADH-AES128-GCM-SHA256" -# define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384 "ADH-AES256-GCM-SHA384" - -/* CCM ciphersuites from RFC6655 */ -# define TLS1_TXT_RSA_WITH_AES_128_CCM "AES128-CCM" -# define TLS1_TXT_RSA_WITH_AES_256_CCM "AES256-CCM" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM "DHE-RSA-AES128-CCM" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM "DHE-RSA-AES256-CCM" - -# define TLS1_TXT_RSA_WITH_AES_128_CCM_8 "AES128-CCM8" -# define TLS1_TXT_RSA_WITH_AES_256_CCM_8 "AES256-CCM8" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM_8 "DHE-RSA-AES128-CCM8" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM_8 "DHE-RSA-AES256-CCM8" - -# define TLS1_TXT_PSK_WITH_AES_128_CCM "PSK-AES128-CCM" -# define TLS1_TXT_PSK_WITH_AES_256_CCM "PSK-AES256-CCM" -# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM "DHE-PSK-AES128-CCM" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM "DHE-PSK-AES256-CCM" - -# define TLS1_TXT_PSK_WITH_AES_128_CCM_8 "PSK-AES128-CCM8" -# define TLS1_TXT_PSK_WITH_AES_256_CCM_8 "PSK-AES256-CCM8" -# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM_8 "DHE-PSK-AES128-CCM8" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM_8 "DHE-PSK-AES256-CCM8" - -/* CCM ciphersuites from RFC7251 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM "ECDHE-ECDSA-AES128-CCM" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM "ECDHE-ECDSA-AES256-CCM" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM_8 "ECDHE-ECDSA-AES128-CCM8" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM_8 "ECDHE-ECDSA-AES256-CCM8" - -/* ECDH HMAC based ciphersuites from RFC5289 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256 "ECDHE-ECDSA-AES128-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384 "ECDHE-ECDSA-AES256-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256 "ECDH-ECDSA-AES128-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384 "ECDH-ECDSA-AES256-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256 "ECDHE-RSA-AES128-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384 "ECDHE-RSA-AES256-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256 "ECDH-RSA-AES128-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384 "ECDH-RSA-AES256-SHA384" - -/* ECDH GCM based ciphersuites from RFC5289 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "ECDHE-ECDSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "ECDHE-ECDSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 "ECDH-ECDSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 "ECDH-ECDSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "ECDHE-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "ECDHE-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" - -/* TLS v1.2 PSK GCM ciphersuites from RFC5487 */ -# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" -# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" - -/* ECDHE PSK ciphersuites from RFC 5489 */ -# define TLS1_TXT_ECDHE_PSK_WITH_RC4_128_SHA "ECDHE-PSK-RC4-SHA" -# define TLS1_TXT_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "ECDHE-PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA "ECDHE-PSK-AES128-CBC-SHA" -# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA "ECDHE-PSK-AES256-CBC-SHA" - -# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "ECDHE-PSK-AES128-CBC-SHA256" -# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "ECDHE-PSK-AES256-CBC-SHA384" - -# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA "ECDHE-PSK-NULL-SHA" -# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA256 "ECDHE-PSK-NULL-SHA256" -# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA384 "ECDHE-PSK-NULL-SHA384" - -/* Camellia-CBC ciphersuites from RFC6367 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-ECDSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-ECDSA-CAMELLIA256-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-ECDSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-ECDSA-CAMELLIA256-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-RSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-RSA-CAMELLIA256-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-RSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-RSA-CAMELLIA256-SHA384" - -/* draft-ietf-tls-chacha20-poly1305-03 */ -# define TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305 "ECDHE-RSA-CHACHA20-POLY1305" -# define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305" -# define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305" -# define TLS1_TXT_PSK_WITH_CHACHA20_POLY1305 "PSK-CHACHA20-POLY1305" -# define TLS1_TXT_ECDHE_PSK_WITH_CHACHA20_POLY1305 "ECDHE-PSK-CHACHA20-POLY1305" -# define TLS1_TXT_DHE_PSK_WITH_CHACHA20_POLY1305 "DHE-PSK-CHACHA20-POLY1305" -# define TLS1_TXT_RSA_PSK_WITH_CHACHA20_POLY1305 "RSA-PSK-CHACHA20-POLY1305" - -/* Aria ciphersuites from RFC6209 */ -# define TLS1_TXT_RSA_WITH_ARIA_128_GCM_SHA256 "ARIA128-GCM-SHA256" -# define TLS1_TXT_RSA_WITH_ARIA_256_GCM_SHA384 "ARIA256-GCM-SHA384" -# define TLS1_TXT_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "DHE-RSA-ARIA128-GCM-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "DHE-RSA-ARIA256-GCM-SHA384" -# define TLS1_TXT_DH_RSA_WITH_ARIA_128_GCM_SHA256 "DH-RSA-ARIA128-GCM-SHA256" -# define TLS1_TXT_DH_RSA_WITH_ARIA_256_GCM_SHA384 "DH-RSA-ARIA256-GCM-SHA384" -# define TLS1_TXT_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "DHE-DSS-ARIA128-GCM-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "DHE-DSS-ARIA256-GCM-SHA384" -# define TLS1_TXT_DH_DSS_WITH_ARIA_128_GCM_SHA256 "DH-DSS-ARIA128-GCM-SHA256" -# define TLS1_TXT_DH_DSS_WITH_ARIA_256_GCM_SHA384 "DH-DSS-ARIA256-GCM-SHA384" -# define TLS1_TXT_DH_anon_WITH_ARIA_128_GCM_SHA256 "ADH-ARIA128-GCM-SHA256" -# define TLS1_TXT_DH_anon_WITH_ARIA_256_GCM_SHA384 "ADH-ARIA256-GCM-SHA384" -# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ECDSA-ARIA128-GCM-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ECDSA-ARIA256-GCM-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ECDSA-ARIA128-GCM-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ECDSA-ARIA256-GCM-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ARIA128-GCM-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ARIA256-GCM-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ARIA128-GCM-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ARIA256-GCM-SHA384" -# define TLS1_TXT_PSK_WITH_ARIA_128_GCM_SHA256 "PSK-ARIA128-GCM-SHA256" -# define TLS1_TXT_PSK_WITH_ARIA_256_GCM_SHA384 "PSK-ARIA256-GCM-SHA384" -# define TLS1_TXT_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "DHE-PSK-ARIA128-GCM-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "DHE-PSK-ARIA256-GCM-SHA384" -# define TLS1_TXT_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "RSA-PSK-ARIA128-GCM-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "RSA-PSK-ARIA256-GCM-SHA384" - -# define TLS_CT_RSA_SIGN 1 -# define TLS_CT_DSS_SIGN 2 -# define TLS_CT_RSA_FIXED_DH 3 -# define TLS_CT_DSS_FIXED_DH 4 -# define TLS_CT_ECDSA_SIGN 64 -# define TLS_CT_RSA_FIXED_ECDH 65 -# define TLS_CT_ECDSA_FIXED_ECDH 66 -# define TLS_CT_GOST01_SIGN 22 -# 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 12 - -# if defined(SSL3_CT_NUMBER) -# if TLS_CT_NUMBER != SSL3_CT_NUMBER -# error "SSL/TLS CT_NUMBER values do not match" -# endif -# endif - -# define TLS1_FINISH_MAC_LENGTH 12 - -# define TLS_MD_MAX_CONST_SIZE 22 - -/* 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 { - unsigned short length; - void *data; -}; - -#ifdef __cplusplus -} -#endif -#endif 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 deleted file mode 100644 index 9a5b56ea..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/trace.h +++ /dev/null @@ -1,320 +0,0 @@ -/* - * 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_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)) - -#define OSSL_TRACE_STRING_MAX 80 -int OSSL_trace_string(BIO *out, int text, int full, - const unsigned char *data, size_t size); -#define OSSL_TRACE_STRING(category, text, full, data, len) \ - OSSL_TRACE_BEGIN(category) { \ - OSSL_trace_string(trc_out, text, full, data, len); \ - } OSSL_TRACE_END(category) - -# 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 deleted file mode 100644 index b09b646d..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h +++ /dev/null @@ -1,505 +0,0 @@ -/* - * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_TS_H -# define OPENSSL_TS_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_TS_H -# endif - -# include - -# ifndef OPENSSL_NO_TS -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# ifndef OPENSSL_NO_STDIO -# include -# endif -# ifdef __cplusplus -extern "C" { -# endif - -typedef struct TS_msg_imprint_st TS_MSG_IMPRINT; -typedef struct TS_req_st TS_REQ; -typedef struct TS_accuracy_st TS_ACCURACY; -typedef struct TS_tst_info_st TS_TST_INFO; - -/* Possible values for status. */ -# define TS_STATUS_GRANTED 0 -# define TS_STATUS_GRANTED_WITH_MODS 1 -# define TS_STATUS_REJECTION 2 -# define TS_STATUS_WAITING 3 -# define TS_STATUS_REVOCATION_WARNING 4 -# define TS_STATUS_REVOCATION_NOTIFICATION 5 - -/* Possible values for failure_info. */ -# define TS_INFO_BAD_ALG 0 -# define TS_INFO_BAD_REQUEST 2 -# define TS_INFO_BAD_DATA_FORMAT 5 -# define TS_INFO_TIME_NOT_AVAILABLE 14 -# define TS_INFO_UNACCEPTED_POLICY 15 -# define TS_INFO_UNACCEPTED_EXTENSION 16 -# define TS_INFO_ADD_INFO_NOT_AVAILABLE 17 -# define TS_INFO_SYSTEM_FAILURE 25 - - -typedef struct TS_status_info_st TS_STATUS_INFO; - -typedef struct TS_resp_st TS_RESP; - -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, const TS_REQ *a); -#endif -TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); -int i2d_TS_REQ_bio(BIO *fp, const TS_REQ *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, 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, const TS_MSG_IMPRINT *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, const TS_RESP *a); -#endif -TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); -int i2d_TS_RESP_bio(BIO *bio, const TS_RESP *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) - -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, 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, const TS_TST_INFO *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); - -int TS_STATUS_INFO_set_status(TS_STATUS_INFO *a, int i); -const ASN1_INTEGER *TS_STATUS_INFO_get0_status(const TS_STATUS_INFO *a); - -const STACK_OF(ASN1_UTF8STRING) * -TS_STATUS_INFO_get0_text(const TS_STATUS_INFO *a); - -const ASN1_BIT_STRING * -TS_STATUS_INFO_get0_failure_info(const TS_STATUS_INFO *a); - -int TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint); -TS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a); - -int TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg); -X509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a); - -int TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len); -ASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a); - -int TS_REQ_set_policy_id(TS_REQ *a, const ASN1_OBJECT *policy); -ASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a); - -int TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce); -const ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a); - -int TS_REQ_set_cert_req(TS_REQ *a, int cert_req); -int TS_REQ_get_cert_req(const TS_REQ *a); - -STACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a); -void TS_REQ_ext_free(TS_REQ *a); -int TS_REQ_get_ext_count(TS_REQ *a); -int TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos); -int TS_REQ_get_ext_by_OBJ(TS_REQ *a, const ASN1_OBJECT *obj, int lastpos); -int TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos); -X509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc); -X509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc); -int TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc); -void *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx); - -/* Function declarations for TS_REQ defined in ts/ts_req_print.c */ - -int TS_REQ_print_bio(BIO *bio, TS_REQ *a); - -/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */ - -int TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info); -TS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a); - -/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ -void TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info); -PKCS7 *TS_RESP_get_token(TS_RESP *a); -TS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a); - -int TS_TST_INFO_set_version(TS_TST_INFO *a, long version); -long TS_TST_INFO_get_version(const TS_TST_INFO *a); - -int TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id); -ASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a); - -int TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint); -TS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a); - -int TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial); -const ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a); - -int TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime); -const ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a); - -int TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy); -TS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a); - -int TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds); -const ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a); - -int TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis); -const ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a); - -int TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros); -const ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a); - -int TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering); -int TS_TST_INFO_get_ordering(const TS_TST_INFO *a); - -int TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce); -const ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a); - -int TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa); -GENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a); - -STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a); -void TS_TST_INFO_ext_free(TS_TST_INFO *a); -int TS_TST_INFO_get_ext_count(TS_TST_INFO *a); -int TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos); -int TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, const ASN1_OBJECT *obj, - int lastpos); -int TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos); -X509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc); -X509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc); -int TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc); -void *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx); - -/* - * Declarations related to response generation, defined in ts/ts_resp_sign.c. - */ - -/* Optional flags for response generation. */ - -/* Don't include the TSA name in response. */ -# define TS_TSA_NAME 0x01 - -/* Set ordering to true in response. */ -# define TS_ORDERING 0x02 - -/* - * Include the signer certificate and the other specified certificates in - * the ESS signing certificate attribute beside the PKCS7 signed data. - * Only the signer certificates is included by default. - */ -# define TS_ESS_CERT_ID_CHAIN 0x04 - -/* Forward declaration. */ -struct TS_resp_ctx; - -/* This must return a unique number less than 160 bits long. */ -typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *); - -/* - * This must return the seconds and microseconds since Jan 1, 1970 in the sec - * and usec variables allocated by the caller. Return non-zero for success - * and zero for failure. - */ -typedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec, - long *usec); - -/* - * This must process the given extension. It can modify the TS_TST_INFO - * object of the context. Return values: !0 (processed), 0 (error, it must - * set the status info/failure info of the response). - */ -typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, - void *); - -typedef struct TS_resp_ctx TS_RESP_CTX; - -/* 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. */ -int TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); - -int TS_RESP_CTX_set_signer_digest(TS_RESP_CTX *ctx, - const EVP_MD *signer_digest); -int TS_RESP_CTX_set_ess_cert_id_digest(TS_RESP_CTX *ctx, const EVP_MD *md); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, const ASN1_OBJECT *def_policy); - -/* No additional certs are included in the response by default. */ -int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs); - -/* - * Adds a new acceptable policy, only the default policy is accepted by - * default. - */ -int TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, const ASN1_OBJECT *policy); - -/* - * Adds a new acceptable message digest. Note that no message digests are - * accepted by default. The md argument is shared with the caller. - */ -int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); - -/* Accuracy is not included by default. */ -int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, - int secs, int millis, int micros); - -/* - * Clock precision digits, i.e. the number of decimal digits: '0' means sec, - * '3' msec, '6' usec, and so on. Default is 0. - */ -int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, - unsigned clock_precision_digits); -/* At most we accept usec precision. */ -# define TS_MAX_CLOCK_PRECISION_DIGITS 6 - -/* Maximum status message length */ -# define TS_MAX_STATUS_LENGTH (1024 * 1024) - -/* No flags are set by default. */ -void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); - -/* Default callback always returns a constant. */ -void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); - -/* Default callback uses the gettimeofday() and gmtime() system calls. */ -void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); - -/* - * Default callback rejects all extensions. The extension callback is called - * when the TS_TST_INFO object is already set up and not signed yet. - */ -/* FIXME: extension handling is not tested yet. */ -void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, - TS_extension_cb cb, void *data); - -/* The following methods can be used in the callbacks. */ -int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, - int status, const char *text); - -/* Sets the status info only if it is still TS_STATUS_GRANTED. */ -int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, - int status, const char *text); - -int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); - -/* The get methods below can be used in the extension callback. */ -TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); - -TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); - -/* - * Creates the signed TS_TST_INFO and puts it in TS_RESP. - * In case of errors it sets the status info properly. - * Returns NULL only in case of memory allocation/fatal error. - */ -TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); - -/* - * Declarations related to response verification, - * they are defined in ts/ts_resp_verify.c. - */ - -int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, - X509_STORE *store, X509 **signer_out); - -/* Context structure for the generic verify method. */ - -/* Verify the signer's certificate and the signature of the response. */ -# define TS_VFY_SIGNATURE (1u << 0) -/* Verify the version number of the response. */ -# define TS_VFY_VERSION (1u << 1) -/* Verify if the policy supplied by the user matches the policy of the TSA. */ -# define TS_VFY_POLICY (1u << 2) -/* - * Verify the message imprint provided by the user. This flag should not be - * specified with TS_VFY_DATA. - */ -# define TS_VFY_IMPRINT (1u << 3) -/* - * Verify the message imprint computed by the verify method from the user - * provided data and the MD algorithm of the response. This flag should not - * be specified with TS_VFY_IMPRINT. - */ -# define TS_VFY_DATA (1u << 4) -/* Verify the nonce value. */ -# define TS_VFY_NONCE (1u << 5) -/* Verify if the TSA name field matches the signer certificate. */ -# define TS_VFY_SIGNER (1u << 6) -/* Verify if the TSA name field equals to the user provided name. */ -# define TS_VFY_TSA_NAME (1u << 7) - -/* You can use the following convenience constants. */ -# define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ - | TS_VFY_VERSION \ - | TS_VFY_POLICY \ - | TS_VFY_IMPRINT \ - | TS_VFY_NONCE \ - | TS_VFY_SIGNER \ - | TS_VFY_TSA_NAME) -# define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ - | TS_VFY_VERSION \ - | TS_VFY_POLICY \ - | TS_VFY_DATA \ - | TS_VFY_NONCE \ - | TS_VFY_SIGNER \ - | TS_VFY_TSA_NAME) - -typedef struct TS_verify_ctx TS_VERIFY_CTX; - -int TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response); -int TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token); - -/* - * Declarations related to response verification context, - */ -TS_VERIFY_CTX *TS_VERIFY_CTX_new(void); -void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx); -void TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx); -void TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx); -int TS_VERIFY_CTX_set_flags(TS_VERIFY_CTX *ctx, int f); -int TS_VERIFY_CTX_add_flags(TS_VERIFY_CTX *ctx, int f); -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); -# 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 - * it returns ctx. It initialises all the members as follows: - * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE) - * certs = NULL - * store = NULL - * policy = policy from the request or NULL if absent (in this case - * TS_VFY_POLICY is cleared from flags as well) - * md_alg = MD algorithm from request - * imprint, imprint_len = imprint from request - * data = NULL - * nonce, nonce_len = nonce from the request or NULL if absent (in this case - * TS_VFY_NONCE is cleared from flags as well) - * tsa_name = NULL - * Important: after calling this method TS_VFY_SIGNATURE should be added! - */ -TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx); - -/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */ - -int TS_RESP_print_bio(BIO *bio, TS_RESP *a); -int TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a); -int TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a); - -/* Common utility functions defined in ts/ts_lib.c */ - -int TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num); -int TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj); -int TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions); -int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg); -int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg); - -/* - * Function declarations for handling configuration options, defined in - * ts/ts_conf.c - */ - -X509 *TS_CONF_load_cert(const char *file); -STACK_OF(X509) *TS_CONF_load_certs(const char *file); -EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass); -const char *TS_CONF_get_tsa_section(CONF *conf, const char *section); -int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb, - TS_RESP_CTX *ctx); -#ifndef OPENSSL_NO_ENGINE -int TS_CONF_set_crypto_device(CONF *conf, const char *section, - const char *device); -int TS_CONF_set_default_engine(const char *name); -#endif -int TS_CONF_set_signer_cert(CONF *conf, const char *section, - const char *cert, TS_RESP_CTX *ctx); -int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs, - TS_RESP_CTX *ctx); -int TS_CONF_set_signer_key(CONF *conf, const char *section, - const char *key, const char *pass, - TS_RESP_CTX *ctx); -int TS_CONF_set_signer_digest(CONF *conf, const char *section, - const char *md, TS_RESP_CTX *ctx); -int TS_CONF_set_def_policy(CONF *conf, const char *section, - const char *policy, TS_RESP_CTX *ctx); -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(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); -int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, - TS_RESP_CTX *ctx); -int TS_CONF_set_ess_cert_id_digest(CONF *conf, const char *section, - TS_RESP_CTX *ctx); - -# ifdef __cplusplus -} -# endif -# endif -#endif 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 deleted file mode 100644 index e1b943e4..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tserr.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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_TSERR_H -# define OPENSSL_TSERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_TS - - -/* - * TS reason codes. - */ -# define TS_R_BAD_PKCS7_TYPE 132 -# define TS_R_BAD_TYPE 133 -# define TS_R_CANNOT_LOAD_CERT 137 -# define TS_R_CANNOT_LOAD_KEY 138 -# define TS_R_CERTIFICATE_VERIFY_ERROR 100 -# define TS_R_COULD_NOT_SET_ENGINE 127 -# define TS_R_COULD_NOT_SET_TIME 115 -# define TS_R_DETACHED_CONTENT 134 -# define TS_R_ESS_ADD_SIGNING_CERT_ERROR 116 -# define TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR 139 -# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR 101 -# define TS_R_INVALID_NULL_POINTER 102 -# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE 117 -# define TS_R_MESSAGE_IMPRINT_MISMATCH 103 -# define TS_R_NONCE_MISMATCH 104 -# define TS_R_NONCE_NOT_RETURNED 105 -# define TS_R_NO_CONTENT 106 -# define TS_R_NO_TIME_STAMP_TOKEN 107 -# define TS_R_PKCS7_ADD_SIGNATURE_ERROR 118 -# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR 119 -# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED 129 -# define TS_R_POLICY_MISMATCH 108 -# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 120 -# define TS_R_RESPONSE_SETUP_ERROR 121 -# define TS_R_SIGNATURE_FAILURE 109 -# define TS_R_THERE_MUST_BE_ONE_SIGNER 110 -# define TS_R_TIME_SYSCALL_ERROR 122 -# define TS_R_TOKEN_NOT_PRESENT 130 -# define TS_R_TOKEN_PRESENT 131 -# define TS_R_TSA_NAME_MISMATCH 111 -# define TS_R_TSA_UNTRUSTED 112 -# define TS_R_TST_INFO_SETUP_ERROR 123 -# define TS_R_TS_DATASIGN 124 -# define TS_R_UNACCEPTABLE_POLICY 125 -# define TS_R_UNSUPPORTED_MD_ALGORITHM 126 -# define TS_R_UNSUPPORTED_VERSION 113 -# define TS_R_VAR_BAD_VALUE 135 -# define TS_R_VAR_LOOKUP_FAILURE 136 -# define TS_R_WRONG_CONTENT_TYPE 114 - -# endif -#endif 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 deleted file mode 100644 index af169a30..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/txt_db.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_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 -# include -# include - -# define DB_ERROR_OK 0 -# define DB_ERROR_MALLOC 1 -# define DB_ERROR_INDEX_CLASH 2 -# define DB_ERROR_INDEX_OUT_OF_RANGE 3 -# define DB_ERROR_NO_INDEX 4 -# define DB_ERROR_INSERT_INDEX_CLASH 5 -# define DB_ERROR_WRONG_NUM_FIELDS 6 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef OPENSSL_STRING *OPENSSL_PSTRING; -DEFINE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) - -typedef struct txt_db_st { - int num_fields; - STACK_OF(OPENSSL_PSTRING) *data; - LHASH_OF(OPENSSL_STRING) **index; - int (**qual) (OPENSSL_STRING *); - long error; - long arg1; - long arg2; - OPENSSL_STRING *arg_row; -} TXT_DB; - -TXT_DB *TXT_DB_read(BIO *in, int num); -long TXT_DB_write(BIO *out, TXT_DB *db); -int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), - OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC cmp); -void TXT_DB_free(TXT_DB *db); -OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, - OPENSSL_STRING *value); -int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); - -#ifdef __cplusplus -} -#endif - -#endif 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 deleted file mode 100644 index c2802868..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/types.h +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 deleted file mode 100644 index e64ec3b3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h +++ /dev/null @@ -1,407 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/ui.h.in - * - * 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 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; - -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 - * 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/ui.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h.in deleted file mode 100644 index eb9a580f..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ui.h.in +++ /dev/null @@ -1,384 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 473b04ed..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/uierr.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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_UIERR_H -# define OPENSSL_UIERR_H -# pragma once - -# include -# include -# include - - - -/* - * UI reason codes. - */ -# define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS 104 -# define UI_R_INDEX_TOO_LARGE 102 -# define UI_R_INDEX_TOO_SMALL 103 -# define UI_R_NO_RESULT_BUFFER 105 -# define UI_R_PROCESSING_ERROR 107 -# define UI_R_RESULT_TOO_LARGE 100 -# define UI_R_RESULT_TOO_SMALL 101 -# define UI_R_SYSASSIGN_ERROR 109 -# define UI_R_SYSDASSGN_ERROR 110 -# define UI_R_SYSQIOW_ERROR 111 -# define UI_R_UNKNOWN_CONTROL_COMMAND 106 -# define UI_R_UNKNOWN_TTYGET_ERRNO_VALUE 108 -# define UI_R_USER_DATA_DUPLICATION_UNSUPPORTED 112 - -#endif 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 deleted file mode 100644 index 05ba4632..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/whrlpool.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2005-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_WHRLPOOL_H -# define OPENSSL_WHRLPOOL_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_WHRLPOOL_H -# endif - -# 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 { - unsigned char c[WHIRLPOOL_DIGEST_LENGTH]; - /* double q is here to ensure 64-bit alignment */ - double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)]; - } H; - unsigned char data[WHIRLPOOL_BBLOCK / 8]; - 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index ac132633..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h +++ /dev/null @@ -1,1286 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/x509.h.in - * - * Copyright 1995-2023 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 - */ - - - -#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 */ -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 */ -# 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; - -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 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; -typedef struct x509_attributes_st 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; - -/* 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; -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))) - - -/* - * 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_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, - const char *propq); -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_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, - const char *propq); -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(const 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(const X509_REQ *req, EVP_PKEY *pkey); - -int X509_check_private_key(const X509 *cert, 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); -void OSSL_STACK_OF_X509_free(STACK_OF(X509) *certs); -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); - - -void X509_PUBKEY_set0_public_key(X509_PUBKEY *pub, - unsigned char *penc, int penclen); -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.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h.in deleted file mode 100644 index 72103913..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h.in +++ /dev/null @@ -1,1092 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 1995-2023 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_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, - const char *propq); -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_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, - const char *propq); -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(const 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(const X509_REQ *req, EVP_PKEY *pkey); - -int X509_check_private_key(const X509 *cert, 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); -void OSSL_STACK_OF_X509_free(STACK_OF(X509) *certs); -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); - - -void X509_PUBKEY_set0_public_key(X509_PUBKEY *pub, - unsigned char *penc, int penclen); -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 deleted file mode 100644 index d3dfff8c..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h +++ /dev/null @@ -1,901 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/x509_vfy.h.in - * - * 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_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 - -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); -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 -# define X509_V_ERR_RPK_UNTRUSTED 95 - -/* 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 *xs); -int X509_STORE_lock(X509_STORE *xs); -int X509_STORE_unlock(X509_STORE *xs); -int X509_STORE_up_ref(X509_STORE *xs); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *xs); -STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *xs); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *xs, - 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 *xs, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *xs, int purpose); -int X509_STORE_set_trust(X509_STORE *xs, int trust); -int X509_STORE_set1_param(X509_STORE *xs, const X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *xs); - -void X509_STORE_set_verify(X509_STORE *xs, 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 *xs); -void X509_STORE_set_verify_cb(X509_STORE *xs, - 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 *xs); -void X509_STORE_set_get_issuer(X509_STORE *xs, - X509_STORE_CTX_get_issuer_fn get_issuer); -X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *xs); -void X509_STORE_set_check_issued(X509_STORE *xs, - X509_STORE_CTX_check_issued_fn check_issued); -X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *s); -void X509_STORE_set_check_revocation(X509_STORE *xs, - X509_STORE_CTX_check_revocation_fn check_revocation); -X509_STORE_CTX_check_revocation_fn - X509_STORE_get_check_revocation(const X509_STORE *xs); -void X509_STORE_set_get_crl(X509_STORE *xs, - X509_STORE_CTX_get_crl_fn get_crl); -X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *xs); -void X509_STORE_set_check_crl(X509_STORE *xs, - X509_STORE_CTX_check_crl_fn check_crl); -X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *xs); -void X509_STORE_set_cert_crl(X509_STORE *xs, - X509_STORE_CTX_cert_crl_fn cert_crl); -X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *xs); -void X509_STORE_set_check_policy(X509_STORE *xs, - X509_STORE_CTX_check_policy_fn check_policy); -X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *s); -void X509_STORE_set_lookup_certs(X509_STORE *xs, - X509_STORE_CTX_lookup_certs_fn lookup_certs); -X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *s); -void X509_STORE_set_lookup_crls(X509_STORE *xs, - 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 *xs); -void X509_STORE_set_cleanup(X509_STORE *xs, - X509_STORE_CTX_cleanup_fn cleanup); -X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *xs); - -#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 *xs, int idx, void *data); -void *X509_STORE_get_ex_data(const X509_STORE *xs, 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); -int X509_STORE_CTX_init_rpk(X509_STORE_CTX *ctx, X509_STORE *trust_store, - EVP_PKEY* rpk); -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); -EVP_PKEY *X509_STORE_CTX_get0_rpk(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); -void X509_STORE_CTX_set_get_crl(X509_STORE_CTX *ctx, - X509_STORE_CTX_get_crl_fn get_crl); -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 *xs, 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 *xs, X509 *x); -int X509_STORE_add_crl(X509_STORE *xs, 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 *xs, const char *file); -int X509_STORE_load_path(X509_STORE *xs, const char *path); -int X509_STORE_load_store(X509_STORE *xs, const char *store); -int X509_STORE_load_locations(X509_STORE *s, const char *file, const char *dir); -int X509_STORE_set_default_paths(X509_STORE *xs); - -int X509_STORE_load_file_ex(X509_STORE *xs, const char *file, - OSSL_LIB_CTX *libctx, const char *propq); -int X509_STORE_load_store_ex(X509_STORE *xs, const char *store, - OSSL_LIB_CTX *libctx, const char *propq); -int X509_STORE_load_locations_ex(X509_STORE *xs, - const char *file, const char *dir, - OSSL_LIB_CTX *libctx, const char *propq); -int X509_STORE_set_default_paths_ex(X509_STORE *xs, - 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_rpk(X509_STORE_CTX *ctx, EVP_PKEY *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); -void X509_STORE_CTX_set_current_reasons(X509_STORE_CTX *ctx, - unsigned int current_reasons); - -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/x509_vfy.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h.in deleted file mode 100644 index 7a478d11..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h.in +++ /dev/null @@ -1,804 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * 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 - */ - -{- -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 -# define X509_V_ERR_RPK_UNTRUSTED 95 - -/* 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 *xs); -int X509_STORE_lock(X509_STORE *xs); -int X509_STORE_unlock(X509_STORE *xs); -int X509_STORE_up_ref(X509_STORE *xs); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *xs); -STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *xs); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *xs, - 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 *xs, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *xs, int purpose); -int X509_STORE_set_trust(X509_STORE *xs, int trust); -int X509_STORE_set1_param(X509_STORE *xs, const X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *xs); - -void X509_STORE_set_verify(X509_STORE *xs, 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 *xs); -void X509_STORE_set_verify_cb(X509_STORE *xs, - 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 *xs); -void X509_STORE_set_get_issuer(X509_STORE *xs, - X509_STORE_CTX_get_issuer_fn get_issuer); -X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *xs); -void X509_STORE_set_check_issued(X509_STORE *xs, - X509_STORE_CTX_check_issued_fn check_issued); -X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *s); -void X509_STORE_set_check_revocation(X509_STORE *xs, - X509_STORE_CTX_check_revocation_fn check_revocation); -X509_STORE_CTX_check_revocation_fn - X509_STORE_get_check_revocation(const X509_STORE *xs); -void X509_STORE_set_get_crl(X509_STORE *xs, - X509_STORE_CTX_get_crl_fn get_crl); -X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *xs); -void X509_STORE_set_check_crl(X509_STORE *xs, - X509_STORE_CTX_check_crl_fn check_crl); -X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *xs); -void X509_STORE_set_cert_crl(X509_STORE *xs, - X509_STORE_CTX_cert_crl_fn cert_crl); -X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *xs); -void X509_STORE_set_check_policy(X509_STORE *xs, - X509_STORE_CTX_check_policy_fn check_policy); -X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *s); -void X509_STORE_set_lookup_certs(X509_STORE *xs, - X509_STORE_CTX_lookup_certs_fn lookup_certs); -X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *s); -void X509_STORE_set_lookup_crls(X509_STORE *xs, - 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 *xs); -void X509_STORE_set_cleanup(X509_STORE *xs, - X509_STORE_CTX_cleanup_fn cleanup); -X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *xs); - -#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 *xs, int idx, void *data); -void *X509_STORE_get_ex_data(const X509_STORE *xs, 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); -int X509_STORE_CTX_init_rpk(X509_STORE_CTX *ctx, X509_STORE *trust_store, - EVP_PKEY* rpk); -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); -EVP_PKEY *X509_STORE_CTX_get0_rpk(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); -void X509_STORE_CTX_set_get_crl(X509_STORE_CTX *ctx, - X509_STORE_CTX_get_crl_fn get_crl); -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 *xs, 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 *xs, X509 *x); -int X509_STORE_add_crl(X509_STORE *xs, 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 *xs, const char *file); -int X509_STORE_load_path(X509_STORE *xs, const char *path); -int X509_STORE_load_store(X509_STORE *xs, const char *store); -int X509_STORE_load_locations(X509_STORE *s, const char *file, const char *dir); -int X509_STORE_set_default_paths(X509_STORE *xs); - -int X509_STORE_load_file_ex(X509_STORE *xs, const char *file, - OSSL_LIB_CTX *libctx, const char *propq); -int X509_STORE_load_store_ex(X509_STORE *xs, const char *store, - OSSL_LIB_CTX *libctx, const char *propq); -int X509_STORE_load_locations_ex(X509_STORE *xs, - const char *file, const char *dir, - OSSL_LIB_CTX *libctx, const char *propq); -int X509_STORE_set_default_paths_ex(X509_STORE *xs, - 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_rpk(X509_STORE_CTX *ctx, EVP_PKEY *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); -void X509_STORE_CTX_set_current_reasons(X509_STORE_CTX *ctx, - unsigned int current_reasons); - -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 deleted file mode 100644 index 71b557a3..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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_X509ERR_H -# define OPENSSL_X509ERR_H -# pragma once - -# include -# include -# include - - - -/* - * X509 reason codes. - */ -# define X509_R_AKID_MISMATCH 110 -# define X509_R_BAD_SELECTOR 133 -# 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 -# define X509_R_KEY_TYPE_MISMATCH 115 -# define X509_R_KEY_VALUES_MISMATCH 116 -# define X509_R_LOADING_CERT_DIR 103 -# define X509_R_LOADING_DEFAULTS 104 -# define X509_R_METHOD_NOT_SUPPORTED 124 -# define X509_R_NAME_TOO_LONG 134 -# define X509_R_NEWER_CRL_NOT_NEWER 132 -# define X509_R_NO_CERTIFICATE_FOUND 135 -# define X509_R_NO_CERTIFICATE_OR_CRL_FOUND 136 -# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 -# define X509_R_NO_CRL_FOUND 137 -# define X509_R_NO_CRL_NUMBER 130 -# define X509_R_PUBLIC_KEY_DECODE_ERROR 125 -# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 -# define X509_R_SHOULD_RETRY 106 -# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 -# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 -# 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 -# define X509_R_WRONG_TYPE 122 - -#endif 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 deleted file mode 100644 index e64da7e0..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h +++ /dev/null @@ -1,1454 +0,0 @@ -/* - * 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 Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_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; - -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 -# 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; - -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; -typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; - -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; - 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; -}; - -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))) - - -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; - -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; -} 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; - -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; - -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))) - - -typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; - -typedef struct POLICY_MAPPING_st { - ASN1_OBJECT *issuerDomainPolicy; - ASN1_OBJECT *subjectDomainPolicy; -} 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; - -typedef struct GENERAL_SUBTREE_st { - GENERAL_NAME *base; - ASN1_INTEGER *minimum; - ASN1_INTEGER *maximum; -} 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; - 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; - -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 -# 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_CODE_SIGN 10 - -# define X509_PURPOSE_MIN 1 -# define X509_PURPOSE_MAX 10 - -/* 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); -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 { - 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; - -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 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; - -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 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; - -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; - -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 */ - -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 - */ -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) -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( - 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/x509v3.h.in b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h.in deleted file mode 100644 index 56968037..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h.in +++ /dev/null @@ -1,1021 +0,0 @@ -/* - * {- 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_CODE_SIGN 10 - -# define X509_PURPOSE_MIN 1 -# define X509_PURPOSE_MAX 10 - -/* 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 deleted file mode 100644 index deede279..00000000 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * 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 OPENSSL_X509V3ERR_H -# define OPENSSL_X509V3ERR_H -# pragma once - -# include -# include -# include - - - -/* - * X509V3 reason codes. - */ -# define X509V3_R_BAD_IP_ADDRESS 118 -# define X509V3_R_BAD_OBJECT 119 -# define X509V3_R_BAD_OPTION 170 -# define X509V3_R_BAD_VALUE 171 -# define X509V3_R_BN_DEC2BN_ERROR 100 -# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 -# 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 -# define X509V3_R_EXPECTED_A_SECTION_NAME 137 -# define X509V3_R_EXTENSION_EXISTS 145 -# define X509V3_R_EXTENSION_NAME_ERROR 115 -# define X509V3_R_EXTENSION_NOT_FOUND 102 -# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 -# define X509V3_R_EXTENSION_VALUE_ERROR 116 -# define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 -# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 -# 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_VALUE 109 -# define X509V3_R_INVALID_NUMBER 140 -# define X509V3_R_INVALID_NUMBERS 141 -# define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 -# define X509V3_R_INVALID_OPTION 138 -# define X509V3_R_INVALID_POLICY_IDENTIFIER 134 -# define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 -# define X509V3_R_INVALID_PURPOSE 146 -# define X509V3_R_INVALID_SAFI 164 -# define X509V3_R_INVALID_SECTION 135 -# define X509V3_R_INVALID_SYNTAX 143 -# 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 -# define X509V3_R_NO_POLICY_IDENTIFIER 139 -# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 -# define X509V3_R_NO_PUBLIC_KEY 114 -# define X509V3_R_NO_SUBJECT_DETAILS 125 -# define X509V3_R_OPERATION_NOT_DEFINED 148 -# define X509V3_R_OTHERNAME_ERROR 147 -# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 -# define X509V3_R_POLICY_PATH_LENGTH 156 -# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 -# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 -# define X509V3_R_SECTION_NOT_FOUND 150 -# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 -# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 -# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 -# define X509V3_R_UNKNOWN_EXTENSION 129 -# define X509V3_R_UNKNOWN_EXTENSION_NAME 130 -# define X509V3_R_UNKNOWN_OPTION 120 -# define X509V3_R_UNKNOWN_VALUE 172 -# define X509V3_R_UNSUPPORTED_OPTION 117 -# define X509V3_R_UNSUPPORTED_TYPE 167 -# define X509V3_R_USER_TOO_LONG 132 - -#endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/lib/libcrypto.a b/deps/openssl/android/arm64-v8a/usr/local/lib/libcrypto.a deleted file mode 100644 index ff72a131eeaf6f5fdd5a22cd9b1e99e3ec2a08f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8633542 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%0A{>(q{{~q`c1pfa3|J#B8LBRho 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

%IzRcG7We_CyE^YQ zvCBc_=Z^u4)?081p8UXN<4cq;Y6*BUM?s!f(Em~9+<1ue4BIr3Eo<~VtYjT#T;IX5Os+t6q`R%5Ua_6+voc|;=|ja ztnibs-CYl}*9~s9BOl&GoDxgzcw~Y>`$J+kIIqL%{Ovs#dZiIJ@N`hbuOHIx&sHQP zpF-faD?PV)*P%gG!gQs{0dVDow*`^~r03*qb8q^35iQG^Ru4JP!SrvEKMokU!#9KV zc>3ctxLo?9`fj%>99>G8(yx|5KcDY|M3ew>y9WclEINUhtvx{Sq-e; zyVTt~*#LQwaW~AAi9hJsRv~Zc7A&-GUQ_d7CV1yg&~8m#h3#vv%FjCL4egCjCk4$D z!>^)uKNof#g=65#p|FxykbnEl|4q+z48D4IyT5ZM<~F?0(RA-d*Ic!p0oH!vcVYio z|4Idnu6BOBMEnq5E-PnKj{FWOrT60BOdYUVX8nh2pC)2rLT<(38?ETkFxw{()r6$C z-NzI%^bsF%x}%V12J$3UnP{qMBhg^Po<#Ff@_o>z;b*5?@NqC&;w7;+ZsvxR^!yNP zt&e>Wk=KZQuauWgHW0(*-aLV`{5|OBIw|WuGZf*gFHYO?{1sYm9G%Y-U5irAykAy# zL-6u({(xxjOmtrl{>&4*9fl4r^~=KJ(YB=ZUDqpfa2TH{lS;P1YeC1iGsPBTUwo3@ zuVm0!cp41wciQBb(*G~}jyEYvdUMkjZ{#b0Jt$h5uQxq|rH z1{+rWOzo@2D$RU8+5PrdVx^mVcS$B1tC^Y;ns%TkBOz#QaUiDnyJrm=w}UNCFUF{0 zJ*GSOF*zE9BQz@Dv3+j{Lbc3o2)JZ*>q~Ey`@9 z-h}TwQmlP_F?h$N^Cjg$EMEAwKZw4bjAUc3^)f88QPirZGDBlEj$RR3(iUb1{-lQE zc8AlT8n~wUa?Ugejbqb)&9xn|x6d(IwF^VvJzvP@S2YYc^JK^CdBJ$M`nWT9hM{dB z(m#7}0A}ktLvmuHa4b4cOYwsz2Fh*nw|dRO`-W-fHmGO7uWe#O+@V;E?@rec)kr*9(9rFbVF;h~66sPuE%1ROU}gX0JXCFth<)v+ zjot@4e@uTY558*`esmt-MzieJ4Kpsk0UMuh$5Mw?Fs!^&XQTcC$E03l^9HD++k>w% z@y-CwvurHq9iD~$Qz@yEZ>K&GUUf^8Oe*CHb9WfhNL4fvU7 zr@yhU!|uBeLs`lDKhYc&&T4ZYN3$~Em9_|)lk!h|WUt2QFE5tl>`R5YXa?K*CAH9A zbItr-UJQ!gUUD4XS`H0|-HB&iY~kNHC1-N2J!Z6&?%nig5RL8|H9H;k!1_(J_Iiya zLUg&Wx};P=^V($LZn;{>Z5FH!?plsZU3O{(Y7sER;TyiWPFOO&bI#EA+nCH;P*~+M z5uQywZhK$wqGZ00_RIohI4kizo0yb~h2p}3to3~;`{E+pdw4xr)lcYNu+$2?DXNiL zFF%M6*O_M6B>u$B-Jgc^pDSS4V6R^mdG301b$Hb#zZ!@&k5g)UT?e0iCvxKjoY(kOwoYm>pLdh?+dWR zn=>KheH><6KFD=Q+<|Ys&yQ3dX+~!59!2dZPmp@G=5+UcH$0j!gGq@y3_sH=cf7lk z1nEVqH;J!3g!czhB+jvYz^4p@<~`dI$#a9bZ>E%-z_@QyeNLB3qp-1FFaCuQx>l|a zdAg_t1*iJ=^e28o$@MjzTyer!n5ru8ajppL=_(tw-#>xAvcVm*g}#_~CQNA@enQer zp`rYWIP_QV_WZ)~2=f=7C@-waMCS~Hj;|U4@NHRrS$4%?tm@#+IF!?j)xR8Ws?-~k z_t|e1o&B}JwmWa7Pta9_t`FqO;=cfkz_JAqCDka**brHzV1URME=-eoE+9;9+9@S# zSJ-OszZ%xgg|~Lg>4r5Luy}3VaqCeDxHdy4R`cTJAC?tHc(I3N{WCgTQj zkMm;zYna|*IeF;Bv+^D5or=cok?|S|`;exzEpnS;E$$|5IIHGGZr_>aL^d^jfsGCf z7piSS<3-lxE5t3Z+TXF|v}7xG9WwNYnY9t$zTVK><;{Z%ZJ)CDFB8DUqt-M1#W=j0 z`t@e`?khMbCj50}uqob;Uos_VVjk)zbZoP4Y)0g)83t!{ny`19rEIQyEAFU!t(iUZ zC!~2lv8-CIiuoHj+TZ4Uzyo!ewKe)PaUizUA=upqSC-zjQeS0_G-)Xj)#%kwec*p3 zi7O6|W7Vz?Zk>sY-MY{64m2Vxc=mzL71mH(>)CqdN+N>7T-)uf7lSu@($c=f8`!<} zMo?L+4EQ!qht3oLeAwndaUI*tedcRj@|>Zuxw}E_OuH8YB4^iR8O8)b-jJBw?YI9`t$ipZN%H4f1sZ1^F<%ViDq5Jmx{vZGF(Jz;GbEgS*mutG23(3fI%1QC5c!c$`SK1Wh!n(zTBcjU zBuCwQwZ#i?=}Dc*6kQCp;V@0^?hh!ClAOERhzU(fw=U1MJBG^h8)sPUWXBp8)>--$ zp=i8pwal#A9|_;})COa1kd<@Xw{zZp@L4!4`k7LQq*poy7PZ$9Zu&y+Rc{h5jvsV+ zaY7dhG?=8G+)zMQOue8Bd9J>|fPH4$;Af)yPE1gIkg06qzZRhZV(33CSD@op;wcLCeu=Z011fF|D>|V4PMQ@f_ zT_)GjU8k-mr>I8bb6V@82CoqEeM7{(x2t8Lm6dK*e%KLq0&E4}r;+!Ge(x75%@u%m z`@2Xl)&C0)h4ECG0Hte#=peGdh*l^ZJazu@3tljF1{3z6{VD*sm& zRfxB5YOagbh4m5VaS3*O=$>+T*+ZdlL{5#0cs=Vn&V);NZ@x(UDkGXxqNcKA%e3b< zI}T6BxGE8wj*MkUl=Tr7&euWVk+Mb4=UhY4d4Z-Cwb#L~KkMG^_8J&&$~CkOn~kM& zj3YL)`ruX2vwGglK17-pN}Qi^1y!NW^S^7`V57kzlS|R#FgH2RAY-T+0`J4uxLeAB zJG6yeCGHBo{dz5MORE6!1;$b{V^gu;^|s>j3^~{hiCok5x5a%Oc1P{0$gpU%d}cx5aHsZZD5MqmBy+8 z6F*~W_343IfrU`Y4%Ey{e2DMcyiGz@h{69_-_8PO2WYVlvrBFhgY-H{rHfMY@m2urc?8)n(7p}l;C!LN<+&eAKm9<0j zoSfncxoOyKdp#iFu@7Dr_xYsU+lxClA1z!s#R?52cHGIw*TZk+EDh7ppI}y4(JqAo zOkbuW7v5zH+lHrkd>uE?_Fc;0M*9{>9{4r5mD>ke5xpM<<;1Y*L(fekV@3FF6J36{ z$QDd}Zr?(c$aji%wbET{t-v+$vx$eoR481(Vqo$s87vVTrqNsm$m+YN{e5yOqBl%j zT%RXGu2&ClHEH`pk6oSx3)9ddxKi4qEdVh#O@f9x7m)qZ*yK*+Hnhji=N;cqt($qju;tggVx5I@NO;97(6AH?KaAYkr@%ihFNIq5RonVI}d{ zz2@ni9o0b~AbXAb#G(`f}&FCMaRYo^#V48s10j zm&N0smruc~$@1HCpLyc>q4MN=&$>|X{%1wat?S?!zqr|chb~U`oB;$?L?YD=jAlmRKfwy=r;`7Xe%S~9w^EnCs zW#l_9OQ++_ZLdVI;`*+E>L)DFi}F6gJku0gGBl^>Zp}n%W!K?}-@{ROqVbzquM#9& zPv$=oXGWu0%aC*acARSqGjw`yiWy7uoXyF+v2N}O2VNT^xNkgHySaNQ@xMO%D#Fws zs*4UUe1a~VlO~Gtw`bvCj_#WX7fH;Ypxx0w#}nNyDQ<5k+95aMxQCLY zC3(NTq`%p+7jMI6N4^}E$F*?9sKMlCuoq6M;uYKt=`GDUdmfTs;_bIiUMFIWb6<9> z{#DC~k41Nnm6+^=NPSh08@mNw8D6bAzT*X2{VPSd=W=4N^sy$@WA)%T5_+5aL>Vp_ zuMK*^(h0SMVh^|T`Q-iKDT!AvQ*kTonDG;tH8`#KO6(c=F8Fn|_?DoQahOx+wsdd7 zY-o?G|N1fi609#MtMy2oLe52hhZ^<0cp0+adCSMsuw2+NO~}m%*~JZW?(CNUYjFPi z!VXSc@?nMXk2w$!kqSDVqzK<%g>1ZUgz#idRms8C+Yr$eDmNol6C%P!FMVbCQ4v+{ z+&T3Wy0RTRb^7OnYs1Rq^NZQB;{M~XU5k70VtVK4`@t<}JAP#L#LIr@Xq0x-6BNUz zDJpC2j@m6j$=V-H{$keM&bQCUh|C}U~zKYgTqfhAuox4U2I?k-o=WgBs^iovb{cP z>+U6?TzW9!;DaUT))qb)??U_**>k;b2zu+^Zp14EZm-GqlcrXVs!l!Gw{(` zR{j36%5#4JC!TQ~*KCV$ z)V!)F(^v%D1KgHjQyb8JFyZuF-ZH40#RwluUk=YXl@Xo`g%BzBqg3=`-$cVH(B*VA z4q1O3akB)k&I(zChhL^B>y(^CCT~Pk_t&%Vjo2=pNaiooEBGZY3z6$1=e}cos&cp& z#$PS}z!~jQi{3<>xD2-StJw`%tFT~W#h#U7OR!~_?QC?SGg9pPRGGC|@!8|ao{*|~ zTn$=!JiUEB9ItOYKFqNRn(rnqtmMnV>sz`{hWW$c^Vap*P1!ii^G3(DpaA&Y<2ZG* z=N>#mm)0$cn~A_j1xFlT*Wx6{+5BG@i*Sc|$-2#ZI}pa&m+5*;8FxM|3sV^O!Lcuz z*S~05!?r$ZnwY;TOb(s6y8dx9>`cxax%Wv7`oHih zH>=oYPZ(0T7e5wMKZQLLp7(F|I0hRThw?)u#~}T1-0kl>2C>q#x+KUwJDEGms?x^XK zw0IbK2`V%E0_Dl`h&g&?N3Uzgm|+NEBJ&L$BH{S6Nta+oE688OfW>9l~5Ra zvI&CxcFONG)i~oj-3z3&KJy>mS(ZqFhSl#ACfg6wcds_Y%)ji0^p8&bn3z%yMieoP}PXR7-Bk zG^QUYUXj2RJhK)YyN&N3A>RY59`-0KS+a^ezt4J<(6JLMr*H5t`7{W(vaa6Mi3d<5 zs`SD4*>UV&7T2Pp(u;-KEx`wUHzR0*C3ArJVPs$3^SXT36TI;|`#zn=9BQ@^pM&=4 zV6*2BbtjH4GEcXbc)4-~lpniBi(Q(9U3^R5$~0zS+T~X_j=$#g@mHb##4cRHq zwfrI$IGE>NrMuz*mK_!5snce{or!EW?`Al{KzSka?yMZJ$iA8Ob!IVkBycGgT>gfq zuYLWcv(1q!St*@X`W=!Xo4U%ja6^?t)QsOt~34uo< zz{Im@llEQ#eEsz(AWZKH@!y@UuWKud(3K*5In{|s^LxGMQLqGbTn4;yEqj8l#-KXAK_pYpuYLlPRQOhxiv#<3ue~0HJ#F`#k;*vEAr2zKqZ0yqu=E@ zs9pN=gQZ{$@zYpcb^{Mk=2EzELZT7z-zlERZSRAYsrUNA$_>f)`CFH~W9osE;`i(; zvMZ5iVEwbPgS<~j5k04Iy9@=Ucy_HH)cB9^IytfsKhV&}3zvjqiJvyN z^l|c@Wkb`qTE|E{Y~I&potcl+l&eKNCDAysLxxG!xg671ICVB|C(k`PzG`-_T!8cq zN{>29CP2)`uglSy16R>-Y=6sl@_g^b=Ud}8Aj~o>w6m8V$I`q76^2Ssx3m5A8STY5 z`M`kvwvjZ-?U{E3NT?wC`{RIWOGRk1F5h)@c0T6VKXn(;E`ZMriI%claWs6n@ODFo zIHH!WzIuS%|E|*r$f(;f9{aQ<>aF6w;pGp8N7W_IZ3*G6VBeh@{pzVY7Vq%1 zTKMKJ!VmAyepjoDCC9c4`@9jv)AS>XpVk~hT)*T!!3=W$yye5}xQHCwAM$Lfi2j70 zh@zukTb85y^SGOB2WH{Czg$Gr{b^XbwDLrBtPDN!C4MS(O3M{8wBX7ml zzm791!#TCkYgK%6Fpfv*ilWmVq{fyVHBc*qPXo8y^B!A7u6XKTcq|nmPwvX{2xS77 z-RESB$0&)PwyYV)1c`JeFc zL}$tXR~~+<3x-D5nvm~hr`77M?8NxW#6br=2N;^x?HuN7!PKfQpSEIK#0Y=*RvmgC zcg)AHcGvI1-r}K2Gaa)axV6HFDMJDou@4>k1)hSd&u?YXvzgF$SU=;7kq;UKl+rZ6 z>!U6GTGWk5RVO z+i(&VoKQV2M!w5FF|_NR`6X|#-?^-~ujDDFoV3dl>0OR}OSf^io;(aYQ}+Vd`7>ZL z`|ARui4(w{!X%e<{wqG1HqSpeF&`%sjdSW;4!}S7N7q$B5fnWAe(2(^YKT1gX!&e+ z7|wD{t!3vagF~3saC+-wl%&+E>zvq#9?fVjmaD<|rSiO2KcWfBIZ9s#G~8iXVx|49 znfy7AKdoI%CJgBVLk3&N&!bObbMq1O zLCrf}bvho32P|!#E(zNweBC;~zG8~)AwHjwdTe}u`l*;#C*Ecct=bd60pCs(FOn)- zP5h0VA}$qvNA_jCYBlqf*rxmDXMm+4?&_-WuKMJIpKi~MHgE?cJ*>ntiab~ReDvk1 z&T=8_pLT@%X5TL?>iyuOy{H+E2K%eryKB)eyBnVmzI=Ym z_J~pjo`H`4osf7Lib6O0nF~mewwhx3c;={g83SnC}~`N zaLx8Yj0@YloB6pev_)_2CS@z(71tb@xTe5>+o#G`WvPBNGj6_^TFYwopK%u6wR zHqmyjlOSd&q*R1(ze0vsVEiGUT)646*k5U?vWi2w2&jTK=wLEt%Uu660jVtklgInG!{0AiE(Udvj(73Yoh)ifO!BWs|^sOGvd zUiUsYpgbWP8`kf5qhCtQIDEa1ruRzJe5f!844DlkU3=m7jM*?TVx7OyW*lx?e9i5a z@_?PgaaKiihv9N{3`nV)+85qN%=k35zCDGAijl6=ytoR}!nV9l8SKN-tV~Z; z+XCE7v5J`&-HqbC(F^82b3>+A%I7%24dlD{&+6{?`tj+?wTB<}1;HcGwjtQA0M*iN zZ3SG}aQ88h-gz+vM$EG3$2mR5?zk9*>n763Nefos*5=1-gJx}>E3FteYtFTb@KV$) z7@F+nvJL}+y-{69SK`(nuk4JisfZHujJJnfLzU*mP z*j~h?K5qI{$nflc5xQ9pTWcnB>$3gC2fgvn)+8HafqQK(Yt?yZG@OgPpCOJP7pqTf z4ljghknztG%Voi|Aw@tU#u(1*OEu@Ih{N7VL_jRa*lerHw~+l_`_;miu)=9@(S4 zL+;ajzaI#{+g@)e+lsZ`3BP)|+;N19)nvFb8RjYj*E>Q@VOc=lpns@<)pKt)6P*^U z{pDH9@pBR8nN2x#hD8DaQA)9oHm9Q0E1)9#tr9k_)~ev}utI1_%<1K4E5Lua_4xsP z2dwk9$x`O6!hxY)x84kP7>Z5i2`;{j>ZsVm7b}!upW3kC^?MKeyv}jOHcABME$lZF zzX`*^o++T%-3(9M*zGF@KVe&p+T*=(v(e(Ybt}GEfK@uK=-Q7O>^WfA@ay>!+}ksG zR`cd-WI@E1&~0*S@vXr4y0XSk9NpU&*e09|-jIh*J`FLbbK1P?!SMj-+%^u)(?5v4 z*F#mNcPC?b=X96J;vJ5y*rU zcPr&5Z6kiZA1kzOTU|wWIPXY0Ps3NDnwtT4kvO+x9gQB*tb(a?u9?a8ae$p5-Jza^}>RGAL_!0f~Cf-gXH z%Xv4x)r;V+bawBwY04OE_UYSDzZc`ImXxI2sRl3i6`8I{sZi6|+rGXu0<8Myo7Pzr z!ehI-tz`X4To5=`p`k4aFHyCjHab$dLOG+n*EmF`Ywc zy4bPJ?IgbwZBT_X61KFK`T2 zH^n0btH@o*IM%54?md?_lY0D{)8BvV-m!Xi5?bsIr@6L zIZDYXE2*oiD5+@8mYU_`;!XDU-X8uW^6)1o3Z5PmMy)L3DCO-X<*TNpsYx!>Go>6n z?7Up0$VxhXZUk4>R8&$_k&<)u_xJJBnKOqh?m}@_bn*6f@o@6<-s0=vM6F{p$KTuA z!@?ozSbCuSyPP^@VZ>?apGRT_dK%s`5>tPZ z{m-z4oHC89zCgq2KaVA+EQ~lUxnU$8PdocJsvS9;@Gn3+dOZ@e|Aw0pgol)v9*Ar9 zNTB{>%)_vn79FQ0gNeKv`n`0d39iG;=xY!udU^XhDK0cyt>EWx=dg*kf{LS^ zzn$WLt_1V%f;FQn()@ws4{O(quH*90GA#cvu^|h^cuCI_jL-##)H}n0)lp ze=T4Xi6#-1pP5cTi}mT}4E9e!+;p54FCsCOf2@t@)AEhAr?KaTBrm0tKG_(9Ij#Kk z?m?~JM$ysp({WFN{Yigwy54j`8uPLGPow1@tG_w*Gkp^1@0gbQaO00=R}z?iDCBNhzYSB`cT489p5-iQLoA5tVPQ@0BXqrl?mG)p zdOr)&3GGqRXu0GwO4GHauxYa-sT<_HhIJ0VGGi} zhwDhaogwLLO!@;%WTWWn2}Ummm4CE6h@s+SqR&)%ePAbV&vI*07AvB^{s1XU3{|F~ zklSg4-b`sfT$o8&SxA{#NgItDX`^97wu*k13F!kY>2B4=L{t z(jGThSVm-`3Ep)_cIzhZ(aB6^IjWn?gWR7JFmOjxe}HPwdP7Q2(R71JJ6ATch^05N zOc|+ra*|%rmofkuWQ8+)bO)}o{ z_mDnG#f`Xdg9XB7Kx8t&a}_-z`~) zEwiQ#k@}|EgZ%b2rjPJT8f57lmVq|aF0CvWkQ)aJ8!`BH6Z@vdqSgsXqV(~nf!KWy zvH4U#Xy*iC#O`*oAh(y;bRCNzX)l3)#vw8`sg3qW!E|P(QCp$LrW8NQ4h7QBGZ&Fj8i! zoUNq4wy}&)Zy|b*W81lMI+58XgEUGmm5HAnjz%`Naj1|a zztXAyHEdBw%0{kN{B>mfsV8+p=|$FuQhq?_>I#?%Myn5kNio4QM*7NV|DyL5Tha$cF~NWO)O|8;k7882j$U`9 z2sYZTqvIDPli0ur9d%sS$VBvJ7$3+ny>C!^<$$v;vTh-n~k zBcb~TBlSTY=MN7HQ94n_S>*UX+k2#~<(o+xv6A+lM%tUQX^NJyy&3bgk+%Fq+LE%B z7ShHS$oNaydB$Y@fkwioiG_pI8+&@|oKd@>+NVw^N%U|0S_zLf!tWEYjb@6^ME!w! zBBO!uY9zdx2(ORCo?6JYtevLYpLh<1podk97A!GVQP;pKHy2|^YSBpizk2ITpCdB`uLM)51k)5w z$&q^vyZN^<$ZjvK||MoGp&y1n22ViQLS|oRa$Hlkl?g zRaN!t_q9rd)RCemp_1AeP0C^+8I`Dvr`S$&Byuue;*=y9mFL}i>R#7~Y$qsM5}s2N zR-;L_R-EFtjIvHnisw$?J;i@oFj1K01T&|ktrcBp&6~HQd?=mk$VP=8YG*Xb+=5Z( zQH={ZCCx2pnMdTy5>jE($*4f_Ao-*gaf)-FW=>>X&nYRjXcGR>Q=dk6mx}+3o*c}F zf7jD!A}D#`{|k8(T^5bboE$Ui6~v$yMfaLUXEBB@lz~o;N~7wR1Tku7G>O}YR?elI zlH5kLa#Bfu3z_6*>QB#BDEdD=L&;$sO&QBCis->ip0Lxyh>g)sSQv16`pFSK|I*WO zDrO-A_t+3ULjOBHO8@&alszN#zvItIy)uv79gRvDu`8M|@+Z`>Vi7dL=XZQmF4u4L zek1h1MGf1~#rq5mBpNAzTZ$UpSdB!eDU$OL(8a2w(CJ5JHD{KpFEqd6T%=*d4= z{t#Fo@Ea;OLjOBX5wbw&H~P#G`rq+U`hUws&lo#G|2rN&f>SF1{%0VM^+_19`u|AK zA~-M6h#u(U-%SG0kLhVt98c`_Pxytu&~p*if1(#4a{q*{{|mjxU+}#|E-!=qS5iun zaPcpCmi`4-{0sj^Vpo6C^Zj4w#fj`c(Nn|IpKyu4@S(;%Ui{l1N3IKm2l>s&Uf&)CPCKTatuf+#1Fk%pb!4x`fU7XzYvJhGmaa=G#%*Un*r@yj26?!H#)v(3_X23TsnrHj@#03svf4&j;Sb!0heaL4>I74 z?VkJ>Johhn83WEZ9@1@q(npC#Lq%iDMNb-AE;=4gJD~Vz&_NP2j&F>3DFeL}1N~

oD-iWxyHBMK3$WN1cJ5t^q(o&5ZLy|<1@^K-ECu=D*VarBkBzf+L^=v#Fs>cNu@akg-C-b#Dr{%@iK zmG-}-a3nkeoNRoy*n7A+*lcpz3gb2AHb!nPM6JbMZvHk-K_kdABO5~tD;qDTK#cJK z_|HO7o*_1l-h`c#&1fM!w|Llid3)LTIXU<``P0fdRz*c`U!uvFN*Jvmr_EzvTHORY z`Ff8@q1UK`x1*DdhubD6QVouNb~eQO#D-GCeyfeIoxhv+Z&fy0TYhdXUcV(V)aKZ9 zS35sf8#k(w0^R&wNvS=@>f`G~{3Lv~_&YiNTNz_$Xr&?Q;m^Jl|3kyt5O)VkiT|eb zAL+cD{9L{LZAS7_ZBAO)*~#C*_0Re_l9EuB>h0z7X98C{53-!epAD5}UCzGVo~kNdA*>)D#(wZo~>lr83wiLp_+d zdD(ebEjNK|kfQc)HOXLy4&Gj*>-*EIlIpcK{@yl0)Wc|!cVtKY03W2NLG9G3-H30C zGI4GRQXKJcQ6?@fK{P)XW$I9w2psjLA;Xa}Ii)ZqYEK`f83(feZ^zGAsOLPt2R7=a zk%XJ9qcMF?8&>J3C?Q7__W#%SMTPMHpYk(a11OG*zfJ@}J+a~iKw2Ax2OXpV2RjFf!pdOcP?<$Uoc`JZX>>Cba$YtyQ~6VAlMcF_QRSzeVvUu*o?ui}kL^EAH2HU_M20X{z9mWfll=QM`E|7Xl>EtL z8!MmuzW0yvlWCK?|5kpbzmz|jHo0OfKh-71%0EQ(`&0QVY4Yj)kYpVRW6OVlWd2k6 zZ~j3(Ws+m%>k;fv@?~j+7NcVS*^iY^&Efwf|M?%}Q}ffY@>~B>|3NfD`uv=(z*zZ> zf2sf0Kgg#{VyyhrgdtUa#%BPOEXt{c3QI<#fA$nD73lF(+Og6I`tR-oE&r{5p^+nc zK6)%gEB_cWoM60(U`V9rqeCmn_(EZX&3^=Xez`FT^zze*my!H`YCq6kO|a1fQvHW& z3wnOKU00F(V?>OwzE2G{B(&1{F~x>*p&Ofjj=F~Os8`;IL!Q)s^WD=_RUdWTlltHL z?rG7+LP{TfYDe~>q}GP_Q2sM?A26mEDOUYV%73el_%smzyBKNC1(|gdkl8SqDU)P6 zO8J4bk?j-N+KF$+XA+a;Q8%+O!y-u>ou$NwBP!UV{|n13`L8S!)<%V zWDPBNnK`vQe$w=3@n89(;xl=o|&H3k7POrxBkHFp`e$h^@}4pxItEvV~dSq%9H0z*OQ>$3^@xD7`8DiSFs79Y%bFGD)6GOq`MA-gJP|)xDp~&Aopn z6KBRI^~m^{OkC}om?YoKCN!L`^8If0k773s1;v_9CBJ53V(Q#Qd|YUCkxtbG7s)?~ zgYncc6?+mMT!cqt{gc>(l-@KRc7(@>zu|~46Y*bS8SyU}X@dsh zV?ovX|KaXEz@oagzVUr#C{rkdfYKBxA~RS}QJIA302&ccP{5Lkoo3fuO(-fF%fUn} zDee?(i8F+#S4|`)xt0_aC7MZ0xk)Z+5&;XEXapm3zTZA`j*bM9yzl>epa1uL^E_wH zIcu-I*6w@lwbtH;)rY{#x;^t^Xi<)W|TvDFwz*0 zylbQ~Q=`nH&L#6B!C#9q)1u5$9m*^ZWmbmp0;$ZjC^NCF5#J4Q^MRWW`Yb-fLlX!5 zuj!~jN5%LcF3P>7ZGH*bor1MB0dk*o|3yP3v_Lhc-8b9Nm1)YaQC}^P4pajpYXCW9b`8yyl?24*ihKT?M};M(2`JXGuic z)fSu9ulvEYekl5euK&i(P3Op%%yVC$jW4q57VDemD0G!)7Uwos4P3if&)U4g>(XAd zx1k~A`b=BNhAp>+%*in2sK}D_8s0n?b8avTSv1yXCkvm&=wCBnf{s@JN!FNKPyAW zamp0@pge}{J4yxDo(-zKCs=9*9iIYRQ4N4Rv}Lpl}1?j&zJ2{k&d)*b--nh%KNM$_P}%zzx{=dl3>Pf^Ggx&{|IMj z%KNM<_J|LQ_>NYWdjysDSzYY#coE;x8smu1va3BN60HWsm8TfR=<$9`@3x;eld^W~V%PzUDU#FxvB!5#4@IM8v#pV|R@P6zNM4sb{MWe#vh`Y&|= z-`)ZIZo6)i{zDz$pY8zuT?g2sdIz{8{pJqfvhBTX z`2;aJ0Y3(Jq%Z64+TzD{fIrLu?wFp;4&d1xz#V;;9MiMB1N@B+a7TREr-_YA@)*MM zSs~%Gamf+B&w)-DLzI3&(w+G%NGKvi9&Z`kNk+z99`704Q5sq9KS zBIY3nd}h0lf7hf3hJSCCK^pMRehhwZmcjlM2l#!nb{lU62Lttt=`d$c&RyVWY6UDO z_m8mL`I2t}!spMO*CvMSp@6`@FyjLQ{vL3-m{gGa^nKQHMz{_9u5J7NG&6URSu>uT zH*M;|DIg)b2Ou`HSx1D12Q81@3I)fR)zX(Pr5$jW3T_Gr24kM-CZ`wuj25`P+aap><^|k@A9i-+h(w> zxc)4@JnwWA|5XGqnkE@Rx-XJMDY;KF6AH_xN(z_Z$MN1Ce|bLoTEdraZPWh|0@~xh zPU0`i35>rpuD1O3fVIc}Bm?3n%M6KI0Uqp{v0X&j_r?u+NS@Z4){-C zjTJw6U15K-^OB$0Jr-Ac{9lszr%U-@<;Uicw){Jz@L2gt)rBYfFIqx0$pGoj+Kb~a zqJ#Kz{$_mECm4UZoMhU&rTEn{K)N$r_LJ}P9iGJi=`YuDQg#TCxH}Bz`Dz9+5 z%?zhsZm;Gt*zR73{gc@jo0O&&M&l~3Yq+iila{6;4V}3dv~X=N@}xV8KBK2V&tuTK z%~haP%QBmxE0$r#NNh)xoa^Fk36^pOr@kKDRj- z;grmBxXm_bK1(}fonELac-AJ!j{EsNe0+g zM0+IibQt_uJQj!LOV25p9Z@Vdcf_BS3p=KR{d5$b*T8;ix35ZeP0-l_I?Rs9XtDG# zyRHH8Q*h-GO{IR|>dnbWOBn7fOe5R0q%=6>kF^1uTk|1oJ)F2FowbX*d2?AZ_7e8l z2g9z%?A)U{RSm1p|FE*cy|y2}x%PUIwH9^OHzy~Sm1k4Psm)b*zs$K={sS8_v%!L& z55q5bTHnlUeat2}2{uB;N48U<`-AV3sUoxDv@7Ie>ztrKpi5qF`?2IGg9(ztYuSYnlK>Kzz-%4a>XsA&J z8guJWPV5`!UC6%t^~*m`zLRK;8u`y(SX%k;<7n@}mX!5B{&M*ODNin{p(#H-ZOwDn z)I3Qvmr~A=GYh#jn+?R5Pa(cF!JPI|0?LiGUsi6cEvDh@i0ip?VuJ(7^?sqXn|mwV zEnY69{21(~tQ@Z?y)4}oDn6KKFC9fbRh$>k%8$ig3%jXYe#}4M$vU)Y&}aERhxD*~ z|5;ho0VfQ!Sl=xPAT8O;@cCE8l83qjmWA_%2Gx->5M$SERDc$68BKOJ#JlIo8CI5u z6}~+BcR72$7jA#Qi8CnvVH5V(l^%@~!%9DjW959l^y9dCoQ)&eYH&tM4)}`kK}V{G zjW^Pgao)#B)Xxai1v|4xA=+=Gc4!d$7{-(Q9w#=-z607MeJskti?uJ&X98`C^)J>h z3}_Fmo>+X=?&Lm}%$YXy&dEhT%WYPnZ;j$SL_Y<0Jg>Uj&rrswhoMqGBPUIx#6CpS zygnZA!zlBmhvJBdn-!W_lBRSjncY2T%jo!^ZKLD4B@eMQsQqBOcRs#B+<%n!jHD49DXHW*PPQo zzWe^z?)rDbnvG^f%zyjriT?*}Tj8i8dCnGP9s79;-8YDqtqJxM3#>nU&+trAb&C6Z z9Bo5)?%9Tz9F`;D$ua?h6-uz>(w)K9NzX~rJreir((^TTm(wEK*}j&NBiY$bOSm$h zIK2NT!75l|gk6gJXO~>{W9?Acs_xg*BHPR z4mK>gu2{_WY+)ls`i|NshH3w`XA5I~r1$R}l8|w0@BD@yBEF-x$`RjDTV;m_i1>em zvry%IS}Z%hr-&~tNbI1y|LxhfG$KA*t^D!Vo(;=c#CH%<9ip{o!$RTXhncC(Z=wiy zw5r$uT6$n~9O2CpyeAWn# z+vZoEm)g?tL;l&XEgjiL(3XxozcRR^O(#jB!{Fg|lH&g&2e@PTEbjm=_q(?3LGE{L z+o4={%*G)OX%g>Y(w)H_`(1$pTvCsSkR=XqH|d$(Hafs1b*2c}=>V70%s_JeGQQH5 z9}%R%Xn+KuD5f6{?#ySVnPlx_Dz%2{hS z%IsOPHR+z!$YJB?!g)_kV_R9D8S(b&~4Z)SP26J}3(%80F$XP0zER*Zs#WjsIIMQiNPX`<2v=j;)u>kwmhoj-3@4QggqH z%jOXVbL_h;(8T`Q`N`w39JC1!e->Y!XJ!1h@z)`M!AvrObpKi!9I~Z%Hb=93s-$Ht3Cd)l1Q~kLT3Eivq_x+^Y-}5jQKDIM^K z&Q<*VRr~}gzFbcBSn!RJ;{TORZ=V!jjwj#8w66jY%Sy&!_f)C9jze*^jSrjNpn?Ado8F+< zL4*5?_HP%K^*GY^ z7}EJD(#y{1pNPF0uA;7=(c91}>|20~eW$>FKD_kZgF8Zu9ftG9ousqH0owwe=Ql9B zhkcJo_U}T>&eBI?HAs_r{^POt=mZ#4UR^s~!1?(GUowE5$^R41&;AYXJ4*v&E%Upw zF0wJZ1@S?X#p9Nea+y~}vk=pQGo$VF{BTA%`&NU$n72c>SUMEKsmEs15Nn)J*a+ zcnmWcb#W$RJ?!i`oV&r@WHK^5w^)sf$z zq^FGYGSnizQ>Qt5Yo-miz8$B_5W^RljHi$m-2#*Gjfn|X_vI#|N1@5sgmif=!97H0 z@LmPpc)u~p!{GT6oUYg7wThpY-kwuKpWBb ztfF~|VYI2>^|88bE5?rDD(1ZrSVcD|ybU|LgweiuzXqD~$HiM!D39Epedrd~J=Ax* z$r#*S`K3!>A9|xx(R$}DRdg^JRz4stjPCz%j&-~DE?SlqZ{4chO)LBMpGFuyN=2-9tAa4=-5q*T1M7R=y*1BY$z~ zaBF^67M~Qhhh}n}YZ?(Y4mj`Ox|sPQzecI4`3kT_pyOYezdnIi#G4*I(|h zqsx(|g^FS2Kk7W_BWO$KoOE>KxJ~?dl_zy|vzI~RWF_4X{s(fr=zN85&3n<2;NRKs zR22OLQpODTqJtle3r$A4itE4Xjcan>esi<5iu+*%ji0@l-0?&B}kIE_o{svxy^y;&CUIo}E>8AC|acQzv^JQa9 z>yuiuHss^3$CZrB3*{Y=fqm>K?;nBZ>E%hcolH*>#Yx4o5px#RAoKKH+A(e z=zNIrG|qbP@*~DGts||qW4tmvgMjblZrIg2%&N*-%j>!mV>Ea>I}xKtBr(3-nrijz zMT}{HHD#^htH$_bctjIpm9xs=(K^Da8snLv^7k}2sff`%h8VB3CRjaU5qI44yb7OR zu5V4YmVv*!31MS8Whiy{-pepzJl4wkU>Wb0NsKqrMwnHp#JH*`-CBk-CRn-U_oFiIx)6BlVEl$AV&29V$?1| z`U;6rz&>c^tI_(*LGzs%9Oh&N=49zRHjoK~Qr9zeKan)qA89}4aI;c*CdBD*oB=*G zD#&N-jEB&m?xVw;+-4^%C8=y*x8(O>umCqDH#atiQ)#s!#H+wPsFNG#mXg!e$vZVy z^c^W5+Dfi7Un29b<73(PcbH#HEaZ&e;79Y11g<<1arNZT=hdK9(h2@D3R3m;bBY7m zN0!Cy{IyGL_L0)K+#^oS*$FG+vJ;+-D|w1kXD?eBm%VINT*+wC5}Lm#wl0kAY4$NN zd4}zeJ}15>u zS>5su%H&Ai!oQurof=a9uiN(g-IVgjz7Zv_A5h=;{*C>+Kh00#TSqgPzt+e0Zyf=z z^%)K1HLba|R001i4zee)gqXN;w(bz~choM=%HP$Qv=!@uFguKepTo1fPN*m)XU+ki z!FMX3h+SQ5LYr14uPSDJB?Www&4N-XwogIn4Bj4)9X%mC>d;QT&`vucE#77W=83v| z(xS(_0vXuS3v)=HAjlz*J)$sIKn^iPV*b!iax?VyGZ{Yv+z<}=(reCMv@JseWWYek zX_1_pLEqhEB#_M_Bkl2fMT>Hb!O)AvhrAMlJ7h2>hsI%ETOFb?=ppkN;*fUG(#M*N zPM8xThnb9{ffH>q8IOa1pCrhzc*l7z1{Gws-syOUj2E4XJLJ}0kT*ObqwHj|Q;5!@ zpK3B5gNziN4H*vOL1d1}81Wc*Ga88BbB;Yd0}7B=$e()7#Sn%(G+;i|hj<$XEP^Zw z*(qXyl&(UPaXw_5OqA91P!~%E%IbKw+LDE`8jdo$t<+j{$afOTDT;HotcL8x=!`%) z>L>XcoTakLMESUYPZG*+B+Bwv@Eeb^x((kwmcLUPlhG%{$8bzxTAT}+eIm+j0A$kD zle-u)QI@|Ab~En;ttC}S3u8&QGzyNlsml-7*(3(nr~v~)q)AB#9hA3=FngWg57(GLoD z(>o(b3yX7n>RWUo>ZE==X<2K0wncL|lwDII%)86+$gRP&h{i-zILEE{Y^svDaeqtSN0 z&Dl*yqWzpG+(92lTVdhPKJzB6A52;@(WcmYo?$mV=6{erjCOSeZQ->^YQrV0ol?-g zUWNR0!cax)2auNf6jRF=7)L)wy*C=R(aP>xLviRfdKqi!oA8-z!Z)5ietHjm0_~5{ zU8CPa=W?Lcxq=QyTNGhYD8~_|7WT~d-a<#BZL;SR`YrT_f6cM-eYewP(}!CvQQPUq zVa}GC-WAl0wmJlDB{{MJGWjmZ!Y-B=l;82FT{NlJLE4PEzt%U^d=X`Hp$oxxrM&TN zDEQF!wb$1wvK4t@GJ0_^f*A(0VZP-r#0l|RMFd@c?sVb8yTiH1cb72!r73g zf0Is|x}W+-*y%MI_M=T|Ee%6SOT%naixF#t`Wd9fh;`H|!e%oU^Rrg1K#o0kCy1YTF^WUHWee8H2`yQZ|9waSM zNRxUH*2y6OhKW-T(D%9=q|Ohpb+g*=&5VN-vYg@4qo$U?AtqxZbW@G+`&@`L?Fe-? zbq%3hvHIe_)Sh40>7%7C9I+I<7Q&&JvaE5lXOEtKzT zq5fm->DkfKLL2%b9Q}@kAIJM8v_I{`CSwEqy&0@wn1y;JAZ6uSiS_H6sBQEn%HDr6cw^iW)1!Zf=Al1(&y(nOL!6%bQTP4^|56<={fIKqK#TTJ4dyaN_vMH;sQM`>e(*aqALBcny_0_0 zbwAC;`nYCh1=UZ|SZ)>Xp$~H2mN$d9P;=jH^wLm!US52BC%ugNVYEgBZKwGdqt`rH zK|c+CgFcJ1k}mCy7t7~_o~7*_`ZMZ@;aZ}=3uEDN%=0`O3jN z>G6I$>6JiJOX{Nu)?EmDyJrP$n1Oh}jYmBVi`z+)F<>rVO# z^ga5lRK9Ft{(3isTTO4yoj(p5?_+JB(yM}AM!#TrDT~-i>mRh2K@H00v^VMo>k_`t zJJb{NMSV|u*t&#mwBbq8;>>ySNwM4LRkTYM|5(^N;=1i4tX)3C*nSo5kil1l?nj=S zYHngII)XS?qf9MLX#chDX?zpfawDe!jI`8Z%`_cp_8f;buGGHQxKz-qQ%K8F)Z32C z(fn2P4YnRvWj)M?1AiTO)pmW9FU!j0H)6dRfUrSW)5T!zZ03Awin1QzQ?Pcriaz=_ z@Kv0)<`lvjW@A1e?lo6{k8h8*&^uXH6?7ZPoUVpvFz7QH9@LmeW{u+WfPW6Uk6CF! z^b_#-c3cYo0@h)9B`O*M-Ny>(O^$IcHOWyNbw-(10e=AWE%KOn%-~ELF`oa(xno^e zF>m?|XKIA*;4;c#6w3?p-zc@0hXcK7WQaGd1dUGug6JIRV-m9_@&@FgMQW?7x(CrO zpchC7Zx`gJ9%VKJ^e$$O;-iXml(2kcKEW@`O5)w{%y?V|-!UaRssi0QJoCNW=#?n7 z*#g*^huvr@%BHd}N0X7?@mv?a-*ArRqs`n>sA_UJKmHQxNdq3`!<^|$g*sXWI3W-?#K`C{GdD(Xzi!JpATf^@Axnjj0-6qI<=QK&oU1#4Kl)MqW@CnIhu zXw+sU@CgVj!~PT{@>s?xYC^$d7+{}(Mj3EJ6;3tR(PopgO8MKfQ_PzHpMvo4anJH+ zaDN!@wVYQCd;TJ86Q7J{oHb{8Wc;IiRo1h71j3&~xiz9+HsbkH;3YuUFdKTFO0;2& z9W`Zz1aeQZIL?&y=jb5LwdQBwt}G0q1^t|<8g*I3>1f>)Q_F*(`whx&vC_Y$4D}TV zdUY5NZXw+-PuEe5k2M!T|3l!j_Q2{q5PFA;#E*Ze(3w8>0HFQeJ=F4_*t{5?)B zrn4#}h}IKj&B}4kR5|`tJ~i5#P9a`=ephdbJv%jtkLg7IC;JDXUIY09$jea=H60zR z#=Bol1I7x*fBaOAj*3B>Lph}M3Ze?!mlt}|Pr>)gJRRETOZ-<)IE#6#eSo9;$F1Z~ z4f3X)S-V2Lm3IoFPQbm$$_M$~cqePar%Klv){o1et9uG4}ta3cB#o2ty zntpf>LpW;=ep-n(f<>`j7bngtEiWukINwGGmIm4)!Ai6B`IbH?&IvsRBcOJHe zqV~=uLEfcD)hP7geE-YP}Q&rZ-BvGYq;NNoNE;OkXtmj;t^8$#;eXu$27uP1$|MKzng&zhmI(Q7@vc_$TOB0J;#;t?s3Gpmg$S2C(4HotIXZg z;9(-hWR#ctFz9A7nSN=w)h!9SAmlxtokxnYONFlJDs)7w+}u-vH-Q*aAm6(^MvSS@ z6(vJg#PmGcY|v7x3|i=lR7_XYRc&ya%GT5wW=#$;8lWrsZTwiXwtyI;kniRv$C#PU zC=&Xj+cVP5ngvW}lxAi+qSj|do9%icXGu@=C*SWrsy?$5<1x+zx^DlDx3l54(h1-7 zRl-iC!1{oLt&doa!^ZhL&V?Ka8`8m8yFD`=cBw~W$^IN0WTkjA7i*Kuf@P$966~Bg z0j8GRd5PF7q_#v3Ci@%ltz+1J#j{fzlp4dDk$JJ&k-4$#8^9Mphv`PxbNxV)X~6!& z2AeSOEgbID&LOg!;%?KGTl=({9EH$9QhR=IXknkvRVOO$-mwBh`x zcOJ2R;^WdOpL5lIin(SvaY^|ZFzEQTE(#^)43csP?>qclJDK46vlMjUft7Luaee~6 zPN7KIitv8ZyW=q^B?VeeaTu{7P|gM0vXFWvXj(lMVuNgMXN z{+H9{_TNZbhkV+mjlIkD=kSbn!QflBN%hR$ac!N#o!N(rl~F~a@(hE$kGuT71U!~ZVfU^%5qapi`Fu3f0&>ePukyfJej0L=-&{k7% zL4MQndH33?BfXAjVUq-Ng|hEQN7`BX8Lrr#@XW?c_Fi8aZ*0IArQ%4Z;I1R{;RYl2 znbpWggA)D8f$t>bW661x9pavMwSSjf?1LTPsyy)>dEgq5heoC5UYRUaTxYcEwDD%S z99UZ5W3`WcC!Reso%9lXpWW^!5(Iw?=GWm5zYf2<-)HYGexKd$-y)ac67l=&4A$kY zuScEueRc-x3_89deG~gWJNg8xXU5~EPu-pJ8^L zx(mTLQ&@?7C@d{U73II-U8Hj%kl9Quw{W+=yW-u~(tN>He6Lt`B(83XbNQBKN8`>R z-cHy(x|c4CGe?+Owkk|jA*H2p_4&{Xm5`S6rOs75A7J*8gsS=tq@~VPCHkk-C1R`q z4UsE-NoKU$Q>LY-0w@0n9cg+P+{PW41BbE|zD2JxsEV9mkxfZ%s6+IWn+8dWKKX zKd}T&xp!jyac+6AGnva{Y;dfjNFm;;_E|Ev5p~VtDWLCU^}ymz z0RI+E>>x+{dZm8~vni^&av6C_HJ_q4RbwAHF0D2>Uw=T4d3&fdZ!VR z$AL$51Ud8r^wq^Hkvioy|Am4T3IAHJ3p(q1;p6z~QtS&|} zd17&JhPlnyCx$6uFO}pA1LTM(F%KB;IZ_>h^mK%S^lJ@Bvm=fLW0+`tDg?*h1G*Yy|8jr|6foKV!M<2%PLo#o3A9-@4zN|@+TovI2!(^V?XSo z|Nq%y6WQ7Hu*Ht|g#A?qTQFn-%pJ@gEYHd3F`uwLv_#2#REcG)Qu617Zy`G?*iQ9Zw3gAZlO_+;SynxiZe86qeQyeErO8=dmQ>h5uN=jC zej%}pg55KDlZRzA?4Zf}wU!jvG0U*-OoN@WOz&<{Y=mV+2#3wD>{Xp59d@}i z*aOQx@UqliDYTAR0RP2)?iLeldmaIq*7W_)tgkwiYSABuZl^ZM0-cAYYOa@M_Tl37 zRprD|R<(FNo1+>}C0pRPXyH$#Sj^k{n|qPlU!8h5#yul$3wT!vk#u5=CHOXDsnRfc+8D(E~KkCJjW&R>cm)k(QIv3Y9J zN!8;-KqGu$-64zq;4~-7IMo{HT~9zJKB39i11_C0f_a0T7sBXW z=}W4UfnS;T$2gd00KY#@{hO)gx15%&|GlQPN&6l~lU*5z!d|Y^@554-YQRXt} zP%i@B8#>>2lw+IWL&@WutCnjcQq1*;$G(?x`CV7@I#h&w-oc-Oq54CH^n^>0O&nhP1u<|&wq>b*@ZlN20yMVrqnI`em)aWUs$om=JF z&%9OHsW}Sz$8(tTwxYe)_w+QY2=avXe*rd&#=bgpJ=(rFPof{3!*w3xu=tKR=kR>@ z9nV`pgVAB(^*xi#dr?M>ebdapqFk<{oX+v4mUQq|ao&73$^&OO)m$E&VrG72SBIvX zua&x)qoJp*0F7&C7uQg3M^MHWU^CKlI(`l3QB%oz)?5L+mx8M~|Gc{yHWTPPbUaJ@ zD&UD}LfRbDUf*-LxlT&|mAxa(=ka_MI$oBJ#=Z}m13BpB-z8@FhSXena-_KddW$Q2 zIrC-k@dp1S@XZ5GXFO-(Y6LtII@aIQoXtV7pZu2LV!ng&V);(bp=0a9l;zRT_nyQ3 zJg#G~KO8SUP4i%r$S*lf^{0+)CCJetT=Ene{upFNoCn3{LY`{e zr83vQ>1tl3?84WhJ&JXY@{`M%y*GFc*JJ z9k8vqJYo3A_XSxvMsMc)jEDdz` ztvS}@);ZSM9)Nek1)chA=-X#?CdOH~63pv_5W~6~V%1 zT6yU5XZEq{@bdzQaZT%3tNv6fpFaqC{%HXNW-|5{|NN@ zGlK?b;J-REff#cq!;cd_tNGIbZ_TvkDd0a1 zf6`+6eh##=b-1vWzhD2r_HGEJsy~-Ik1{_zAM>3`(sCoMGtR1W7QflHvy_}+a+0V| zP-5J`J7mIg;!NNh`9!Sw*C%7|$#C5u!v%|beVDA?Foi2$gK;GVYocWPnn>%Y1C!T1 z4WP&7{V2>61xybMT+HPuDGvHFhAaAd0+02lI?z6ci}`!9clIpHj1@>DYf}t^}6g`3cIUsWwZfvq$kG_^{ws2kzjY@DDTl_dR-=GGkKb&;VvH*2QWEp znM`NQV7TtX`?K^g9cz1WBv`xY!C3Tn(&I=srXxOW)5hL$iRs7KeR{LFFTK=KVy(t|k76}lRA``UnoF#Ei^J)qVA8U$ z(2ZV{gQo`25WgkWam538|2dM$@e&c#l-{}KrOQ1bXUJnm~&s-0x zn;b%$alRJy|jIW*2*yMcpL;NZu89h#g~;d3f#KB2 zR53O`K7vLs?m~MZUzVr{_z6VNF@uaZN z;uUHil#46E-C%;Hb90~r1Ztw;kWTgX5IAX`6hqYPIyo02Y#V8*a?BlY=QlVSISb*P#}-V zuocFGF7`U;N5WR9Q*bGed9|uIPM-t#jkJ+wT{yIaut7FIIfAWIQp}t><@St+%^s0T z{hisv&8l!Gz5P3#_B{=e;g};(FKU!muNaeF-9sDLCoWzeJuE@LdfIAjXk?<^oV!|k z9M287tEaEl>ho4>6Q|j+$zLR1_ zhFdSl1%5h%XR#(j8wdOU)N-vyI5GAqR%Nh#DZPua$1$4u4Y+0`BaO`Gpl`8XhL?#L z=T7UAF&pxSe%c!CoFdN*k70<9^szl6qmZ7_lYBGW(jk9%z#qNHDMN)a@k~YhX+9ac zO!!O`xn*b{BgW%iYJ+A1Bt2APWR1qfS&y(@Ew zxYtDd=H^j0cB(L5O6R;P73Go8UylqT-a|RqK$HrDe$VRxOpZ{Q6wQ$sqsKX^Q`C@I z^w3ELr;=*e{;O4sFmFS*04YN3=L5qd=`jTvtLh3p0M;AKPN66Y&LF0xI3sjP967WM zS7{tsq7dy4#}vV1x4<67@Yy)e;)wW||Bktkv0IKP+YeK88@pwzbGuCiJGe9oWLpQI7-a6Mo_bkhC3t-!K#Do4LB@gjrefCI6Kc9`gKlc6S zokcn72-`~{>Ezk`y#V!h7&u#Tm+eAKo-_m27zQ~Jw!?hr;vMBfw$@`fxeoj~(#5xj z(^ePX06r}3jF+7LROsWG-8IEQAJ6cZEmOAfu5l=rc%+GaBlWlO!ytnu-u=#S>of10 zZ)w^7Zv|uvrFbs%z&ds=GR_e|`(}1dRt`_0T-ZLTCAiz|lwCyl62O=(Q?^@*_E)s^ z^U#&wNJ|921kh*ajDNHfba4Lk2j-jLcOy;FAuqO{XTHSiyrjFf^I>$6rnCgmU^I`4 zG=HO)>`6hAR zCkkJ>x&K8}5|m|L5=BEPnY8!k90`O%Mi&`+Hd z{PPc?{1CUyS4XcQZVy}@E*|`DCog`~L+*4g$~w89mTI9lOnq_s`ZSc^dB_jbS|@Jk z1z+yDs4w{a)Zj#rlwEON^bGigf=55h_oJNLdHAHJY~@_|@<8||fp!AYVR6#%RgfKq z1J_H5aLo1jkR9Ngn{pnw!yp$hyjspl%Y2H;rmf(&g5Gk3F&ShT!e&3{* zY382$v}?s57KN9ZKhmkiY6!bKoqWIE>e@vsWeEpL6dXOZpvW{Vz`O z#8n3TD&WJP-+=v^ckQfq@v-+W3fJGkXY>E>o`KD`+w3##u`?kzVwfqH^<%bPh|Y}9 z-CNj$_R%e=*1w;a8-+F1Nwlvp^uV4hl4uv0|neIsq zkzVv{-U@z15Jx%m?R{gqP$r8v8kF=a=;y1aDe1=PFY*_>u+JWG%vb|7>fNY5cR8Py z>P180k7vg(>#Ti>cutsiA(utra>KU~-h%H=aEtPKjuXke3|nh&z^`IImM-UN>}l8@ zJ#*?~y+Tg~L@PYC!9&R0GWe6~KsPw2Pb`ih^SOqy0K8v5{8F2+Cy<3j=gy8j4PVxw zxqV}s@LdI=Re601_%pv817QF1CD-dgrwU=UxY&0vc0q?FAf1VK?C0j^1IE&Q4&S}7 z=h6N>c>~V7Pr=wA`#NYG`XC#h#6G(PeHM5H;us?9#P0P~hSz<0LX{q}133quG0C^f z5DUADQf(nC6jd6dsK57VPsU?@LBC1!G%M5NY|IqL%RiU#9P$2I#J>@QN&cZ!bF(Zpl(c7;>retf@WYtadMM&Y#?`v@xEDLM@t z9mU#z^NymUw5kZ_Mku^1W5NGZh3jUF|CKw4&*l)MrE^Ia>Ra*^^(oQPCa!a(dr1xU zV)$G3IM>bacdkq) zy3L{B6$L)bR;H`{XhQ^eMB&>fdhnS`6q}PdmrCr1+zgvyW%Qu(%~v^(N@ja2gY8UL zTeBe__o`F18<-3X+oSmXm*2+6oAt2aB_k}dpNg(NhB1qC=TG9@1D8gJeaNt5^ulv4 z>;oR%iP)}FkkE2}ncZ12hsY8UL2@jF}soS}8 z+f#+qhqeg|hXj)`=6MnmaD*JVkxG_6ujf9z;VnF4 zd0LpfbQoFuLN3WT^BU(oe=>1;JI+=)c$VZKvu_LYo~B$wFAFJAHF0MzH|0ezN9uiyS;Ck`Z{e%_ zLqg((ZF4uq9O2G>b1pQ}lLOQpT3wx=Xpxar^#ZIgjrhR^g=x>i8CoO4$ zN1rAkeN+?q;B1QEwYG&sq^AlWW-TP+ezcHRzCO(z{cOANLPDyr>zqzln?9LK{r4~A zldbp~MV*z~6)c3v9xGgFA@AYZpn#tl(}v(2az}53~)x z{4dh`*_+(9XTB%hXZZ**U3QT7&W<1ryR*qJO@lbE*?WD2V)rjo~=TV%^A{E+P5 zGeo$p&mu1^GjQ2=ej_iwIMmj(VhHIT`wHp(<_E%aEB11w#6axL)UmyCjiuuN2q@zd4c2jQO|CeRmh(qh5JJ)20!^_Oc@3^(u}G&|f6wLqf=! z*^hJ88NSIZf`$^l4s(+AP-*>lVHu{j3ich%9#f`%AL%t_VC!Q4s^Uk(mKK~LtPX3b%JNgaj zJD`?}_-zNN4Ro=+Ha?tu6SH0@dgd!3D=t{5bay4+-ke~&6Bb7XpREv9Op7IT-Mwua zOpPRYtP#T7~UZ(-PE?3Z+$L&eEA4>J$^HZexcUASY;Uc&0$SA>F%PUMlaD?-nqqlAHDKjWV3 z{FE@Qz7zLYKq7HIHbDs4xklJ@E{Q141PZ-w?&Q9^;w5ym=GxX?{hlmIziFFo^B_Mw z`62fo^>wm7^$VfkRE{uo;mc&*@MseD<7{#$*wl8Xq z2oFuYV+(gaA^hXfmxZNiUCE3Ym9{Hi%@)2MIGi+H>q3rf`d)}Q_XDXH_Sv2qyFxIY z*~9VmE68iR``C`4O;5P>6Bjh&U*!8AcG)&v>P24s(ckuM?hNu=*5_o?(hr3%i6G~ZPUWZ$MbrSoVVVvY2P7aOw#+pr1y2ga2E~vbVIqIQqSk&&+Zbw zsX9Z_OWq*2esZ$C`EH@`NYF{!t_QCPT75HD5II0tx96zsh1bran{#wGIH)aS6lGNnKC;AHAj`<5=XD12|?Jg5C&TkV^mc2!m zM0k-WSHC2DRrorW_Ba$aV_&r$UG}>Wc_LN#y||9NI%SCMGuLxM_OPR*?7dfoQtyj` zVTp~z{QDu>^qM5H)>SLKxBW{J{PaJ_ieJjf={xnpqhG!wJnwYd*78*{+0kt_SE>FF z`RSQZ?y+S7!YJCCJIV(M57vz)tGsTJg2mlQ+U*a7>1VXX-*(4FvloQ#W_~U>zx{@-*U}HjrLYY`k6UYnq_s}MjC_IIdc=tg>}4Q| zZr6y@gG0%L(cxt7oBPOzBMu9nzP4R>K=l?G72-zXhbqa-qe6tYY}2_PzjqSGce8Qp z_2Yy!C!1^qYrTYnzpNympDrQ8dVAPLW)C4_;`{`QOSqtH2_Ru#&Lo|e4ibFB&IyeV z#R?C6<3gSNU= zb>DYO@SYyPW%^ALhWq|NHu6sk-+g(BtFIBrV&evK!F4kk*m(n&#GNB!pN+O<#Jwt% zCz(m;j3)944vtvh?Iaw?Qw#4d%^=~sf967GB$0n_eU{ubyhgfj%C_z3wT_%xk6X> zLh@2}GB;s;t?=f*zO!xZG(mW0Y8Mi`FouljlgGI!T*>hCh>1hU}# z>*VRl%Sim?M(*5sweZ>bXSj)HA0%^DPT(H7Q6u!zMsQ0D-Xjy|cyiPFoD@n<_O_)7 z-wOjqb`nYq(}e53CrHHwSCZTRGD(a1SjahXn%n28Bhx+}EleI&L-f_xxv;~9B#d?u zJ{x$5Xp6RSEw5DzPNmVr_wm`nLyIqR!;ggv)zQ_$?5n;)&;I_xl&`i4Gm5-tm#!p9Rcg~vCo zAa7U9C5=B3-@>*r zZwN{LW*c3cCIr!mHrHY=vLQZ%>)Y5$0tR#Fv=(u z4U(poLQ)x_B%`9DT^d9xAqwaH?q9g~o_n78zMOXCbVGE(O1@iv75$Jf;;nCdsB_?L z8rqsh&2^91D3uAg{_ZIkbNP?dx>pM2LVGgk{)oH`Pk5}H&BmpFhk23=AKx|+BhI+8 z#2Y!3QeZ%T*W}^U(WlTKYe`CBeXRDv4lI3imE5{Mz$-Hdc;taEr$6IvR1l1xJ)-Os zeOlFY9BT*mQ;yCu?CC8*-jvf+E!~4#6-@2kh zMo}VoTzwTc8i2;3Q%JtR8i}#fA+>c7i_LL>rJNr=_q3w_uq1l8BZEmh5Dl1l9J{101qSrlkwT9iYKmka6Ez&mHW<>=J}J5| zIs~fvK`=MC$fW=1VDcj=WS2iD_x2d}OGw$rY^mYL{7i6l=rA6?cOq7eZ(#@A?vn0x zdscpKC|&)S$mqBbmJ?sdP1J|bzroi9*Z2($@!G`Z+!>GEC!_hXyfT_5yC3grq^W#p zCEqFPf=>m$)R16LUkx{t-WhXT$$!WqMySz<2ToY$UqXFD#;E=D!kOQ@P^=VGl?PnU0*! z3hMWPml%_n>3916BL(BOI?<~`NAR#MAGdc5WmVHHDSTZdzI>icuQM|#|Pwrx2FMbLMUmJV3}Dukh9oers}Rh`S)!wtvMRXhI;(1S_hPl{N%IK1|xNPJ6+L9 z#*r28$kcEEov^j!%?JJQO2w7mT)dPvsEwj;qra2)@WK3e)pv>+&$y|}H}n?v()^Jw zRCF~8*GDk~*d4~EYc3>@5Jb-Hgjjq$TVs8PR9DMDcf?$rX}Ssnk+US;DNF_`(V)AJ za#-?|G#8G=7~o zS9mfJ{XULd_QiSZNlHY?ze%)5L7tnpY{l!5$Eke&5o#Fw84U%V_;=?HyRgdz9hc>( zyh@)&%S-dqix=Zkz<+3~wIMd9oGw29h#&4^9LaB>ws1Nz5~m+`FL3n4W9(`l9DY9& z7EcaxU+FN4{P2-}iLRyIi%z_0yAjnJ_VOFc>8y z^{5o)h~2@frRwYipMbC{DlDK`P5xBPJRakA;dCnqy<}EwFQI2M$@<*3+ZOu3#RU(he1;~|G|G!!uiMK zaX^Z09=?N<8_RHd;3P6po`9(l;v~}@j=)#;OwVaCjaIPZr^BC-dBX>aN|wj<3>mKE zB0}QzQmpKO5xKa3V#6zTlKXsjK3>oXRBa3>pmGXX=`15@AtaQxc^zB&%M#K4%b+{| zI|aYAq;UhMlC_#KyIdh?TiNqSrg|t;mi2Op5PcdhqYuUPl~DXoUTBbXjno3T~l zGAj&b^m^G(-Yrs1ivlai>aH!GeEPyIHix53`4x95`$pYv4Xk3~Rb2NBrs36Q*d)E2 z>y0*~`=SACgB2$mn}_7H(Uw!hvoBG>r|n0;4ssw8b}W2(#$bs zKL(Akgxn@~tPCAPrK|GrXlMef_&E(?ZQBuZb_TsO9S>_O6PT}m3)84>SkxY4yKa7f z+@wY>JJ}N-KRK~Y#@=|d>L<-TcaWCr6hKRVG2Qh|)QD4FbG^Gz= zRxt}<>zK?orihYnKqmS9JPRvR56XFQj~doW(WC9Q7*Xg%RhNDvIn#|={4{WLUOwyp zqk)PcJJ_^mwg{X2gQqlZA@Q$L^l#HR@|Sk_|a_kn}_w=~rJMmXFqE-`?D(CsnyDOymH)Sg+C~yN<%G@7<3N$6F;zLRekt$ zZ6ynN@Eld?7W_c)GCFwk%wFB}io}=PhG$C`-qY)r@5{_Lw@|*H9rxnRAf$oKGKiUgxF0 zi|EvfH1@#d0%=>!iOSnsjvA za?(F`gS*lWc>8}M@%5SLKT&|wg{8usc80r3$kD|7BM_#|QbqR{*7hKY3T0ckgMgzd z>%NiZMSnbUUdIE?O6Z(U2*yZQlf~>G%=Y10@J)kxrNd2Hl`6@jpFX3nrst8La)62= zPVyGhI-F8j&0_1`QQ3V_+S@Uo6eoMJeCoiQDs7zJnoA!xbdb@CFgp8SBpdEG7@kLz z$!KXLlE0t9SJ_@1IhW7Nj|9PDCb2C(Yw=(CWQ>};4l|Tex%Am8vJe|c&Bg;^t>w)Z zPnwFsPH$O^)o~h>EyWK_NTlDV!^rwaH*#FOaq#yS+M8O$qK~d5bGcZSt`kI^-)`{Y z!UD9cJk6DQ?dh@l75L`fgz?{SZgRhlZmjx?iwivvK8 zFS3FICJ32ujh9GG!d{XGP|+)^g7xC z23^4@x#kSD_yMHuJcO^(Y^F>3P4F>4Njo2wVTxTV70$ZNcD!-H!DW|8YU?;M3E$3Y z-2&+R!4mrG)KAl1>*KVqCk@U#%C@Yr!id)GynERR;XZ5TL2i5KLIp9eTs^9Bod+hF z3Z>AC?6w}B_1zW)`w zA_DQ;>KR{J^JlZ;(698QP1VdtKRx0oQ2o zYbBB>UQNbFomhEb6pRO#@iPJsN|~3+Re$-Q@_q%*XYWM={|yT6CaFAq3{sniJek|P z_BO~kdNi)z|4s|b9@Cap+OU;Y!Oy;0j7?2|%g`qzdF(43u1+Vd4RdijcQf)Xma-kw zeQA(mKD_cGX``(d`8E|pykkEpjNXZq6cw&EZ#Dh7mrZ67jdZ)Ok+lijTYtekp1C+1 zuCMfQuj?Nz8c~g>%QWfplw>xirUj+@KGWzWpD0e_8S`xsCG}T!Slt;wp^-JbDmpVE+X8o6*ApyMr|5} zzf$Is!ynO)Y4do1Faogqjwp}F*GByD|48nFCWUs_z)kG}He6O@0UbfG+y0x~A0mP! zCwuUAhBPFLud&qeIrK)*U1yfXP!_*RDTmbYWOqG(wL(kK|7Nmk<;O65(}Op8CCI&Y zjlUQ8%gLq#=+9n)hDp|ZZDI_xG}0mYd--Nc*=wQrqUTfyP-ha&HVjRc=JLv;EkN`dF&l`-gQodSJ;QD=gX5 zOcxgpgQ<2SZ7lzb_3sk#yY3ltI?N!K;)W?PxwODeg@T15ylvquwqW%Z9D89zUjBl{ zJ~;z*XC6bO{vA#%|A>sunfz$jZDb#nXL{F1q3_QfrZ~SDAFj=YREGo9Le4TX(GFDK zwdKpC*FxcE8Py-YjJO4pVC!WDC%MyAOmV@T0A;fR?vgV9tOtZbt zZ_Zi|TZ?t<-nS!kPkfQEo4y#sGh^tNpi5qB+s<^@Jt|j?V}U_S=}J#E#>9G{;>;1Y zY~>cbxRS}jw$H+){h~BOq>HMkpKdN$NvnUZW&LRqG)<+MdguJ1a9L&M5w(bH<<^l^ z$7P(%b)y4*$s}1(#owEk(O=O;Fc&F?$hf<-^x-U;BsB(Jfoo}(+aUJXAOLyk>NLve zB0g=N&zh7|;HRiaovL$@B*8H{Sim7qx@g5ODRj0TrwkQGBwGKW!z+K|```<_xA`*F zBxUeFXX0qs^?MYnkW81aj_2R)w^6;cBa^872)n2|{7EqAvCSSb33xymy2rTfJzc0& zPsZQ0E67{l#yV#PN>%Xrts&5aiBX@s@&o6?bEQmU>E<_@`^;Xo-;-3IjET~OG!`UVSY59Mb2t~g}yI$d;Jhc z3c4sGcRler16Y5;18nq?#ES#*)HnG)*N-Zu(v_>IL|Pw1MoO?ZMh3LC^bsBVZbzMg zZuIQ%XF4@Zi{xtE>EbPI-aTw0bYaEhCdrc%Gb790AF1Gq7JC%ijpE`3B%P)VleG~{ z(cm3^gtbFT*$7>p>b%)|I{iLm#*X^9AeBF21HTxPL;6SdXF?Xd`po#o?Bg)Fvl!{e zbFf3>B)6aV0d?&Q*=U>9!ouTd_zfQeG4=U0$|L~k)3mTL&XpQJe5OJA@#OAA!gtk+ z{y{5QRqZ{L%NmfpM>_6Xy}`lG*)%gRi7VxV!)W_h_(bR9aH%y7H=0c^A~#^=LV>d! ze8^ShgAxAz33kdzK)e4PwflUb-RWo9Nb&6mob13mzbVn>sxD@gIG6f1jbszj7t;bh z5A`39AzsOuOWe1l76Vlj{V+%2C1E?zv=uZ=Cz|h+G(|#z8!exAk7icq;XtA?w(h;p z#%-8F_sn8hOZQjO&C)<}!FI9}YiG~g&eJ-TA!L7JFPZ)~nI`-=K&uxH#p2ptIvifa z&%eo}V+*|4tbTFYxqkwiyZIX}(hDVxRiZR$+!d6K+li{aVx2A{5!s9uNh75n9Tk0md<%Pu<}){XkV7VpRiK$86|iO zRi;=bXaEgw&f%7ZH*2>oL{(}nIkrkudbk;1`J$JUb$vQTSVE0!zK9{CCQam4`FiYx^mVmRe4yNDa}e#12;lZ;0Xg`(mk7IgJG z-Tky5Yg@vwDHYN zs<1nQ8S+D+KPD9V-Yf8GZ3I8-I|eKFr|=JoT67EV*wo|S@cHj>mc4#3944)z-oX2~ zQBuuThp(X1y($zjWd}S~3(tPjB9d**pv4~fba`_gTjf@cGWTBYUnWms3um+KD=JBR z*jD;`IiCKNIFj}{V`@I?fZLXTNyB+6kFDK6Gue2OkBz5Tn3?hO2aX%MmK?G^O*hN4ZQu zEdIQk&3*OkXlJt_-<~ud?-W&V@b)H}`e{5%sgS|qo9=vyuQWA1Tnsb4%ebSshmC#M zNJT{f)c1KhLKXz#iDoHrZ#|ll+D#K{pTS{=6Zy3Ep{2cnroS)anHgntS1FD+S{=kG zt3+z5PeI&p753)KOZxlY1g;kyhEEUFx$$o^TKsM;OHaQ=(W<&QtXzsENo9mLMQF^O z%~r*1fY{A*Bx#UO6SWeU^sI19c<=y$d0zPR%(_3@f3py7ysPSj?JIJO#W`49zwlu+4X2|3DGnm!~oNmT(kh9AUE2 zcPT@86PZ>g(eF#^P|O`LP<YYlcs!?U=)@MfBFIn)Q@zhpcH8%Q|OE zhjt3yQ-2+$z8nbc(Cb*0GMl;_4C$-EWqvK74+^N#zvbh&Rh+A{y6x|yADX+BKmTLL(D-HugVz1(@raY(+s zKpAuXqIFv@TXFms6|bGg1`idZ%a-w|s!S!nM*|p2fct57EWmGvps#;tS-X<)C0q?> zMcqj|(S%ir3%XIID0`d0F?(P!casp@u>;wZ-Eam98Lm9b-Bi%uZsOP4#~A?9>wn|2`x|obyhN>2E17>?f$+WuVA#2rWHd7mPV2qNT*L>L(sSu( z;1D|Y=oSs#U5Jo@N~qbC%i1I|Nk8inL<+O%xML%;y4D76BToyj79dQw23jl5(LKjL zxC&?3-P;F=D=p~2O$GMpUMfn=oZ0fIeY8t7n5$S#g^A97{%g{8I$Bl7cJ;qUVcHtL zV7>&JMLSq)MJk@#S2LCNE=-z#g~?>vB4U3YGd~u9cauBW+U}94=#gRaD--c5$Be7I z4In|uB0rZnLny)f+ zp>-tp+Mz*yp>8}eN)=N2d#F)G9OOQh!tRC94a02amo*wQckE=Br;da{_*x-pYdbbGmdN8NEY%> z1(TmqtC2jLsWlq^_O#)WnK(hb>_j z?iON?n-h8e`GryC3AEVVhkot2kBEj#I9D(g5n8h;)U2C%ifkc^l_e}ez(IMJ4$%-P zDV%y@#^zaDp&N;GG0zizc4091mkd*%M+h1_4~@F>cw0^@&B%I+i+{XH=fpmKoJAu^ zC4oQV7wONy6UgOWv}wa)WJ)b0?jwrWiW%_x8^ot;7*T}Z2E0n>By*+PyIktC4FXw%S&(&sQtPi8@^Z;XaoSxLe@!3H z?SlE&ldI9*X3O>p|MsPglNf6i!LG1$dfeGUyuTc|Uk_v1A4^s+X(;Ymyu>RZH@LKJ zI-`b3l&Sodz7?5LLYXBk@UFw0gGIC`TNm@Qq`5WLM`O5* zct@!+3j9(2Wa=CfM9KL=-t4mmKT+-olSe{(rF1;*RE?mIA)gS?aSZ3hp3$)NcX)7C zF-h8IkxF?JR$qUC^!AGw=ctDKd@&l~--pmo@t4NHZ#771^`+iQReT&;LJyA_v)k8i&`(Wi zmKpn&L`D`f>jf?pc*2BFRg=c|kZtr&T^zDW%ecy{-%T&`PmuYD&8Sw0f?9qV(362(_kQ7u{UONv z3qDAC2x@g1ZPxw-8O!O^bR>qo%T1&!QFEY~9D`5YJK2%3Vo(zsLmD!jR5j@n_YkH- z4ga(Y7saL{&MJ_#oS2FF5#NbRjKVK}%+^XfTkd>0+%BE!$+PHyj^qYilPv>CwfzLE&=V7jJw4eNydbn6$ zA_eR_LFcX~LpAjoZLL2`MHW|Z_R)13#&4IOCll*%Hf`$}B*Zu}9ftyZo1O$+%@Z`_ zxiR|7uZN<|Ic^DMD(ExjdqURJ7l)I4!|~aqGgFRleLDoX zhjU@=_YBE-xA>c(ouupT&DB3Ig7N_=K5(-exn};v7O&^%2`oeL!A-b0_8N9SQHG34 zGM!%LjjUBi_(f@NyloA~l!zU1vn6wH;qiMB zF23<3PG$@z{qH&CJj#RKE__R7>lxRrMGy~SqnPn5N;3|&pJ zupK^y+*XYuzh&((=67(n!;vX3Jwe~zeKIGl+y~%pkK%V$i1^*+FNKtz)#lT zmP#WE{n%^mE`0pFou+n5Qrv;F?53+cqG!ePu5Ei^x9BmG`ER+9%ThzEk1b6*G>0cz z2)MXh3i^=?amsN858WG19nYg6RUS?!H#GAPT6JU*@(4yQ>NIuMJ0>2yhD;(4b8(6F z2rfOt!m1ZjC_zPy8f z(^ulcCRcP9S!?PrQHSW=!1JuUf3%vc=!Yl!NVHPC)3Xi zZ`yZO7ReqxJYd)~in|tr*ROWsm&`P_W&|3hPmoKOXF^Kyy35AC~;Q0Q_6fiG~ zX&)Iu5epZvd8&m-emjxuPA5>R-7~VkmJbvC9(wI$LjC+K&nPx0BNJ5&+N(=4ocN2S zQnbE)AI<1ngKtMw(RIleb>H?PILsOq*ADX@l~ZV+-p3X1jz_j@8&yrYPNjcZ*r~-Q zX#G+#ZmxU)qfV>xd>V^i5(RA8{5=@?%7T=q3wSAV30t~hH5F;B8bII#?6gL;S50UugFm8Bkbk}8Lr{;hSvf-0n4?*i^QD{thgVTd+`O5hT&~MtzTpr|s z=kH|6eJNyq^&dlOY@qlqL|_ghnwVi7&6dPQ$WCcwtWg3W4M06z2u+2k!D z*Ze=+aPK^Px^ti1UExTj$#FE-{x-QA#~~<2ox+FyM`6vT6m-gpFKVAj=8E%aUu*|1 zE$0{#AmA6<_5AylQ&^U%%QM^yX~g1bDA=kJ(8o7mn)p<_04?VKL;a~-;-fvCwHw1d#`)0Aky;e`d?8*ZJxA%` z4^T)Er_e>_q`4rH0<|xY(!LPtybwWUnRgEaoJaR+zA=f%E%dE;7xo?~M#Pu(7$cTRk*o_v7Z<_l*Ber)^B4HY zU?w|93`RPF$0y{dJr2#G)d9ol&Gr-?EVU9j!r8#gMIttW}!x7dIoJ1Oe%Z@ThwC+*<{w0`k_$V}PEEQ9`#&X7n9 zI2A{S{`-iYcMOuU6KU49_0S6GWq)*UqG+lJ89JP$C)Y-?7EN7ppL>D({1=O5X(^ET zcMw~wwy^%%jj-HSMAJRAAgSYmYwF+VYsx^n`H+a|c=Lt_ZP@wmBL&IYqkrOBrUFU0 zn?|s)o2O89g^tko@r1Tn5)Jmu!l)c^{_j+;;7=-ZgHF)z?RsR>cm~;G#0JHd;?;>l zwx#kJyelnG7g7%?`D9+;P=Q%a0sLKt3oO-jne&ye5MP=_bCw7=z~TWly~?0jqGu_^ zrksA{24kYyWokJj%_r?Ffn;we`F#|Hhu;UbR>vA0-cw1`VKG+h6EN3-vA8hWm_NSu zkxtyvMpan`wO%aeA}6xpoRP~Wh)<@Qy9}YaF^oJW3w@F(Uy{6ahBbZ~hiT3?DB*81 ztqOe2z4~RLzrKUjwvMKm#i?Xt&`E`38);wR6Os$GWF1$u$acpTID8m@=FjyAH*=-c zjUpy25> z_EVz^Bg}gFnQj$&x>b&1c{tXF0<-lFr?Kfv3l}QoHX5n&gp6 z&-baqeTNqD>msb~;vK3yxq#Q-K1C&4=h1|ze`r~yI(t*P14cK@aX~=?jr%`x*$F@B z!?P#6b5t9us$zLkR2{14#IR>2*J+Y|X`e~ng}{-sohZVV|rO#i4`;8br=_xK$@ ze0>x(4YI)ll`J@k`La*rPE*BlAIx?=Lbt5d5MpYJm8xwt>*`{IwR`SUHB zcE6ne$nC>};fBoHgrUJV6=L;;r0cmF3GdA)BC(L^3X_YL@0!C>OvCa1_!^2Qg`S|~j4 z;Au$f8_Hz^C!%Y4201w_MCXGHw&iC$Jy7{YLB`pXDn5gP-tEEJ1~-HhMNoOk1vc_d z6;h{cA(FiV*M@7XsKK1{2IkPCWt&Jf=@QP5b0^L3xA^GgCov-+kN+zbr6MPPHY=r- zBKPDX>`wyJ{iTFFlRknA?D)kiqSSfrHI7|AMO!Zw@IlKH@b_vQb*-C6(o5!(e7!lo z-W^7-U%r9lj9xxz^+)*co5*fC0nRRmn9sn!biwNy+q*0f8>WAt&JQj0veJvkxbL8Q zhd)DU-$&>U)+C>k$C1*g%hRLs(AMyQ_tdOFwzwNONP_B>{X#F2vMT|8aePA*<==!SnARk{|Uy;~Ol)CZCC zE@c|?GMsLm%pj=&A}qw)g#M1Y%Jj6y;k?}_+|U3Ko##{N(#fyv;p3AyVCcav{TGOcPz`!|=qI`kuHup# zM$u7^&!nLK5Q=ZEP=rq$GDQ{H((MW)w`nb9wz%Mwt|fQ+Amo<1SMad?hDb>3pyqvc zl-Hv}cZ~=OUf-d))9wiQzbkCz8Vf`!NYk!2Mo50vLgCY9qB(sH#&kWw=~fG7@JI#D z?ps)MlQ%pTFQEa2$>4Is`GuUSf@h8@> z@Gwo3+6q|@Pr4x*!efVdQ^eDWxMq10gJdVNnCX8YGN*@7m4^jsAK2^m0a%cGlDpp* zqvy_^lq2^NA7$RdaNS-=`gzgC7t0Z7Y(%?$GLY6?~w}ExIh^Vg)4`d!qDNKyx@{eHh6to3@kF=o@@s|2q6$lS&#U0|~cX zpfB{|mkxf-(tI0mZ?P{`4z)(X=63YcYSAgoE4-6zr+mQS z+(jf3|BWxZkwO#SXOh(Ozxe0y9Yr1sVE@RH)SWsZfA~8+*PM#Sg4eW0$im*3)W&Bl z`3E_rei9N*h%VpGl*+#1`_wJ`>&E9)E)m7cZ9J*UdL%!S(uKt5-gGWMi8{mb*}FY6 z(X}X!4-n}QHkoGdjF)4D4s->dJai`E>R}!&bC6;Tix3qy6ybjB*!y{Zp}gA{dut2u zFL5o`xFrQ?L1&^lmSm^x&#hne(ULw_a?^TC2XD{k+ctegNcmc(xk?3_3qxU67L66J zvgn8DER2@Bi6e*Vpq4O$ePl~$c!97Lv1}UoYZW75$2!by5C%?a3m#3pJM$TKjTWWN z!jl!};W_sqn>Je*+WlEw2=yvZues1+YdH?>b&UkeH*`6@16Rka!fmIg{6v#2D8Ua` z2RoA6^2c=ZX(72NCz4qbgJaPywpyA)GVniscJUINxRpz5BO}Olb1ZI@22rVRI9-fb zNHK1o_}_{Md>gI^bJY{Lb;A(>#$hzybt4Oq?V`&{%UDPH49pALO;;3k=xLWf->mTh zAy#wwd)ZN>C!)u8%bAkGxKv~-56AVIDl!_#sP4u--d<{k9nbstW;t0Z3!lWApZ}o& z_Y?Sz1tJ)Jd?pHZtP!-BFLWVI3vRzdXw&>A9DJj}pS^U2_^;J$$saE)+Y`q8y$!M6 zWIj2!MUjlG4RN%qi z61bWDS?oElgfGMHkh)_m40ti6iN|2kmtdN;^d4{bsKWQH34FE6U_`#u#nDQ4$k(~B zAjb|Iw9Y`7$un#zaKyckYnW{rhu^nGQ(nz`uCRDGzMl<5Yx8SLDV8PYn@zOAL7pl8 z6sOU~0uM_bf*w~l$b4Fa^6p^z&qdn=WzKP5HieZ-w3FlXBc+9GtNw=}Xcdoz7})9)Klm zq|q0W@wng*w^-*Z^lH9Sli3N%^?OS1FW<}llm1W4bXh7+0R@w(zaT>J0_`f7X0N-3AtWjD~xiGQ#@dNUoGo{0@>E7*pO zfkKYHoTYDlMnBDeu@o13iof>&C+@gm3pXRb?o~A9=Q%nPvs=KG61?iABZ3>;NMp!% z#0P}J!?1|N?Q3XTHKV_O=W_eVL*%65$zE=GOBai)Xxyeg694JP3`~-!N2v{3)+uyw zl@DJRp+Z-VZG=ktEE<`$k)n3XVvo?zTUHm2=P8U2j@gPhHjz9cT4_>vE!*9-9ktA! ziVGRc2b^Vc^Je4AhbwgBPbJ-3D+a68J*c@JLfx`1)NpVsfAmZQw$r8Q`85}^GO=Ne z3wP7bXTiK)+XkOyw3xd8cCzH3B{UvI6HVP42Pt%zt0RX)?ovAvBwyCd=c9sE{rg%f51lQ zr(x6e&3vKFY*LcW{GA8Q z(jt=y8ko9Knr^8{@cVkk7#ewtS^K%-%KrUu4PQk?O9Hsk@Zl8xXaG0TSHzs?dwjOz zKm@%DVdHM@!SV@PScmFmx^=vtzs`S1@!L;v4TUbeVJ~@Nsw@J(D=|4$dm7R6n3}I1 zp_}Q&TyKFs6dE*98nck@TAN|S{$ZFj*noUIdr7HhH&)ykK|{(WLFCq9VIW&IbAPr~ z=u#H5Ja55w-B~L9AC+K`FU>5*eWSRTT*w^^K(VeUP1g*@rJ+J!debNB_b+Gngj}#` z?HXF~I|!=#Rk3}nA%4g?@#{M_kWBtS=DA1?|CUYSIvqFY+NgJYNqPY0d;W*@j_t6I zR=_#qL8LQI@MMz$Xr1|eLhu6$UYWyf*LqTWR6FzE@|8-5cd!V1Il8^08n>@Y;DLh} z8@0q;z@E1$&fT5P=Na*p-TO$!aVRxct5JgLXF9lkA5E5YqPyKTXx?&;^s9c;t|SZQ z6%v9@-(jrzr7TLF#<5+4Kf`hBId;BJ9Nkw^_zp)`JPy3f6*P?n{c;WzH4Ny=!*Fa9 z@0|U5A>3Uz%aW6JH(D~mz~M<_XT)#$vkN4_c2XDFB-Dcj&IwkPEB`yvoqv_ zwhN=st|~i0H@|rPH-8lTlr5Ah%noooRKwrP52X`1 zzA!J(#g4h#AWTZ3dWm;Db@@JOZdp(AbrrbY9Lgs@kU;dUp=^k$In}0Z#r3zX^z5WM zye;Y|AnzkTbKp2RCwFj_+R>ynI+mEv6x1L$Ll#Cb{(#V_Z!I77M+r^MY30Hr1Gnl-{$(#iLMJEVr+bZJn%fb&$4A0I@Y zB=6APv+A^aNYuzY!w(32ca-U}4?nYEhO7^;DJ7Ew4qJcC;}3EfL6 z7y1$ZjfUp?toAL#yGv3OP*x7b``1yds7kiB_vyj%Dr#TojMm!ktU%;HOm~~d|BLh^xkbr5 z?&J|w3s6)dC;Gj6Fg|)nQ1pZXOv;vJ4XgUdee@jeuQ{Dkhqp4< zYt!iGqE&e1;fPav{7}_9iN2ma2c4_C1g-l4YMfJP+H^Nww89XRk5=>5up`qKYbgGA+~Vcu!l+m zX2Du4i(c*YBZ-~zuqcTCpS|~hilXV-MRzf%h^VM27{MG-K+Fjh%mEQ!vw(ntA|OG< zh&d|?#@B#Z%sJ=u8ZhUKiikO3*4k%RPd8JJ%=dl&fA6{fI_sWVYr3kR-l=xQ?yj!E zbMND!;iXwP{__toOUeVezwCh-IXIL#ZHrybKZNe1U9sT45->CM3j6ZnE2eqa^DX-( z;+ylXY-;<;kZ;Rv?(nfGd6N+u$ z>+rGT4>qIl1sF2yGAqX4V7Azi*!{sxT%PwZ{PnISOx)XnS9!kzuHC(Y;miMqi-Ch+ zZHwA?BAY9;*zf^I7Fvw6X}_A~G4tvB4<9(rPjj!i%VBWkSv+||J6xTz6oLx8#!n+J z;p2MOA^P@7nBU?x+_SgkdAdEr1J~SG{lL%I$?h*;TL;j$&kn5ht|Kt`eG2S-T@?2O zda;*f+v2YY1t9(NP^jN;I~>nt1p}JAWFrRFg9a5=!seiNU{-BEx>!wzV^eqH#P31i z*W&@+o^yu$ISAX&YYIbW+`&1Y-olhhr@3cYKO7#u2Fpz8jAM$&xhL%f5bL%Wuaf0B76`%S8%7bXZ@F5$Eqvb zan8D5us>g3xRbaF*O&gxd~+9oRp+AN2JM5FF>EUf&;`M^4}SQAzA3%hwi5f^z8N;k z@MOV(pP|8|y6jE&>yW2jZ(QTu7V?d&%Ij=CiF+IFfi`XzVZ-K2d~>U^Fs0~Ko-pDV zSa$6IYtIE@L^;k%nc4%!FDN zmFb@G6YJM|6}0N#kJm7-iQTr%Wx655Fe6)67V*6S@&#V3ZQguP=S?@}^DqrwxmM$S z6INo(#WF0v^}q`*yhatqsnpxEAWh6odBLC*ZS~ ziMZ)LGh3#xctE`mS=E5xL*Dn@`tIod(|lzf5-`jUmAdeH+RCE zmt&aIdiq|q`2;rUZgt$%eL8nu+5$=s`h?;8o?yMn_At513W(@ipIcm?3(GAB;<2C> zaBplBZfoBI&V9emdmcTAW3Uvzc3>XuePx3-fmGivtcIs=TH?G`I$YcNCj5P1Jgy$y z65h2RkK3+xz;i8D@S|&2L7tWW@Di8|jazhQt6TNK)0OC3m4Q#NiR~qLdMg0!-WCDN z=M8a~hpIhSSk}sKS6HolH>2EaOUKU=g z?8$p>{spHzI%7(|s^DMz3N$l)3f_tzc7pH^W#oWB0ixcikh{CItA3@nt%lXPHmC)VR7kAyT zz)#VWvB_~4Xl>Pzd(!&$oU6*P)X*pJK3_Lh*!3D@e`tkMKh^;&dY|}t_hGz#*aOq@ z&H#4&1Ws9B4c!{`W7bJG@ZzT0tV_%BxNH10*qWy>#_y?tmQR-9kXsqpvh8zN{AMbv z*Z4U!`*Dj^+_L~3&V|G5_+QXDZ~&`9`^{z0bHrZr)3IJp`bHxD9=$`%%^a%z#KZy- z*t36m9Atf!?Hzm>pWGeAy9B?&<)OA%W_2ibe{~<5yoiFZ0vX)$c@c2fot>K<{s4Ct z)!-HDH^a5B!XRevNPIKnBGww|3in1|;-1O$?#MQd->DFSqt33RKdaQC*%E-Vz6bD# zb1N8N4iL7+l6Su|5zjT*h;xt8cg??O&$B);aQ<*8)Hr4i9V$5T(tT#4RmdsY6DJ*i zHs8m#ghs#&T{Iimb_Nt!bdvR`_7iHP7h*N@zl5r#58|t9qruGg5Ud%}+v>)?p(L$uS;djFoOups^) zK44uT_)25gw&7N|jrZZT%p1dq8#`dPZ#+0g+wyUTzroBc=lG=EHF5TftuQRGUxhoGl*Yd{eTK@d!f<5VUzqx$JAAlq$33dN#CtnRgT>bz z*r!?#e0RPN4oq9m?Dw9*W1pMh(0u!0LbHExj&3eSH|h(GgNEU?ngv+)>0O}XgpW9> zMqfxOx&yX4+d){(HE_JaO|)krtbV0tuvfPnkIkXyWTVRQLxambv(1enwapSHNd z%T4Hk?e1J+L1nzrD%(-~u(<&qPO8eb$H(KqLsR*P4fddG{gdA;lNXK_wPWZp2SY~> zf^$8;!Ia5vyj-*FupsIIENe9kj?$WtLG^lJ1FOnx_SVHvHU2PI({4Aps@t>rb$esj zv9@es_Y9a;A&zad`~l}KyYP@P?I3kWH`tWpJJ@fcjm_7WfGB@29CUOl?%#Nd-wCS? zdxzbEZ%bUkbw^J;le0V4c3jQJ{e2GWriX&-)vovpmb09lcf+hnRamc~pP?<0s88=vhhNSZuL& zKa86=0;dG|;hQ~c@neuTPQ3LPr^da81C!@6&)U=QucS42tX*Nemv0B=%YBsgI=P0^ zQ|5tl#%A)tW-Q>pkYQt5-*u%He#p?__dIi8NtfHW_~HcqBfS_@UGxLj*WQC~tJB(u zDPw8f(?@1`<`^{cYYkW4E{7wh?OF7Vk6_pQ0k2sh9oy^<<8gU9mpi`{GuZ64I(&v!Kf_w|RlYuE#{3~q~_>t4c4yDsSXECv!rr?3W}z2R5Y zyZE+ENpMcc&(q3!K+_3@_>8}Mf&JpE{CcGlXrB6o|J;(B_It4B?=z70EwSXk9(;ob z5#s=>WvBNO+nIN-dD!)`7k}!Sgx6mIyHPt8Ck~#6;b)FQ$HW>u`@ANQe>vT^`gMn~ z+1jz4Luz2OPa}LCy%!FToP=?MpTq7teyrM={kUe;VCEPw5(@Ut&S%Z_!67y2ooeqO zm>E`r?@9OuFK<Gu$d5SCd@`&)1hy)Ng}Qt5;>B{~sb@EN#=_II*6TG~9hV1u+%90ghF|dc*cjH+ zwk@1bcI6!oPJ$hGr?8p%dqHyLY5c(EyAalUCeCZL9Iv`G=LKfhfZ2{6`8KaNXg%H= zAD^PS=x2jN29?GLmuI;A=_0&Z#0nzHN8*KR6X4|SM2s5Ui~n=;F1CL7js1$+iRm|k zFm=pl+#CHD?OkjEZ;LlzuRD*&5wj=r1s%Koq|{6t)Ott98e|iO!)wiM9 zqt$Hx(V1wSqYGM|p9axK7O{M_%R$lMA#DB4TIloZ8vH$REq>m%fG>1!1?dfZdGNS; zP_hlJcil1ua|RXWtxxsA=PVpT=zcyTtr<)^M*FueS;=Q-_r#STAFG+Sz;@xC@Tf}@*3;S*ErKV2 z)qoaQm-g(8E1e8g5~I0G|6{=1S7BJ_a#+%_0&jEU1=PKD9@qQEV}&OXY|E4P(Cpi8 zHpzP`)*t$X&&(N(TQ^PSEx*i!S2Tt-D=~qjOxF*w|R|^ zyBA?zcgy3WL;tYbr(>|gb_<-=_yTOZ*qML-Srvo2hO%D=mtfqDC74L-lxpnm!3v%} zhO(&rSGuYOKgcCj2xAJ83c<-LlN+J!>z6+u|gGX^(q z+s#JJG^b~*Ui^l2ZuEUqk}XL{!%?FfVs*TN4X3~2i)+z3%kmj;^6ME3p35ExeLG3?3L0>-bk#E-qrHF^u)VodsN-a6b1e5~s5 z>NkQh;hrD+r*|1xblHkqUUP-p^uF!dx^%o{L(jv%Po#Z-M{!2$zvq-`#%i88gPo&* zzg#~TimrG8XD9A}OFqDdE$Ruo8@7hYFLy!mBg7k1ub^3^1s1mo1J^|ieii(IWmnmA zt1(xhU;Y}rlK(=;bGre*m8%DyJ{ivA%l!joeh%UNliE^Vmg2?MePG4r6HtY{gCYC2 z@Z7!I;OpV@dIc5=aebz@t9?z_zV>unu?QvCRt3r(gdJ>1F40zbXN6rmPFQmQe>bt>2B` zT7|>vMJ3?DeLwuzvnBr#7=X8K_e4HrKkd8YiuKNI#nZi9Au?hKu9_djM*2U-L5nk3 z|I^lRwA)jN$=(GPIrQWs-e0Btm=@!zg#~d>N+JAiHy;PKwTCb3Y5&@-$>=(H79QIb z0Vyx$fMr-;c4o9WyqVDsT(eie(Ce#s{fob#;Y|XV<9Dl{LO zJRQVcX8J>1(i}FZ#C+Ih5yLE&=7(;9X*jz0U~n&!i>2?b1-9sm%PJnlMpGX^-t8X& z1M;F*jfpV1&K&0dZXFg%OXbcxys!cN15D_r+wjkb22k~vD@;Fm7p^Wn3bkT_`EHxh zkTiH5p4&DRCsx>n8*-n;#@iBT&!5ULw8kjbYMB!}xe?3%%JmTg{>s5Vxlh0bl?$@@ z-o5Zp{qOwkpmbWFRhA8G(;s^V1+cgawir5hAxrJM7w$N_@QH1w;$GGcU|9nC6@QKw z6Xswd{X1Is*!7sbSOK0Z>%M{ynY*zU(;{CeQJ@H|j(&R6*QLwcs)Z2D9P&0jU7_p1xolZ_l+4;{xwb=`+E zykhxJ?@iEc`&RbxMrZ6>e>q+nlLvE+nF<$1-^E_H7vtNsG>nQ|%2)RHf$De6*sT$# zaN5~ep3BD_Yvt_8H!aAH$s2sZBQX@NmviPtJ+H%{5fRX=SyRkAqa}_Vx)(p%xbQKr zE5Mbd)7Z&*jp=*kCUAUYH?V&5iVfP|2X%Jialc0z)IQmRUH9mPo>QK(3pvu@L0B5= z{(Laz?3#m_^=6RJYCKl|yaQ9WhO@c{L-5$S*Sz56;}CCIn*Fu-G3^&OmDkSE8XIT@|D^yD45 z$&2u{kAH#vOkc>=w<7EweU1lwX@%EEj)N=lRp6f&MOi|%o$z<}C9G!fW;AOzi}zXR z1F;uJao6FmaEy0zxc~7g%wKmA9`ySMc6;~YJxeo`v<<(~_+el&q; zeazu(-+54?z*nqJ?|9Ch>I$_^KH^C}->^wzcRcWd_Jw#Dz{1~VK%DI{s9Sy)WK^-^ zo87nL{6P!ZmgQsMc0@AYIIo`#Uj&cQ zJHY+pK!~f+g8y*L1Gb@S>777(3~lDaH+7H0k{5h%a>X22VE+PM8pAQ?ti9Z2aaqU} z?o98k4&jTBNvwV+TWD4OAVfL8g^ky*K-Fa-xO8q=I5A`|mg=1y7aVVhere6IPlGm4 z1Pe6>dl4~wkM#rT?5$J`zZW~e~P^i+EKrB0bh81hTVP3u>lQ}!SY=SeZL!x zGZqd3k8AY4%zqGzK^?Zpehi}Xox~A&ZDC>i1#qJmJp-*3j}3V{KFVtWg!XBKAzsTc zc>gu#Ii)<*$DY{2Y9CzrVb2b&iNn+?1$b=Jbhz=YKc6(~FC15O3mn}41TPhu2Dh)$ zcWfQ@@u}bKp@iEhHu3KONW5Un_bg^5vN3cZ<1A z90`XK9x_*`jK#_yWNwq*z~&Qsq4(qKIBIDId%U?mBtDroWhyc@8R}E1+Z|Fp>QMdHkvs$#D48(^XilRv2(yP z`WBG>4`mO-O*u!y6LWtaDY ze-?k^cCq{Myz@5Rb7dv0JoqK+vimjOxx%nNuLNn9{aLL7oU%2Fh zUk-QWp)cCwssH6I4g{nOap?mzLL2ZeC^r{{R}{R;^Degr$ww|9Yc zU2yEiMSQShbsY5Ent$ka19~mJ%XGRI*t<;+?pZSpvZX%bHS8YZz}kbD%{YeZue^fV z@0Z}d$O35bbQ3sL0TvOl8nd^2jOV*%z~m>b+1HJ=q1BMje6TJTb{KLBCk^e5v)|um z1CF)Bhwq!Q8>f@d?@%?Y)^`*7_h`WfJ>P*xOF!pDo;u)zpQq?vt~vfgbM6U!4nf!( zKb}@04W68LfV4z2JoVnBv*6e8o#Z#jAl1tCwXw*pB(|9}1zoRy;%hJa!Qtk$pcL&joE}$~?QL}s_RW~X-8@F& zvUBmcW!_9c8~KAjcW46c7n?wdVr8LcgfHVgzF?L09&mPWE<7;Eg<;1@ z*xaiKG<#wO4liTa&Wa16`Glvm8i)SWd44un*r+9z+BFto0>~nX?We3fQvM zp7uEK-B3v1{vF&ycknCg2E)UUm3XoJb1eGwF~8iq1Gab10b}=S9P&+V8P@BoUY++|C89>*8c zCxf-!2z+y)8v5nyjZvXi=o{G0R&ijA3kw$31YE zmz|AWQwU$X(|7*|=faBhQ?UAh?6kN0WS;PNJM8R#2`AWl;k-ac9DVi?q_l_!C)(Ta zxZ4H(`py#QM|8gqKF7X!^WiZ+gl&#V{M4hrp}bQxPV5&6e&u$;+-i-nLPw~uhG zNPTqLwS_s^9>#O@KF_h$bs8u0^G_?%aBsgT>{xm!Ske1^&r%J+y7MO77}yEUmg&F~ zJ(AJw(SE3Vp%?rWR}G&2^$8lyI>gFmD-Q#H6oJX{FJO7hER2h~fG5-U;_gG!u%#8p zsWu;QUAMRB*JM9_+BuOwpm*?}vQ_8jsEwS?DE-c6B0WdTu zm9P774n8DL#IwboW8>_jU};=)2$<#r?dIl&AN>chU3EtwD;I*(4_-!#zelivE4pJ0 z?GZTPZ3woh_7zs7zJ+{Yme6HRYrOgLEv#8;ht=kVVE@Yp;Q2FuUW}geY$`nkL+#wr z%ws3?@8bo1Ugv-wWnSa`I zHGFD1jNgg5hK+pgu3)pT6Pt?n?hV6$`xv(tXM3OX!!kBhOjv0KCn)66&9)=gup7 zVO?XBO&S2+UqqW!LKW zhu})VEKk~e$dPRq`_L>WbW28jwk{rQYZu_P zM=VCC?RT*Ku3uR0+F|!_*WstD_DBL~9S%nML@mY`WtSPMrEST^f)_Hhg zO#WxsBSHsz8m7UcGo9(3{c_y-;T~+WxDIQNyv?F>Kf&!)=y}5QzcKE9M|gSp z5>(2!iv8#?9)^E9!~L$>VaFS*VPTn^__f+7=yrD+F1uZhUyE;qO}rD>MID2*30>K! zc0)1cZ-!p9&&ak#mvCQUXMCW$!k*4Ogq`SH!iwJ0vE?vt-ZS4^7+jzjb0~BZi`gdQ zjQ6gX>N*07x48&6*L>%jSEfO&i@|Kb{!h59$~{&wFc#NX_kx}``s1J$z&#thz?jXn zpGVRU@GBqBzn^f%Rog@P!)E)j(2NmmA^p$Vpe>b{<)#I&s7D`In|m3~w03~+CwJhv z6;)Vghcd8ifejA(nHLH_@uYp8WekBZZ{0uY3PQTmZ#B;G-$m@k`ZP{F81sg#2v9E);RX^EE%? z)l+3KrnC#V-a3orrjF(xT2epqY&uq|mJIEp3N!OZhcSD6D%9<=6^5>Qia$G^!IU+= zZ0nvS_#t>Z`+DjfjBj#|@iNuG(Jm4PH{@{Q(LO$GI{imMr;7MEY&TqgHjn-%DF?op zk^oKOOQQYf>3Dg16b6OcLziV6pySOnUM*}MIF@r|;~bM=O6&msJbD6tJhYL&fAtQ$ zM!n({9xlVsU5{|srnfNh!z@<)@erA`kt)EeSegM za{shsZX3Q}bX09j&6ghSz=`c7`DHJB8ZsYqx z24UR-3(+g7Ax6xMWN%Nn;6|sT7;ol{b0@@epY)b6;E5|gJek&WB$wcAT>Wt6%aOo` zAAnZ73bL5urSW}<9K6$=8<@j;F7Hq@8WWe!=S}SH;}gsJZ2H7LaOvP&7QMX(j4Lz= zhtU4K1xL5%yK**$J1dglbNngnUoMWd+k75xWc$vmbt#T3t0iOQTG?^zgo`{X;0E|k zYt8!Ii-Y41#n^@p+3=t3u2|Ol9IOl91i8$+gGWYD7Cp8Hl$^gAr!DA@KPFb@ou`=N zsTc7)X1+JAA^Mvw&RG~*^vlOX762Z6x(|+8Y{5-)F2kEK#o_slk*vYvK2T?cIXe|r z9Ua@ZW06-Z@lMXdxMb=nyy~@|dyel2i$|xikK-p`g-O=Xwtsuv-KhuLntT>kG>^ym z9*1B<^#kntl?{0H!$8)xYY}v762_zESAu2bi(*Yr4*f1ivcALp=sj0&w11WzwjCM5 z^WHv(!zJhFy-yzP* z3+(B8phs^9UXtUZ*X_mVkI4uS;-uEIQ49ooU(H<&iVZ`>IY*@{a zIIGTKsI@N!EI&?x^Rymt#G>~+VbNZEQs4j%ujqjGr7rM%bviJ##vxn&p z6@yT(J9s+z2%ecW2%?i`!#IcD?8vbg=(p@Ed);L??ZHq4&adx=U!88T>1ES!IIXi> zvbF@?_*xLc_vgUY9d^5N)WI3$Kxg85F$q#qhUS@s+I$%c0?O4aP4t=M5 z1-~`Fj5Ctnz> z^hVFn3)8!#SFG2e@0heVf@S+&7h4DWv6~Mkz(D^MEVf}d z`1gy46~`^1sN zzz>%XJZ3^HCVyMQSJCr=vs*vH_~{Md-IzlxbTiUFD9>hPuf$-E@?&7ecW<12`Xc1? z3Bp_%n_xovNLa&$aqFXVF#Y*kcD-3R{)|fGA0FJp^PQeRj=gnZ(3eImsx9q(_~|rn zl)o(YuaVAO?q8*KRynv?ugb8i;Vz!o?lexEwhmtINrlZdrf|=?ZE^k?GuG%tDacl0 z53Jv^5Mt_GfO51>YlCN74io0VzLM{GuU`+bO2khH8CeIVoAcA3%7MqS56pVoTo_n;46L^grvH2iLFY>S;0Nsk<$vTzu5 zJJ1c2%}+vw>-3!0cN}(^vV*729*%oHe}Tr)f8nn_S2&L;1Ct|lSl{jzOvqmx>OJ;@ zEi;-!j?2s7pm%lt_xBcX-TNgvK1hK#2{UnBr5f07O*HI-3OHhGU-Wp?g#Ih73v0b0 zJ0v+iVb*1up^I5goO-kn%-sEq-|=vPSGAY1>tidylv!2yq^A|oxlw6sFzXWr(t7Rm zH3MOOP&pQ}_YTBNy~+pE_i>F6-sbzaFUQ3FY0&U%9@;~a9tM9|fsg8S$NtUh;`?eP znM?F5xVyCx&*-)tN*}w42b;Q}?ZnX#bg(S$t#b@YH++WozJ`F+vu!ZbvpXBxGZ5p- zn=$;p4YK8X#iu${h2#U}_@_u$JUp-^KOEwLg*-kn+jHAso&P#${51^9hAcogdOr+Z z8uG3Qad_B0g}pCd11g?-jk87`!~2zfVPXGy;P>kxYZd8?**CYqdRxxH@ZH~7YN|hs zwz|mI9yyN5Tdeu~7we&IS=x(o$V8lR>*JxQN_^h70$9D_Yo1L1 z&2=ojK5Qtp7!O+S;eB;JIQ@AUUa@d4EO>l14Ep2yUv2Zr9YImGf zKKTfoW>n-S{;rP?|H;p0OAw@Bi2H)`xG|(W;5v19)9)A1YBY_6GjEs0AH(vu;%6u`d`0T-Y@VGmiTE7v#mD$ z+dmxspZdSy|Ed4|{h#{(-T$fo!L8=Mmaluf0Q+pe1&^l>#i30W@LiuKz?0O%>_(lJ zcxz*A-1+PZ431rlqkSe}=*a4{ewp^C9@Cq9Z0SY&Lp))(Kg`0j8|_&zqyI77>;b9O z>f+554}P(>2hvxBXnXM*p0yc?KG%IQ=a!OiI@?8jPk%C6y5tf3`t$@Foo@*I=sOQ{ zxQ632+DoFs<4<_ISy{f}Mow(ebOM`w9BKMU5Ltf3q2N_ zL7$Di;rV1=Hp=-NWcxb-Y!h-07SX9K6j+J?*!e3y(DBwwxoZ!vi zyZCJ5b-0k9bBldBaAeLLEUZ!s2y=bKeH%@O_`{?4`F2MzPruh}|J^pQ`Qv^b+;t;# zD%_PV|Cj(~gD&%uOLD^06;-ikvkDMWX$BAbIRpQG7zfp#uECZ+|HfWXRyaTL4la6A z7Pr5+h$mq?E?hYs9-RmR%hHAU z-X$^2vK_{E*oNljcChTtP0T*MB-FT>2P^KpgwLifhVAF>Bkmmt2On?1flY4U*@lkT z$ISxUZL;R$qusIV`)%CvDeYH%zY;HDa}B&=b>MXQBMgplLzgFukX~Z2zD45z8ixi% zgarpURB(2xQNzW_rFIpE%He&(=-4|fB#NStC^~T*5F)VNevyFz4q>4V5w5js)pD&B zP|?9Z#4oh3!=S(j@jvGd&b6vKRdsQw5EK;^9$B|qH9x)ds(r)4`i2BXhDAsC2UhhD z8&EAOEG)!7$S*jwT1d#C0gmAjVf_OAqZ|V2^r>B^k86N)&6+i<2h?zKb_uNE??e-( z8hxtwuI?1*A6PxWrFu=5idqL|ttJ?K+suZSU`4I$p#@=fD(-1U3HLnjbUmz!`^K9k zn9s>R*J7UKe5(a{7Fz$Ef050SLW}Jz%_dpd6G16TS5 zsIsn!*ga3Uw^ebsOi@-#@+`JCTWMt^(L0w{DZ|P=$DlF};A{B681jgtf6M z?jQs#$-daatcR67AwsP%SlHV}rJs~nPj6=0-k`ij_PP_xG?jmgKEJ+Q{*}vh-Z`x7 zeY^ZF#yyvib4`_VE1P1+zm%g(%=V`kVpH-j{6^tF$-fiPwNdGl1(SQ8I5SVH;!b*p zFS1x-x!6h+GogyjqJj`vtjgn*Q{nm7wtlt9(pI7Sv?}KnrAha@Ox>#H6I4OHbu@kXz`Rcw>r7#q*DBmhNI#5_EV)s0W|Drxl(*0gAAlg}o%AcT?k7ygzttjDu zz})j}VFsVgReYvPAUg=w%TsI@`Q4-Ph3olz|6prDY`z9Aq3e~#BQ(0_aU&k%cG$wo z-c4n?ndzr8=7IshTO8c;I8igu7pr1ml$E`c(hRN(22rNoD*bSwPx$Fy^&PtUIxBl3 z$--ZYR5=MkF9nf@Eh^@&FEdZ022FjEjjoEBB#d~3@6%PjR7#5=Fq+CKVTe8g;a6+X zW+)6dchPUzx*ux*_~C=s+zv>Czd+_CN9Q zWVacp1`+)=mFE@NW(J~T(FdhZrDT+XTWBySeI=cJq@NkkT4XgSeE_AMNhR$#uEC)6 zb?TW;(yI}yQ0z3=qv0afN%m;?2!-BYr-tk44R&gH6NUayd;t-dL2-=?l=ekur4{?_ zGjXN;&{-*xV+JJ+xSBew__J&#uGDEd^HS(bXW~lRP|tLd-!y{!ik$|3YWOfpm_cFf z6qLS*&Xy>8i)P|VpF?M&?=pj8nYh-M2tX&5i$?H6sUn8*(r`U}ZuwM6rz-S+;)NA^ zDrC|t?T^kn5j|5{rv8#f(VFNP)Xb!JP*YRL4-9H#;u`&Ir5=ibQy-MEi;~IoGlP68 zs*XkKnGOu}8o^=3{y*^)MSkYA2U1lA3!*oJN*X(8eL*t?7p+?#l>UH{kCc4X(qK5E z=+mF-Bs(<%eYqLz*KiT*Xx}#DFi(;9C$6V2XiN^rm3s9jzFsM>s+sgk-$ZBP&Xs{n zChm}#686|iXZqw~MgE_-xT=%tt;RT5p*PfL4cF5f>a&K|SLpx5_4I~%uF+d5^nc=d zdP95H=szj`{1Y#)lw);`477spMu-`d&&0K{M*uo7^cxz%14aIyxSqbGMwS`xRp|f3 z_4K7P>9oXhh5k=mPjBd#H2PTz{hzp=-jFYi{-EN|KXE<1);cw6fO!i2pSYgh(7rT| zfeQVfxSrn7?lk(E3jLpW5aA4JYh)l>pi^e6nU|DAc14b%{mNH$U}zT_{#NnZpSZZL zgK8RCW_(tm{}b2KiAC!SNOht8SATF1h4Vy5+bn5EGFi3=*7)Sqiy{S|scKd<3>dc(M&;Z6$upSYgh(BEqG zG+CmM1x~0=swW!#bHzV~`lI0|6ugdhni+3Y@Oqi&S|W(bD?e$_f^vUMC#i&sIi+#% zARsHeD~(54;TKHchfLrOCgjsrL|MugH6$y&Vup|(4CB6X4@y`K6ZtAn^7BjMml&r- z2&7+D^2d|Q@`GWVQttPN_NU@c!}#(_2%(_0+yZpnOAjeWCpBHr2ydg}MF|g<=(Ty7 z!23z~IElW$gvXh{=Sz5qM4u?(10*~}!b2rIL&C!(+=A>ALD(6tPb$Y25}s4SeI;C$ zqs>!<92t+3=wVggT> zaJd)yD&Y;(w1~_lzcrHZE)w2U!UH6{v4m^)JtAK+yN!ccJX*P#z~z2M9(}q<^fIp1 z6H(u^zDSTxQ|U#0lkqK*{moSx5$#ZMA*Y9g?@@6fN5)S`a^!rKp?+8d;Wrs~l5kmX zeG_;K6L=R1m*oeU!1ePMy*;wtaVF^FBwVIXG=Xc+$&B->ANT*%d(DI#?b(^JoUbP6 zEtL7mpYk0fT=q{D377Mwzd!m@j`obr*dAXKa>7mElO$ZWCqcqxdsdpj4@kHy=d^^& za&DQx-$}SEM|)N$@+-@+$Y!X|GHxf~vYaX=@cI%i%V{IwvYc26m)rX|6&LN)S8tkf zoTTESoyvHEBqu_mPnK|5{v{LgubGgaBFT~Er%Q5rNqS#Na%B9gBuDmxMRq;2C>Pnz z77{MgPg8Mi{MA&)skk=&YIuSqN1oRuO1M0)J0aonJmi*y%j5Mc6S($hQshgfx65J3 zuRM<`BjNHqq_%{Y)-pvgE!$UukY7>4y(L^OuS5x#=bvjOT%Lc{R%HtLEhYIaOyKhP z)moyL=QB+ue61u$9)I^pcsq&ygoMlV*Cbrln=0Y5oOco~%b|w@N)Y*#gv)YTNVqIVo{!0Lf+TubPLzbpa>hxxEJvPq$#Ud*mn>(C2{}h3T$Yn8 z;j$cgJ|^2E-Xn-0{4dv&1PPbr$nzXouRL#&>1*o@^5ybtHJ+}N`t!z8z8uuF zD98UV=gGxXy~g8$W{>f>P(iX&9v9^Kd6Y^cBDsH)`_FNb9Qi&sPQq=}w1~Dycz+3Z zlj^6ZgnOF6eNEuuCh(so@F1z&WxY01`O3IFpONt%Cg_Klz_s~|s3)?V`6lSsn!xv% zz)zdNZ<)Zg`HZnWKTXivNaMb2e;E^aZ4+Bh&XVK_6}cpJW1`Zvua3p>Kr3pK?3RP;t@EXnlg9 z{Ho%jpOJBMbrLD$$n!C|pOO2G4QksL^m6}sK*HsI`?Q41^JjTpB-^j`lR|!Tl~+U+ zBsntfY65qcaM>Pj6S%L0%ksk|T$VFj!e#ntCh(OKF3Z^>;j)|~Ch%JlF3U-ka9K`< z3EYbOD}wN|EJvO<%5q#y(7Q>vOz&v|m*Me<$cm zOL81kqXk}3!aXItvV@P5a7PJGmhj)+ZmaWKAzvOhwdc|Tm;I^DlLao1o7!_@fy?g^ z4oLFl`?7ZuF5j1F_k%)CW6Az5=K2$XH2377ka9TG0r+gB3aQj()Bp%e03OSm?l z7r1=C+#;L79<8k@NY#kI5WlKXfkUFIhDAn(_yh*H)TrTH$A?y$2h+Z^9)EfIxCi$Q zjErg-8XV;lNV~ygBF%zB{fI#iwRQJt>fOaBG;lEJrTGsC8>CN4EFh`t6X+8hN@}7& ztW+Nm7)l9)F;RZKLjrvw14C%JI^kgfeo=mU3x_BMR_)&{Fd{5cX6YN~6BX7wCMu9n zB}1ek6EH|7vheEC1-)p$kdUDyQ09#sn5nqGqSG@XkSq;{re0k=z1#Z?2pr%~XPR*$ zKartfp+Zbmagc5M&9{-keM9AoL4J`zE(L&pbi|-QeLeMu zs*zCI@b|LIuKoL1yGK32&h`UmIBj}=#--ZRIjPP zHA$-81pmk=XTpd`IVzW{*ARegUz2{x=ctzUWUcsQs~ak-FL6f)AYuOub#syyljf`aNMJ4tf*wzv9=% zQB8_5e@|i-n43nR##`>_6J6ACRg7&SpBCzMJ2f6TnLe*tTEw9y_(7cLc zFKjoq|21J**+Uium9KSfwp`QM^0HT`$xca-?E%729ybb*3geqyz^vHp@K@?S-rG$$)k z3hk1|nzzN-4Q^?0h7KkCm=;?FAozAyD0+B{n5FPMe? z&*c29{7--Ftb|wkDD!BX|M$e4m445+dKTILwgegHKbo+t^xLRQPPOkYGy{zFhtq|u z^q*GsU!w96LF8ZDXBq3CZzBIyY6~v)n=*Y;IU4J~NoZE~UsIQ;YVQLz5yt%SCisJd z!4wV%;ZiW>pF!8M%K!WidL|2%Ux+JCKjZutH&Oq}s5f2V|3<%^iTaoLQLn#+K2rQ| zpN0NnWPDcsOK{UOit?3%asF)y$SVKos(xRUS>(SY{fzV9#)N+QYYZiL>!Zx0vHs>J z^tZ^+v&i``O^~tvy_ET^^4~?(Kb-t42V?y^h*@B6G7+WYvd~|aaAW-sj${P;bgpHAXcy<~K7@f8$igYyFQV#+d&X z=@*!rMxe&Gvhbf6l8pW5WW-9_c!YlLg|Yw;P?ej_r-ch(rupKE;DRk40oV8;HpQ~ATQX_Wd{YkwNLnHYsn z+%!OqW7YN>t_l|IS4;^semj*;e0y%JTU?rSQBP1oy^j($2GP%$zgmr&b*eiUf|DWX zpik?MHCr$%+{ACUtgS+ybkZBZ7r^*?Askpsd*{&zJZ zal4&`RhezbjjqeVxDJYQ@%ulu4OJ)G{~xv?b%c@Ijhy~{9CC53Q&W%p=i`uDdqWAh zDM>e4L(Kr2vdh1Q>5?+qn&D^!W}Dzek z<=={UK9apc$KfV0(2qX5N+dnPCz{Q|$C}+#R*IiKcWz3)YLe-zU&9V2eaZ#jGTNIZ z{nCj#0P7scSD&aZ2w5V(vHA7BR{W=?9}7B&%^%NTM-=^<&`;=lMEQK8`mq9C7k)|C zO)5gqFa|=wrA0E@Hz9p)-+m1{zE+e~NzzrCd_cNv@VFV(M~kFSt%W_7WRKY_pQoSJmKPK!j)iYtI8`VESqvqd5ODlCx#f1&isf=h3h0HR_uyxxj$|yC5 zzD};9dL?}JL}ybeO)aM*BwLgdwe|l}9WD27=+`oRxmu{@%5p0kZX^hs3aGpk$3>bM z+JoN5`ntGG<(KP4BH90l?0!sTLFJ&-v!!bNNTECm|LE&NE2;-A$k%S)$nQ$K5q?&A zY=F|DOnwbJtketjJmJ@{qieImgX znhbY~7y6HgzJl0)wVl(sOM(rR5(Y!u~c0d9MPD9;v7Zr|uV6xn89 ziN<%~Q?YH3jfHotm+)_p8SIs9%+Q%BGKAm6*dzK8?Ygl0e@EF{*pQ9nKdoL1-_puJ>1Qgn7o-!AId6QWDi6{fLFUw>mQ#Q15e@P1R|=+lWb{(qOw zsclwzQd*NGWT^aP=M$oPO#PE#?9$IG$WGTgR9EPB-sTheo5oyfD;|_*cglNH@<9`7 zH;t2UtbXiYNVMO~gza{UJ!1TsN`1aXG03OM){W406yxz@%7e&XERDmO{bo*99W^>Z zqgXYyE;gK8|Q>JWi7?k}u|K`o2MwpYH@WWu6A)cNznfxty@yLCIeMvQPf$B}}x)4qO8rT&UA8)Z%=+Oy#Er8X?usc7q3Uq$aim3B|pvuq<-%~kZ{&F|yB z+{aa*x+?6qP|D3h(e0-8tHw6P(y}?t7QI|Uzgd#{9YO!E`wT{YFeBgV6g@|%eg3;K z!?f?sDrtQ)^||lGeDDeNyZW*%K=ss+XY!W~)lsG0ek%aqjN7f4#~{rmk5az%ZIP|} zs?$~as57gi&Bap4R+?X~v(E)eU;K^QgQ#Z?|E5eDJLu;bqow&H%^fR6D&?xL6R}D^ ztxwa~Qt7eMPANYmpKMPM^*xrxH)@0H=n=1t&^v_My|6)G!tc~?S2Ck^BIxyfLZNju zuE){4v{^YRu1K+c4j5=j=~k4kz$Pthq=SK7@=aPOc&HD^oNo(xkEJ%8D?4}>r23(? zO=@Rx{xmPw(-o*B_(fYkXAa)WXb$9`AM)w1>GK3M$G81Y_-TxLMD5eSukXv~CQoS} zk938|F1AzSBCUowVbZ7v|{_UF!w#t;4c{}}m5U;oUM@j~lg zDE~^`6Mm+CoqSP9sTXdP7MRGl$g4>EQu;LMaG+nb8GI}LZ|bMGw=o{~MBDk?S+s5a zeS#tvQL%wJ82l^dI!9<8k(X$BnV-#;)$ELHRgpoN&UuFn7jhRT2+tqydF ziV4r8pcRcinIt~pLJTeQqh*qT{`#|U!J=ZM0K^(dh>i?&^bhOf=N}ao;n*j{uWu%K z@PP2Jh$v;bBm{){cr^8C?a@^%oTNppp8DmJj;#Y@z*AXPsU$s`x_4~s=qdCBM$tCT zP&TrzLxr*d4!wh;Dq2F>N|8cmU41ILHzmYc0P*|3;lJkru{VXbp5nhJ;s57c|A)U% zu~v&u-m|;{VcNT{TjIKV9?##l>)u0Ke5<>4JBiDJhC&t54vF@U{gcgUpI=YI{>fE{ zY=~f>5GxLU?1OCPD{q7>Y+NhoD9}Bg5`^9ZYMSN`LWZ>8vwpYdF4At#Vn1ae=bg%< z$q|^j+JDe|K?!B(Xs2R|AKdd;yIU2vUShV`oHli~cF#k9qfIn|j^>I=Q1TIm1<>2+vZtank>&<^W@_Nz+kodxZ11F7OOZ9S;$v)bx|XU)#qBuCq`d`lKGEzO1) zq`K$wHk|1FNMoiF++^M?{IkVKuM^RqP%$+xnf|eCqdCYuSGblWdg14`8l^>LU46xL>oBien#S5a07O8e=z7_f0qGI*+zBSlD zf2AO{#aI45LAB$C>Q7;=so+f&IIDMFf}1`V%@T`B%@f+WXs#{3P#D9;?#MSLBPgzkdeZ zZ@UfZufHQdn@PA<7NZq8%HcObxu{*4f&Q(#xS+Lbk=AJo%*BZs+9`gZCoF1E`f^J5 zQ$!nZ?Yf9{%BpA?0f<)Yq$dPw(CqA}$T8sBbrEN^=XG<%&xRFDTK`sGkz>GrmqSk} zjKVp^4+h*$y@9d#go zU8%qLK=F?O4_A3+D{>6DEJ`QsWv}7l|10D@?v=5GE)G-V&|PE}A*(&CPbl?}?hMtS z)x!Wqjse%Mi&zIG$xtWe|_aG5cy zy|70r^{`qdnO1+MDRK;WCIKbr-<0H2C0#@Dj{#TaB6KBMkz>GR#;o?j7JJZ}flDUY zB{kJckz>F!2`Hg|EF&ZOc{@GE$^?VdRC7g+0na3$giiX;0}Z!Q+LvK(Yj^d6{+kN} zuF;D)t39mk6}`1(vdpwj8ox9!k3w%4*EC$jI^`dWWCS2hsYqfL^k>jX38| zg)h`)jqfobN36}yN{*NxWrgphc9#`C&4gaDcTZOIYfaeGjLI=9dS4TI{}*>}1E*D0 z?T??C2XS~2c@=j{EZ1pVKGaW9TfVFLcs1pTWM^cf9ZztG!aRUAj#=ST`=OyTqPQd?^fR9e_AFgE(CzoqE#o=cp*!lDXKlynAemuc{ zE>5t+4GH$YJprGZfX_^jJ14N{=^G~qn zV6#`mJm}4^GQrLh6Zk)u;8(XN-~$r)d;5Z4}Qhrv%OJpR9x?SxR%heOm5`%jpQluT7&Dnl6alLnIZ18%6 zZ;>>=5&Hn{|=oQ}~IQ49hG$YOj7>HlzlkV6dY2qskZtZrJ z!F9$(`bL8R%B|4xHj`yVs7*4;rU&!BQg_|wd@bd{_4K%uAH)k4c?q@;e(zDUwsqv{HSkC8O_tTXsDgIm9vWAN(@z4{ON@EWb*YDo}Z zuOMQzA#v*`+V6aE5 ztLOee?g%-5USgH2cxOPb`Wy`C6@OXqP*43&hq%?#`k~cxDCihMd+Pr{p`IfHdex^` zaHUsVpYMix>UAL0vr_mFzsalSj8%iuRlno)mAlfUhELj@`;|5pz zgmQ}wz17q5zt!;RNqgDrU5Vj;o8gl-_$LfrVes1xzQy35H26c3X1i}PxV7h}3~ue2 z)Q;;7z49Ude>V6?Nzx$eLGey5}v z*?#fA46gE7U#@SVLCX^V7X=Y-l{E3q27l1t_WIs#@VgBC(+2;H!Jn73+O1X2J0(`T zDSk+B>T|cG8I|Cif%pcWbjN9eEC1UhPyd%w{)#U!e6$a;$P$BpR(LR~4)|-|)A3*V zE8b}Me9rJ`HTXRSf5_n47R+up_`QaHx8Pb|_0LBISA7(J+VHXSz2_6~g9hgdnHpX; z_!ksJY{!jl2G?-kl|F1WE)aOHc zs&9n$)HYIjwT0GQ=@qyA$c_WMjsA8Vu=d<;^t9uot#8`!vGuJLoa5mGhL7d{C4=iY zM!Q-5#X>_|ZAEB~;N)-T^D_*+9mlRVxV3+^;A&6xTh(9fskoL^`fo~k9ru)8@fIW3 z+JBS5t^KuqSzkNu*><$!o^3~aeLrOQe_7Iuj!0Vde@@PiO04=Tek`E>iJV8!k3s1b z$9vW;DF4U&Y1BWUS6t`MtnUV)Wi%$>^9RY(aaiRl&gU=;95pjUjG;GsS`ZWFiqJZe)+hwZGy;0loI4{sFz>x<(G`W&2l&&=a@) zt2E%Ra?1n$iqA8A?EROn4N3m?x>n??8-?T27{N(z$0a-NeNAW>*>UV4gX_3QKK8jm zh0qZHx}n#$Ag*a<>v$EmOS6;>+eODQrGLNBtq`6+En$j&H=(h9v#J^_)TVDTX`-t(W3D zPKJ68^yEUEiNtsm<3 zk+}848Dd=G)(8YpY}<294G@3`CC7nV{q$- zOAK!PaGSxcA3kkx>xV_Xyb_da{jk*Fmm58+4Q}s8+6;cBp|^V&TxD>(I=FsswXCW6 z#)u2(BjPIV75sjR8wf0~YbkY~WJU5(mHSSs3SVp~;3@n^R{6MJ$KH@*rK>WY)|NHk zJ1zM*i{EB7l+}g+zvS|tY>}YJmv9{2Irm3cKe=>zRmJ7AsISwcv0>@57VLrGKLNx3 z2iy^1)}^`|0?*7s`trpZw3lz#-2MrfveDc{i`*UxGZ$Yvv1)PUqWPCz=*|~%E&Ym_ zi)LO@HEY3~>^2K335))7BZcge^hS{XEDbfgIQ#XPe5+;(AV2eMT7Isub6?4Meon)s z>#j|t#bX#NN9=bu5b3=>p9a)5q@-+*+OF0{Ds&`q1Npt z;TG&ykE?B1(}J)5a(9_P=Gr@ZOSlVJl5V})f+tFEuQwrLIa&9FVd zyNdl*Gw>_!X+X0^OH8juT`>aX!LG(0juEn~WexV=$QSOvGL6Y_oaBSkxNJX;`QjO; z6mG$KehX(^RJE$1wybICbrI8zb*q-Q=uRJQ-xTPDjUi-%7xxiu&DvGiOr*|{nY~rk zt}Ls{W^piL%h%Q|UAH_6Z0GtU23O=`e+&398^kvyUCwcF-^@xo!2`-LTxhdlXt-X_ zy*D&Bp(8tpeb@~h*IJVzw~GC>;U;YK!H;PrsaFqb>c08SF=xiL{rA8=FS~(=RoQLY zQMHO2i^vWy+`MEB`UJKXF-%1fzvGA>x?NfZeZ{>k+?lX*X=6rrZb$l%fJ42*jC3=w z%NNZiv#GI`HllI$duNkt2l4!}l8a87pJ(~Xx7P`L6LYg)ZHt}iR@G+vG+m~lHrB^L z-dt0wO|lXj^)xNxhuHj%x;|$8Jss5C=!9)c*aLD#I&N~42R60T*R64#a;+N#a|k@E zOu5X2#f=HxzujgeZsQi+zD4z*2l{<=RxDfVc5(@Jb-`XIx%;^Q_#f=u!Yy55wrC+7 zv;7L;?)O`%xOn#BX?{56@W{$e`oFUO3a5=#MSL$jKUB>1*q`jp4i1p4v z@m^YRuBS4c)zhf!#CI;gKSSvgVfiB{Pb?kK%{#{fdOyhfJk}G{bzy|W+Y{vLed@TN z!l8WbkrF4rb*vY#SISd9?=M67$DmZ4{dDd0R?jAL4CP}@lUVul#`z-EQj+qaYM%T* zL3o^e{T9~VaPCRCDecOd0uH-|C3_m&qT*z6~q3c-@K~6o?E{CXP{uL{bS^x93%fn zuydUJTB*P4pCrEn<>Taci2PD1Nc#_pk^k8Q`5Q$3dKE0Oz!`LNg8aiV^7;Hl?Wy(p zb%Ou#yD)~dJ7y1|{O1z>pu)^Lix8Q$S;?NQA)2Ggz`U@AiqKcYdvZI;W6@u zB#b{ZM80$*6`$At2PBL?^)d4KJWK1NdhJhW|9X+%oRRDkVf~*;X#ZA`ul~dOpB^Ls zjRg6+_fcgx@?TAme^lgCE(7B;@C)nz!-Vl?oD2xvjX&H&gf>azXG2;ZzNwulpU($F z`9Dq=e{^qkrB~je{eP4&{w#@+KRQPKb6^-Z{-mY;5368_L-{`kKr9{5HH&=P{%3+l z>!Wu0K|=pKEb>FXq5Rzm{qK;-7dLS2e^!kAx&-;Ucf0DV)eGfUC&(XB=1XWj=i&71 z82PV&VVwP^fiFXM{{Kgmr%q`Sn@}q9I|QSAPRX=Bs@FfEpU26+Q{*eXu*n;LMx%V3 z{KGNz=ksgjr}9rskiSLbFHyk~Qd3G$03d8!T}X8p(G7s_9c@guJOFN^%{`u}-Q zD6afbDSw2SCWQKPAy;B)L&M}=(SJAeW1#-@!NxIz!sDFnB$|& zF;6}U$H_09=8M?zgC+^(7bo~ny~wBDHiYs|NBKDU)iLr3h4N2GkpHmA--LV{LitgG z{LLc2RSK{k{2wTk-2}?)uLc66`-v{#+U%%2WP~82RhqfN|}QwVhm;!Aujv z`ZuF|oc&8gzS@uSKZsvg|912eFXiV(Vux*rd6#CGX7y2mlHM(^rvYh zlw6gs#5W|2e-EGUDeU+$6OfiyyWTJI12>8G4)W!@lV2f z&!xFGG<4lOI>38E!?MbU^l^Mh17CORu960}b9*#c{$bg7OMm=Hzeet{rb4XkoWdH< zy|51G30R-Bw_D$u>+N!#QLans*30#4uB$EF8tI(_qV`9zHhu}#0v(ApZ|kuZ=;Xms z`whL*U2hJ;+R%lv4nEGI?-pIF)$QHDbF3d)-9Kvo?KQnu7Y~RkfBWIyt7jr6E!W@O zdTw-C1Q{&n*MsGn*xU=lua%3BUfuerx}QX6@2IPda%IiboBO7_zJF5GUXQ&p>KS9b z*%HLczipsTbIsjqq`jO`SpW4D$QhoI)9K{+b!LmO2EMjg(HYTQr@b}%8Lls_YkIqN zxuJv75NAHt=XN&WI^AuqPF&OaROETvwDmtamFrhyo$Cx10joy7rEA5)BGqnP>nvR- z*2mp(TDq&cU%Csc>$SJa`uNpYzaK8lbh8vm0v%&brF2gr)7=eBt8+>g-wkZ%eBra zPuuOCWN$nfk7!U%%b+nI$=celr_KF3xOVlCg%`l5=fbz=z{h9rJk}&@m_O;)Fy9JZ z`?0>P+JI}#a=m4&wTyM##m5qC5bBQSCYvAOn&W6wuK&$8_jNigIQQ%MvaNpvc`A## z9K<>0{sl41-h%eS5V?7TTNj>uM+AKBd6uu2>;1I@YXq||Y2SM>vo^f%Q`(oRkN7oz zs|UEX^dBLQ>H$$#C(0jyzoAb^eLUaJzaDSD9($CqUpm^s=zCbZSmi|Ex9$|?d;02A z(AQr({>VDSnD4x!f6=z1u~)?>VTbF%m;CX|@kLDChGuN;`a{;{q*tGnKJ9e3e%lP* zc5QU7#XK5)r37o6bIcoc0`_LWTF3RNXmYiTUuX;Joihej7ryhF(^jVXY$^DVXRH4N zMXw|9f4}BE*Vo>TeIfL`Q`UZV>qWcu!!zsUx8H&>w*})Ko*ND2ILtB}4>=ao4%NuR znDGdvdP9{Tajl2iN&B|*Yp&HS{-4~pvg^TjcP%OEmF_A!F>3EqknZ|->_Jd;Lb_`c zV)|vDqIB0eNS7cF>lL&|$ZJD<4&nxh&p}*JklsU`M!+{XUa=0`r{nag(PgdJLt!t* zdghZid61qov{^Cp*@looY}D1gS6BCmDn~8py}F=pRO#|irnRpdE1f^{+Bfp#=(1{H z>eH=mO?>g^zEQc36|-PlO>_Nkjz8Fc1baaEab!JwnR4;V@!=es=Zu4XEp+nac*3%( zLv~Gm?*lq!>h*`?N_XR))s=c;`j?}>>U}hI`q=+OKe6WZWZKyB(z61E*P>$F< ztfNoA1>N+5Q%4OZ4Ke0XUyjj*$WN(m@IA_L``$n<>C+ge)i;U@vU@jln0*{dPK*YP zii%c@$GE1~oh8@@YZy~1qXc+cM!5GGU7^nl%kC5-DkgsD6 z{Y&fN_pcFJ>=VE;Za(C6_qO5usqOd2Q5RnCI2ZHRVT_5d9{AnyN{_p}0Wy0g6#wox zY)g8-uS)grk2~HNH@ngY$;8iKLcT|**_fvhio9Jh)w=CQp-W6Z{Fhm$f97*6WV>xdyA_p0dtkGnZRiX2XwUVyM(-FL?HS?vhTm7n-A~E> zB!#&5;=PbwFVelEa>}C&?wduP%-e`Q<>bm9dP>uVxnvsc#5pcyl7@RT@tkSTe}v<& z`>}N3-m22o*ZP#d&)89x?%L_b?&z+6hi~mDbMy6~-$h%HAAYg@D1t2yq=t{xeh9+$ zO|a*vf?u+(~!(64{ z{O6*#j+aB%Jw*kh%An((_O9cP{4}9Ia$hUXmw1gT>W}Ll+Lim_?0q6Vy*?_Mx)(Mr z0j71Mp7e_dK7zbGzVDurnSXNrg(ZyJIp4*;Dr0#s!7_WH51%U>!YlP1(7Q%_1@o=0 z)_&lH{QANoKH+xvA#LFQ_!Q0od5^{WbKmcZaowk`Y(pIfndbe<0gT-&e;n5V?VIdV zdQSqs9ovTaJ!$ZZZ7VzGX?qRqX6&0;jP^$xZ$w|wGH5&OVdUqAnfVB8;rB3d^%+Y& z{58tYNq8Rm0NQkH+_>~^>!AAl27d65l>J#Z<+w)-ZBPUo6r2=Y_A2OgkHc2@dj#L= z$zE-7w&Z?Px*uG)ug(FCJvydw9O7PV^ucQM`@7M{Cb9o7<$kBMv7gJgrlLpizs1mZ zvO}C6di{*sLx+8$8rP{%7WJTiQdV}%8j=~a>M^Dioe`;^x5I>p!;@=V-H|F zA%FVEw?T{jVcM@pJzj!uOewI>m9l%tVec%qYgdGJY`cBtPVUP~e#(pZhhV#Uu?OcI z|A;-Z*YN!PnV@rz$13u9?ycjGR6`#fOE4z6v4(kge$d6andY(2O8!v#fSupEaX#|C zTh06FV0>aZol7EbD4%18{d3j{N58B4Bf5Txv4H&&-?C<&;~5>?wWWi71~k?BToXFi zKzYI*CVu`|uJ7j^pl<=T2{a{;$G(NXpog{qCsq$$+DDT5 zwtv>qYv=3da_?L`E62Q${zX440Ph;`8O{3{%wY?o*3am5iqAxeMb6(waj&xS?S0cb z73<`_fXL_Ei!{*RoiiOFJqbMNQ}bX8H|Hqma|eBk&wcb>OL_6xn3se5Oxg&1Wgo;{ z#M8%)V{boy9~NP+P(Cks>*hJA6ZfbsaC_8lf_+It8DE4wS+4E$^q$w@E3|u21RF+C z*HWf&Z!-^R|KEn+J2L{N?Qi!zrkyx`vu&{F-mXH#ZK#*-@7E@NRg5`Y`=t@?6S8~z zk>BxKBe%C7_uy*Skk) zi0}bEmlN<8SxzX;Im1aTdTaUvBIwc8_IIO8eB5HYD!sE#oS9PXI{GSlKC?iL@OpnE6So3lOmrrdmc

&-CMk^!t;Y#y_rd6|Q);6q-nkTe0YpOYua^EOK*JJazhNe}~wGDNR zwe#mh?z5F>Y0cWY$bGaH>6UdO?}GVr7t8^jqp#$qc+C^=fe5~GX`ZmG9^bdL+|Z<| zUB2i;bEBGQX|%Skt~R>9rg2@}1bz@xTjiyA#59rz@QGDp!?K2!#v5nPWNTL}n*X7h zm2)qid!^e*ucoE$Vth|&ieZaA6d=eCIruG-`^2Km>4@(@a#1ha`5ors?4PUxD+$2Y>BnZ4%HW)vKra=8Y=>|E%D5P9^D~1MhJO@609p z4njy5+FA2=COA@3HFmvA`meo9deuwgBt4SaClr@dUil}+BA};sPvR5mqjaCs3Me3P zk{{gjF6jfdnRin{T-kY;2xeH2%^FhA_?#ack)uz=#-#7X*c zvT8#Td!%_*1;VhPp!75|0`WQ^t1F`%z$Iv|(gYAyNo{qsf zW3VGJSdlce)kW70v6!xrVliDu#9~Wg`02VLN;e03;GV#RUU;aFy#$-D?te!0-PjlM zv)D85p1xcA-#g&*1HUkM+tB+@xo!;T(>u5-$HCfD!XUS z=~oKcMxlKQX~;~6dyy7y>pv=;-HJ3K|28S(+FSYSzL{;=YVkeNr-ha;pn-oyWw^Ja z>}lA}El(>mR&+ZNmZOO7G1=_P=jqos^&m=SHJpPRSJq3{J#l_-_5kgR?Hv6kpmX}Q zXcF|4wO$5lX|I^Q5>X=9E0MAumU3dlY&qFs5j%Nic6y|Klyy+bxc6r5ewCSh8K26O z(tQ~RqTERO2EtGuMPm@_S}Svi&9nPa)@E9pdM=T&`$!if)9jK7k=~AXN||2XhnqA0 zA$9A36MFaXn@3W|4k@GS_YiwlFuev4I}~8-GtT!BSKybUqmzeSNi&wjTC*VGeq;;_ zc<{dH_MPp^tvKiOo8t}O_ljL2wA$CH1NW<7uvlw=(bii6%oR#Fd>hQ(%^sQOQ4u`! z3&RlDry#1zz|%4*Qj0OUxhYvSJ=pM0G8aeGxh=;-mLWK4+LlX9b@AC^abo6|G9I#RBl{A(sR zoa6j0A177Z-jm;Qra3j2iJZmlF}can^DD&s5Vx0Pm7_l+pBPBoo{>`=J)X)1foob7 zL^o&9Tsw@;;F>te@yW-TAGbH;L1+InwRlb(w+H0oj{dA1Iz5To>+ya^f3}k3#BqB% z-t6f4wOM{h<*Z`n^Urkcer`T7khnb>zvk>SK7szcJpAL1J|8DxDrc26U-U{xKQWJw zr=OIEmpb}<+|%7`h48e&(EXZ@9de6d-{v===s8H6y@WdenB4nXB>S#?&&Yh zqo0gRRAH3G^?KLj_+)V{_%jd`m{q@X$F~Y4%fxr!l3$ovAv8P38SeZfpMIsAZ>-Fe z&*jh8QF6m-$3Kg!{$F(MlEt;uY{&lwJez~4z;={OU zDKM)uZ_W%CK~Hnyl;NWp?{V}i^fV_<;s2d5yzcCrkMp^4 zf!R&X_WYE=mEY5jPm`YJ#3|FiG-IcuU#+K^_`Q87cWvgpT2iN{h_B1wxpvFaE5YrK ze?HFql;NZF%N%`{zv7-gJN_u%&-q(Ee!H{VjY<~yc@|fKyIp(b<6iE~N|uSQbM*Q6 z^98ieM>BM7nH1}r#TB0E_~hdw9Da+EW#a#K_Su*@*ThwjI~Wo)=y>}H0M103A#ooN z3^w<*`oVa?PlMt=#`R*bxi3@v7zhWuRd##{#kV*{esR<-gA9c}5e`fo_UxfV{G+|>#Ce>s8vsRaC_1U{cmu-i9JjMwKk z33ez>sMkFSe0Jix7FXX>6YTkk1pR-4aVCxr*PMyN8xnB5vkm_|C*!y7IV{dzO0dsY z67;M|px^BHpPS*Y&l)!**x{N4d%h>ZKQB+vXF>x1uOzhN#R>TN33vhO6=&z+33Abl zvGo6%fZv|LXDluiadPpVek}g|1pa*!_+OV`|1%T#-;rSdrxX0)eCH42Gyb4!Ab!u` z=VkDxB(>k++2<9z1%EH%!O^4)z5A~NXLsWlXP;Xzp2y*h33|3C^t+h}cKFW(JHX7b za)%}O71!Yy>|Sk00>S+UgSbxu|Gy>Z|N8{`!O(xOc@Cp@bZy20kT zina^yqy|SHAgK$w7Rf6KN%b~I+{?g85kc1N3(@0 ziuOs0Yna5f`{j;)Zie3d*MhU!gnsdK0=_MQ|MUd{7iI7YNlit&3^u!HED#*ug2n2&Ex}JN zOTd4H`D9#u?@qu6CGh!V0{sUQ=(VDF&)M8n`E_-eH!Q%_e%xc}i(1&kJ>{cCdP;BQ zZr8#lCLeq64l}qw{Vi_!BzmqVk_6;Nh*Z za)JI9R}$)PajU<@t^PZ;u!;W>K3_BCHTjS5N%9}7e^2U_WY2q4ImDKa#d~5OOWzYd zN%ncSe3I<*ZuwaIl#5M5|DPr}`@8jLzAwVSy|}DC^&WQkwSOsA;XDp6F}RgmZg9?}HRybYc5Vcy z*VDAn)6N#JG<+UaCWxyA5Bbz4@M%flbEm<7VEDHs;GEww&^|x(Nq5|vfOi`FF++dY z;2j3XpCB%f|KkQPHuw_;A0v2ZhZ4a97U84x)8(9Nb22Es;;n**dTutj)pM)Ct^aQ`_!C}~JGKd~`l#PN zD7fmQ_>O>H?fFnZuQ)%ZX9)GzHQ$L_{hv1c?YOkh@VEGW!+*OM<&I-;U(67;SBc+^)gIj(0o)QD?W^sK-kNCfN5_dde==U1De=mPR`hPcg zvB7_A@N$Fy#Naaw{pWBG z6(1;kLi-mR+}eMP;N)-pO6RNOZ*hGuKeWGX-)DSP+;OXc89IPf41Q9iOe9+D4(C z>I0#k&kIkbSA9AKS9-+{2_EWs%-~iZy`Cz6wU1s;mA~Res6T_!tK9yAE4|`F1rPPH z*BxuOV#nR{x7X7#f|I|+%LONY``k5caJ31cT7#?22{j7NdRhL>f`@X~3r@M)CCy0v zHso`s(1d)fKU+TAgg)fcmcYmQr{yzL=&9#_NScwhXUM-;XhJ>hIAfo?P7`|aw|+H4 zaPp^ZRbE>R+_t0bM@xjB{9l$dBkdQ& z_Z!^W=a9kMB~ALj7`(&auNZuv!T;Of&l_B62pu-KrU@N2_^Xn35%gf7K6d_N$1AI+ zy)UqO>im{`{_0t};~e2nf3S9*CwOT83c<-|yWwN!tJdFIgg*2)oyV&GXusPK(0@f_ z==@gc6}R(S>u+0y5B0SE_OQWUGy1n1xz-N51rP1eVfbt}d}c^Gv}aoIkk1^!si(c) zuQvGWl4fN6);^EgZ0POy`Jln=bNCK}zaeQxdflf!9R@!rY2sF{_O-CS>f2#`j~PC8 zeAeqV`CI?d>viZq13|~2{-FM&{X*%#>&c=K0lnh3zgYjV{l)r^y&trCriH)CReiL7 zg?eiLQhL=#?<;MSf+gX|n96UNSZzprw&-RA{z6<;8@(yKld0lnf& z1P|@0^E$rY@+YIu2uX+bRQW1b&x?gVwC5PXm42_B+xY|MGm4i=eyHahgXh@O;D3}f zqXhR((|eO2I?@mjv|s?B?o#Uh!JNL;dY_!Ro)o(Cb)D=plpKdhIs&K1nlr z+Tc326Vka;*p4bIw1bun?Qlf+E4|kDsNhPkcx3vi?H4-!Qy*)GQbTXA`_qI!>FvBo z+cB({wxjB)?Ykt7udN2Rez;9=m8<%+39j~3{K0@; z_1O{7EB>(Hw2#%Z+~CI~%}DJT>ZA4y^{JM!g7dd1s~Tx*BD2Dj~X(BM|jLxQW^k#es6NaZT7{YdFmpCeLE=@nO7h3z#E zc4Q!K_0)Nh@>jWIgkJe8KF;v5^90X5`y58;dr3yfXQ1G`Uc9Y^5s#2G_0+yksF(+Y z5Fg{=%<~_WTOxQUcZT4UYxN(Oz^AkuKGetRul`S5ubE^~FML9LlfkieY9?5JJDx%P zdNn*HpI(MOEi}YWFu3+R;=K)CYv@ljc(cKEu1?5~KYa{+o1yP(@Er#4XYdY#>ztp^ z(+0Qvk0#*SUaXh(lX63EarHOS4>tN(e^VXE!tzfUdSUPU?W1~v*!sD}m4yB46M7QR zTU<#<{~0|A=q;`!r2l6<3Fs}ZcEH-k(RGHtRMNy74X*Z4dW$2nzdNJ~QL z*Gk?zgI}e@h_zoR{mnwJen`B^&~G+;sOLtZSN|lv&J9SqJD|T^=sOI~F+xM9BvhX} zCGU{IExom;{pvQfCq6TAA++Z&gnzN*Q|>87pR~bQ-#%g`eLK{Dr0^=1vef^b{9#m#{+2$}|Gh$Q^|$m^|C`@I|FeWosQ(8A@2URj z82xQ~h5D;ptN#^7Ppi*HgO^B}_Po{L#RjK8%oTksy=~u$fPSISFEP0F=T?K0|CK_& z$>1kQnvvC?^vi_4n3)LFe}rH>x9z1oiI?(#Kzj1|tdt4)e@XCS5+jh_+CS~kd_MCG zzD&}LEdNg%+}d-q!HXrWdVXE>vGmrSq5U5bdTW0j8_3$~^KR|=S<#JAXwMFj8}irZ zGR0Ds^|Iq<+ThgZKZK99r=_nC==J$dv%yal9)t!O{PU7#6zbov&}WAFzuW84slunH z`i~KMtN&Mxo|`4D{&1eqZ#B5Bug*_7M-x&50o^cEe0QK@ErypX7EQ1KHT8@41TJ?4;ozSPUxt?-y>;8Iwz$5#Rf0NIRo+c z`lLIS8+?qx^|>qQ&o=nghW;FbHyiw1gWqQG@dnp^L;mL({FtH7ew~Wt5T&t6KgrNH z8+@|CA2j$>gYPr=bb}8}`4jSgzrnG;gbTz!U~qjOnE3eyZ#VQa4SvYrvkhL{%b$?X zT!ZWTw8SqoxV|4te7?aq8$K5s{3(N9VsL%`lYAB$T;EF}ewo3wQxRWm@KWh)#4k7a z)dsiM>t=)7dF*WlxAWDl2480QM=R@AE^EG#i|Jz({i>#AEoCdPTKTI$xf zOpuKU)-+r%%j=sw+4>+MFL%EJQ!L!tVCLdWCssAI)UB+-9t)}plcr40YX6RI)}>Xm zE0<`IiiPtpt#l_jh3p0qF}az|BRrc$i$a>DtrQ#`G@zEVF2A7alDU_}7d0C+I09GK zS@SEa7FRBsf9Zu;Y$3L4$U$@JF=z42s>Sm?xoIoxuW)_j+DU9xThmg*f)my>O~^Ib z+Pc+MEiJKR**!F>5~&gm(M<_k|87WUb61G&G>}~;lF4#61*uwAA75+Tk)o=$?%H?? z+4n*TXiev1>?6%h4Xa?wWlbwr)-mC_OS0`7S|&6$EvspSlgHBLcxku9S*Lwx(!?g~ zNio}QJ)!rF*Aq%@K}+j;#mq~uq=8&|;jD}1&aTYb%MC?A(`JmRnbt6#4aS7I7tUQ2 z@OcNr_+pn{zF#hS?*=Hv`aLYA~S zP8{uWXrHsiP8^YCnB67EP|9`5Zo6Z0V>ab6xp|xIm^>+&mFcXHjbhyHFjcD>YW*fb zZkL(0dbMJUT-#W)e61giG4|?+joOx0Il9aaM5R@kt#i;K9wvk3b*t*u)U-6MAy-3f za9p8CS+{0Q9+lse$6vGq@s1&{?@k%F1x|ED#mw0kee)6inB3Wnp!Zn-LR&irKN6FCZ}OlLkk=<0M@qDv@|SpIJhlsSXH)k zRaQ3Z=6n+tS|uA0RbAV(W@VOy0^>=vMo#dmb&ZWNV{KyBuc=+yvNXAbc1tB&)znfq z;lfKVACLMhTM=QnqGyyfExpcnJvW%n+>Nt zW3b^IR7-im?#y1r@)_k^@ME&GS2AVohl7wb(VZQkRNJMYsgGr{8qdjI-yDUjhPk$c z#j*oUmb~)Hin(4Gy9K&L8M;QcdFh>Q+b^iJ6y3jJRdY?P=`|RDwZU$xX~euq&sO>~ z*|TfHvUl0NCt%7}w`LVaDst~FM5|{R8#===nt%&TUDXI>c+ z+}O-Hr0r<_N@e`cX8KE2LT2XrnDM3jqSg&LxVJP_IgMo6yl>bjLDxoal}? zfN+u{bjNZWLFkTU?l{pSjv(wGu7wDXX1HGoc;@hUw87~gYt3m_lbOMCCcZcpHO}Z0^;QB^W5&_ zzuhlhzCL`j^*=F2KHqzYlV97z`t!eyxcbkV>ls-2ePZPQHwwqeZ|0R8Mi0czayspeEuG`Kc8pD$=@VGx@-T(66#-cfoEXr ze{zg`z5^a7U;hW_PCma`h_nARk#F07P>lRfC)mFYv<%(J|5SqgTVv!80l(1xUrn(8 zLr!}4@*haB|K1q;^M8|2{-njrtF9?Jhqg8Z~R z#Pe_s#fKLfhB`frMne|n7krUd_czK8O!OYpyaG4judk^lJw`yc9| z{Ld!Xe}ov`+J97x{O=~nKhi__|2si`b&UMcG4j6zEUx_>h`jFl|NWqeYyTZF^3RNs z|4#|+um3xCCx3K8`yY;xe^!kAy58~i*LNgz9dHzNfpxW^8s+2aKTZBjo5zbT0_PuR z<5$EJ1fBm3PLMwmID`Ig>d(9^O*1|zL4NBZPo@7)QvNykh4TM7L4NItzWlME!og|u zi3Ir-^5;FZZtRU!jGyW`JKCfxCNm>ac-YtK+TKn^V_E7#bU~%$CayTZpS>;RYkb;yy8^2Kg!UXvha)Gq()RR?M|BDjj>()K`&OGJwmN1n62FAI#`d4zY zjKJ~HhEV>`6UL8bDX;RBM_7JQLizPQEPo(D|5hnqp@Jn2QL_h11*iQk z!cXfX%@a+;%WiS@+b8lDNO_Gy`QuPNPX08JKTir$K6!=m&%<>(PX5T#d_i=NoDj+% zi}G>uTVv{fDL94lKY{B@ocxj=%5O#aIQb99$ghZzzal|?c@O1Zn;^e4Mn0#MVg0X2 zuz$LT@)sr8f8c80Y^6SO^Cw;_LirD-y!{d7gbI<*`GpNyUa>EtV4VHaG4elzLRwz^ z{|z)g+dq`QN#q|^K@w|ugEFqlWrXhRws@C?6-kVyzc!>(421DF4!g`tR*w{pTmtzg6Vh z`q#wB|5-x&r}?k~p}YG3IHCOqw)pb4{>uP`^&go~|MeojyY?TRQ2(^ZxAm`!k^clP z5OM8)xQF%s0m{d<|Gt>|^Ohj2|4RVk4_$YJK@(TPR!Ty`qc?#S9oRVvK?SIu!KCb?q#lC!Z{&yA1$JM_hM*hke z`S&N(f5d1nzrshEqw24~y$SU{Eb^;`koIrFPs?ll-%jwqdXe8<{kszUuR=Z^v-amD zC6qr5&!^(--zM^_QN{)>uh>A8kF$TP$gdVc)}KR?me=|ZNX5(7j|xhpyhd7H&-?${baH1%8ae zarV~*n>vJ$_5Ub-T3+k_0ja;XlaNObi~KzbNK9QBG@dH`$D`R}!KqI)ACyX8!-P4Ws`oySRV2GP3E!Go6q{g z^5;#SI(>3+Hk4+Q#XjwiQ_9O-PFd-+a*tH^y=Cr#3knOe7Ae3N`q?u|_n~C2ru05F zjc1t!(OWnFVCNfG6zn{*uyE&Fspzia!l?bVRJ7|zYSgZhsCCgWTs|KujPBYwc<3FS zsUf@GNEMA8eL}hm+_s>2`JvRPvE`sU<@kwHqo{Q-Og*$1=WvOkn_k)QOxtz!yN@iK z1sOAUzIF4HJ33NT&!NmNH2LOp3ZlElHq`H~!Y0QZcuZI{GrDWkycE!F6vqUonHt2Dd71WblqDx47v{8RUmq{VTpl9W<_^B_C)mRXz<2x zKlIt_*6sdc?`UFiK?GStb`?Z-^44q%(+5&R*>YQ0547u0=rT5}19f@5U(}^`>nzCH zO>MTL(A!M)puM(0k1vWIv=>}!XsgI+yROCA>h*rMr z_d*+=;M%wq_Ifkbd)Lv_320BYb>XhpVN2H8w#})q=XCglwh{EtX`>-0wJv%L`ad(U zb+ZC+0G8~bP2{~XYcgO5Gazje_AkVV<(OGD=k>XRt5I2DyYIX1l~)QR| z58qSy9Yd1!E@X+P3b_lqyL7dBJ5tWPF=a@77JY|8Tk zsnd47lp4P4U}}VGdu+Gdeh{=T6{fpXruqtHVQ`Gq(bf@unAkRWi7U2zkd50`odm_?>YbauVZ2Bq64WRI3MNC z{rE8#eQ*x?;%xNES?HS_5C7GThieD>appDnlJfo|WOa(ojyZk3{pcf#cc!9twflk8 z$Xzd{PKT{e%h;O!pI@huPN$Az$7AwN_xk=lF7Gs7x0jDk{v~uyS zy6ERTAJ)3)XNcdr`G**93fy>uae6GrY1#{8?&=1N^|T2tn?s#_VS8uGf@rcIi$A`I zbT$63qb;a|qhp^tvXFLr!rATktpz`S>*ip5yEVG&%~T=e6<|z@c0G3MsH4X*PLqEJ z(tphYKI})56q74dg)A# zdqdFr)y`u78qOHDz_Eh?GFOJdPW@u;F#rq=k zAImars2AF|y`Wz-Na@;~j}PCq5q2WY_A{fOYoA2j%eUWJb#xL}w*T%XidsH@Y5^>%rwVYpUief_PQXYE8g-KE!Wd(EW% zs-4b5a1HX;AGVpw!x)0}P}s`boHmr}vy+9#3#*y`+KFG}3~LMW+;!SsKf~*EN8hMD zGj9mSLXH93mqmAxS9KrQ>-6*<)ul6LT7;>eOg8=qpDJ zidJt-;W}NE?t=VRcOb75_9-rmCS!i&`Vq>yF-yk=j$Mu)#;pQeSJi*}f?jojUgg_Q zPIsw2s&UT#$iAubqg=cHaOZ32cbroe^-6cuqh6%PU#(6D9S?3PjQ&jhUUPFE-><_q z>+Hiei#SIa8sXBT*@SD)Jm^zj7v zG-cB%poP!YgLW_M@A6KGx~h@hh&-ONU6@}49g4n{?%Lt{n44GPI&=PW5&HVNXxfz4 z)6#EMpBB9Z`Fm;#3-0>V2h)2#jyS?Rp?+|*r{RO%r&`fZ>!~yPd(j~9MBD&do?kHe zy6tW(&GKeDYa8kK3Y}uxduB1l3AFh}%t^G(Uvpy|`XlD-iR}rW+Wq|W-^&`-hx51BSr?%+mRD6R!mVSY@;5^OwQm!u;Kl*=B?(vkrwj5cQ+WFS4 z7~A1z+lNFye{nX)_))tadverny{_zdvTFCJnbB(60b}M^_QeCR1;!7!%d98$h?--Td!+OA1D_OUK6Qar; zxPEk^{?tFzo!3FO+j-EHeDRC*xdQkbeXamLhyR6#wt*+W z@DF0Fzh0-HV>!o7;Lr;PS~Ag zsZTZi+d8f3{dV{@OK7E63NZZ*FW@h7X+m7pcwbmPT$tgLP}` z#_Jcd7HkxACy zxO5G^aD(nE>&Cke93yWtqNS1lR@ae^ci%#0Kk?OyNA4Rr@Nt#mdIRo5 z*cwErn=`SKFn(Em9lk(~X0EDT)6`H~Tr#nA^5nA8vT5Ur&uw1bgyYht#uh}4EjSs! z66P3JytD>YC~jI+yrz8G)T!lDYtJcO)>yM@d9i$RTRd^((}{TeGZ=%O9NA($v(5wGxsJN?>e)2}VB zoj7I6lu5OdODC4qO@}wHx=BpC@R?So`Tc+ zk89e{P=Fb^Wx}g6VrFR!@>Gj#(pDVh*?|uCXEBlWsT`(Ye=Gk97_rh;Hp9R8e zn#84ut0jFW<2XKzxqQZfi~|!xJrA~wmpm_10)nakQ=~&sxpR=-?~o{JWrvzGpn6IF zGpbepd-`tefA4_L5B$R5ZA0%r<-QSpQ!T0fqpFwq+Wd0=fBov$&%f}SIsHmd6xS#h zYI&S9pm<*YGm6RQ{@(W$6)xyMs(2ntz3>~#ULdp&GltB{{%54E%=-u2H!#&&08y1H zil%exOky79LY}=tYoi2hv|H%cds*4`arCJrkRr|V!f(ca{*chmpcJi#t3|C;;)UOk zufDssC7y4KhpQK7!-Y|%GW4y7ybaw~k5&FXYHDrMT^_;1PbXLejT8}Cr{ie5b)mzRogHyDH? zMFjHk4*@EO&dN|1XHujN9>gQB-SNrCxt3Fbd)wPHpj|YiA}AY#FF8K>ILT5Go;C-e z+0p0YWlkSA^opa;$36Y2dGz0K^!d1_mltwOsrwv# zKJMwyFqA%doukjkJ-xiJU`kav`h48ek2aJ(S?TEWaZi6{9{qerpO1U`Y(LV1A9VEj zxTil`$ujXIN1u;-`mCR8f!>ZjANTa#XMe{;a4DTu@G#dReP|8+vU zT#!KjT!P&B2{_lBjFUSQc8K zADYl!P0p{fL}lfBTlRb9O$X zc5cOWb8wWMhdc~<4Euq{$!$rn=Pe2Lxxv|Uv}cN=yZ1o+FZjjr|4ag(uO-m$NEm-c zx_X_7Qa-r*7bN#4)Qb-S@=`F7PKR%hKWyl&p6b7${v0eG`M~%Nc?<*&l7r;J4^EP8Ij6We2L+2?az4>1No<2${+N3 zk@6oebazUu{1xA3_{=nX9u!>poG0fyBvw9(>wJp(%rt!Td6e>*DCK#-z@U5-e@gI> z&wjy`&m=j2KH#JH!2~`>46ZhIiWItI#;=r5FTqt$#r1g@^_=aCx})ylHv~BSaJtCj zw*?H!NAWR&hxIKD^ig`gY!b(3T0mbUa%Tkeiq8|Aa;;xg1bpTQpUQxb;#V6!Grel= zsL%AsU&knBtT*&_+~dnB45XjylkWJS;A&5myF+lbr{e8~&jp6hqXC~wrCuEYAI0|? zKDJ)_4Su2Fe=vdnp#=U%3?J)1#{xchugZs%kF>su<3DT{LjM_IaJ?3gaE!s{`=ahx zF1XrR`A-u(l#Bn+U7%cR=c@xgs(y9ANAX(2=OUv|eZWVv8UsFxuQz-yRuJ(fgD)`n z?tuSLQRvZtzv6ohpGyp%XA|(w1RM{CU7+3g4W|Y^-(XPt>-gMXaJ9eUBMqO~zNkBn z3Ha#vToUk6d|CpZbihZ)=Q#l%#VZr|3>Dp2-wLB=iNS3@vh%CU488g=`PliJ@+5BO zdwSgt4;x(PSJeM1gO9{H197zp&r1yc z5dsos82lOq5%d0(fqbfb(j6NOUTttYU#c)T~y)wH+1TWcV*t5V79pQJ-Z7 zFP1cM+rHL6>kR!2Lw~Ko)sM($xxv+j#On<{Qqo#4?MuaiYrPaN5uAKxN}5r*!LKv8 z?H3CTu6n9mwT1Q)MtS*N38QN;!OsxH1z6A%vS#-{c1x$M$*LB7~J}2i^1m^`gI1k zes#UUTMfM(CpR1X219TCVZFg0HS{+c+>U#ER;Iz)=Vk>FFEIA8?W^OPwwD%Bdun?r zuJ?&bueQ_nRC>j0ja=Kl>kXdMz9J}WU+ve#C#o`t?f78*!O~AP^tOFJW^miSw-~%x z(v;h3a7`1p_v2d)eZ8SqpCrANn>O?xH}o3}eyhRnG`MX?^($=`Eu!Oecod2&aYDv^;En* zpjZ8M-lFu1w-|kFy>2tOtyifCqMn~rp@?mN+-UHt4gDsAHyYg5SNmO9UmcTGe`Td( zrqZjwYClqX#nmUncGUht+}2n71##PsMWO&d>Ev^m@5}j!0Dnr(L;8IQ^!o)b3HZE_ zz~_$%eBMalqo1ITlzi?zRw!vk6$Zy&ADK{VaIFiWtp@KaX-0buev-kTH~7g09|JuY zsLvpubVt2T5zqcx7e#j(`eBCtQG;jyy^5lj4W9is3NPhK<;nka!)K1cv;U@L*XSet zC_}%^(2q8_KIb9*nFiPAFvQO?IJZoYtt^`S7HxhLh-Ey(YW*&jy(+k=0^gm*9&LPK zltnMbb{-CP@60+>_5{f8*JfXf<=z^N4NI4`tk1kH>tA8zejIh{m8G0PzU;mxd0w}? zy*ro-+O>7qwxiDNc9y9XXx)w{j6uT4Z)LV{@!|zlZd0-c=ft(F=k05Cs*@47u8zc}L3@=N|UP1!00$DJq*}9f%r&Tq#gnI^MUL($^2ri{| zi=mvYgv>T4)=cp)Q|Geu?=ss`P7>Y(#$ryUTK*;PY?YwQnkKxwogkX;buV4T9gFbl zbaS*2Ta(Z&u-U;fyu7?@r51EsAjpn){%!LrzPOETnpW1t(det_?@Z-hs+L!{`GU5k zMpNo8NC~-YbEH_&lu_An>+iiUm>$ZL)B<;4`0IA1YA594MBZ}EbDC{KYL)6G^ zC>HjXoV-|Fo!3d>j62YIb2b?AeSX>8zmO>qc6D;(F#?)1ujIc2QJw}$i>jC{h#-(H?{?8aPQtE2 z8J!)S-QOohJvWvttF6!MHdeI~TS;k`q^i@g(3mKDw09Vey97y#;HTQ&42ermB4dvMjQs^ykI@JYMDPKu4p?anCJ3z(G>CxIt1ku|ZO{sR?CdzoFrvw{|5qsi~ciw_#1$ zJ8eu;aq;ZMxI|G^wpz4=pXJP4aN)v5{+tZ|AKzdG^QiI@`M!02D4F50E<1Szgy~mK zcug?8mXj0GIcM3EUfHBey^ez9nN(iyW3*UUo@*o%ODloIMKXDuC+EBmV?DJxdf%}d zllD0I?NV-<#2SV2zm4*7@+(9>ts;NDl%#w# zb)Niv3HI0LPW2hdJ`u|QNrL^4#@N44jQqP3>fb4j)}8%7olyVu7_YCjf4>;{^I?>@ z_Sg3YT7wD)r_mggCzkf&GDlsb$-hVL+n@J!dF`KI|E<6oYJHSBhVsWJ*nbIcvJq_i z^ZqfE-;hxMVBFQNR^@Xt8;MFYIR&CE0*l+X8y;^ZF{`TLCjj|QJm{wWFd-zpEg z^g666gz^U^)PL_ZUqYW}v;Mp!h4SZ1|3j1$DhB$~;v6(vUg0?j{cqoNPeHj1jL*U^ zl;4yfzggsKdGcV;^8PG}u1k;~$;({xgphpBHswbMepZ6~wjRnaPLMw@M*cZ5^7o)Z zbTRv`GF96r@;?#ypPp*G0tu!=J6%4QTq3v7h)?;WmecrLIFzO>-2h%JVnRr(dlZVB zXG#o|^0bc)Vf!WRQMg&`w^anPe*C&j%WM11!1X7TO?jpA2l{>)$H<2N2ZrU(n>?*- zl3RVzA4>Dm9?>-#%O_4O^CUfAqj8_;K)upD;CK?O93uW{5a zm~kiyY{73ces`g+ZXG^d+h=CXS}!cabs$&{>uG@xV6I`-T5ZgA$jA9LaZT% z^;fV?MjGq$aBZlf2VG?Z&zVJLJqlU_hJtnL>wB6Zg7}n_U_^4jd>OXV67qd&Cos#VpvDYfL`n)=|?nU|z%;V=qDOLHvFvb?bQRc)8|Nel>i7w&MD9mt)PhUn9;w z{qoPJ_8iLosoY&egh4iCVPWV9R5H8J?GnT z^tUD8mn7iVB*^^(=d}soH&I#i5e>eeuDgnPPf&b4E=s_MUw*)u? z|J&xX1P$XP!T;28JCF&blHz~r7B3fE=_!vvrmXH=G}0@cW+npVnoDWsJyhayyWr@m z-OuwRfAr?SIU>4Q}o5sNh;JIgL6b5!!+6#h~$i`wc!q(u_t(Ly*61-;sicb}JTK?Vzmm9R;OV z`{+ABO0RgSk!$@Nb0il+yDc!d_0LL!+jkc>8T>R=60y#)$=|-ypnCD01I#-!p+Zu` zdu320Fe&hV+u>gTtU=YV>e_}?4K40H1oIw%{B!00+1CQ@1b;SX|KA5M^XD2@*2?_< zo;&xbs%==i46AB2tg12p-)G9Yzh3-;U--v8=l|>sANN0z|BKrHcX(6Xnx<@RR<3Kb z|6pZ``Kix4|E&t*j7geS$sd>I|C3y1?jK~GVtJ~}pO?vh_~Fkjr%KFUTlm`qf8W$j zz#ljG10@=R|8P(hxA+?W1)GRdV5PPZ|MB##@Q1ir$3W>s-$%X;!D)0MGKtx11?kf~ z#DpB*L;eI5ey8$>10G>{tXuE=IUUgPKNbePzO!$#o<#%^bnG~Qbew$c*IM2c!XcFZ zykKc1kho0*rKJ;6K4)v8{I5bd<%iD_I;GsX!cQa8GH6^S>CheeNu%y@)Y*fU)0pp& zX*x@Vb+6)_B8HaZ7R%eQhJ5r}r%gODLF=#3LKLP=(+Wu3DN|3a7wtz#%WM1Hf%2hj zve12c+a!}Z#+Apjg!1Wm&kyW#h1_QeWmC(`%3XHPpCxo&MU8w&yC{wCe+#1HsY17A z_OYfE)*pPfcotB! z5&Jb140Zc8ti+|4>;IqrYI-Nu^1;3DX}fN~ed2Ig@1D;rs<94l{Y&X{c#m52(e&L1 zQX|G5!upo=siHeh!QKzLRyFVQ(^z|V#4YK&N!w94;ttZH8d!VUueICJ+hcma+nK^T znI}c<8wOzg-_-ff@p%SyI3R1XV~zh^Z%&B@rMYG^*4V^4|88CB7jYl_63!1|&CQ}= zSQ``T^LCsRP3HQj#~}M}_#MUX@2TNqccYHmuokiMzX<1C6Z}p5l$Pai$CJS=AKa5W zUR{W9hHXw4+n`>X@ymN=KB}zoT!iFLAy7??H!ZSZ$v-(rSs7zO75Us^28s=?YptAZOzGCKisd|U+va{r_U)bkE$M5{M=+&YVS{Id+Zu)$m;^?lv@JsFsa&bX=Ptgg{s|!v_ zcU^?>=G={=c8@!u;OI>3;}U_M>&lZ4f5)HX*meSZus3}1MEGP8e6tV6w!S;x!dkx3 z!KjJrRo# z8q{}MH0XS+`~IPCeG1P;i+26;V=3OMY$-xsALMaOcw84Yk4Aql`PQb>iawee0{ZH%DIPLL!PMde)Y5j_B9JTm#jE|iuzaPU<=+V}XZH%$zR*sXhZ@_g^j^dit{@i<` zyMBv3WoVNF{bpf*0s85XT`yq`W6JKpTK1}YHO8+O|7G^h15!8LgP;xmeBf-3i`+-T z^N)bR23?eU1;*ko$UX*tE?#l{QNQ2BX=BNsK8gP)E2+n})bKl~%YnC#SF&6e{0Z03 z%|&R-qJmTI7|u1X3)6efFBrC>rdL!s679=p%ZK`=_uTft)i?bS>tt7@idKy2lfJ1M zYfm5Q-MXg}>xJ_=L0N71T=u{K^eb6IJdJ0vqXcw@@l)wbsiHq`bYsTwT?gEl z;m6HRls$w##y-itG7exoAWz`s7{A9p_i@;NdaHnbGGMS_d{BEcm6hp5V?^@P`y(paiE z@@pGM8bdXCN>3S1n$~04lglQ?b6qlh!j!TYWhche z-qCh%q!_ZYNz?PhCrK`gF+k58EQTtkrSqxc8fMW2vx_HBf!eul9m6kyGRA)Kls%Uo zXPJ1OlgjctLjq-t55-eXj_cBwl;s*IPDKo03>|XM;m`7qk9U**L^t_Qc9Z{9H~HM7 z_?^PPc9Z{a-Q@4>CjZ~N$^UUT`9J9<|LJb>@8!+lJA}`7lmCTo^0#%9@BfQQR^a|_ z%73w&{Fl0^zpgWrq`~jHDgXO!^8eUP{=Es$7F3_lca#5xZt}NvlYd_~`S*8|&pp=P zDYSKyzrCCM2fE4U`*ZIU9_%Ln%iZLErJMXM;X|-Mna{yLc@x0@ah$8Z-mmb}mtdEO z`gJvztvjdJn)T;@>(?8`KDP9wYp!j*{)b;Lz9Z*sQ{DYXzt?N}DX+ZnsX@)>zPHc3 zHPi3?@HKx}ae3Dhhqvz7_PcL>a!khq9~^MFMMeHW|Tfm+`ICuOAe z?|9#wwfm;rc>MVBxA3#Uo*z53?#9Ol-gx8#`^VfnW85p(JafvZHy7RUsV|K0UsAo{ z%j2%P{bwKEJN>F}{&`5p_y<1oo4?$I?eC7iO|!52(n+Upp0<6M)xp(0qru?)hs!4( z`~CYj9YGl@^Z0YAQ@8&7+uwitu`8ec!ed?EIB?A?$G+6M@0?SgA6K{J`z!zXBR607 z<^9)Oan7y3|9jb2fBNUg(`SF@uIoN^$@^Ye-TUp87cdE`sf zfr0<;xFqsyc>DPAht@iZo*Yh$-oIelxR-9){+S00?!Uft%8}Q9bIHfPAKiUt*W`)+ z^88;`Jn`|{7Z0EG+|cJf_xtNV z`JrLM7r+0tqm$-FRzaq3!7mOx7LB~;hsP>^aMK-i4;}sD#%G`X`j6`VHaEKHbC1-2 z`t`LX7t}UB{iS=7Pdgb%~KDgJJmrcFtM}IFfIv&~Eb@n%& z`SH5I*@@M{j<)82P+7)Nd?{)1Z zAAUWx>3h+l=N~RV=Y4}dHfrIkrU|UE{Kv}Z?Qg#Q*Ow;#^>dx8|8`Q>)^Trt z_1W|JEMCLp_x$1Z9V1@bzI}z)kvN~ZlEg^WB&5GGl{D`nq<+2d)d3w>{P7$A^zcUu zTfcjx{ERRE{9AwOZ2agK&O2}Awhxtj^|qPI_6_^t?d9o@@7nZV*PM5s3Pb$%KmGOC z@RJ)ZxUS`exBi#<9p6=TRWO7$2_=7rXQTgMI3e0T_o_*k9KQFrrN>IPH$1rfj|ZFA z?L7HobpyWh-3PCZK34R_zx*HS-UY78V(TA&HlX4qQzUPtqM0FiK}3Z#-QFoJ%}ZHX zfP#XectNAQL02p*O)V=kG)o~XO-w9JEGsiByB;e~VOeR~RZS_4|98#I+I#J1KaY6M zd;ahHJM)1(^L%H`tTk({&t+!KdnLZl9lQVf?BusiPL{3TcEdNj2YoqmQtC58uO#CB zLmwSYy=(WcMN?-!wc(_{4bZzgBHcDMe&A!DzI}Rs|4mOlz2&)wCM>!CO<4{Ki$Zv8 zaVVzG{asS6*4=f&Ha>TvcieSD`>o&nkL~+jxwLj---}09mTazDXWPV*?epRqEZlNc z=#G!Cd%b?E__(~!>W^;La$C2t1)EM@{MX=CUw{8z-x-BB))<)9@6-Ip?zZN}`*K%- zhO5d;f9=`epKbe(9vyQ9*F}^mOCW8)734hKQIzA~3D&snwQ+MR_P@GrWZ{^l@84Uy zM#vMVzij`0^yfGHo_|xrQ;n7-UH-+bZJyqle)Hp;zV=L`lB8$v9?@j^z`YOs zRqqo#+6-`izw*NV?_W$R?7sb@TNdo?+PgQ8A+e@BPj`8E!qZJw-QLWaKVkgz)py+f z-a0(WJF8Rm!G$|3rH-`IpWfK1SL}+CALqi+f zd*fTzB|dOphYz2OxqH`7A0LhRrTE_6tzNsoTDJ!`yxsg*)blx$n{^*^|C%S3-EgvZ z`5hx-5=Msne)IN`ZL=;PaZAFqnYA`|ZS>VukF;r*ee;TC+aG>-f7?^Xn{A7JJaYEo zFFG~Y^lNEZt&|P#H=CRPqfI94 zd9&?w)?pu`!@VmCthN`G4u53N_(q9wcNG_Yk@kwc5xenl$N$GUoVKoA+H*_lgBLyC z;^D_z7QTG9_vck#OuOl^jTam%Et$XQ!QW~gxUNa!wMXYJp4D(z*|zQ*w%6z~{p*4& z+Qt9&OaB(1OdN`Dpx(Os!RnjC!VbT;qUXEgE?!#FXL(wFVzpkITAqr2F=gV_SG=-v z&@H$A^1}_$e>dB4>8i@LUv*B}xZ~~#eV(Y8JGay8-)$S`X`I-0Lhj?;%fd$Amt4|r z&V`>ZJJIjT>!0YC(dfl(jV|puuHB>uwHJV(uv~t%Mxnt|q|7l|D_dcCo zaqG(FwLgyis$s_G!+&1&$`1#w%FzVTl1~AZfv$Pw_C$e54?Zb{a5|`V5^53Kax;%eyg$5yLBFP<^Go^OxjiP z=zY6qCKdHvFZtd+W^bomz4|Qq!+W#=>$$n<%Llucr2JZ1r>t!KjN2Yul9zHS?!r0q zL}DGzQ^TJQpEdUML{C=t{lCrcz4x;b4@b_}J+CSZ8y}Cl{)%3g{(H*UzK23@Qv=aQmUb3-0XLF5$(RpWl1w zlxw5jY5D3cE84W3&}0Aa$F9G=@W(Uvmd5^Yljo9yU;bG4?WjqGr#+vq&yRa*)5xzT zA5Xb>PUZavUy)Klo)6X>x}oo_pG1}=wA?x>YOK9nbEfAseCY4^sV~>Md*(eWm(2Kh z`zp2MMPZbir+&}9T$fy5?a!FlaU(Vye>e2AHAA1SbBQP9lV$fd`uvp(o}1Kje8vk8 zHh%Tt4?eI)FL`{`Tc0Nl-}`;atEWb6cxPzx;Ts#)_@$$JbmL^UG^1UzW9fYN4AZex$K^;>CLLI z-!pvuAKl;Y(eu)eQU*6Z83ec7AQZTqz+h!;u4Jhy)T=kseCt+?yh zmff$P9(#!@BgNBqk3s9&GxQ~^yR+TG2b2+COqgrW(H}=P-Pi4~e~r)gNmX{!GKOjZaled>z8jd9RKdX+nYZ4Mnc8F z-s6@(I=0~#V_W)p+_31Ap>4e@QckNmoOEbI_uRc> zce(eww;qrFWdQzXNAG!h|FmXdL;5|kb@$xkk=ffXd8e!}ZEo?)tM47YzVn+|>wjHX ztK;aT;oXuyi+p+EJrlOwRC<4MQuK~1t&s0;?X~L9wog1H_;y^eV$sB#4*eGL_|A1Z zXdEF|m3$(-lzT~oPqY6#nw!x)qvETQ?p9WI?e>$b}ef4AU{KYGMQcWCj$ ztH*n-Y1ePUAIDSk+t!@h?z-`>x4L{`%%4pV+Aa%ycE|AA*Iv^&X5ad- zm>YI~^iory?yCj4cm@BdEottd-gZ3Tu|fX`#*YN%e!;0f4AMBq>iWaH@~>$t4j}jyY1rF zFYh;e+vD%YjTtfbRF^lt*m>sBQv;etrZ#)$^;`QlX#dlLBStqH@pi|s%tvkVO2L|-(JvVdf%U>n#z0_*<+@WJPUGmOrHvX>Vi8l4~@htfr9Ho`eceN^tUq<ean; z)tW91P8_-Ii*ZfruD`po==j6OW)#i2r*6rx@H>}0d1h;$kDqUHk2mAK>;t`e$1fdG z^7x)k``;_*pO~M0OUb&2HvIN%-)(ar|7-ZZ(qZ$r?tJjO?ce|I>Gol*@VPJlaBuUN zde1!ecD)xLI4|*=>h&Yf>>b(v=taAp^Db^Z@77CisnNIcr}|Ux__65i+*^y+O?dm` zVf{bM?C{_LhjKjg@Qu_Rsf>I(*NfkvH{wb8&sH&wsW24*5Ijsr8x@spSbr zntz(I@xy^%=0-KBKDf#6b3d9rKCk%XywYa|zQ3vD@8hlFLx(?n)8W57FTVBH)jj82 zxzKZdeth_I^|FT4e0OenZpNMl*_EBI|D*M)3x66m_La+Tzci`m_Hk3c{N?snV~_kC ze$A-D^|wCX=b6G~Pd5MI!V8}$>z};-qc&F^?RVN&$@H)qcs`hD-O zFX%Y6=1(K8D~Z_fMU#1(>tDR?<27v;HfuWd-hozwPBo4WpY_HaZ(XtAf;v5>h1Yt& z+KYv+zqabZAunBeZ-YhYzr3=j;{5xb$-ipo<)0i0Tl@AuTfHCMhW+~!H;ricYrokY zH_tgxWB*6bb||R(OwS`@KAl~X7_#)sca~hf`JPAq96Gpuvy0Mx&G?{y<*H{d&)>YG z*TjN>PyaCYw;|ttIdAvhb+*+zbf`^veAmwg6#sJXOWzFq-o?rrYYznDlMy+T5{oa6>=PGwrHo0)ggya$X_7->ST@b$KlIN;rj`_IywJRfE{Ak9F zA9u}}w|L-9x3}2cz2NtkSB3BSd%%+LQCGkI(xNsqw%@d3RNH75`K#2I*NiX4|9rCa z%fmbG@Ab*|FLZwAbd7goAK19@osa5%Hg@^$DV@Wo&bj&t>xs8A`n>So%9!t;&ig(( zzp`WdJKnlGx;W*!QI{tj%Z+`y)BP#k=YJD7wg0+{2fw-G-G4rCMMcAUYvX(G{&CsZ zt?hrh`Np-ET)whahu_}0|M6X$=GAYs=Ca@4-txnabywedddcp8g?4{<&+*H=LpR^@ z%6I>auDNY&Uc-|Y=f7}p+rAE;r`^~xuEX-d6Bgh7(^FG6eco_KN%t{7AKzQ^!OHF} za=+R8$pb?_%$T)!%beudlZFoTPPirG{w}R*ZryUK)ts*qZoY18+|jZhw-ZD(cilJ z_b(3gfBll-CFwJ}&Tm|I)%A_X_vx8d_x;fkx%W2Ovg4KN@4o)*->=+#SL;!4PWtM} z4Kp6V()WrxUb%Mq=r4P&eysS`HJ>fHJniJuzbAi_U47Gq#cdw>b77Y+ZW=!5)1@a~ zJb%@$hr4CnweG;H*Tgp2+%UeZey0nTzYzNV;m;Shyz8}JT2A~&v){k?`krSmjh*~K z#iUp7Uw2^H%gwD*8{?`d|2fx3l<6P19h3K4>h26t^7ip;@u#B?|GDDHr*4VA`o*=Gde2Ph9ZaLl6IR>$cukFR8mYZs!Z_S~SUTlKfcMfC-83EP3eL+S`90SNp)! z8~e}iJUHj=t=+n=I{wG4%Wv5B{8`;Pg!3ow{|1?GP6gosp9>W%}hEJL2d) z%Duz*?CkMb>C>}kOdFd{d!jn#WM^lM%}C9h+%YR_=A`yGRC7Z5*qo@e#Bm9UOVbCw3Xvc}(Zn^s(uk)8aaJjiX~JeEU7+9_S?CbT30Lk6r}# ztDEN;eO3eYu_1L@fQHS+vxRz{f11k4&x_u1=Nhb^h+AO7>fJNKL|16Th`z*NOXwSs zes$NMRkqL(5Dg@OqM00my_#VDuk5+Lr6%PO{H)?ppdO!gaUr%@JMG1eQ~3xY%GNli zz1Snw-X!cyaBxoc(Pyfx6_cP8p#i%cb#yaDUpt7F04F=>yH%yhU8w$~PIl0rSM+i> zuB4}$4|EF^eK39lK1TLnH#R$NSNkEqN1O!Bcn?KSPc*c<%lO+BJw3V7j`1HAy?p&oZHQ3cu8cbG`Ic<%;&hCZ9u!zH1OZ zM&aFjILl8!sOXPOFdg+przSYLP|;60p6rMRp5)Fkl)u0KGCE2PZNWIjhX(8x*D2a5 zdVhcCd^EkkzcW4r<+ZF}T+{o<0j8gVc5Vr~$c&R8D#i!K8!7t6d>P<}3cJW0u~X^C zKb|m7eyHUiPZ(dL=!0=hFL!_I6!$6mU|iGt#~;prlA;gBHNAgaV*0*{J{Z^Z{_%?G zhpGAs#x;ElCiD4i6n!wR>7#sf9O$CzHyEe*P|H8=G5rKpU%|Mh_m786UtiG&>6DKTjEQt1_HI!MLXP&tFX6R@HAXuIc^r8q?pR>NgnI^#1vd>3>w^ z4aPOSe;#D|mlS<4zEt4}Oy=`*6@IzzngdjW@~k9vKL(6uqIygueC(fd#A!NrqQB7v zr}HtL=s!h9PIv}xft+wUXVMA3!Uey>1#jUZ&lwka&U4A@NZr4pIzi3dqqz2KjK3FhfDr5UFd25iBtYOveDT`^`R4X zJxqYkK9YEj!RZVlzV{-iP~h`Tn7pkn_$My-ae?1w!sPM&4e`BS;7f2#j^saI2h}g1 zl|=GOocC!lJ+F8QO+HM|_*#P#-vuK7Qh`4p@G^lvDDXW3e@Nh;2z;Ty_X~WHzz@3M zYzK?vl=R14=uf-gVQ7cs?D^CYxYR$}vuAzk)c6L)(6c@n=kw~B-iTpcWTR)iwcsoD z-%j8UbLQ~l4bJ)V9YumIf5!WXd}KY&7PxGOyw8#Jvsm!u{dI&d5%^J&&r*Shqd$@( zdf8v1TyQ$Sndu+VLG?RY;4+^afj=tf7YKZrz}E@rvy&)bapK{oR^{;>G?_>RKJY{PW0`}HO@X! zj_3#Jp!((Z&-FFT&?O1_s|Ecifm8l-%yovqhY0#yffN1H=DI-O*9!V&0w?M0w?+kbG=L8BL)3FffGHg`^g;=`1Kl6zo!H)>BCJr(%TJ!p4Sho&ua}`w4lF9 z(DS@+r%w{}Hw$|1zjpczL7yz>a|KTF^L2s1W&d3!aH8k_yH?<`J(mic=(#=b5_qbR zXP>}{ezmziB=E6<{*=Ipp3h<6^$F=AUC=i+^EK<|SCc+k;Nt~-g1{;NhUPj+;5;T# zvQYw;^ce!5DDux0IMI8}b%DSq3HoIMm-K4|o-OE01y1y2$Aa80flt+t`rRjRNqvpx-BONqJYAb|vOqDjqD-P^+IronUOT61>hhz zKThHZ+%!#PXVusC)m87|*K|sT2Kx6Mfd-T=vIsKDicAy+pV;1t8ZtG&LF$UITq>I> zxEVRnMW~(oWu#1$%~N0PLTY0Mm1+x>l{tAzYMNyXjZR9+?^;y{Q0dfj5 z94ba+`j_pV$}C4ECU=c9dE#`o>pBPIBx7+B9Ab&5`t7U_;8wq#@SBShxzCnyoNFv) z92iTd;Tf4a#U%`LkL(n8mdLKLwn(8D@Ki-nzn$5-tCU|gi%u$resgiwxQvEL*eN*V zY^MM4acUuBrs12#DfoDCDB^P5;!t<4ai}oYI0)?;hf~>H<2rSXb&bObajtPF!?d%M z!8HzLaE(J5T;os%*Ep2HH4bI4#mRO{tvaw20kK`W+G1^uFEFW$MB{UhMB{UfgkA@^ zN5;jwM?!mNiR>DSNa~>Kw{sv1(fDx)q#6{|ZzudZouQ9xV4WCalKLe}#W1q0>=nn# z#n!(cj>P)WEU^PJ$sMLI$I3+@AT09&+!%wY*W)6_E5b5pma9IfEkcy1TY7#U%?a%3 zTO)!nFB2GlZyz1t^?MIoQaQs-d}HI&^KK{pWrk5bL&u(-znh)T4D-;2`4E3vf7|(Y z26HF=dkv$0%-HyL{&XG^VO|?up5f2Ug!t1s-_D=zHJ$iJnwteXKl?S^UpVn!?@)ef zN_PGmP$^FQ8=oV8dJo{lf0qM)x^J=buLb5#{4X;6m!N$}XD>h9_c-w{H~jgz3hAHj zkL>)rK`F%F{^bhU-zBHNo6%wVC0cUq)4LuD+xu|iIz$C$%Aqg({Q3HB1f1m0xJpyx z897LP>I-)HuLVH-ZECU_o0lEAIvd}wU4NfIKBx2x&oO)!NndEvudX8fZ!Yrpi_{6LO8=${|3fByVHNz>x}-0-KqoA# zBK;qz5U2W2q7RVZ_Gr)dYp=iiUHC^f(ngUwiwH zZlY7Hr@{$mPhS@kpHunwnNMluyCBNOp8heH`d@INW?EHxuS+U1|+!hcUQousPttz6QtHlOlVm7eV++v{((dEtK0C%F#T<-Z1iQ~6V(G<{YT z>07&`-(%8OHGXt=X+NV|YR08i@GoBayqwuNH`-JKF~@V;{AZd;4r*^oqD`oV84X#LErV7t}FLPLv>!ExjJrlC!L^i0ufqiMReZ)3f@?g(|?L3h! zB?=!O(iiqf0_{8hH}5xw9(>=8%00&kz`4yVBO*r|${|w%EGQG*S=@(+`&ahz9#?tU z@6;^o7lmUXV{<>MYYb2}*B96Fn|)OtU}gBPhkv`H@8F#9=Us5>D^B#(_?++wF8Bf$ z+)Sx`i%>{A+x{h^1W*D zy*M(N_+CKyD12{&228=5wdpy@lhSiCvi18LK$Eg3`yjln(G=Nu3pr!5en&Gi$KeeP zo;K=d@Bcw-o|g3m6dc?O@NJU;E4TuT5A_E)S{e|BsWZTN1FrlR_B9KAKX$hC+@ClH zd-?=K5awk9<0lyT*P3f;s|0adZftOxnu&j`xn^&l2~;&_-v~OpPAKUjC(wcR4ub`> zX<+=V)lh_`WBD1Q?<1VbUvA3J<)rdc|K{|Je*?_U8<6jttD&YG^-C$McU!Ak%y3Y$4sJ5$<*8hvo;!wqK`H2GVG?#f5y{T9gHb3^UZE|)_dWV76 zjBJk&D#lKv*S=}#Q>LYl#pelW&LfMx`ODnTIZT;2NM|LPHq_silYxCGUDN-+JC;!U zru6p0c!80tsxQ|Aja?>6XCDIzBWI^g0Or(}m@rAD(&-$>qArP@gZq!}EgILqzV$C& ze*LR`DMJY8Rq}W-k9({r*fdr482`)r6xAU)x!xp<$2%Us6p_QvHNc$u9+8GRwC<@Y zkKk6X*Ejar%Cg2QdV34kdpzYjlI3(=_t^VN0vx^S;em7WKmi4RYOf!{!{6F?SM%VOj*Pz#*Bp_t30q)~& z=~?fbi9NmB7{h(LsxgMw8=OD;9(zGegdOe&oG{Ui6=k>~j5g`mvzLdyzo#;JnZWq` z?X~PDq$5txIDNlt=S^9}8vbkP0*)@7(s%5V*o9XBGpt+62-$^MyH+i>6Qfvwq)qBEh^BHZ)GP@KH)KZg7Ks1UlJZ>Vig zhepOA>m@05F+JcuKO+RTQelG{^-!Yiv%=0O>`~{b`+RM4^q9KOZ-D#!KH%3IwnpDr zOJnYtS+9Y&NAWJh^M&vP?-t?*+qqN26Ra%{z+U(9Aw>VWq9Sn-K&mX`m zqpr7N7vUbru_-WaObBe~dh&+B#&WTiTicgSi7VWRIR#-VO9A}6>ivsCP;Ol|s{)f+Nxq3Mge}|xloRWa5-x9^iA#yFDhgrq zIp65PTf>Uahb~&8u2bL_>TM=VQX0Z`Ic%d-9PvQoE+M{3*Bf+wP(6^&sNV6eH$Jba z_e?7EeuvS0N>l3$%v-^2_89CcQ-3LkURAx;@m3UYUucQ2>Myz<4q7p*G3#hC@yzFZGjWP@kwT zB_HWs=ru6?wxSa#uNWhWRUVPv3K}QYns!2ZQ*FhR{Q&Gp^RquHEAhD>?LGtTjnZ%% zrgm7yeHnBqc+^5`GTgUCQahxysYo*q?JyN|oQ}##@Py+s&(GO7hn}{#T6or0B<11a``9pCE+R~$*dfm#69d>%winNKd;JR2xyxWW&^PW=k+Osb{OO^{(=b3L|^kk?5yn%e_U+w>%!A z4-!tiaTsNnQs}xAvIWSa>XgQRvL~&^L8Ch}rox8xTC|_iVIf6bQFkO8$w>WlE&3^* zXZhp?AJtchU!kermEcKr%RFI&8+z7qvuymVnV%hl7WJT?8=p$1zP!`SDchC)z0e`G zcbb=K*7H`pW9A1>5qP0IXJ+kK8)dclOqJVZ{D?N=M*+qU55@!8$0)rT7f5d|>065N z=Qr4qcY4-75;RMZKaIuI7A(k&u^8iurN_;AP?t>_J?}Y?YM>2XyQ8bAx=-%I41(vTIP`v7@NQVrdY=KkeW&yvxZa`hOX(bPp!`1Fl%su+E~w8otf_TE zvI37EasIi;9qE%BeE~YrWu`GiUq`AjM6QMM9_$VK_6<;PG%hv7xTN)7j(R8k^7^F= z*YPOV5tJtqI*LTw*^lrD%wb=cGRpCKINH}@&|v&f?Th-vF7%0|=zB}yQ@QlIP4g?W zPIXi33dDO*c8d3goa#3HoXXw6S8k{And;*&2N_dBb(^KOZy~%E?S2>JT?-j#E~Rx8 z$wBo|j`m$>^sx%@_Hmr*vG6{vOM34_>B`XVb09xH2U6oCuybB7$oi6V4eOrrcgs(= zVdu6$^+)x1TIs{T4yN{)hcf43%}05AF`lb(tFc?RqbOQ8q3kra@%V@|@p^pMG#0KY z|MUNiGUNWmv{R>c>t8pWne}Q>1=a?ql0z`}g<|dtQ)6#bxK;88-XDI0aqJ}OZY6vg zlc?<_AzWz6mI68|8)GR8XDsTm@aw{HW`n*659}CU58)-_VZY{c%kY z*Vq@Q^+WF@n`nOO{zT7d#Fy5s%6DlSRF}OmX7PBW*8*BUEFag!zq2m&uPypPmwmCG z=mXu-I_^z1&(Juk*4U6W>U1UQTK88P>rT{os_8#%?I;}g8l+q5JK@cO*V2WUv-zGN z6}o5HGck`N&);Z0SB`wK4qk*cdqpPZalZFa^B&e!%5SHAPc+tXxTm8&OuoDq3Xlc& zidg@t`sI6uGPKncQ~xYSN?ogh=5VT$7DFSZ9-#FY)=eZ|xTkrXk_-0{Bv&TV()tza z_TOmDL2}dmfs{AAhj&ZOSW4@Op|s&WEL?E@-Tsfi*MVD}9dk!SN(3t*1W$#_9JWY}M0xuwuPiNFSb9bMF(c zuc=K?{d&4sTf8VgWQpWDKkGGgPjvn|Xj#i%2ZhLw#)k~bx2>kPth@+H7lpDN#5W1w z(wGwJiSa;_x#YAg=reT@!lV}UoJQIp<8bVaRNR9ATV4bhl;p%=EI;Xji z+M-_P(%53=Mf4ZaE44M!XTLT!Rqkc#qhe$6^LNBOyCA+y#rS&S+0k`R@##t9V+3t@6bw%I3 z5YG^d3DnnDnf5{VQ*?hzV*&LU=tSwG40Xo+?Of$bMY|v!d9W_y`NV1bu(xHpC(z&8 z(EXp8H=!#J>Y*i`e;}_I{$8gXa?*G~V+GdH=r?*@o&tGi;28^^=hCq>Djk)F(o&sL zJF>S~YO6H%QQfT7{+6~VLsZR-TGZ!AcJgVT=AiyJU~BJ`+c<1C?xrVCO!r}9Gt$RS zQ~>WtMr87o8Dp|Cu~Ab+PMwj77kF;bff3U(XW|8)P8b-InmO&(%;`>1(=#Vc$ubdA zH2TKD2tqPB?_#DhP65}r?6Lk`+eB`1^~D)|fGm!%0O1U+FRpL)x5 z{p-K?g;YH>Byw)=qBx%Xc8b#fyge4zUW4V4->+`$;5yA>7l$kfTUz~*@D;V5tP_$_ zr$y{wZS3Hyf9mska!i^sohB-&PO~UVv!eQw;k8E9X%Uq~^k4n6U+s{){8##0qV*;% z%SAHnG*~G*31kS!FSO7jv#==LaYG+&e8R9kSB~Fh5q6Qmm@XO^ze8A0)XYms9{X4c=%j&GC`((Y)H0a4Yl&w;zGQ@&B3X>zb<@D39ZoPhWn$=qo@?=;o)N8$d zbuFr;TDkr(@f%^%$E+-ilklk6xHq>IP@LX-9&!U1J7?WtDCY+vy{GwDdqT_)XX zdpe~PnMx<3G^b6PdRk6@+cjxc`#9+|s{YN3!BWj9psj@z`kPu0#Piv83w8cON7QLH zl>5e`(EDTcRzy4*Su3;$bTM=UtNwGvjCd_Kyt15ljqvlThxlEFmfI>}d{&*res!P= z3nK>peoed^8*Cv(a631BGz9g{eU$k0GqkerjI!k!3%V?WS#x0JqitJ(wQU1-aP zuo4H1&r6YI-S0rB&&Bq?Yp49e%%_wTCPzN+CzMz_LnnE74JOMz!U4-L81-LrvG|{D zutEZ4KjyJB&!-VIb)9CtNt342`1>PzJ@>~P4uXdG9W-gy>NK`?9#Y`r0wz@Vk>@OuxFs|wGR?p_XQuM*Nrte^* zwyYhBJ{Z^Z^d(N9TdnAWaiR)UBWxi3y^5Yj-e4CRw2K_)zbX2-U}7Ml7T##t+|`Oc z7$-73;U8@Q zePUoH<|R%I1mPMIy0qEM@U04-hAQS`w$#f4e} z$qR75D0zZ$A_@&S`BW$SNYP&zkOyCc2Aq7V(M^he5R(M>q1M#_*L1N=(Ffxc7itY5 zFTl-G^uah0g<97J(9*>%iar>pxKN8;;|99kiar=`t?=Q2#JEaO`X3pDzZnv^$B5U> zBe1mMuuRlN(fij?;U;pl!u{)|JcH)~cgiOXOC@O^qRi0OgZxhP_krFCpY4JVa>19m z;E68yaTHM6rC=GZfV>gnBt-QLgUaAi-s=&?X^D*8UKjc+LEuFHoeO=s3;h|Fa?yTH zr~IEm6*}QbsB$O#Yv2*Wk^#4eoi6kVN}v99Ca;j*R=9sX$@yH0d(H@9*KNH~+_kv3 zh!FPJyaxY7;r?~tI)krsDenX@aw^w&#n-<+%r*Hmf$v1$*Cqd7AdeIM6qkBAjr=2o z-8J>>2iOHJ`CsRv=P(z(B`)Rt-bEfadowXE`QPi3KiN5R(!**OzJ*E;+&av2EMPUz zJ|l!3O7*M?II7Dr|9F>iY@-Vv?IP!LmvY_Yf?w>SpG#cI8yV&-|2h}?0WN%JEB!=4 z8`>Q-ekX;uV%TR};5vo-*ZJz18mP#wr&E1VKZvl}`0^<=p|2r-gnA000rl(*LA=p!uux}EVuir&9IXZ$5a?_Y;A{)EC~O|JT- z8(o}qk>@;@dKs$p;9rMx3;rB=MTm7c^WCa&v96|u43~<0ob+GYrCv6>$g@Q0!M_e? zzT1_Y{`EHFs}-K0g}^W4i@-NRtg9KHsc`=~xv@$4tc#qlsrJ^xmp_;BW8fV2MIvw~ z`e}q%KQqnaF8w!0$?x@L!E)ZO@ZLV0>!ppt`vl=9l$?EiIJdkO$dG05MI!LB(sO?w zRA@rIUF4+axe;RBn`Y?A?pK6Z->&5xA*U1H*Inwpxyr}CzP-!ja}x7NgjnA$H+ZT` zeVvc;Mu_!ofuaAvg)f~`6Cu{O(T2W`@yV{qcoQZM#Zu0WM;V;VYpo-ObNCQSA=#t3|&36s4Ii5D82@?qHs zqH%y6>0zo4s$Z$MOo4M*C?6^RY(qnMj-Y2b37;YGLP0OfyH?;c1%0W&Zx#4nfwOK2 zDi`=|CQKgNryzN57kCb?$q^oKp1Z;AdY)}?yPkPn!1RX9_s)*#8RvBt@ns#79EFB} z@Hqq+C)@2j2H_`}uwDMa24{IV$xstuc^DsIqd(7FkFwD-o?>vj{M-iY@^Bs5<>9j1 z<;gSoGd=UY%iv7UxNL8nCy_2U^mcu=7WmyJOkO{M-y`tR0+;Pm_KSN3eV(9~{dbAL zxsManSm5(bn7jmm-zRV>=lueY67&xUT;?OoE8EY5f?k&QA%V00NuOM&6wTug;T$Hs zkbd9@U!;TTx736Qe^}r<1-@9|`vflae_G&DKiuEB{agV)Y4b9ou>VWV$p zuD!-*dd6itnQdsuOEF=RM~+uh1TN*|@xd-9w35@W%x{!h{KbLf|PbIP)U<<$_+y^Q6F+iF{TFe4W6b5_qY=CH)?OOZxo+ zFEnBD4w*2?xl-V#TyXy0h3HoadcJQXT-I+SuE}wI=_`zH2Iu->oWGr6dcKp1ve7dh zZE)htI;Xr61TNd5?2l6ZG(rC~3j@Eg2~+-DM+CJNxEz0a2waX=vcE|EaC_tOn&j3{ z6R_)t+ac5Q6WdWXdd5=>Zr6|Ok5WIZL!y`C)q0VS99PQ(F8fiez!#b@c~U>JeGV1$ z5+5yaskan^vmVT)Zyj#eTZWCE*X~&cXL`nYT(av;&UaF8@g^Ulm+gV;g>b1i=1ce* z79PITzbtQ_p|O{j&Cnmsr z8Q*84XLvH2WJ>!QAPJCyZFnOm0F6$)>bmWL$&Qo;+F6)cuS)!Nioaa+}d3io% z`87ApYbJk|pK+dNnV!qV>uRQFT&|yGd6R_vvb;G0e~y{L&lC8g0*^OgdwIPAU*|$U zN#H#M{YwIu?R=xaqXqqg0+;g0d4GwZm-kIPwvharMLsMu;oP<q?M>3xGxYTQXS>KhT;Mxg@HYe=CFpkvT$-i6BOFhf+vz?*gcF0L$ zO@P}Wi}|vgoFv5rSWd>d9+|$SDHqox(=#sRm*u+4 zWN0r}l)&F*rtrC6Fkg=1e!+Yh=XOr{f6O5Kp(aeY%s<88_WZfL_WWhJI80ewWb(0} zX&Ni=FcT)PpTO}5-{*1#9_~Z&Ew{jH34E8p>j?am!0QT}=Tnlip1^s2Bs@akJg*TR zDex3rlOw#L4yxY*fj1U-slb~G{E)y|hZNm9L=#c|@+-|z0*}%p>X#02CP(zGbWr{7 z5qN8X<0BvCh`x=$>HRf1!ny6yb&9}a2r#Zt;M^uDYLCD>FfsgcfpgoSXzYDcj`;Gu zJ^|sT(GVW5Nz^Z$&rOc-t~#iGlLXFvfg(l={Bl7*Mc_RIPVXhjQU3C)xl)096@~uU zBk(=~FBf<}fgcz60D;r{YjVUlNe9(0+YKW8DuKredLEN0x}U(W5%i-3K2+dY0v{&u zJc08VPSGU-zfRB}68I>AH#VJ|j z*O!-nkEN67dMBt&a{-vrMtzYj(&_0q2|GR6*a{BT#yJ=f zrsm;hLfFMRtFcQ=b(TCWb#fa0j88YHUnHqrqYh<_n47b@fPGx@Q6BO{2?Eri_rLmf zp9(UeXSHcnAGpctQI?89qT9VnpPh+w#bxH;Yfk=F#)~^RpFOU3(WWDE$_%vANi(u? z{DxlX)Lt23*rST8C=rRQ_T>hb$QK3ibv-D9!P-nRsmo_FS@jg7hcpP1mTpWXr{_+= z9_38z5l)?!Itj;%N=oVpL@bvUj)!l8`U%c@Yt;M)M-u;lui2Nu})Exm5B0p zaU(b-^>;Iut<3)6&Uve|jwe=5@vf$rV~s6lC_)v@C`vXG)%1&U#XKZdX9%- z=%7IrLmZ`M!_h%vQMHWCo;)*oT=uj{LB$hMkX?(bDv~;xicFt29h<~WYJcvm58nt& z1AJP>#PmsiC7_E*J#iAEbl7|^G#Wr@<`uP1-!;3yo%e28i5>qzC-wF>jZ53o7CDF} zk{WD1o0R2;gOj1KabsqTlY*NJ)$l-3zD6^Jl&+~|Kc6urd0M(4LkmHLC<6*q^SGRx zK0Y-kb7s14R8$p#!^ok#baiw9W@a5p^5O{M>}fc%m_T2xQ=bzyzmf6G)T|llV3i)! zYGN@EjE6aPQ!1ZfhT!7U(ClItoET~=5R-%Kf~TdACqv)Hsr=&QG40LJvFI+(kyZ`3i4bcSftXN<8r;3(*vRPt|| zM808y&X4IeIW09Ol_BEi!^n6p41dFxwfZGf;INIWe({4ynE6Je`X%e%h*ZDohpc}i zQvH(kZ$zqJ^+VRb5vhL3`ZprgulgbD--uMdWc?eF>R0`ciEl)zU$WzkNcF3KwB>E} z8>fER7B}ePmECHxZVl_z>X$89Q>3!{3nRf4sciteS_1B(?EaEHUwv_BndQGP&g%;W2F&f158RIX;IpNd&jKis zJ^d?4Pnee?g-hwAFZf>ndR$UD`Pl{I9bNeIJs8t-)^`3eF8tXZ74sqfbPLA$F@Bv3 z|51ivp7GhU^S{=G|3XuKzE>swHSllee+%m0N&ou{!!qNuXXk$d(mUyYpW)Bxi9bk# z`2P%nocJ#z5U#5FKaBKF{Fj-B6|86CPfgig{%*jW_^&nm`S}pYl(Uzg*f{ZDZ}{h# ze2D*f__y=_9F4+>e~RgpOs|+5UK}Q$?CCo3k2McvWckkrJ?F=G8~`W&8HT@n_C@^c z<=^3w{;qSBpPtJ)@n2xluP3I$+4<9ZHK+0?ner!4=5VC{2Kcv^e-H*PC;mMQBQMfO zXXpREOZwS{aGgwyus!`dNKcs8Mwiz`0}BmK^3(H7yZosT-bsGizd|lod%j;g|ItY7 z#J`?-c$Z{S5`StlcK&|=bK+lU_%EPH;q3f>L!1-;QHFoHNl*Og`K+D)M^Y?HZY3D!4g@4%ma?{#paF^PdLHss78&x~Y^I8{f{K z-hmV5HSz3C>7_$af`1!8cK)9uu@nDg=B3L*lb-Xn^Zx{Z6aR%?ouW{*zi0>kUgYn@ zKia(9$zsOFxAX6g#7_KU`|1R-CLPs3z2C5x|4kSEOALReH`yp&943Fd%ly0i9MgZ} z!hiKSreEj6f89BzU+R*+#H8o>gUf8!|3aj9(tnE4f09W^`lq^JebQV&?kXg9s{ekp z*nq2Q{Xp+Rozkb6^vq9Xh9A59FT14AFzHq1oY*1#27`G84F%Vl^6xV^m7kUrEDx9e zL6`c^sHYP$y~!p>{w*&0n{tlnSGc6lJ;(I-W8iesf8IH!XM5E4@wdRFXFa)HQ$08N>mB&h`%XLm$w=(Pzs&GwdR74OlJ0Jo^t(*@s`_t~OZtQ7nEn@+`s1Ui+DTy% zw#)ycOa1NYrxS8Jq4q;vn)Sgr&F@b7Ygb>VFVvpz*UtYrBqq%3qtJnJ!#~#G#J@lO z?fidqX+L`m|1^`HJv;yJT-r}PVg|QXd+PpYAi{S3Z@BP}jnD}>y~!p>|F605FE#x4 z3I10)@NewGf1lxh7c(}#z5ESa_%9rw6R`ZG|3Ub-m;X1cZ=C9XG~F!1E!Up!*UtYa z(i7(OQRqMdDH~3fpB|~%`PT&C#Q&7xU!ZdF|JeD5A-xm-dPzD>nMq3JAA*07E644> zi`)1gsp+B(J$rWkZL!WJ`Qw4Lm`Br8Ux&VlfKk8v9bP`_zM6|`rn(RDe{cMNdF`8&*@qJCvcx; z=S?Xyn$a)5OE&F*WE_WodwSTq>y{AZcd`DUv3sWxw&$6ckYLEq-PT=-m;}6#fm(Z8 zT@wp&v53y2hFl9RoLNm_6lq~wkF}@;Y#R{X)|2;mO^-SMA7}d$jjPQ9o4vXGTHcBr zoT0rEpSF=w z-ez8IZNazOB}_|adGk5lDIIVYInK7Hvdjm)v~xETHrD8@?o6CRp8+|ck0o9@zn<(3 zz@`hGudZxX;9T`Q*!3xi${V%>XOW}XM;?c*yhwy84gQrb(H0i=fvh-toNjlP(Anj5 z{<;6`a%~4gp7Snk+t8WfbZ$A)MppLqe0XM-uorSC>`OrZm9QhS^3E2g!Y|SGX-H3P zPbYs|6KBF#B}>c5ykWStrrv#4neBGc&=w*|=jDA-wu`MrCql!NZH6cuGIs)Xd*DuQ z(bE@OACg_6!jN8{o%qsQgrOz!L=A7n_K?UUWALf!ah#pL33C5Yn`~&1{T@1RU7xki zdLx@ibOt-w43TjzfsI73jRDB`Jo0w!--6+iYnmi*t;hv(zC*Wt zAk)8Zza+fd*Wbb5<)t-bO8VsC!v{y{H`7s*(sMGhq0Il@6XE^uOx(_dH;;zYyA@tv zOU!F(kB9wwxE^7!aN{Sy&oE&XXFFrM7N0b%&VldeKX4jpXs%yv(yIM6PUi?83_M4e zWZ<#2=notX~oy`qU^uaihIi2y`MbVoF!nVAe&UlVd z^z^nc*g2i?3_CG!{J<+Pjnf&=k&52jUmV*8XJID*9kt(>L)Gnh@4{aKSjCPG>@QRP^+AD%gcu z7Y2c?6@4&HgidEjH&OJ?JvY=cHwuDFT}2;^>-_00QlJY}^uah$g|D7)R#DTFq z`;*H~dv_wl?jNqNTfig2@{b#guTb><@qx=ruTUbyIKcEn6urN{4<_N^YAE^r{hH;u z191^z=4JdWWz@AT%!R`6*_(A!Y*YAolMdTy(lWTCh{C63g^66p1%i zB^caZF4hUl$ys@A^jzOuk4(=v_j`M}Mw@)>@}$`EHA5cp1OKQA+x7OV!I`fw3G_~m__D6(x*q+&+4JFkXU``}QR{qUKk6ZHDW~k$ zQg6)Ho8|cZ73aBRb|qxPP_dKRbkQ zt_z}HOFwXgo6iu`^?voM@p>jq-me0W5ICQKLHTf-q3EHwCP%ouYe*9~*EP}Q3fw_25#J~k(m%Td-b=>RcVzY1KgTEk2wQU1|_zOle#1a3`A zpEMTc9|N|_T-|>}(vW^?Pt;88ff(l;O&btQw0T&THa(RQxBTQ|Gbb9gt3f$zHD+>m%?S@KY44L0Bg)G}OT8%a z$=NyS9R^-AvOV^{z~rZ{3EGy?AuWAeDmDcsr|aFS^c2+Mg6myDLNwiQNaA310Mps} zHpT>RWHE&g+J_R*GL&^wQ&EaiNQ$i}1F>C>~M(0FtkoQwYvutOwO442+K z{0+{5lxioE4T>`1#1f};1~+QBJvA#Ud#puzrU>kvaoIFOLi47XV1dk2YqcGOH_BjV zh<{s**aRcCy!bY_q;;@uY5@?qkp)2D<`n={Y*_hEZ%=s(_o4U;a%JWgj=p`8&J3$Q z=p;gfRret};I&=zr7b(_XD~lodO7D&9`^Kyk)ALwMG7~{Ony8M(^yaC z4>oyK#eb9wfBrU0@~3rxoqvK0e_jvBIg>=Pm%pi@Cx{{m4?{8P+gGQ}jN@>7-A`G1OamlJ>LSLCW{|76q0iGP{l zpQN)<^-oXN?flz;xfA~!!{2lxlZ)o%yFkG0+vIcIn?wEFi9henVR@OSUH??SPU)8z z`KxNbl)qE@LX*BK{#Uy2Uu)9yIO-<9$EE)1xiYz`^iSiAll);uQB|eiA-(3_)z`DafZgug*YAiv8MbsGPUQ=j?p!z}HZ`o06ZmH85Bc3tBmZ|p>f5q#t7PVNRt26x(PIPk z{aHD_OX6>fQf{;=qVR24L5MezzHd8Zg?9t{B`LM6iWH<#;kx*q4B-NNb2h)a{^n_3 z8+>Qh!P*jq@5#!;tS%||K2FnWA5+UhoH@2Az8mxLqwl5UHI~pc3oXI_Li{g6 zJq3MtmXGh{=o_rF(Y3_)Z1jyqzD}x~o1$&yu5j=}enOx-NS;U3IGhV@w6UQB92Ygm^ z4e@xY#$1dIR94D+KI*0x=rbToCce@1V!X64UUFKZ;j~Sv7~`VN7*~KX&Qr~*|34cO z<@d_li`3YM@`ZHqR@{O9L~Wef_W_K7(c#`LyYPK%P5ATS_ws~Kgg!=)KJo85ZvRi( z{h3)i)HvJ1@*GKl40KI(LhZK#ZA#V+`U2)etJoTWHiY@+4(Og_Q+0tj(lOO9VR>ki zbgkoCU>@*)%dNi|)!&6%VcsoteP-6yqLa0)ia)LoDLOtRROx94^rP~Q@>WDC-l6!u zI|TEv$Hyb3m6ieb2=T-V|E_vEa1P@`Z-@C!j}Lt@KJhMyboo;V#$Alfl(&VkL$w!#eX?U6M`Hx-3ka`JNK^C1`063_gQ-bKV8<6u0cp)v3P^%If_*iw^^UJp^6 zubsr-iL~_n{y{Z9=`^@EntHs(Q%!07B%WLrzaOdQs}rg%zMB*=0!P63Bf|)yfYsxyD zKdn0h^XK+^*8Gv4^6v#14nhB(sIaz*Z1+G? zhVCJbVGN`D32N^ij8|w=i^?$H^87@7?}u`0@-H)=~Ap!X|`OoDG zc_Qgw=I?3dtw=@ri8r-_|CHPz*dsH>9_b0XGxBltd(+DJ{byTj;@#aP>*qhLKyYhnuK=x%5qc$O7OYrF#7 zM{b0?7$=IU&z?km^w;`Q{hr!bR84>X;(k^EoWrL?81t16KP|$4i7-AQDA|QE^-qP- z{+lLfgN<AGCa zosDsQp}NMLhq<&7uAA~$(PanbHrn^I3jVid-0~tH(hH55jjX%~E*sCC$OB_lf7C%g z)J0#^Ngvb=tr|8LZ*lqVeZx)ycT7Il{iANLd!sa~nxQ6B+g=l|Ps2CidjqRykQ zz`jb1aWM$f_=s`vNFmm68?m0pBge?jn3oox)4s|EF_=H~ID)=P^Q2ru9m5_)YQw6J zK!?TH^T&N;C3Hz+3C*`WzF~~O*rhR^gQ>qy!Wd0+_#yQ9>3F90g{|+0rg|&h_&;c~ zXKN!Vdagq|3BC`b^;XT^{%0~LQ3rI-T828HzK(y#^#VO7ql%~-_xaq9bCU%mR}tah!p;?4hq_DB6{KI-XgbI(;`UZS~Y z0@@zUOCE$X5SN6xi=K<*V;-XQ&Xp>@<`ECBGfjA9g&z0p^%FMoe{ar}WAlG@&h^)0 z=nemGjw5nT49)z1U&gRW-ikD=Rq$M(~GYg;rC~-sm3TIOfU| zp`pd6%za7`bh2B_m$dd6<*_#50qiEdes75JGdN%9Dw3X~{fKe)2*%sN(D?&O@8=z9 zi9SvFE`ZLn;P>*>nV65hJrO#;3OZj2osYx1paOF`zWGvfOcb8S(7nwejN{+K51)$l z1M+7X^nD7=;gQAP(Y=GG7oBAh=^C%svd~KtHE)z+E zbBKDvnFv%*2hX>P{*!feW>)VaKJVarRaaqn)}Ws=oJ3vGT&l(*=yHOsuDVejKxZ`8 z?!Z_}djC<-v?MH~VR2hkpZaVBS)a_C>XYi^l&BM|)o^VU7nnM!48b`esF$5hy?-9W z*$_C>Xpvq=(en+=xwv1-Kps>#bU#P>#{C59ps}ih*Z+k&C;=_$x+eI|N1h=w^!+{0 zi?mLod0*0aZqv^eqRiY$V>!{_jr$@hpU=nhC@;wgOy8GmMLm0PkLiDgP5B-(x~G0a z&#uGX@mBN;Xp^+g@UJgUCDT36&b4{qe+bX*@cgr6I{45%K0S{keb73U?y;!7`|ox2 zGd!%zN_wMQq;sOBwb23G%aZ=6{S#J*dGuR_H7x!PJoIy<#(Hgwcv{DvKt0gCA3gV@ z{zbl@mwqOVdwYx*dL6}bvpz%L^H%hQ+$kuB)U)q7EbfyIp-eTSJd0v7GfH=(&4t&; zIWno%Z~2w9-qw0=(bAfF<;c8YZ9PvlZPDABnt`z8nctN7RK8*1%o7iutKb=p4We08CkscjTWVcYAX|tOUfYA0kk{PLkgZz9IB1?dU(e!=_!urRyMFcq;M2; zxb}_Y(hR(hx6@guOPtrSrNsr-RJ`9C;R)|u#Cj@39#r;v&|d?rKdC(*y8!YdPyD;C zn{oC?(7lT4V{hPDA(gvt2+AE+RB;*20oBpwYCs3!c(&wOL~Tr#pT1+D=il4s^(xwa zXY*5)4e%7rn(`fV-Z%F!MQt6N#dibMZ+s%b%twFUc|RKG=f$2w0%8=-l_gLwml zXQd^&1GulEd!?$%yRyD|XR7Ll#*eDfNI7_2KkFL4gT%UfQ-tQ)%Jr2ZJ zH~`~VKeSPtLDV-ywOhO1R`%8X3(pjTbc#AseJ{l+?qVI6SKW%=jQFbbkQ$LUY)=*Q z2I;jW=(yZm-j~iHodSQUjoRhC4DdJ|Qj!g){MU~NVB*WpcCL=<2g{?@!N zv(S(1@^HV+gRZ#WM&Y?4hs#Kxray<*z&k@LeB$%fs@4y^Z@s#T{*+<*XgGZr(8a2c z&WFFVkK-#*U$xGG?f~ex-CcruvX|S7ahi1M>t`6l3$ZRZa3`&u^fQpCFe`o)%1(Oy zwgKjJ=$7OwgRYdWF|K`sF_WK}mt*Zf@1t7KcP?SNo{0W9=n~FBW-1%YOy_o;`n&4( zpNcfcP`;}4wgYsB9rTb#T2{ z`MLj|>(BADuGIH(Zucd$R;@%IrS|p*)(tcd)AK&!L**@m{*U3G=7U<`%X7mYxTgNV zZIRX+R0eNlWeK<0?=PmdO7C{mcZ$$UBlLT$Kj}V>%X>h-w z(jp(H`w?0z@vgOGW!{W79Fp}v>`K%2kpc}&($+3x=qr1gpNL>>hRTEj~3Z&0mVNFmmkmXZx2C73r&-z* zp0QBae%!R|N$uG}A!V+c4mBl;;w+R=vGzH)O-Z+4@@!Iidj(iyGhotiY!0^PPS434 z+dk*kY!i`cje&)2e{)kt6Rok?<3Nqp=WnlyiLxE`Uwu-Ye-DK`t1cED`2QpCeZZ@# zuDs!sT!errVu%rOwr%qGOM?>V?6+ZmF80yba>UfeinFJI65H6#N<( zfUDs}_j()g;K&C`mdc)VKmJh_9(C|J+#X&Qj7={nJtuu%@eW5>yd}4N9eMVW25y17 z2(6=R&g1#Kql%(VOQ$^B^Ldsqop5!$sC>t>Ez2{5N7X{-z7>zL%b4Pg)-JWDrk3Uz zifL^V9s>wxZK8S|$mvC!q3?0drMY(OxZ2Wl#ywd4z=$!$TT3g))sBsR{G-}a$1KQ& zK}{J4CEgOoR=cZ=Oil*#O22zAAuSv+{pMY<1;D1^Wtr|MdDo83V6VRn^XPLUKVR~N z(g(*rFwSX}k?sDz?^H`wApLnzG!4-=3a^EpSFU`OJUHfo($ut^(SH0R(sv1c2f~mY z&=(`)s~3)qo_+4S*kq9U9~64kpBVRwrc;b%DZ(F?bgt~Goq~L4+$y2dxWwiOR!RnN z#Q(YMM`53w*F_?Z2Wz$wM!t+zC8n@E~+rmdS z50L-Nwc^HXE_{!BJyM5;fDf^@03+`X!KA$A%K5@v(MC=5B_8yQ^Z470L)k|pj(AST z5tziIQ;fVT1baLBEPR`BY9Xgx;*4Y2tR361r1YGIY@Hgjv-FE&ca8f}+5P1YPI#bV zOsWmlqG5?E=imGO!5{qa-=Ak4qrUrv&jEzNCuhIntkr5y<>s1V!77j)lQ^wDPJWxa zB)^TQ!l0JUmWO$QZRLX`nOTWG&v;%1T^BETanNpRdj{E>(M;Q(cM#{G#5w5Y1ntF` zV)Q=Q2BQ`W$|;U!NuV?(3cIFMx|j+PzfDgOwibA3fZJ9#i@6rqo4B)vZO zzXN>^1o|*thXfm>Qc3A5#)h$CbjGQWj6QJOIJxq~I144t$=Z)`+TTGOZUj!($4g#% zOk=?umh>zJ*?`39^8L-?y3%tN=hd@u50*VpK87`9ab328xgM+--DQCJ{$k!}DiB3m zay)bWA?mL05z#m2Vta;YC-WiSR&Eu3Q#@PW{>Nawf=QAb-ToNtdBMgBzXkA*2v!=` zhpWyg3faPVkSZ7N$w$1t^YFq+SK&RU$6~=~bGj=08U>T`$GVss+o2-(iumInWk9=4 zf zK=(2)K7K*I7C&y|GG@HH6CLu1=;ZhEo$a=fl}ZybFg zPLjC2c|YsurO+5Yo?Z-P@OnpIh+bF-)r~Bj`ivJLgg-Q zuieKSJ$C~rba8v_Zguo$6cPhTnY}KR;1Z`gr`rl$%ItNiPhWBAJxg!%{J6bvzvbvB z=F#a*++MgHjy|_%rqX^A9a^#3+t!WK@$dskZ?V~vwnHPpkJ}6PV~+nhhAJ0~+uL@k zqsPCUF)kHNEDsOjFAMeYK-tKyu{E!7DivLmPmH^-IQl}|({n_Z?>^<|3vp7Vq7UU0uL zIQl}|(_dde|6k6Yg}A3*R6zd^j=m80^dByuf56cf;-3Dd0{S*bUx<79j}*|K>GHP_ z_w>J8K>q`0pF-Tzf2@H1AxB?`d-~rmpl@~bg}A5xcme%ji>T>|}oI{t_xPJ7BvINTL3_oP#vU*T|9SR7I(_?86z>k@F5oH9LB z6=D6)<$VeHl}fNP^^LOw)&Yb6c+oDmhkK)wdqx)TmC(KLKVtUy+kMY;D=kU6&p<)qA<)#CnR!jt(Z3UPXtflnMh5mhA)-w$4K_~i-d z{dNNVqY3%)PsQ>4zm|ai9qN0WK1&ny*_4pp)&zZ4CDh+%6Uyhe6ZCx2<;!H3N4#i$ zO+r;EGw;`m|I*Q)pQT?Yp;KKsxgd)x{Yd0jncKb0KSJ`I`;g;vq1?&;bGWV^s3Kd5R^sJv$)c)a`+_$_-d5f zGWV}SKL0N`d`1ENX%JKv<=*?Y2*rgC&%NKNTy6+aX5Q}wtXZ@eMe7`b_yZ^ax$1@2ukFpOD z_y*|X@XtCvwOP^w61vXex%Z=1!T-dicR`jOx6U!A%FKJvR>21ypX=l6ZEMc zNj}#X&`$;)r~hNFoG;4KAC%BrPS4!?%O1h+bNp}0(yRUZ9iQC$h^|LqIW04%6)2y- zb9{2|7s_XmD_6Pqh(VE5>Ga9HFQ}cl4xuc{y%#9|$6S3`meo`79S&cS#rq`mBUi4P zvbg&{26wOE7iYH=^ohe?cYJQi@^Syc;O;iGV`b6GEIvg-f0od`O?ULS7SJzDpnt;I zZB>?D%hkUDkJIyrqhC`%pF;Z?N8j)C$&KfgX0dCpa^rUQ{|&fa23%>fLJ;Uk(C2Rw z>fJ~bjIt;<&aV(=7rK1Rjpr8&KEsv6+_+uK&u0?&^Dx;sJ)cg%*E{~XasFcDH(hH& zeS9zUkK_Mm3H+Z0uQ>Yt1pPmnkY7JbsPF%hz=vx*;^cnBr8oC}@v=*86n#8_&qE3M z`)$}Mj{gM-cBm3LY>z)DVS3Xfd`5uJ6`W_y?2<6Og%S?=EEYWEvs7^M`I3a`wHf?= zgSRK(j~M&`L$Bjp^0)Y2p$YYTT<}oOXAJ)b4gcp8@IwZF$j}c+IF$Rc;Gx_j0X>r8 z+)?qBUh!jsGrgS>rl;)$ajVZbi5TirF1YenRuuug+(xMFOEda}B;*nNv>* z^K76m8aypw^4Vi>TMjK=Yv}*n&@VLjUl_d3;I^DBO~4xj5AD_{xY|K(^UAX=KU;)= z>9Y9!g3}Hbf4lWGlfXyu(4N*l)^655-NKWewNH=1)ehuu@fM*8?ba%IXtzy*lh0oo z{yQa1`&hhM@Q{Cv;30oaZ^&nw&{M9hFK?H>mQU4Zg7BRe=%ctTx1B;m&)VPWvqWf= zzedq~3DesU(5qa{FQr#p^NV)qROay8B}{y`!4DYxuM9qD@UI$N*V~fM*9@-h4{=)# zb(~B5QA3aKBAg@sb%X2w)x>SNZ8r4(kD=d~fNvE%wDUH>)o#j4$Fr1c>u+xYpS=lu z`UEGRZzyy4&l$Ye;AshmdQK5M)Kkkd`P+V6%TLIsA%TxACpNupLQnp-+-?*+R^0n*{;A;)?|j?bcv$n~#lxD}T9-nk5kGqvb^D zRc>oQueg?zP#>GW)^2IxLwY-Ys4=+aDWQzPzan9JwqEQrxZ0omIX9?I?M&R-NA0ZX zRr-Yz2<@ZxSNbVJR~OJLzEtqgK5FMsAGNdcm+0B?NvMz7U+GourUZSqB*E$`A zzodnpdfIeV8QkhQP4G}p?FUt^il_pJCM-W{rx4fr zOZ;yQ|0Rac69#WEc%Q-B4Q|uhVQ^cXcNqLh3DetSaLcF9;MQ)>82s-fOs`+UOxIHq zruVYJpEkJGi;%wD*!k}by_RRv|AWD`+!FssgWG(ucDDIq^RZgul8+r{)*4*f7D5dM zw|umn4E0GHdTY;V2Djz>ozjQ(UDK=eSH$J@Q`%?pnWi`7qy16HNBbA1*N!urMG)~` z6$*cn!EJk$7Ce-jq<>XF|9-hwd#av_*T{3~(Z$nK)l*ew zd-d;nV|?PzoBQ8Zx|WHIFkOnj-E{r7^wb&ZP*26*uAZAD-7G&pHFn-+aNC~mGj~{_zC*{R#MU3Am02$p1y5p=bMdi!TNpT}W@=iw}7ccWpQHw%zV9xNW!h z8{Ep(ewlJ@J2_zJEsn)J&V_oWJ?!+i?T@xIVf&-)jJ78dJv+ax^j{S{v>#D=#pfEi zoyr8hZGWsj3x!7cYm~(jQ2vV71@tOc#}!Jic!SW>KAjS#*Ct`&yA5vpQ!SHxto4ZW zc3h|F3ia1?sXi(~^&}tLAEkwWxV6u3nqQ9y-!Q)vf4B2X<*FUjK8iOOJ9J8zUQ&Lk zeL}lwc@Fbsn($P)Dnjj}^g1T13FsA{CphJHDiin%4Q}&M%d_&=C|aIFebhcmuX2}4 zM5R}}(a7yo=I}Qfe7C{(NSOWRO9uaK+4KL3jL@EnzuWdyxuHE3|4r<9*x1vi%a(_X z&}jZ@lv)XB{wf}}Gu&v2PRpCpE3V}#ET1-AwmdxU*}4AW7ZRqImT*|Vw48+cYrRu_ zBzm^}RQfN9{#x&pUh#LkT~fJP??QbVj2${PQSjRgZtbZgtY0td4SY>+Xiu#dY9EcF zc2Ip3*K(!w*ay|Qj1VZj;#z*f@}TJr_0f8v{Dp1yeNg!;uH{PURc>>FKCOa>`t%z7 zh%$$7%creJeL|yhHOkWx2=&|_(5s%$1oVnOCwQpmA%oj|PaE9o`J2|4yCi?L{Ajuq z*K!i-Y4hFcqwPj$x5c8r@|WA}|7%LGa<%*@z2XhV4xP#b{>jvr|1$Jx35VtLH?`;Q zCfHN)ciWySH?*hX4aN?g5~i1A&$Q6|ciXKo!ETDb+jdjAq1_a3Fm~vaFuix%Zfg_l zrue&UH76OM%gBTP@f$Ey~^Dg&@0|4IOS@X(4z+5 zEn#|92Df&bCU~f4*l!A1_PZIS|C!iL%ax`}@r;q%sZ8K&ze)YAp8JJ{o*C;g-Q2vUm{gwWx$kTDJ(koso5ySFRXYk$19R3jrhxrnjblH5VHMq@}#Rj+e zvc%vvUzQ54=~9&%1lM#auKk$OYkIYuD81sXMsBAvfnOnEruSF^{%eDeF!X8@LKZI; zS;R|tfg^wWe_XSN-Fv0A=O%+cAz^x34BjVUdfJ{ae@`)TyM%`LNP}y=BRe{kude_lQ6wU zB^=^v&k$GpXu3Wr>3T-^Xu1@C&hWSCIwH98*&uw527DABG<;4&8q}3YSoz!~e6-A~ zK8lYMdZx?rsW7-LSCaz%DmN{-@>hIHK>uOQ_kdpUYQd>br!s+W+ke%Wj~5&I(+NV_T&_4Qo zUTB~4fPSCc>prncuXx(X?bJlU*Y=qD>^As3LvQVt3FK;&TESJW;tK+LwGY4NqEmXs z>jV$&)@*RAr|w%z`mcDF?z+X$|AoP~8r=5FI}C37<-LMyzU-3w$HiCu6@S|BvGwH{ zgO@{BbwC3c*#b;*$b;Ef48{UUA+3H!LS}g`T+8NB0H}^~nVMRiD}feHH}ts*mn7 z9O~0x^x3V<;Wr!HmfKc?Tm9Pv5B1l5i$i;E3g}hOcEOci@eU)m)9AU=;8vge1O6JN zGvKfIo`7EEb_Mi`KPq@=&!-J;*KHm!xLvn!(BM}8=LHY#*)O=-NA*7x(5s#U0lnf! z1P}Gsy`72M_m^=ayd>gQ&vL;-J#|0mP|ryLz3P(|TkjaRc>=YuQb8k zf5l%meDcb_!TSvVaU=Z=^|AFr_c14~@A#z57<&D7hxihMe}#a!MuS^BHwzxtix$Dd zdZGKFE4|vYEudF?labr0%D~@haBJtC2Df_NFSyE8R-J-}dg>nRO0W8K1@wwPYUEly z`wVXNd0KGgulno{_$&TQK(BHS1oVpQe(+)W90>U6eALSUAH|OfPCm9AMx(rD#O*v) zxxsCED+CYIJ4x`+{^@{T(={caSA3e_VS1~@fW#kDW5Ul!IMk=8WF=Mlrl>Z3YPuC2dM8+wcD{8C77?RJ*Yf2rYP z=gnFT{)B|-Z8JFMl-1dJNXk~%B>`eOM?~mR!9)A>3Le_W&a+wjSUdcK#HDBL@Q((c zBw@}~OOx%8#ReZ?=o<|#RmUM)4PIjCHNVIoTMcDhzl4aFX3^Z7Gx4zoufaVX@o_%r zt~yUeyv*Qx41Kx5pEtOE8_mZ$uR=Z*hJKP5h4@5+>-dzo+K`Vo8Tz!Lf5hPD8T@&J zPcirrgTL3{Bjmk+a;pqJ&EQiFo-z0|gVz~+y216mkNm3*zRl3jG`PN(k-o;@dky^@ zgFj>NxdzwwCi1!5;71MpJcE}=p(OnW46g4l#4`r3HuP5-T;DH9Uu*Dw5(0 z7Z|+H&|hnC9p{sNp}|XJoJ0HugHJNJ)22IEwU34X)!E;-4_Mjvt6O82ov|f4RZONxw$=MuXQH{APnMF?h4VI}QFxgFk2R z7K0BMe6_(RN#jL*S`E(q;^>I4^FeprV(>PD?=|?R4F0mgHyS*HeVORU|8^gA*KG#h zWbi!({{w^XHF&$hpE3B|2Jbic7K0x(_#YWOBaJxq>@awp!T-eI%?96U@Er#KticZ& z+>YBTu-_3K<=*Fm{yKeKQ_HgHZA}~7rf1J2430sJBMFaxyz++n>lfWnSASLA5}f$h zdRr71DdvGW;u0(z!K$WJEAknvS--xezG+4N`IsQ5FgYy~cegjKTa$NiCLb-o&7Xl; z&%+7%RHChK!qJ#bj7=n~y4(xn*hG-z>Kku#QS%d-J#&#PNw(;wn-+7#v zSgXPsSAHsT2Di^!)~vt@nJ~cW^=+|Y<)}(kzik=Lt;Ef$HH}DBD|~xy=b9C5Gu@$* zRs@g9TnVb_E7q)9)xWPriA= zJlwEKsB)GH80L=Wj7u91NR`7o77`U6elIQb`6-T1M^b&KlPx24L*k1TUws2x1#n!k42=-Zkd0$ehqxVJ0joy4JPg{9jaA{>_zibx>O<~ggJuUBRFohnU zf^u>c$PILt?0dqtgmgTrx4xxmb@+@@d}Tw6k28qZuUxabo(BMjgk%y=7<4Y$)C7rg zB@zb_~wQN9tv>I~qlBC&Y zPL+-!$U9%!KW}PAr-7kPsCTYdyHlED^!7#CKh4u6XFxeRJWi7pEltbTL3C4?5^1+` zkEKa95!j&Ro};eXMmC0JwgGm}5IZ{#P=MpNn20{JV;*=V-2+iiIXOS5YWj>e{WSUs zn|E57{L$ErYcS$s^>$+p9ilX?MwFPo&mYFE9CGP8CUdn5DAbx_a~i{8Gh1%q6@ zTjlSdRm;ld(^rso{f6bybo7gD%jn;>ioP1do3m|A7`cxuVs4&rPfb9hsZoZ&q2f-MFdlFM%$o9$`qA44v&$*1(+3s57uCv^A zrn}B?S9h5+*AcpFjl0fr*O~4*!(H8F&ZUmfU2EKRmb=b$*BS2WE_3EMLU*lk*IDj5 z(_Lq{tG~>4gzj47uCv^Arn}B?S6mvWUs^-LIqo{!U2EKRmb=b$*BKsn#noiwZ>g%x$8`Ko#C!_ZqL3>zuoYkmhya+LbvmN zk6nIR{xiJ3=ebV1!5lAsT_7-wzYFn+W$?4E>n4BKQS5!r zjWC@ueUqIdzA8cg9U^y}kDk4T@;?B&IQi8wX{U41l+P)>Q2t+HzJ#Je`|13*os*>! zq5MBb{5bgwV&rqmER_FNg8YM${yh|GTqu7qL4JeCKO%9rz~_`yDF0A`e4U41U}Q5G z%Ku4%{KazQm&T`jPCeC3Gy4IQrbCT zvI^zbB*<@-$zhv*R^>4L+%Z0`{OSDv2&q4mO&7}NTq>~)e%9?3`MQ3R=|3I6Q2zN4 z9w%SdI}BK+2#4~|MdUd7t-tRh?k96N${&wkD4%oRaq{*5^{)1o`7r#&9ALT>iLit|=KrCZu7~CuA*L8SXfSrw>rl*2LaQy!$PQIS$ zz3>F`>l5U6E%*F)N_@&c2ftAMTr>)C@?B#E`VP+~dxf|>Hw*EJW%5wmH+o>3;FMp9 zUnu{t5jjqNhs@V2y|8hzG)#X&g8ti1GCtSW#mV0(@$G+Zln3%W_j3TmGI=QW^KJBi zj+3_F_I&&_J(~ZgB-Fn{C#gRN6><8%Eb%eC%5&7!x~l-h#UDJ$^nU>H$unb_GTh_= zoBj&{h3VgvAiq`=S9;H_(EdM2sQ(Kk{y2>&K6SP3jfD6-cZ=>s@;AaxarSFG$@o_! z$ZwJO;(29o4fVek3dYIbc#`sONr>NmlJT3-PR7aSc{6k;vfuWE_}fl0{%Fv}$=@mQ zw|F(O*U)|=Ku0W-rSO4jDZgEUlMmM|XnM5%PEL@|^U&y&-rp7G-@=6SPdUl>e+>a~ z>7OR?Pt<>Z6Y=BHe=sKfb4+?P{Xa;MzvU$5KbIiCUH-K162sB{b7SNeC)n?Kkq?-mbBc4lU7Y>XF)#K`CRl~De~gz@{KleGUC z3FG%ABH!Bo12OXXJ#bw5=Z*DtTH?LzHMIXRM2<_pZX9prXTT*)Ki56S$=@OJ$3Z{q zLit}p{5bht%|6znWDd6lzbo+z<#WAvocuk~@f=`e<3jnH6XY-Xq>p6B@3nwJ`Bx{% zZ{y1jT&wr8*HC^YLH@Q|eUyz7lj*+(zfeBcuf(PQkjPhhVdHGAVfq*07Z?9!iNDnn zBOK~KMX*djSJL7EYrhWxQhl`k{xZRS8_RtBu7GbS{}&1N%dGMd^}AWx?>hWK`5#03 z6PNxpUl!p`B)=}9{n{prlC1pe!7r5mwS@8GevyCBX_32x>F+^&VwoI?3-zz@K%d}D z|04WC`ELM-OMhp%kGMzTs~5`uCE~})@05aX^Z&y!^8Z(Y{cHKM3>V4^?>iFge{ijj zujOnDZaF0wrvHZt_Fo|Kt7#nLLiyiKu>TQ}-!Jhg|0DQ?@}YjL{WnhVLicztdky82 zJ+Vxd!Uqnl_rA41r=&vpk0;oF5+@7bLV4l+w-W4Mvcbo<_UBwlDE~tV)oDvGQj&Y&{(6khD1z;fb(7BZcT+5gaG3tph)*mN&^7;o2c#Ig@!Lv3 zVfw2Q=+hgQ&NEOQ8m(cz+ihQNlnT8MER**{xd;-%Sp=r zj|BOT#>nT8Ae8^Z1pBv%{BfFa@x%0gH^KheH{9lduapkXH z0O|$x=AYCx2I1{wF82UtJP^u|^a>wBN-EWE#f1FNRQdQv zyqCR(_WN-{{_nicN3rcco8(abqJ;EUU*zMzoR#bYq5NwT(tluwr!SH6%k+N+zfk@$ zyeE@{b6eI;n(FWV1@+51Vdvrye-!|+YD5!K5d#&K>UNB^MO9;m}tMd@zeNPFTa5HFOYh23#NV8U+2`+xF<8_%$+gEg&M}(dG*3;ii>gB}ca+aY2{`yXWn`-X=f<8x@ZZE_TC z?@yKV{4`a`lEvi>f{k~W^2D?9;irne^VS_j-N)7xcfWZ{s(Y}0MEC2zdkXX#+5Og4 z(e_tUBYK8Xsh(e@ihEv974^IU{a%C){i!p1UPztQL;ej#QH{T!&~tRrHHd#T_|$^m zRp5Ii^q=1iIn=ehe@tdb7;o#9jl| z2isqkq7BNO4NyMIUxUoS)I?`*&?Tnng;d4VeErIutp3y);*WR!zYPzc`NGJ|5M@wq zdqq^!4%^)YJ>5NQk_{u@HQZ-t`V38%OnI#TJYPP4m5Qd)w$OVjX*>UGxR>_T`!w%i zW4-VEzr(%EFTGFm-q3gc0{4bKjr(>(-}y4`4SkyThQ9OgaBs)d%szZ)k94!XPC&ZO zfIZ544oQAxMnyIAP^M@{wmZm|eTPTFmbAa5c~Ug#T9kvSJMYZg_ax*$j9-7M0(^Wr zpM(y)e;9rigB}ipuh@R*LOr_Shq_!;RC4V_MU%! zZEvyb6H21Y5Zhn2IY*`aJ>@%@p$i<}GbBHKULIX^CE~KLc&e*2szjT{wkhSxFuEV) ze~w=31BRVz`$s)A(Z==t(%*Eyc4{=FdW;r5*d7i*kJr!-T<~4hgL2M*y-Qq~BCpp@ z%?#!1!M=#)&eJeIy-pgJ&wP7hby7amX*e|k{nQxrC#RxcDMkPC9;A0HY;{`qTbqlw zQ@5yu_8N))>J;cW0)17g=NR;T6Z%qSdlb!PePI~?Wz?b~qPzs`27IO^SbV`iu~ zb6Y;K9QO4~{~ zadkR}vCsJ?^6t&kqM-n8GVO+L}lvi!^>gcuFW4Gj8<+Kq%M{7D%Y+A z_CwHNeO-Cwrc!tRZQNt%TVDCd2zS2=_n4|FuPiTe_qXF7uMXvv3!}BWKEGpESE_!H zGP+Zr7^Iw%qBHKjeC6!H%2T2tE0bwK-cGH+^Pj>d)PZp$(6*OEy$eP~-x-bkT|Y9~ z{uu1mao+x2R}@V+d?xZ?&Rw71Rh1flFL=JP4CMf0;d0uE<>?m)qb==u89vibJ9KSc zI#@L!>K#HEe++u{rj`!YID7v7;1ioG2TMjra~?k5+vYCRq20H?-`S+k(bNxe+*%3Q z-KV1OxDf3h_+9jw=u4GFqYpn^8bN-^z4xH}qL2Ab$>_da#7WCEVfuI58^yUXpf4AG z?7A$CHWFjOyD&D>`oZzY3n&vTQ;h#Uq=R~E`o4yH+Sipu^kbwcL4RF(W@c#g=8p>T&TY(e^uw#vH!xf_rv-X!8DD4?(BhsigZja4@IyOzIDOl^!OfG2RSx2PuDlb^SXLw8 z`mVvexgzE3dKz@mdA@G4t*W?f)1a2;4zx*Cl~M0Y$iEJxqcSz&@MY&m+iSqb@3xm-N&y@qzw@;mU$&pfNoBcwyi3dgVw zr$oK?op$EEM^Q%JMESTAZO83s`)N~RbCKUQcg!B_Orh?BXFHy!G2ZV&z1V?zR&v{h zL0671+`kKZ32op1>*3zVPzRqVo_KijuZQa%Djt70J=&M;w_7IIo_!Pf!8%CWvYhaq zxQ?aABi)$GMcc|g-M`aO&rallz5gEii9WXZcwc!AdfR7wXKcqiquL1XN!j{zKjO8c zUFk%;`;Zsp-5~FnIeLzf!}m*$w>^eBjQ6hO{)K(|H(+0Vx8Qq58t)X}Kp!)JJi#7) zy{{teHFvBZytDZ1!|h1N-DrCUD)Ekc+xo#`*ye?^ech(5`d=Te*?ar?!OBykS2h<% zb$5fFWsQ0GBKmKpA^qBL4f7az_MMKgXWZ+af#wjN7oU>pCQWp7xTb3i+Ee6b$pr^@ zF>k34+t@pcOAgsZao0Y6Wnf)c+gIrsL{+Dtvw(G|`!?Po!wOd9-b-zMAgUqRy zqD*}s_Y3TpOaLp6N(c0I}d}w0T9c_c7D~oPQ zeQf36w=fQT<22eO<@#RIw!b`FLw#Ht#7-O=vAkhAruh z`vdix{j1>`Yqw6kTQJ>|@qGBIVvILa7!!@a*yt3Dkw#*yGz#O*lJ2*jiZI?R!ngrr zPRPZ+%e|^!G|G+RT)))MF=J8tjrYI?>{HlBo|TTev5szN4CZ&t`)V)V9ec1puxo=V ze7&Fg=kQOIE<0{y*+zRYRr~Zo+}|ZU{5u5n9p*cd&N=vZYmTupV>uR{;L?Lhwwe>k z<=hPFx}&EY*v<7v7{8$J^?bUJW{#OkKG(5}V^=3QUc8)22g>o>A@%LzqK}-JdpZq+veV zy4%n$lVllest=9a0ilT{_4hcYgRU-x(txn!B=KK+(8 zYi?<2TEAw)x)n{_u;r4rHEUW{G%s7Z`jVEGPpx`i>$)|cY+BKlZoKT~xtHBs(>P$hQE1G6C&YU%8=0(WFarn^{-F{ErnoH*2Hy;R`-Oi8{o1kB3ro+bR{jr;d7yMmOKD~GLeG=j@@^4@>qzx~ z%^e|+l7IslY|Qfe@sB{?fZswinslvWaH$>JUVPj{rfP~xD?w9`&QxY(>;tzqny$U9 zKxYdX+lr1aBTAK4f+m#V8!WCfrJLft<6duY|Eaw)97mLj@Gx-Sc2FTsvXuLGDL(?* zdN?Mk(50eqB}5c`$oDLfj!LpjTzSCVL8P_V?3U>ASg2BlUL$_q@z3#5oPNsi zQGC0jXT}%0R8(33Zgup9I0;jEyEOW!f9&XG0dK%9m953O2X{Mqt=&1Cp_KdTFCY7i zqdz?##N9@R%OA$(X|Kbzb;vz<7XC^`Jk_5TK2{_ke#K}FJ!2cHsdcH4#|G5eLxmRhKslTpmhs@te z;NO>kXA<~xtwvnB79^yLODN;$&qYVc^=95LzPm83EoXIQg6{VS3FH4*9eQ9`b1yocj-3 zJ{iHupWlwEQ$D1ZWm4`@n-Gv5|CwZ+ECqDwO=r<4YL{@R=N7?3J+*&RdWdmuYe28~ z4#BC?ez3WHBE__PFkvBA@Zo|Bk#VS1Mc9;SC`KrgpZLqM;1vjoEQZZx<}udYEQy{#`> z4gCdPWp~|S@b?;A_p~6N3k}YR5<22lKIpD&-{?a8nFO5Ut~mNb3HXr&T*s=R+!C}i zas0~@aJJ`4&-Wj7RS9@a0^PYu%J|BGhpy)gC8^a41<@Vzn}~AWs<=y{WODf45N&+S89?3-OKw`ke`QR|38_0pFj1A56gUzeiSo`!{0%AGA?dK(RH z=`#km{nx?-e5t`Nl`y@X2A^y2K7*$X{XFSC9e0yn zc`({MLvQWSY4Eh+uk|!cSC`O->3T$PrB~UH2K0*WHF9mbo-w#h*YgIqdiD#hay1Eu z1P}Eb23|XnUVRpCWiz9%>T!%uV1^Yxr0_u|CE*@}FY#>@|4W;ClrR_2;*UbfNzEAICYR*L=}4 zij-b)J&P#JuYRMC&94$H%%LN_9p9D;u5vvU#{Yt=T*cFdkLto_)d@KFo}df!MfZLR zlff_WqTCg0Dx3@XZ%yF8)9|tB!ha*Nd^!{OJd(iYd4t>XQ&Hmi(>@pa zpu1)aZu{j%gWG*K;8t$4!GFilZ!x%)`-s8qdpg!fIY)ic zhR@T2hxxK!@UXn;nGi~^d2=A3SNwS+ce0Ut#Nf7G=+v|F*C-=ouo&tyPVlfirwwk? zJ4Nu2e^mniX#u^at2&@pe6HZs$EJ6I!EJgQ3~tLql_Z>eu23Vu*LRjse=TF7eKLlR zh6yzr+>Q@B44#%Sy{!@s}5M1dMZ#Hr#t8w7l`HJ%l-eKs|2G_H_Lp^nVL*;6e9l}THRiB-L zE4|{KMy}P<&WD_*%;E1h^zSveoe#On;0F!;Sq6XE;C6g6D7fmcQFQ)9^;f*ayhmso z$!FsXZuwUv;LQftwvK!@8r+tvod&o4;{k(PJ})QW`i{vnge2({n{9`Qk8p^;v`Cn^ z4E-GPjKQVJcZjwFq%Rd3dW&&SN8J7^s_(PJ$9WQe73GNM{hOKHojf?;D2sE~b8L&g za`nwCSFdclEy_M{2NPkZX?s8sZuOj?EM4B=K-}Uz$0F_kpWIPAZaetAg(oLEKqrql zT%`itkVc$v!>!SE-+63B&S3Ub8-$r)9?-Bpy9y@h2pA+Wdk{diIfW(voRxekIb9`p znt`qY?9sUv*$Eq<(MN7%ntK- zY%SuB9spKw1VZ-2gDgKs8k}aZdNt0A(&E5l2w>e$<3IqcI?5H)li#`@Hf+P*{o$tl zV5(c<)12JU9sAlhPIr6O`~B#-&AQu6-ftSuTfeD$!KUnu)BoExTwj8AO`0~_T13?{ z`S(QdP@0`A?HYuL*|v-iGrYt&+ZOWi{fKW6T}peafeeL-{QU>2H(_ z>G09BSIV;PmW1^0l+IG$Cn%q?L;3%fkbXTId50B-a47#@64JjvMn3z+Q2vC3^tX%M zbiIPA5z0S3A^n3QU*AKSe)hki{Qba?go5&aM3xfiyeCMU3*|orlvu_+&0PlMPooZ* zZ=-zn^P&7N0gIDg!U%9vyqCR(^1p)m&G_~|6%tRA_#eu~^a0Y+ssCpZ)^g$=;<7>F z?^8g0ji>(Ql79hNG@UEuW1Pm*NB2s6czLc`;*Sd+sQr}qkMKOs{;l%T+b4uf4%;G) zul2tH_6tO~7#SHX>pUd&W}GlS_Ij8-E1h$GX9s`p!~Uv!J0h$1bibJ!i45-FM#x zjC-)`f%4)lrIm~8vMbr$s(XnTc-v6`M?@#TR{eR<$G-&-l>vy6;pg@WanD5tUWWcD z$G;Hw^fJ+J=>OKy7vi4&R72^5`y72C?&;A(1x{MU^Karof``p+idoMSFC`J!d|4$zlHIXkO9Hzn}l5U0$YfP?^?(&Kxs zSUo@DUmJ?s_lT{N%^bKS>NUL-f_qXpRk>&64pk7s^>M-R}5x zaX<$50-jqJ+`5q*F^Fz*Y?8S6y z-Kp?!^lSKW@~b6YC@;JpLi{-SJEbzJ9Lhfhzfk^$1o<^0|3v9;O_2Yn$hYa|C_R)v zBSHQYX{=5ppZ#N8`t{r_E1z#yq5MTiXPo`ZrBL=Fj&-5^uSMiI`K|Iw)hCf@f4)V8 z^7&r?<l6^5v~=oUE8%K~<}Tw!(G$%@^P4E;m5Uuky7t#%42QIKX}@tMzLsl#dmPGkQKUiGD-Wr6Tzt$$UwUb7 zDq8j$PM(XNQ8Ty3&rYBGT=byHoQzX0ga0U~k)Jc>z7*VVnET;zzhUl0gQspzE-K0G zS<{Ey*sL-+mO8S0k@w>$<$Zf{F>j7nEO@QeImIh4)>Xfo1BPLz`57C&C?| zNh4j&6S=o#Zl6kToBXttFU$kC7W2vPlZgU3TldZ?^{=fQo^8V~ z_Wyxp*ke@p>*4Q`?YOx0!bZmwl_d}-z(33iKy8XF0cbl(QKXl!F4fZ1j zo$f!=30=>Ej;b%lpylL&-%05^2J}xtw#M&s_85=Xzi)kOJ)wz(hT{P^V4o`8PedFsQX>P ze=(SAK>dlPqPZ!Lu$Nealy}xE*1bLBqwn}~RF3)Y37Gr#`|VKvz4$+->#6#^uH2%2 z*tu@Eul7|%Zoi$k?s&ZW4b<(|f43NO^C>qsf2K*}>yk$9-Aerju(veR*#TX+Co?hC z$M4NcUC!V>p;M{P(M4Bbj{Qo=;Qad2U7#;l+rEK)HM9Q-z_wm4_lb>Q*P@;Q)LHC9 zxpqGO$I9(lSDu}>XFA@%{(s=NoqWH6vef~5zl3_u|G!?qo{SH#(EaZGo>OQiYC5t1 zlD0Kk2iZ<=zo;C&--`-(&0SK4dJ*rZu=AnMU)lW^4`;f$57E!C_aXAg)o(0OSos>EJHO&BAFPfmnAKiPmXMY^w$24xIWn{}jp^0cUK zKgvZKIQjLB<33ql&Qbi&$NYR~Of+K|_U-Ij-gge8G36!A&- z0`~pvL*Andmpi@CW~027?}sg=Jn!4Wd$gl{Gc)@z94gHU7S9BZQ9;XIel%XEA#Ta3eWBRG(1OMWcfdT z`r0S42N`w8{((ck1Km5uL?5nvPc-92@P#dAJhwc$tO5ITtIfM$`;r-%q5aseO!6SM zUAk*>ZjZ6E$agIGj*ezLjPyWW*?GW@7eB)OWV_Laj5!Iqu&+54ahRr`AU{eZ{2cmj z_RD?Jr@H6p=WUzLy5hzOrKp>44);dykuv_D!?PI=wtGx%*N3=i?A2Hl-F;&l`Uj@v zgZ{ti9aoDFEY>zm+kB+$S<+RUQ#EbQ<(Fje(Q7!qVcSW4wA`^RUpM;Xea@5HC9_IW2{#PP_<^|DY_jV>PR z!yb{yi?S*svmfIt=!L$%P%oa>zPP|L_ICZsTXN5^CEvdUlHsRBm|EU}MjgvxV*Aft`5FGC!&P~B}nuHhA*M0rmu723$ z&TZ=V;~$ZxPUxQTbh$nD-2QmQkJugYNRKgtbIrWkJ^4I6_6U?6`S4#p=~;p3cJfk4 zpSR;)1|)|_2X~McOOHJT-Hv_5d$J@=o$XP%*IF$_s|9~;3rqLW|Sk;335ZdUoD(5oo>j|fP_ zo}Su8VleBv5h{*yxT`C`UV=V;HkE$9OPRF@`lJ+rVuL>;4}R?U z@O(Zpv1hWOs>M8y8_5{2o z0skmO#_{19g>iUe0=^02KS?R-hcl@lPl4`DOy24=3Pl33g`x5GVJa z6YwV!^ucRjET8u!$laHK&rPuZ=mdOif}Z^e`uuwW{l6yAzmkCeS%Mv|NZ{X^pg-QJ zV(m6M!9L{)IKLZ>%g3V$`g|jS{{0F3F&2;IpGm-R_ChTElmxk8;~dvmROth zSXf-sO8TinL$6%Iq_=olaIX2dM8fp6r49LL3mNiJ9YQ_}4gYGxztP|`48Bdmq1+vU zhjQ;Xd}bOxX@j#4s^i1z;3DaAgfTs;UN5b@!Klxm0@LCBI zpKEZ--|D}_&|hZgmr6KHSA*bTx-?&u9^##A4(Jtc6`XorE@67@5+?qB3DZ+M6SsCq zO0P}VJi|xzAs=f8tB@>KwLzlsAzV`{v zwWOH8%{p67K9EIoWrK3BFnFDWiCa6UJwrQaISK91Abga5vfOJqQF_H&j9gnD)SlGG z+QHfw z-;;pzeUOfFGcM#WPbc8dCE$k=@S_R%2#j0kLb>G$_yU7l`!6xLZ6EA@EVjHg2z_XO z-9J|IOWQ2WD?6w3inkiMwtd)XaI4S#f-8T|HHta|{)+29v`VjXy8?Q}A2o8VK79ta z`aCVT@>jY01OAFX6VR(%-Pa|w&p{*C>N8+)+kV>pSZY)#{COBp(y^R;$OqkZvBB-Q zi|==Iq`%e&-L=Kw*BQLc;MP7H1rP1BNpMZCvT6_L)jnGSdd0U2PCc!CDukiR)ig{J zT;(dR?IHOrRAu06KdXFJ$uqUB@=<)AJP-M38?Jo*ROqy=Q$C6>PT-^Mt@8Pj(1rcA z;@U5V`m`GU*GrgQhlJS=-eB-;5+P+ZSgY#Wm-7^v({~HyAe?Y>TuG{5a z`wO*?;?K+TFkOcNKAYu!Kz!w+_>lxYBcLB0`QPM&?#g)vI_h8NgYKF!_(u$0D>(Vs zdhvGqHQh%@?W6f!C;T;CigVtTj&g0i;QWu`R-abEmA|KoqBg;mzv3GMdX>8=pjUj0 z;GsS{3~t*otzV?K{gjq5;vZFI;5SQ{`0pBglfi9z+XWBPyG8IYy;?7ne!9?Y4d@l$ zA$XYHJqEYwecIqQy;}asN9#UGpEvX$lQ6v!2^WDr_b)(hj)Az+kW|}A;&v9j%J3O0 zVR~~7e!9UI7`)uzsx$f9S>L^eexjl8Gx)g%-*52q4L(W2;kP2y2Df%leMoQZ&|&DU z9aK-!TRRLGdTWPipra$bwL_!9tsU++xV6I}gIhaHl7653tsQj#I^y;{LO!-|TXg9^ z*lr^*^Ua6iIM;3E&D=Pw_NMvuxtj&q9g*>K8gIA$$P%T|L}KVE5C#m&DYss#Q1W4ys1{@epB zo5W@7-4cQrz7F@fkwhYk5n>|inuFK^z;y}J*R5$>*0yZA8s05dm>zuAv#f2+O5xy$ zkza^6oogB(x_(ttTeJIWiWX~ZTE5{HCflc#(6aTbXShAu0JBi7UwON3B9>Poxw1jl zPQ)Zdp3q{~*ZLjRZfkAgR$$l@ZOv-snEjxLgxD{xzH#L(P3zm1-^PU$IlWLE>zCi= z*HzT#KXQ?pZdupVqEjq)a|NPqhHR+vX>>7)z6vb z9^<-ky1UG9yRP}I*Jco%kuB4xV>56|cGY~My@79=-^sOc1poIdbVn}s7|!<0bJBcg zF^=nrjm#oGkO}Vf7UJ^U7a{z3@k{flbN>e@%yS9IGoyg`eP{WAT8MoL)2V%9h0uK& zew=)LSJH8rkZ1po(EA4wh?9Rrlun3T^|5n=idC&)h_@^@w>`#>oFX9@B< z&i3>=e@OWp|Ag|tlOSK`bq;zq*=s2OnFRUUWB{k@6)2ypFhcoXO^}~Sd65HI$vzOu z?@o}v{~S+m(|;PEP(H_CU{O$it3*(nXOq2#@>$G@WwI1La6krk3j}BSIi3vVb3QCi z{{13I?I&ys%Kv?cA1A*;mL?oA^2f)>AC(|q&zaEmAW8CZhH|X@lC+P}FX>?Vxtb(Q z|3r}wFVD5g5~4AAsJE4cMkkb?O%neR8rL{cCyR{0^EmqrOz|XrQVyv<+ssh^ZzkBU zN?$fkAph$L_Uo$h@-_b{pG`_A|3e~Q)bx>Xt*Hq&F` zUovM#_1oFMaMp}jbJEV8{5PX!nO~HF4s7k-gIpVaD*Db_cNF0}vf}Qy@IBWd?(cSf zw0(G#|2_(a=`9(&^I4o#)B_&dk%n!s!FK%yi{D7}<2$!mSX+-Z@;xu%y8+bqZTOCP z`>AJS=Kdlzy5}Oq+c7eFrRA;KXK#H^=Fb+cY?*uA%3J56USIZ?r$m=M`Rn02thKl- z`Jml9 z@9TJhQ$Bd?+!FDXkK$VeS9-a1AH6ZG^osA40Od-z>=3OB#5uNBr}_}Lc3mn2q1*<+ zL%A)2hv`-QiQ75aE<>;DbqMte9?I477|MOx@Zp$QUB3iEK8FMk`5YCTdRjglbJ7tn z_d$2na>BV@wBcE|KtjYvWKjgngcD|C{ANXdJD%pIjnSgTSKn~cO$+N0#=OZ)?9fvW zG)tJ<5GjrgBF%KHauH&-K?2_vd_on@E@ovU?hTZsFcWbyXH|&U$++AOLapm?yh6+@ z6()x;)zrwjq{gHT{Qo;Z4J{|BKH;IUk^V{{-8Y9_E>K7%Pv5c>p1xtF^K** zO8IefM^ho3^22wJv{WA327t`bTK_h|stFo5Q{tcK-Qym_q5RMtmiQqa(taHT#6t2T z0<;GV)cy)TfAFFjO~8&mea7O^Em7~aXQ{b%J43d z+RpD|`%@!(zB!BgFO2GWBXvs8U}{9q5XQrA;#+L}uJ>1R=&$-W|M5INyX)-s-x*kx|LjG`@$UxQL#Di^U1>LW%o|wY-?cD? zSxcIu-+zeH1a6NGjPKny;=IRq-`Hp3M%d`Xu+?JNY!PgCL-$*ET;DzX)Cl)pG`!ir z&+%RE=SbhM>~rDXoi_V-rzMxonRQ+5HIe@hCgQ(@IGJe8|L`}1+&IO)8`Q#ZT36h9 zjM}k}7B4M5r@?-p`Ngrj#(k;m{_+PWJW!D;FDk7BNp_RyAO8FE82eX&PXm5*Q+V;; zxVk;G@sTFKa6Q2rLKOWR(caEG!Y5qajq9D_-x2W64R`YI2vC^7O9Q z;cP|nT^Vruj-cya9s=38d{TGEHZ2Y(`#8KI0slY({(lniyAtq66YwV!@HsBMIXk=Z z09uwcI*tkLJHkQ_XUFz(oBjSE9CPXzn|#>rt80`1aXW@@6Q`R;>i$>;J4L8tbP)uRJY_d*TMr zF|_(WM@YU+0Bu*5x7uIt*^b8L-$AjTri=Dtd!+HzE^h)0Wdn*Tq)?y4Sbz5Hg7Liv z{3t(vtUr5pbt{^Eo1t=%AM5KGI?dSMsiY_~G-6+7s1egTJjbUU=ktItI|fG@ z-8?z>8*(`IY$__x-xEmB|KV9RZ{AXb@o@fGHQeW?p~~;~H)!_z<2ylSH23}S`*f+# z{{i|-i2J>G`a$z1F}WWy;m)FlIs9*cd%)>FMSZ25`{$mJ#3o|C-t&JG_vw**=HDmy zPSft>GrrqT614oUU?TPc^l>tyJiY7_$hm(!_s<#(FWo1Ia=BN~T@Mk`vI9 zZue>JH(qcObj!xK--xl^7AMa@XoT9Vtyz0JOoc#ZnI2MvqBq)gVdmTS!{C1#E}o&K|<+B~Kq3 zlWH%{`%meI+yKW#O}spd!t!?B8OvM;5jV<-e`owP_`jWZMsCFDS7Fi5xuXu(9xI3c zm&5Jo+CO6-XWto}y@7oOKg}CY>8~FLpE#WJw{iIU5Y7ItRS zfbUMw^O6MmH0bI0u4k*<6b~1?n^y_0@2YZ}{U%=DZNbjDYVnm`@wtLiF3Y^S1ri`` z-{q$n+`bFXGq|-A+aEgevG2ll9(K4Hl0_JEIY)Z?F5GHxcADz8NPzTQ`=#!F2@s#4 zApA!RZoj2CU~p|?3B7Favm{J!(BQHR(;+N}bd)R0Bi%jUZRm*G{H+mO^UG7=TN%MM zzZ9Pr&}$kp0lnf21gBh^zs&}>`m_ih>eDKCs83r!uW~mA^oq9&9_q8h;8vfV0e`iF ze)|&Y(;3jK+&zLTz2c7;xz;|98{F#C7w}hoo(}jczCWN>xz7ajia#fKXrDs{xB3hO z{8jGD0e{7h1oSHRXh5&{F~LK9>^I`JeMr0hy|A255j-qcRf222sGidTdex^opjUjZ z;Gv$24Q};pG`P;EQ8v%orXwF&-s|q$3@*!V9lpunT;rjxUGOlyTLcf&tMBNPn^q?9 zdlUHVP2lsi;N&ye@aZ@Bc?LgX@be9BzXiADtz3p~VY>7kKTOx8fL`+}Ex6JvUL|;# zkMJ6*vm#=Kge#6F(jc#_| zr)3v85L$Ng%_~>)9VqWeS^u>WpXAsims_eSi>iSp)+ma1O>?R+#d?|PUmhJk35s&>-&oe9iaj7 z8JAc_?$zs)S0=t^(6NtXIt9+Yk6s8YPX12dbozed@4PGx(?1WtIQh-8#(tY5jPm2= zZd0%?<%e^({gNp)cxD}G>C~s53|A90j(fq;ooMd%dPG)UK8C;gy&x^(!yzrlSHyy1 zl08>wTfjo?ukfvi9B02l8Ki5vXg|K~YWxae@N>iuW%E%3jZI(dNFC$iW1Ys_nQvq6 zcE+VOGyEd)lV7K?UtcnyLk2%y&w%|AEjDAu98iuEY{SZDratT}%HXLtM* zYgAsunw3LXuR{GBu%G@z#nCHWE4Z$tV;ARt9bO#m(>cX7=I~H9%I^dgp4Bt_6wkCN z?jAau=dq8#+K*GPK4xV1TUg66m@0DTs}Dfd&mr??sZ*xD0eyJB2+t~b7&>)doEf?k z)eCcpJrAEBedk523+V@qKX<)i>JytQ2VWYFx(8&PNITZBe{*yFAm^)jCIQyGOg)5k z?p#yDeetP#XOJe&wdd00&$HqADX1^*OcgXO&ga?|(rLOehl+X9Ymla^F@Il+IZ~YI zem2gAdCH%2Gn`5x?IW?qWfbO6OF%Okv}2I|Q;~k0AA|Eyjv?*8N{vLixwik5sjr#! zK|GI!^7?SLiCe#qbnqT8zV4g=-TS|9Jm=fT_uR+t0;c+NCpyoFdcV2(oWV}mhjBEG z?tB5<MDA?p1U(mVn4(EZShbGR<82zRE=g*_{J-Z;~*^XW%k z@)^%4xfo}*fcMnSRQ=!!sWYb%ZyyJJ&ZO=AJtjtKIyZkJ_x!Y|ru)*&5YIm8MZ7ma z`_h+-y1TGWY5?Z~ajtj+^61V{IOhdt7ySIb`8fCH4E(<^spkdQ_u!=_~TAp^UbY^CON8&;C~G6E1CB)8zlBsO%vvbnkf` zb%FdiN6-2B63owcA}zg03++J~A7?_(z-iGw@*sU5()Y%_S9bd|b|#>HNxq#***?s4 z_YDru_I&uCOL>p#kN<9J(kY+5jQBWHrl$saT#9mzzH(>@(nwkO#kMc=)4Bgbbgta5 z#o`*Q>rf7_MS1)X%H;x-&kv&PUek^8>egT#kFWm!argvt^`v_N|9`vyI?dzvLT84% zP@d4QxbPDQe{W87Iudi-^w_!oXM`vDuGcu^7?6+eVW#O;C3w=&*S(H@ckKn zZe81*Q8)S6b#22>6{Ed41^F=&`7#RmQ-XXNjrL*;))N+O_y6aOz&gSa_-`kLb%e!e zJBnNzNM6U#hG-g&q0Mk@wX4g%%%NV_kdFT$rcv)1ZovO8^qX;ZNCVFCsX{xzHliQT zwJmYq7@g_qJ2#&@h|N~eK1}NAP5HK^A7^Tj2k53&mY#jce8gPRM#_?Af=DK^>=Eaeh$Q=%V%;&nqgqj%T=#XZsmZ%@wKWl{(-9 zXFfFX|7GuOz^tsUv*BlEP)8(+IO_0YI3P(76$cm)QW6g^>X?{F5;P>Cat3B#h`=kW zd+)W*S!bVT&p`UxzWKiH>pJIop8HvQt+m(w-_QQ}8P2+zi046+6C*F&HST!TedCT_ zUUk{=iLm`QFWFa(@?UMt`hxa&1nGj`GyONp@zVyy_Wk3M`X0nH%N(X3mh(B-f%7CO zn>Kn<(iO}8CcL}nz1fpIgUjg#d)|v@KQHnk;@@?j&%Dlawk|>$bnC$LD1+1w z(+J;@7vC#CmXns>qgA&KD8CHK6#5~LKJY$1KKtbH^OM=V-~8=;Sev$?VqkCy-{F^9 z9xy*vT$KOdXNSpWw%n*0hE~ghk*7e%vOx1&aZTKNkiKs~I&VaJzaHuSI+R1#VlHUq zu;q~bZc4rtUvk68JN_B@ZYVq0azyoc8UFdbl;4UQhY8D2{^$LgexLaMryiU3Yxu?Z zF`_6Q=T=vYiPTWe%cwUoo<5{M7q2G1m|mYi8m3?UZtUaGr}bic$fwWyhKYk%+_ByE zSFYUjZN`D+RY)HrQ2w3a+KVruK1SI$jpqaMoH?FxHTVa<9A!Hvi|@|^Xj60}-ycOg zk!u)fAGTpxo*%u`&vl-dTt*Iuv~!0|zgsXzL-ThH^l==t6W=oaHmp}!!h6=UT0d2vos40fOI`bT z9vjlXKUb4Fj76R1(?vhdh}(jAWKYc&Ft6(^3X!{P}Poe}SK0Yh0WolyT?2 zF^~BCXXglI$;;`$IVoJH?B!?S$H~V#>WcC74JXhhz!1ie>A}W{rU|AapDrY98b+~M z*J;L`@;#mO@gimD43*9%>|nKeJ;z6}kyjbIX0^rq25R(RQ5l5xY*Jqte;5@l75SSx z8)h^T1Kq!OE=(PG+~_#Teu$?qe};bYr|IVk(D#a;E?(`~RsLMCCA#AKe_~a}T#y_S z`qw>u`_fUDq^K_s!f>W1DXOCw}6E6 ze5Sy=e*a~-!7I}^>Jqnx1jk+#){s!9ey??VS7FV{FftE9CTPlKGVG{doIAq*hI4ai z=aY@B+&*ezZizB*6O$T1u6r7e_F-=yI_S%=cBVZ=3n#wp?=9eYI&+(N-b(scfb_Xd zyBxg?um;l8&ehuC=*!o`c&Rc_Zut1~mCA8XZ@=n!Pg@=Ta{O-)Kb3YCh@558Km8_uf_??d4&L*++cGif;H#+)qoNv?4w`zCvb~cISZ)c5o{5D5lj(h(4 zrLxH5|8n%@_!k{sTO^b_f3B9DHR50VG3=Z+=j=Opt!1EP_ANA4)9}UMlZJl)11WaS z*-~LP(&5E)rTFiF|Cpqheq31wKlerSnTznI$^9Dmr{T9c{>Aj>%0BSEH$uwHzG}+$0K-ML?84I zQu!Q-;15LbFGcWALhcw-KGY$cbeDsEjF~;=>Kx!d!Y?gcUxu-?VACS;J|n{aPb2o^e3UeOo&%pTNwIu$bth<>BlQ0o z!N*4I&=S$-vWWhVMDWUp9Wu~|j&npN_*?fsMeaE_#g@iX1?OB7i?f|Zr}TL3T%BB% zUU9Zn=qT6D4PtwUj<}s0lyT_)emyk|p`MEWpQ7jG68=z6#ZOmHTvb4mQ4 z*El7_dXO%}Ya)2g;4{2e_upl3J0E1b!DktIol8o&^#*^&(9brw&Xpwn9D|QSIYvkP zYJcngYYlGs*Be~(0zF{t%{lV1>8CM*=L~MkL!INO<(ub<{bq$;%QwY!?xWJ*Aurkk zdc`*xxwbsK-{7`9)H#a`m(_E>(5qb4r!SDJxXy7@de!GZK(F{gqmR|I-{4lCV}dJx zm3utkulO$ldX=klE7i`54;Z;tpE}f=bfJCf1rPO^E4cFazKiGeD80(X__=dRuei?5 zqFk%b=7>J|h(7k59j%Kfa9cpHa`pV3P@f$}uGMF^!EL&F+~799^hWRl2A}6m;{FdB zoNY68hYfD|XM})uv-QY)gWK}l)>F1TUuNiSd2Y-3cL@zI?S|f#&$j%x_zpvF>xFKE zTl!vu+wy$B!EJf|3xmH~?s*vvyU@`-*Z5oauVYN1-R?K^SwsK0!50`@=hlcwk@A+xzP}m11eg}ZB6Hj-x$!VPKyOsdc~I-eQdta z@|@wd`h?}V$_>kN#dVImmK!Q}Q$(M9M4uf7xBBc9T=}cqhXekKcL(&U&+dR;@y7+H z9jtw{ehKZ<7w}iP&jkDx*ZM{ESGmsy^ok#f=yS~Awj8r_?ycQwr2J92s!y%pnobm- z5YVeWnSfsLse*@g)B1wA)zj7&R?iy)xvJ0NK(69T0(#YFX+W=dPVi9AE`wV=wcZKi zUF)6Dp4$Vts^<>Dm0tDP8PF@adX5lW<$5a2F%~>bpQ8eL)knu6lwR>#BiGvV3WHlc>kV%8 z5`3q0PU%&jhJar28wC&T$^EzK!gT1zrOWl{3ix~9=-&w*>a#hZ zSAG0=etG=*?+6~ZcIz>EPEnz__8Q!_m-ZXnwu_#L;LjS|#>+v$HC!tCkl?vlw|3AzDe2#(%HVpV+!Mdf;L8ktslmGpe!aoB%6%AK?Wc#~wf%H$ zLz0E*byoYoGTUykG9A&rJrm?OV%dz|dPh)$mUj^0DnjcdfIUtt7ms0SM}K)$W^>2pjUmg-=X1Byw~Vs^|a$fR-Xd_f0g@eM4y8J zy~;fl&?|mKaN5V}^Mb*xJ|_g%^rQL=2(IB(T>DK*uX2;1-K%)DY2R9X>I|-B5oOFb zxb0VJKZW6XwUlhntNQ#R zkgK@1pEX>n&xwFu@z;%9tEcL4s%x9IT|xRYRT*6O$vyFEgC95eNP|xS9UbZIxR#c~ z#Lx32?tiDDx3e;i8Qjjk$Vk2;pW;_Yu;Q}fwq`CZ#&vzy>b7+)9e23p$vDarE0B2% zWOJJyFPgGY8#CStXO9+_GTYVJc8Rk&Zd4W*7Zz=cBsbL#tGMx+OqO>vt#9Vv>K3l; z2HM$zqY_)(qVB?4X0GtomEIt6k52Uu-EjS|%fB7ZE-v;a`;N}mHLHeN4DR>ikFEWd z<=B3eH}os41g~3;72+)&cDu`x8HsKyEi+v)-PGv>WfKpr$^EMG73-IGwYex>zG}^; zmS#M)Cjd3#0~AT3skzyJu*^oDgNn8Cyx8-H#-EOdj5tzQqz@`h{wWj9xNromE{^*7I4gR?=INg*~_Gqc$|IU7R*>@i?t*{QL- zW7Wzz^R9M>iI$uw>dq3~G~FE~>JAb02Zrh?p*RclO+O_RXRnP&pFLPDjis;Sy>(K& z79f`A#BABmms$R$xPV=<3!aDazckzFvr@vp1^&~*ul=zu(L*nx{WnMC zPnAYaqj;n_&c-jaKff=e$=^>9?sb1D{D<;C6p`O9^0$jm%0CCcP<|ieq{-KIy)$k> zy0^7?O#Tv{)9jycA{5*{nQBYM!L6MI&KF(1-+i9VEj%}pb{{==C+!22%{D<<{cT1DMT?Se0+ z|0MZce<}QvmQJs)$$gkkR!O7yNk?7$Q-6AWQo>)P@OKljpfAm-KYe$Hq#v*;aT)QS z3tnjWmAEUCerlyt`+^YCe&g^{|C+8R!+wDX=ObU^J*xewH}}R1{a-a_<_y2Xv)@Rh z{N5va*2}EfbA;s7_Yj#Xd4L*a`G@}t5QE3C)|zX4xK0URjqcI0Ey;@AhHRK{`0sJ<+FvQ_pLNh*flTO^P%O=YOw)!;ee%G29dB*wGY z^Kz|7x2qM~UMWw0b<=O|Qlr9rS-aMV*&^HL7zehY$ ze%ctt=YXfl-!1-z3;%Y|rOC&7e&;ltl%F<6F&TK8{9f<9a89s1mgIF}912O3KUd`2 z@UwOb?VkgdCcl~>+;H~)7--Vu_ov8D8>3+TL{T#-%(!JDe}=($D{$f3AXr^M_j^J( zTp#hPhNoq5oh@w53ze_Xx5R%)-YCFfC6ue$U*TtPlV-nd(!|&#giJq7i|Sv~)p1~< zY|4$I_4`%{_A3ed zYdzq3=IrdrRniCSJB9rvZGX-3EcVw5AH&#PlZW5j&Kc7Ko$Z@3A8FchdH)ppVfFBH zBN@S+svl3C{{I=kr_+b}YsV(F7Db(75}%0sb9XJr38(E7@VKKdw)x#7{{F<>XpU4g zNgj2#C9NrkjKaU|vuN2$`)OP_Lit-0!QUIf-vKJ zA^wJw&wP?5f3YZP<GZl#?paq@$FrH}hHG%V=p(#r@nnSi=Ow~Pdbl#()&H! zF2uKyiwk?j?O2q2An*2s8^34YqKW&w{@BxXg!j{X?^_*)Id9mr*4y<2_L1%78J2Dj zXph0Z)4t;NaitudGkL+D=O(%=347oyOcQTzZ(8$=csx1Vgp*->9s2-M7yP#4m%1f>ybXMLpr?{ zdk!`{hIH%pilk1AE5;e)^rzSpj`7KOW&H9?MAGcP_tt&i!~Gz_6sDK_$-(;GMa%b5 z9>W$(lkdeIvAb?PbHh`WOoQIO-LDMRzXltJJo{fBtOw1I{J!(jU?Gj8UZ^Qev)tE~ z=YEcJJaQ)n%hGho`xnFay0^CY|F^+7~HcYM9_Ry}8$%X~EGF);#sna9#LLdkG@>)GI|7)=RIqY+av*LSgcq~owuhiw% zfqVXKu#^V-5^8w6e>pgN72~UF1j?t8i1%|4|D%u&-h%XSF3P9#u%~I|1KflEC45_a z8RZi9WyYRg8-9*G8h0g?8>&(E?A*I;T>r}CfeMsgx=-m*JTr~q*@cN^!pG57nT0q& zTEP~NS{{+c?*U1g+fXJQhu_zqulR4TB5q#8@9c`~f2+PAIluPeViF!kw3^A(=|5q|NX9UCvLh4wtPQq`aan9M%ehh$XoBhKIS7_-n!mTGi&R} zOyvPS9W9-mEzOs`Gcowa^|3dtcdY1GL+S+|djE{fO*b^WGxN4iRDbWk;X_L@i*Ekl zE!PqlnOwJ~Wo>h2$sO%2{&`_j=bBFQytr-c9qZfHt!Y~O&SY`NnsqJU_)b)o$wK#k z6X#jJGm|W8Th+9(tBtoGYH4XkQGD&9#qV9*)X}t#)6_aSzjS?90u|m?H**s%pjfcJ zxub1Ob7ty{y4ka5*3F!IMdtGM)ou7+(YCe=m$hAZxN_ZEVk?>u_)OdSOh^6PtFNxV zy7{uq%C(rOnn44-a}DqrS5L2-J~K15wX3VW^PN{+g{iFMK7Dmt+v>F~ooyRCR<^L+ zepOdn+uD__O>5R)wRY|8>#l6?X#04}%C1cFyj64Ot*URHF=x)4S6j)MPm`t&PZTS^+#hT-$LuQYvnr>neA z>+9d-_?&uQ|2>Yrysv+)!?h(?RLHmaP?`qr-FUWreHTB#Xxh;MEgu{3A`M45m5Tq* z2>sth=+{T+Cq?LE=X2IX=$s9{-KE6jS>9*2%q_&r{fq5!>(?z+z_{8Gg>wfw_oYo4ZU5% zz<8u1y|wFB54$lZ=CbSLd7E7MUE1Q?1t%XJuOalX;2eu0J?%o*?f(7PmBo7m5BacB zO-Fo;zjgly<({|=?_t4J?#=RiM6Rm8;>QgitN#-4r6d0f{H^=f?;gaN*VJjBGQ_(K zA4|W(;1?|zuWIOxam432Mn%t4cQ$rINCe~r)%D*=ePojKC~-8eR#(kyw>0o z3|?<=yM|}3;A;QB5q4)4izvO~x`zn$x8oqoj6O2`)p2Syct&{h zV%OSPd{cxz9|_l1!BtNU*LK5al99X9;FArm18xkLP0ypHiY0FIX|3RDw-(_wL2%Va z@hOInP3Q9seyP!CiNUQtIfGk$bPb;B!}5-9tcOFy_N+d1Xp^+b*~ELFYJ?10lnf^2u{15p&+jHf!y8lPWPTrxr*Ot z_)IZ;mI z#@n%`aZU3~u8=F8%9PS)Wd|Ck#7Ymg@abpa4L4ztS91$`wQ{Cy=?cW+VYDR+6J_lf zj-@UAc2w%wFJHWA;d`8#oh9?FTu+)y_P9u|u;dXFy0Fl2ZA*Z*x1rmOgK^zzG<1`f zuWIX9H_XAdC2X5I*UxZg@lu*!j_G*LT(NOgLK`@BR+Z}FEbQKXqGL^0OX*AWc-()5OFvpyVh`gAdQNU+MIRR1xdnSRICaiUNz2OHp!fR!#4m5$D?o~T zNy+}QT^fhlj?tHrJ@nD7FCcbi0r5B4;8`D~*waUMCc{wvwSTN0LjSYyf>>4wUnu{uU|GI2?!X29LDy_kKFfzt{u0=q@(cB; z_m(UZgZ`sD>xHy*dTo;XI)@hjeoMm5{2oQag`LfY?$e*~k%4T%4q z60{h8g?Z*dTKwfC{b{&pKaQq^_G7z0luh2*fj7uYr)Z~PYW7iDV ziJKN+JX&q=ml&h2z*u!9#;mI_{y)O$$M0VW^gCHK0^b0t@ZF~pXFK|HUny%B_)s># zr+Uqmy~27t@QJ`HS@Oyu)zjE^Mu5bQR74t0>#u9~yPdf0 zPu$WH-vcNk@NInTgHqTqqu|%S>fF!~dxae}Vy{~88ML{$2}i)Qxn-!gTnK~RTH4mP z{APcVERGl2Z<3>tq_oY=wjA9Q{IqGrdwg5uIcS*&M|}CrFI8i4Cr?8A{!f0)cT4yl zZZ7{y=yD}=oB1AYD7vY5zuQsy0=K}ga)*;#xmj2q`pJ*8pgSnEZeON`a~I>>w9+%< z&V6X~m&bgmW@J?jzI`q(9G>>WAGzbx+!|JXfTzpx&(593fp2MRSnEL6D1MfOesHQ? znjeN)`zy8d+i-4n@u*9(43uVP2J~sY+)Jw1_bGmL(C~ZelF=Ne%pS+5 z9QX9)9j0B5z8v@Tm~j)h9ge;n_w;s#w)c3Sqc6ujz5Pn(=|AP@%W+R{ztVa7PDfvk zdwM&1=;_xx`f}XUONZE#y8ktfz8v@T(g8H|&5pht_w@Gbl=t*?M_-P6`mu(yzuoQV z%W+R%OegB`i;lh=_w<)2S>gKoj=mhf*Wvc7lJ~O7;hBPey?G08JBL8aQ_M#zndk4y zRCxL^@X_koT<=FxwriGMnThvzBgv-GKODjLfKM9z)sBBLJuCkW5k4P_@cA?7G{&qk zXCs;JJNTu^{VK|&H2h}~`VWjqryq~bz!>wjTleMTm`)o1*CKZQdW8NL;Gf3l#)zKt zBlLd};s5Q3J>MP)@AgQ%aK9FNUR)0P(Y523rvEvPzE}>p`U|uNp{G5E&DBxB?~Uls zwRUOz>rrl};V(z@e;@Ko8a?+>O2c_>WE!4{@cA>ywdcHPcn>?gSpF#f+Y!5c+oiW+ z`I7@3-K+Se>9ahN9^MzR!^a|a-aZr2|I!G4S47X)`Foc~ z;^i9=J+Fv_3&}7wy!S-xyfngpV#NL@BYdujgctKyQ}vl2!7o8Huw>_XL_@(xPHNz-YkABpvP}c)6@Ni+>Z5HXLiU^YJfY!5`;?@& zcAg*%iDP<+u|%Y=tBOQ4w?Qnu1PnQe{iI?cGEN&+D+4s+QIuS#+}kn zmKSOhrB^&F?R)0%>jVE#cHoRGbFO_@pSzz#1gD*7rW`i#>_`?QoFnEu_uQm8ygWL4bE4bQ6 zz3h`4wU6Ta19}ZlUqG+;0l`Ci9yYkOr{+`AUnexY{KC-Ne3TKK>Bp8QZ&v#06nSC# zQQW47xkAfJEd6AJhWg(i_q@DW`ad8tLj4s#UHxl?ALHx2a?gwAQ{pzg{d>zF_CM*= zwwgW_&$_ohpDGO@n;&g@s}}kS=&5BGq0t7{xFDqACB24`c!qy)#4q=^?q6w$*BM;z ziEG;6Yt@17Z((656FE#WZF!VWtf6(Bq2LF)3+YP?N;F}D7 zv%&KQzs2C)2LG_Zdkn5R6WVL=kH|eQ`wae3gZCNyV+KE9@MQ)+Xz<@Q_+f+JYVZMr z|CYfqnCTqtuXPK7(FT9FCvpGU|0ezQ2G1CJjcdNvId-IfkD;$K^vexC*WfvW>$o=g zG#OmmA;ec0e5v8H(%|g|Z#MWQgSQwwZ}3$H-)8XD2H$CLO_O}xZSXaQzQ^DnH~3zI z-)8U$av#nqtTXr-hF;So>Cwe3xV+pEKf8by_pT&KZdOI3iD|(XtJVSq@!Ou6i z+LQDb7<|8>x1+T$82n;GKc&(?kk43ymwaWD?e{Tbuc-_39arI0fv!8!DEv%A`I=TB z#3Vd93ZZz~#j1|Bb-@7`DaT^iZ-=6UPG-bm8D^gjOUPq2WDow8JX6EI6DIx}rF#qI z-gndcm$*Io6)5p`Tgx5T?#`VSv9gtu1_3C~=GMY1EY94B(*Vp%-s@|b@j3ka^7A^1 z$8X4a96UV$Q(NV!pnTeF*N&F8O>WBTbZZ1>Apfb=eor;(wyo@%i8-COCw{)H^(>}X zi_}FleAToHxvvG2dEo&T>1r8*K5}GAO6XUt z#VqC$rbFee;#d08>C3{H2V#icZVyVRz0n}n}F{bYE>!kGo4 zOY@4gWpkcW#QN04BCfMFO)V*Z*0wZt;ItM;HIzz{kS%$N&=jiSnZ|YW?Bu=1QFF_R zjjJ_8CXW2(Mu@Srmp%gVYIt>+I?HE#i18(@4^P508|8uu2(#CtueD6-&?8^$c{Ifw zE6EpvWXcCJ{OwI^H{zTY%>PJ<9T(-D%hxsC)*|^Yjmp0E)+)?hPvPke!q7IitnO%O z;hKfgIqZdkT~C~0xv%%`I#itaK+2q$;R$7W43uCregcJyjq&pGPM28l6q}ULp>n|d zdSA|Cf<4)8T#-!g?CR)h;`NSoyiVCPz5IY097E%_dc_}Z-8nUG8>|^Pt!C5o(j#j& zMUSk(n>x~KbI!JGey#f@)oHUBFpok8v%iJ+)=6`#0G)+)7O^u6h`-4O&-yq*Z{&Iw z_z&fOR6rm4uY`YM*?=xDjYKunWW2A!PlHn{^nV%AU;DCC0=}XAzkvTV`Flma%AtI= zyF>Y(0hkv4c9A=G82MY^KTZAtk>4o(DWC28Q2vaF{2uW)oct>y@<(6f8Cd!3M}+bp z1C|#4e(&8)UX@#S3GKfdXj=G}ihK-?5PPoX@dtOJwf13P6 zIwJ#Q4oCUy7lrb_49{uu^_=+}{8&d>)_oB`n*0Gtczr@l`Rsp%^3RCKZ(wGDvttT; z4&@U_lfO?oU48TfNBQjMh4R0Rz^8@3TjXp1kv!-^`F{=1Y4SIX^YnQ#hogMmW{@+F9?~{RmKF7t&XOax% zKNCs+?IJ%X{`C^t{~M9?zv&Y1qfb0C{7e#|e69(n{Uy4E8uL0t{yvF6eWCvK`5bsm zv;SO~`lM@vDW6fI{`kU?dboB2`K|_b$DVB2li2^DaE~Z*YdcUb6)s{Fc_EY{KVT*tLH*bfcsZI0slJl0<&71#U#$!WujSQi4>HRN5~gYbgX zH8KqID_DnT*9?I_)&^DV!MHTSTDj+Ggw?09WY4A0iEGLb&>_Rh^*c|QxaNL{^hX=@ zNjPacrpbQD@$1JJhkiX5!+5}jv1ZTHE{ruUZZ(W2B#h*1;^Eh_ zznk+CSvOHtkL4Y9-30v9Wq_y6;ope&cCUU-qYnTt=bj}0f;Oq0!>@C;>QKO^(Z}YZS0PH$=s$&|lZJl} z`lsP{M({t4;8#WDzB{7-!w7Gh+z&El{f!a&w<5o%>A5*#=UXB;$EMQw{4|1ZiO4+^ ziFbBf()jbN+BCc_f^)1ejsDUI{zydbcO&?_Bk}mNi2Zj*!V5T6&m|FiekQ{IYZ3Yf zBKUO?eOe;nT^XVOSww%%nM$)i&!bGkpN-HrMZ){Hk$B$|!7CzsIwSV^QiT4~5&faQ zbDZmFYZ<8H9Osf*T>IRdn}@zZ!Lf}($GL5G?gY~_9dYgF^La7<;E2oco_k*E{yi?k zZVt&AT!zCO(rR!^-)?XjzH-PWgIoH%!DYC~A=?aY>9-r)u8iAha7*89a5IEZSm#Uo z+c_;gLQnf!{BgmR9N z@U3!BdYeyo8~k!ZuklWL8{YYb-i9|TxazO0)IO@e;-P(XUSMb+#nldBc$6wYVbJ*&l&t`gSQ%7btBYn@Og62%O-=r)8Ki7+qt9N z2G_JlsK?-%MhNXSxSdnF&*0a{JuiK7Py1x$o|gl1Pke#F4;p--!4DgJk--NHKF#1- zzLEbG2G{b6xaJ+cX1|G!__hAl{cCwe{5pf%xvbY4e6iu9X@jqq8vF)B-)`{t7<`k# z-)r!^!8I@QwVliQK109L(A&A(-3GtO(A&AJnuhs$uc7~dq1QG5=WtdUyiV?kqe)e8 zYIEY~LKR$I?uegVK#Oy&i5Gh}Ah6?MGSTPPogjiy4C}nX+kS&dJOw zI}g;%$@@>4&?$2_IWLQIHd8|GM-BfY=VrbMb1_rGUGO5zVshL!%Y)q{E ze_|$OFb2#iQWy%>$$I`&ZV9`YtXDdra${ubWCXS|Du>EZ#X)Om6^>oM>9Z*{!pk%9 zDNUmMkC^pn%ANGF|No>}k13}6kD9w!n4D-5mP{KoIrbSLFenbzwJe`Gdk$eQ4Aac{Ts%8I#lx(*^(7wUxs313QnHzN#>7JRH!Dq%8S`eA z@Z~c+I51>Bd*+N1T0Vnz1}eNZS2kkCQA`3;;rP zU*hftKn!e3T(;z?_%Nb)>+Z(E<52!b1@xhR&OsxV4d@2&v7Sy%#J&fHipu6tv;j+# zuWh*DVQ z*gh>DlSXNrYdRoCr|Rfc_j}fK?y0aQPW%ryhl_;(;6KfN{W5s5NeF2_CMor=_G^WlP&U0ZO1ZUHuGBGY4kPAJ)z8cn z-LP}0X3i4wQ=db%I75xR%eqSzW1JPq8+ZM8ob6YEy?`sRFKiX|haG`^anEr3;$jXD z&UCGGd*O1f&DLPfl+ID%TpZ3($;h0k!OCRA>zI22F*|hL3HMXhd+wF2_uOk&@AG3h ze<*QtS$GcU(W>#7&*Jy9?XJaKm&)wPvmeNwybSYeo_2fajw_+bU!2r`)8X#SSImewmwIJJB(r}X`g{vvn~Ja<$2^~>XBKr+ zy}C!M{~}-AGdNq3%>E>JOoe{boBk=gaAquY?mk!jm&)&dix2P9b1;7n@>|_JBX1X# z-8ZV-FY-%G(bj&C>-;%xm}`f(3Fn*fd{7^MImDSy4}KryiOGc9CROpQ)Z+7&Gx% zjL|ijd2XoRl{PBB3HvlBm@igg=EeDaoqbq1Hw?0N_<4KRA|E#(KQBVQUWok7{ht5E z?e|Q3=w8&B6N9t=m)rX}UIr|$O*XW`MwsI^Z7OuAp7iv%`$pzz^N)AqyyX|G&OrI# z_g8-v^Wkvbt<$3qL!O^UdGG{&JbU*aE0cK`)2zu|>gQRWJs~-NN6(nsk!jshi<{1+`B3-{P}%|TZS!WOWI}2sQd><7VQ{~!wR$K zIP8bA$IqohQ>})2qJGr4i1MH;ouA41qqO~ro8mUNa$bVHJKbDCzpr>s=AG(1zx*46 zy;>gX)s~%oBYhd^&xU6CqG#~>bkKKpQh&Va;%PsteCy0>#wHsc!PZWi2bhPBpZSGx zJh%4%;)6D=Mm(I2c)-428!r3vZR56`ci(#_R!q398a96jXU8^Tj$!2|vk&&2>Gz(0 z4e#l1Th;h;P#!)w{tTB_YJLm0d#ZB$XUUuITfdq4?8J(3KS$ec$??jGGbciqr`*}d zKEKE0V!rc|YL!_z?z7zQ{uPngST*6Z-~$T73$bu z4c2q7{9iI{RgFcuq)z^v?;P^1*U3NUUmKjmc=vhFV`vlI_SCC9ds*wZV!ML+XWkf` z{X_Cj87pyPIfX-(OO`{YP`i61H0!)SDNZYSCXg+8r2Yp&tk z+|p5(CRdnlE4UrP`5I`>IAw%q`VTul0mu^2y;x$Mr3kzc~z_sh9*> z&L;=2J^0aWW(Q$7K9vX3*o^E-Lmk)n-&Y~;bk0zIf%=v8Kt2DoIi5!xy>##bHPYsI z{=K7@j!+rB{i@?%e$UaD2-LJPe_qG|&bi~G9gR2?4$0Q;gh<(DG7maI4SUfWLZ~ zAMjT^8_=sIZG34$C2r$oG@j{*Tm5SUSA9Gc z%0|J}K8jBW=vB{5K(F{z!9#n_HTWcDj%%yIt^Rp~+xm2e!EJr|u))tW{MnA8qdpdA z`$6%k{?`2;Gq|l61`KY~EzgLhBmc|%t^2q2)HH*)8+yyf)-RUNK0|N$JZtdDhW{ah z+j!UdD2#XCfAMEM+xh}y56&sQ#;?|2nobn|g^`;v`e>Jf_L*exYEy1l{bS{W=6CY3 z;R^G+iU{+&;``)A!*!!PYdN6dQv4ZtPq`Vn=jC;|=URj-3~uwI)l=t;t6cR`4gYj1 z*FT{LC%Dq9KANwUUUAL8p`KHPPiX%o2DkaE)!;UN=^RY*vH8fh_bk5C@VQb0g=>$& zryE@7PLjX1Td&Zo9n{M{!PO3m?+@tJK79eb;s*o|?RMDUlax8GwtTSZ_7{fUmSdw$ zzRlvfq0bhHs#v3@2Gr03ll+`2p2)71&^+uJz_ z>zX=lE6jB)JhZp9yNzP`5?tsP8_6x-uyM`G0)TzwN`bYVt!q|w%@A<<`nIl?>DRyi z<|`5J@TGz9n;&{}7PjSsjKZ`v+^=5`i4;tb8{6TQI}XZTc1R?CE4z)Ud)YNlcRSX( zz3SXnb#B(zn>3RP?Q3K@sp3p7!(1-u^u1&=B`Bo$D9|y`AcNzRmX)u=A5w8$7D6`(&QhI!naW(m-5Lnlz$ZQOZhYL zv+ke_<*uV=mF0t20G6++3nr zb7#!-G^ak7sAr2)#r=I4C;RbDd=2KU zJcjEw{4)5~c6UeeB+^(7c<#vIox5V53a>mbT+g%bt6Khpvh(aSLT~&jJ^W*jsINcv zBKGuoqbhlTbC;4+px1Nnx$lqqnI!)5m^VWmw}?ELqc;a#w}`%Zh6{6s7_L@?D?Gpc zByo35!QGOT3c%`!$=v;gt zJ(cXS#BZWU%{N@0{eC_Cbl>7_#;~2hFFRQNofeti&C%*cyy+fTIn2}W&;D$B`DTl` z2|VZCe{0R2f&G{&vnL;ceX4&?&+6tppIT3YIZAyvIwb=={CVZ8ydD7!=WlXJYgOIb#ZfN_>C3MkGOBgI_D_aFbDB*{Ni2XdJreDQw?pQ za{-ETYA(X}?FP)LS%f(?3m-e__D%Y0H=ibLZ>X0MUpz~m`$91epF-UCIJp)0mhI0b zr_GL6Ua+SXaYnmv?iJJh=Oqp~f9Pv?roA|4330ij8{hq3B<8~E?aKJhCCL*gUTSzh z3*k|{F)mw(Q_kOGoOXjh*6BK#wAZ8H&v<+u-=(Po?Usd|zK?I()XUL0`*Z)SB2C}x zgR{AJ)=%-x+V7!N+&jzeE5&!z>mT@S+vgSJy}!h~qzc%w5;m>Ee8UlLz9HuTTnL&i z2qX6sqd(N+HQ8WqwmfWCj3aLchEFj&U&hWa#F$-y2J^mp8>_M>7tZpwKknweac&*= zM*~l$#}P?AY5FnuVByuYlb_FK>@=Hp_uup@T^wbQUKfB?=fTk4e9!np_>i{z{FpmA z_XG3x(03U!ub$q#uVNZ~bv5UF`8103;pQ&9h&b@`DlbAF@p*-MVa}1uC*l5ZeAoRt z-*GNx?Vg25Tf`EF`T2d8Pxdv>r>V-*^}Whx&UfIPJLYr0?;LsbpY-pX{F8&T4@0-I zG8uHak%=$&&-K^Vk=c{EG0DlhrzKAwKss4-ZuaDTxaRO<*;?)5L-H8jk$-NCzYbex zR13ZFH)NfWLQi?rP5o)zR91Ju? z>7{1RPmwoH+_VV!b|Ln}%btAWu4j56YsfUbAXC1lALAnALt71gv*NpN+*N@&iKvG|1CcLSx&MJ z>`$4eWvsC@+)mo<=(299q8D zva0`_WcC#ZZ}olZpK}L`^3j>8r_8faH{S<&&rK#>4dR~jlrF%$PCvi28}pUNf)DlC z2YsG$`bb@k^z=kEFv!<=m6__~3AA;GOdn}w9Qku@8Tt`2SDQAgfzC!BmeH7(wG=j` z?k?=mhh+X9e4k+GTW$y2NYXR@SAVFODJlKC;@jiKL(#w3? zczO0o%xkURf^w_--sQ+nC?hXPdbga1=PLi)JppAc=(Zs*E^u_WI=cSxsMkT)e}U8y zcs_}|eX?r7V~>E>qxarA@VwOR`Ej)O_&tw+=X0P}yl*UU@NjX0dAg+GeGc>H3wpcy zlI>#2n|P15%{1-{`VGXzLh$qP;oHsql}LwJ_izt%B~D#*-h8I&njd5?O6nIGKdgtD z#`!LbwGQ_%O!Nm`t-tRP8+?d15{JN}bAf|2I&Neq6%V=+ZUYG?jZW#8I=r>F&$5lPEWkub#LSxV0ti z=-$DW{Ug!00B_pTwRIp@?VRA9#+ffeF4#lav|$G6;JM#f@EG5#UGuIUU|imcbhUhd ze4d9s$Ds$?rTMcEHYw*^x`Ul)1J(nNNO}C6U>RWS1Cf{0OYj`}V?~{c<)zBVq3wJ0 zvtBRCC;q(jtI#K_fAp-ooz6}-gjM~q&hq`g+C9|$d6CyI_H}xqJ*qUSXFsrRSB4h* zW-rVBwedb#y!<(pw!}*a596DCHI}2=?&+g0K|1*<;+|#w%P7xk|E07%3)>BSsQ;Ot zQGP|sGuw9PM>(STzpobM3eq&oAnbiE`P#R?nLctzYu(82?34ICkA2^QWkA8Eu8#D0 z7Wx0VnM{|So_#pRK^}RZGMN8+T>A8BpYM`$k|%aEycn-Q+oRs+ed^%rUh0rX-e);V znZ8c;eEX2^i4*I0X-4z|e*C;F(v0V$SCsYd!d&v z>q>2ck8_6J^T?r0NV7>d);y(!3H1=@Rlj0bGr*sBHY~n#c>;Yyr@t$|XriuU&~aM0p1>rW3QJ>f5`vr$1?q`Ff#j*_aBw= zhjLYyj4KnoExcS`PaIeKp={8+@8x*A;CtwX;md%b+feLNmi4`u{xQ~+M|s2a-i`d8 zK{)J~9N#q|uVYV5v~$>(e!2&=HSAyUI#|WFStZ&^RcJGfK-=jIw4u&~tg{|_<6ibt zd|!&=KcL@{gABF~Ek|_xP5U1lYtwQ;udz0f?Ux|E_Og8OeFe7F zd|M&U^n|o}0DZ|;#4X2uG=FIQioQ$zH(eZhf0|EOSLKjSA9Z6-EGx*iyR^|J|;h zqJOr}xxe`ZdtOI*>3F;J$#=|mY@64(yg^<2kw$w^er<#Q{ow8WkHz?p?_Zr@+2zuu z&pY0~506i;K8(H{HWvLK|1OKP8naL4jAS;)5XqZi(>N<_^Iwm2avjpkwMaJ&NI#2^ zwiZ5y^yJ$7)Ri{)3gU)3X_Kl_HEPG+4lM6;Ou8nrVZaWuX1Au9HZuV9OD~l8Dn04%?qE=L9f>|@Vl^;=8NCK z{c)tr9@w{s>67gRq(io6=nsAI+5Jdck4T<%JkUP41OC|07$KR_pbuWU@g$Q;s3dUe_!?{^pE^>d?o8qwin0lVR`G*2-;1k54v9) zoQ?SwE^o2#thRg=cB9TysWa}iZl%s@%gLbsNcBYi zeQ-aPHL#pzygv(JsJ<%NzGY>y9b?X7?8KMRKF#}YAiln%>?~}k`5}ClLwUsbLPg{B zqb)fG@&n{Or*~v*t0_}HzUJ5ENncpTZk{=XJY0b>krVRmf@AOu%U3YY1Acp|q0c*E zH*|<=60>fV^;LrL^kO;Z$BKOZ^7pKdx?#KAzkTxi6$r;9d?&=(%V`Xk8@tEa|C5lx z=e|4V4dn1V4{HGLt{nUGroq7_$C1aA^L<(H8uDr%;;M7vWpTp0Mv$ITuJmiA} z>;3;b^hBF+&y%>m3R&OAm3;c}s}Np&_;#`vIKMefLf9yuZR5K~Ccj*SwU)2J|K>B3 z@1C5TJTUdHy9QJT_^Ur~?)cAERAlkV5`NG>{4)4_3)nQ!Q8(7D$Dq&TGqR6y9BC0{ zLbp8H!gnETyQ;?jyy=a>C3k^8=~>p&59_g~?*tEw)v@fLpB&n^q;cQ7+!!LuYM)2- zT$4Vb@pXFf9sQ6;AKJqoL;5@p-WrY^!U0{r%Wp+@;HrB2wm$Peb-81J`jbaD+QL7B zf65@O>OeZuTq z^$`2nuYx9velYEwJu{iDx-N9%04yV+1NL=r_Ch(S?>UacvQl-_?}Ok`pkcqBZEs&* z`LK`=>huB)$A8lJBq;MKYXNvLEgnFAp?x$hGJMFuC25R#ec9#7ld%0SUqRYpzN$Dm zxa8LvD`na)<~_fj{bi&P+K*$~ov>fuom~Un(2KU)fwkOsSJt?ErFoHMlIBO$4a1I2 z9!D8bg>QBKTWux$x^FHu$5GZ+7I2THof+i6jrw*1`gHi-S5^4lr*(JXJG3iXv@DY` zc6vdqQWq9Mn+6MTDrq^7ukKw3E+tC!O3=)Ze%45JeE^K%2V-D&#@eHfS5 z@r^W_p`YT);+xSvVcMk~yV2%i`1wuXY**&6PGh?E{fP|n2ii^bq~W(J+L(4x8)-i4 zLq03oQNIP^+l1uRKE#*4--7mx?ps1$%A*^3Olkc0M1Hd_jSJMx1sZ-!OXI_Q$GU$P z`q!*q8BYAR<5#xlN7{D@#uwZ8zWtzSl4JSh?TDfF)@eoCWGc$Y>I7p-Nc$hfw?M|> zvSSM#V?1(Cjk)M+GR}Sr?^uq~UMq0_Jl?Tv%CapvlXgct66x2KwFplh{juYS6W@1d zzlrV43k&u}Te$F^eMFYK&!b;=j5Jct=MZP)sbdT5=esn4xXL>}UMAa!#QPCHUKfqLtRFk z_ssX0AB8fP-x=e36Xd|((Ss-NL!RXG0@_UsgUbhKXE1Hiwv@~C>GA>kUK-9O@NxD= zzR~pCFW-vp{S3!cFGgMDZC!Ye{@0dsi|@#b?=(L69jUM&$uJ;2^bHKU zaSW#IyYYMa6xw@iyY(YI@w@6tq{Ek`txTI}Il{J^-lMEU*d^VYK9enLY-VYGW{_e?8h)1{Sz@Z2|B)KABySvo4E45+N1BShQ{%@xQwRz5<}zo z)H->VPkus?=AN09#k}JC#VRW|9^W!1Q=jqD<{IzIM||h;IL8oJF8X;o{rJwK`ulMQ z_Ww%vkis~xq2c(2ACD`Pi5Sn_f;_=A?_{9;`}tj`ps&|83(V`v zcB3zY$uEz+td!qVu#uMSsz)B&k_qsS^TQ{&T#&|h)!1Uw8E%pPhevhKf zrhGLYCTq>t*7Rqt6e$Z2n#q$_1^ZeDWzC7$h*<6%UtTQ!?sE^Hi9lt8IYd6a2 zB9HXA&ZC^}b~daP8~g9HtW(qUN`M!6G98rKmTlS6_lO&$F&p3gD3^;gv|+IxRy(5Y z^LS*oHbG-+ItqMO#+u)tX`3p~HqmLkQ^~UG!aeu6bdgf_pgdEW$*$i+8b8*fWnMSR zHl?`-d5G_i2I(M=a_$jVZ(r=r*rZMSQLd>!&zpIh^_?lZQHCiEd9!@ieCX;ie6!N` zzFg(|QXbtX&y>dVnBc}ttsItZO5@ueNO!P_rOBau`--z4zfUkf`25?AKDzpig(Hvh zO=-xVd|yTxK^xxd!i6-#b{fh%wrkmzqAdL$lSetH{|{3 zJEp{TWNBY-`1wDaC!01e{1vp-2GCYxImYsgeZWt41{liAglO_J8-&OGM+Q)%^*bwDi zZ{Fn#%u%!QVL#$5KfVP$KsRkFbZG_s7vS$Q*!%{zyFuf}DK2zvZuI3+Y+9THYv*Y* zeqKg`4ePN(md3>kzpoW(`Y>))2_2{p>*XrB=RS$WdX05- zy3Ofl0QSTf(|?^S3>*B$xs)ZT{-_MMdUIpP?Ja5B)ydH&tyq(}ym?LMN^FC_W_=U3 zoJ(Qn&r%_~lvSuv`pBx(6#8{dx3viCsQAw1!%&qUdt!FfTd{V{`sR{7`F>-MO~!bb zb9PTXVzq+H60~G0o-vo$xpw|HoSSJJbxG#I5nn#@OVyQ2M@`H$VoyDHHt`g^Ug{`i zAN&&9A}Q(er$9&9JwmsPSLIi^!%J@v>4$#un?EbGb?{fPk+V>#%})p& zZBBR6PGR;@J`q8 zyZB7E@20@K*b1?5*mi*r*BsN0LInlg+Lw)r@A+8uY~`ql?aK-={iA<4;`nSP1Nw){ za$#-5x!n~*G2*U_-4zYzj6|qFS;`PF%$x#O2bv{J}!KwGW~{WXXH+wJDW{vIqdTh?R;GPHu5@LdZ|W)rP!Ias$)8VtMwOW zzXrkhVS$diE)~p`3lUwbGUeyU)9()P>-GtW`Q29Tm*G4pez$sC53`5qS}-Z!!<2k# zWidV4q{G{*JKbJO;T7K$oI7#~d`7mGo4w(jswHXM=Y#8h;l0VHhw}1OO4kXcrK?L6 z^#8i}Up$Qe+7$mjROSB{jpSPJUk;YPVNoNQ)V!R`!$DH;Ss<-2ClBf#FrHc>+3FsWh-s5UVUygfvtdI%ZEsnk%_w*MA)Hoy3(U;?%o>O^B-2`Wva-39E z$=Fh2JiYArm*bw^?#Af79&+^MxTlwm2|TI$|0_pdj(d8H)&}mYj=miC^pgVWB>4kJ zUyghFOUvjtIr?(k)4#2ZzRA&-r68X6ph~cN zZEJt=B-$T#ujF>|d7vVFujG$|58GFv%biua$8ntyT;*_h5~p}WgwNlCZj7m?Tt5=n zi}AxM3+ZPFM9{khf?n65%4SyiQXA|t4Mt@^O&l}OmPow{Q zME~E7;BPr2ozFKS^dF4igU-&ydffH95hoeYk4cL4wf0TE=+afOUUq$J&_5s1=hG2; z{%eH(;)vZo7196Y2!7D%S!@rqLr1#rqs=)63%AtO$<41EUaa5Q51_;RQqULc@n(l6 z$p;)>tgkbI?~0@oE^r)Ub{p&w`Y%V)!{&&6&VW6~B$LFq^uO^m9lx}6wIjm+A6@)j zTHxdQ-*{RCJEZaXX@vhDM(A;_R4SjZMDPlfZ)tM>F@j$KK4X%%74+9W^tuTD_q+7) zjspE+xtkQ>&vJB3a#?|1)BlyY8Iu&-6|R2{s^=r={ACwk#dd}3gM{e`_xc)lyoQQlkCMmWl&R z6qkOA?G4wT27V`gX?nJTJ`KOY@m~O6-nqUrZudHTk-~}V6XU5f67L_5;IBmNIXi;C z1{rC3-W;K?jo^P1NwwA zext$PFZaAGiQw9PAs&z=a>{7;9L?J>%EnIl+}4ubpd_tI{jJR&eUCvIuQ9 z_($ZPm-`L=QG<6I{9^|1F}UhXXurX&J)brBZ_7O|{c=w|vByEdF@MpO+27!n-ky!I z+=lWu@s# z^NZpW0{SWPA|trcE3WMn+Rf&#`9e?J<}a=Pi8rZGT(y29Zqvj4c%~!1+TXhW9)oKf z@x^|FuQBw83~u?@J+(h>=o8e}bd-CWzjgnk3|?Y?p&|YMpX(h>7qr8hQSaFLeS?V? zTOV~AT=Oi;4b8KBof8`BY4c07;9-8zG^Xia$P%qzlwQl1b|FxD#WxwbHow?<$L1GX zzTK`uah-4YSpBntt3LARzHRbe^-;W0Zj?SR&o|0d=@nlhIPGTjSGy6n`l~-p0!j!PU;5 zE9!m0)y|4*xuo=Yd2u|TSNsJd*T%~TQ(oD4(f$qf*R)L$M+|+F$mHdi!B-f(LGH=N zrq8W{GvD1|=(k7c_Z#{<4gC>AZ`02SgWL4;y1{MwsfHeO)YIZxKZdy0cOkChVIe*@ z!oMMc=L~MsReJ>A7QuH$@Lq%8<%912ZMwC%O}DmQ({#x2THL0$Cd1#RHyiJ|=Q{ap zHuTsF!MPA`G`O|TQiI#_f2+YQ{S_mM{B3x%2LGhdXQ{z0{ecL6$l$iWqw^aWu1^{M z1BU)?gX^C5q__60#W(;RahvbzJ?wCs@3IEB_R)HZd~812YUn>E_q^Ep$mW-whTh`4 zBlzA3e%#>J{t5J>qn zRL`cY+}5y=zqLcVp|^Ihc2>V6-D>D9zT4pU$vrQ9a!@S2s={3I9{z|X-fRVdYnd3SNdeBiH+m5yMLX#(P|27`2{cjYS(9Su7TRXQJ z+}bl%&Zzx0yyCr({x!UcZ#Vq4EF#oxa66vRXK-77TKm{~(Awem#4j(lU26F(F?P0m zV&fkC-c3h)T6$Z~SpK$twDivyK9=6rYgYf=rk=9tvq$jI{*MbD+JA3A|37?ilHPz` zaa*6-^m$O|!}MwEQ=2}I8G4&O^}`1F*zuFmBfMf^xM~Cs!<7-7e12cT#EaJBtba9a z6Cce#IO4YdTkl~PzkewAyfhlz=9k3=xA|qQ!5@@+UTisL_Ww11Ol>Hcm1(Z>4}p&`As=M@IG_M98R z8w~z=x#vZ7CVy-HoX`;eg52|BBsitEPaD1=PmuR2;LRJPekxhrkuBOw;9}qx7*;B zp7Y%3Xon_$>;7%}vFWf`XjotTk)e;38!C(Z?=Z4 z!EJuGe2zruZ8>1+wcerr79WLYI^x#;_ebz0CVg)9Ufut`2(I&t$luc2bZFCCYb5>b zHt}xTSG@*rGWulYo^owJrP<*2d-U!Iek_8&VDL}KJug=nyV-hkiJ||Hp>K`gYAfn* z>1{f+;hGweTP^&tS7)MSCZW*=ze(pTR$E@B;?_9fKb<_%?$dHuz@^ zK49=aFu1lWsONTrkH#|{@dx~^`>!*2x54Kc{1JmU8vId%FE;pB46gMrvAa6815PwU78vQcSllXZCztQ058$4(53k<&7 z;1?SFpusOT_<+I38az|!AE?iGgWqWIOAM~#U8J9A@co85`%;VQO+BV@^)97D^=>F8+dP?I)yHfetBT(f#T2{yLVo*P%LYafO+DL^?qp(Opzu9o3gQor}KceH)H zWo6fz+gt30HB3RpJTV;M(Dq~`3?&AkLUGMvgaM?X*KJ%oj5WNWho@^^v9=ft_aO1I zuBqcT7fJ1H?aNWRyJr#abJp?=8`rG7O;tj9QVMi#Tu};mUo!-pzP_!iW%~8+zxm3} zt|qV<+C;txScRA1ON#m3bs=@^CQnpLc2(q8&R zj#op6UJ4o{6I3+VKk8JdnW#>M8Y!!7y-*^0nUdGHtZrg@*Qj+Re&=vvwMOZ1{v2C( zcYD*?jVK=159i-Sap|^FLxctXj(U%ByUa{sJUfzM~l-^(u+K?R$s;Y zMIZdg;w3lvdsxR|Vx>=@#CI0jxOTbTGZX0j`t``EHmcI99WtP>mi3Mot=3%PN!vK4 z!h#Tu8M);}G+o!Uc5U0rq-ACM@=nxC(^ryoBl2Q0y|b&MtBKb;*6})J)AX71_&>w_ zyT6%p9pL`m-^{BW;QsN~Jbl(2=h6MoaR2xNJlnzUe}?MEAqFCPx50|DwO|G z^ncRAzhC^R{_^N#={>JE!+)CmgCf6Ch$)|4tx*1D5&6Fmf5XY25|Ljki^i;cj!T5{ zp8}Q^{s{!(biBhq`LOCeue4KI_;V@pnUq8M--(1@$B%S=6lKwc@&7lG@b`#(9oL}! z--2H#ALjH&v7H=r}%@B{HNn1wRmq`82;angTe`TJy0f4lgne2#;K^8XHU($fD6B7eC2cK~$MDT|+VjWSr@C?Mr?ye*VJ5Rsoj zx}uxwFNOaw{4Yl2Z%>iWalKIfPGD)_Un=sO3zGd!DE~pgY2iPdBA?@jq5Ss(OOwA} z74fGIAth*H}ZL!{39a2$FnK?hw^v9f13QcBLA@Xq@e9NM_DK3aIGVl?wjjX4V=^g{{-;XC)o#N7Ht-AObAQaV_&-$R#3zgWrSKoh zUj+ZevIPo%vr|5PHVV%0zXQKeKGaW@KZS)AoYMOzFH7%vrS56+`$fJ@|CfPQ`6>Pm z0BPaBLgefBWy+!p!#^4R)8r3`eEojI@L!H!DE|d`PLrPz1$AEx%BBnD{~SP?{OvhM zURX~``B&l>%0C(j|Ne2_zkc`iPv!EDM8eXX-iZ8T^0B2c2ypP2 z{AomfZY8C{nf%A^7NPuKp;4S>|0^=|T>M_`pUT6368_WdpIha9XgXu~XW}&%fC4i{(;rrhn3IoN}>FA0BQ0Uv#^HSD&?ntDwls7 z{HKLKx5oQ;K|C`2{C*Y69~()3hu-Er_LI4B!DCVrNq>uF5qDPfr+j`V3+2BR@6*EH zJIxE#{ajRqP(IFaNDcq?wcf{QBcI>nLivj#;omMFAGIG8lmG5W_`78i#&+?@@Gtm( z*?SxCx{B*uc%O4@BO3!o7GQpT07GQQ7+IG8h*OSj0fIQ#0fjgztt3k_63CV;$;1R& z#7`Tip{?CGDVLHUC}}O1e06S3WA~EAV4CYT+~-esZP{sfp4{7x9_>B*-D}obvu4fgIs0c#g8UsR@+&x4Agvn1|Gt;9EUa53B+ZlVy=KL=*-UJaO!SpRTP{*%A-{lsZmU3f^zN?> z9nD2sE1C;?rk@sV7|BMBFvpgenP}^8;1#a-c6KbfVdANuE@Y;^Tu~ow%~W%p54Vo$ zw#j%^BgA0ps*1^lp$urVhPHt9J@QzmmPNZ%=FB}H(K5~)`-3hJ*GOI5!Q9=SXNj}TUKPE+Ky$> z;=hLt2C@DM^xd)yb$bnVp?vE5wQMx{*KQ4&ufjGN*e2`R8}^vRdTX7d)7%=ct{m-z z8+E%jXA47jLe{6C%WteH?CAinZ=5&1vKq2G=R~7-K=$pIOrAN6HDr{JuG!l>AsQXP z+RjgBDi&-84_t#63{*b5WPdiQy|41QCHGhETk^mY`<66U-nXQs^8O`jDj!(V`osfE zSfBa1Xu;-LSo;U=6w0%1I-S}wk!PBC~ zJl1)lo^N4Itm)CzJNBL$HFl!>y>q5)=zz^LXFYZv{q_>%-5T4VWgF&U=dWPRB>Iu7 zC)VWQ`aH)bMH>!|j~eG;eXH!aft#q;Ug`;b2e=2{3iw@i{N_i<*R5+RzB7GXwBZA% z_`0+}kBVGj@uZ4@n&0aXL&3)y=MpV77J zt^zg{Z8jBc#`YasXRdMR*S*ua=f_9${~BWi?STJ8-=JR{%uSsY`-QjLxsVCppY=KP z%|47*700nz#rVzVP0vibBY)^v<5;quogA;Pj5Ua`b}85QOJ1XhZSpwQ-KM=Keiybr z>!Qk;nR9Dt>xtiu7JnUm`B;u)U1sR*snO`+mARp#7(;Zu<=4^fkGDo!pO_kb^R=A! zH|jTx`aH4kvE4jJA0)=LxHxvP?Rh+SMuf55=U;^#9>@CPxHP-AT5?gDci`5nI#J*WQ-zUZ3x+TeNUt-NLq+`PMGHE|kZkAUL6EAc)NxzD++yZg4T_P*|oy{+whBj?Kg?(VMEj+V~#S9W#Xx$X*ilOf-> zc3&+}~k>BTimCS|b@fnT+R%dkXsJWU#;JO*LVu39zu!Wvyu<_nWPKY3EN5v$3p z@(W=2WhdOb)AzVih~MbT)vO50<;G!gftnRs&c)f;DP^|fVnbQU>(@-mHDalZk_Bv_ zZ4HVXlJZioLQ&TWYMOntxI%_o1x1Jxb}J$OWY#k9&oaUpwr8AkPsIWujuaF7gp`ZW zD}wYB+9Lrcnk&xuc;wTM9DRizmh5v_*f2~#boAvo>2g>kHcW3i`f}XUqc;cX`;NXG zf7RhKfi-2m?QlL#DNWbImu$>!*UlhW3tWBOmiWUI{MS?PzevGv0MjJ?|B`~=m4fqI zr%Ka~u1|q>bqf8_6ns4RB$W-$^P5eJFA^GlJ2TbL^EWmVaplS5Hg1rJpXIY|yIJzY&o=lLgY%i0rfrg;p0>9> zEI9SF_@erQC5!7)!NrfSKlJ{QUHY}qS+#jV}s_O7F>5BOXn z#|;4=#a9VVJuM$=w+n=ZyXOtP#a}mgrR2FACkD}a=_&l?a!Ko@_!PmZ51+AVQX7VR zRELm{+LL_vtV~n0WI{gbS0SG+p(mfb z!vXz!ZMLP`qovk?7C#DChc z^5&aYG_6{C)6x$%;bl+qYVBUn4>|NR41Fotzg#b`hT;WD{x~gvsn-8aJ>EI|h7I4> zUV8J5bDM5%yy^NIuWRaRUw>PFNAZ<@|0=XmlCRq0!wGDmL+ARW*PWApV(Yt|MSCRu z4tFOv)y|(kcX8tHbYHk_41!H{b&HNyJneMw=5bL|-V3m=5X(nG<~?I)!IjG!uW3{} zI{KB%ZfNRWb9?Rj&f-hGpU{_jH#M!nyYhHh81MCl@AIa$EALtG1=+~97+R#J$)Rnv zolRw$q&kVe0dhxcAKngbo8va_wP5!quzT;ow zn#D~^S6sL9CVz~#e0BJ+J?W>){}MVors`$sNR@{c2Pe_pOA>F;5wl|h2@2dKq;Uau z5egr#yk4)hSXlmC6edA|9=+c0cr+mr| z<^L(LB>5}EZ}fMlV}?yw|1S$xPy*TK<(9;YQV+`K^(2&!=OT&n56dl|=L5c>{69;v z{~-!Q+TwT4e|X&r<&Q@_S^rw0(;c6MGBx;JajVUt`yQNOzN|x^;*0Dlmh>4dr~4NG zYu=LXk@6N}KBWBt0Agb1BKck^pAQOX{gsgOwj}=XUfpYHphqpaVx6|IGE7p&#S9 z#_4D zwnuw-?&#frK7{9JqqMDio;kZPsx~Ore^xa5maB)?i)FMPcvib>Fa9saGwl1Ye=9d` z$KhOdN7F#`!)Dayu~(xXKAwvjb9herwW#Wi`^UM^B-@}LyMEcT>pY&bEyXidj79YD zL|Ht4ABNvNc0csQGfI{l%tXh1zD^zQ!?Ux4DDUX; z{5lUG>W80wmsoKIhRJa8gYPKHgP2Kw)8ySz6fKth|BKIP>QFZwi(X_s!?m#8ir?Ao z#pf9>f6G15pp90M9;t_$VC{OY)1GhOBNslX!J6)R0MaS=e~4v}bUY(ANB~KHi_JiO zmqYyXp`wg&UzqUuid%)}cfLIvG_-0(U;>SOImMwyQAmRy7H7O ziG1SE|GuM_iD*zHS8{jPpZtQOw|9L#{$Ct!E<(cVHymF6?4}>*?X#N~h5i=M)6c@h zi&7FkKZSl0@T7HDFG!(Z1^$(I5k-@>5PjA@Ls7ryJgd?~o?#zlTAIS2gP~n_)%5{j zzlQ&$dhJiaA5Fo3HAU`kr{H<;VG8dxu|G3~_nNeRyjOFUCvn@=k|!Tqk6Q&NAB(fy znL@dnJX|LCLBT0E>6t~yXIl!NLBq%1bK9AM*9ac+S389EsZZh4XmERPtxIsm@w56= zrO4IsKa`s{{Oz-Vg2C;*ebqCpSA)=p{8tFB^ibEORkBxl#nm6!UU{M6u0!&~tv+f8 z<*!A0B%}Nl@0X0ytK86k6dw@!P@gRZzgY6zJ!x>O=XSwWt{g^BNhZ{DXF#v|>Sjn;qC&-hxcq7 z4L(lt+-bXn_j0ve!h5;94Ij*Ri)mPLq@P?wkx9G1R(3x(iO|kP-96kn#c3+PJP7Yf{_O5Lu7}^q z?IG(u(JGlLy(a#yCxgQXze6Kp;XSv476|sX5Af7_{2#CUi({0>yPTLO^DaPXT3z9f zb^gJ79;~Op#ormcx0obfpFQ`KvURd7bPNYc@;Av;R>y0~=WIKae*>^2`2z%zl-?hC zS(@h_?^q|6-z?>IT+%Y3{n>6w@}HFQby`sNVR@1z)&G#xzd_2e{)DtX(*(Z~`y~1L z%rY-}2ziMW{6#WIZk8Kbl+Rxap?rR4MG@gW!y{78&c#6HXzl(hQl9t2Y|{0p z@)ks1K54?lJa`*Tu-R}dVC0( zB>V4`i_sP#r2UibIo=6{LfI^$>sU359@M)E|0=)eKe(B=(BDLK+p+FB&Z}EkQ|Bm8 z{GQ{KJE)OQ1-C0iy|Co5eUW=-_$|CM%=d*~m+v8x-WASgqq+{r?|by_uMWM9 z`*HgH!OSUzQLOj9t9o2vRKLy0UxV*U@XmDw_)MSa-&LP})W54f{R;oCdIs;RqYX;F za~K4l?a+ho!bhS5j}PK_{22Vk<2`Qbo{a`7ao=&r>$v~Ox((vi3G0DARrQ(Ep_9Mw z=#P|8B59Xj7hR=EIJpJZI?yFYmw=!>^&-U=&%2Y!R-|OCvZwV@9 z7DhX;pNX~^VVjAsR6y=b*!OB_o2#X5u9mjpJMqJpMqBAqD7WVr_)(8S?#RN;Xb-$^ zK1l?-_`Sw1SJnpT+EwV! zTl#Q+dl2&QZ4Tc1pIW@f%rfdv{+_r0cII)kD|wfGKf-pa$9-(H-TCls`Tplp=m|bm z6|h%i+NK%ziRr&fvFAN$_2CG1;xXw5r^o(|ZtCdwvK(yMf_=1T;3m>Wi~W8g$~4?3 z?Ev00&TRNZ#Rd2-1NV&c8PAt?b7jz`)XU!2=CcIe55KxP+5j6jUOmHqBhrEP;dcSN zAJ2ZzKF|KHeLaspMw+C)ehFlBRu)Dvjysy4wjU4RKJzfXN1z;Q$AZ|!*++bhHpEz7 z#eRbJs|xRvhvNr?Se;EwU1 ze&p)Rsc&TAFSIk}Y0lRtq8!JB}he(BYfY+ zcDZ_TwBbICy#?6kUVOex3~g4)z0RZDJO=Y9){ED?gHxle{GRMBd?(1d4WHu1-fb1* z&iv5yiP7AB7{f+R@!$HjAkTWr_f)(VVa)Y*<~5t&4o3KP5I<`ZuW2YZi!yk9vfq~Z zF>smt)+(NN`TlT#Yj=&MR6WvdF94|)GB<(=Jp zeBL~t!?h}jx0Gdl-5iSiPb8nzhd8HXyDWs?{RrP{;@dbrTQANH`HkFnCqx^b#WUNF zPmFerpbu4Jul)FMbfChVJ_f)UuZw$x5R_sW#@wM5!gk)J@sQ# z>9@qC;~>YnVbl?0JN(g)?VJO1eAC|^)S(Z$Lr>>({(St~#Lh23TV;=Ze~jN>s8~`M zr5ratVSJIXW)|mj?0-7Hqs(E9lbe4bd2XlgT_lZt`pxMjwKzK<56$^KGZR)8u-=tmO9F8{+O>vxsOEkg;8D$x8LCBFe;le*~Wvw znZFY>`_b>Ju`gggIuY+dQ0`{P?Zp4ZW3)BL)cejHxCst%T%RBve|Jne0lLS_-sdR& z?mWDvXx&c8u9$bE+10)SbM*z$2K0f(t1*r}jy=9(-*G8yM4RDT^EdY5n#4T*Q-8xQ zg1ZTI^li`Wak53pSwKluHR@SC$Ei?|0z zqaRjad>c!j`|w@$iP-->T(7L&oX6o|O?M8yF%Iwdpf7NKJ?s1UXP@TS!S|4cbJ3Tm z!vOskbA#B<dSYASYN!`g??CCUyMDwzMIYb@M6@nVn$(zy2$S?)y0hs_)gvF zGV+Jf5aQ%HTb;Za>& zS=x9_{sY&1^cN=a%w>J~RsQS!D?ZSE*HsSVXBa*gm;3Ot71u8>E#_AJFr_xGK_Mp_ z{u!^cV>D1Zed7?zi8?cpu0}A+uRg$Nztw^{S;2P)*;nGv4rspzh4w+@#n#4t*|uVkDp;KKym`uW zBJ|Y#b)kQOg{-}wiS13g$+*$Mw4WPGw>zez4eEqWZ9tnf2qrQZ_o|>Vx_;MxEAnLc ztq6Gy1iV;3KCou$;>P=)wZ{r;593Ve2^jp8rm6wUpWA`InWMl!ceCsy`Jy z)E0Gh-zH@b`?7HiJ#E_;VuzrTi$J$u%Ir)j<6;CBoILdom}3 zbua>qIS%ZrHX*K(Bf?brcVUuPso<*w_< zt#$lkyvPulq;JX|b#ig%Sd!|w-0_KVJ}p?yXFVAU2WXgS*9&X2|~U9G@81^W5j~)mNDCt{vJj z#??NryG)GRayj>PzeS?xerKPlMNs*?*ELm)7YUHbm3+PB&$MIQ&l=qIb)5Q3XXmqQ z@nSw#^3{@uAH*(ea2_-Lf#YMpa`HI0xsr%O9)AYAtihGf1CGzRo+#MnN+PrQlY`i0 z4esVcz?vN&8_CVnbDJxPsOIr+VV5=deh)|QcYN$uS8@WoT*+5X9)H#K3q0+Xr0sQ{ z;}he0p8H&sw}&qOn)9C+*LwZf`C*LPg1P7td+73?#oQxnaMg!v43$RW@p65R2R*SJn6g}eT-&YFa=tcN#CTfpy^iNGWx9W=?`TfTo zpZAx7IPz=J+!o^{e6Egh$u&AY<@no9pU#-RgwN6#mmJs7@T;?wo?3!=cqY0d221!X zk8#PJ?)a4BJe`Z;aZ(Gu;ryx`_w;c;Qu_Ulz8v@T*DG0Z{}I>jG2Sd^COQX*@nQjF za&DCni{QEs`mDj-?-_KorNlT|=H?+c7V$&H9Ql9H9Qo`Dv{%;PIs^NPvu8Oy zOXZ@NzcSqB=*w|Wze>r9`#**~v&D!QKF%^vZg70c>3J>}-Nao37sSN+J zt8Y^o{#y=jDZ}q@cxxF>AZN!np=faQX52F+bCDUx1i#GDm*YI0i#kndpUpb@a@^CK zaY;&k*V(fi&p3Qt8ULfF5b7?&uY^BODMO>^_c6~*!ts7eBF?qTlIZ_y3jb*-_~$X6 zB=PwO#^WUXpD}JH;kTyf^Cv0z_hFwTKChu&lJHNb=-Hlv-<~4(C$N1I|MODtrW8B8 zlVS(lJW1rgCq>Vp6#REm^#1|+X_Edq^wT7KM~a=_PN^5ZNlWDO9`LC&^A`TzVCr#r zJl{}!g~Q|dgW{iY_)=dOTgACtoG(BRrY}1@9_JO`?C=&( zgstL#>+pD-SG-y%8MESx#Zqz1EaHD)@D4-&hX!9EdB)uMEb=-ZV7-_abHn0#g(d&( zp2TgtBu{+E;7=KRhryqhd?zF(3&cl!K~`2S~cwI}gEHaOhYCC1X(U~p^CodzF}d}!xEgMV4_+-X_TTl?rd zE40sUDI4178NrpFFK;sKb=%la6xVj7Tx*{LLLch$ir~s${ct$ouXxzLDmQFj#kCzn z{)bce+jjh~Lc^Vn6=UtmafV6xt6Y8n!ld?8JTG`?pE`qE|4H)`i~ori<+cUMlfNAY zZ2z_6z{5hX`m3EE6VQ}>^Le&O;TJqdA8r{om^OZu5V}=<}zN z=T7?t?P>A6&=CKMKP2DjtJe>1rCw?2d0_Ej75bc4{4zimg=pSbng3k>~NCC{DOE##A?kM)y3 zH+*JGo_xM$aBH`{2JbQSw!ilauI+M<9B-1nwu|DrSNd6y&otn+@%W&)Z7(~1YCom^ zc6_K3KEyXlp1WxVf7ak>cKccJQBkb#@96>dDwp=LxRQ|m^Lh}_TU<#<|Ck;G^cGhV z(m$>T0lmew|I(gcH}oqcPd=O%>6oScRNGzg#(-Y^V71^%uXvl_l>6T$&z<_A%GJKA zeyDsDS3gvG<*$3C*JJB%R_=bIkLC#-5M23xTaI6mz4BLlIG|U#uLtys9}+yY!#e>V zrHf!MCY7uBIKfp<<*(OwrB__9*P+}-;X~Zop)273kXIw>5nTBzzA2!8Ug+-$=oKFb z=v7aB*Gu^;zD4Lm{qrJ+_+Lt%yJpD~|0~IJr+!8J8wR(2V#o7`g@*KYoP1R9(Efvh zhx$Jm&{u*V({{frwy)wl1*cp)POANg+i~(mLvOD;d4t>EFLefgLGs)cBv1a9zFBb2 z=PkYEqhkX}R|q}%SbOFTexKyIvwZ%C!DmaJeEz4w7p36M27k)Xw@E&1uMWY(_Ua1g zuY!E09=|KLm*P4uQBT`m)~~ES4+)=8pDh7@_5W=Fy~sMBvT>*cU zyIXMOulO?oy~^Di&?~-Q@KB!v2Dkp4H+Y(#{4b&5Zib=PzCftP;I_W%Z=wAc34K`K zC4wvcjp7f5fL`$i!NdBlHn^>?)&HA9!`*B{Z~edC;I>{WSM}8PS|Rjdy;cdX^tVdA z8UuR8Z#8nQpLZGD>eCbOSAF^e{)%r3=vA(sSN#=#(8#s=Y%{pEv-QLOEi~Mnto=I- z|GzeTw7zV2YX_~b+F9$P_0@VQu6w25DD5&JvXox&%|;(Jcmx9q@md6_~xD1NebnBv(* z8Sv%r3r*7`qxdOuoHsab`4>~Q!Ep<@m}(4OQAFc4Daap>K8mS9a>VUhi>nM?S)`7i zw37ZTgEt#`tqY+JgP$*X?zR|Q*F+_>-QX8Xp1Yj}SDztt#Nh9dyxT!PCh9rMXWdqR z7ZAU~;8P5}+K{KG8GN3h*ZX_qv%uihhJLZZYYhH=gD*08!QfLQPyY0iyd0}-6~9by zJx}~U{lvHX|1Ey9T-uPkf3Ke`5niF6)C-=M{m-MHTr0Y9*DQJJsdXXrZj2|_i!AQ; zOP+F982m+puQd1pgWqiMBL@F@8<*@`H~(IL`(>%8wh`^d@v2SmyzGA-{q3Wo8+Xl; z|9SK`o%>Nm>u>Q>=AZBDAm1_2bh7@oND8uDKCVo#-)-}H-By1$6Swn(&4%8N z+q(^J=aVA_FPTq@amnA#Cv|;o;&wi{!qD6KB;Q+OBE6kYK5TG1pWJWof-C7ahYW7# z8{=~RJo($}?=*wk>*H*L+w0?MgWK!lfWhtcal66o_2?Oc+wu8DgWK`&h{5f6m>(C{ zYmKo(ox$4;-e7Q@WAOB?2EW75_ZWP=!5=iZec$65gZCNwLk8by@EYlaY!^H3-D+?< z?(zL1Ceqt+?@@!_=Skf5MT0+JaK5LPA@r2S!Mf&_RZXi9rmJar<7&4Kv|AxM zl#69@{6guFAD-hH;|%51lyJ_K+qfp_lq)8u+VAWsE=-Lz&2MXIm8IKzdb{uJM074) zqKDdkuwHfbWrC%9ijl$E+8LJYxQn`*mC~23sBhvzKYpF}60`dCc2LFjSm?dCy{pBq z-BT3g&$y+$*KAx%TO<&orgB1;iZ@)?s%@RU{b*YhWhLuf%&}V#mu&4_*RSvF_p5c^ zeEoGz*WY;UN-kUEHJw8(+zRKND7~h$zt7;oVe2|rxuv&dU3-6fZ(niIc)wIVg~AO! zc-;pZ#SO&tk*pL1hvP!^C95Zu0a&g+CWpK-d%+AzFb&YY$wh1H?~b?-I~HND?ON|_ z;oP&OkHOSR`AI}KccR4GEka)pi%L8;*RTi{SIRXxew=A|S@GURmosPErN^b5cB|c| zoNI5Rvi4-)p#9yx0lhb@`tUM#T(^XkYu6IkEi~_8?`g$KyXbaSW4KU=6(iR96aDR* z`r&F48IQiQuB~bP#;&etPO!?Awq5s{+r_M0?4HuFAQZjT170f!S?LO4LEHCi?CWUiZtcft+t-gF z=C)|r^(+0Df;GdWfiMTwYM8UdA%Y%QRzkRH zs7-&K>%qB7$*OYJE*K$N``j9H^A}nD1NHp8hM_cleVH?r32Pgi4w$hv0Yyno-MNx_ z2Gl_$Y><78|tiLPz4Z^W3)9ZRffzHXvExNZfXw+t#}6T(`vrB=a4K z+s<>_TDP6+w%CBA&XKt7Jh!cN+qoWhB=a1J+s<>_TDP6+5l7;d@~d-OS=P_x=jsxF z5H#0uaoc%rTkE!S{T9vB?Jfxz#pYr?z*Qeue)A%KJ>ZqhU&EHJxNhZ5?#gD5c}a6h zU<VQXVlu5So+}h{ zr5X9TQv^?e{Nt4$C{p@NSU!vL#0ml3$W}S z|oA4<*=tD(a&Av|XB@ zXOjJvi2jGisQ<@6N76z-S8=rmHVMx5=l#u4KJV2e$=CZo4@!C6iCTIX-Gy9|`~i{Q zER>Xg4*o;=e+n!~{w}!>G?x4?qkNM5;RN~TCdhvzMgAh`5HH}oO=11{tSL!;q2Nnt zJG1`0UmVu|o4}IlKaPVX(tf`yZbSLhFG>FDf-hp_UkE6a{|baB$$vrQE4}CDWoe%K zZ>RLXm!$ky_B(*`N&5E`yp%(J=dNFQ8e>6#}}7Wgf8pKO2zRQ|+=frT)5>@r;0P zDE}dpCsqjPj);7fL;KIce<*)Niu_wAd4|;i-%$Q_De|W*_XVwd`eG>mODX>MpvYHx zRU?$o=RisIuTGF(n;`#p(9TKi|Ii7_zdNP8kKa=IY>;&b^}iG4lk_hn=s!O}|Ep5u z?>@oyo1Y?ob%Okb3Gzo^|0MejpP>C-L;0lo_aw;Y^Go#y^{b0Z z3G3gLOP0T1Dn4RlGaJgk4ds*MPrJ?+%!~e%e+~Xa`Ddrd-^m|~Nd10S+=lYcOp(8+ z!53+kl9W%CLiry`kw4>fU$EKlirY~BiWK<|i+tPu*Mmzae;cnvOj8XsfD4$gSJR1vXuiN_jXEz~_=5|T1 zAL{@l*?*_VKP2?Jqb!>`P(Dfiu*e@U_HRVNQ2u!-@(0iKQg&Hk$cOUJN|E3EL0?ey zXaD7UGNJsBrnG-!r7u6${foww_FqM3L$dX!FNN|ar^s*M%@(AceplRv^*<#={)_Sw zk*)v7z$KLb60Xy1BF+tMIwJD-O8e0o2YzcWSt zln*=cQIDyAOM-mHqEE8_Cf+PU8cY6vPmw?H5ntZQZv_;~4&TN=p3~v9lmq`M2RXls}SIfBoS- zhWyu3>OUazo2dj6>)(n0Q2v!^_2=>7?@UqBXZm>wejSj*|zUzGWSbQ6W6O z@vr68|NavEL)oO?bUC;9&b!L*srMK0AC|vzLEXZ6`8d_Y*}TvD?Si^GcV=#F%_2|I zJn7zRR$QCS#1_dQ!cKhT<#M~pC|GcC0V@q;qCD0!<~qs$FRraL1@+W6Qk%P~Cu~*& zJDD{o1{{y@iWfz9J6s&b<^ASPw}YbviI=EKbLCV$b?D$bq^9X`1BB>cn8OpMWQ%hnczJcQkA*{B<#DnAOaZH;O0{noKxBZ4T*7Az4 z2NudEEB!WQI}eb^E~)&L3+C6<`a#TX#~Sl$YZol^^d~;%ZIRy})T6)+wsp|x*z)W* zkKUad`pKoy=)c}Je&|TkgrOgOw<$0|6B0C6}H;44Euvv*O|B; z4`9vpXR-D;u^;0cZdn|++|vBOO)PU?X0SJ2hy0vbhgUYB4%eYB*AD&bZPyGPy?Z(8 zR~SWIx4QA&>#}Y5onyNWLhrYrzn2;9*!60(_1Lk@&@k4ZK6Xwt`u2BSxRz}PFO9Zh zZFWaD^81Cw)e|ZfZoj-Rgr5srZpcJiPsRQY?5Agc#8vd50WhFBMVepDDm-D}@IBO0w9h!$6mr%f|o8aW?pdvl$7 zv;+OCrLw>wV_P0r70W;_e%CtR+k1-ly^4DZpIHL@FxsT!{=(vlyDqBixIbFFy|OU6 z8RechuQ19r&7;iKFHavAZFmE=B;AidzYy2?ip=y{(hq?L`sJ33;g4LSo^lIS(XNV$ z!k+18MH>!I#X9m8h0)Bk!XBVdb@iPTjdo0eUCuzc zgnl;){q{^gvXJMOxoNXVOPin9Qy9v0 zEgkAdK083Wcprg&^Kl!Y3jKD+zvBNL{Qm_1hyU%^(}P&MzS;Z8wt-(#_M!=Q_G3JoZFcuscM!p68jdglW{HPAc&Dm&l z${03D8sFjnvv93uzsJ}ma&lF$$1>=<6gJqmo#WHdyT9i29)vI9nG|%zxOir?=k%XK zCda&^cR!oXHxrG%D}2ZQEciY%^y5>b(I0&zi?+-;n>3GS8%8_cMmuI?e2T`qHgaPC zuZM$^*>`=vXIuJfyd0yvUT@fUI3AJ)^Mse9>x6OmCNDh%h0BU(W7@i?|gCqW9HGj|9t2zv@`oE+phwB zbA;pQg&3DPeq!8e#u$w;u8RGGbD4W5L~dMFA0U79(^>bTZ@%UDKert^RFU`Ll^N$d z^c$rQeI`F4+BGnt@TKMn(U&&kI@}L=9hGsr`tcz4sm-`XJH4PsVchZOI4xqI`^@;L zZ8_FFF{!N9LF-Ig$2R6T@|^Vd(zR^ELAC5L*^>u8wm$4(EYs|JDAN$Jm_5 zn1})YxYwnn33kVPwaQ+XI6rYZTvR|G#+VFWV;#aVd8|2O^O?NHz;|Ke{g|h4d~&v{ z^y5|BW@o`qy&tI$pfAp9#yo~|_qRCTgiXFSA=>Z*%(Zs>`eWz40e|P5alz7P>#e_1 z_{<3A06&0^Z(uGoa%pbp*z{=6k8yoHmaTZ>)k#q!dEvK#8xNb=k1z-1oSE~m5%jZT z=SO?ani$m`as9Fiw)XQU&b^$@kpHj9a~?E|`S+_bx5P`+bw7cek?Doedvg_UJdueS zM=&qKd}vm58u|muO+??V#{6R@j;CiPzJc+&k@R<;g1!yEs6L-OF|UH12gYH(1UZzU zb1IGppx;CJ)5k{}aNJmtjpi?fF3TR^yysk}V>9M+m8erSc)NKN`0<(?(&a%n>~!>V zxj}@Lq&^jxzmH6h+?b;CJj^GzPS0KNM$3bA_F}FyVW1aQy=j&`T#oNT?r z9mT%<$J=|`^J}{|u5X)@zqY$K-`C%=zOALVEvC4udt-imdwW~Hr9Y1^2K)N+-Rs-) z-D~sx9qpi6+p@6>P;Y)sOJ93lzw++Ox7^v%+10Y9t9?$szOyY)E^E7c@!e0pzdO%6 zp)9}d>L?#wzrJT9(7SrtuhIkD7v0#}zp^v3j+t|ZzilGL-I3f>Ug*o}l`r^NY z3cIiJO6+`#ZbWmzL7gom8udY8~%>BJb>eey$VV%5_IIeoQK87mj%eU@Y>xi!-n;Veao~Gm2AzHRb)EQ@ zdi`y*tSO$a79pMOeOH0q%xEkvi(h}M{`eBVsim#0Nsn2dax)l;yM zy&zdVI)U(z^cJ^T?Ir<_gz>E*D#Y*cE*}?X8__J6j{IB&^oj-q(lK z3D>vvcEf3_=hn=hUt3eVXmV^zp|_A&UIHno!jA{`L@Mt7cE{}*EV;-f(7&1=GV-vZJ*y-v$$^Y{I&De z%&Tc{ZJ*axJ8wblObjjYnn0OP+!ST*xhQk~QXRr|a zXR(<0?@oGn@_#w~ktx4d^@X!PKW$QW*W~FSI6eC7m;UDEZyosCzx#Wx1Mhh^qd1e^ zYi>Zk-yu;njLAHB4<_@jeAIK#HRmQz2aRF>isxU0;(LXc+b6B}K3KZm`wY+@mNI-! z1o>0yCto<_3)#<)%VI71DfOpET;QB^7vSQ}G!|X`3DDJnkH$`ao%HpmbA9$g(WH~V zaQf$`Q^d=@GxBV0wp} zdMSq{{KACKS7cuo>X*Lr?b$eu`ISrea2wE0>WXREuC%+x?RnAD*Q}U)VU5=13zI%S zIlHse?)0fHk@14}spGeM?xAc#v%59x`GcH^zEq~GS^@Q{Keawq9Hdk5e@MzsW?3Y* zv&Q@xtDQC0&scPg^lPN!(NULsgiduKwj}}6Z{L)z26VfHt_^wEpyCp*-^esnUj(d9i!Vl8d9ep|O>E&fb zQ|4($UyghFGYzHBKI!PoaZfKVgPBrXR}ZT>86?gotwYcEoJ%9#T6*4wElo3AdzIs) zN?KQboTJAtrG%8Ue*9ZbpYzM8_dCDRmuKSle@K|Le*CMBPfTwaCan|C_5Y%T_2Y>q ztp~r?(dT)(EG4b`{>P5~k}_HXN$a?O!O?S6D^E%5wex*<|0Put{d>y5`yG8bPQs*h z+%IzNSY5`))B8DyJ^62re>v{y-)l)-{+}FuIqvCsWh+guIQnv&RJoD}$iCb+9Q_rg zOynqOUG_h7^mEGSha7%o8UC=t=a%80!w_lTC2{jGP`wPCV|kc(Jx;>EmqP#hV30)5 z_-;w~iWL5xDfl0y@V_~Q|LrOG$5Qw|gP}i3&kv{6_gY-1lIVXA<3pvnzUVb?XNo?1 zQtI_k3jMh$`u|djo;@k}N8u+)`g8r%B>e0YeLj(5hf7oF|0TuF*%W$ye^iOL(KPLq z%vVsaO8tljn4246k9%dnrOrPS-MQtZzWKFMz1 zhCd|XfD`d&Q|$0)3jW0ud%lw*_cYY2(p;CDp$8M=BqZs1RSNz-XaBQ&VQk%R0_=Yo z|4Dpa0bc38kVgi|{Vu@%pHuvEc}ji11p8M;@pb$~$1RF}!TCviy>`C|aBgLa{(qlh zw++sJ^ySca9y{0d>%2&d{cWGK=Otx0e-~7`UjzP>`r9pz&*epWorC|AUUxf3O#Z_M7dY$d+8()v62_Mokaea~Z`K;R(Bu{*a z!L@$G-*4~^LoXpC9MUEDRM6uYWijK>r7FVnsl& zcw0dKCqmy5&@0{(&}%#4ogSA|AH^RG=>J0aZw}}c-zGTiVEe_O!LJb>+-*0w^`EB% z5AC*7aMe>;?F#7SFw%I+O0W1{$xu(*FZK(ra`%gX7X(*6iXSq33aSkD<1qd(k^i+m z>$X!2ex1Rm8N9*ZI&Pf@K6d%u!O-jVgt(>GexddHiOAFIhSp2*1BU+x41e2S zRv5ej@|cuACjBl=7F_u&UL`p7wEXi1|Db2#w$*|w|4G7sw&2QN@jAoD^4I=Ixt9Ox zfd9F||JH!N;?0KtjYiLh4Q|JO>*p&C{Y!@4wxji{RfgXBiIqFs_|Jz7y~fvKeJ#Cy zuN2}B89rA3!4&){gUhF2PP*PpTnM>08+~39dbXn-Cl3hDcC`3m!50O5^3p!kztQlo zGq@d3774EYqeYeouKuHVA)tSc9M=c*iu3zqChB9ylV*b#9EIQT_Xrc|KkTz^yUE~o z92hjXt(V@z4C}>s7ffNjo)TQ?RsWp~LOtz# ztW{)jmk;=VQjTW?{1vYeocs%h53k=$VSSefuKIf_loed{SG+!;*LrEcRC>i%8M(Gy zbiPM@Y<=4deVYo!z9*3TH978=y~<{84ttxhT;Q4PyKCs zZ8La5^4vWt`LJD{G`Q7&yWpYzPYE9CzcZj$J$D84ia#TGsQ-%wFG!xdmn0wRqvL9* z&+9@@{?>mkF!&vk=We#awe1L5Ke6^{5c*J`6@rKQs9!1l71F+q0lnhttD$|=e~1^P zEO#>`Pu%)#wZX05+Isz>&~Uff(BE$GcgxRLruezy14f?{@$)AQy&ad-Z)qQk*BN^2 z4+X*5UKdH8JGC3z*W%i~V6P)f1m}Fg;swE}e~+(< z+paLU?Z2x8*Z!zQ8U+vg@9KcQOO9_1=oN1hocdV5-DGg9&pm>N`V0j8RnG?ldX>95 zpjUj0;GsTG8oZ#)v9FRm>DL(Cjx*}RJgxnL*K6A@cD%Lq%?r=4zREwezm8){|4Gq% zw(wDU#cjW~_HPh+)~g_S?%pju{~$$A#eZJ(g>!xk~?i(Q}ayD81qZ!9zc9G`P|b(smDHgtQ4g@$r)9Zj-_7eaPnxK2h@A9WnT+ z2G`$B_=Rm-BF&7tHk4{ z#u!Tt{rM!6wA&ocCS zpObRc_juZ_?`Yo|I%N3N7(V01`2+H)HTX1xtFOA#E}V>hMbLzA2->i8l>er{e}jOd zl9l%Sic%#n$zOlt&5cWMTz(DLhbzA0&(-%F)vB9T-f}&|)A)tQlwGhopVLEMoiF*` zfs0>p0Y0v36)(i+Suee5=?4)Ar?sWO-G2gL*Z3)6nfM8USrDkCLh{ys9C;^R+^>XA zKkkUXK1i^RteAGUt$2P z_=YbFv~lq*N9l(S+Bp20q|cx3@?3nOrk?&@w?<%3d;1+tUHF8Dk%YQE z#&0p=BS+y6*?Mc6dfQvtuoU9j_Fh?;tfZ1jeq<|ILQJ!!eleo8ah`iz7VhH_`SRm< zji)5B$xEzT^jLoT;?`foiiay#U325jH?N@GTJc#2*Ee*9TDyDO`RNqh87rX4cT}b| zODZ}hfqJ3&0!anmL5FerxaIna3IT^`w@x3smtVWhHRZaN-aCpbKo$>rx_g?i#-KY6 zqe~g4T#C-uo|)2B>s-xyK91$v_!$?LE9~p*>F9-7np#_0J9ODPs)Yq5o8Tm+{<*OS z&I2s285XeH*j^l?+*eR;01_|tr_+q8HuIll#h>ydxIl?lmeI%lP||3n{M|=GC&t>7 zIxwspJVNG>34x&Y`WFh+H^7PT+YyQ^zWOY0pR!HSF4G2}bWt_{$6JC83jK^1P}@F%?@^bh=H(u{vZC}HrZFXn@Ba`3o03#0 zIf@Tt+EWC!K=|>>=ViXA1;X;5MtNcdC6Il?Wj-??1?J(9_0;N26S~hrc#`~Pk*jn< zuAkrNVZ{6EN%Hs4^dwrI^7(rpl>dno`TBc*m`a-z)_-G){9%#L_oA67pT9do`DX)6 zs{d+f(7h;QQz-vTluxSv7MUDZkU0|N^Y=|C|H~=ukMH_jTJ3kmZ784b9VE$rSYF-V zE+r|SzoSC=*Pv07>d*JInZ}Y|K=~y31^E$R<@5JiDF1sXoFsq$3CbTv`6T%x3G(^7 zFqHoQuq63;A$(oh4`eP;mQBBkgCzM|@%T!{tiu&zgy%NWE`P<{+}2E z{~j;4xDDlh6K9g-A6ev!9FUTf&)@B#{6B<#N%CJ2`7cU&-G%a>K=~y3FD~{a^!Y61 z^Zr06e-ZpVN&Zulefbx}e*VbI(meO`P(De1h1?vUhW2rE*zi6?DE~PKPm;e$ZlW}} z((xv&|5s5sNq$~#UTJyO|H1_McchFzdquvOp{PJ8|Gg>tzaZtu8ow@2(Z56V-!77= ze;)s#{l1#ge`ieb1;>)VJEi|lk(;kp{v`?W|1rgX?>RyF-%Ih|-3jt%B*{81jHWzzkH z$S_~y(0H@2%IEjQkjrT~-OqzUnzy9)*qgWJL`eI4QhziC9PlvJB*k+8&23xuqvC$c&F&ObcVOKTk!VrhoU!}yYEG`BWzn*V+@}kOpOi&i59X%qScCX{dDQK>43AHT zO`@mq%%$p8cYMZjh6r*R+Su%R7u zh>wO?!jwOPxN!8#4yU(|HB4O@zxpi~zdGY$yB^!e*vsRGelm|SyHA0yRlwIKB1Yq+ zp`*()TN$5~u_@6nMq3bHka1hdpRwr%VKe3tK}7_p=2=PXA*F65%RCtH0SImQBh6>;(yZ<^-|i2aM0z_Ti0TOQ*- z(WcwQrWG3R^1|ptq-R{pn^BgrZ{G*sR~?6*C@g;U(rD`-^nZOhe0O}|OOIz6!*lv9 z#<*sjj~#h|dcdgQ)KS>i8IJ z(20@_XebpSq!_>QoLk6TFjhgaSJ-?$z=(ttR@*TF}xf!`p`;XWTHSmWfU$X9VJjpN>y#up{6mKj7D#=EmILs?dj_nLUT{_AA4>9 z{1`71{_r#7>2yT=xu2Dej$cJ#&riv(7<*Xb1iJbnHl(*}9G{e92W^|j*vBy-LL2d4 z`z~UJ??JeuJBAUTUawc4M`^6*TOxmb{4RVL?*}zD!w2m(%k%WHmvQ}?#rW#zPkZp& zr%}gN#IF}QrE!@VU+*UvyN~VTSU7Iz?e|9T(Fuqx%W=zJ7g>*C#Mm50KlkIy^c{$| z>H5JiVqd;}b2K!FcGv6Xt2uWq!`Lx(hx%mMIg~3n-;1^#UU@D0K|N%%ANVm9ap-p} z8&??OHIK2c--djReH~$}(D8Htw&i$g?fW?F%6O!&K|W)izU^Y??kn~oi)ou_tlom- zhnS}`e7s)Tn)YqE9M=NJ=eg~9=tSSwWAb4Av-!g48tkb%^`>o8`Ogmc&pAGSwO@2v zaZZAH&3_vjgcDM!aXXgW6|sTvW$cvF9T8>U@j|KCbH7 zvsg!7Yq-ZX1@TL#x%@EdGcpS?@v(P)n?d}3#MFH|_u2DaMl8{*b7#MC@aVBd&LvnD z|B2U^r19fz*au@}74^WJ3h`;{QIF*q8<(M8j2ZbCF6QrEw0BuNWyGEAfKJU4XP5S2 zT{JFfGv-y)N9{%%aNekGhI20Na>zHrI5U9jLbJ4cGvXy{8MY;+wNL99otNu5ef6N^fvBF+cPvVt z5thH7QF5A(D)B6T4c?q6;i(UrQM_dxLw&Aq?`g&Rv-xGcfMV~sTX)2X@!@uGdYH)i=dgCj7W+gFab2b^X(dxor1xh zshS%bLvV!#4s;O|H6*5sMOiOp3cieuMX6S?fftMQx<|^b3S?yqDog4wbd4b$LOH4; zGjQ&O6XbXJ1nB4k7toGK6@KS@rADyHg3(U;oq9d7z%NXgOlK>7XR+VYmc_`Nl!c*d z*rte^>O-13zr!`hr7gZ(58{OS*qRkCvL+m%XO$}i>r(dvfu2i%y(w6;=Ml?xJQ&ea z1WRibk3e6C|Jib%v80~P4=3F!4qw*J)TK?z;ogc%*+r{^d4mmiM5Sg-D4Lg z-74Yd`cFd~gR|IuKtsAsCqPF#VXo=YE8K?Th8r~)X}93p{$&>))_tRXK*}BRS%N0kAxKNFwMnA^BJV49DO-XvZR=$zv}Fh{2(J&@)o)m zwA#_zx6@+n1? zwHRl!QH;Cm7^r^a>=xs;V9q^Fvq%)}aD3(#!D`8U*YSz*A^|cv_hyzwqUe*3&%7e2 zeD*s&Fg@f4`tqtJI^mi$GUXfC-TT<+NFYJ~i_ZyIr zgnvH;|Kk+=H&XPxDy6>LTz%ttOEvg1eFS)tKA(4fb%rOxwjjCZQ|kL~kZWVot`hnS z9Ujk58U=p~4PWWJ$OB40!}(i0-%z{{^|din(Ht%dxB>GK`{_-Nd z{+68O@b?sPFZ$T6@pX1YN*={NN$w3P{pb#~V-o$W6h7xTd&bx6TSe{< zQ~dVpDfn`^V@iMdW{RKGh@JS2 z?S~}K9e*1$@f%xVY|E%(5wB`pOs$m5hK^O z%OQiWSE1M+3HX0c&b=eJ@>hHc#(5^y|5<;Cm)Lwp=@p+LIPGKoVX~AXZu`+R!8xw> zNS?bXk|(_#SCu~GGh67%r&sdaRY{)owq2Bu)=P`%_@MPtJTDog*BR0b!IfTd)rWFz zyA*_;xV4Y!6Y8n@s9Y%?yl%-f8648Qfks z)lcYesvAiggr4naam)W6q2caU$x|OYJ~Rs+@>ib>`F9yUmj5P$+v~gP7TVw1vqQ>q zr}g4E^Q#8WOP+iNP5@UD?WcM?PBQBMicgUY<=Xk7ZQoy0V(eE)p8EW{!5aZnHLKD`vAb40`wKLnx{$991=vlAdlstD;2Dkp77o2>4OY+>E2>ovx zdRs5cf3?t1A8l(wn+$IKUu{DAtwO`ylZO6x48GgopE0=FGvs6Sv3#_xNpJP(PvLL% zwDo;h=;$dm?!6o8z46f^&64y56>0O4t*3j=axb_jA zwlS|382Z`b9OQ5PywTv+&+jp~_46kUzSQu4#o+Y@pFQ3mP_Fg!TMcggyvN`lG<+U3 zxcz-9p;H*oNy9naC71@+LeP|A{4I^zQWD2T-()0}dt0y==BtRTYwz#qZbR@QMk{iG zw^Bl*@D)U!*Faq^*h*9kp5@q=Fk`@;fWP2i}O`tFxFJwolS1Z8VK@+zzXYJ z-oC4SeQB$(MQRy*Ed{q#Es-6(Dm%Q&YTrZK2Fh`wD)`G ztZQ9obttitb0>Hl!!ea~E8n+MPxyYiwhO_$T+uM{mvOt2`gpdcwAC!F1__G!HYhEr53JUf(WNCgQaK$t>4lB9!D!;_U<4&u_<4#h}& z?v!b;66fFmep~`~(#9|=sf#mnn{Dk9?qOszqlIImy84dL+rF+FUc&Ld7z@pjmDKda zsBm=%;;5-CGD`@Q<^+`t`51nDUqdiHANbFNU<)Ihl~gAVV`eH`Vi=8RR=YSt?6A3R z>o&D6u9=B$Hg6#*%3_?&Ti{@~o$I#Pw9T0}-@$G>*KM%@T<2i7o$I!4GtWgmi({XG zkaY80?6a~6X!BeIw6Wr#&8u;u+;*(EED_rV< zErN3{O*)v%CDrQ@7%xfx{X$pr;}KXW|FbBcB>zQ`zf%lO`LuB;pD}t#B0r0e^J%{T z_BSEV2s@!dEMf>x(tlXWHxwy-Ce;6503_)@aG9r9N2UIBrBMIfDe|jPFDCn5F^@y} zf0819r^s&*K9qkd{zLh{l_I}ie*aWcs7ayxPo>B|A_Z;z`8z+9|GTFo+y7CKUof(n z4dwq1$`dQ_q)F8?{Xv6Ztp6GK59J?0J14dOD(Bc@q5O4_lT`ma{EA8G{gIcYdG5LPV^aBQDL>f~BOkWk zW(Y_sUnk}3$0+{*$|u!-irfThkn;3D-q+Il==i-hMgAs{-#>=@mK6D`MSioCr+nT& z3*~o1PE!5f6!}}EyzWB#-442>`tKI`2c#h7^FCcDzc!`)?-9bW+V3I=Ptu?5%GB(( z@g~&&TmVV>Z@I#kX^^7S{}TL%`hOO}ljM&GVZD^sT_}GG3Ma`wAoA5uD1SzR{N5D# zvt{0-_mR`&&qyiXAmzu>A2Cr9^*@xL|9cYj{}o_hQ8s^jNaRU zt8G7C62kUdl~Vsfkv}qq{12qmf0f9uVC9h5ejE}*`HbnBRR7JBSSo%#?2mk1HP8KI zluxSv>MK3fb|I#GHc2SI8Q0k)`LBz7oj(X0Crk6(|02pK$=93O)_pvI&q5S(&8I>e?D&s<$paz{-DU$ z@=}em{>R@*N&R>C3F`m%Df;&$=+Eauq5iEHCn?`PtD>&Yi2OHsU=nGWbpJh>zhPIB zwx8|~7nPu~e1(TmkZn>>K=zye4|neaUsqM74WFAE+S^b{385{e*xOPttx(gFLW>=_ zZBq$SY`_Rr(cH8RB#<_tNudZzpp4cj&a_&U!KzW2`I-tN&J=Cb8OtB%>x_Ie^_6iD zQNtgdD$cwxR%sBX@AK@v*17BMdrn*YX1?Fdx7*ya&vVvZYwflFoPEyOdu>r@mz=Zw zm*6kd|IdL@7ilht`7k2#hZT^c>aE9HAY9{?^iTP)lMq7MCK>;r7|H_tn7ObG?aKz$ zU$KjkJ}LhV>}(LGh+&!k<@nR|TCdIq5Xxq{26=FwD0ZOUoCgr5hfl~0=H*MFp%l&g zxc|MNvC&l+f(+h%a;2K>sY&qw;A z8h{TMu-s9sibjjhx0dr;#BOtYoQBuO!2crr^{CH5y{5i^$fM*pkp2Q6asGzr$K|(I zXW&n%%K1}re!SopXdgcHGR;BgGkfh_S5BIh`wYsV?gGS%@clR-*Xcu!_#yajDZ7vX!SAoN?RCT;x%cwRqsV0d~y`%k%djr&Y4Gww4{rsnVI_vN=&Q@2M& zw~~Lc+!XlL#NYJHxEq$h*B5;TQFabKEoa~lq&6lFgDo|oX8tinfAbzxM?5@}G*-k(tsy7OGG zX*sL^Ch|w$<9taSTA6WWi?OQnEvmlS)PJb*Ejvec$GEbTh)x{kpk9qjaLNkZ@={~pafPbL@{AI+aBWdZsNbNy=j%==m z-?#BYulAe-e}og@d+TJ>w~46xr@%hh?a}j5&&#M+-j~q{yQ%YNcFgYI!H3h~Z1tR1 z;KS*+@Zkhsst=50vk#2Gza!-g%9q;Y&jQEv%6?GgFVD{{oTo}cell-0Uvcc)B z>+~7v{ZkclQKLVfw3{>|W243`wT0o_snPHNd}g6L+Cv+oO`@MEj4l=XRg=S zhLJm916K}|u@rr!`cqA=C*J?tVf0mhb&PtpMd}%Shh`p%uJ|{3?s|Og-oWh`oQx$>sCR0INbEYe`K=EOW_K=T8rFgQB=`rDGMs_@cpsqN zH}C-bkLFMFb)#@9e2Y$w;`a0z_<3bL7(h7>ZhphzFQQ(KWY5_B&37&y+Jd_AjqI6+ zDPz~N_b)_US)h6-onEW2jo|yt*M$f^$COSnQp>A+VeZuWpbHKCbPZGao3UW!MbSAq_XRi zO4nhtLD&lO^5S|r0za~GdbG{K+H{*2(Pjrx)|=3N`(f{*)B)y!{h7AkXhO7y%n*3y*?a! zWp>v)AKlUJE$DAMKUG-NoQ)O~r5xLFPv*UevWrur;XK;mO~6WR(f2X?F#RwAi`zDR zdOIF(h=%KNZ|(e4w5V%pVYmzYFxGKntO58X?|Oref5G`y^<_}t{Tlav-t)-=W0xE6 z2d%bO$M56bhhOjTjqOT zj{DJ9bfHXGZZl3P3`g+Sx$m_j=!bm%rouPuW$@QYf6l~M7hHPyOdVHU7``}@yJ1OH z)Vc+JHOYhNix{8KH>j^i{=R_z&fWWbT@b&EutVoe++R&Ga*42Wr-c@Hj?y&oG4qK|v#tY|yi0ew|7{osix zM~vx|R{On!xPN!T52)hm6Ej}}U&rv#IsLTg#wBB-)+uY34ABQEdC>>&R@m_s_@Si# zZQ|(HovrC#)zL(gUdXt5Bs!tYIWAWIBdF)Mj-~C+xFPc&M_TdBFvROji*d*v%O`?Q z>rUL$elc<2O4xJT%SWQ2=aD~_8Q%BaNdK7inJrU?E`kqk*!m#)=rtJc zjDPkxwDJ;^>Dy4Y%h48^P{)^|yx|8p>-}NpgYi1cz>U@6W13?&+Cuv~Ul&V#70Xh` z;iNm>ak+mM@a=dc`-yw)c-hZH(K#%3%2?UF5}9J!c5Tmww%!{$Zi!@iQ9P+J=75Qf znCOZ5T`_6b+VeWrv}|16-L>X2q?|W*{@jI)4Rhx;G&C+id|vd<%jZX&_i~=wdl9=# zc5LWazee^~w2YNy8#nok{zrSeoQMKsNb_}x=S~+$cdo=OR!G2F1FRnBor2xPqx#CL z+TpzART+nf4Y+nuMyg9q*a}KjyJ`Q1jz<} zc>Z^R4s<~~Sar?#GmB*o3n$z=@iVnMou|&4?9+Fp7xF*X+QKiF1YuN zN%niZ(tbG%Y8diNo8&JM;^{H5rn$^H;8T=ZK$2!jU(I9Fgn^^^8GQ^cO+jFk_qM%T zcyxkAg>4~M-KWyFdxe(qa@)38)ADL!cpNWnUXSm`}D0Dzk&VYqP-l0<_Ak{&DRR zI5||A)jzJi0ecgwT9unsfD;7QhI|xyo-VP{VWZQt5+_BHPr>UQJw`AIA<3s;o1;H7 zftvg=k`F?wqp!qCmgGC|Qb%91r)8Io&a$U2{#Hj{iJ$Lq-T}%(y~EEb2XXc+>}-9E z<%9y`M!a&U3`MlBTGKx${TtELljv81pw{#cN?(si68+D?$NK0}`f(}r&qKvp(?8rL zD*sK2K9AsflHB>Iw@LUPqdg|!C#LY<5Bnt17tvml@OP)+Uxi%jTg%H90x7PSBb>j?R z*QM||FGWx8+m^)tv=lwxm}1W~UsD&S*a3SECCY`^MEu`V^!a`oo>Gnvrqq+EDSEz= zqUTpq_`jA?ULz^^r&8oTm4aW9qW`)S{FD^AFQ@2#ehU2uQta^A6#Ks~h0he2cjr*G=&V$8ex{JGNahV2CfiG}~{~0fF z`gq_=B@LQa_H!1WCIno&f1wiNSZ{DUZ$sncFVhJe&N3PmAvqocXqV1_cl8x!>ULHT?D6CF!+|@bZYEf1ja0Xz*r( z|4Q)C&Myic+WAmGzf*V}4(Juf%N7@?r)`hw6Op)WkGgLVaoZo(8$MS5a|I9eZxB4x zUwyzR{Z!F^VL-2V!N|4xUt@6F?-dPh+i$PIZTlTCxNX0j6vRL~yx&LN?@qy0f4wv) zc$i;K=wToq+b$kU;e$CnE`)rZFnnyg7%_O8PwIYuW%%a}{-WV;ah-EYJ&T5(KD-&2 z-omA+r@e;%Ifj3~;cxNV z3?JKm?>4xl-)ZnQhQIFhL_6rcjFovH&?++N9e0f>9v2mC!kk+P;lyR`@KB|xBd1$gIhfx6I|tbEuv_@;Gv$6 z2lRR$IS|k*{-ofcp1(4<)st(-8AxyY?P+*USKR8K7d+H|mf)fOy4RP|tDfrPO6e7E zG;*z-`CcMPpOzGTT2u7Vy~I?XWu9$xO+c^sS|iu$!!=8)kF}@z+@d{gzr^=TN^k9X zx8SOer^2KP!PP#B?+EC%e%=$%D?TWASReKn-0J@=gD+K~I36&#)&B{>L;ar=Jk2HuY4+jkX9)mX-yxZVvH}Y9$aMhpqdV_BlPmnoP2EkzsKOW8b0?MT+4!& zzh&?b8u|kUx9w%3(1iW@G{LE-rOyjaJ#BwJOYpFs)C;cVE2m}k+}4w3!{6dX!H@Rd z(%Mb+r|-`y6^dhn#EDlMT-z6M>8jmTZ7;-ghF;qX@fw5QBXQyr4F0&m)#ilsJs9b0 z4Sgfd8Hn5ah1MV9c9zTChW>P))crnb@Vvpti&4mDromSjT+5V~^}PY<&oT7hGW1&3 z?y_+!x3;6B7j6@KZ?S&d;`y9C>%}3Zn@^hN(5zzOX~#{yZJ2<%?z(mTZ5#W$y4%*Z z-vBqPoReBMV>QWHCf#m&s+KEPUUg~H@+;|X&w1$dj`4V1eA2ZxU%7lqQ=4<*7dT%n z^U3C?%#xxEj=kjZN||Dkqu5)k8f-4Hd z%8V-P)4$=Cwyt%(JsZHaW%)ba`OXz>5Cz%}AhDBJWB)Zh-Q68)`qj#n+GBpNS7*b< zHKMBexMk+(Gck5WTA7-c>Bv*G?yICAe{tEW-X*TAK+c*CAd( zx;5({LW+>5?R_1D3@fb(zEXCqXW6?{)=sK*Uk8hs4p(EQH?U;960uiFalBea)NwNi z;mcGLqCz=;xHxL~ap)H&g5*HOXquhqbTb&X=gxMHYJxmLI@< zaZtfrUmiLoO{x-1T878HxtA0w?@()TE8HhB^(*EsX5QG<<{goiH#~8HYT1TvPs^+r zUbHuY?wH z*)sidZ^t_H_kDdg_iR|(hNQ<76w;$!!O?d#x9^s9JldSo`p&1S)1kr-Yhp%9Ey|^= zpmDu=JbX!};e8o5@(t}}w;6TM3YV;F=Nf0M^PDqQ`~X#_t8m|{j#d#ZIai(MeW}tL z>OAjI)kU2X)p@X;_iqi8%)`64JDZdHnljN^TkUus-{s_P%`TD$cto;87>67I5Cdg-1 zQhsXxp8!jeUj)u@mp{b6lx4#Yagro|i^%75FGD^4xN0Mm{|pi*$$y@S5O(@Q{2R*W zo)yFjF@=xp%ll)|ADn!y>Img;LZwWSKOlM^lJt5A<@X_dlKlJ(pQ0!Ung5gV7s~%K z8g7#Oet8~TA?fuH%KvkuPm(_%^7lzX%0C5vq5Suz$loXO2PC~7Lityv$S=(FDfUT1 z%0Crl|0UJs%CPXHiRPy#)kgDAH1+=lv^hgn-J!o-yf6YAHKjR+9zo#pIu@o|2)*Qr2Ic=>W#2) zhfqG}StQBdd!bLI{XFH*z+WhT05=87m+ImZ@t2(y!Z-XO{v|Dg9>0PJk`ga@2HsTn^%RO@;q~&)jVp7a83{ah@6vqoW3BymSx@*`1?=^#p&f8M4JW=(S}T=ezF68{vE8Bhk>v=FN*oHs6WAI~Et=w*3pHHsl_b8+Vz z;M?tlXu;00(G{N`8{OD_*!eSZ`kn@VlSTM0Lfzap17)T@d~Tl_jbbdl=Q-Gyeuvs8 zIA48E=0W(=V;;vr*DlbFgUz}i1G>Sdq1Wrv(2+WiyJP7PedfTo&>WQ0_CqU|qwJbc zhRaZvOHrou)AYB_S0{Y{72yL2$9d1-$b4ZwXCwL0FVDDBpy%n{2M>MuIDbp90qtI# z8I67#K6y|Mb6$oH^o`YteC6Pahdy+`XU}AmBgVXS@a5$4{+^t#&$J``5~5*0^a`$F z-2;7&&iOug@EZOS>vMa4;7ZozJB+_bFW>Xujr5e&J`?s59tTlA^r3VZ$J6mg{$Ka) z%E`dIQ}`KlKInE&VVlJDk+Fpb4xWm9kBuIvhtIfCmPgI9p_nJqB+-$V;x5mSmq(i> zuNi3H^=Ru;44u!_aOAS7B)xy-nRb&+Ma%|=+|!Y?#J$0w)fBAN9Z}0 zGs+b{q~@@_FyHijM|p?gFR35C7q53dso1|{Q07%=uUYgnXs=@<_*9Da{09E04xygY z-xSmFkL`HC`A?bznWuUjKE<9pi}mo-vU-Sm^3t2&4+`ya&lc#5xvhKXduj;r8q~?z znVJ_MrxooJx_Ms5>Z6tjl-wI?&OER#QJITf?@YjX&;t+XG~r8ee=WON7w5y2tDq=Up;lGjz)hU zdmePfZ|2>t4I{Tjo)r?^5P%;#8Dpl8r1)ipS7sE zD{&vAFKIU(89<-SdQKjA2X<8bm4_`y@_Rmk-*e)h zRr?y&Bg*i;``}N|-3O<~{m9`q-uoVN?Td8yOSIvB$m4w`r}=*^dj;tqME}4t@Z+OW z`;7aDQ+~fTl-BNJzNh~e@jdPTJ>LTAbAClC6zc(65s&V0|c`Tow1{MwFd+c$Ot+K^w3`2%^~hPf}_ep7o_H}@-^n{Vn`n!mE>Pn*ZM+?JjTZdu96F8(=Q9>wDiWdJqetIZV$s!?U)R;whY1iY3d0~@U-CzI5g5+qbQzgy zP^PC&nbKDXe#(?&0zB4q^z|8EgtWqWC05QT|FhpdO+?4UVBbB>!nr;xvx9?Qw_@}7 zGbeto>a*2V@R(O@o)G=y$Ns%lf!7g~z6tSGhsatmq+NAX7kc-@3te%QaYE-j=rw|e zemlchj5-ur#-G`suJ}Gz^V#t=ReQ%zFSPii-tAsQ-JcNoTX<}mFtN$#KC#K`PP$ix z?wXKp#rWx#PUrR>jgI=Rpq>at{-{qv=V!169toq|skt}g&TKkSy%W-eZvN|Ck`Ci& z&1XUL`RST_#(!?YXD8NV^HrtH{_~T}F3WD8q|G7D;PNlnDgrkD@ZD$g_3Clb&7xii zN8?9bbk3-J`fz?S@OOqw{B#zy5paOGhfN@SR-cTe(AcC`x);_d}pn z5#NOQu-7C_@+0_^{Z_Z;qaCs4GJ@?yXAK{JJac#Y#A1*=TAxfV01I{3~%!KdplPZybFk?&i%j=mE2^mqaY!eU!YpL&ETf0Fv;1DfCyOPfMad1U}aPpO*C5X!l9<*F*m#{MRY`2db0l zH>c>y^|eX-xp!m|eoG3UkEPg$>)@04{6h-<$rQO~r_g^Zg?>Q_-UxeI|A_9M4&7P9 zlk~g{a;<+vcP|I+BPg$0<0sYKlYti@{s@bpWmuo0=O<9UwbqX*^k8@} zrQADkElK~sNa24d@u!HkRo@bE5}kltmBTaK%ZLE z54*7fuoE1;wziUwh#!D|t?5^l{#u8Z`bixl;2i|$OZ}nZzi{PV>h~0 zix&k~{XG?YNC>X_E8cDR*f}0s3@%f3T$1|@&M~=$DbkLq&jJN;TxD>X^5U*q|0^<; z!r?j>fqZOzxJ~$k`Ep}=qzvl#x!)KvS>V8K8J|B|v=L0^9A5P&@hxW*z`f!g-hAD!pK8oiBXMPuXQun*i;1?Nu zt-N==MM~hy~L@HttVO*#BDt(82Z_UkM<9wxApdJ zLvQQt4ujkJc8}m{PZhCKB5F^?2PLBPUzGFvd*TfgX-hYO1`XAAH`J%rT@BI(7s6N71uf(>c2wLh5Beeul!Z6_VdbLaVJ zBmVz|o-e29src*FQ`Rmj>nHhWS&&6h_z=HT;yiR4-0IV7@V85xhuaK(nZfUpxa#?H$YI#x4{?1{-1b*1 zgocMfiBr$ZCCNSpJV2-0~kW_&X%d!;1!AY4B>vANkvM zr*o53Pfapj=v7a}wLet)GlfpaMM|&uG$Z$1WrAaa!EL+K=O^m9%+NO*daJ*_n^b)? zNsG{{K8m*ruJrfH`Ko|kaUIuDAFKZ+p(k$jA27JpQ{RQET-8U%d!e3p3m>IdeYOd% z^orkOxXM+1W=SN}Q|}{6f05W(>#EW# z{(A3&|5bXvJ4H{$|GVh=F>Y4}Vway9d$$2_Mv z)QeGwpAnFZzeJCd*?<%*A!bym9HPC!^P2-2^S{QwT4cPDE~$eml}N?u~oQpUsapwet)Y%Ct+7--ESvWJv1cZ3Of1)dlGU+mJ#8rSbJsUbWi-aWvF9AL4 z+?0}|nUzA#+zs`>;hkl$toyKlf1NA!HT@e(UNPW_fHIt?jBrUqth_j>P;0O4SiLdD zy+hBMekyXD4j{_%A9#R(V%FP(%+PR-TReNYd@Q3>Oh`FaEvZZp_!O|UnP!&+-Y3K{ zT51`s;~TFSDKmzvZFFzqn@3z9oTCPl<+6z*@dOv|&cV*#aftX)aB)_N5}9}45l_59 z;|#qn_W3g-_y)*qAaj ziVDHGoIiZ^($A7~yN&bO= zPEMUHjq~^m{3XfXBA?7v4&~F7q5SUyOOk&OID?(9!Sm35{~%a_7fl#c`OGu|<#QYs z%AX6RlH?DHpn}+sJQzaxSVxkW|GhHUSt#i#pX0qy{_>Ra9|2#6E&dSyhVlz3<^Q65 zDzoxAt_(EEtIvC2m*C7l$FHIM_oT>w>^SAWD@Fc+ zyccZcbDSK?zZ}XZ6Ab z%ICPASiuq@{-ns)j*0R)?hoZ(ih7nLU!5E(y|NGG58*;m`dp1qq0d2S>F>jZME&3B zQ|yw2)PEBGR3GhEjv#T8eDzCkEcve>eUkiv`bznf8OrB-nk4yqk2C+@MdBp+^|LGG zvr7x*7gOXPVJhdaRLcT;!L;x?jKk z)dN26e|3%Q{D#-RMz+^{pe;D<3i!5@iFDn=xY>R^=eXHe|BAH(Tvv2xWhP#qm8&ld zbKOo3>r8X?(eTGGt>e&2uJL%pt?{VC`i>n{(e`2u*Ok_}^+XV}qgabIK|Ep&5|3Oz zqSrM&@VX<*xRx$E^y{;t(bpd3dN{1>!Fr=3SQE%}T-QhWomc}gB5Oy<>$O{#Ax&Wv z>D?OJBac?OHNU?*KN@}Iy0KWll*78VamY)JTL;XwOI(|T+C91?GjQdvu}+WtxkhqO zbi_KSmrzFAFz(y_?US*NF!PCf{}k)?4uhtE(Cxo$CtcJSS@hN5)1Aeus5dwZ~YOvnyN^b7ph}b>x~Gyl3Vb&pB_w+8EVw z=!=C#&z==+r~c0`!@9^53J=^-#dSf`=ll%o8@VR&>ow8vp6fG1Rpa*k0oFi2ki%Nj zXHOpZgM+Yl{pr(dcYV=K9oR95{N|BIt^xWH*Fn4WRHgjgcQVQsYXH$@Z2L2;sl^au z+u!2I{Mx+kf=<}~^or@3Xu}1WPfa~i72P<9v;#GTS5U64`?AqPPhbs}tk;^O>!+~Z z(Uk}C%VB%PI&0<;_>Rw;GUEED>dcONS#D!cR%nZEEmRTfik`_%f(<6mVH(OmwDRq! z50|1|G-HkKC8)p4hkkcH>d&K9uKwtnMAi+aDWbk{Eg#}_dDy(PuJ3P#etjb9YBt)= zdP!PMGw9Zxox0nurDIw>_wCECX(E5tMRZkYLh0+ImgFnf>4)Pp9xsRZo`Sv}1_mMMvA2o7DVe~ie zjD`kL2I%W$&AF^oMqj1%qv9IU6ipM(5EE0-c|Vf3|IAC2p?#ngUUuM3VJ z`utgbO=(fuUi&%diyfawcIBZH>!F^L2lHQ*FO06nk-AfFuDeU+e{R5k?$P%C`4wl-X72Gg#MoPrd-_#s3L<4L~n#SG-ohI{75bW-4={hcEO(HL7hL1bFPJ5g8PQ9FCJiBjwXK>bABGGK^n!M1syQd zC$8o9>y43iPVsj~7O*|&dis}L+4*&_X?67F>c!?zzr~2Zo){$Jb4cUq-ZyQ0M7G<5}F3nGSWP5%qZv^FSK47xT*ggZFaY$9-N- zL%J!>X7q*dxA=P={YO%L1aHXan&0HQnwDS6Wxo*iRgXY7^r>@}!T!{H-^pHYu2cRY z%7z%*W8D5H#_fMc5$npiZl85vN-i4a7*%~}3}THqo@MqtjP>v=zpqX3{q-Q~@<2_r zXXx3?_T7(Uw(t64X8V`#%xu4Zb!PhmOEcU5VrFLhgH@UBUqQS1>Lbzi{8`a~5=8l2~G zo^{tJqEC(E!S;!=i_&;!8!YuHSYYx-Or)z z;n}n<>&|n#*Wf&d^JVV5W;g23L#!ibx$|+m*Wf&h@>~`n|AlD#KVpsbxzObWT<=ER zg1?D}*ay9U_}hWa#^3dbcOe}f%U3ciLoR4!`&Ev&+o*zlswbw*qfs2-1v!gvuDqqG7Ud2wXTh?|NXu`Et2;K7i_^~w;;6rC{rZj#ZDlFF z`}4E=&dt9AA6xSEXZPi?Hh1mpbMr0!ixa*w5}h3_<|neZ#@{*IN4fUy>w4fRzH^e7oMAcQ}1;>_+8!8-H$_eKTghD2T|v`<=<1Cv%PEmo4dPjT6Z44++Ghy`}wttu3fn3+Qzl>F1X-=^VcqD zm^Z&;!J39ejf)msd;aS48#>l>oWFMd`4`NWC-%~M54%gBO% zLLTdP^ITK6$ECP?@xZ*fMidQ0YW{0%v#l&cnxmT ziA|+tt5GA!(1u(n@K^Izo-<|)$y_eoI$P!oV?P&K_-kZU6-okJ{)MhJq%(?;ZrgG4 z+j|^z6Txpp=+NJ}KwC&L?;4u3H2<=on6DX&rxNi(Pm9rxQO{``J1!GH+>( zD=zHBGSKw{MW)rY-qOBUpR|3kp6nGl4Wuorui6lQ@?+BB9fAww51#S5^|&bjCS9(Y z1kz?w=xD13p?jLde*JuDUAbFTUbV-pDR=E;1xPz3-HSe5id|}|?h6d#im=>N&dz&< zpQ~HwPm=ANZA2GQmYQ`y_tO*>u8!h;oeSFEu}t9~&IP6OXUV@m#y6DL<1h2=3A$R;a+EJBR zMWc3Oma3xCDjKVCHo}uZ5WeA9SK=hg#w*H7iN56MwI?azp1$%$_}z}a68H414dvlh zM_-APDjVUAWDu@*^p!ZtvhGz?d4hL4dhIdFuO+QHpYG}jMvMs|TeeG=Cm417%VyEV zDU;TyKkMk@(u-*sNm`@+T}Lk;ybbkORJE!|d)3lfK+mUyYmz;VPbKc@?d(0D;&oq=iy4KNG;+}q11^qi6eI@Sc n4-IaSK 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�dDgJ%^teuv>xjDO$o;nTNug?x(l&VJ1B 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

1$;Da9iH-bOs;aVO;9{x{4f7ru+A-H*fiIP+M zzb$xy-2W>6q2LJ*A1{2%JiJiwq=%m^c%6rr2;S)7^91km@D+mhdU%uIeICAD@O}^f zvfz(+_%{U~^l)A0dCtRi{cXs@4+)>c9?mmjjgtXG?R=)-`rf+Y^8`A^YGPz zCq2AD@H!9g6ui;HZxX!A!@n$euZQb8O`nI`Z`Gjx@$e^w&m$iGkAe?+_|FA@&cpvr z@F5Q$75uP=pDN)%pJkwa7ob4!{J^->GY-KoPlw@ZS@>*Tb6y@AL3>!TUX&-?F27#9mT%*e3X(huB| zojph9V03QC(QP~xn?YfBv89hQ_o=q_fUG5RuUoc6!^tq-8elU{^QNv~b=|VdxoeKW zCag*Un(LjkWBH`ERyn$wy-&-Qy1MeLafiaw6S35j8;-Va>+0(4?g`s-)MC%%#&)BY zxeMGwb+*rS57o)uR-{EHCGopmW}v*KDQ7TflNWk6A>MUfFkqN}{xj*Mo5=A?HB2Et zg70|glPOB;@zb;Z6HD6Y)bFs|+NqH^pJzVxenIaoIIjzn-wT|s&0bQ!zWiS!CQSa+ z0-K~!Qc^zKl`nraurT?uvCPsI*+~n(hltnEq{mSRtj$dhbebHSca3VCFLVpVnF?TFs+)I+ap8>~d{uMd^ zPniAU(*HCHAkj_r^lX(1q%~tccMKN)fLqXEcMCn zspyluP_HC^@cS`X4LbGBz&RR0zB%is6cJn&G?<*LQFQEvC(V9|C}~#R2{oGp-xjHaca%Me19{Y-C;|!HZlFLxX?EZ_t90>dN_!( z!JZ22nYgJYvZZulP`@+UyT2Xhmb?=iQ(6^?KU*9dv+-f<1KAmk<6GRPmj*L~8(_mkhPl4I zefZn$mHVDX@Q-&buHG5M7qUF#*l&YAvPk_mq1>Lu`7+#RvwTdj`~0^Xs&0x0Tdw)5 zuIHBn-*{}v^Rpw#>N$7~c<$I_b#p$>M=A(*Pi)^565mo}YC}u=~#ROf-_*)x)VjEz3VzweZwI&y5Z9(8pW*7i)9Vy{k76KpaIGFHr( zuy6UXHP5dCPwF+Xy}b(K%C7Ul`_IPrt~sT>qv|1C=YTizRlfpq@*!`=X{h@J!D+K0 z=X}VxI0&l4_6og&x)TeM`=5>kmC;17oAvWu)Fs%>)Q!C;x8*3~_?Y0dffb3Wp;)~1 zNnBZ1SSMIcjiwAT_X^<*B7Dz1TKXz@(T=ag;^bKryl!6QK8A+?rtOSAZNHiRVP_O) zJICc%{$ld+HkQ+bp#I>BwyNTHgDp+) zUx<3qhO*iLTPS|jl)I+?I385Cp+2HMnf+CHxMJOW_mT0zNO7dN`|8N8ca4qwyXj@?p;nh z`1j{ly%w8LdQ%YD5esp0xGJWHr*qNoTLC=+- zpBR}q@v)~$c2VCwn-FDFjp#5i@qr>YR?~l%B`7xj8 zvTVTj$oS+)0)Ap2hb>v>4na@i@OM+^Z$$aYy52&pX%`VMz}40DeMeX7M%umjzWpKC zvKTsJ{jR<}GJPfE&X2?=-V_8|Y9=PHAD(jG^u|~`Zx`xQv#C>;pe`&!ov1z% zm*8xv#RI4_=B#n@dlz}34&+5!@Qk3w6SQyGddsuWVOAu%Yu4Cc_ljV!dPU^u!WAf6 zwpEtf0pxQD+CJ_zx8!5b9r?4qzlrv86WaSVu+5=Ztn`{kZkvv>{o$8j^P5h?Ib`7b zN9~8I=7QfpfZs;MO={m<^$(F#@_r7!L;pTnf6dt7H1hf-?9?ze=!U-av=Q4U!drHs zUcH4nh%(q$7RldrN_4RLOTp2F4};$+?VGBY_Fs#8*Gw8WSp7%9DTgwM{|fl2d4tto z2L5lrPi^ls_`d-!m^4`32fW}T$v-Y=?=tvd;FSG?Xw||Wo*kUN8|Cyiu2&3%!)jdL(o%pDh0 zUyv76uS9(tLjIU1)-hgl^$G5o@fRex9 zqVNujIe>LmP*z?suX6r^g;mvymn^MWcFCo+%U7&ib=l>s>#kUHW&I~V_35>rxvFVh zb4%;`4Q=h$Z0y*yxwC6a_tu_m*M4^Ub=S|mAoyL9rG=hb38NT;SKA zxHyPJV`IjS8y}y52&T@Pn19NoQwvTjJiX|Q$y26In||h5XMdzPG2@(bZOWM+J?~>B zvr5mOJ!kF(X~`FUe9=WN=h4v<%m2jauSYMo){^9upH|4%#PUz;<7;B#{~Mo9DvrddhSi^#t^JeFqOLq;RgjX&rx!IPdzWz7ID9Cj<2!fWGTvdUDAIj*V(up z6~ECd>$!e3V;=x{ltgR-wF|LDg3(V`gTFe#_?{8=7j#{ne|F3axzCH9b~LkX}!!PdeLd5Kyc zBNlSrKBL224fOnN_8<&1Us-qRmUGx%gM)_NyMY%)!uA^2X8>~JD|C7ZJI~7QMa66> z#Kkh+@U;Xy=O^>c-*m#TJqUbXDf2XWmp=OjdAFg@#+fRX@$}pB`J$nBpMG2XQ@BJ; z?X_X8y9~t~+{OmM4Tg`_L`8#O0QCbq_szEqh%T0>Zwh{qgcWBnmhtAYCBQrfj(6YL zF2*6vb9PT{Hcqlw#x4V!(C&G6cORq~#xiyjSlsR@#+``gh7pbgi4@u^zNpFXj4XT` zkf?Lsk+wGyhMnJK_f}6!@o_z2=Xc$2?B={s;UozA9{bk}{n-vx+8g#gcFaNHiqk}n zFXq@m;a)?Z&|tIpag-*Yr_&o+sw`KHZMmMD9j|E7$bCm+u(4>2{$!e{Sg0_1}y)pyhdMg+aQ$>3GF)sW3>_ zD>Gh*Y+kshro;)45kL1TxVXyac@Ee#nB`8Ek6My^<~dvx=iZn2N^hm5&!kj(#dQuq zeJ)fGSG9@q;hHv`mY4ETT>o}n8M(GvTI^f$uYb?t#!#-BLsaISOP}d_K@^|s= zf>WQ_N{s7`4!w)(S)tU&?S)=Kn9j#t`?!2u`?$DkA6HM;J}&Os!PQ55LSG-{bG&D; z+6I}Q8vekM-hIy2VPS)7TOicy;CbTbWsifWd#xbY>)>h=Lc5h^~2T%7-SWs~Abng_T+6(!(_SF8BxZ0MgJmc^=PjoXE=g}yeb$OY!$VbY3yx1p+wV`C6IasDsu_*1d}l`Mfh-OiqmW^1h>K5572YMR^IE7rAdPR00eN{C~M&D%C* znZW3EN&Ds|9DkC|8dbL1g+?tish04g+~KJt%6s6xRkVlR6($FMV$1iF%wxvW_Ov<~ zaj8f5`mn#HJu8`$eRF7vdw`1guW#x=P6Auf;m_^M&0!(@;I=J?=B+*U^V-M%(l!nR zG2hL>54`w#&i1+Hr`$a5H$Ub2HSOHTinPqFFdx_cPyEF8Wtd;Z-1Z~>ere?XyK2(x zQYn_fN6hV`7@6cxh;#cmMzaq-UV80km6f0VV~8M@R06pU%9N{C!t5iMPwg|czb`=k z!{paXI=62mpa0Xq zAWVKQXz7&RhO+a201;v7cS?d2rN>&SNuQn}+k|~N(knl`-jPH8os#}U_2-X47iPaU zv0s_+q5bmlr*hS`D$m%XC3k7x8{&P zDDpME%Jk(o=8%sA5RB9Gluwm>`7GzK{J$jfX*1XP@_&*;e>_hxPVe)ShoAn19Qscc z{re;#^=Fsv>)#11O#emWY(l-iv7zkxa}6S>Q&I`!x>w{kN|^FFKlJ7I=E(mGvLvYX z7dBb#=Y|~lkIOBzrl)+)Lw)&tM=31-Z;AZ1Dp;<*{g>sCp9qo9`K~Yj2h#slcyell z@JSD+u5@}G62CNeMj02ArH)<+>qXOP_yc%|`RR9@WcphreVH5oDH!%)xpY~lz@9RG(>4&`pYJX*U81Z5Cw@S*dP13Xe%*3Cj*Lw9y2=--@_g)Sb za8sonkqvF+r^jBT>TXT5N5lznE8Z>8bv z7`&5J#Ba0>$zG!VF-&ji`E4-LLBIe$8MLjV75k!bL%F`aYpeY{5FY+Hm}O�l`|tb;Fp4U@*5!U{rvSLNO}#DxHk%3H%(~oho+(y_JX5qO zvwyELeaG9Q*)hD=kOAC@yu&oPZ2Sh$xZjc1wL>Nid&aiI@HzQsY@avuGN3v7*!Q%w zM@mQZ7<$xp&n*P*uIa0NIfl~izIzuy7~Y=)|4t5^YqDW{zMg}g>W9(S=D-i+z-Q#Z zIW-UC|1UZ4T{&>T#&HeQEghX>aLv@kwWLVzmc9%%=Gzi3&Q6VvYqd(lu-;R0jZ(JE z5>BoA6L;4ND^09jW0fuT2B{HT_1E=0+L=!ESA3O)%^ETD^)U(8$yMnUzglqWDQaF@?>4ldJPgA6&iYqui~F4GKy z92H#csb%(|;A$Vmb>gJ-T9$eyqS7nQc0|Yg@?JpQSq|>%lMr0_tK6A_D}Tjx&xF#e zTwNnpdc`XpxvoC?9s>2$K8CusIP|WbI!9Bvs!vA_J-Y-~dez7Fd+BGQSSI=8K zKKguSrzcnOJq{l?UuQ`{aE;rYOO`pf+pYtwX#Z#1Z4ccxS#FovPAX;k?XHcMl`JHu7KFW}?538MhIAeR!&G=8 z%2=d%^ZM|mU;XAeR$IYL$}4`&?pj z>yg5fDPN{X#~VeK6-;*C92)D{!QojP5Gz2%`kCYwI|_Twy3(`)&$-_4Q@x;Bx& zRwAh*Z%zI57c8tUUyyYlYyo>W?A;SrFRZRG(I8;d(`L@dw_vDzMybLrAeBZ$_!DI0=@tyDq!4}f( zg-zQEQI4?tfU)}-`x3DGU`bHPxPI6eRny%2)AqXFz_=$r5sd6CU|F59?=LP)jvzmK zMzHoknSXI%FoJy+Mc*wNBV=J-}gio<$Mov9w+U`d-o@>UZS?va_WbUiHSBnnp)8?^rPMb;E^{m zxgYQC{PDhPg8c*FGhuPEdU>R50rSH;L>|bmS$o0mvMrkmt)2&`qU^`QhKqwOZ3(=a zfcjN30+9@X?dus0*@F_Zxj!gx7M z-UQfUU9kIol=l$&2%Zo9s_48F@mh~i*ZZ1LuP|oy-GVE|^u9mE6~les-{Q*mycVP0 zQm01n9D!aeFNRqrEW`M(M;~Jte>v;u0hB-cE7EaouL?Tw-NP$C7=7$@T!*lp`3lw; z`F`VT(De=Inn1bE1s&_F-(OsXK6oYi;uUz$X*u3;svSTdZQgNGJ850iKIp&!Am79bs5d+@@IJ=T z_dXp(A09LBv+{jX_TTTB{+sWH2K$;!KPUAN_Tri_ZTuSaeI2%ZBX)Y}FAzSmdMR{S z0-ikg`x!KkpoloHsN4H%?KnxhVJu6J;a?aVJlcSFclgfE1kkmQ3o7%1_?5+ozgWVjjIBp~{ zUhh5CehdEZFdjno9{lC3Klj@)HC2C5e~a+^J7cUq9*@Q7a|cmQH%I!re}%F?9<8A( z>|OKvNzk!h`zh$~ZZGT}-{+3mxt;|)h4!j;CKBATW(w*c%a-FDo^O=4p>Fd^jCPx_JXt+qOk!bi zEZA}i-V5b;5swE8N52?sc?#p*{x2l=k4y+EcSa{4YQ((f&DfM@iz8DGMQ1GkVEB&v zrhgjz_F{fI9GkN8&FcfayFE1zPU~Is5On1`sRuBpeG_f)HprQEAn|O& zfyALDkntvD+y`t>%9QUOwxh2(QGH#EXDnX@@Aw&Re>E9(Qp-O5o*moGmuWM+n~8Or zBCmf#otYZ?>;*c2wz%{rq`wL2?>{GMo=s`rxhFbhR~Rqq-uSE0%F(=F3&xuIy_1vs z55kV@Gcll6wnfozMy5>s33$@ac~U=klP~a<)OP^1ZFsl-X1rrge%Jl`===oeeh+C7 zHvNX*pJw-M+5PIP7*qYWxOZ$&`90K?@0sUwk$uCM+j5?w?T>Bk5X!~Wr%xtFZbkpa zxe4*t(EivC+4eZ@vacHgKke(5V~#@oRc9TC-REUDqpw4|E;=5a+nzvpT-rhQduUI2 zCqc*dHCL7-UABW!|PdLdz9pfP41imX%wsndOlAE0R>#cxCo)>3TKv zUS_>|6tt{U!za^sqWu39^!Q#$DeEum<%0;*{{XH77!xL-9u@xq>N<3WzE|vvPS~|# z#**sWFpr7jJ?W+B&kx1&N*`J>YuD|-`R?@nsKD5I6vclypMh|<=i-F%@Ui-m@DCWg6%t^;!emmC8Z+X@U$M5$r_jwn3an7lGBi_WE zo9jF5VSkY2%kW2n(s`QSl5_!N-dAB zD?0f3*p)xe3%Vza-8p?H+D;zoZ`Y>C z8P7g>VAi1rW~}<)EsV<-qx>-V)ZY|2<4_XU?_$hl%E~umXRbuwn78qUV9mvmi5usf zY>No={U!2!D0;@B70CNd$n&}xD?a!o@;nMGK;35EpM|YaNGEKooQr7Rg>}v%w%Mm~ z&P)1C8Q243K|jtd;5<#+9Ov|Q-^Vi4jT+RErMP!mf;z+dmcKRYad)BLpZ2-rSCX+j z%x`&)#V&own3^TSUk0knlHZxb5JdtT1#~h{?`rQB2f?ZM3fqA(TWy^k#>3F~B@}n-n z+oP4F<5=}K$7#!)Pq_8HII#6Seik0lqQ0|D^+N~PFje0ZsPDw%H^#0kjtAWV>N~@u zu_)FD$DzHAA2_xnvOA9ZID7U=q?Gpmyuy9ExE*B!=~n@pe6=I4IiKk2=x_ z+tAM1=g>chaR*m3{~BJ3x_+)5qlf5^6|ryF(~CCQh_tT)Yr;H<81r@;+T0A*58P`H z2US?FvU`vykLzBv5uSgePMp4P2K=vrALkKAR$q$y=}QKXC(Z|o?qk`ZJ)&$z$m?Ka z>O#uEU(Wl<#ojyz>mWsx*Ml`am%r_|()YyunCsDQ@$FbAg}e&4-V-$FW}B20PpVn=p*OoOa|GuWcP??69um-r)-5s}A{FjdHqtV06bAv+fa} zmE_u;u^HkYIQ%2Az$9lhDFG498|8D;sW^2Iud^_2a<_7qq- zCJuvW(PuvxUD&qS+9QGUO;{g&{(4>y)7R$(^Lfvt{FjhNaCE_YDB~w>`K0BV{>h%7 z)yVn}UA6w#Al>kJSjRd$C|~;CX#FtHW5T`8UXMpcnc&$3o~xx~Gw-f$z6`dpmDp3L zx(>q*%5P}L;3Det%8mnzhNs}!3-qIILw^`~c=-Gv)kasM-9Ngc;qlvG_dCWMP1%)W z>K%tYJ3IM}GydPac*xgs@O8ylUkZK8BflD@zI#;XuzB?Ts0Yo^rwH}51=p!Tc?FJi z85pP;FmCyZHJ@xA*z)DC*r5J?!=6hucHo_Pct*7}vKwRUmI+m;lNfW^-q`=$UySp~ zBHRC*{bOov80*3ls)CU=)ZIAR+g`g~Wy?7Rn_@2|bvAiISj!mqa9f5j2jRHJzU9~r z%OE>BqGuiTgI}~IIkL{QiO4?bE6lk%yytlD(-HIy_WOU-hx7gTCOqFjyEk(qtgD%G zy)dRgf7)-$M3k5I&w4*VIbVAqg1TbsVlU<_K1~vN+VdUK6q&ioAfI=^zVDzt?Zi06 zJkXE+4()phbX$zJZNDL?bO%9q6y-r(_cCwoHg8=2bMrR3BS8NbF=v5MZlnv(=Wu-m z=XM3Q?DxEa^PkMQP&2v3F(usJ-I&FUH8P=i+pPlHkW>0^=d;qc?ET) z5p5-U9mY_3Rv6aL=j17RhVtBYBA%JwYqWD@j^#Kjum<<#(Ky>E+s_`ZEpqNbKkLT% z=yBX`PO-Hhtd-K8WYO+%%?Tabz{h6Lp{Z zXx$2&=b&ahgI!ryIA*e*@mVW%OJGm3j-#5EVT>#6=l7uAAs^I*b@Br(+z7@TreQfVUjcZr zpYqEW_ah^}LA&PlM0q)YzWE321MtjzXZo4>X?%`P-nPEjGdfl80OysZbVnJKfR6O~ zyqx!_JaZ6ZPUthL#h`~?cy^J!zIOy^*+=5c!P15C^gaMrW;%68G}uiTt3ReeAXCY&~vV5R42J1&{vOB+jRcOL?#M%X5O=8!rrS zlxWbm5oZ&wy1C);`>L_8Aup)^66R)`an|F*6DIBIj}*VyaY=Gy)r8=&RT0!R)V+>N zf{{y*uZ|VTk=x@IXPxX=5uiT>etB{P_n?N};Fkv@*e_Squ_if^@8WBMkxJsI!>dql z$=}eU9`pHH2kQUrV=dlsRWQQmjUB(A9C-_S08+aAelT(_@pZ|O*@Abh3r6@ZLC1Qe zk4gIV!N@dX*C0L45@q_1Yl0Cpf})PikgwS0V1&==I=Yi158?Tzq3aGt*j_r&XXh(+ zZ7_mol0_YuTX*2OoT0lu7+JA6*!?i-+41UQQv&r3<$5!o`DpuUo6d7ni}%HG@80$W z^So|L+ZTfU9azKE{-F%=j>nh%Bl$+amo_OqCAgx2>sh!5!LzLS?XV};g!%k_G45k} z&>nkGueC2$IYU@8r2h=?pkBjhFBv+4pVA&rAL=p#&*3$X%wO2LEoGEo9qK9A?LRE< zEc<+Hb1*KyaOy|Soi%q})kRA#4UX6Dkq7g9QO61xxo=N2*v)nqRB~M9^IzNNbI%U* z%={~^{XhAfe4miMcjFi-eZ`)(DCYcV!|3zshfp?@WiWi3dCWAdVFmYH)rR?uj_>TZ z0y%@A`?{_kd4=9V%sc)Kt=mIRC|t*L3Ed+J*KJ!r%W%W-01mh8vkkLSuIC{G8EI2; zH@04fQxFZ?rOWGTm#r};H*k|GVjAoLi9r{(YPN6Q;8QjCbaw>ZO`BUl8njX*pSFH*$qdCpdCYbXHdzb``nz-nqM0w)I8|^`m z;qg@`h%aAY_OIgT1Qy2$OQj?9ph;7zPNvp(cW&a2+0O3vp0-W@eP0O90o=R8Ex_c9)? zia)h-Zl95}HYJ8S?qxij?g>xA{{#WJXSi9lX3}$!wfSe)`G*YNTX;`VUaV(qelgd-}Q5R0i=;HQb-odC9jPZ1p z_`6!LRlH`{FfaOGDt9##qqn32K^;i6NZNeb8_rFe5R7$| zt_FXVf|c3wX+*WlKHIYB-pTh&&5Pwn^NSmudiPJ}G)`-S8->p*!x`sj;;MVF7uh<~ z8-Za{2U+H^?EzwKB%f%V6SQ^iIpJAHo|$#7Emg~ECf20~TFdbYO{$3EQhJdw!Ig2&#YMW~&7XuibC?9ij<9-{v zFN9=*x<&Lf?>LFK5iwNg6HNnMmIv7AT*m@b#Kj+1cqK)}|6#2dE=|b$VU{Xa)-5tZ1?%--BN^;L~zc+#J6udo}6#*dZUD>nQ0V5{Ng}oDd2sd4sZ$+k4 zhMhZm(9lbU(xk>0cJAzQLyt^^xUh3%&olHU6B#M~6!kLdyme{DbfF0Q#;rX^0ju@C zGkiXkLQTCvXdbc@4L*~?wSG3liC>k%wO$Yi`&RBROjdDs8{)#wqy0NW&zhI*!p@g{ z$j}#N69Wl5U-rv}z9SqmrUCK&41Gn^ zIk8g5Hb%#S=~?to89v##rPoqQCtGUhvvEt06${TL41G3k=@T9`_U9UVX5*IroGkhw zL!XUXdiD;P?rB4xjgu-CoR>+A&^HZzHg4&)7fL6))zD|-mcBGiD8AE7eaOZw{p>7y z?6ZK&#w|TooIGdGE6K(!eVIoc1Q!|p*|??06Ee?nVLSVcG)oi<()C%By>IN3jWZrw zKb0(X{i&hP#x4DV6rFnh%Ft)ymfqauD5<&j8~SYA(qqNXbN2k1Y~0c>@~H71nJM3F z+|u)vh)nkrW6x}yRI%XVOk#w-Yv{9aOP|c5UufvFaZA4>i@wOvXXBQBX%_w4#-7=@ zrC*js|AL{<#x4D&S@hpC^x3$jU!FyOm!Z$bE&a+Y`p+5qY~0dcmPJ3-ly5d}=~rjb zKX2@rjaz!`KJwfnhCUm&^jwraZ7)77X4=peKv0Ce?N;J z`>o-!aZBIGONRS_p>NE^9|mdqEio^dBC-5Fm?T0H1lkf7bNE2 zF;6HA()q0wJP+jxldNMlL2h;&h~04Eu-ixzF%1g=11^ zPkjgSTWH?WwT#XZeqYF;=VHuD3!Rgy&3!h~T#E^3nB1S{;Ijq#htdBz?rXyED|7H~ z%R%1&ox=DO!eoU(dR*v}{N9v9AM6DNeNw2>Yjp>6=(8e+J_&FL)8`Lz(6{B_Uz@|8 zJP)$akiH*igB5&O$; zI)~xsnR+`tMXEHzKnhbUR=8(Ie(1&<`t-cltkVIHz;1;>f+WT%pT9Hp^Bje7Pioy8 z2A`RQpJ(iLUJ6(H+z6!5+*RACe4+S^X)mQIdTlR@4WIOUQu*9v_@w8J%4fUbQ%P&(*?@XAE5{eqOZPh=10>?-oDL4BF!0{o?1@MlQZraPryi(6hg# zBYvIrn%{)@c~+OJ56oknFIW2sU#|AR;IvHU+>UQg&uT1eVO3CKKiW7*GKzN-=2E*6Y*Xn z$^IO4)@{4^xSK;gC=Qo z_`B`2MR288`(WRMacXD9yBxW$-Fh9|)#nzEzv{EoB#4H>ovb)#@GOHw_cSv_?H~|GQrgj?MO#gDY)7}ahyYA zoYLD6o@I=Au5rB~AW z`O>qnBWi5RcL; zULqb}pIX6L-!7EA@KP^+(tpjt`yJfX|3Sfh{r3v4`baQ%$fMUgx<@>E#UB^k*I(-i zakn07ITCmE^vhB8@yk(homXqVR39y0&6nbF$fNW1)bjH6(ehIMHZ{)J7e2~gaVx1%Fxw^jP>!ba*(yQG19Qs`C$ko1xGPXPT9V!&p+Z}w7 zgCBNqSAU()t3I0KsL=cRe<--ptNwVXZJg38?%o%;`n&UUSD!lJqx@AL{ho>PS6t`w zO0RNtKCkqO>%84B-{(ZG->%;hob>K^8jo2Gh`as3S_gOO{dsJYWWb-tD&8f0G+&xu zo!@G{6xY3S)JMl4#>Itz`TDvN!bal@)xqy9$BSVxr0KW^oqOvr>oD)LhtJ{B)IaI zAYQk$PWdZ7EFPs-xjOzTz2e$G`}P?FyU_XiXn(8xEfwm6&?|q%b^KL&m8;{g(kt%v z+pc}IzokB3R_3@q+knJDOO(pqxcxFKT$okU-I=YaN4`8f5PMQF%dA+ zldE`%N3Z(K_UIL_6rB0hw!^p*A@J=mTW~EG38v=TnlHsGJ$k*@trA@66;BFIxvm}R z9NcYp^@98QtQB1OOEC3hQ|VQ1qeriJo8Z1aH#)dmuO4!6w;wy~;I97Kj#M8Z3yzA% z*WaJ#sGj~jM{#X;zWzF2^~+b=k*|-=e|&v({-g9NSLZ)UuXvf$?%eWiad6i@ZGtO* zwNHoO%3tv=k6z{Wc=U?jD7bH*K?isB(SF0%=b*=5_4&TwO0ROC^XL_S$&u^Yr^9Kd zu0CBk+Ivrq_P*VtSGhNO^or|xpl=_27eMpXBpKHAJuMf-@Al-XefmAQitiPia@~F@ zE(9k#uTXwIy^Fi^kTDMb-AaV3E7x5gnCj5G_xu6CsDf_l33)^8V(8ps`@;9EnAKSIQ9L2I(rdnEdi09xdNuWN>%Weh#B~nLG_{hD_&1dauB*ha za&_HX$5Yi)aUD;|$6d$1ItQOd!F@g*f|Jkx6hAN99el5YYhFk{;NVI_Txl5nlF+bS z_llpF|Eh5|WmCwb)BGwP7o2*!_01h;-TIa=TEM6p;ENpGov$_u&ho8s z=v%~3JzZRF=+_6WW126m4|fY6zZ@TOaJOAQBDnIGpn2Jse&w(D0(&ry9!q}+Wy%LMoJtPx!EJ4eE`9v{W)9X@V5(tcj~;LI}P z+B`mrZ+H0onb?Y#Ucr^mki^~M@lpIik6!J&*P~bbalvT^tuqwyjK}9!BKM%jNAZ_E z`VpbmeqQabxZBUWa&^6k`aCQ=c=7MEh9%Cw&r-b185i7gNeZs^)OuDUxaz66t}pra zX>s_w{h>eKJ6G)D&-WDXb@;e?KIq`C9i9+e^`9^N2L)IC75~0R9~JuNJbJ~41o!i+ z>s>0hQ1~47_$ZFez{Zh}Tb~OY+_jsIzod8j0Udu;t`vLfIkM(gaUGYHUi$%kFGuMW zuX6OcMVa8bO8m-4`!#=DR$RwlKffKqhq#+x9WRu>_UB2VS3MQ4b@<#WeqPo(__rLq zQT)nZ+eM4u%3pC;PnZ9VLQnl&{%1M3J3b~H+#MfX+@+uSe~8|d>*`bD=<{9i^Wx6) zZ+CF5546ws99-?@&wmPpM$1K$6p2U6Me&4q$X|I9TIAsS#m|ddPu%CKetp&?s=qJy zY9XLpof8tOa&VWwE7zTe-{R1_?Rux+z8%!IzCL{({UYc^x5r*m^A^SL7M%L44ul?Z za95v41o!oMRB&G(e_o_=pYZ4vf5wsP>hpqwyYr&g9o)6^5eIkeoGkVU+l_+za&_L~%hh>{(yM)T3Lm9cyw8#A+AS_RD<925zIc?6 z;#0*#{cltdSC`K^2Y30nxZ8d=IP^v0r(73Txzw}Wp+C!^ck!8mv)^#{$tdpUx5VM& z?nA2-+|O^V;N;UOeqL6IpZdFaqu}K8*W%|zZAkn{2fthVZss;em@l4FW*4sAxi&I36GJh(kq@XIOV$aD&gR6d(`94gao8MIqy{mtn;Hr-% z(fOq6qqzUPQuWkz52aV!oqxLeyYt3DWsd7Zj-Ce`{3Qo>^YyZWyZO@jp`WkUgdONSAJ~Q*J}V*?Prv~Mrl9e>oZdbXou}ejO%O%f6BpY#80^{{r{i)y=NT# zwO?g^|Hi?!-y{CF4zB&G|Lt4t_lS>i=&u$(@o^4*i-W7J2tDNBdE)0~Q2gX`iuidM zgD@R&%?ra-4nCQHxK$3WV+W%e9elbH<9erq<6Q8Rd&|KSDHI-QU)1Lu2VdmiGaX#- zXGwpagWuxNYgsT_pD&QU)S=h@hq%^NMh`lC<~sB*ICzul zP0}w=Vq9lRJ0)J_;Cequ{6Yusb?6s4_#OxUgoD4};7JG1m&!-}OB`JH*%H6R!SVe@ zm7RC7fSq7 z4t~U;U+drrX>6pw%E9p+KjVmN+a$pEF6oH7Z}0Xwc%z}PKMy+iItL$eaCe?|#KGP9 z7|z5rj&e6Td@3D$lY`efxI2%M??{`EUWc9gx2bhgbJumpq2fV=JhU+A+`6@+p{u*| z+V&P45-8v6&II`dZ|_6Za*E&b&FwurkI{>j!~Jr^E;Z*7YUG;5m)Agk`?U@0uIp*t z8p2Ivr4C^X7nUp9N(+m1juAB9ChulQO5FX-{~)yufFoiRSk8E*DSuQp`)|8 zsi(D}xpVW@p1{Ek(7mm>r(qjEX70rBxJVD;2g3GrEBIXFlhHYIoF0G%V z`TFkGRvX>ixoJ}?d8Fx_qcdr4Kgua4KPp{D0jd%-<)3f7#v2_|;2RG+e&;vSs{i zx|`dy9e9vrgZ-?#JwdXexv9BLOxLs-2U#*-EuH4T$_7+Ae*L|xsk>=Yb_|3_jF(+G z023*D%-7_}=D3vLbdr=y>(`p^(JQ;Ks=|WI74ODnmXUL6XG(G9l9Mu}_;D$HDzCFZ zi|c7v-_f*Tt9yJXH5Cxm9x64oc6WDnyCgIQ$jan&Q8&uK+M^t&-n4A%GPP!NdrQUE z%`Ra^{mwYxb8dHMOH)tN+~ZN?YR2XOR%PJX!Nig2=B7>Pgir~aIyy{!#F?zE-R;c^ zIn~Y4p`HC;>TFe&aU6mS9o-JjH3M~&Hfs7WKhEjeg1MVJds^pSdif{kZ0*5uuvw(( z=E~wk$FHZ=dWK-pA3qlTk{oo){Hb}?xAru*<&bLQ*n?7bOY6FA8^U{t&gLEvZ0+gh z@wv7yG$T>_RyL}hc9h9=4V~Avc6T&&bs3tRt%H*EAYRMKDGl_f-L31rp-;f95kT+| zJEhOZ^)oIdDkm6wbw(mHPr!9(oMO*rVAL=JsKl+VTXs1|qvnp*rp;ShMU&RHhV|$; zTWuaw2jsHJmN%?#??$U{Pt-Tv2@EoFSS1XG{=S<9u z!?Zrb;k)AjF}WQ`#U)d|Opn}FrNGbPKJ<9$Ur13}kDtC9>4_yhx{@Up=o6gxF3hK{ zP3T&|;{d|s7ZHS;X)mc?Up_wa6Dt34k*{(npSO0t{I!r1CSTV({Bri?Ux~zF`F~F2 z*NWzp&s!~D{?`G7$=7`s?!7))`SS6huTc3@my#OmFy_~;@uR9`$={7dp)mRV1mSdj z%7(J#-;VTQ`QI+`UHh{t`}zMo3MEYb6C&R|ACx-y`M(b7!{qmg{DU+)9PQ6_E?@pV zB0owZ$Ms4&zg>x1DaubFVVM3qC4EbZ(t3RTuR!`R{nxIv^jiO@e*yk{{l5b&O#WLU zU+FEkZ2LWoh%os(MZQ~pJeNTEDgF-Rgvmc5@~N}y{QUn4bYb%QL-Nn{NMHU}bI2bf zgt|VdI{5PYa>##9&W5t>|HB;eld|Zg?{`x^ZSKoY z!1!VIe=grjJdypm9vx=?mt+ymt$$p{_2s_`EKL58$glDmmT&)`A$^$q_?1@wzL>o- z|Llu=`S|8osQjs?+H|^(YeU)g{}2&j^6!*ILD&8~Wy_cUn;iYuGpAXJC$j&0Ir^`% z|6$X+_D_V!e>#W!7eu~qZ$JFkIpjBrd~N5n|2ZM@f1X4BOD8G+r#a+r50O7JM1BJG zE3E##Eb_IykkmLo|7RjSv80Vo{q}{(KM%3WPwm2KTA2LTMZPqH6klKd7Q}?f-y0&o zBt$+xm>eemu*g5r_3C) z`7_DHaen>#&iL^3jgnsXAu0<${liEfX1|2!Ux4zZqyF>o=j;DtC?BSO-x*Am-sfRM z+4bkV9Ql7)((AsQTZeVG1b^3X>24^#gI`1AEY72{Kw{!^z|iFGPiuD<>9kUmWQ z(FU8q?fXpU)S4`PCv{ikYOwJg)d}Im)l=Oq=jT?YB8c z`r9S_6Cz(PzW%?Tqx{#dw{<)ix#mH&{)@Ao<^Up}M5 z{;fvXmw(mxaQUkeOnu_@mrp=}F#EM7O!8Fwv!U$zTaCnF`roKbWuyd(b{y=gWT{ z0I{S?1pm$s3k*tn%I7ViFaM~>mtwYw@LM_4dgV4Wg;Q78&B;;zHIiPsp;Qv;>blQB zp|JcnN_wB(57#3-v82ls{@N}Jxbx4e0A=ML!o%dZi2PcQuP^@{Bo33`DDvI@2AaMN?Zb7Nf5oN)2(#ZKVn28NhEqaKul2eUIzHJn0M2%RhL8~X^TYgMov0p<@2}A zQ7~!XWH14g34X(v-?Ux4xuv_ay(LjnUN(PzMOj7F?8Nz98#?j3uCt>DmyR9;=4`@e zOlK$7HEnHeNpx;bbXQg_Tv)lVWmclOqiOSo1Ri^DZ3kYyaBkV$ibP3UPfyp@3op0; z8@b4R?uO3J4IQmpJGXT=x6Z|8pbL6BJ3E@&n%XyC(9v=2ra9P=aZPJ;PokxIeO2}P z%9ip43l_|4nO|03(K^4mth%y#{`z_A=9RTJx6W&+n75!}mdOf!3dG}no0OQAk=k78 z{VT`S-{#wDTMYwmU;wt+;H*uVuH6JVQ^<6a5iB%MwJffBYM;$Lcuvs;cE>?L+u4m& z=25uWfPn2U*yz>N(!i(Fc7MXw99u3@Pu|T_(yQH-jh~)f2-EwPsFegK>f@M>>3!!k z-Ha%omiHaRGU@`taUm?pNS*Fu6i&hu*2ldh>D_ih8>>AOZvy7a29$btYA*wDWEYkm zecXZtw$n1dC+y>@7FJXl%HN`o`?yiT{3PXfAv79&I`YF~H;f&4XI?OJY-wcozr@Dv z`$cT*zBgiH_Prj9?UQeamkx~&MuyG}cE5t}rsIq9BVe&-cuI1F-z9G|-))cYBgSu$ zAG={0_$5ccdpG;f(WNoS7(eh~XMEs;4HE{AHslSw_vwiPM^@(#90Sb}@EE~&$Acg_ za{rFvqmWVher)`{524FZ=<*J9c^A5T5Q~;l#&1C18@1m)zbP8Ljq>P2S?_)_R(y0q zcnQ0z?DVwy>pEDS0ipV7N!D!y%xX>1X7 z!e1Z$cB3BjEy0y}AifuLgBVBRppBdzTru$k^i2s%e>3Pazg52qHd_hXt$+=e!>_|)Wn)b&c=#@~xr8}Ef}hd)2%O4xe-gX3=+pnZ*9&s;n} z8@~}d%h(rZuN~K>_d`#$Gi@7zzOPA{_Qx8ILXVLka`B6-57c$m_~44-NYGss`TF$H zXt0Ge{dvg`8s8nQPrf_)*pGtXF{|^GQnmTJs6Wgb{zA)@wq*R1PW^igX~smpdKc^D zIMhQ|$5&!gk-sUXPEh{sqoY&aM12}X8QlT@=#Hpqha+f*M;peYtm9}O69(8O-$6S# zf_CsO+QEBh2k*zCXcv*v5z#T-HmB`-6>?sSO+nk8j5d4*+H%ppe?gl(QJX!odO2j) zqJCY9dbMm|gza}n)YPqGH#|9TES9d*jcD)3Za9FV4vG@6KmBay$8PxRfp;dN9|0}< z1=>g3K|j*G0zKYAy*zfqQ>nBXw(0*0Iz*7~sFC+hELM61ZJuR;@7tj5p0V#7$Rl62 z@4-m$82$JQEhE;A#nXG&Xqo0i-}lgek!EqQzbHi`g?LeH4d^9cGb+h@f}--EuIck0dl5VDL6oPGW1WB8-)#Bn}U zCFS&v3+AJ)m^yFii=bOE`kP{-M}W44v7>JW`W4`%N0FZC*uS9<6B$f11!<<5xPGLu zyr!72rXKr*`%DtO5Dv9*QzEp#g58$FMoVBT+U^-+ zJGAS*tU7!s}Vue$?v>Yco?%Ux7Tz|7~m4rt8=FH1wMAAO(k79HbVpX#LMQg&mtbyS`|sKyxxYA)*mysd_?Gl1 z2Zl_472lT(ieI$-?h^y=qu+M>H1xejZ}e@Li`jA~f0ifCwUF`B&ZBIf!FiRozoLyp zQ|_CteZc#s&$oR5>(slD<@E8eQ53QwrR2{)%+E^EH=}-7yT5DFKW)Ygw=XdLKtXb( z7y2|xUxw$ZBW}A#AMu!uUkTJ#wIRo>q_tTQZE&)5$8N~B74?4yHm%K1?q|Dr5@n6K zP9?^VeG?*$SN!s06Dlr_N%B4p*6e!$|df({t^ES96ihB+3DjLv61!prh62S!kqM;oH3b1}4o zF=jk`H)iMTM^T3`9-@3Bn6m`?UNiis8hxlsKf=?3sn6n`sAvQ-?AU9^FV1cHB_9E7 zfcX>Jvz>qU!nW}nr(9W!dE{Q$a{}ynG3@ztG^n4jcIuT=VbAT+pz_DaBYCJjsY5@; zj6c0=DcS(XAkG0eUpgIau?TsrK|YpZ%vyqcah~!wrq0=UKz5vMJDK&FWybdPj^vy9 zG@K){&s14RdSG39Rjxpv_PpI|rGONRA}X zcFpT8_Kl47P1`!~zC?FtS1Vq#zzZ;Z8Et)g*H-g$(RHm`gE=P1MGbDt-_X&yuF1SN zs41{260~o|yD|-y#=bRUU;S8&m96gfp0-Vik8VvgH*LndDv5QiiS?b^Hn#*H-8wsw zCMW^Lg^7>0%$l93OR19pIxASTd0R)vCsJDDjS#Gq;dK&UdHWh!7TmC@wR;2C82>}= z|H8Gr5*S3+B3fvinn_)&^3P6uWz4=bs^}meHhvGw(dtOnNSI zb^h6nUy1G+^VM-*i{FuVXa3hG-Bs|7!n=#^oqW&Kyx7c0elcjk;e{W)_~Vy;^3#8M z`JaDQgNer?@ZexecQ=1(CiO?w=AT`c!K>ij!h4FME&0WWOYtzelp)D;Ob5q2Abmki z{@DfhM(-Juw<^E5pk`7)Nyvcpf}|3E`VM^(exym%rt+G%HorJgYw~K6i63N?rF&H# zwCT!VqcTYBdt9Y!CPv%b zuvz=9L`Omww-=MITEWiB$@fv0PtC;bZqVBEcH!|5`PNM8i@-Qp1_i1Xr7Z>}O@e9Q zSe`Ek)hJ|?nsN&eJKO4}yR(ripA%mlRgBB5tp0KHRh($$7^ zdS-{IleOtOnW~bYA>Hl5?|5{~-=jj8Z*84fhiv{{_w%<3>E4obroPuqs;dueT6xjO z^NZ{1wc7neT1*CF&sflJgY|%Sw!NbDuEB~x(lLgF>3U;BIexJS{M$Su7&gzHB!dpi zZvl$phCrR3%fN8V!8P8#e~_kE+|qjww*Y?6K-svZ$6cW3zG+CaaZ8U*&~w}`A2{E$ zcB5k%CxO_QTMYdvE}8MO&xi);r`x9g5vrJjYr?IDPnuqFUSq*&ZqWGG8TxG8(&J9u zbDuW!*|??0otNiU8TxG8(#z&KC(WydJ{!06(;Q0ceag^hWEL)S|?=e%a7xI044Sj2eB;OOYv`D-54B zo+2=Olq!vW(eO#*rtd`bC5BHLPp6rt& zQ4aids2E1i{qSM%gZlFh+$>=F0{P=ih1UoE~?y#!t(U zuida`p)>9zDFp7jIqdu`#1%T@(SwHCKBEk?!)J5k_r)A`o0>!Jsc4U3{C}MzU%$@5 zXMPSo_vg@aWe)y-1pN!0@iAZQaEY;Jdc3OXbXPoK~`X7S6Fi1!!2$JIC`?q1` z^)bYU;rnxxOMecWbLcQWH97SEOb)y;2mW%7^6JQuuPVtm-`hjcrQ9k9Uz|eI?@y3^ ziG#0o=$ATpqxeq;{e=$RB7UCl=i++=Cx5Mjgud_K%f!#ikoZY|iTHVWUHrb>VZnX5 zZ+Y}ww4ys~FXnt*>Z$lq!72Ar@$*uEFrBYYk>I{QQw8_+(RQHpDmUTLD_-Krb@f@~ z;I&pY^LwM<`uT+5 zs=p=~6kPRJ{27m4^L5apSNu7_X=gXTFFCljampC-_&*|oU-$U`ztp`Am{rwvK7Q_8 zKJMU%IF5=2ovUI36U70BFN5(SgBcVB5e*vR%rG-Dqr))3U@+P`5q}A-CWT5;o0w!Y zwq>ZcJPB!`v6WQY+QzopT4P$%3`!D`*w$2{jKT1K-@Vtmcinx?fk{7}|I_`s`wm*1PsK^_z++NJRM% z=YsY%Jw5QF#H=N&XX;#^^cZ|@;R?vgZiBKhZV%x+OyK& zy%Hz?CWEV;>IY4_TO#TQ#kWd?a&A@-=f@0gyFCTq=M*G`HC+SoN}z+Rv6rtcctJeU+r8axXM>NCyF=@T(3%Tu8}zP+IE{4 zT;=QM$%3nV#dUn3oEG8mG*RLz=R)~BNzN)q@qED7Z^)ru#p{J1+OKVi_zL0h)FN@> zt0m4;x4~`uywBhhB+k=riHH8Q{m9nWFWZmyi+uIlcjWUka#p`7{+!?}mu;W6e_4Bm zgs<}DWAVOG(4+eb2 zwH=0j&~cu)^}`a8L)_k9wHUpaYf%hZ@3hn6w%*qi*`>ACDc{~FXg$&oR!+a<4dvVV zweoiepYj(Ny^{@Y@9U-*+c6Km#0pNhw`nTdklZ4;oEXOY4CN1|DwUQ?-M#?@bwbs$@<^QS!wuI zjMJJe_i^&=IHupPiJxcW*md|XFnA&BKag+R3EmlSfw(URwP&Hs=aU zvSQ(6uEMOZwUv|O)26WGsar9d^SqK496!!XvEnOp?q#_$d;JpM$m>g-kcR1GWog9) z!^3q)k8iS18Hnwf(>P79lMd)dPUyU0x?%Fyx=-RdT#09l+!s^WBWu{YR^lVz& zoPvvSZeeY-60Eg4ZQ7D%zoh-NlsSFV*0!w;3stsucDyObqT0sqw$(~%JezMpw{~yZ z*y$GK4p+K%Iodnguu$*@SyA4RL+cWnp6A6?#ul?qaYCq~d@=0u1+SeJnPG{=x4W)Iv88V$RAZ}ZwNuD#CHu2qEJs=;=Ljo2gr)mOGsa_=TI6f{{WcUO-eL9ESe zUWVd^3^&YpRg!a450*&2U2fxpV8}8^hF6#uG;+wY4 zChhrX=Q9{DdW#cO@07`(>OqgW^`>os{16*klG+$v9Gr~dvQjzvX`kEgp;T~5xwWgi z4{dW@Pc!G&w)WvI?q;lAU1qjZEm*uE^sJL+(9v$|k8dN}W}uUIH)4rz4B~!37oo+b zhsD%2!4#}yw6AC^kiHfxt+U6K7R`?PYGf=7x;jjmCAM8JOL#rnX(<~4vEsiiHf=>I zTDbtUS$x|pwQUyGE-j|LnTu)T)$4Ep?bveJ<%?rONo=|56D>~tKfV+-*Wr>|4}YT} z$IUZ+g@RrHV zp59N-Mmo!x6Q15v4yNdTOn7#lAE8kHV=4OkMgKC%K>fTw5B2jmx1{nvOJflp_NU@8 z)V~NR#0o`*k34^YKkN4c>StAk`nyuf-!6)#crnFesJ}g>{1YepEY|=0z7gub9}Op| z{JL*cp{UtMLj9jaeqtf7N%Y(D^LtIGe-K!b{^vx|V@S6_;3C9yVud2&BiknX^BaQG z|NQi+{MPtxBjU*_!mN{R~g4Cja!cj*x7 z-;$z#?i8O#`x(oBD*i+Lg_Qa~DEb>qs$DG9|ACbHUncrnBtP|Y)=a4XW5AO9KSjnp zoi8I|V*ckdi6sB;7X1a||I-un*QNNM>oYN^z5Y|Y{x3}N{~L8ahxPxNMxNqtrRZNJ ziYL)ICWQX~X^Q@weCf62KMQiSJgT3AGF3=*7d35`hZFi-NE1T+KZk#l{NHr3&+)Qk zWc_nCQmFrj=x0g#Cy(EFt+7RZSf&5AK=jGu*i)5z#oUI$$ z|1Fe1N&jxqUy%HI3ibbGivRjWf0JaS{yhFe{r?1kN&2}y6@!ld{!_gDK9BrK<$qT6 zYdfL-^YI_*Pg@5yFAuS%sA4&XLH{rWCY8Twg!&I7KW!@D--Zd7 z_)k{Hr$n>zaaXz37O@mFGKwwP0@e1TsU-Iv+4}>uT0VZ ze1iVE1pQx4>A(H*u(D4T%Q@8l1o9Ir1iTh;e3RfT|3&x@%m242`VWhK<*WEm|KG~^ zF+&M*J}UX&3UIbH20cHB{>wOq(Xw!4y#F}23@zEO@Mn-esr);o{5yrn@)OeXXuteB zVAL;k#C)jd%?83ge<~i;ZasfM#{VKgB0rM+A+GrpUnu@ZG0MUllAry<2DM+Y52n=r zGImgId$~&k@CY%4E{pXVzA<<-;eG65*$FSGthckHuzm>F zRLNj%l?d;rd)X}$3-6qf+46bF!FoQ?p4wxltUq)Q);Rjw*0cS4(p;mW2JcCqj&*D% z7S}lGuQ)R2!+4h&Yv17gbgogrcdBb)pXYJ?8OkhVj?B?@Mf`dJ(e_NgFF%@2O-JMr(Fe|cThS%8YAc!*|e}U#%_dJFvz3 zhrVbT$F%{(S7ZIV`ui)Rh8OX(yT@yGRbbr?a*}2Q<1?bUDD(EqGr8L{$BwNy3V$5RR@Qwa6V1ZCcMbD;thSCaz7R#T&^2o2 zXL47618wC;PG;rpg$&l^lK2p&Rh^O8l^erQD#W~9W~ zU3XaW;v0+H|GO`uPk>_>?0S-u@ma@ecP%vUa^sEU;``goTfjeq@`nro-PNM{=i z!vg@S&9D91Ugsc#eV0q|KXv?)-(0%|_F?=d$-fG6lJGNA@ZU?3b8ia&Pg8IXcJ^H{ z*GGUIOp*VK6dVIyqWu@7;OkTDnU%tSB8C4*3a-B7Tq@hTSY8IsrLwrrU*Oyp<&Zap z2ZT@#zn3ta5yVfN(r!Af9(If6(!r_<07`XYs_(H~1cj z6K5OK@T^2ad?*D!Z1Bkv=V>D3GK6~d*<>gm_b)}hmE*@xFUR_!%8lC|ztCrO$B72F zel7^k_FzZ3M#0%0EUt5Qls`>$EDQLG+jo5^=VIZn4ETz-2u?rn8Hon9nR9T2;*zv| z61P{Ym6DM-zSb2(x4}!JXcX- z-gWDpBK!E7S!8DE>fxLNZ%s69^~R0Ud_fhWG2WXa+q>FsPR+dHWcT|#RJt>N3r49D zen!Smz1ViSeVW@|+5PhCe)x5}BKtj%-S5XJTDY}veX&XXw<3R!_KEKXvG9;wM7Xz| z4WO5WTkwfk_{_af#wvXnRf@V;7mmlvKR4iq`P-3BtPt>aO6S@vIDfBUIdk%PqMSd8 zbCQ0|r#zuMT^i^46ZlWkpC9L0T20i?@gdYd9mG>v;4A(rpO!e-(*I`a4Dce#uPztddYa?|75+KSU5g@7w&Rc=;(aN&gfX zMD;pF{e(jOw?GfEun*w7w+qYssdx;_KNkIirpBJRO8%RQIekQmnRhcfM9LC#=kx2--zXgC;(9NR>l0U3}^`DCTO=M2;e_qB9?ML)~(r>ok zM*dK@lPv?vPVpmcqzu)s?fR0r_0#=2@%~BXiJo~jOrKrvIU|4OS>VD45(@5Ih&~Ii z$uqDTzxMmM!JmDEYkp$AcdRMR=Z+YahVcw?*CSXfGl%sIx4QLpx!x<*6vbMIc-~fr zy-TJasB(`6c0lwt{1?}T)ioXWV;$VqlS^wn&%|@YHMpJ6!eyZY$ zLm%*KzYbvS&mp8y*J-f7z|Zf)bHQLOU8c8SEzCnmbL&igB|E73R5tKo@(Os)rfEZb z28lcaZM4nn!F}mZH;#GmW-TYn$LF@pi{YuJ_N-`qKh|rnJttZp9X^KVi&8g8|81<# zOgpj8`T7U&43By6pISc)PAU0~d0HO*^38{rF2NeLSD{^CopD*i9&7E^ef`~Id+x>m z!ckXDrA?ImE6`Woo^9l3gE~Etonbq=3Vx`o zEDYCG?4Pq3?Px06(dBGMW1|&6Mmyq~t}SRgSD`J`p)K)qKhkb9pIeR|TQL)Ire0PU zt~`2d&w;1e26DTOy~o!R{g}@lnRDPhSYID)Uj2CJHD6DME|B)KW&ivGzz%Hr=6u(N zu=m2y*z6OB7J4~&9_-eF)%s*zvVN(H<)+`C!!z6y`M}oIIM{tT+QEL*@#Sm>Z)rR5 zGF$LWpZ%b`POrwg!~Xf|0nz!*YKYby}ggWC`;Kzk%M{NPm zeqk%e0Jc}(Hcz8(cGO0v-F_bIIp}b=KD2w@&h?Z>!x?MSIK2z7$!%hVz@~hg`qettZ@F*f%ix$m~w8J$o=(S9x;(zHwdf^_J*~p)Hvw z25X~zgV>{DDBFJ-+Zy!weh+&d;l2vc--5iT%k8Z;D#yNeA$}yrn1NGAlKZJG~#z$0L-L>pj2u z0hUeI>@Q!JHUnF^Mlr_?>ZGr=fAP1DN8wYpKmGlI>s{-bv*6eGHE>IqTQgb8ZrdDX zW8V+Amx1mnl53Iu0N_ugJAXaW7H!{&v7h5(MFrL;7XQ+(l+hCS(5`hH?k^HytfxJ> z3HU7r{WL;9Z*?Eu)}fiJDh71+`qv05C8i|Uv;#PZJxiS@wc<2HXp9PeHzMm&!c13 zcSFw}w6}Zi&8)u&ZS|ht^y9@nXQ1C>|CD<^j&T6^`yjuwZrpXX7e?#1;`)GlOt)_S zk2BGP_v5#rt13^rzmTbY>7LJ3xNE~bpUkYsP0WgWejR7X!Sk+~dp^fKIDowst#3uz zi`o9=XA%E=#rh#~KR0GQp7E{N)6l;h_cb+pFvgt9^xqw`egJ*oojFO_4K5@5VZsUrEy`49~XEJp!g$CM=#j> z0DGTM!n@w<#BYyJ9Qs;0=d+KF_W8$* zd*aYvm8TtmPdOG*zRUYB{yN9Lz~RsD`sJJXo9yV*3&XF0^J;b!_Gel!2tC^exQ00LQx4`2?fDVp zJ+8f%$*!^OR3aWw5^#P^v*@pF=%cvaobWn> z-__Z^qRf}i4zDwzp4`Cy?se_|Z+%IAJdyugy`tTp$anvfvZJBM?=u$OcdRVzbM3(1 zci`S?C+^`m-kzu|J2^K&`p`(r^9W>PJSdI*yq7z{y-f?oChF?EIdb}juy;+U5BE5} zt!Mo`>*1wi-5eK|kN0vdpSf}`ZN&v<#o?to&%xgdZpFP+4r55uF?>%ozQA{f?FTO4 zIGcH5C|mKw&{%)()z5n`qC3!MbhUcr)xhSKwjB@Zdaz&-HX-aaWCLx$(Ufrm*PDh8^ZojnKJc zEgWN;3j0pRSR9%A3*7IO?Kig{{yA`3>H9Y8Mdy>1$wGVj@5s`7ZuSdw9_?eC9Nn*k*QrBe8;?@2wG~cu zdkwkq0d-56`uwBiQvbb8brDzlVNcBf+rvbR4VZhi0R4>^b!XV+&d~49(8F_qeJ0_)#Euzx zv@711{3E#Gy$Qcd!I#DFdrr3Kwrz=RDA!(?$9--(qX~0b&hYIA_kcg`!rncHFrN3F zf%~@19bfAj&*vVczQA@AWisO^J6Ba0o_crT!Cat=YJJf6;6Z^>_=e(JEY^0-&Vc;fB_*k@bN zXKPQzcTZf?`0NS&w|Kpl=Zx5c%76br+73RO;aPb}V{U78Y0O2Rch8>u*cCFGw*P*7CC2GRgYc=pr`j?a z-$zcv_m>)s^QU9K)=}Gs#^Sr&1r^(A`;XzLpN#7NO?|dB_%z1yN22XlWh%Cx^v3u8 zQ@g1fA(qEH*%0f;JlPO~?J=y7fZ;o5!}03;n|a)aaBMgG z>T#@?kG8Ti`{lj4%#qoZ=S8R1o)=9Y%+~J3y~B#Z>@7#oAMWR~yPaD;dIag)2e+Ja zB$sjHg=>R+F0d2N5q4%P+_OYJ|M+F)WsE$^(KgLzA^tjd+ODVY43p*K7|@R~usHVd zyEWR{Bgm&%KdxzyT!3d0a_^_-fi2BP4llg{ZDR%6%=P$AIoh?E_$=7lI0trP*T*~7 z-8!Z1;tzJ+F*S<1+ArR?wrg$2#jV|IE?#)e^)nk6UH`ESt-TRGb%u7*u|9#$7~#AN zr>NO!k|_>Ei=UTqdN5~}aOTLG4eK`by46b}7j<%q4CXV8<<~EWR(HX+MGK=vjWcG= z!kh9d{b^BSL&Mx?B@fqMGovKsI?klP8Wz!}jU5-ey#HsnuE#x~3wDk%G5u{bC+X~@ zIxnvY12g9OK4030$ZZ5PE;|addx5&yy?$FJH*c|BWT>oqeBLbBeheH=mfJ`Rdt-4c zt#R20++J92k0>vQx*wN35Af{wFY?f7Z~KI+{vfth zFvc0^?}r6*{wv!@X&g3PD(=5kiX#v6zbN_gh%?Z4hXmV3AnrR%9WVKge4Q)j))kNW zqv8$Y0H@Qn3FOl<)g!)&?F0eW+H#+cdDzuhwt)5`e&l>|+OF$fsT^XDiJU6L8Hnk7 z;L4*u{O;z$9v;2F{2pf&vhNftYqR$p)Hykk{I+jp*96#Ph?^o9^+Zi}Pb+NaBvnDX zmI+VoBG#UOZBD?rMn8kiJ0KY4Fz~!5;7tMctYDoamAAhp+y2PK_dOSSc`WCawN-NS zxQH^Gh)W+W5$-BxD3g14(FF4PM!;h^9~NGY@(^gxZo#?|}B-Ob}dNC@~jlB~&Q4PUer|fu%tsA-P z-RPzX73eH7Xkr_~F-@+0E|Yvs%&c`GI(m%`+IY8ctzWkZmS=th@*YdT_9kG@C1AJ@ zcOmajPTt`JEGLe#yh#aIeFD~)fUOivPEK!k0*3DnE?C}<1Z-yl_GAL~d;)eb0Xvd_ zRaM4q!S@{(Y@cojFt*Dk!FVrGtao=agWD2wedrBzOac8q!J2H|ls2v|y6wO_cqEmwS3u}#?M)a>)G3)k%h(l~wy9a#6#lpB&N+>iivH?X`TNe^{+Sn{cKpC%R{zo#Z;g6RmaB+ zj)ai3-{Qv{A5TXTLejp9^Bo^fO$bT*DrOwt9b!4M5x&g_;V;?P5^$o~vbU0mMA7|@ zuRY3Rddx=nr8fxQa{iCwq-D$AKJpnq;rRBgq>{jFgjpIvIN$N(IBD6kw~2hlA3E3A zw~R^xllEJD-0{yTkxVRUzs2>A&lOzaAzSuVl24!Q_;_lT5VFyEG4$uo|8bner2QH9 zJO24GIi7z(4F7+QAICjk?_f&V{=)e`j(h%vC8EUca{M^%`R|SKCpmr`_x$(8_y?Rn zzh`k zZ1*^R9QXW7N<@i0<@_JVJ%4(Pzsd3AxaZG|@y~GlIPUqgV*Gz`{*2?EKPSc?aQry# z`SW7@4#$tbI({7Y`~@-o zKIi{9?)g{5`0E@$j(dJ%j6cEg+ydyK!v z@#DDXcgOg@=lmbXJ%4SC|53+}Cysmmx)}dy$B*Nl-y7p^b^JK)`Ril+ zYaBn0d;W$PzuNKRxaV(-@xSf-AICkvFUEh^@#DDXZ;J6-9Y2nH{v9#?Bd)&UxaWT? z#{aP6$8pc!9OEBx{)ywBe`k#Ur;Z=TJ^!v4|6a$B;It1*6+(>U8Tdi3``t}WqI1d=WomyAbalJRN?sW#75 z^h$hXHkrRQMLwS0CEBxiR5G4BB^jTTg8w*0{yf;9W8~fkJaXRpqmQ-*3~KYZ%)DgCZ##J0PBH@%4WN{nk^R7a)fV2XD-d{&XaN@5co&Q|S15l8)2N2TXiYR?A|sg6p| zsk$W}f6J^c?)q0+yX$i)?dP{$c}vfuRQ@K1U#{jv0}}fa*Zvn2ajo|+U_7ZdJ5f#) z#-F=-Z!GdvelNy{>S$3BSN;TPIDalL;%fizIr*jMEz18Y z99wO6s#W|dhnJq8sKq~V{dZ+izT%&D<96wJh|2jfnAK6~xkrQKdZtVG zW3%vIb?viRK9%-BeHng8lJl1HPiv8{e*3BGUu{J^FR@2mxwMu_*M-X*-Vx*fd=%}x zHHK%<{;Q)kF?_T0XJ-tbB7!*6u;+Z)3tx$>@$;h%No-4Mg)y7HF3N2@)&QdCE!@5_pF{p{+f^u1W| z&m&SDmA?NfzRrysrSG{g!-Yp2uB|DG6yNIb()ZT+!v8MXNm9FF%~nUH@2#qLvBU3{ z+@nBS5(PmL1inuE_7yh-9* z>+mlTzfe9eku%puwD_`sue=ojUva&jQ}5pjho^3d6aPDd@0GaP^IrMU~3S7M35S-P1m7~|Byl_;n;swDe z=O+^9X_>*TpBoMS?-J*!MdI|se@L9C8iU($Y_8zc`%{VYv@!)(zmfl+hOc(Ayrri` z{v~hHSYC?{NnXl1EODN+u8IH5;724*{4Ik|l(_m?+nM@b{j7Mw$T?`_s6SPXw*MyK zs2s&tq{vw%xXRffpIhXtaunYzILl@2=@(q(d_g{IIaH3~1CmZT!xHCdr^HpxfP8*j z&MHUoX9cGmen-}z?NsIbjwHM&XO*M)>w<@J4hybw{!l(^{i+UAvt@!?z%2B)}Mb6y@x7WLe4E}SG&C_IaUvbpnQv}y?>2(%s zi@BioC|+;myldoWzhHU!n~ny>RsLT~LfBsvpDXE9@mDqrnayoH$%!uHwgVTW7)>-b5&y$`7oKCheh zdTMdz(V+E6{y7F$`^mL(S|nq5U7lcY%l~EdDxZ3vQzLO!JGDJrC~4YG)SrsyC0+Ti z%IC>)R=(mF2~NHCzSp*^zY`8m|66t*5gnnOivM@)e7~t*E63t1L_hst?~AGgSAVLX zwcgdAimUyU^RndS$?BbE?9ukdc4hf0pZLXwuk}v(A2N7ebP?zNIvN@zqV{vo9EQ36 zSA3c9Y3B{b533A*qruw^{+z^l z>Xf+Z)%xugT=gp68}M_Yqc7kqez)MX)AqXu3~u|KmRIf3@`mH8;v?~ce&?l1Ef?*v zehAB@*e8u(NhUK#DbBgeZ+xFQhxXRbDSj(sOC~m)Z9F#Khv^S8W{rXA4RgU7% z3Ql`&kT~VMV(^a`{B?t`GI(UZkJxc?g26v(__{6y^=g@@cM=Z>{O%%I-RF9D^!O-= z^Q7Y~`C|;O{g-&o;My;U@1yRx#NZPQzS-c_27kcdH3lCr z_!$O&+29imuKuSzXB&KyIE%RYkjYC7o;Um!gP(8k9R{Cl@SO&Kufd-*_!NUbZ}2*U zkHYU<47BqiA9crx2A^i|iwv%9fXSS1#y~kUeAFE~4c=hzyA3|u;M)v7*WiyC{8EGO zHTZmkKWFd{8XWuPx2T8yBLVC_EC47V(@l@&o}t3247}y9gCRUZt&X-f3v~64gP?^dkntE;JpTa#o!wZ z{)WN(3_c0JM>DXzclf9~t}ys!gZCT!;|AYha2;crywl*nYWPnYyx-u@8~k2_A2j%V z20vo(Pa3>R26vWgtHJXI|8;{m82kZ)HyQjh247|HZ3gc(_-`8gK7;Qt_(KN&oWUPA z_(KNYZ}86>{6&L5Z16({|B}Iv8hpUu6Ds`&`t4DJPd4~t2Iu@42J(N`N8NFW!FL+G z&)~ZZzSZE58+?z!|G?nS8hp3GUorSs4gQ9~_ZWQCIRAn6|B=Bb8ho$8FEaR_7<{F{ zpEUS=2LCgIKV)6~^mc*s; zT+-T(wFw(O%D#ebb4ILy*WA{(xm*Yr;G>LQO{Lz2ZdpOy7t(Cac)WE5lWDP~2@TB_ zk=sjB`r3B4#pI&p%l%f9<=aBaevfMOx(!`xx_Vl>vBhJ!jiX_Xj72BNT876Lm#T|S zcB?I>GN_}-U{xN+YV2Csv#xDj&qk1nwQfqadef~%!qV%nU(&p6!SV&yG-Gkc*1irj z31&3712$}GLm|6*%2H@l0F}s0ShsOww>P`*&fX5!7}vG+b@a*JoCy?)3@N7GrJlLT zrPDl3_X8~z6z#Uy^1FJvtPeEF+l?ePBeztfU*ZuW0WP@y+UdVZLMvc;>Ok_i`Qbhj7n)~#hRCVsbc^wPLZ9G=%e)=8#b)lV4P+u-&fdi1`pUfT^4{%mHO>@@f?ng4R7!0YVWWn zdC$~y6JMKTx)B|RWnotrvoQ^0d<24duxbrHW-4$C(iq)MrblmD%3#wK=mHeSSmp#Vs zwOv}KI?kf0CuUJrYcDR_t$nR-)#+qGDHO50Yi)10zuX+D zTgE7_Wk05bnMJ$Sy;(}Tq`mO65nVghUo7DUrDQ8o}Gd zl+HztB>Sz&&G1o5vwgjUx`K6dVsms1EusA4TH&k^vsQS}HH$QgHMF8r=y7}(fs%D= z{d(kqgp$|m6VrWtN}67T+PgaZZM0q~{SNPeXzc`U_xCc39O7&xcsJN zE0&6=qR&bOHoG<56MJb#PkVXIvfOKd#afRv!Raows05};LVbBc&~S0NHF}I`OfZ(Y zzS`a0yr~B^cir06QI=Z7q{M4+O)26vq4jx*eGx;whVyxA_RJI-;(+3q;Y z9UI(nraR7X$La3q4)bQYtnN6+9cR1aEO%^h$C>Up!yTu)qdUxNa9Q1PjyukF$64;! z;EprhaR!d<)24fzndZ%OS=|xa{{orqj) z26vq4jx*eGx{s%{68AMv_k(car#tcPIL94lyW=c(Y;eb!?l{98r~4zs`%xO*Yx*>Y z&8v5k+;NUO&UVLH?%3dtGu?59J5I+DPO5hw>g{8$|7yJ96s{*34=uNO?7P+FX?P4+ z7JdkTm^?l&rWJ~@^2n(2kI@XsKVE)$3|q_<=D!&Ei4}?rAL(uK=ZS*znKH|%@)YMh z)g=9rJ<@ePM2yp=ai00?GfDqe5zr#erGEa@66(JhK$8A&9{^-^AuRt5$e*PD(AA!= z<)nW86cFm?Gxa3>4^{a5`GKcRTyr8AXNq=cMS*E%S<7{K@(M zRK&ybccYvT5gR`qmjOljA||GP_W0!d`upDm%_!&4{wffX^gko|+fR^xEb>!kA>egN z`RfH|{hyA1EsyrgPGnBfKSh4G%S(Peh4!}rNYek1=vO_|ei;X`Csr^VMvsX8&4N?^d+;CX|AFY2 zVM^F|uSSUSvr-Wc%!yt|X@7?$zv@!~q5Ye1eMqW*{r#~eFf7d9i~LFD@4e1z)cGMS ze=Yvi9&H!3DgIx@!P4;kC$CH6JpUZLB>USXKg5@X(EeXZ$=^Fd{p-V@m!Vl7E60T+U(n|0U)A;jt0w zKbDgJamn9#0{!o#-G4~^w@7~0|0Vd>`qXxDKPoS&{%Ux$g3#+v#ba3hPa<A!D;`u{COf6EPCaf?5>`;VCk`d6puKP>uJNq#+r<>%bYr1I}i z&_63de|3s}uH(mWBK;?)=+EEi^SAhuD?e9}3jNOwL?I%6|0VjBFJfF-HO})~5R&rm zk^J43jCkn3naH2yzy1XKFGYT}N89fiDf;v1*9<3Wzo(|?A4Dkk1%&o*L;j@t-z)ZOe%gOUg8fgXTt8Qdel2gB{@ZY$nPh+a2<`7c{v`XK zPq2Scg8kotfl2!B7X6dea5;zmem(Tkx(8Z} z(Ejt0KgoW5p}t-+vi`41u>b2R?a!|#97TD_ucuJ|?v(adztZQh?QaPnZBL4GpS7g& zU&JrFhVMW5vTB^??J4cALGr5}%@f-HKuY^-O0a(^goO52r1)>i2<_+hl%(>nko=R? za5;zezn#*4TN3PFo?!nYDgNI)Li>52m1KYa2=ntkJt@Cm4;}9joS^)dBR_po2zZ;N z{5u6_`{yMotiSK4e1CdT>_3tIA>>cepTEf~w)$yOsQ*(b&u{Yb+*tWuTD<)qL_(7P z{C-}g_Z`#ne-8;s_CG83Pn3-G-$(GT_9#9*rT?uG`!`E|JyDkp7p3&SA<=Kgua6>Q zsQ;Ce`>z*8f0I>)c&Pu|$e&dH2{-$UYCp^0jQ>#o8!7#N(rG@w`pJKa>;Fm0__KpNMwov? z%J}o*2=kwja{qaFg!x(ar1IC)_zKHQz3C~eKfZU7l)qtw`R_!7PRhSxg!xZRtAEL_ z{Uy!*KTFAf_XzXfoRa^(5$5OnL`mg;V1)V4NO}IaV}$vCBc=U4Ji`1lQrh2RBg{Vu z6_Zr{$48ide9HL0XN388q_n>$N0`4W<@?t&k{|9Z3t|8HLQ4MUN0|TKl>Dzqetze* zA=LjX$WN?bNr(?5jQ@86*Z!o}g;rom^*50}mLMqKe~Mp!79t@je_rx8X+}AR_J0s~ zlKp!V?7tgawMXs$4l*a{?-czfs=rw&{kKo@OEnZr5!%nauaop|mHcX_3JCN61D-P^ zK{&N ze>tgOU6)u52=#L>abg7}$a#P_`v^O6ePv+zKaKxT{{y(sr;BFb--h{T`%ip6Z-ai+ z^MA_yqkhj&?qBi8PK15_R6J@vJzp!=-y%UG{k*Uy1kI;O=Scm*jIyBl^SHmULCde$ z#FYALYW0kXu#bWM`%V07e(itrF@A-*$sc$hk5Tk|-kqF}{|3=8|0Q$l8)oK9p}rK& z`?x>OZfI~R)2Gj!?PD$D?pd_t%8E?MBbn%rogS~TbX@t~QoP`zg(wf^u`Ssb-n}a~ zcywLm;5%!^4IXJeY4EKNR}CIsdh+1A*^2FlvtxJtEIVe`(d_8DBiT{A-pXcoy_2n| z8_s5Sy_t=6LDY@|*{JT()1nu?azXUMV{Oq3zq2rUVJKT$$26#D*q4d+G>?s@eG|wrG21T>tV{v!}TQFHZ0)YM@xOCR^WLLpM*Apx0J7hN zoWqbu-T=~gMwvv%X-M;S9R61} z*>$gF&)9V^`<`9jhs+U`I~JX7QKzIyB!N7&=q?Cb>p zRoF)^?ff?K9ov#YyR8^}`#sU{TOS^U_Bwj--7V4f^F~Jv5W4Nn>}dFP6xwbUZMI_9 z(Aa3|p^CzAldF%MFB?9ip0`sj+wc%RGhWCIap&w_1I#yXU-?(J*_eKe|@ zk}V8Bi#7^7T|1z?d9<-SY}Rr`CU zkHBba4QyuHW*+<}wy^`5{^hK*OlDw%)|u)Yf^5}E9~@rVi1I8%ySf79D-6GT*I(>p zd&)(H;i>o^mnrOfKmH4ulWs3y*$|gDy0C95{-aFg)%^VKU4IH08Th2a`Q%NhZ}h3U z^ITnLoV`E8=eJN7L+F3B|22GOU7Q~ESKo2$*w?c-)20L2nz~oBr`H{Xt%sLh0oe;s zH&5?Go|^9$>*LP`-$Z?|4)BO#o0hLd+Rr_#cUPW2cjeJ^DSJ)xebG<5P#)^@<&C!C z9$|Yw>|1>3u79lT>f)5Zecxo;Ilbb3`aXv;PXR_gKl5A}74{uM-PPfo&x|Yg(WsJ- zuDxN&lE}YQdc~sPRdBvgd)bBZ$|+J?yVo?gwzvCNI#6f^*y85x$Zdqf>|vaw!=H(v z5$NyYzmS*;%YYw~kVIia!!2rResEe&KP_KZ~^0$4P$# zX~!!c8yEeP=HEd{PxCJuH0Ml3qYO3`{@g z1o_XE^siKexxM~cNgqf_$JpiUdn6_OJV}2vCB074r{Ww2+W(5Azm$^xT}l6TO8T{M z9R1gn;6Tb>D(T$+FbquRxo#p@>)_%8m-MY$*WK3H+SPMOclRA@FUDJ1w{^7j<=f}oI(Oc!4eirs z&z?QAeOCSS86C6Q>gP4gn|15V)idim+B#;o&zL!T##AlG1c_umzC6m@eQxGGRkcwQ zFunKRO9wQLAIhw%I;Z8qiXEdqJLYq_-x~K&)o+jg{Dd!5KV0*rGrl-+Ty|7NRV_H< zqknwypI-X*%isCue|hC!zuSoKB@M{lE;@#IZXDmTqUxMNQB>8J#(!}_#qO%wmKBow zU%v|)?RuDegere>>wE5&_!~Soj$Z~@%ZjpS)`Txrf3c=we^u==mG|;@Ad&K3m%JP+ z8R~gp14ZcOp>cfulB#p+Ro<7zeX*)yNmXtA5^os|qnrlGlVcu)$@s^8mkUm2GqD58pxC92NaE-Y$_P zn=s;XE^*pOoOM^Ba$S9n&#O~;_yFw76kAE@JKslPPsZ%!S#bHI=nR}IBHYzWu;t3S zweDO~RS$D-QPq@YLc_l9o8)0XKdn>`?TKD{vHMr)w-pL8RP)lOA*buSC{VXotAYbm9TMZc`T?oJvkBWrL?pXub3_=@wK zEv|rELZ>-?O$jiutf@zZw>o~Qeii3A>t@AUB#L?*pI?vSA#2)|rg9E`X;f0wpR=aD zX^MZh1>YcoaE+5A4{l7_6%IegAU?`RGmx6yh1^<2u4s#Oi{O1(>Qz>#9Q_6Kgik~k}!6&B3Ka^rm zSBjj^rpUo}$;9$(Q7`x@De~(azcijS3IBIf>it@zC$<0AQuu$Lg8xd2 z96Ym2l;57h=Xazedp?~aXGRLY0Gxqq%bG`)#W~2t<*};c^|_`&;a}pjx+CAA zW1t+%FBrVuQ`~Wh!L2<{3eL5R?P$MW@Y4hQIl-xSx{?39!CBWDUKCvA>y<#)%vJe{ zzY_4rh@c_Cm9O|Aqj#n%#rgF>j{dapMj%IV+&s9zay1w^H3pw$a9zWf{MiO?H2gUR zZ!);`kFNO}`e&K&wY=(|6@n{Y{h;r>Dqryyqu2Te&n8_6+s|f$TR-$0+?MM;gWGa# z6q{ib6}=m+%``K7C5RNMue_E@|ix@ZsQMQAvYpDCZ?mA0Q{l2O}<;;RIw z{L581&g!?&e(Rrt;ct^T<=A$v)ymwA1#-2?n>{hH3<- z{TA2u8P?+@;nU6!Nt~y=#6!Not{>TUrS^w@Q~O!21)3RWYyWu$xAt3H`5DMrZ1`F( z;#V2GUg9BN`(4Oimcn0Ya4Wyp;8#nWr)>t;v5wF~2ERt)Jnc5PP=nUSS^!IwGEIB);ixU%qI=m`ia)LRqe3KELInt;g-IOw=OApBzAqg zw3Hq6CM;#g1xr_N#L~iToy}O(tk95i z&+|gL=8Fw7JQkr>5hJGG?=+#Hk>DJNb5G!pmtUV#tC%qVsYoDJP=cIwPCM7kVc@+g zidy`>G?5^}*YTgE|A<`dhDb6Y)V~{PN&4r?MI|o|qkew3$%!o0KL+VZ`d_B82vz=6 zJcjyt-A~fLQs#uJ9_r_>P@(>Bpqxqi4~l-hKC1zt{y#$gB>laj{|JR6P(SYnLj7xz zo}~XpQFIYAn-J>9grLOy`USJwzZ?0J?C+EtpC-vq`&k#E{lA)`pKDbyDBpjI z>%TKa|8CK5>yP(GDo^nbr}(c=^oPSlSbpw(msI{|MgKN2oaLX8pg)t+ejXG3%wt2S z|7eQ-mGV&2`k(iEVfneo8vbJAkM3cl`PGI{e{G8X0nxAiWBGYs8S3Z#car|2QvNBb zSk9sTJ0-t;HbLrS8BpyrDdN<{py%0$&?Ypavd|*=)m}{uKQEK^o0h*27#!xmI;H(S zFaA3u<0$>dAyM;d`#l1TWl=vP>cYS{f8Hmb^`zz2^I~a#ny%-Y?3WA$an^ha{fp!m zGZl_nB>&DJgW9jemynSzDkvc5y?GzWNq&}}F46p2{-3~qp>F2Poy=ntJLM=3b7)yv`iv^=2>+ zJ;Gex3e4rr>>9v4bIfVxT+&^y;s2n_1IMO-4G`nzv*t0M6?3%N4E)?)%;#hr4Z5Lg zOksG+7YoCOMsYsqX_%W`16gN47UqCsel_L_&%(1%cFP_3--iF#Tc`E`ehqxe`sR2)w-`fY&6M+CpPRqx?W0}!Y{Z`&Qsq&`dDZ>P z(Zp*`#LIxE^KKTRBSV-2k9oG3M_z%s*Qlp0VLkad_Wil2;n6JSxzCKYFBsFm9CcVn{rks8 z4Uf2Y2RsjRTQMKKb{FR9uRm#Qv|Hm66wCAmCjz5>Wx$o-3fwpM-Ymj$vLjUsb zqdtFtatv;%J@Q9e&UI~o?+6T`O%&(1XQEjePn5-WWn|Gl%Gi%b4v(PyJ=(^19Q<5) zV32jXv?K4!0r+JA_NsjcT>J9n)O-V{6o!#r!!jOTx)?rhaz20i1Dpr${jTjC`fHA5 z{has1OS5jSJNrbg9&H)zSoNUWZ)4 zeP*GX!;d=h??mL?y971S3C{1{^^}{pj*)mf{ekiPr$b}EeD=F{ebdby|KCnOwk5(? zn;Co;ZGmm+80vf{+W1g5x9i=z7T_HZ_kM))XC8I?ebn(mv=O!sZJQi}Y5UMv&f)iY zI6pmtyn=s3SK~gr2OPJzZJay9?JCgSv8J`{&Pb=AH!fNpE!)s_2R1Ocy5r8pJ-4oN zU>>{|r9Znu{mv|EDLDPJojb>|D|YeAa9B4ql8K$8XCl3np1+yE9d_fJ@UX-Gy!$ zg&}PA`35raiKE#jL_j4>T;F71M<7j!-75TWfd^bGtYURoS~V00743Gl4o)5 z>2t!@`v%G#O27^$V0!Oj^G>2(1jQyJUN2al360|?G*+E6;Y$@?9JQ>fc0%L$$k{^P z$`SJVN66EAv*YQlhu-H!-YUdlALq0>`^LdQPHE)~-%gE!!cH^_12qHvb)vAq-2;z& z?&@9cy8$vKgrvEv*Ezm?p$PIM%{iUvsB+^NfU$8n}6%`H90@sn?`vu@?; za;4RdFE_O1Nsy11GJ`PI@#8pY*@#bk%EM9j9VL#Fm5oj-C*#vk9Y2nH{^>FPKRA9I z_k8=Sg3r3i*&oL}pWlMY!_|%-$H~f;%>wZGE_VE~UnhzJvt_e^Jbb?6%NMdD(?_yp zzv6oAOvmRpmUzfU=fyz3uW=mDI63FX_-{FXPLAPCK_&>&Yk|gKR6utb8n8fdL<#kR%Os)?&e;@xz{J%+&&zef&&r7j0 zZ7%Kl6#37j*#98-NpnSCMg7{jqV8G+8(~hOovTvxel-Q3kb-YZkv}Pge=wz76Jcnz znNzRVy0=s0-|fm<8sC(EGw`H(8Rht;@lE-7?>3QthqI?NzA67BDfP>_sMTiNQ~uTz z{XphdJ2<=%G@a1E)LL$mn ze3e8(d%6v7{nlsji@nM2*d%evvHhsU;Fn08r(T2C8(iDJmREbSwtux>ac%#~zd&R? zENA5_{-n`6-RQOL+&xY~WI7e@ql5w6San-AS$P2D| z6<3>;ul|`5@D(ozPJ8A`oTrrrpJ(tsgWI{l{er7r&2pba)K0}8kO=kS8C@}Gdm}!- zh~oRK#EIMSQ^(0rueP^PZ`j_njSh)?Gsvu>C7;$6;%aj-R1_R;Jja<7#M6 zOTbsX?J54T=b3d(|Wrjal;w;y4gX?%gz1JIDZ6m(I;5j4bMuSh1IOj0p*0LBhFLCuD z6Ls7mEW+^aT&9;e{6&MS51Eh?CsNM2jwuJX{pq4>7cRx4Y`2@L z+jn-|2Dgc>-yF4ZQA(Wep?UMN<%@4@ zCT;PxS1xtwD`(ZuYsF5=?d{W>Tl@MpG_St1xes$RV;YbtM&j%>PKI+C+|*7H$JugD zTHCr!J;}mCip~LbezTr&Gw(L7#m?<*>##xn#wgH{XsSwAa(hR2M<1q$qJ)Wjn;yC( zF+~1L6<&KvY_=sg*iEp^ZMB<(2hETj2mK+j zvB2BK&P7hx!j6}>*wB=ep!eFvjVIJgPLkfVyk&Yx;ug3`TIBaQBx6fp%qi6^ei79z zdlA)HshjPVy2V+kKxI~Hu{FCE%8o$ADHBzFwYc98Nq5Zup^2+YvV1Nc4@YG1@5l2U z8|3m(gno(`F?-EqVu6Q*V6VAM=Do}D^6Pz(iVE}d9*S5&336U3kNBFTaC}C@s9wYM zTG$3GNxxnPHwOg{_1}X0N%{xm;(SE%Q$Jl9>i;y1O484IVX*fQ{2c1v3SN@_hvX(e z%SrwG6)V*L3Nk0@Un%hFc}B>j^{sQ-3kPAdOEf_`?%Q2#)R{>dZM|AiF&dlU5YSISWT z3n}_968(APu_3Jg=Th`PpP-+=3WWMEg+Pdijh{;nbudg6 z{R{lZ;*neiJ@a`FNEN&ed={_7OuSbvl8ulcoIt-$yjsBog|d9g#7A{i(qDL>{M&ub`6IhM7rJ>cgS z`(tq(?0F4yJu>n+#}8fVOmT;T9Iu2Yb)H=g>&|9o6^1{-d26FMpY5AF^HJ?fpzgr` zHvGrt0`JFs!bi@w^J#1AbpGCJm<#(V=EB0SZXIDXv2DKt8E6vQ{u1X$kQXws#_yAZ zZ)1+;TOY2#+*-`<%tn~=T!A^y8O(W(>gMEN7xJ8kJkeR@Yxm-z$et;X!#SvTjEnYl zp6`}i-_e5gd-o&liSdQupJ0ydkMVy9|3AY2>*q(?*N%^daUI_F1lFGY*cs9AXFk!q z_j}hw>$jd9t@sT*g4x~GGxt9#C)_`jseP&E?85NhRYhO_Or|h=)#&Kdp0lIj)v&wg z+`{m9i=P_}W1OhzIlnM`?Ma@0JNf5F!#5ItZ(;Z|;|%`ZXm}a%I>@gycwID%XKgh- z(;#2)o@vqWB4RTN!#$XLN?UqnM8gGQvyp$S$EH%>>}VKOUDIUNS zZ;aP0v-xuh>=5FvgRbo@)!k ze~=a4wb3vxJ2gGap0=Zij1nZbbeH;ocYx<9?*3=Vs)`+S9IFH%G&GmR8eq z3-T*=OEir3Q`55=<;E*!j<-4*eqcegeLL2~zUSm<{Uh0EMKjK=IA4x=(^GKH-Fa>` z-j|q#28?-~I%hR%=&Oi^FM>R@KO`l$?Qf!8v3+OEdd@7X&V$9!P>df>4rQD-v41(* z+lctBd9U{qMsI0;`a;Z=#(LQ&v41|}=E-(NW2&kro_oQRX$_ZN-njVM6*t||){pY$ z@`Zh@-&{W0muFcpFZJEK{tSH#b6(NM_6vt|m%&?4-ly?c_3%=z`|Q_mhJ&_Y-I?tz zvdf&SKeNtQAiSdhbnK?I|eZ%Y1dHQ}Xzn}MwJpz{cc6X$iZNs-a zu0Q@WjN7{Y_yGJtAL0Ib8+@~UEBwNCMPK3mc*WL=!r*7oj&kRqe4G!DvVIxmVp+ZZ z(i-X9li>7U9Q!)gA^(|c>rcD3uJvu(F|S)}!+h_ea$aG05PoXGJp4R#3}9}5C-mg5 z^X->7brXZFb-Bw5ZqB#jxQ5rD%y{>rrcT>)*l&)fFRJkRDsLzZ|48g$|DY|@N4?b1 zfHpZ&-FBXOrhsc9`U(ATK;BU}VCJ6ZqgvEuZE^m(+OBK1=NkP!0Q47S(D$n`#vj0E z=F_#?3nE89$K*66$ia2tmzDz?Di;-o7o$whCS2EO6Xn2HgB3_q8%}5wWi39AETkPz z)=2MHIHu5d1E^oklc~g-^QhN+ah#2hFKjo5u{XodvZLHy8r)ChZR}mZHhTp77ua^2 zmv)rHyHE$R6YJPMF&4-k8mD6q4P47c+>Vp_Zs|Ip?K$i_7>|A5xv(&-{o|MKH_7`q zcwdZxFGhyzpb*I_xj83;Rn@j~mm`2DU$f_lVxa z{xGc5;q0h7?6<+aDBL?oLtCOJhPGs$7|QnZ(d3R?wlIh`y`AF_%kvKIneiafy?691 z#?2e?@7_VecwY%F-p51v&Z_%fMeZl8>wliH_49nMYsyr%gR}jZjj1KW7^_~YIQu7W zSDbx+<`>6Su>Ik8#hQPneCSnsG3J!*hq52M1K5+L^d21dq__&@UX1cLVXqT;2kvSA zE>_a@GNnDcF*t0`{W>mQTo~>`UuSz_yXN)H?+fGGbRNF><;Ka8wQaU3+nx$&+j<{2 zvUXFtCpz{t-$ffe_~uOPgRv0rE}?z+@zk`9jnVd}YNLH&JAkgTcCfRyu+QDoWVhnI zr$vy7_mH0U?@@*Odw73Wxc&4wi#ac@SNG5c@N|Jo8M~)b%gd}ZU6qcE;yF@E^#z&of{dmY%X{RTP)i~Z(o)Zm2AqOoqSV#Ztv^zQSD3iGkxfOHeSBq+Q#ONp4Qdf9nIbA+HUXa zSyRFnu2|`Q(cjpIm*yh=e7XTUB49b3b!)jG&$rZ9(2n*9OCWXhtm#7={y+Va-2`-e2K$a(JwEF*s+CMM?~?IdE&noE<4L_51%+~! zkc%+IpWGbA7Ks=5TTbKn0$$Y%_G-vZ%;If1c~|e-x+lUzl27fJi_eb>2A}KuW5svw z#_6^QFY+z2ZrLLNA3&vThnNRJ{r3vFS3*P{-JvGW#2!>uBbYBX2@3F$v0l9o{hv9A>LT-Dhit3TP zRk(!`*S{MmGFhvQ=G{R0_({prRLUcJWQ>E$Ws{6zHf)#y9`hakFXp?5Z5Y9|b1jd1 z<8z#r#+X^s*ZyC~NB=)8`RGdqVq7POf$fcf<#|T10Rky)qGEG-lc3C_lCRU}^LvbF zUCKL||A;Qcc87Q7UD)ZlY5Sx=OZh%2^TBVIym_|W#__u|E31M{R?N3lCafTE3=I`=c-L%)tfmMX!6G*VSzWn7w?N z*R>zE)dt}{#~ijFVJjQglO8Yjq?ee9@;fC@yU%0gqgj{aleeV$uhFRMy+vpwt= zZVkBz^!JN`JwqUAPaAdjjlE242lrjD`qpv~C*U0iz*R?<7Z zFFC#PgHchMk0k9Yv(ND>1E%sz_9)>|$B*MoPkJZ#e#hr*g?LDMC%Dh?@sv3sB<(lz zQOC!fe?mywZ{|wJXG@KTq<4rfaeSG86J$x+hvqEjdOORtlqu<*<9~DV`D=bWWF!8{ zULKxz{5Vcl(!Mocb9|Y=QZ5R7eRHXl@UY{@aW7w6Wr_d)96yeGzWi`sqDMWBAICj^ zl41JjhaEqTd;U2we!=nMxaXJ6_H}uuI({7Ye0)m_!fCF4_1bNo2&`BP*3dmKNGd%k@ez-R4r{5bCU7supZ=lF5l z^QXo5mpXnN_xwv@{0kgEj?co-Tw&gJa`ys~J8N(ic(SYa>H4wkoGp7x$tN9fdS{mL z^aCE5X|#BL#_{7g_m;1SW*2$o<9`WP!tXgbah&PdvbUFfj%|+5JF0ldM)(Cb2zNSu z949SX_BN8wxZ3e~7Z4BGvX$k1`qhqqS)2?cTehQsr!+YJ2UGZ$$MAC;KaP`_jS4aT zSXb|H{9l}$1u_1gIecLZZ@~54u3@lJ7;KqISEKiUpM?J*?pc#??g3iuW@UQ8yl-Rp z58Q7g@&5tsDhZ#8`;8==b2yW5PK-#xTT}4ga(0%k?|S9C@62j01<;kh#GC`%p@~mA~TsuGQpr}9SF5i(N1dAX!$cJZ6_&MZX4Rr zY8eo{@s`$bii2zne)FDlp1t;3YyUa> z>~r>BYiG|{^XQI<5d*1a5{qs218taxVf`87@XV0&a;QJi?47tMR0y!IW_{<7?o#S&xio17E zTwUhy?D?Yj{V3;JW0hDhDgQX9eR6-YT4QZCOXzRNp+Cx%Pxc%c6ne~YfKT?k=oEav z!?WkYkn+bdRxit){#k$S-u*!Pk4{f*O-a%!eAt7<_%;pS6oYma(_c;cvvFm#6Mv08aXF_`xY}_(v)Z4!U#=l!Aa3iuU+_?W-7iY((WlP7pDDf8x7{y_?L={`&vAirZM_c} z+}8UZgWK{S&cW%ch9S(?KEYK_PlfwZ@GxKd1A5i}v4CFjCj<}k^`gP8{`xI2)KmSA zhkCve$W{F@m~lbrRi6ohYrYic_<~hG{_P6lxYXbs z23H#1M|y6e6XLeqiiS^@AyhonbC%GAdTPF?XPe>ED(7LnsBR(u&K&-#o6?^wbiDz+ z;(A|)^|HJT50;`8*NOtDYkPz2Ywj9_sG~K!_u5 z^`C}o2I5+_yw*7n;u{D^u>G@r?o5;TQ2!-@laFmbD-3SsDj(9@@;p+!X!u(`d3cS` zvtI1;YqH?Xm&KR=;wuFw zpPLLHZMVdghSAz?mA@u=LQa&w;v;gR^vmV?896Gw;(6`)6``j-wmoaUh`(KEc+hfF zx!n>sO^zy8@g~8^=eOmY2a8+&w;Fm|{-NC2LKn(aywUL4Cg(hq@5#-BL+XoCw0FU z8C?4|Ml3V9m{~Y_wY8+&(;VV|ZZY)PTUe3|8hnPK-(&EZ27l4uXBfOFg-*HITNs|p z20zQtw;J4jwbOAL`J7|uhYkI?2G{Wk>E{`|LBYjC2d9rDBU(2So@EYMP`okDTr2BA}YRaQ}?P4__>HAYwy4|bZdM2*7mFm56VhfAk5M!$@HCOn z7#EDibklWVVQp?&w-$G5+q%BBE@gRBD2s9;Q%@u=bLm<%dOw+m9RoLDPdn#tB-W-} zM0ue&S0P5-v|Pf7G?(moD!h;w4k=+Shjl&cR-=r{b4s?zLxWprXA3aZNZX7qtTQrG z8ZG3Mrd-H|j*T5yk{7uXW4QO#5{+qF*W&R=Gw`>McH!-j?d!OfFye}ZxmdfgrOoC( zEln3OYxCR%7tk}ueD^!g{koq8@D~Eu{myg0?q`8>ATrc=y68Ed_NI=o(JdiAKzw;00 zjfAw$`^WOpSSg?zIKu-&f?tXw^I0R;`krxgj{KcMS1(6Bgz~F$6%NO&&`w1GKrPn3Ms!4GDl$hqpYy} zeh-Ob@;A#3ZNI&cPniEt0f@QSpM7Pxw$1x=}*G+13B_XBzll9PV<6rZ4fjP!>vPNDwu1G>i~{q+H^ zx3eC55zlk2XC=QvCaLaMK#rPDkAE%YACM)5Y>8u8l%`W~Itqjs*p!7DNxw|SVH&CR zuh*v_Jn=hhJI4YU!$SZK_MCVA$oQ`*YHES#7FQ^JbWczA zb^2Ur4(KMqUNFX+Y1sG~#+!!vJmFG|tFVsPjn9bphj$U2> z4E;+ux3-Suddh&=&~I^kDshs;Yzsf+=;eW9_;`95P#AoJqp!q0y*$7TeYc~p#63N~ z1eFKA8<($2@$r1;%~m9PjK6m{JhMH}m_NgbwJj-01j+T@7swsB`FaeWoP%G7RCYf{ z*S3Mpba+;eia+M?tei`@W*ESKtyy)a^h+F`m7C(c2N}4=2*Zdp)W{ieyB0?u<6Ki! zmr`eW<(evs>$%b++65V!xHYV#QM~A*oj#d`Mz-daYvAk}phiP)^|!d{Ow#|Vd@0{B zUy2uvp5w_^UcK0SjVHh3Su1AwY!*G)pV{8#Zi8p7F-b-YURKUhq2wd4QI68C@v`?v zuc0p+c9*Y;Ntd_;Gsc*xUA?xqlWS}+o7-2p>Vp%qAnI-(lO*MXk;zzm4oBkn9F73G zM5ARWWO4{H4vvBaD#7{;jrF^q_|)kN17?3y-`cK?k-2Kj&tl%Wo!eAwp6jNU-DI+x zI`*@}ZqArL^Dv+7m!4n-e;zK8Y~C+uX9?esu0cDfe7YtH{Pem&hnqG8mu`I{vEY?U z-Z^Yae?B3A?!oop(w74IF#QnXiG_5-ax-cFz$5di{e$AK0gK7+2hPys59x0x|KAZ4 zlmEELr+y5S$NN5%-vKNpe=l%`W`9V3L;0o{ZbUjfcAmVEM! z$=?}~&webF|6^b=`6Yq~P5zMnhWS5$n3#P17C$5@sV7HOq5QuC7L%`QT}z0!A(a0u zM8@Q=kWQO&8F=LAA(a0KU@`f7CI8Kcw;`1O+lY+G*KgrgK1Y3_{Kddx@?ROJe6B-{ z$=?>qKSx8Me4Wdhk2o7j)&43Rsft=oXHqbpm_EOWFxMTx2SmwFF5}^7d`%OQ9}!;kq;$zC}CcO-=Z?VfW!C>M8DYdzenH1 zHHY(g?R-=kpV#mu54QMD7590406dHMCN*(}_?n*KeN89g-x~cgT?P!O&sfyQz|Hus z^#|}F*jCkl^*3<@|ENEF`W2;rWB8{o_lJLc=AW8*8l0s5@K4-*{c*{t`opKMzfINR z8=pRxk4g62g8W#&_|L;Hei!^oW4t$jwf5V);S>LXvy%1u-jFQ+G+qUMcWrmm-%ULJ zlf&?d-+f|f6n-7<>xREx`gZSz4}FYb>$>5)`bzkgPw`W{Z~5-iOQWBHZ}}8IJsGVh zJ$z9AEquun?|ySKI+NI$rO|T)bG*+?M)CZp>z)l7_>*_Evy)M@v$}5h$p2gTk|&1x zd}H_AWEA7fx^DQ%Ki1;#m5+SYb;DQwmGCJ~din$JhOd0oNnJO5<$nr()_|K60F8Xyp>9o_~*PYMwakU+M8{N$||%-;&V4oAO8=x+r5twKwG?5+5g+XmU(9S<>A5dm4Ug%&;1Rtg~yLoRBFQUz(ZyNy70Qnw5S;2qq?ncz_ zcj3Dd?{5R|hriLE;e4cUvX=$l+Dv=Lq-6ate3-*u`T7~ySD^LNrCsFv6l6UEf4uO) z3BRcD)ec(h#k6~PLb9jn_>$Y(Ky_UW-{-M3;#YXba80s@Y0=Nt!8U%6rbGSgUWK$H z@b^jn@b$KP1oc;Bxj>JnX2L%|>WOg&pzqHSe*kTne14AnjTEN2bb8G^bi&X7j-!(| ze*e&Gd%h1{nf34@>F^sZ)a7yO;UVXcg7x>&yJ?MWG>p@U=z7B|WV$X_w&|@O}pne?3 z8u)KTf4j$}hd%U0i!|$(B46aAx?wD&I_2KC57uV-pe@v*uY@n;%W%J3iu>Y`oho0o0oWwf`~3iJhR_7RYKYXtX6P2!(3?6;>^71z%|KZ?BqMh_gF?CC`R zIq@|7qrd(VeA2dlf_{O$AM1XkW&32l>AP3k{Xe1J{&)g-AT8U*3CH?+%G!tAA98QA zZIBP!2m62FhxXv<{v2(r^QOg+d*W{O$=@_adD(kZeMcuKv)Pi4_0)-aVLk0a8=QD0 z{5|ssfB3r~uci(0IIgWO-G6aa&H6#q*Tq#+*0;K2(e2^EI$ebF1%KzOnC%U7aqG{n zPL@xvN!CAz`>%-jBduGcsnvZ9TwNBtpJkQ{{&U;MlV~5`KwWp@9%J5Ws!I2N9QseM znt0s|)Q6TW^0JWkq1NN@1k@{h;*&qiMe}t!bf*vIzAKVZmWRt9+U~K)m-5;tec9pk zTJ)y=tM3>G-JO&Bul_9PJ_>om4I&An)BKISw~Nyo!K;;6MP!|Wh|~AajeHY-Kmf5M~Y}`PoNA3rC-M2 zxv>U5nfuUw(Dp~s_Mcyc`W}mC8|q>_Wzklbl?CTfzXsXRfzR{Nzr;Dqg5~fa&hZt) z@4qrZ_Ft)q?7xCBtJ{ACv@ByjN2x3O*b(&gy2sOa$0g{icXJ#(h-bBqf2(jGfoC1{ z^nSDddYA4~!Do&eqhtQD9_Otx_Fjc?8v8rsaol@Vq`VpeUh~JtE8Afj`!TP*zN2OB zy0v{}J5LMl4CFdGHbml_^Xcn4Zs^#&x-;}q{VO{;ippb{;tyqWqsFbrPeDq4 zkKmu7-X9z`BIhc%8P^8|!}EYLdRI<9t@ShTNBdd$jr}})H-7uY+S!iT3U8V8IO|>g65mp3lU5|3@F_!&~fb(1M_$||JfG_oh|QW zf{_mcd9(}0e5P$_9R8YbeI4m2A{O3{&hAL&l$+egYBrF{5Su&p_Qntr35AL;-}uhz z_`9Eq6tTJHmmO>QU~E!6iZZG;9t7NdBk{30Xxe3!dmPA^#r)V}ER4WAtTGfTb~a9u z?>PF&mBc_|er*4jqqnnBS<;vv+XoyyTXSWI`K8_C=xZy9ffUMSMLo%US0!~h^mqde zLan2(#7S02d%!GFm7~|5F~dFm$>jj9UUd3b;-22lTKc5_?C2|TPj6>wJ^l9_eI@Sc z`Q^VneB04i;-o4#OMr5EZ?}(;M z$CZC2KH1@CR?yQ=V)jJIqU(U$wFjLN_3DJ|nVL~2$^AJv#!2AgggA0-8S`;p*P4Dq z`{yA?pY;RU_kI$1?5awJbNJ5$ zAL}1e%i#jYCzIfw<-nHb$X$}7C;gLVT);rWW*lSq&vWoiIpzFFPI&%1NVVOkEKmB4H9r@@VZZ~^vFxg9zD=@&AVFV1T|bdUTFHSG)UB@6K#o^<~E=>z|eX#~gju4=a8f+DWZh zE#t;mko)nR_S4|#v;MZ;tDDTo$!`ttTGJ2D68aZ%%Iz*!J~MK2~8g7;|%C-1TTr-dl`%(?J3Lfe|D0rwp+Yf`%U+OQDp@3fTdj+T5 zUlUp$h7Eq9!SUVL1=8E{SCU`G_V89!4o7XDY$q2RT-!GDRWkTRa!!1a!P^bK*x;Q8 zxAoX1xYmm%>6MeP9{U1%hhC0t%8U83<|FNH44u1wEY8raIKH*I5c1h<@WqCH zi@|L>?-x95=hk2F*@n-yfL^khs2@7LFBIQlQ^@`H|tl|md_N7PZ+}TsS{lD>#6V!F`(CSm=@40K1*=wW6Ou*df=*q-$PX&#j&=<1*KO#wf|9i z#djLHwms^WKQ`?M|gR)v7CrYo+cPsUGlb=){g{@6r^?24Dp&D3;iL4b&s4#cUh$%lYxQg} zxYe^{aIGWCUTJV!&aHy0KB{NC;Hr<}odLb-*%i<$-Y0li@7kY-<+&~3uX43N5B1Uh zT=iGEJ96~7HAkPj4Q|V`C<;)|-%w@DF&v-kefNL!J41`nZ>pTLA80dpQO=n!JHE}s zrwP5cm6Qt{w2cwhyfd~-NQk>n=5pO{@ESSiVTZx(`^bKSA1~)TJY(?8GA?`nqTDwb zdc7}*pI~r(Pa%#)6KT-)MqK+^M(XpI_^By1=3j8lKs@^jhcc0Vo4B3b(C0Go89u4| z)%OnKGYziKW#VTTT%V`J-(v7VBlj$WXX_lqb+KQl(2HdYW4k1{H6`rF15zS+RAm-MA5ZlzTVGwC&pHbYKBG^EA3!ZRzQ1Z|Ui+ zaKwz_yL81ROK9a*>5IACg{hLle5`_0t;NLIae2a61!Nj_Z0_yZfZX?}UsPD8q1GVn z%FC}@?mfSG+Wi?;E>AM=U z9fpKaWuB6QwyL=*qp=N2JTSAoy%XB5Hu&}JZrgBOYR{Km^!D_!SpBu$2)&zDb-^q1 z>dubU*ClfUqdzMt>T_B3i@9AccONX?kkc|(@5rg!U1b##vcl+G{4nibqEd6jF&rLC zeYks?R*Nm`H+5{d0e3^k2InK&yG5>Obb+&E)ff6T_!Q+Cc214c?3Q1po{_B(M{>#4 z?_0L~D(^Nqr!6?ToVYPO3S-q*+q!Ez=B`fW!om`FEsi&I^JvQi{U7~*J1pj9SaYt9 zhK+M!<51W*5jKv4=`6T?uJ;?9IS8gxU^o?K)cnv9@L0}&f8h>)JC5S~d}Zi7$764` zg9Si%td#|RXCM}kC8aW|?81&oh#m*|hfCj?C3R0|n@kO8(WzsaBt^*;^5WAf*)u^D=Q`~IsJd9q;FKk z<;b$K;rDX-|D7x_1g$4t^8HZDBgJ#%-zxI!$;5Z#fKLU< z{tR+wnof@&k@^qFk}udrA0|@MDb$3_6GJm73xkq=e-NShSKDZhOpknOh~ z|C(OgRX5syAi}Zk<--D@Rr*1);k;y+9yaRdFDPbVEF1On7dA9{>hasC510>3CFsDr zWjabNw6Pk7jo?Apxj@%}8L&4_s=YlN66|nx-mr=3haJ&pVPi#X5Vo4M!)k?XcPnh2 z)Q$`V(ujEyXID)+{14#2!hZQd+Th^73bwauQ-xyVW9Ep`YB44Db*J4MZTZM6 zvxi>1>!-(*MqmBN*N15PQ-aR4(^vZ+XZw?scBx%rEAskLogpDTB?qb>m zd1E;b!@k_vpF$^$2V7a2a9;5P(&|POlB;3CgJmTQ|~p8}g%ey|f@1ef5&6 z?f9_T^T6@R=*ZUOo{_Cp_ly+!-&%q_8|w;X@7mP?l=+>j(Oyv|ohZAB7vP`vTSq%v ztL;UW9hUkH!p<1odL3zM7J5IGBS_1#9YP$Q59>z?+rEhVxsJA8uYTlG=usL~``do6 z_pS+Nlt%kS-|EKF=qlj!FIoat6uUC!uNrzVj`^#Iduu!nc|pDco3)AMHf#P9S@UHr z^2xO9x_wh`;=Z8#>RNb7*I8!UH3yZeeXi^9D{PIbM~pF%ThF)zX&Brybcxu4Is2Wi z$fzqAJikh*HOuyyMfJE^EMe3Z$s zD4X5$xL<1_AM`TP6 zXUjPc0|uXC@SO&?dfqB{sOO;IDpxMc)~K^QRiB}NUh#Vc5A}T5;8xGa1P}FjJm4>v z>DmeMmuVLlrFBP~@6H-jR>;3W2*Ug}3(o!^#y{kv{6juX!iW0IQ)O^mW^miCdJWFL zQNw0AAs<_h+8#oE`h`B!=Vrl`UZ0@b0(!-F2u``Sy=lD@*SwQ-uc5c)Ry6o|a?XRM zRefeiTv#uP+xyh6ahfXWSYM0eoQG+0&b1}zO4G2^;1g05{t66k=jR3uUSsI@7(DCk zlVqR4CmZ@F44(Dg7~4WW2I@J*pSoYpbubX;w|otA3|^-ojwOR z+fjk8JtMuAA?b$<1&uCfr7u4~8s*4Zi+rI)>xTM#XaF3O6*FEs{MY&&R@0Pml)+y?zI|3zaX#Go6)Jo-g0}TvnU3Ua+{`iDEne! zwy$Gki9eBG`$|T$FF9=bKwy}jBS~T<{M)c!I?XB4X|u0kRbyQW_gHeJ7M{;Nojc~ z{yktZ{fEY>{~zV#|K4$?zcfd_+FaOYFGyWpdDQSwj{L_&{;f(V$FTgkcW4}vL4No7Bv|qjzhvlz(ug?$C!&j>dX9hUSib0PT$$5iA zv!6GMqI|EnLDT8+!#L4%OZN|9MkO+&{kf!<=9;p2T+;LVgbkX1#pvTBR(>x^`SnYB zwqLddO|R{$AA&>KVO-^B4o%qxL7>Zki4{9^tT^H22KdOqgskUu|v>wVtx z6>|sHqwJ{%56+vNSd-je10Uq-lNI}6jFu)Rd;S>y4u6C>(*yYb7x?AA4!*qcb!*@{ z_~l*-zub46Tm)^;`BGx4}j4#F>Y7v_T}!!P&JD(?@w3qF0(*VlEyC+AZ5 z<3?Xq*9BjTSRdpu_~OQ6xUTCw$cHa(M+ZO7 zc+acrf`7-!iopjr%D%1(zAL-nL)Ou~Eg8K+{BmCm|Lu$5Lv#AXWIg5?mgCtrx&w2! zI`=&TX)z8O*ogVqC(Rr*>i}(YU@_{_&%gS)S35sT{d8^@LzeWMY4JaR|8$O5=XZxu zr!!>yE)wplcSG$H~w||t%t8@ zJEz<#bJ%vS`QTN4ei?e!<;iE zz0y2EpH9s6SD#ZF)wKnjGqyU0dGmP!FYz&2!E4^(d5yQv@$1F$I<}_Vf5tWS3P-pX_+|N{NWEg|8_~I zJezR6S+GtXgSqCh{FAb=FepDh7WX+M8%s6d`U$~GJbD>ZZm+&=g7T+F&t^ZZO;ueU zr|_YOu!KLVm-lsv>1mlPPm^Kd9AqpT+!HPwX*zwDyLY;BdGHaMFHh%~k0c$-=|$1A z-m9DY`+3yyk<3kVBiYznJMAs)9*(ZkqRtr66}ak%HjYhgaex zi_LNWm~Gd+b@Esq3h78F!=G~WnVwk;`A@W$?))DdeI?Gw*c|sGjvk|nNQljGKj`Qu zN2tl)etq>MUv>1AIAddT)_>vX*-|P)%s=O!I(qvRH%k}u&pFw(le&z^oWZ8aJAoTIPANl{4b*I=LK2}fUvKk9I6N$Tmp>G0G1h57w7+OwTg*86Kc@K|Yn z9DHKy*FZj~M=ZfzpXk^0(!$_Y?6s zN{nN>oU?sedL&jPXolMM$Cam5h#Q6Wn zt@cr3?wJoBpIAQf}vzmiI0( zd`~V5rLwE+VnTN6&bA@(;nIiCv@rcvBqml0_`WC|{E*-ri!m$uJkaM_ZH|2HU-kW3 z*@yCv&5^%TI$y3WWuSb%RfqD=75TQ$C;eRl=yQq~1IWw513CKZ+@j`F6NUPp3pwN& z*55vnujP=Jem3Z0QFK`m25JSo&X+qyG|Vw_$$6>v!hp-!#Q5 zuJWlr>mth*HA>M{iKIUMe<+n`a>+_%T`PCtm{~lm5`L~GtC5X2nl>aV7 z5-V9EocBlM6AI;@3oIsI=QhWZ&oOjN{=E_Td>akr-<2bOnq+h-;%yK(h3>#vO#Vnj zKHn)r`M(J)mjBLi%IEzNlRrfUV-1LBVEyy$I+TB1PW#^@^6Qz{1c6gzO-}nSiToj< zqXUMtc(?#OvprjvbZn+JNl$WOE@t*i6%nI87 zBk7TivT(1a4Z3dSf%x!X>sb(_lS7CR_`Mj441?&s$=A79r?BE`i+~*nh(w;wutZ!kT%1PK~@8YUS z*HvN9-Wtq9wPNqk8rTQq~Si6H;jYsPV8g(BkW(uy$BzaJ$*S>&OLKs<2(8@*onS^f9~ts2wil)+!5KQ zmV5XXu}3BMzr~#6ax@dSr!x2QCBLVz-z?hYz|ANJ?#V6taqqyIkKIL-*EHCrqCc%; z`LP@{J@@s^OV7P}N!xmCvWI-oZtEUL-6;>weXc@!-J|#4aXrGlePItB?(O??#GQzF z%AccNHEslZx03(Q5H|?E-2eAL+1|gWxOmFtUck(IC(JLn_wT7cdu`9Dkh2+U1QO(} zF4*_C6|x?fR9fGPJx(7uy0rdDq&o>V)HRo2z7%T#&I3;^W9oqaakmSdTW8(qzQ35a zA9LT`4?(Az%aKRu?e`--Y4_8zC-EfcQ-ghqhme2H-@9|t&*U6)ws$ewO1gLP9oV~= zdtra-=dUeioB1cVKjs*DG5d}pP3_+z%~M$OQI*_;eO>+j+iI7MvU7W+PCv?*U(Hm^ zT|3>AJzvMV3Euzs@;~N%74CJ4q4Jn%!u?2f&(4W;rO`7^W1FjiUG;-QgP7a)`rn-D zpY>BWm-SPcFRn{T&=#IX{vO7EeNw%9o91<5X+72nEN5Ojkyj@VcG_0nSnb8;w+3Z= zr1`B!8pxZid4An%DV*Ip_losvL|SDZ(j#6=fj*o4y!IL4d_Vge_94>eMAsI*jDDW` z>%z}N`Pw4i9%r*m`F!X<-mfoW-*EkL$!O>4eqU{_i{Z0@bgl4TFao+yBR?-7Z~ub- z=kc#=j(&_aN9(W_3FGI1zr&iNKf#)#*A^!0>nA14ag$GZbZt-5lu2*=WKuo-yFFNQ z)H5-;?@zF{=oYLE>Op^UIof9r)*SswjmNJbj&(x*n`O`V*{QO66kx5x#5J^9H1xeSZ(uA{}pW ztVhB-PF>Gp@W;9(@^N`uoQ&fAu&xKs%GrA2rq zwH%wQui+7Enuc-jd=%Gs&tLvgT$gZcsXFF5-cx7Y@aEcYVY{Fj9MO+7;+3WDG4xw? zcs`GLPoaNR-yYik9&U}&JCma)*G_%&th3Htc;O;c=y=<1Kl)tlCpcCa&pyH!4Mz7Q z9XaZ^`YUq=SEcVwXZI@i(db|4nlk=_4qS_+g*K_h0!TMMM`0L`G8<0zA4nD6al z?!kKi%YrKR;HA7i;iIw}aJ@~idwFcm{6kEtzC}GmG#`U4bEh;Pm*^U!uSy!_!{dIz zRPP2{KO@*)9xd<9%CGsD>P|iPdvr~$@`*5Z%hm*8zv0`DzO6>r68$~=Vl*G4{xom_ zQtGf=(y9)`It8o2IRmjRg4H|3uPGW3>}I}j#n)S{jIFoY7x0>eRuW9};PNjRbzq=;j7wZ_-#W&*=BWuO246=yFDd@JZUWzhfAU%^wh;Ns zd?7l-*w^O)pmvRuyC;NcY|YZCj*t5hDu3ue{;G|i1Xu4VA9=wxDJD4d@+u1s$CVz|ygW%W4SK=g#`P1Ounn{AUg-D3`$9T}u%ZG{}P0T;W zpF4Ux8<-`Etxfu4N6(>sWr+F5Sm?^%&MIcBUCGP2IT~Hn#b@Y`usbYHvf78+POHyShB*hBwuN-|PPQut; z!`>(8j0!%Uo?oBJ!yh>Ql{l$ldkvrK%KwaVCUR9MTeafB;~o85a_BKS4#IypeJb%E zJDjf+<-vcW)F*EiH-uBW_Dr8O7oyK+9~_3fwPExp6Qlof4xc;m?2pkmK!59hqf->9 z0Uo2D1wOS&cAu*L`*Za9+Z=t~4>>XZ|1(EV&IQKk|3?mgz)|}D4cz)yQJ!ye`I?AW zAMTao3^1~5=aimn;c894s^#zj$0zG2_X?krbIKF%s8KzC?Br(sn?B>YCf52h(dRe5 zpG5gg%;A4i4!+psE9;k(|4!FVvi`@7O+b5do?NGA*8iyfPrLHT`WeM(M_Zc|rL?kd z*-M<<87Z#%+yi>8i!>4^I~|{yDKtyYw&c+Njw|P^-*Dp`q-k|{);}mdS@?17lj}m{ zx>=4~Q^fU+8n(y@aeN0%L%*DH?NCFCqCDlCYqu=EEuh!W=C=g&itiAda_w56A%k0e z?hg3NW$Gs`)MrmXuX44$E4|{wLLch0-{4Jh&chQ1w|b5U9+ulPf~#D)Ob!I}s?Q4n zz2XN25A~dYa%2eWu}1JvAJ}HO5bC2g3reqYb?uYVD?ZK0we{F&@C&>s_q)R2zh-c@ zX9ntzZ%AqA6P#=RFG^9^d>GvF!M7F{sDIW=B*`s;Q-6!=dr=c`%YTQ^6Sw?#3Qj%W zYV^6+;BPbd9>GKX_Zr;t*Y~YZe_cBo>c3z3g!(^baLZrc-KhV?M$dynPrPJseTO5y z$lyivR}91#`&0L;YeqtRrJ=X=yUpO27(QP$xYd8y;P$?ISa5B(%4(nB+HMv1wi14= zEc-ES&m1Q(D81s38@aZfA27J>9}XJa_O}=uy1??W<skiV+x!j)eVE@Jf~)>s z8lF1=z2-~pz?EL{yNo_Izk3XB^PBhF(Pu=czdoNs{gtQcqx$Q;sq`og7fNzedc~Ir zPPtb96$V#XgxU>m%ehlpi-s;A=11Nsx?TFX=E6>pXJFkf0eVZLlRSUvlNPgwrr9fznsTArbvJ96~A z%iy;BwLORWXnR)vl00cPeBQ1gj#~aKhbs)O?U3U)ORps1b7X=<5V!s06v3(IDVi9^ zIytAF7N073_#7!3-146#IQ6v8LB+%JsTcaNe6-wH4p#~d56k47_&W{0(%@Gae4Ct8 z?lgnjdbfC^>7Q+TYZ5%vU!QBC{-uCk+e)+GO0W1*BiHsz_W7u^%tpJRx8<){{AFwp zc3e>uMOlxWfDXeiqyFzTO6q;VcK$wt7v-G!x?~)T8qvKoR*;_emF$|xgBzMHyHd(L$CKK`Dh=- z=oN1RFqKr|Fi^#DvGoShFDu}4+IJexqGBZkn2gTG;VP-1gEFCVrl5PVl%v{Q?PEx6_ zdmBwBCGPAHGrrIub#|D!2K1^mVB^(|t2eCe?OWTk&UzQrS__;-lv%ofcM#1~w%;`ITk71J2(H*hIVHTsl z9l=k1J09s4l$*H)B}{dk8ILjMneU8wQj;FP9VKjhGM|r!-;Q$g++XZ=lzkW=%PXtx zm6J|+2$bwY7ZmciNolVa3~PYOLaFR3yMVZ|@FiT4XI^^yY-GYP{cVDk7-_=e^03wP zeC9BpI#y8p6To8fR|v1+pm0L@zYRKKC85{Diy|NE&s?B<7G)^^5nwU-Q$>&+dyr8m z|9=WrVx$SnPV*O7ydDgOf^-j1ojv@aHq>t5qQ_&~fEa_SQTul(l ze{)X$i*ny+{Rx|j{Bu8nnEp+YUghPc$G9|>z9i}EHK82C@_!2HWBI?g=o1V{I_96N z7gQh37vGO#@;gQT&4{-llz(B4{1r2Ns!lRTp!}2YAIkp?kspXjUJ%0LnAikimm(M8 zET;b}lD-Q63Q_+4th4eA` zoilw3ttZOoJ8CGuAmu03rDBp5B46n>g0gJ*K~DQ`9cOyJ&&BfJInMNpbIPw*($`yM zaUSabRsh6G0bRe8-;m%ezZv+~^3Zbqy&U~_iu_pt-%$RikUl2AUJ|Mt%BM=9{2Nht zvGV(>$X_~!{4GcvlV6I+KO-Xl{W$-XT!t%7tzl%|MP=?Ca^B$3?B~mp{{9SdXPQor!&3hNS+bH3>qyXa8ns#OAFwG4t&(2nr8H9W zuh$!qK30FdQhtX-AluIz{A+q`S6h%cluh1E$MH8w1|)zyT60={H@|slk2-NmUVk>ZUc4z zYrz@!G;A$a)w;a`cVJb>daO@}&CwmFU_Y_@hN_c=tw)!3LF5kF|8QSRjOXf#SjUgz z;b*cP_#eQ3g+1Pbpc%%0mD#70JPuw}zMrPGcj<>tZTP31;OVkfoic_|^t1!$gUti4 z$0NV3nArnnwgi-)?N|9)VFG-H9=Ge@Rmbmob!%aJ4c6Gx-jHkLA;;zGz}K-)X63IMEuO;QDO(YU7AZbvUT{PC$~O$(VYvDM-N<_j2-~p$kyKm z_Ax$k9j($FxJKe<_P_PUQ~EjG0K1pVc0C1|DGhk{-}E~d-FVZsiw<1t%V7}ZGW5s4 zb=I!0x9t7km)>~R+D|0+AH3=+?8o`eUC5jGHT@d)FHJ@dURCY(8KoTs%bE5$i*V## ztdz$*55p$G+Y6llyM#K2_hUItr42@T9Tvgo8Q6EyR_Gz{sF?-b3stjeNA+Z3BKg4n zPV7f7sY01o!_RC1guPb zCig#sI$jOFPZhkJ)}xX}=x+%V-zO+rg`vQ8$;M4K3dF z8un84{$sxipTNoJ%kQm5ofTX=a_t6oBrl;}*p|qD`h;Zt^C)lnl!lG#>_KN&a*``^ zmiP3ky610X-AyUo|IzCD4-Vq|XRz=5r|OfgyYoL@Lp@E0{7N6hY_Apma3R~4!$(mL z>I0YkL!RD?VSD=1LIL_!@7BJu2E4YRuVfzj!KW28DepqIpYb4U1d+GhZ(5n`I$;WZ zVZX`c8}-=8dU;Z8Tw780)B!^fw0lpZ{8+|nqv!j>%KTR36=l~3`#$Q|D*buJ&+l2R zc?V6@CXe;S{bp&0jl8FI#`~V-o3+i8Wc39|36&&Qza4}4pLEc6>}H*bp8 zo3nL-pW%MAZ}taO*gqF(>U`b&)h;*+A3fA!`hr5Toi@^kpl3ho0AqtaC;j?myV%AS zUUS*52dYnczW)u$@`c3lKTAY9XX`T|f&C>KXkC3_ zD*Bt`CnG1_amtyv{t(LKz4(6p9>>o)UQ@w~eQd_-XVstm;&(yMJhtM# zK>Ml1(4=l#^@+P{V6Vsar1$2bmc=ML`m_Fq^U=+A)cD$KdrrhZ{j+OGkNx=RhR9e{q|>3 zpFe{f>?i}8X)hdC_9#$t*cVO_n|+1I@vXh zKJ;K&AL{uWKt87zlAqL7?fl}2Rd;-G5NRm86FQ;)hFvoErS`l_uruVf9Vg(MMIGhh ze_ZW>WzKe`_p-l7FGU$O?>f{X{o+>b7sF?(vw3y**^}sBo^sE`2`=9(k71OXuOHsC z{`op6&sWwN^@J}1q_4yMRQ`;8?UFa(xjA*$D}Td#<`n32D(Y++`r@PAe%HpI|L#Lu ztNCnj`5k(?>d_~0eG}UJOVH=FLe>3AA-U%-fG35jdy+!+J+FNReHr)3-dc_S!adYO z({tSNZ@vYQg!in`-!`I&hK^3cBa>mRVPM{W}c;Q!woHKyL)>!^i{^S zZQQu_+I4RBFIly=Z)38tWA!G?-`sGHyXtP+e2&|XyJGUDyRC0^XC=SYJ-s(1?Hy~{ zHg)x#)4ulFj*WduciX!5w!WSXHz@G#cQ#*o8CE&2Yv0hbw!K(CuVLZB`3>`%<`mEF zy|xFxt9rWnaOmp8#W~%WQJPa+)wZ#tz1Xv^xS_G>{PP>nZ$GQJx~py7wZ-c@Hf+Qs zUUA;}a~tN)FV=VV_4RK2wR6vfP;#GpZBNg&T^$>HHf>nl!F}A$?d$33THV>UcHOyM zUDtP?1AliP>{#7bY`@##Zj}eV5(iyB;J^EXJj0*nwjHJJdbO`PIsnn&}>cadyMmhwhWoW=Z+MNp= zgn-AgWs^^9pnjh{`g1k6Pr7Y#;g+h&)0c_ocnEF;nXYT-XUeGkWA%!_-Fz|&q8?0)PX_LGo5DfGZEze|wwL))|? zvHkpKH}@b)1UzFlo`2)$-A_QxIX}*Nm4{(RT8Wb?X3Ke>qn8hY<*Yzo`JrmJqp!q0 zf6fAxhdUg7C4M!^t=i2Rc>0n_7PIlBqn;zN@%*@>#|S49Vm6+?<>)ipF`F!Av$@gH zpJ2(-^O()%KRJ5NQdEZ69_8O~^e0ym11Xewj`bve>F8;RRv8NA9%UT?d~P7fL}rjA zW`lW`qsPcT5@I%$UvTs@BGlA>W(EFfM_-APFlJM^)zP0(!Dq9>@s<*VZin*;S00|g zrL}o{SfY;uy*^WIibJ@F;g{#oe=3Lmr|8RKe72)+i{bq6W%p`#&u3ugh#*b0F1HA0s?(L2{-WYL=@oCNBf4}3C^(XqQ|NR_3aL@#~S%0F> z(7b&Rj)mM>V;fHW7=Asc{QnYNb4>r0IrZC{!)HNGe&N#w`egl#8#6#3u04*)JwHdE z?*q5Cv3#~MT%N;cZ;n2+nT^T)A31#J>mWw|(H#67lv}OwMc~FT(34}P+9d1Wbc}*` z<|zLkLZ4dG@44{{_;4SSm_CycS8Mt=H$DLdKS)vfnT~(fzqv69=<$ssO25jL{|r$0 z;Kn34E##EvT{-1*I?}}S-{JVr6z(!!!Ik!4Tw5|bjV-q+INRWza!z`^w+Qtc{2V#w z;buAK8u&8|uJy(>?H0c!phvU|19DV)#diu$eK_x=;chu0ey)Nz77aen;0*@1^LrN= z+~%t!c$lwd!BtPWOy7f)UZ0dp1A4`m3m)dnmcPxHws+;P>-&oVf5r9wCjSLO!-M8m z`CKe2+zS@4jLtzW(yY51y~ke(kQHO!I|;#@DGLGwji z>zZ*(gn+n~38A9kT&u5TMrftrq*tDV`VG!!s|Kt8+Z4p{E;%P3i|;kKmNB7+4PKIS z9v+c%+CK2TUBif+&<4li2Lz{Fo3DcgUnJ)|;9H{$q__E+W^k)NzPqOMbNs3M)&7$0 z!H#m52tC`C#g`gBiw&Q4gI{9s%?7vnY|FuS7~JY<+fTFMUy^f{!=(nFD(7LorU@SA zt0*}6*nDZ5B!0Qj@Str>?<0*W$%)>Nirf29+cx9cg@F9uuEaR@8T<-^Z!`Ei41SB8 zhx&y5vnILK@KN0eX}M7!TmD5uZ{=#egmUYJJ}d_UBz>10m0oe% z9_;hTTWG zhyCGQf|HN!5BD3~juS=dp>ozjoc4o)NDdY3Vjqhtq+L1M{w3_;s_c-sbLbDb{c5 zz{GG*Z^woNyR8eYCy{%wrEBe~h^^n@iZ;CqFz?+~ zb{C*Sa@gTg)3~%EAv5McTSMNa5JrD)4>0`Tv`MxD!|C}vbwBgYGaDdJD+-|Ub2-b48u z7l-n{gPS5Izh3V9CeJ4Q4dw4g`k4F`B7cdbqU^KDakBKB$M@#k z|7v^5?^+C$&msxse>zA0Hg?ts&Hj-7hWY<^j{Lz{K8bCAGXaJ2_sjifznL-RBO-s7 zXOsR)c3hhw$nRFfw4YVNP4aQ#eg)(hroU6_KOjry@?jAPnqH%>l=1_cvd|#uTM=)A z=3lWTIpw!k%5SF#Wc}6SU(;*3(#Livo4g06@E3biNCL7s3;$ty*v_5bSj>XAi}Tn1 z-2a}}=&9y4HZ*!<{I+u|sJMiZJC^WGwTk00x2IZcf1^caf1}sFUX69vN9}s0=jdJk ze(f8uj<^Qvi6>(1^`u>|!al~VyPkbPjj>5NEwdZpdSZ;pu=f=AdOKnF^+#jhJK5`q zHhF_5CwtbdDs1mwT-bgWY?_|M+Tw%Q>x=sw-E-l^yVjkKxaz`o-Tz4UK6=r`zirpL zr>eJiKUBT_C%EqTQuX#tH&t)H{-(nA)>YNpe|%x}uI|NE+cz(+-u~g!tG0inx@!BD zr;_bIK0X=!(CO9Nf9s(HysNjbd#Y-C-$PZ~H-4#V`-A;e+h<~3_qSWCwm&qOY=5{W z;dTfEH^b)WS=ek`+mAh#_F^BP%!kc$Li+!D% zas4q|e+=i`_vyL9wA~j2TLbJ_?BnFIQ+MNAd);NgE(69rke(}?vK!xF>z>1&bI(HW zk6~{o;<(@Ij&}T~?tT{gI$@kzceKk_vU?4#(d6p>(CKr+?q{)=(=1-Q_@j2O!F3VW z&%Md>d=`5;aX%+KpX#2&dU@Qsb$_(=1BWQ@XvA?(r#fPVmP3sDrsI3!?lWOmah$_F z?H|HMWIFbUn*w{PvrhQt$H)f9WpVzizF6cQT=7@*7V)<;~Zf ze&*Q?3$J7NwYM$4%$=B@E3SIidseJmogBbDTZG(+GfMZfekRUH+`doNUUe9GswtN4 zclH9<|Ei{#-2W*oskSzzsJnq3)yei&*l&5eobm0?Hs1b;dr8rrDw!brQlSr$Yj?yL zq;iid(6TIPpUHB^*kJt#Y?*Wqy79_p8CC3M1zSzn`Yx0-? zyTiMTY}yO;3mxODOQlitnNByRC)SVanr7Nk!d4A+Mr;^Z0a!%W-Hb0xtBlh;THBYh z`Z;~<`YFtM9elAD-dOcsSnBH?^)Z|EF=1I*IiYR~vsq4>hY8Ee;&*Gj*42a+W${d} z<($^#!Ke|#zt4gC^Lixge7`8;-cARx_;|EHkce=XC@FH;5vC^^Z zk7_TCe#6nZ_T^+hU6`ExBktu1<3uoa$H z15B>G{gbnPngk22)Mmz6v7}d^C(jAhOqlseCdPMV2K}Z%opqj;Z6VM(*G`7K^!sR$ z=@5u*7XEb(@fgNRE?8_(u%e+;8zHNkegi$y^3)IdmRB9yH^PzfS}N(7KL#H4ow7&( zfmol=6$u~^+ZJFfWA(+ql0@1@#FQ?zOmcezPJ&&Ovr}?cFq+c~$NL%Kt?iGz4+-|4 zW-Emk69j(! zuMCCsjXaBc)v?x|BExwWv#rAW55h$LRD_sq)wdnJd|(Mu#P-Sae(dn(6A6U`Z$Lq~ z)A6swNfxuY`h=smt41=01=rfLYo6WU==F{$kBjZY_YPP7cJ)b?CT62`hNHKuQY<~c zBA18b9DOBDs+f(|&z%1J8eAD-Hd-T&{^UwxAhCV*zUAm;0xC#VNPFKb;!hpD_Es6r zvzSfS?>lSzUS!AC?}Mw*uH&Vcl2+`q1RDD7Jav) zuf$0KH!&HZoPE~OSK^-j>Y#6A5v0d+tgf zG)c|`Vr>q!1^g)Q}g{$HSHjQ`0_pX@p1#;!=i zSA!V+0!N=cr}TYdH|T54P7Lmy0@&X;eX{3{o;~I0v*(NAXFzbRdA>A*j^PWgoQv+9 zKYF&<;WJWP-vPLfZ>`zULGk+>J~O3PJ_RRNODh|f!aouCoRQLN`FsONt=Vr?_2+wB zZE9JU*>F7R@T|Ypvi(1`;FXpdlL6MU~sh) zVT8V8GGA8z21%=Op%7v(&}^XQKhSA9bMdARmxT+@%PE)CjliQ9f@ zvrrJXZ{N2VJR4nPwk4#uZ_`g0`r}inN%Eq>-)Qg&NY6k%+0!52*9@LL;Xj87WGiJ#v3vOE_#!!c&3%9YV%tlvF zTYDsTXzH+)LX-&kaJf-TcSm36_^o16vzLlOOzm1&`0>57yp5FZpEcjvx}+8_uvBpt zFUIa=firoT?+stn2Bv-P0%!g*-y6ZGJq%!MuLUOV*Vx7^aJDhQu3MYuE^u}-!QNYd z{jOWyXa>L7jf-3t%yYcm?>zsD+pvdrJab_NHgB%O7Bo02_dC!1>R8J@W{&jyKk&Sg zM_GB&)BWXp-1ojL3Xiq2fHiUM8%IEvl**{G3wb=IKoMu;nU`L_(`bS)J;z+cN=hI{ zwP_iWYmOP1PyK$RB|zg5y}K9zZ>e+PhA`prV9<&c-2a!6WI0y(Npi;nx5e~$aZ{J$?p z{}GX2AMh18MVBLeO#YC(pbQBm<@5a_l>ZtsAIm@1F}k4i{;IP6v4%04e#$u0_vWOZ zI?nX-kolPY#c`&859ng))uyIVGcL!l{NIK2vGNc1gJb#gy-dqf+a>oyipl5qU50vp zNPk25+W^Gm>wa)Ul9KZI{ujz;rx26x=i#tsK9%fGLis;O{l(-@ktsaQC*|`!GnD_P zobn%%{9iPNeELL;$yb{yE1&PPp?vy+i{<|rk+0vSRgEzJcOfE{{zXZ@LKDg{On(RP znEs_m`LRn4_5Vgr{VkCPihie1HA4CPo)FW&eVpmBt}&XvU(z?LU^#~J`TZxBf3-=o z^~WL!^Z%Kg{^MbhUmQdJMLFr8k@WfE1H zN79c~|Lb$=5BsRNFxLIol~aGck@kBAIEMB2K#u-5k5hm80*&Q=aGd&Inxp@=i2n5v z{lA|h{|S*l#g$_A6Sg0IUy14ef}}5IN!?kPetk~*$x_f`rTZDB!sg9zG3<8%+ddmaq9n>9R0)nQ2G4h zcfnBq_viFK_41K;toyeC{S5OT+QczDuo?^!GdJ>_^k-alW*_ zjKZItFeya*wWib98dL}|6hm2J$8QsNujoR3O8mj^ zG+%=QxN!C|IHu=*ub2tDUOJn0997#9=k^O5flUX`pTtq^abEpMGw86#M!HAJU&B_; zudNqbjom(t->*a0$^*l`Mb=it?M+#rDS-36<=EiEx$F;gGPuyC5EQ@dDb`?MTK|N?Xh0gH^)^qEke{PII zo;!q=>C&~|j_0z}Jb-jx6*`e!DwAExWIrQxW67qxDbhd>CtKJ>5BDSek*xLpfO`PQ zgTiq93iwo+SqtH@Qe$~hhJaH!ynYXpI<4;!<7y{xg5mR1;Fi^&B;P>jKi~bsQ5oZuJ$#S*#=z1 z@K5C6^fM8o|4|M-*R90pm*n9&{ONxx#s{zqTq`7>o!#{W!MRq*;sPh6pQaZ$T6&AC zOs)+%-Owuy@tFqKc0_!Z!S!20$VchM#5m^BTRq=m=v6ND(Q`(R zN6)hipFFu%&)J5)DCbp>TVrt5fw=8e8VtP|3MZD2y}KG;^V=y5Q||{zkge zl!Xl05&|E$DvNW|s#%J)eSXn~B5o0a=VB;V`Be}ReC;}L$k7GP4codZBfT;{(#Y7@ zQUR?JD4ZqFk+-SWOhLQZRhxT>Et6P@t!gRb68M{Rvy~`ZOkB>@66?l{u`BP&$W<+f z?CQ9-ZS@T;o;)&5%-QcNn_Dhfz5tes0z|N0d2O`bqqSO|+s-e+%ula+HN}jXa=M+nW#cATJBN=D&Pe zP2)=GS^3F?^2=la_#ZC4J|{I~ zY%K9?obSBYTr2NMW>wp%kS9x|K*svk`--I3bb71`D@r0L%Z5#of5~nd#c#k2w9T*~ zEdO4_$I4&*&kajrwtv1YX?pE{A4U35Hj|WOaHo1ujUxWT^!V1hV4?qb>wX(5&OM_3 z&lb#^cf{X%hgeAxO72*~J03O4zVE*Jkq4ab6JR^&0|-a=E%q1v-IhXG-Yf_9JvKOv zEHK7-X^i;)>(T!o`Gzr*b2YHm`2uXTJfT+5j6vgMXsk^qO;H@ha__M4q6PhjkO%PmJ7;C^D??0)8A>|3a( z|2KEA79}44o;y^2JNp;lv2RQd0T25GvS9m);d$Sf7U$5D7X!c1*mq|3M-2R?WAPdf zJNr2MB~EqWw-T*elIl6XeOP)eZ_;O9Y_mLt^vo{<=}+{h?zbrCtbf~zls|FRnWPPd z-qzYQ!N>b;LdWvqw~3n#AItwR-wwLl7y7sQE1MU#yghiCXQY2AXY6JEb$(q>U&q|b z-}&xyHuklxzRtdBl3d=NN&jy9I)0cJX(r3wlW}!qFUjXw75Hil4t&9NKk_=vRn1&j z?B02`7NoFV$Kg+rCLCXq%}#k~)wvC2jb>05c+LOU`;Pm}80jaMN%PNl3;h!=c#oAV zi1P+%#9BfeU&r2Y^WJfm3O~K?ls#qH!22~OzcnJCklsT&#%lu>E5BCY4B9XItIGVZ zL_|#fKtw)!`%wOTU@`f(h(Nvn<AGX20z!(nrL;9=w zD?mMC@^wAq5+P*$vmep)TK+5(%GY*+Qx^saB8>Hp!FD2~j$VJ>7aO=oXm1iMBySa9 zNEyme^;ekdpUqWSM*~q1+OG@LT6geE=7-?&81a9V7G;`VxFS!bkJ$pNc=nCkrRQ z2V>prrvv|>(6f$X3jWW+zYVeWW8=f~QV9IAUH|{@Ca?S5gl(f=>a(6leUAy&GO)kW zzTqNI7x*#6S_im)YhTY}jMttpRwInJ+(JVo%vQ%=9w3GXPh;;g zUjuH}ALui4jpLKO<5*U)cbShkK3Qku${$#p`R;SI!zti`trbiIAZTa3xRX|5(YlgWB8*v_@{I5-^jrMyTEp5 zwdHe+f$vHduko;ZSF-Ocsw3ZJ?EIpR+4$~b>9sydug@>CRz4xU_S2;2_c;yvjuX;1 z2?6Qt{C!dID&V$Nt3Jdvk0fm{^jRy){JoIgzDue;|5fi?cZ)vcZ{?2hF1E3=ZC)^0 z%l9LJ%ja56L|@Bl>>lZ-a#PqrX09}i;6$;RY)x^G9cH#Qr6dPCd74IyclI<*Q1<5M z@_A&he=uro=WcH9g>Um*`@(0kF7Jho|1a=G5OsV8>bJ62Pm*EjLO+Fg8-hzWA|v*C z-v#--{BY?fTj4m@{zBpFkeFCW0XZHD-bMKRg!%k`*n1!NJgf3<{Lb@)l9p0J38nlq zPoc695t=k@gI0M;0|cm0OVz4uNoWhHls0VxR>c`C)9P?5qq@!k24ype`mWoGwy$gk zWm}#4`{87Wikbq`IC&?&6lnOfzTfXT*Y(`jbDncIsiNYx^GTljzQ5->*L9ui{JGD4 z{%V=iy5Lv!E!ZFi(Q-}sR4J7I1z@rGcLJx=_nLpIjQ`)jBNl%>@5#!KeG6WX@G<$f zh(N8cvgG$<$ln@?f9zZEf(-e)M4-M$v*Z`y5sUxshB~ zJRC4l{T2QZZesD*wON~mkn!jHUBheqUk%}*YzEQ2zP5@db!1r$!{b}@-1&vnjX&Pi z-0G<({w=!OG$)JDfwj$Va=fbp8g$~n7XQ|TX>0vr_iD?S-^&8~pKr=v_?xl;3D_rz z$os5sN+F3}*akeDZ$v-$FRV$i9~Jn#6ysgTxD0Mv)2Z6AZ^Uci9s5R{;`o?CowC7u zpz@pVHI7e;J9`5AxeJ%#h7I`GR=oFl!d)uyA3MDAo9|JFSAO&HTOjsr_s^gY>jbiR zWd{Dv44m)e7$3mS{m*!px5KaM+v||uSSy=#z-w`HWW)>JI^+fa35k8Y4GUUOT?s!CtTSo zhAta~00hYCN{65~D$|BPV8fbO?t{A)Gzj>W%I;&WCIuQ2|kBUZ$}brT)`YC)iw z{9A;X*6+$Ylz$F9V)7?C{`IFKKg@%>Mc}9kmTOJ${3m#h$^UhYe=UW4+Anky9sk;j zfDE4t7<39S5a40_x4=IZ|A~%&eK{hVA}2on)zW-;bL2|?4Nl7BdVCG29{N*kWAb8jgB*z`{ana(+ zZz>~rbnjnczv#CJ$1@KVe!Opy83-I}i~Y8Ii>!z3V)5@3laKc;@($3&;y=-Ek#jTT zPxM=a-!d`z6a5zXOOYSu!HIs0+?65!*Yz#(HqjrKGB?q05&ahXMZZO|zQrc`E%Gq5 z4rMbUhw&{k?{LOHn&-C2c*(@aKenlgO~5!gfo<} zmZ%$Np4Uw7+mrkGd%txb&I8x8zTx+)T3>Wn@fuI(efe^oN8Mgj^^K!AcH+FL$p)0C zH+3Uu>zpk}ahnn|TguYCVL(P5s_38QRng{wna(I1YFg}5Qodfn?HJ<&5icN#`8in;NFG* zUp77aegk>&a712&IKCVI1qt+vrf1*b2>lJv-i17S2mbX7@xN+3KZ!WriT|S5_`hmA z+mUCld5kBy_t3ar`~}|FY$?`(+-_OA*Ho{1-*fU$lI- zzs%#g1aYLR^_SB3^x?Mq1|Nd4WzUul=ZVPHb4ACKt>=l37w`VVko|R`9Z&Xtp&L*3Db-BGiIp9;JL$%g z-6M44$=-1ovhSau>?bBDyH1AC$4hUp)>X-yGx$`_L%!FssKi$|eO6@f zshlhDXO2%LKIHV_2#j~-@v59#;I|~I#Q)jxxl-Abt+~m&9Slld?&dK!*jYJ8VY7?Z z@0Ezl^|7l6e{7uNo4 zaq&uVjaR+nlj1f^K3QrX-969j$QfMYm2-S5=@}?*+QZ85@*3VP)5o%FzO+MU3j1^W zmZyNZ%bWJC!vEybJ#F_Y&TBqN+p&t@?dU6UPoK6|mHu2uUx|DAE0wHt^=rE;aZjJN zKQ+MDoINXXPv5CzrR!ymz7i)vKDnwyr#B}$`byl>uTrwo^#!z-lB5zRnoq9grOaLI z(zg;PQNDCyQySz9N8gH-$9DkI{NgxM)AiTo_?n&ezn8X?+(Rzo^NeM ztditWU@`m})B`cR8Ra^L-|h5I+w&^-45v@pK3DuXho|jr#d)6N^dxORD}IB+XP082 zIQJ-u=`)g{|J@n--;}{8Yfq#5Gx&cvga4@+{0B1l@Lcd%y#6I4z5XSG&!1-S*`C4Y z%nUt0pTYmV8T=Pz@X-Y1cfh;#0oQ7|=Uz<~R}#|Ss1E_X#g&BgzpoDgy~UM;^nLme z&|6$dNdJC)2-k)c?c!fNQnfGe1~dNl1T-J_Pg@R}#|ykv;_U7FQC| zZ_|f>-r`yD&9bMmB>z9rhk(Du@!D}Nw7<$_dVN}Gc$r9g4H$am6Y{s|HE8Gyav#z! z6rB1D8TyIn{~1F+5&b`F=qIB8=M4Qs^!Z@!zq z`Pi?jf)J2ThZ5sz`CMgi%V)L03vy3B-3GUOt~I#jW4|&ipAClI^653W<-@hp>I!m0 zeNIvkSIZ}Db(h;&!!nrO|5xU74kIe=aP6~H!qGm>$^_Sf!G9I}PZ9nTU8|{Omh?3e zmKW{8AfA48CdpdEf1081GkE%SnVyqOK3dn2bimNtQK5ScZu95k2DkZB&kG>`g3$1y zXC)Co-QY{`Oh^0-f9rlb4SuG5)BCdqxApVG2DkMyI$NBhK4tZ@!8Om5aJj*4{d}Xr zZT)<=!EOEgfWdA3e8AwgelAp}dS2yk-LKBmqyDyj?ltt?hW>Vg+xmI0!EOEgq`__d zJk#}e`FvvQ=Qe}e`uPz1FJU8FoI=@wb1TzbZp|WL^=@v-@}8UJajmSeF6ZV2Vc%Tk z>;#wZqYJOOtrS=RH#WcP7RLY&Tf_qBVdy3P0GST}c ze^(wezfG{;4olq8nJ2VfkH|TC^)PvCx zkJM;UN-7@pXi`}0_9lN&j~Fg}qNwzV?9!(uz4x{_#PL4ddf8>orsmeO^@ckR_>lJ0 z+!86w;z?q4{tw+7MxqW`Ruvwx7qzRxnKNXvpRR4@!Zz%)Fw!| zb~UmHgZkelcaI+g!Y<$7=zg2sZ5gAm)%`ZR-zJYZZLoPDqUW{{oa;9dY>r5Wln6SvgE*M$fzzhOlwyOUxDaLc+v1Mp zn(Ka>-EWisbtE{P8hW@Rs^_}jX7~G29$Nh%+A-1;Gp#3_cd)=euC*T(fYAIZbA0AM zhHuJTvFs^*kY-j1I05_*6@F@o(%*#Prz1SEVn8>u!2|jo-GfKQQ=>Ce=r6%IRZRX8 z@gGnA1qdIL-yV_ACSxd{d!5JR>-XDu^0y#-O#bGGe5hI>e{)9sS4}Yfn=;}*5RuPO z(J=m>&xk+Mi*CI5|8++EACAc9cW@|wN=E!|bkfI{e?&(7Yvd!;=0A?|hVp-qA%E)x z<$otberrVjF%kKl8S=MJQ2yI9MKff(w`M+P}tNrBB<#oO1^)md&^8b#A z{Nq3y%AbTvAtwI;GKV|MUrN7}WnC4*$K>yg$mcBFQ2xI{cuf8aBBa3z!+j|K0R)c8 zKM;}6ewtAJof+j%&rBb${QX%*`D{-OLH$cf3WoqXZuX~9O_>KI$}k78rL3?e+K+R`5()uzrHT=&oVrD8_K^mqyE|) zk$uEE}UD5rfKcRe{nHH1( za6~?B8Ok397L(s8^2ba6FCu(QevKrY&3|V{;4^qWAQ%_kI9te-g*E5L5%l{m2ipk#^k zF#c>)#^mpqp#5tRJ|=&6M1CiO7EjSS(xhWuJdcq^ad?V-r<|-v)wE{@-QDUoqKp8&Cf34EduG`JBHH%D*3R1lYe!F{pU3K@a_KM^55@8 z84Eqm90!3_B|GWo~a ze^o^O2Q%zHa`eRF|Nad7FOA5*IwGHiCszOLoi;J~&u6@Uc8L5=&&K7y?uh(XWys%o z%*5oMkzxM>5&7?k$Y(Xj_)Bs1Lh-w!*5B?aA^wK6bb9?Od4GB|{e9!H>Ak(vaEkq0 z-v3}z=2l4fZlteuT7M|^M27uW%=Hw*@?!15<2w9ncpblb1pGtU3^_c5znBLodQk6= z;Xe$2PHRhROCfdRpMlyU>#`XojX3jwXUYUId-W|d2=n6%kSc$_aVK@zn~#K`-{{mpOBvAiH`L08gb7B_lvv; z+~y+XPh52-=^R6EQ|%PNIhWVIyOf@|<*#!gh+FbizkaQq--Do6yIGcLSU;We>~-sVSD$^+Wp8@*rrxfV*9Kv( z_cILBKr)eV+{uF_CCq%ZclI3KbTl_l3zM=ii^$D)ax15r8!a!2a;nmy!poV?Xd9Sq ze98~=;BH`aqyAF*)$j`J!c8pxzpitL)*mBygNlR8c(PER;ZzjIpWH8rK5AcgV1L7H3i*rJJlgFI|rC`Bi| zh}{95)wki%ojp{*nK{Gxj)%glBhUDWrCSDR3D)?RfS1$Ff0J*9TG(9cMNJQ4MM(?A z*rr+@VDcEf+zj+^+WZ{9ul z@J-x`Cav?6rtG*aSF&TH^*YBm(qct>^jF<7{Rr$5wg+e`UC%en2jjweoX`9Zb9~W+ zvA2AGT35isp~8nbGz`zVio}Zex2`CJ+9u+6B;%ab)Uog!L!lc_zP5?NH0<`l$8FQGuQ+Bu-S4_x_|SgTMfFkpv4*1lYG>R! zx0E2T(pt0AP0UVkP_TS%Yv8q#*cgIGvjD}dTT!>j)K{C3>L;?MCex=#1&`yrSY zHN3|EqrgJh46<3ky`nHL8Ev|`^A4j;*ED~Av+r1*c$;o#D>d@2=q|-%7OZw~OY+SZ z-%~aC;^O4i(fp*LALox4`nP=b(Bt|1&|~@B(4+bKp&#LY^vGoFVBRI=_7~r?Xb|CC zJMdt>8sVo5zOeqN!RM}-I(VSt=)q^+GHr1G<;M)ZxFvUM@_4fT`TUVXW8nP)cs~W+ z&w}?e;C&!pHS{#jW&F~X`U4|da-SR7lK#DW25JI zz5f>c7`}UYacp2lvJ2lbyU?Gr>p8@4Klq@(r;hgr^7V~;Mq1VV-_bl{!f$4Bu zajYFQcn6Pt?1*I7=X1%}v-Qb6Bl#JQmOMJ^D|rmRBANFXbYlGFe;cm1B8zT2AJ=_| zGx1^QzUa8VWye%`8xy16ov>L=6YQ2tcGXuUKP~25Q}2+xx?m^ryQ!*w2zwc>lx^edFEsL5!Z7O_P_}V((@#r##=fL zknX&rk_~-T$#U#dx}ghtbbh!vxKHB$9K!ciGr#ySI4@ub@A^9G&#+e^9Y{-@&z+N) z{>c#RQ1@NLP3iUlBkf4O&e35F{!l;iX#x4A>yL_qpFBPJW+&`I9s|(p1^AC5oymvk zG?Jg`!s#=0?M7a~9+=18K6Y@|ffI^*79Q)*_8dhXn~Xg6ZscLuc0 )=;(er0!g@ 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⋙%WS<~He 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%0DcJbbPN&qGvjnt65%KR)H}doMYG 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

eB~C;~?iRjenx>%M+h0 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�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

nGoB7!%25 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͠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 z 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%0DlM|Dy2oIEf9V*X8(c6Mh~K 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

qx#ed9<|SGBY&dt zSDV3)H+W})e6?p(zO~z-M$e5#&UC2@fVAEnL72sN8-AVP_X&=CExyO_XBd9J;amJw z!4YqxjGj8~1%8;pZNEI);8l_r_=g)@pZfqm!r*zsKhoec4W2W&eNHsS;5r`#`9~SN z&B%Gb!8;AE@7llwc06YLh5HQOwpZH?eyWL+Ck=kI$+tfNf6?G}{P1Q1UTMaA_B%qO z1&_vmPVi`a+I4it7(MNH62CE_TdT>p%HW*_A7}8M1bk-#-X}QpNBn0c<5vaOdZGAG zu{r!c-sD?paNA#x6g+Al#1-cYlR$hJvI0$gWGk#V?_b*ZU0^+INEdDFXs&ZIODGg z2G@7o0NM7x!RS+K_{SSLGYx)%!G{VCeMT6(((v^iIzU$clM?t74Q}}-8(a^O?>$C; zi|e~}$XE3N-{Ko^kv7=*OifJZv*;Wf@LGf0_Ns($>Yc?k->96?PCU!E@tG4mT93vG z9*s}6kMi#nz18o^SKRvD)}vaZkF7^L41Tt;gZ7&!*9?QdY4~G|Uu-{hj^S&61ixHu z_(}mjOHWAlY$N|XgKPf|ea<)dF2lEYe*!*?(qoItvHh==Q*l@EfA)cf~ahmH)itH&O`7S3D;;>|o=>#*dAY|0zB7i^EYp z75`WDR5`Fi@z+4;8G*5b#Z|uAO~(gg4IlUKiq{CP{E5;oOpWjrpBv#%6MiAWS6s)> zD!)ef?Ge7>Dw5xgB7DWWB77Yut&i{(?~d^GJ%No8zT%rB{PU!| zdVi#GtGN0X?FN2xQ#Wl75zoIg^-lc-+};=0NpSM)*>=p%SIjm1#YUf<2Dkm1 zj@vbEAsgE+;j14V8U(uqSN@BVM_+`mxE=r7_R5a)ZF{BfSHceW8vX6O?$-^zLgEg5 zJKor0@J|~5?lQQpJwe&_7~HPU%t~I6KiTAK$J>((uJ7W3Z*h%D;Kg6bq30JyzQuE5 zaPaN@QMJKsT-6!e#=}g5HyArK8vJsjzqVJ%*UH~u`1U=iZo#APRcZY~KWzEhZa}_$ z4@lbw;0ukOqfNg0Z3IBJeYn){XBqyNO}UmE+`b>Q!r-=EbO^3-E~km#4d{&UKPK_C zMsTf1iraR{)(f>8>|pD~Y>@-pwm+=~UuNuJ%WK;)Ykzy6^8cuNAMmQKDsB8E7urB+ zn^M}+mP%+-O(~_hxdDQry_C?VEiDmZn<{z}k_(B13wGr#Bi&hzB#bKbqy zde>h2@7d=hIiT$5=ba-8*LF%7$MIbL)&xR=qo4OFe{?N5S1u9%sN8^U zE&p+aS1Vp^r%vJ8j`mYO|N3wpXDzSmUE|^!`Y(Tz1YObiXXM7h3z663j6CC`ece7c zDf{J^2?w@kEni8n!5>lMj4tmtlpQUfQu4LRjvjv`{`UAIahCCf)x+;MM81>9A8EHD zFZdG0tH+O{&w-mlr;onyHkivC&pJ815=i7q6kCJljXGOcb2Nka_ z?=gkz@}5$-{yk!;U-9z+jWZw}J*U*2B zk7EVwk3SV5z@&Ym|N9iK+tvB1owu;Cmyg%2zFpDFxBg&$P7e$Vndh3owsU5|4h zUU*2o&>ie0GA{KZxI8zB{Li=#)LHU^>-|Puk8Lb(x2q11KPk(;_>;Eeg?F_jFSzVe zA+PplBg@1=rv0Xn%%S9{thd>RyHG`jv48>jnR(q#UJu zf%T|yna5Fnv67#plGpu6#wF<&ELQM$9r6uCt5sgXI~1>OCu20@1gzF?Ni#n?Pr!@K$9<*GpRAFDv`~j7xkbaGun!*cW`WvU6P7+3m5j zhjH7^K98OMYWo=l@xlY+_KNbS%%JplPIR2-Fpl!NUBwxfIPh)wceliU!KFQj{A8|o zsV|WiT#vW9T}k_~{ps-dlVV)#i$7Aowm+*adGV)@apcwhY*e^z=TeVipT&Y9zOen# z^{e~!Fw5I^j(F@GXB_?1?YRN&@v!YQGH(0R$~fB5{>b{uwzJk_r(fC8-<54uxNcXn zF0$?K^w{6UxX4R=?Y86v*Xt`?j|V;e9J1_F6k(3A>vrY)dx;fFUdL13gGqeEPv75BtY$kRFMi7VH)$t=#}%)Rrye&>s&Pj8JC;lPSgjf8x#{u!j9tQ-M{%*IoQL4Y_el72l zQC|D6`i+yAt}wg0kaK>3fU_On^ZYkarDb$Opr zxR&4N!S(u6){Gd78V(5hbJl2yPWJCT>AzPX{Tk)Z_Q>nsQ)^lCl{ zr%mDKsD32tLyTM2@7XDN?SDVx;*a<#^MxHxnJ+|M{M^WPL|*XCidXx;L*d$=ogRO7 zS@y-x-Il!Y?y=+re}-|py&Y1x_DAL&DX;L#`cuj)_)(8PFM9kru6T8P%Ge`YX6 zqr&f1^Icluy1r!mx9dyBf4jc=*pA4{H%aRl7kRA$`>Lp?~L0ldBIbR+x?|a;kvx_jHCT0)qLH+__Y>3 ziE(UKZ&7j3c$vak-26S*Kdbhj<2GB#OS#a0sYA3O?MLDucBTE;aqDLRw4n)Y3H_mk+<#FcG=2(RtuM3yfUFZK8{!Q)Sb^2Zf7jHhnr zb;=(tukGmPG99=1s^04r?@bDq_K&=2)qbQsAg=A`{;vDo0Nc0gMe5707pX6iKh4}S zZiu|#Ta^ELoY}2#-S3`J_|2-k3{f3L!iDtw8;C!Iw% z=>G>4-l*^Kc?_Lg^wCTH)#Jsg-=xYI)zVD z_{S99pzwZ$uT}Ub6~0B`GPh#(K81f;$qy@B=3LA^uJF$&`I518gXNMr0+C4y|E!X) zRQM)^*DCxGg*PgEv%)(RE`M7cvo|SxP|5F5_?HxZK;c^yE|VOV>njSM#*-i7TNNHx z_;!UiC|uTxnBA}NZz%aa3g4;l;|l+_!b`@{4f?Z7;gb~pJ%v{)e7C}D75=2c8x<~d zJ!W?({0BUE*DSTMr&nSG{xpaf&`ia8p6#i3%_bGgz!gnbA=L$cd@cjy( z#ETf@{guKS6n;?QZ3_Rr!Uq(7Na4E`{;a}}DSTMrqt2%r^yfK+PgD4RC_Jt3KP!B* z!vCW1BMN^(;iaW?gS>xLc#XpUQ{hbte@Wq+6#k0B4=DUKg_rPR5qVE4e3HW7PgUa9cO3U5>R6os!<_*Dwuq428}KBVxs zDg3Cy_1_(u$PWqV|1>2ZSNL>=uT!|}A!C_$D!fX`A5?g?!Y5rskwV^?3a?kV>^Y<4 zI)%So$!}8l9EI;t_`4K7q;PpALi-04UaRCMU5vT(d?b6sjm_$QV8gv&6O;=Eqr6$&3v_#B1H-wr|jdWCOP^8E_`oWeIN{2vs)Q{kUi z_%jOEzXy6s;a^nprMwA(_41g)%N72(!fO=%WrZ(L_*WI)r0{JDPb>Uu3h!6=*A>25 z;onsFUWI>4;fECd9fcoL_;(dPY7*8C)$jKeK2hOMD14g2|54#_h5wVn8x;PO!uu8e zLxpcv_|ppCtMDHy{J6sZS>a{8nT7THFAA?#_|Ftxr|^GO_!5Qxo5K4Q{tJa~R`{|5o88Z^_il?-X9C@INSgiNgP=@RY*;UE%8#epum~6#l%zcPRWn6h5Tz zKP&u2h0EXGz!FX5%|xu17nJ-oh5uFIafSbO;# zNrmrL_!|n}r|{DXA6EDog&$XVQ8Cpuo=eK;8sigDc(uaiZ-k&^ox;yn@=FvxM&T)i zpQG?~3O`rjn-qS&!gnbA0)-DL{6dAFQ20d(A2%g12bT8|g_kM(QiWG5{BniYDf|kB zFH!hpg{KrgMd9ldewD&EDg0`M?@;*L6h5TzYZQJ!;nynssKT#P_$h^7ukg|r11AC zJgxBeD|}Gl35D-cc(cOyD!fJEhZLSv_%VeqSNN!_Gv#Vm_(X-TQ1~>3uT*$k;av(( zEBqdX_ba?d;hPoStMI)FzgOYM6~0E{C2!4?>wbk#Quv1y-k@;#))6giQuu>Peuu)> zDg21SKc?_;Z_D`8ukZ$ie^TLX3SY1AwF>{V!Uq&SpztjU|BS+SD}1BE_bL3d3LjSZ zCWRkY_#+B0smPR9z7a)alENQV@^uOyRQM8we@Wpfg>O;#W`%E6_)djySNJmu-=Xk> z3jc<}ORve4OWt)NQm625EBQW!?^5_qg?~@shZHW~(4zfOQ}Ime`8`U$QsF;Pc&);R z6yB)tA1S;;;m;_%PvJjN_(p~ARrpqg|5V|76fWQTVtMu}{O3ykh{E?P{Di`Psqk^v zqBV-o0fm<-{5J}(R`@}M*D3t>3SXk|LkdqR{8@#sQ~0pLH!1u%h3`=K5rq#a{7(u$ zpm2G&j^#h9@c*skPbvIGg_ll4EsER!QFyt+k14!f;eS(jtHO^fe6_+~Rrq>^pHTRq z!rxH%0fnDd_)&$QQTQo^7e%OycrLw;uFX1J;pGY+t?(L!pRMo(3Lm5JCWW7)@bwBm zSK)&S*MH9;=;`T5w4_%jdXg=@-RB#v)6*9(UXWOxOjjman>&+< z=H7H$7s;o)TT*L+mC2QuSPIG2sjlvHVnuRId*|}R%I0*kyS=$1k!dZMw! zh$0#4c@2%=V>+=4EGz?_&?gOMd&?@7iS)`;qO~oN0yk_2LEFj?4MSlQsqXew;IvT; zGtjPygvxE4Q8}Bz-lYzn#q$?0zGdMZC<0;VfjD4LY;Qygyo!z>h7Po}C0kaAe=b|O z0>;N&I6IW>oh@A}v9fy7-O1*aiBwldd&`<&{+;!S+iMesxhu5>YR&c?vpSRaV$QsV zME$}Ax6HdcG5^lF3ye~jvtZ%PiNy^I7tI%8;}s!Tm95ET&AlBE`Q~(64;ouE_l{aq z&cxC+>0|~9@2n=*)7G1A?Yg%Ub&c%>3m4w@o_c8H-O%t>o08PFFHiQQZ))$vwwP0r zR5H230pAPFJsDahk2|`WTOm?i-Oh|s|{eDG+uXZTXSb?Ph0bfWTHEr zQ!=aoEM2-AyrYJj73WNz741w$ZskB;G||=t26L4-BUh=pwbiZU%rK3x8Ag>vOM9v< z+1=3&Y&f!;(k$=p>P__|vcaDA<;@+-8C{4KByl4XByM>u@fkq`BQZiYR*)y#bSD~6 z(p^3wbkr$hLI9l_Mh9)bC)o+@7&>qJvi26t>`p=hh3H7%=vk3y@9Y5q*MMoN4z=y7 zYi?;trm|4aU;xH}3%#bE3SA1u^xl@V$xz|#?CHS?q@!!OorB7D$B1IbNp@mK?SXMQ z3B?3&VA5D=E=-5Qh|o-j3kwLtvhL>Pj{KffM>}@=TnS{pw;3&mJrt{#W`Bre56lrN z56QCga@%!#Cp6FYbU@)sLyfF7ZL}Q*oKC=zQm$2W!sr?ytxQwtGQfM<$i$-g^A;|u zO)Qvu_xweKxC}u>$e4}c)8*hvm*L#yj9GiFOs`2L(RJN4FyvT+uypIr&cSlQkPJCA zx~AJ(R%A;+lK|rOmMnv&?#WY|XH|1YJIq+n+;cRrn!*nLVlr;pmLh zH4g7RW*)4+ZT{VcMwY{grR|WFX^}D}b@r}=2?3+3bFsa;b5IX`bm!*eWH$rIu1vrZ zr908nf_#}=sK%9DtDt3AI7SO&knDgKpxj3ynG(&|tuw_(8qsu)Q4{$LJJ$(}`@Jb# z^e18P^GYRP9_&^U)OulA6sm-kX^%gZ4w+@$$z)<_@3LjdZtZC^%;ha19&*s6q$7vE zOJz29q&i_->q>WlsqErmjb>$sPKt6@3YTI|#V{*N34@uN<3^E$+HRFnbAXF)0xa82nP9Hs7f$v=7ey1!=)c|3|KU;6fI&pom$M@#8o=kF_Nb#Eql2 zZt1vYrP7^j>FRDxbTqF?X4xg@vvb4F1fvM7rC~7euBO|2dV0}dsDjajU9WC@prg)V zWu{s47VR>{b0L`F~{a$<4{eNoDsGOln3bsRM(FFAfQyE?1H?$ zqkd+dgqGqSCTnH}57Z9_$IQI0ys*cu%0x$Ud2`DeSqkQg@)}WxN*ZC96&5}h(JsMj zgJ!b{p;$2A40AYk;h@$o6~`=z`cPHLwM}c-+;1SAfh|?xx zmKJQX_O8^0qWQw?W8u;^T4f7JsX2t*@a)-@WkCeE1B*ZyoZQ%pNOqUtt{R2?^zP;y z252*3PH39@CrmS>5@tYnb3wDSU?QWUmKCuux@NwFu3?5{=xk<7UTGn53oPiCHp8|x zZr7_k3(qYi$@5whqi3w45xwd#QrN*+JZq(7Fg4>~(K>rO$X_#=gLBF!jxF>ZdUXcP ze^pWoP?z*%a+v+v*qSZVdd0R37S%wOiG<0-GVm~Ga%s`%%nHknqm^0m(Eylj6*KA0 zhcDN>&TwU#6+aA>XfSL=v0M~KU)9?wkBU~h}Z0=rRZeT)Bz%H%1&)B8LiQ6LG zsTDdb*cNcy17et-q31jDvGlSG;ddv!o%r^|0x1xV3=;!`Pw(tXC#TkNSjtNSuMtqpVMd@GFk1$kuQFjK@tX8c%2${JLQT{`6ZCZ&b1!yusjYI5XPm3 zD-W$&d6_mY9oyIi_RJ<>h9z5iB+0N*N=Q<$CEp9nAlWL-7!5_yUIAia5n6-UtzK!i zMDy4!SXiv1BhbOZ>Dv`gaX6ox*j(8I&pSK{tLA`aJXxa2?+_fyD1r4lvIJ7_!(9q` ztavN*tzuIj}%W9KcCAZvqw=1s}UOo_1bl3d=EZpU{?lAEOnI~^_XWP-Cc zel+2f$;!#t7TF9Up<0R)HLPyU5TmLdqh#e}2Z&zy^>nZ5P9$4e=&2f3?yw2DoF1p} zJE}GCanDM8I9t{ZD10K+nO^2?{Srk?<-;JjbjO$AgN^cO4x2|2TT^!@HzlqOm?@! z8ac#Z*nla#7ZfvrM%PVyu|d;_&C73ko8`*qXJQcu<7OPERVB4WGd`)hR|2Lzael_F zmgY|IKWwfx`3PAs=|Q#N`%?3AbHOc(8)V@k5yLX02e>5TuLW!Z$c9HXT;FC1=@Rm5 zL3cinKd^1!=a3GP>V>WAo}}kZiR4;!hSlTA61&!}vH5PwE+@+B*Hm61NGh0+`ZkWo2eA<32u4d){rB&(X{-pA7ow6MlupO)1%ipWwhP4)K^ro-AF19^1_=yF89j zzw+1;Vc;ZI`&m+V6aQqIv-F$zU^<0f{;}ex(MFQ+{?^ zY+gg=YgR)k_KcC7T!ZRC!pCJcPUvG9I}jse$)h-R?d*pXFhdJD9Fg(}W-aOT26@(N zAZ#Qsw1w++?I^AmX~u&mNmw-5c{rkW_cY5WgxxE-nqJgWYeVCv)AckjPiEc-;U1iA zOFt4|HosajZ=cK?IK9}wts~nA?Wuvsnf>$}J)`6JwpQb2t1g*i9%CVoC6@cp^_xi^ zd!_l>$QZQtP;7@~1|#y^Ppu8kOF8T}<{m$*GAobpE)?T8i{_roXs*o=hAtzaj4LL` zwBh-U4e*ICe$!6U@3|>)`~2JKCU;0MGS*07Ftt21_j4ED5lt+d*D${UJ`-Pb%N;k9 zMctWwPcG7D zR(56OVmsyDWaa45g{?az%+m($b69z3cceVFNK0As-X2a-@0kncXKt#UeXg+55DkjhrEoV__}au54`AZfzO{nm>C*1xDtzSEHpJ=fB<#QHj862; z{N@FGsnZVM3@T#GGp$>)qy=$MTHAYY+qIQu5L#e`SjK;>4|ryU7Y{V&YKm+eqXJ^) zMHVzh`0f||$uuO1+DLik8O|qQrgt+h!0v=?8H;LT*g#AOn%hjSt`wb-J0gQ7d>oR3 z{m&N15)bM=%$2V-@HJO5aUX2ScD2Ynn|-%3D-ZlKqM1nF+uWYUz5$OzwC}1a6XFVA z1hkmC>S$j&y@fv%gC}u#Ec#&AQohGlDet8bRpB?)Z^UUgjIuL3SY%4&nP{OFVdx&T zgw=_brI|$sM%X-O0;ssKs-+`)va>Y9iV-Dg@$}&^QfA^LGUj7b{;tF+kk$L060#&s zHTU$~3y+$b1|1wJAKk!kk0g^XKT{O=OjLiBo#P2MmK+I~!{9@=V0zD*l_t#zV~%h5 z0;d~i85K`wL0y9061#+*MRy5G3}8oh6-*GTRTwNMN0t!pMwUXiMwSqNMs&rSDPDL5 z&;dI$dyM3T3;q_U`9vQ&R_5`KVuriS=lv>zT&_x(d-~LVkw@ng=tg>Rm^<+skNH!b8;0t68S2~NO;S0J@nju^o zhghx!{{3H^qs(VkvTh3CU0I_3JvYMdOa$#!t#WA@!1D0Ospq7tO0n%!99%Z@R;`MZ&*vpdKWG^3~I;X3xeXib?Bq zx~Zxmj1oMzPLItpSQRBvO6VM$Nm-OcDWP+024ztarG(D0YRaM{N(r4~G0LJON(rB< zD2tLP-x(|xr7TLKoXj@$g0nvsGe$`jB~eOdhrO?*CtaiGI1F{>GdB4?Em1>(Gf8x| zN$6Zv12?VHqnNCoPB*bx=BA30C?#}`&7>?!qLk1%HiNP#iBdx6ST$u)5~YOBu^44h z5~YOCRg{GZc*u7Ki$y7mk|-yXRY_TtL@6mGM6)PFCW+2A37xBI2&06~u~{TeNt6;g z$7WI%B~eP~9GgK|ltd|^bF7-OD2Y-+=U9xgD2YsHwn^w*RYMphbdJp;aY~|;&^b1fvM7mCLg&~F%AzDn37uorltoFD z5<16XltoFD5o2ffc)JViAsiGvx31wB14N9Vvpowtc_jJ1%6fl!SXPbo1 zRW*cBLg&~l5~n0e37umzDT|UQC3KF>pe#zFl+Za=O<9ygDZw+0jWNoiBuWXMA*+hA zD2ei&!D3O$q9n=*WmQrZB~eOd6cD0n3Xw^ovrR(hsv5#5p>u2&iBl4#1kTQ1neBzw zxHFA>jFKu!qLgsf46;Z`loC3}sws<-C?#}`#VCuCC?$NZqAW_Hd}pv&l(Hy^aza^^ zltoFDlIjA&7o+f*Bs$w9c!p}Mp)5+Gl+Zagi?S$*QbOn0Ov<7pN(r4~GboFaC?#}` zRZ|uvQA+3>i%}LOQA+q+MOm2O_|Ae@pjeb{Fo7((qjRj1vM7mC5>qRatmmuto>f&8 zA(KRBn*`4oA?!qLk1%HiNP#iBdx6ST$u)5~T#r-i8}9 z@-a%PD2XyiSyg0_lBnEK^e8K8k|-ynRY_TtMETCKnEbD2Y-+ z=h!UDq9jTQontd8i;^fMbdJrSEKH!f>5k5^YRaM{N(r4~G0LJON(rBu2&Wl<8PgwC;KVvM7o2oxx&J%AzF731wAM79~+iDl>mI z>A!#V#Txi~rw;W&{-d=Yt;^0V%DxSLGAc0tw%{xak6ZV03*uSFCGQ$ppZ~mfsAKDo z2Ytlip#)v@^B=btef-;)Sk4lb6a3gbH-Dog$G3({t}%T9^j-Xe4*t;~Z}WfaMmK+o zNyJaS&Eekx`Y!(64*s(p{GXod=I<|%{}Z6^;@|J!ALHPEf85PKSRj8R=)3rjI{424 zn|A!)euJBTcY*vfK;Ok5yn}j*)E~CLa~=Hk@P8dp((XU|nZJQkNsvn)w}HNkeA2mH?}WROID{MQ{e|E-|x;@`!CVxJImYV*$rz{Ow5{PMpykRSgwhRr|8 z6aQ)^T9=3a5>NcwZlH>*V}0buf9YWJe;NKhtE>FGnV< z!@3Qg0DZ*bp+&mb$^P$U1@s^PrGV}Ky-+A8KMU4cc5VJ{(0B2#=6_zYmGzMyV`20E z7XIG4i(md6AQkFk{UNc_JH$}awDoNVDpQ4*eQ{y`6a-OW`0L#&DXQ{md? z|6t6`zlHhdgv@kd^Cv+cvA88y!vCZQx`#QCAKQY>|MwpLVdk%AeMxNo0S|wTgMYe% zf1Zb5{(s(}5OZqtzstkl#{5mJhvmmu*yWE@xZ}Tn94U%Co5|^aZ^GZFcEx`$^GiEJ z{wfE5+{1s6`SbOkcYwZ&f7roa?co0iEb3kD|9FArzYp|X{3jgzFx2G4f47JKRDtFH zj)%YW7V3XG{xuH%zk2v5;$jz$CUef5?DmKMAJ$d=3g*}S@9khl+LQQoB`lm>@n6mS z0~u;_W%FMF`Y!%P<{x5xY=1bG*!&Y=QSIU{;s28;ezFLGmiTuydL?8L# zQ8$ObZJL|EjQR7m{}#}9@mD(d;|~6h!{0}Cm46QNp8y?w*ztc5^j-XQ%wI;$&^$lf z2!`zV-|2~eH9qXX0gp#nht0p)M_>LQ zXFmOMFzYJ+5cB8j|M>5KT;*?clz#!p+T|~YLBYje&;O6}87g*ow#z>m^j-WZ2mc)o z{>|6A`6uxI*~}NekIr!G&td&7mc!O<&4edJ&4;QtN$|2jQ|0LnyzY};|@t6NcSFg$8+U9>Z=)3qEo6%|ztTtyVe=}U$MPy#UJoLYn6IN{v_D5 z`S0`a%m2rd_!(#5WS76!!#|Pv>sS%_mpk~M^6;0Gk)n*BY$k{QNe_P$^KWHEf76vjjB7T1*yW!G`Y!&Rj`(9)Z2ndc|BeFr6CVD(4*pdR zes~M-jQ767*g18+Q1=#^HYzjPox3$^!W>_LP4C>q~u6 zX>!}&cRb~n|8JO2{~Mn2pKz4_Lyq#7ddk0~K>v4xO;`L{S-(sQ&Z*u0|ISnXb*wMr zpO~@rKkX@hDgRS)(Z})s0Wc!*6#RRh{oBt8d{_Rmm{eJ?i*!)j<_$#j_N_NA`|1>ltm;Vg~>X&=wuhpzS95T~| zUH-|Q`721GSDF1!Y=57Ed%OH!12LEXjc+yT!Fo!xJ#c!aE9G7tl>u)2NvE%nE5C72u`G4-=-|FE1tc$eNYp3|i-|9`YDtMs|^|JOj@RsTbd_-_VV zC2UXH#n!Xk{JYuzeCyB0LEpuHkohZ_58L0P4*throN$$Y)HS4-kAE}hyZB4m(JH<3 z!xZ@kA+^hYv1k9Hp81V)Xn+so(#Hj!{fipr*W=fhK+)!(;Hm$5d|3=fzVe^%ssH{D z=9Yg8*t7Y6=!ySk=C3neWKMSZ_juyJ+rj@82Y-CDyZ+_>v({v&&6UkR8x}aO_A?3g zmGR(doNnN3>sNz5V)0OdE{?MQdnt^j{cM9QJAVJ{8UOpHk)3?}KLULh|IQ8~9#;Hc zbMPN#erVoV#}RlhgNI#SHb(3hK7kIQ$5}s}SFL>6! z1D)jQ5Nl%p{U%)7@&91N?f)S2=Ue|KLEjbs`Yz&^aT58z<>222FLhD!EcR29J7$G7SMO`w=w@QHi-P+for?`Kl6+q!?3T5N51l(^7Nlmte>y`Ui0*y##Cn38|ex3w- zcKI*&#J`XEH|8n-#h&=rFn=SI8xJi19!PEekHR>G6n6Wa0M7+@^qF(!gk{wSj&rW^ z52VTQtt^cEKY(kSe?80}F8+nJ#Spw|Mx6nSU$mWBh*Z;9mmm+*N<2vq>>u`R@XKSN-*`%`N|a z2Y?;3+d89av^(C?WKMa9$>Bm_=C5oKd`iDT@<^S%Fpw;aC zmp{S1?f?0n`0ZqV$j&-!{x5p`-^2PHS=zbd$0Hv9kFx&WJ=e+5Om{2%nx-=z7( zBKu#$Y4ayRAF;Rya5~KVLwt|%|4+EK`NvLk$G_tyQhbs1C9(NOgT9M@@IflSj9i;P7>-P5=DB9(}%ELeL7Gl9QpFZsPzXkMNGit#-9?}2=mek){6@n%2_^Y+-H>a5`Ab8DE<|6_IP^=G|AVZ*FOqG*_WvEA z@A7{q`#%W#(|BP2F9IUrm2!RXN;iMU9i%shlJIQvCqduEU;oM6_(dH2f1BXu-^%>? z)<1s*eHVY5gMYMx{~1sD4>5mhSaQ0s%m0+8{C&*7n)NaMXFK@cg!;uu+2c=qAt~DJ z$L2o?`mXYyaFlz^753~M6 zDLAKg{U7r9f1*Hr_=|c@|4VUTh6ARDti$Gqza;3?pH`s$U#@WL*Rg)S`u`$$=Zb$l z>*t$4yQaAHmlVkVLC|-#{}i`>sXrWlE(J%WJc7fY&~y6VS|I;)(0B3oJNPem@GtW4 zcQC*BDUHCc|JyzMgAV>H9Q*_4xy!$f`G+BH`mp&Q27OogcQbzzD`Wg8JNP$10Rhe# z|63Q6V!rl&)zxnOKGt8t{F2!IzXkMN{!d(wUIoFBIn(;#N{9cy@T}htF@GiNOJegc z^o;-G8c3sw+z@r+Yj^_}w|d6^gY5rm7RLBr?ePC{&;COPE-c}Y{z7*YE4juL{#2T? z{?Y~N7kl*Avi@#O2G@4{4qo8qufCHM^ZEZP(0A2;{ii7K(*H1iQyuXe@bJ%J{((I8 z_ppb*jrosp`H_E`ga0#7K%}tOPy6m7#eDte6?lK+(m%@jWy~*$9sl}E-1;Srq){u1 zoZ9-gfxavLji08#ZDl@=PKR$(dY%aXNf1=y}M%K^Q{#Jp$ zD}MbOhzYXIf%T8S3ncX^_y@p2l(gG_n)#bZJv<|qKEC65{yM<=OY%H_e#7(pH7NeG zKKhS;lFIh~{yA>{E8kCEioE!2``_^vw|))lOPqZA{T}^#*3VaeZ=Ubw?_mACLd>b{ z|4Gny)&Fk(a6*rNaYy|6JnuiNKR|>PdH62?o38e=q(J?D_wcV{{e1DmImN|4SfKvP zfTFN8+>RQkIxvxO~+dcXR3e;cV(Lcoc;->__F8?Pz`o~#6U;CZl z(JyTx#(ex=_2^fyem?&9d)iNJf%?fg?)KZn`Y%#3!m}N}CeU}apS_=@hBLsLIQ}no zw4ZIB=dT6LqzKbX)?xE+@jQPuevbGh{>c9x2mjTc@uP|P8?)G{tQslIw(qwRLmwyxJyZDbf`0sY`zYit|7k|Z4B5uvYe<$d>_?tGN z)$HFtf1iVYuc!R$nLl6sKkX_1LFU)>|9%JmLQnk5(Yc|w|eUTn1esz;QzQM z{#y$y|AU_Rm;3|8Uzfkx!9VPI|Fnnso21~J+U5U)=lxR|^H;JSwtxJUOo^xX^%wx? zsonl3wUDC7v6-Cq|4$zMYSzy;e%^Dbo4=m*mk2SZcKJI%-_`!>9r0i8DF0_X{5uNd z|CEQn&B2eq(qYH{1Aw{WU(!kij^`==-Jt9$f1iVYg@YeoQ@Qx-3gpMn99;aH9Q-RC z{D1!rH-A6#OS~iu$fb_~(0B3gbnxRR@nTQf^>ZHnfdcve=;7b%;KxtOZT=Py|E2=@ zKj7gXcJTK&_;-5v2Mgr?nuq^{gC9R>w#)x774G`qS|I-pkN!^9hv_Nn7?pJw1YZSx z#NrlS`Up4+hqMzMKUX{af5F3li1}+QyEgxyJp2{RugCBE9Q+3-yW=+@NyOs6xMB0} z@aRut{Sr~+)YgBSN58s2{!?#p`@f(-{-DgQ-%z0bWRLz5*3Y;8xx-WbRDt>*@#wEB zQ2)ao|2Gv_{5K{jKomA7%Y~raF_*N0vH2S6XO zxE6xz6t|yY*2nn+w`9d1X%`=^cJr6Ck->cRKje9SDlbrf@#Sv*c!ByGJo-ymzs!n@ z9lwuW;pSgkApgI3^fwjA|L3>6`F9t{f30Wzbf7@~Do^~5v;Md|@k@F1%^w>B-F*7Z zp7@PxC*pkiU-sxvEKvVxPyEXZ)IZx3|H=aOyFJg}b6CG5PyE+=^lMo^U;lllN56^n z^Q}LYc=Xe(za@|VcY(fZ{Hotf16LF4jQ@8W<-f_ppXww%o`ymXZ2q}E{>O;FjNL%~?>hMJc&oeo2bn+L_Jl$7Oj>zG~>A`ELDc)-Tt>aBY{r$}|5p z7O4LX&;I#Z*00IK|NWTT|6QyP!)w-I`@abSgf(T)-$x77uPSxxPr8R_^YKrF3U=|= zv;HV*MqwFj|1Si6#Nwd@U6gVA8(^7>2Myh%xYM$0^Pd60<^QN2Qe2%! ze~%~rYgvCu9{pc=^bZ!O|MoJs|J7+C&e#8zc=YEKsJ~*mo4=Oz`}3548R)y}e<#=f zG1kZW|D~h;-#pvRzmNGV^0dE`pzq=z#6PSEhy4B}@*i;UKMnIIO4|MJc&||p$|(uY z$fb`TfWC|W7%tY~(DTo49Q^M9Vi*6!Rm38HzlQFJORh1U3HmPnlC8vF!wzHl4?6g- z_QXHM9VcJ=FZ0AdzJvI6`G4==4?O()nEyEVtq(i?Z+Obz$o%!H{J0jC{v>|AFxwsf zq5FvyhS#ja=D)`C{J)>|g-?vw`r|zM2U)*d6gjo^Z}sS(V*N>Z^xx+x|HQSVn6Lbg zd-N+D7|zwiLzYlrzpJDxc?SIRaZvJ7`Z_Q%QoqxUv`sh>KlAHKFivMcHG5&vZ#J|Jy z{-?H&6rp%ohh6^Vpzq=zVE#(hM*iat{!e-M*Y=TOKK_0W|B!?KRR{m8K!cI8$Dduy zzlGcg&vyA=f*e=*k1_u-*2MCkaPa>U@?HFm50GNM@#kMX{KMZzt3jaoUw7~ap7HNR z=C3zaGAFzIH_avg$7e*$Rs2B$N-bROB`qKAE`L4i^D;EFV)IW1eOLVV<7NvSm8^;J zf74O^JK*=1P|~jdXPCc?^(C?SZvlN5fA9qHPh>^p$3afUbHOk0@E<9Vf1HPZqJzKK z!T+6Vclk#>M2?qB!8x_d|2dC-MS=RMsGENQ>r1@E4V!Qw8ep@cjPT>H^EZ(WAe% zK>pKH-TtpDQ2*JOTYr6l`u#A$yW+pGK>a&B?RRs5`Vmk2+ftzZ0#E(#C{X|6OWoz) zRiOSyJ|`ak#7-+==4w|evs6{!E}Megz+DNz5Ar~SUj z`UBRuWRG9J1%21}RmbDkYSzd3Z<1sDddkDUb{#2}=i%@0?4J*^KA6us&{uuT^^6~T z3ee-4EqJlpmEN00ux0`-r0;y=Xt6(KWS*!)j;_>UH-zv_DT z_*eRI;;YZYe-G%p+W$_DzaGD?cf|knOgDcM^Oxn}|B2`MtB>`MU;JBjqAzj%YEACm z9ct|SN76g^VM@{O%b=0j`qx)i)|9EEGUu9*nbp-Mr+UVWDiUcL`;qwzZYnOyM5HMA ze%LOEmCkkNX71wVG7f+5uP7LbB!2T;q-gu$$mH$MM<&Ba6ihhtbkQ$P-yhj_A~9;) zt9Omwc6{Mk+fF|nY$yqewtwlN$tNm`gYSaeM)<*|y#Ycpa3iE(1NAq~E$dsG}2Wa^jT)0WQ#K{Y&z4)hcU8@>ZP zkIf5yF&w$j==T)|)q|15iN~%Ae(_vOuz_p_Chuji(G&@Gohc6PsTw(X0#l zFPjM%>K~3=y#3&L@sp_Y>$Bn~;c;ui=iWF2UoH8|AZ5aGOgXP_(ev!b&(EB>M9KoM z9Vd|ei?;6uyJ!#UcHo8LE2s5%+YY?yJ<^>y`zbe=;9GPIsfb!3MJibk0f;y8& z1^2x6mCs%Fo3nxq|6W}3Ld%7ns4sGpgW#T{7k=@*XNpT!9KYm?mkFojgZ-(; z7v2PQJs;}4cH8Ou=WT;FumRh~QSb@d$1wPGI8qX}k;8x^hV^?D#2b8@5cKqPBwD)? zEnS_<+Ls4CYkJbjm5J8mvgY27bkNznGWpJ{;g$5<&era(_SUkBXeBh{%Bq@aW!I*b zcfomSS4SF>jx^j{x3UAVrOiFb*0Qe7vhM1dS+lBVwO&)!($URY9T+BpxY34hilLH%+VfHk)_sfP1{Umf`MZ+?65**}6P+E~lF!iCrXWA+%$aG3lMhKNzY zOJ_nrT|{zbz92Xc{d3@iN+~l&UN=KfF8&&b6bEO8f~MSj7g4wfykhKR-?~RUE@svp2 zW^lR7v@e*F!nT&N5(LkB@IDVd0QRN*X*)|i@;E5D(a+LGM<$%K+79JIRbs^xowaD0T zk%d=U@{nzgYEDI7aCx>tUhxq{>scOg*d7TF8AHS$X{miIA@&6yU>xmS99n_z*cA@* zX?W~VxWp2ng9?Z3vhX;na2>Z785ciA;TT_tpMoE^cnvWx~hW~yPiN=^~ajEXQ- zDqQ!wK826rYfLsO93Brd$Ku5c67v?`aZ_SmLt~;RnNHxMr6s*O$jazU-W$wcv?zh; z^mKA{I>0r=%4BCcScrlPZn;qmRE8@YT=y7r%aiGBbI7x-qj`CcF^YG|?(VK`vta7& zgcVYIXRaddm0hj99ZAdQ z?qo6uV}{Ga1Qeq+13?%QEh}3yT6lvcS=rLLYfib6=bTAS0&s2PP@z@))tTF8Iv3j2}0e}IN6x$#}78#&-0o^`|+ zvsXUxEUCD%)5{d|wU^gHRt;(@In2YtliBEV^iJFCnEu+?DXWW^@< zOMtulZ(uum-H4FQkMo6#zh4Fmt{mjY7}@;SddlC#^(KCTsyS@_w|dIo&r1l=M}FkC z`Nw+rS2Mqiuf(2Pei<+0BEadOgC8NA{|xindr<3{|E-o?5I2XUv*8Y}?e6q#)_;P; z!?Wl~`XuXz0(`N;)u|k^?*l_#9!Luq0^&_`(lm@oR*SI44d>d3bT6swBzCQ#vfKnGVMBOP&*#Dg0kYNzl2 zr){sC6P!H0uz1_)NU))Abg=6$um!N$JeCEH<>;sh3bN@!% zgJ>=e8v0(Jck)5l2RRJ+#~0oRHsdEx-~aShpu*;hQ}O`(jJRI}!{r3n2bnsOd>`z| z9FANxRrZ!(9|HC-GJLpiaVCO$SVgd>Q4IT6k!`18F9pjqZ1$XrVIQh!J95O&4t5=e zJ(lNSj|lf)5E};U=-IHha&GX_V?od$`z1{!K{eu^7#}}5c68sOlB>slzG!s(B>ewM zhz;%IpngB+{{>`mkELP?$zk45Q7{AZF9LncpIjFCb;Xp6J|BP`(bYJ7+hcI#MIGcW z`Orn5FKcf*VSEMqqE`m>p><&md$PYcI5{Ox{4t&nOzB$$l{8{KnYh2DZ_(HS@B(K=#@zE)K{Tyu&&OWO=ZXO;U3>0@8>;mZr`G%P}b+6 z&M*)6x2_u%H1y*h9PGIj{dlg48Pwy+rn7=wPn{Lq(|2~z@YLAgp2K5;2CQ$am+uz! zExHKyC`}x(9hmx>U~B^aR9Lr<7>})>Ujq6?mj?JJAPSScE_gS_QDTF8iNnBaeBipI z{kYtCp$z;u`_NNofcTb<0@!A>_oGoC=dD;Wi20@MZ8;c=+ntU8JWCx?rI zT@QXZ{&&L>*h2_v(`c6Rmw|Eb_u%AhBg0;v5?8od+K{1hd!~QeaxzLOkrY$}l zn6`NO{-?~?*94q6?)Af7G>$8$@BiUe98Z3T_=$NZi=iyTun&qj@Q+yMbIWq~!C!#* z*yAmZMcCdSYoT_D<%&aF-wOM?W1!EE{m_`tW4|wJ|KN!s@B_zJlo^Z!)rg}UjtwPO zXT}lP+r_a4$AxXUSIlG0g)pYzxB&YRBl>UZ9{Rh)&Na?rSzf)X2*y~NJ9Pg=AMpq4 zy>EoRdpq=9?3+!aA%(tL1bubam|z#S;kq#}UP8ad@|d;^`_0&vM?pUy&HcO%%7lMpZ0qfsHG9o67uF}}EBb`*C9sb?2k%YrotC{$Y5E4PQ6`vmj9xcDTt@U? z_vin~b&Bpo_8d4;KROrsQ6Ic(df+FS`EPg>&40mJ)W?cS-18sg=gfa|^Tb2uk^j#8 z_qIH?bz6bGq6rUv`nGL{p&iP&CfqoO#a}OM4lATj;T)#hW}$PlJ?CLNg!VWUo`_99 zYL+_rzihsP_3f_bz}H|0uGRm0bDEwf3!M*!N0<-3&hx>L%m>hBvHr2{aU5C)ZTzDg z&pH^F@f~srjLR3n*uM&%UHVM_zS#8t%veWj#o2k3M|C4QYgn1yhofd5`hcFuA>k>U)A`WdE<_=mX zpO+^#x*tow@~y$-I|Sh1ZxD*My>Vf1^7ZA`w+Qos4JY9H0UYmf-hb-+;N%0~>mxjO z{C!dIU9)z8XV;SZA6ztM?SqT@i%TBZNNu;gVr{HPdI)5o^7weo=v#F5eYUlLA!&s!}cp7Jq}#YLm6=%g6HX} zH^3gvV=$h6cD(r$dIQjgU@pZmlD^p~1D%TCN!(X4}6XurXJ{Qrm1wHe=X7-JqG3!?FajN(vZJ-aHd)i=($M0*} z!0+JP_(|A%<8P2?&4+&Xoj$V*W&T5+y2gI+ zKxN+|{4NMN;m7&>P{(ENhk2@~D5&}o$e+IdAGf`}ya>LzDTcLr1fHQrnP*V=<_5;s z$x|nff&B_tx4|>>_Ai}v;``OGMtd3R6~CK;em(FT_)ZE)2VR2|_7MjrLL0ag(%F!H zaeVO7^SCGS`bR!9`GVl3KDeHIY4B1U(yiyk*IYJw=)L_{2EUk4blD4!!x;85^p&l! zmdF0PZESo^@tC3aP63%j{Op&e6a@{`e#YsXiBgl{l=N^Voaf~pfBK_T`iP*9+dw^hyy;W{Mgj_^H5%F?^8e) z;yK|=q!{)SinpEWih$fGkRJ_tXFa(Hw^Rm*-qS>ta|7ZFn5MF*`CZv(_BGAgDeC<$-6F?J!2=#Qvn& zH@ejH?aS82Ka+Sz@KXDQxNmqVtXH6q!QKq|@CMXt6Fe&==0W~=%9lQLCA1@y86F?Z zI1255%#`4zb4r7T?GGhR+<&#AM)FVuk_XFr=;mOHj!y}`GKQ}Nrw+w$nU)_?i-_Rvop z2a2F?%Xp8R*8|r{NJsJ)^&W%qL-f#3j0KFVBbF2Oeh7LXlvl1OTG*cLVapF0V{qOx z?HGK+vQV98<_@aw%ssZZYb4|ZG!i=!MhEp zN3&mYIC80p0kmbli~DE~v4XHkFl+2&Qx#v3BRifiG!Oj+~cSOg!_ zK;OG?JN)gVU9eWd@@>R*5Zc7+e;5t>kMM)n@Z)Uj*aqg7_bvK7#0G6P!LwW&jN$z! z&Q#;R$|HcI&3rbnOxVU>FG%(>sGH0;y%^sQgKkiS`=uC{AY(lgUG0 zPC_2W3Fo%QT44#R%wtODeUpx&+n zIlaf*4%|~=j~5nJ-^KS!W8wYMt>7aB#@yrkrV=P`#cOAFnJb>E_V z<6E<@W>R*JPI#_q!FdF9X(`Oo{jt+j2xF~q(@l$6Su6gs!uBj(K@|gsz z!^+@(EX?cIObLF0bNe+#V_$gajWZ47#>Cg018b$WqOlLJ2mFgg7q2)BcCc(;1KXd3 zpI-z27FGVER{6~bGrc{@L`$+e-M*~7r8!NX-dGrXZo}W?*co#d!|&wc_dA$T-`&0n zEZmk{q;c~ zb1-&ML7qFe5`X<^w-3m26Ii^Kans|dlbl<+gJ)C!22++cMCRwxqYlXP-a z%O&7D_5>>bKm56TDRd4z^tbYJ;2xe;%y9tEwdYkX7HB&3dcGRu*R#$+Sa1Vp zj?UOfNtRMA42l&X`V8ygfXlv?p|6jg^@Wn+jpEs}f2@S;V=UW2vZb}-t|)!9_zR=P z){mQ9T6BmGbg4&QH(k;<{2 z^>$`>GUXT$jc5Oe^|MtrfvKcj7$ zpl^?k|H6dgqvIymhrf#QyWit4qo5y$ET6Ev#~6DN)7ta;ikt-=zu6QyvLiBXGKi=m z9|GfOyJi%e;Fv^75QlUDW4pPQkv=fo)Tr!=&jW0uob6(|g|SM+YR@aH<38Is zZgN>2c3FVYr+q9ZKB4?DV@Kc`baUGISQxn^@)&qrj7@;Q)q{uFp*#2aaghD5{Laph z`PPvuL7DtL)NygZ#DL4U;3yJNxTrj0>}2ExCwY^pq2OiMFwOpLh)i}Q&|hT}{+yA| z#W6P$z<^~PzcBK-__ZKctbVJ)jG?R>QMi~JGIsQDVMq@0%5OYmux}dqTpT4L=Fu)A zi&u{tdHlLB_lN}gw;L$`Q${`)$J|KPZ*7qLS|bmuddCq7aQiX)c+yl=E{;->;L>bi zxZ7ytb8(WtJV*Yo#-CiAw8;;;t^<$~QaKFpZU*AazF{-2GX8F|4mjRaABYp&sU zW#P!h5sj!g<2@cfHu9PH6H4cZiof8yjC`hE1jjTIWa>rm$Ble0PV$-h68X;<`COdj zXNy>vK49c?@%I?~?V+4pe8bes9Jvis*z?Nz9Y(W$hunXH`32`l`{?%I%fXIIem3+M z7hVU3U3iHH$ML`=f6U|0%^u#nJ@#*de&n*h)`Ne}<4+aHj}J_+P3R7Se|Ri}@y%ub zK9B$NJ@)5%e={8&?8nfX`zx!u^$%(G(u z-$8G@nrF@P3Sjs<0przg`I%=Dz$3;^W`5kvyz7m8W*(Ghj2k?0zRMGbJ3Mi&@!~i{kuK#8$EcxrylXoue>91m+#ezXgUU;`KF7kr!VBGd+ zkHT-`YfPjbP=0~JWrcwF?Fz5wYsBwRxWotXg$iG-yIy47Epa9(cm}uR2l&2>Q;`?Ef^p>4?W9KG z+8_B{Z`+@^WncWMWnAQix6YCmyk7BYf0`7o{b{xA3vZicU+@k~UU*ZMyx^-Dx8sB3 zGaiWh+U=brV$KzOjq-OXyjJ0j3SXjdT(im1&lhOty#hii{TK0@6)yb|aUHj@~mb~D58Mou6 z`>F1CaVA3f4+trwGUg+$`<=ubaov8}lpT$CC|t)O#kgHBX~read>hETCi2rcW344G z_&UbzIOy?2_ls(l$8`>TBNrYue1&$j|8p1@e?%e97q8xVJ@4y!6d4pv5g(NB3))r_g^rFUvfFxE`-$UO-&;>uKyT;z@BHQW<{`*Kt_DGIktfT#|B$ zsRm2FoA0GhiM-%VoR7RZ4rzt!IOy?5msj^kUEWG%N6Lth_-Q}Sil25ImarW=4o!?p zx%f6{wd6m^_cE@Eyx=L$x8u;Sa9uAF2iu_E;71g%uE$df*Zu?$cRcL)jAC5M zOH%MRRV;bomGNKX1)sq3c6{`_Abkxv>Xf|pQ^s@K&w7ua4IV!mEqU=%#(&$-l*ga6 zWnbd6+OjYBT1#Gd`z(3E`x&?W*`#pYAGau6ufumJT+bur>=@eD{ceuJ^>e`jh3kH& z`>*D0Rq`5_@ep}+{dTatUB4;DrCsrDAoGRDApw zn567z|H~K`fA}`s_p|+%aZ=_>g70D6j@vuuXld%Z3G z*z0YJ{gH9i_D9y+wm&l7ioEc)GOx%B-r?~_##Qu3w|_l;>Tyr{9m?zV zaGV2(xNgr26t3HIgTi(Dk-j74VzFQeUr4zGZ{iD)KcCAfV-}^Fd z`y>5buTN#)5OA&Th@=`B5 zEqTFrGmd`h`r4;(U0(+kuKhox@O#7=NJmBJ2JP!{Zyd|m8D$8I}$~?B8vR<T z9d1I?qo6~kv_q|}skKvx*fK4)q_s6Fo#NEC_|cZm z*fv@_jm7pwiZ!>z;s0BEuXXOqzUKg)cjo^*^FHr}+_U%Zti9ISYk!=5&e>Q?VNBuzUlU<@jk_0xt@v}nFYdy))5CxHIQ|a%sTs>Dg^rBBS<3cYuzRNX% z?56d+N8wtZPKUqfBl8pCFZgzcUgYjzT<8UVNXgau$b5tJ)OPDr^jgmYj$F~_pd(js znV*QAMV~_sz2JJ@qV*h5`e;1|6|VI>!MMm3eXxk#1hJ3cGXD{J(I@863ohSnxb+)X z^C+#)M8<``$SrXA3qHl67rBKFz2LMCmV&E~e1Au{)@O;s-{!{L&*3k4r9&@rS32~9 zS2OPF)1q))kDDC+BKLNOzu?;xA3cuAw}B*A<9kBrpA5kdC|uvyjAaFAK0HU1!Lgd- zBv-E81hpu zciZg=#@&A8AwLD7-_Pl6J_^0yxr~!s-QSB9uJxJ6xbU~qJTJkx@E5$yp%=O34!z(N zjJx{ODO~H5boh&0nJ2sYxbtL@>&}w}m-(=(&o-rx?nnC+uGhgHP`KPfk*@s;*Xv}C zEBt>+p>UMzIO+3og%_!DSl@5z>$1#6Dced#ub&^v^_2KmEB^mo*G;jrd)*W~?7AuU z@1&=04{|+q+vh$muiGB>GcNQZ_eqCdaJl}v?IAa6jpgbi*D2vICe34dSD&$r3%$r4 z@6Zb_*ELt4q7Z%LIwkx?pLq^{!4o0+lsWXGk6hPWeO86&BiAWcpE`%X=#vc5r_rGo zecF{=J-&4+T=(A{3fKK2&I-8K9l@!*`o6D`=?Rx>4MF1>9|oM8m_b%4d>F^+Aop2B zf0n`za-8rSh0Aq>@R15HK$-&K`aQx*g^#u*=6Aco$0+5Pcp(>(h?L78yVpxmc;(9 zuU}u=V)vb)J!h&Ko152dY^hqk+3rW9ynD%(GiINfm9q-xR*}=KmW``v>lsNG4gqSD z^|kA&TI{AkW{a8tenzZpVWZBAH!;}-$KU40p*h`o*&isqpO5x-7O-*B(CC07cEmR82s);N7mJzJ6U*V@;d5qoZP^ozqdOwz0mZm7Ud5+T^gl>y%-XG2m9W zw!W>cYW2o7YwBCm8q{y_;B&31c702xy{S$-T|tJ#R05r$LQ|`>QjASFPJ1{^0ck1YTCHo-$bewXFaM)6CnZg`j3@nVx(UipRL2Jla;ezEiR#Yy7 zlS9PGDkft5L9VDQS+KZj*_BnMk~Q)An#RWFTFHtb$Rw#vx3<-g6GQSYIW65<>*0&B z^=9g+w1FF(8#?Emv*}vSU||LpFbEnPJ>FPB*{iXNGa*INkhO zua4HOqxqeoOR6hgwP&;En=%NIQN5prB&Y$0vC@s)(4derjHk)z_7`dn^+8!TZDt{v zVutyhZhrN2L|@tes`%x@X}^igFq&T`e@{kgx>+VPG>PB!;BY37)3-z$*}b zs{Akels4k#{~7WVmT>5H@}x|j8~iQKQ#oTyCv()7L-fxhr4SzFqfJ>^5~t&jaXv`C zO#bA)ljPG>%#}X{Ac=78C;1MaM*atoKS=)m*aYs%RX59h=~fW z{nsLYko-+o*i3QOpXAg1i!1*xz=GtL@w`>;uPnDr`~L|ig5>YyNpl}(B>8lo7df5K87Wnz+l4*uNo_lETU<4kyv^UJ}Nzb~Z! zCrfM&-T%)Gke`iu4zmA~e6xKz`=1Q4|DjSVU-v)yR?;p1RU!7jhi~dnXaCX=`)|L} z%8zsVA^X2KK>p8x1(m;uUpTL{Z2Vu>{xm)lmhdTTWbak>*vB}@zW{%3`9~mgko;{d zznk@EHb$1j={PLJ{w?K}O1J+D0lD(u#lRaRe+oZ5dC0Qyf8FvAB7ac%JNaRgZvPhr z$p3gq`46&uHbbcVyF$vpX^G7u*EzC(et`U6hRA=J<;!zTQGm*-!_PzHZ)f?Vc^oDA z6Y%HSe_x3F*J-do7;O*!uPgtnA@aNVqf=e}OTfjIzZ{hxRR70WzC6zt1zh>pATwbJ zA>iYFk*}`5bggmaugeOSzn=yxgt4TY3aGXe?=O6kR zHYq#$eOBckI^&Nd<@j4fDDKwNFX&=}K>bSx$tTAf(7q+E={_CTsdU_>g})q=AH&d) zurqFx1+b3}Vn4y)7ckKNEo}d8W=!M9Jp4(1Y1ebm{#@C_yYEu^^}NG;0Vlm_O62Ch zylB?UxC(_Caf{3@Dl%tg78Mp1o7kEAbnj~*O>9V*L&94RtHl~iQaQ;I_{hq6EH?e& ze~q<7Qho4|(8vA{l6ZwdJ{Sn|ip$KocW?VH{Ha8YKNaJnB+vTR=mu>PenocSNPcZl z&OAA`Us0CY0iK=zQra6E=AF~|FIm0S=i7YbcjNdn^6T`B@dJ@_u(Wpoejw&YybY5; z+yAqN$K^biWqdby@!T$`pC?DxN3xgQ4c}ze?+E7IMX>qy3GiVC&)(!ahhFO#A5VA? zu$9@v)JJ!BBlG?a7k|LUzciv;GFV5{En^ZSNQVGzJpOSXyooux< z{hl{V_>+%|H2-|#^F{lNCHqYP57IrzCmVcq!Jm)UBm7)_t4CO$ROF8~tEFT4&G5Bx zKKuxgt{7mNZ-K4_;4gZTpOia$BB?vSfxl<)cRl_-ioXv<$lu-L{UbU)m_%79e>MEa zbbP2J)onkG*^xlH6X_&qJ3d;H>R`MY`K#eat>gNVRG*?vJ~E=~USK)!k+KDPSRJgN zmOl8g>iBd?svq=HHnCInr(svr!*%d^-0@&Z$^-AaK40SdXd{0)9_jZW&=) zfiCb9dDmA0bb(E~;kTpX8?XV6cYP~>1~%_Maq@{@8{ci|zS0L9#L%{>&!7)%h#k!8 zy&u~G=(bO7PU_H)vI&5BH0{A{h0HxyE&qs=!hxPcC4@Hs)o(2?_#l` zlSUbboJVF@3BOp zSNt&F`>ThIU&AHv=baPDy>|Y2-iBuokD;s$&n)WgoE%Bri!mjR_Wdy8P0&Hcj_R{9 z=B!zm^6s_e?}ksHTdpok5%x1|$(ZwtL}~B%LjPr

LVWhgH{lD#2;_?hrq9q(9iQm>g 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%0AV}n6?Lb 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

d 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

E+5i@!4vze0W37r!D9pHXq2 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

lDL(zhdMgKRqhn8Ors%N$F=odXHl0_bWyo2Nc8i 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 XYS*O%Wfexse%;U+U^U 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

P-IqIhizQ3ye>bFD{eSq{VSNZ?|WX$I3y<;Df{E zxu?(hH$7Hf#2CACp8+uuX%W$GMo zjw}oewWD1{=YV68>!obFe)MfzlP0x?*fXH5DC|7WeZ+W;QW-PG6z8D>1JF<4cen2x zc?af%d#Hz?o;p6|w*DVYIn_7#A_h?lI@L-XMI2A!*o)&JjzJu!aZvw&|Jyj{<=*xRD`#PK?mb1Ua6n}&Nw%)>~-T0ZvxYDZeyrd{u)rIEH2X&IY_Z|6-u z?A?_?+Eqxaw`ohfw0fj1M%p}^mX$Q{G7o8uNNcod;A2Xo+A#&!h|#Q#!&o)tK-VD) z`V7*VZ5p1DTv{{I@Ju(_V$<;IUZ=Gnz5?;BHonHjw<5mmz>{bXHJY<&xW6@ckVOvZ zQ;^nX(=cV4G}N~ZX_bY?k3WOC;2U}FD|45=p5f~}&VwJvJ(9kDq%iLR6XDzSdN|UD z%GF=-mK%GU9fOVv`_F&f-exa?Nyt+l@bui~uU$`eZ?nmc8TKuiAEg}LyH09<4ctHa z-}p}Sjj`arojuwnTaR+^T$UlgV zZ=C?AwFFLNPqus0+RozEZ9Sd6-BDy$cND2#K6h`_J9ZfL0|bKi{=ZZ|z_@vGDo2lT zNxBCw@j=(Ql=>%oUckVnu7U5UOW@mH=bO}Z$Ug(L#!Xdx$47^`0LKcgQ-=F;ZAXmZ z6_%Fon9IlP%`i>f5#tAUuAWQbo5;3U`q^qR!UrAA+3M?<=vX%2*|9v|rLYoyQ7k`i zZz7k1M#DL=biU1tT#9enW9b*DpF%`Y`4^~5@Zf>@xBB&?~J7{Q&cEycT~&V8BbE`26Z|%WNrx3->Z1> zjNE&pQ=DPv8}*4;dAF!{vopitxedA#?7@-4HCHvEzl&q|N<01-$M9;`HYU6d{Zky% z=U9FUIIqQ*0Dl{#^M*ql>DLDMk4YkYrau|v=lf=HOn*<1-&RkPFnztP51zBZ&m3(_ zorz4Vg>KQeY&!cOzmZ;M>u1uZE84H4Gx9o5EwcO=`U}*_fWJdQ_-V@@o1qrtYmO~% zr4G+mANAUgWnOF3ajJQIPk^_P32-KVllp6$zZr40=-;0W@I)8Klz*lAeT!$pt?GD; zziZVxo8RCsi|IO%zyE35uU?mTgW3?Z=NT3+r_exdxKLTZ3l!1w5c|4Wn=! z-sdtNI63;jX`>IicBX@FIepOa+YHiiPZZLvvf46&*P^g-PFE7wlAZ1S2y{(I?z z{~h#mMmL!8du{wHHvS-dmUDBs1EV2Tue^?sd6!BW94!X z!!_Vy-U6R{g5>DmZpPCrgjpW>rsEzN+D}{mUDlQW`c*rkDBtDqwOr{l0N0SQ{rXNr z$2|`?p3DVfBhqp#fK@#9(G@7&hAzQcPaF^?Tl zeW-(?&5w^mn4s9AvrGmynWhw?X2N?|8lT%_!cy4D)J_Y`+F*CjY0>l9+uhjV=14D& z+d(92v0Xn7RYDDJ0=?5w8y7W^iii_wv$0R#j$pn_k!zhFOr?x)0Ia!GhOc~|A zUr>optE&NI0wun1YVf8rH`#czLgKatvGfu`4hL*fIo_C0EXPluK;zK#8gnW6uiHbx z4iarTBYqjvdWA;hX2TO5F)3w5HgtlrVk|lsG}5-ADq=KhN>K#LirpI%^b{$($jC;C zq9cOXKoKh(i?pU==}ix?r2!NmV``Ax^dM%PgPR_JLTq$k8w0Hp=_y8zv*`f}VD3e3 z(*r;!s7fx@n;!gvTOX)r@Jy7_cRJ?h1YSmbwla#qBZYRqfnT1>BO7j;Vh*?1+ART5 zNM~gVep)u3U5OhFFXq#3-$4^=;-kH*eQ75 z!@1AjN`(3TPMndSb+ z`!#_1{Jn|+mOrO7_ z0640V%#Yv=fX=V)E5OTxg!03hxx@R2!E^lWMVS1NhEDJv2=FT38Oe{IagdJrTJcQb z^S2NAlH}I{I-kE950CGS1n(?^=lDBd`IC1`!e3Q@H^ak2)g2x_4vz762zW{3g9;%& ze;E&t?+b-Lt2gQR8?^k9hEDhk^(N6wFmdM z;ChNU!MixXI{`fD&kI0II^t0u(&ujn-jgt%G<1UZ?}7YUFd#|C`d((~7`_Jw@Em_n z0xwB^YeD1JHwU~7;)utU0O60XCw%?}Eq|n;6aJRq+{Y_;{4KV0XXXu8ZnMP;%l&*Xzli=e-*wSRxt|T@mp-rDcUwC0 zdn~9g^|u)>PVl}H)OWe1!)rP1gzhhb`tJ0~&4H41#4iN>fO_6Z{d9HEZrrmcgZ%6V z%Ww!@bI=dOUJhyKguiTnx6k9R&C-!SewXd{Q`*6)Cy;f5_c@&S{qz+N?*`D4j(8u% zi9e2xTKSQNPVhb);2rSr+ASUNc*E-RcMNzr##<+Nd>8NYcgVwgFK9_eJkDW0f9Yxy zPZ~PG<2zO#?}&%TduhS@lEHKRxgK~q0$C?`pAYa}^YCr~t>Asw;JI<$W%(lwo#5Rc z;0=0soPP!HAyk_3!)smbdVmLgCg+&O;|tc$+LS*8-B;{6J)!#^fO#&imp8edleCM_ zZul=s66s{@GEV3|g?@^vIJXaUc{BF44K3EA1_$)Zn=jY;;^t>U{qjZGD~w&AiS^6d z=IG+5nE81g-rq-iM^qG^9x0>#S{?^?eV|qh&Zp6KEaRnBFGh zWBQ&Y_ADquuO@?P@t~u;eH}%#4X#MALz5rCW59~(5WCiekL^K`icKe34zd{-%I^Hyi8k=SgO2>j{t(-#qYn(|^k~_kuT~v~O(f{4 zAEz!*UFIgew?LhmhCK(S!G6y)=$e@__k!*n1?X>shC0cz2LaFPGLIeKRaH2>6EwT3 zmYvo*iMotON79y_Jd$=^&11*E4cc#4Ej>+JD!Aj*`)e?LSJk@Htw^7e85r87)2YY& z$Ov`kT5F=VMPIF|Qx}XZ&+a%rqvisXaRF>9ee6UH_AX$1yox%%fTIrw9c6F|_MmED zkA{7Q`q+>c+T*tAz?vy_RK)=-=?@H@f(%t5k~R0kV1KLtU!ZYqFcp35XK%eV^B+9j zTjG}=Fl~);(SHZH=f{xfiB+NvS_ZM_1h86Z`z5<;q&kc52T(3$Aoiym-!~hZQ`9eG zKWZ)Fdk5W@?wXFiHB)$=fx4gC^|cc%7#AEz{O;im@LgWu-WIz@Dl#Y&dVb7PgRr#? zH1t!@WRQntllM`Ca|pNB00$W8cUnHQ*K-DV7CP>8LHS{>nJM{OiqDR$haD^8yapWh zM@^5szRfH0{8vaPuiVd~6=kW+t`Xu_7j}*Gt6e`H%zkDhmHo_*q`Yqid^VyFu-!tw zD*DLRs_A%so9WkM3h4XMKieoD*^dTo(*}E6mC%QGSZE6=6CFg$CI|l7YaY`wsw}=V z@>#TZ25}Wd%GA)m#5gO*N_C*l@a^+V*DuYs2^`@8djX z%0PQ?zWXZsAjUCx$6hQoBIAD4;WpjAmFQQMHD!a9CJehvJC0YVyL4Y=e`G(A^4M0m z{#J?JUj{Pb9Ko{Va@wKw;!$7SpX)TomgmSW8s^LuM*ki>6C>4+Z+L)LhI+6p_CJv? zWshg)s)tZ!HE>l12l_@-uKmuZfV_QuBQ@oHKdw|!`=D=Du{}991+xtKQJVf-54vWn6X6qU_Q3`a7=HV4oEE zhO5GU!^Qq)c)LT-F;mozp_;Qd4-J$L4Bd|F5XU+DWlI6`a{sdD}_`ZYR0;!CA3&t{l-OoO`n|*-&AJtmPw!m@sbkt*} zeBVQPa6F%hx>jcGcR#n9{hkWwpFHT0M@gI2+3N!4i(&NrbI`VWUdFxNOyUW4OCEgy za%%0voHD>Z!Fl=)em@1>Z}N1<&=j2GUT9`-hW%y5aHWo4rN6(b0#920eH;(yOT~d9 zyqB9f0-2ndw`n!JXN%eiDjQXmnBQ4eX3C={c-~rraxvEv?}cnM$5&&{)VA?3Cdmit zQdZVCfU4$)59@1%`DTFEYmPg9za;$u_pRn$sL$RDK^9-PZPjAis(FI8`d!uoxa@1h zrTxI&kTb3`F}-!UmrCW?M);1V0A6$KkB}qsPRUrlkWSt?CZt_mn(dRU2gkLpM;`S? znD;LzGSNMnohKNvtb)3??AeQr<2P(9Zr;*6Hm!5()(!V;(pm&+&4%8sYHRn} zZCf_yTXYTLbvULOEo0crhE?ktEx4yTxxb>>bE<>S2 zUwF^v&G+#Sn=b3=xqssV?0fN{?zO#{t}EBIT)D2f ztLcg>u2|f4dA4a$_vLG|S2kaH`MSkx7H7NHb}#N)wD^ie^VL$mBJAw$T(d!yHR1HS zMGLc6sxzvlF0Cv(v%D%*U3Qi_yR4?{obuX=y0UZCd8rv?=ahsYnfsp^{u_qm9v zdaZ)%1w4r7JKEd(tyq58-$VG6Bbug8A=NIGtS{9;GeA? zV1je9ie)0Gk^F&JI-Z(6N1gf=vGnuQ5`+hx+|N^gfD0ZSo(u54;Szl=Kh(LO9+Nlj z(mlt0urLXG?m~40;T9Jos~#qTI`zLFqo1Q*L^x`{IW8wpQsC#&82u$`eGEV3_fmCN zjQ-L9?=rPKmd-clkxQw?swtMfSiJ-F-{a)9Smn@=eD{cZkc9SHqF#^XU!uN+aF@%! zMBRjZ8*#idG5^(SUo1a|R^(FXInTw?uT>8r-0bkLRi8!pW5~ju!v4Aw;b(A;8!H{& zgz)EZj`==;|LfEmq(|;LwE*LXj&n41;D6H_pM3vxqfI9b!_&O{41d7!X42PiAXvxr z*>=1#is2vf1a2n|?&I~*0ROn9e^aMV8>3@?%Jyes5bx7L{>v>t1*B1j{hI-OKH!)8 zUC_1TsKt2W{sH2Mf1l;&1mbJaE51}AsiyqfEdF{#*J3<96r_KG4PhPeGJ*Vjd!9^x zAmI0L+a9KU=BT>^{5^rZ|IU`j@y>4!)(7;nEFM{6c~1xVzZ1}ZH{geRGmB&Xf3$ep zabAmE#HUz!Wpwy5^~XW`++@ppS<7>=!p(+r#N*hbE9&$m>e-^Fw~RtvuUwdDp3W_-PE=JbehcNFNVUJLyCBdk=kF z0A8V=Gjm@GWgbE}Ww9C{lMK^A&vqic#>-h9?`0PEI&-aJ{vDvBjx`wD zGo9f*^shJNQP=+z!nA*Rnm#6tH|W>k2d-h7<)huK(eWFA<%p-wK3xMQ70n+fHHLBd zSr0#r3tB(@Tdc18tx6qW7?of@P2Ywe$e%jV{N9+l<+PDb`c?Gt(ArCXCBA8)kNlj2 z>F=}ttMnn)!#4by4G+RE;DY-){L~DT14kWpo~G}x^{}0YI_nw6qr4XQjvkk}EaO+1 zHL3L7R^IQky8Q1q?<>=*!4K&^5VWK1Lk)PK!ZWJoGff}#&G2V|UY93yvysMh^qW@t z_(9dRoV7erPr8PBLpQ6SgL?nCB2FpShv-ADd+DQ*W}yD`8|kATwb4gET1h{LyJYy( zQKwwlfA-S96q(@~=Gku-x@ESr4D(_0YeJrJ=k=tAoGJ_S>bl{!;I(O@}ZjzchTXq|zJAzLE6%8NMFh2GB>p zK1lyVN}aTR8s(+$MShlhIpk0O3d3(|35eht@PeJ~GK=7F4Gfgl(Dj}v^nHG$YB=Wc zz@&%zxgo%<`Ri}F{r2S@*ioxzEgl>uRkZ)eG7bkZvT+!R(IqIZj;Y$l&U?Gf1JgLA zM?}=Z)QYd0x*u>~IhgMYd}yP>Jvj;Zv|97h2hy6ZK1HCsIfmAIJRGM&KGitV^vL{z z?BnOHZ0!8f6-#gKSi5->T7BEvUTE#(`w2XlZS2O0lNNVO?0vA<-LdAuj(fXx$B8{{ zQvY1^^jSksSKcppedpH6$1JTlDpFTD*6m~&C$`jxg);IVscpt+WbCZ zsXY>X8eQtz&b8~iDZCAv)@?RYNG>o==;J`eeRAS+gvli^*$wu4`Qbn;*!=*adU|A! zz?JPQu3y^Lv27Ff4ZJsqd;l*ex;qjQwsd!PnfTC}u2*nz+t&C?3-cOdQuB^Snp{as zFwW>O6mez##4)k0cU=o-#SNS8F?)hvZ#2rSBEMIo`#XEKStGX-4Rj6}yqf93uYNJ3 zKX@3gUyPGsqO$JW){VDLn~U9BI(zYUX2PNp>5T%rsX2JbdMFc>zqY5lbBkBL?&9Os zb({01D|J6<%>`9rZlF(h7hE*sePdVLMZLqCT&x!@|K2Lpg<@E3RaRdN&iUN zX4@1B+ttVxtk_D?f|Y+p7nOCZi!Q6^*1gs3uH3!2iz_OtT(@n=S}W^T7x&^WSAO5` z%$#}8GkM-7RowOdKAiT+yfbs=J7>=PdFGip&pgr>xLDBp9yYYlVcbE5J&QoO8yR~_s}N&SaLlW#sCO_QW4oDCgbf$(YM+oeFWFF@c6 zraq?dDO0`_fqX{#peZ2i+Yu*xoV1x&j`^mYRk}ZQc=mX+T3f?()KWKo@b^jH&-t#V zGVzoS=i}U5Ncdg>7$0%-K4KZ3h4>p&cqUz#|{= z_&6hYpT}>ohH{j{vmJgR!TT%%G~PqN`{ZKygkOc3O5ne480!4o(dp`R4 zeRup1`r|v$?eGf;-uYnC^3?%v0+^`3@wh}jg5iJAAMFB}4|zy}M;&Oq`AWW1JRj51 z{vZE?d}S!tV)%sw?=xW1cr6N#tJNYO&rQbvAm0+;F(2}f1n=Du-V%j}stI^EBRyDy ze9PcJ!T?W#w;JJEzGcAUvn2J$HC~ag(cuO8=A*GwKJt(RZ$^aof|3tiKHy!BhO6ak z0p1#m5Ag!hV)Z?flOxej6g((*k4 zy!iz3BzVt*Ps>*Zg@}Apz)L>jebV6t`Hp${$U_pmk4Jblz+-xr_e{@6e?R_c`CbNI z+W1F1Pc2_9@bXAcys5ZEzAGGFkdNbs-j^f1y-L0dJRexhs~DfOe7k^`MYxdQ{U`Xed`~Dm zE-#6E-*tFFzQ?_MehDhb$M5-SynPC9rox+w_NL`~5_o$V;7R100zQp*0C-$pV*NJa z68T=n4CTg2(#Nc(uS=gD~RF z#YH~ip%@AIp2ysU;p8C+9<$JR+mw9sJRj4&4GFY-F95F#;X;BJe@}V`@bKTthvm{B z-)Rmn=x^~jCm(r8f_DmjX!#yh@^QJ5e3b8{sDAl9?tF^=IF4z&y})Zndg>3$paJj8 z4ll^JtJ38|9+JrS=Mi2dZW@$_cndrq{cUbM4fnS_z-vLckl?)|9#0kCLNH5t&vtl0 zzURGsZsu zIa$)k_Vrt{$UvRnzLh0Z-@zU2Ihz%*B{HKqoA#;;eq0Ni>J_j-gT2RO{*F= zl!Mz0w;65|&OE1$cn)sf`o|5mz?~02Y;?i5b0`aU8r(X#^>AsgR0nq&+$`KyxH;gh zfLjZHJKPCyyWrNqT?3cjS;j%Gagb#kY)Pwzro)!|V?0l{^`65er`-3W zl4Exs+=>RY4;6R-*VDKT;yQwh&pO=K;@(Ifc(QQ0@4&qg?uT$MgyHeE4dHwa;U3q4 zB0O=Ll@bG_x8G;|i+`QXdKZHD`1xTfk6n+E5n9>P6u;uQ#+ z<}vFP=B0?sdQ9s4V(`^@zO3TISUIuI^Ra%KZ5}-T8fT>=58R6;;&~bJP73nUUJv)} ziPJ6b1C|&41>dPP6VJ0@v{Sr#unb}65+7l;Do>PaBF{U<-1z7OgkyL*TBYJAG9G97 z;@RV9rH?mNdn_hx@~RP!XRM<&Dh)7@Z0R7+N(Oc*hMlA3Dt?TOzYb@+-*p(+r7VM? zJ!tEDhsyCS=o_t_8+F@i&&;2OcPsGJV*QwgKnDds#zK5!f%WL(G0auuR6K6G6!pMfu(DdNXMZ!ZM`@D>dK4*~H)GJ2|l1bl*UrJ>NEOtJzOmO^g?b_ixO=;Mdr% z(4WYQCU{hA8fkkdc7R$|=mGB-6l9-o9)?=^en9J~2VqmX0JelIbCtPki0{)7_b1TB zUJTZKXsEnM$jj8grk-uIrpkTCTb~iE-}k{YZ3V}^8rm$H*26s48t>#hm1{+rAbb4n zW%-r@Z4Pa{fT!5Emw%gMIo}7-Wh#sO_?|~1zC7|%kJtsa_T?gHNsji+_#Ov%rQXN~ zeV%Igj*Zu?@Sn&T%A>tUl|qJ+EZRHTyp_Y|@8m3t?BIi)DC&>AY!4G)_s{+enemQ9 z`uD19v#e|MO}^*j%OrNfXvY?-6qvNDCuYunp82DJ@vQ;z-Y z8szU}WB+ILAK9?-dj;b9NMZNh@>RDC)ER*TkMS3hY*3 zi|%wCF7x_D+;R20e3bRDVw8Mg>_XdQn=i?`Hrkct{dp0=FsMl-nAc$?J9jSxq6Gp)iX-D`bN=LjNcJ| z{Sfk0lWJ34&RTYqW>cNCfzFse!?W9BNr0!RS8;zOy#P1uTyom*7HF)w6aH2Vz>dZm z+MHIR0g9hCy3ct`uHcIeACr`rTMgGZ`1^G4cj??;+Fa)o`QgD_5x;SMULyXDrW*bg zfd?}nMHyHL{-@Fptp@)Q{Dtyk2B#XRFjK?>w_B5kD`ApKoqU#OtSdroSk%S(X(Q$$z1_Jdu83gulo% zCE^!F@t2y(iTF#S_$B6~MEsH{{wnjY3H@Ca#V8T@PchH=@-^A?XPE)-Clm2`_5{i4?;LY$l>bfMUk9FQ(_r2d z#dmtVoQ@@g)PKiWj^WeRZjk;W>F&l>&#V& z_#4cfUjHmxwRxxcBQL+hZ#R6vCuMO}n@;n0^nkLss?92U{yF`v*1y(#njVlV-#Sz7 z@m+kcS?J5>^wH;RhOc&GdIKuArfp^A#)BcZK@egTj<5Wq3t!#JFmsC z!gm39{`MBS%VF#6w4GiIx2W9JL{e*J*UYRzb}_u+EXTn+A#-Y7Db@@$X+(XTY`}fIL&|jt*_LPnx_)!-h!)Sq zEUo_Le{-s@V$8`Ir(OM(V3O31I z)9uejoWKt5_#E~|YmhwbH1xlLyMZ>>)A1(6OnAZ7WUY}4C$@vjhUDyAZ!~|-EXUkiG48=~ zmVSrbKl+%R;NfpS%}<=!%H((yu*B7kn2+;+A>q3m0eo!F`-n9)Za)6|@KYZ0K{R`A zGVpruz;DuaTnrbP1rLt_3B2vVBOmejcq(|`!w)UrF2r$NQ%HV(8$YysyMTvBB8$hz zNAeM$dyiVaK4ivl|A-m%@>qm-M9If|1n&|kSj)E+cwh}gKGItpU(m}gpRcTj3g2At z>2e%X`SQ_C@_j1=*7@!MUOO}LBzW_{r}16}UKTvm^BZvq-UNpilntQWz15)D$zx5DFr#gfSPImZ|B?ecu+b_u@EfKTVUSmnz{V9EENqkMacI- zL%w~UPgbWzzS!QqRpkq#g^+It66o@7Et2o`jxXf9&GXf|;s!lm13q2e`U!D`sd}Q}R z@Xn3;?_&xNOE&@Uok*%J;1* z-+ztroew;&w+aa!4X!la5rxMcGAYMjMDq1{`D7PO@V*q`9aDG<6yArB0IZ>%^8Je} z{6d1a-SGvzJmm9T=oy8NYtXtJFROf8z)Ld>6Us z&|Wg&)A{niCg#I&^6j{YM?b&8tn=NEz_fPoPmV9-`@GNhQecooz8`>3=UcAw#gcBw z_dt~I3&6_~$dllGCCax9;FQ}h2ZwyW809P9uVHzwz$N8<0EN}%<=$~xd3QO!P~Li< zuk3z`d^^CW%PZfxVZN;@-;b3h^UWbq+W5@#o-|%o>2ImR+u-nmeC=L7@{mNnn zg~$7==p`TNg?spEdYKdHWt-3UI-6@D-&v7f_&prf8}))MnvgHg-vVpsZ##gOrk6{i zax^PE?ifos&WQA~&&x+1lIZ2M2rsYj-r@Nu?|Y*8=>gzX5y+F^ZFYR2KA!dYVtdGv z@bSDYM47w`Hj7ohuuTr-csRN*JdZ?KpN5X$eK@)=yyEk1_q@V)Pjp{sRrz*!JeK#B zXr5D6k)H3*qxnl6_?W&k%J-+y{AIbyw@c;w6n^V=Fs(?wf9d#wo|pK1S4H`L1%9pP zc9rjH#8EGlcWG3=%YeszD(m zzK`S5df5xSwEN{p9AC(n?;|n2SR+WjA4ZtYcZsMsrIB7;q@xK z??nAlzWYKRlF0Y12yeT>+vxdNuD2qA)(gM;k~Us7I=-NncJMKMA1;#QI|DzoUUsQ` zH+w#&dlF2{SLUN@fHwhtA;$4K|T zeDfud;yVvQf;G?<@E!B_+E#?Jyj8enG&kl>q8snlVLAPJ9n|c7yEU_mE&6k+7?vOmV#ewpvCT4Y~3Y) zvDpnV$1pJ!Y7#7-w}DTzTxI6Ac(q5qyDtO-!SYd6w5pR8|IUm{Pkmo zty=C^ojlDZb`u7R0%gp4_zOcz#(co1-wLLZ@Rqns!E=SzCen{J^@;Rj4d9T?io;ZoS7-Uhn>Q!;VQiy_=LWCxjV_DuQuxnE@M{Y< zj+>|3cUcMH3ur}S4i1%VvopJe{Y<2!jKnQtffCpkv{mo~3;33;ZNzf15>F*kbo zIQG(}uOi_eYrd%X$;0`J5dHrk9=P;h7V&>Tbwb8}BI4f_`R7FGw?ygLR%p{iqV1LS z^9D&j=92W+;w3rWb8E3ESx+~MKcEJT|CE98S-6wW#2*lCt8}`_XZdh2>+ssC9*@cg z@m$UXo^NgqxJT=Blh5(|XSiqQQpmx3b1CwroTUJ%p$j}4j`TJh{Knhy$jNnSTZSup za8}@~O+4Z*wz^4=injh7)5_xMRg~T0EugOLbGye9V$EZm5Q=l9Gn+{XU%MU%(<#pg zW+##X%ZQV$I(pRJe37{0lrkN`71PBj={NZdRnSV2Vf}`_?&)v8^4beF^>uXKoVrb{ zrQ6(VH{5L{+O5@Mk;jp}2!<2hM=DV_;j`?8U4EC}N(r-q*u76$S8d!dUF2Ekx4ehP zt!zVFPxtDM&fD4?cgn^#H~!a!ArfByO$RZDPAAJU3NcOzNeWH5(^a z1w*(f0#J7M*lrDDXSi#6;|O>wXY+)r6g(RNJZuniI~c!m=y;^#H+R zxX5=Kerx%<;MckqJU%;VyfRb_$6o4>vjD+chTmGgJ@7MMnJEZfE5bBhE$~D>4D$hR zvMXDosDpfw+whvzj~jy#^D9|>H$vq$U_qOsC$hk`@yUa-lnCz|LDpaa@xOjACY=?Px^-Ei3trhIyz_sx-ftj8>PgamIQ!nJ(d50>_a zX;qN#W&8$f(BD>gC?9!9g2#H&c--eDALTpK^U=@m5&$BMsXV)3EBr!&$M2SEyhm02 zP6adhh_^Dr<03>F-c1qSK81I-!sEC^`Es~OJgef%?x+3BI9`w74_%?z7!Nf`+zSXq zRIkL5Z@zfo3g73D5B>-0V~D4XiqdH6 zvwxye@azvipOYMA%rE>e_Ro@VhmhE@;Y=)!*?eDiZ30hb48lJyybn}o`Nyg6#gIqt z;KD!Nyx09SS-7RRgSI8`$D8ZDpKXlK%4eu}hUIYy(f^O)flL1fB0tNnpJh2-)q;_{ zlX+7H@tKx>hG*eUuErlw0|q~)XE^)+WPd|#K%mu+AHPb$$M{k*kK$Q!UDxdR88QT2 z(K5U3($PM!F;)DSRR|;0BKH_Kibp7>8}`_v0*Q95dbH9{Eo3V^vA}l%k1O_JA$kYXNe;YFSL(+@N;Yz68T<0fR^tm;IVFb>1T;}?$r!o)8=0HAswOu z{Y-mQ+@<)9ta^o!eDlSl_)bB%o_pos$s>%gqCd7N%)RC`%ESw9ZrE=ZGN;MyaLsC- zJIk?*e5T#wuCs@^*JR}WyE6BZGk!AI*DA$+SV_A(JB8nm9h1erRnDF3qvwF!Gv!r> zi$qe!BSx zM&W-``4vWG;V;b3*e19)^V0;sjFQ4X-u$P>&szTR=En(s8MTD}RKszVGz}N`W?o3} zpBnah*q1rK2Tn-7BhPVE&jWMxQ$3@c4{lo1F*9v*fK#hvoLzTT z!J}NNw8vM4!MtHc%gK`WLEkMY;@KUL(zE zU{3 zkA;EhP0UB?GGDTsMBBsrL#a`R0p9@f|<{4bcTpzt4k9Ae4{o5p(W&-T=%_rAM4| zH#U3ovXST9YuK@WN7p;sAXqyt>VPErb-u!1wu#rAUY|c(m7b)Oo;H7Gdo57L{674g z13Jo>U-@6`pK0rz%|4#@53YCKlE9Ny4aY>=rtf(EI?F%KEJ*Onh%Ef$&7Gb%``belfH7Y_T&or=V|D1)iTD~Rlr_B}lZllKQM}{m1pX*+Wxni;P&%X!0mTwLG99x8> zy#EUUTE1fIpMMHI;068dfS>x4kxB6WB*H7U{`nq<7urFwxgys|wS2|aKieH%kgwQW zaYcl;AN9d7GrdcPn_uMpd)VBNEe~0H{oSSovUHY!*SE{C$z1W&d59i{T8j?szU%2wQq->m^sT z%$$=O{e;XWjwfU)umCywS(!~fY*wa23#i4WX5?Pi#iA7EXD;m5nxPeDT*c;UA;V~C zuMiH5oN6K?{%k<|llvN(55n_F)h6X9U0x&2)%d=0%*S>sB=^egVAA)>Vso{3IlOQ$ zZvjx+T#fH*XuSVd=W73m@@f4Qo2&5|QJ1&aT#aiyzzg~-Hdp)e2(Q>&ZCfN?vAJ4* zgjZ~?#&skuU$MDbM})T@?KEw!Mlk#jZMxW8?Ue}cH=V0}(v<^$9Tl6aU5)6`%+hU$~YyZjQFnGA%kz_@Vh+x&P@j22dXk39`kgz ze~kZr3*ueBDkjT+wVi01tpeVxx8F5ly+T~rsSXSt&vxOzTISdD+j;o4v=#pUyFT-1 z#0zlod6f4$+!9hLpBnm`1^y9kK0H&V7BK(Sc@H4phj3;88}eR+3F>XQMk;qdWP7dY z?a23bTv-4gPv`xwb;iK^IQ0E6EglnYwUh`YX`*P&lhAR*30DBi(NEg36wDl;MePmJXejh6<0~(6a+rkjWs_l zFoR>PX@kEIG}gS24IbpuKk7XGFZX^gE-)i>oH+$cjD?_a=7)ZX(xv}YlzzNtxTl{_!aNRP&S%sfSyN zb4z}j(C5^M|6KF$Za>5Br&Ce40J2&D#-+TcN|D-IgQggoHIc^0yzwi^kGG<2f zExZ|Kc|xBv%r6t|;R{jvMl(B6AC2agggzS$&vhla_Qchf0%h=~)-?%z&NXuq>F0)T zySemVEF{LSjCqS01N|51E#?UHS%7?txjP~MlLc1%;z^Wz-76#f|reP1S7 zSvO;@H0OCdC*PH(x1bF0Tp95%HQ!I%GnSew68zednetp`zU<|h52RA~w!L;cSYawdsoE2K70!~`IrsIR+C@>{8Q z2VVZjm=D_Xi22*KpASagX8a(d0%gpH4DCTlSzM*?uS>L_4>2lG#@uhlB>Ln1W>KQP z?hm~DkueXLpC#JQ17>Q1|AC1A5%Xw5o<~eqqP`w66McHlFS)<>C0{?zKi0g{>(lwi znR9)5=O1srnTS8tT$D(Ey7^>+f0Fr^MEn$UtE+wIl73;t zKRe?CrM|JA`TkH2am2m>EzToFDh$?Ger=e0XPs^G7~>RfO}X4__PMeA0*a z6v5e01ZQJ}^C^$BIl}q058o2uJm$k;(3Q~hANz3J#u9p#a=kagk#cSG_h;1q1VEIc zzNx=b)NhV1>eJpYQGYfb^=0ExKQIG{hC_bKFY=LnL8(#1EU#oERpBUfj1O3U$b)5LoyiAz5=432%Z!B=2SpKa_;9IFw>Ft*W~O>u zaX7bb_d)3QcVQbxhU)3Nqa(nZ0; z)3K&g(iMWG3K})ra2(b_3QiO}JRQG)m^@|DHXIk|Tj(Oo;hSjiP{iP2KEX5d1dcqB zdiCvNn8Dd`;)fT;Hbmb-iXx@N4@Yt>B@JVE%<$A~Eoo`v@Zl-hUeZ#=;loq1I?__A z@Iq74jKiU*M$IAJCk`K;a%O6}5bE30weAQT-=GRUidyh7w}Nk`{I<6f{r)gt-9;<8 zxqIfU=IQc-28YEtQ4fxj6_UmYm|{^ryGGvD31WW~1F;RVcpj|PwCqD3U~qX9C`Ob-wH3EEcuCi zAB^xGQh3Zq@UF*toR+Vvh{2_?NfMMx)k}o5$SI?;?m^%tEjvO z6rMhVf!{*X?e9_GQNH*LhJgt0X@$q7RFQ9-XikNj>`M2!o$yiH!;%RKEzQz z@{mM-Z;J4qS9o0775P3E)$aksrRnd%sD58ic#{-fzrzdd?^(oAKJt)6zO517iwciR z%_85ABKC_@TMrdzlrqsBH}0?c}ODP*CV`F6yBMhkLkXSOZVTG;IGFe zBzS*`0NsDfu&BmzaQvH!OUgTd-@5(reM{y;9+Kcagx?yk26*Hn9+m4~gx8|vyTJ2NzMawd!gIdT+TZ)5@nDIE$C2N#uJx!s}Cb^E@Br z`wKKGKm_^r7m@Ev;M47ItHQ$)c+lSi4ll^}jF*o*B$4m_2ydIhd#mT8e80q{<$DgE zdV~oH-Y*cK<=X)~8DB0!9Qla%eO!PD@?k^VhLeXRc;CfujrWj}Z-M6{p8sZE&|f+5 z>JTm@c>fFGI^StN--Vu0_`ZQ~o$sS6-xlzakNKV%^~)xtOKbO&qkgnk;Vn{lChC_h zUOw`WL_U7IQp@**!dvY5C|@Jeqr5>cOW?18Ur6v~AY9|^1D@2|Wnh-_@>`%!y zAM%g{@01AdX(ith&&PCAF=5s6twFjv0(la=Dd5xcJ*(uymROK4iH<&vq+%j+YP)d!i5Cy8T`h&>{yqgJEnlsY4_lf+zPlY>kgo=K%!fQAk?*buZ<>;Ch38|s z0ki`xUoG(J2;@od_-zO+Uz3vWCh(Gvc<*+2LB70~k31y7yFJ2dQS!BWKH^=61X{ku zz{?_BNbr{8hn8=Nl5ZuL$w$1|4ll^J#>+<@lHkpZ@Kz}Kx;!88rb9R_A8o+W>X+|k zYx%mAe5({5&nw0MAm27GA9+Y3Uqyu1r{r7X`6%BsS07>g+X1{f0(la=`lvp(D*4_8 zUh)yI!r=w^_%1NR$wLynlOntwO1>V?$8`UU^e9S@?@9Qx@CymvVT5b_?N;)w2eZic z*A6ep_Ze`6aaAMu)_`rU;HhLeXRcuf&rt&(q>=VQ9FqWawffGom= z1dre7)a9*H^4$ey@)7TsrAhrgi3o<1ha`Bv0H4NdQu1y0d`#De%Fy+@9{_3f%jZ*# zH($wjx58WI@Iw3J{D}FGha~c~MtDnW2S6QxJPF>)Xgpn}>#rPmS%eD--bDP+`s-2heF)6tBi{dw z`ft6Lk31y7`(@N#wkr8{dp_d5>gprtF9*D|`u)$SKDH_O?pJvHmMi`T{k3@c$U_qO zeh}g9R`Tufe3b7eQT;9fULAov3Eq#Q`glmm_W*dwN4)t_s!_}tqcpXg7+zf_dg=}YLG5XzQ2g%t5tZ9DZDpDc)N<=RY!PD z3hy%tZ+3)N34fY=Gb6ku3U9B%`(cE)y$Ig-BfKt!_c?`kUxZhNN=%dQ-Ux52!h2ld zy%^PRe-XSRQT^^#cwbO>t&x0O$4HZJNhIH1h4+NQ`(=c;r6L{g7ZKh8h4)2;_XkmV z`3_>5e78mAeI9sO;IMx@sqj7>;q_v@G7ayKBD_}=-d7YJ*lhpJ!6m&2yf3?-_AmQ3 zuR4qqbcN(y3-L?bA7CDVzS}F|ItlYUH~8Wo*4f=TpSOoaLs6LlEbV= zb%xKZrkp<>d*m~GI5vaA89u*D-}~`*`*cv8Q*#2L1h(l<>&h2AQskY;8kOK@ev}JAD)% zWI^K1>SKV`cBc?lK=ekG!^|N=DU@B_t-U8`mPZ4jU;9IVXd8U?lX)JS(m{CcQ*BUw z(&dGzprt17io<&a=?`(md~CNu!uK8o;PzwkK7wnEY^$6EwVeZ}H!^uMu zJiHo{z$75G(&lF0Lmc^pik+``1sIT3ujWgeoAKOVJvS?U7WV9!GwrO*{qYko zHBWOP@-4ub^Jb6wTYx!NnPG1BCX}$)`Fc2qk7x58V!5b?k^EAAakcIwOk8PG;{T1^ z*XLGNh2K<)Oq*N%hl*#br5yn07mhOKul+AKw_@)u5YL*a^IrC6&aI9WqVY>cNEevF zCi!Q5yyLGh9J>mH2NOj&N!#9Q807d*Hvg>RIcjx!KPBVbin8mu5u^DIvvoOGf#f@P zY2ULO%{zx{NBiAk&R5oTwXNUW6VGB2q0t=1PhdtdJJC}U{kjG-NE$>tNh_f`nnq@MxImf-cDXU_t33P#)ligqwhJ#Fo3dc&}NeIkdJ=a zzyNQ=ImJBiX*}6CCmtVL1@FxcFUYq9e&!=2^2Kw7Wndtm^aSB!*>t`XUdlmN^8GY^ zYrU+1KP}&f9bYJKm*$wkp%E$Qx zN%%J4x6Zdp<@-j@$8<9HU|o_p?(h;4JkB9B-UKAzeVz42-AXy)d;80XOS`wfAK}!q z(C4)Wf#N+6zmZk1=9@1b#rH$}*7x>f1i(c{=0=orM)T~(*(Y*uZ^Ua8mVe}Rmm>|x zK&`tpBX>DVc)~MR94_5IaHu@{;80cm!6DN+Fj#pIZf@sLCC=il%kTWL$>J>H)}2E& z`JF>N&$j%T%Ma(afAt7KS&m~@UGU@D$9Ep?0~XIR&YGQv`Mq9Zwc?E5%r1Pxw;$oH z<81med-{ z$eVRx#HcabhCT`$;+9St7_8Z~bEv$1=g@?HCvO$xuF3DV7*%FB@@O5zvwDTu#dC(Q zAFTFyFdTI>h)1jalr|Gf(D?Wx|Rv=7B?|e_*hzcjwR_B9AJ=bi1s)&>^r} z2hk5Jy597$p)n|9N!2|E-MPZ8gNV=Ef;{Qx)qK*&h75GxbPil|&%x5H<2?y;wg(XY z_7Zbc^iNr;P=;pY#XQhgVV2Q)2=~qk!Fzd(!+YuMBwpqeGf2$Js{A0%2S18A;Gs(3 zi(FGtAEw>4fsz4Nwl{!>@mVv;maWv>I0z*m&l_0>6UUg{Kjs<9f^iPws9WoY9?&L^ zvi|5V&+Z-~FZCn*mwJA*$)m>HF!(0;H9z!ni2Aeqy-u%LGY)lQDyWNW_HrB{wfo05 zzMt)QlGO|DMQDq_L>-Ow>1`gnQ1=L<{Aj0lmkiu}7}isR2VUjLRm%te0=UGg*|lw` zq;_C%0@`e)`6w`#4%W1Obf~`yLrB#&Tb|0QhlgfkPR+K$x?tOxfOh>4z$kBL*mZ*@ ze;0igJz(AXfNceka9sEO#f-{G}olJmjT~iq#h>p5^G?Px?r0e3%nZ0 zQ`OJ#s|PWLqHj69qiq8p^?T3BOPO~?OZHy-8|AGi zuNpWs3-yQoGx#UQe1-h1bF{6a^F816i0|W`ub=W&^$+15dNkX+^Dyg$c&$0Kw`^$t zXlJd|?N|D$KQ_d6coNE_$ASjnS3%wqUtaW2+tyib*56oQR%V^f*+#PFt|2ril>08! z+g)gH=4da@pJ$z4j_`Wqll6I^zK-_zxJAqdaaBIfWc!CERBazx2p;L<9JuTP!QDkww?X$JH2ZzQ$)(Mcg9Oa+OXU%rkuFo>&Z&^>M zFZ9V92O+<0FI^?By|ka19H%%&>9)eWr+MD`6yCeM?wrn?{_Hr=iaKg_eU)ve7Wcqo z_k8t83Hl|*sn67-yiCKsL6>!fIf88m)VqxX2E%{)>Z@O2e=dO^?F2=*>on<0WybZP zp;up>SdM&{_6^X1!?xr7;14mrkbha#Gef_sDmlEYYQO7?Xq)}Mju3ZRN!5E#McipJ z-cyIt=Utzo4Cb%?_SIL9(*G1(+S~D3fs1PbFQQg>WzkW1(Y|*%Twd)NckPDDD~mYV zZIcjfm1ACkGyVt7!JR{8xGMMW9IAp_gNtPx_YCS;%`N0?{dk^2 z-EoeBGTHeG=PE5JbCoL8Q}2$#Tt&V|pk*q_L$)-z@&&m#=c!US#};4k<0{N~sMC{C zXXP08@N6)#ruY7#(md|bt!%H?qkh@HJ~GsgdWSkEPQY)r`I@Sapx&=Om1&ll?_nIO z;<#IpM?CLq{n=f%k8?~RKj#bN`;{?=mzi%2v2U}Flw}7F9b5d>BhZ~23ytdsJ=x*? z;Hy>8Syt}R1B1t)=cXL{`!$28z6yxd%A8gZ`%{vSU=iGXjAvQ zHkG{}ZEESME088{Tv!v^P1SeNzD}|2i|vYShvSO0t#5#b{N!`v$=?i>VQeWwnnq#` z@Sb<=;5Fbo8Ep`A{K0bcjZ(B(JOJ78mu>WH#1l8n*${@cT(tii2lv3O!Q6-A`5STr zhj<^&_ugyAd5-V9{kXZO)V1H;XTe22@qK?E+OXXB`#f)N5#D$#mob}V!Ps1Ja@F@x zhEoO?qYTsu+dIqghm<)F8O<&$A7vg(nNbfMOXsjpwxaL(G`t`Dh+`;lIiD}BJ>~Ej z5vF}cXdgJGrs{s&XYU_sZod~}Hs>NY4$eXv=FfS%^Jg0 zX64{GAaYO!>f&?Y$>*IMI=%_PyM%lw}=z1&etJnz} zydC$@a?C#~a~Q*olTXSevX@|v%6r2G$_95G-0ir(@#^wdJkFIz{dWpH>Y(h4t*;Wy2si{$Fe7<7_V()RX8CYY1Oq z7|Sp=J8+2iJ$+x;4JhBGQl$^Vn_KytB-_QFC+Ic(jz&)1om1TDh5$~kjz@hoTIt;z;0240~ z^d8m}^mypU!9k9T<-I$H&~KoR>jp2RF7wo@8y5@rkmR^{snw|qV?Rk77t0`@jEi_~ z88$AST=neG;sK1!7&jV#XWL5eLG-=W!KvV9diHf`Lwr_aAHNE2JpL_K;~(bR_Wpgm zc`WOx-1D{gIc$D}IV}51VcfgXj!&p_+fK?+2W6-O_VG&8nd`&bhJKFvD6Kq&bMeHu z$a0|`PhmP4#}?zh$U1EVhPy}IVAm0(&;1Zs(r;zFBp>E8M;GTl6vin@Ux{|(#-(jT ze~+|+^R&W|Fye&Y(D7f{zJ2}R*GB5wNcSZ0WFE_XK3*i-_SD?2((pc9HHdkQ?Z+jp zuI#oi<2lLp$%UG(4Q-p&uD+#vqq9=E_R5w^78$>NVqV`WH0A{~ zXrZ)y!p~v=DiBTq$9<4gg>dfsY2v=%hZFo`&3oW~IoP6{+gFKcv}ZKmir?eC z|8DT#h2Ln`HvY$B@B`F>t2DgrZi5VMw)ztJjdKzHFKx8eCgPb(f%wgdn-cL@8dAh> zN?enOKiw>bzsiptJU!z}5R_hYek-p^4*4dTwOhlBdil)>o| zpH8HoVz$9g`wd4^%&E{1?rql2WqA6j=C(xosb)R=`5^yP!}pOEAie0{16wD9Z%T9~ z(w}RV!_T>pqjSw(q;G|XWf-3S`R0m5`t$8KILbr*=bNjMZWXRmQq#{ca}()jm|FPf zgV)gv^Fx%M^9VLE=Fc&n#P-5{;d51b%$dw~MtY(j`v`&PUl)9CKWS0WwfFn>NH+3c z723A*4@La5BK|K&`R$J4r$y;cjqpDl`R|DQnh=X=pY%t1%w^hX-41{o~EIJ$~N$Pc>in@@Iitjb49KRGzmd;wPCmd-++9)ff*x z6Up;=pC28{|7@g>_DJ4OMEdwu#J@hm-x#I82K}A1*vdcEe98O!P|j+M7b>}xXN6<8 zV`eqJInxY(txwZ{G}GvxVGPzSOl{7uDPhrj3;mezKSUS9;$w8d#Qt47+r1}OJI9!9 z^v^}VrVH=^x>!Vcf-W8up7rt1`FQTfGQJXd*S-b$(?#Vq(S0k%GP-ZWJc#Z^*zl#B zH>RKN0^rlV*qF!ZE;QyDx)^MZ(M5W`k6wET##p+GAQxT8`zT$=`-G3*M;H7@=)N6t zKqs|mH1p}=!6i@kGRQ+0<>GsklzXf9^Swp-AES$hiFVX$?GngI_X_BZE*?e(=t6Ig z)4d991nrCE<$FZL&(XaE>F6RKz7J$^=|Zo2efR+%{w!VO_dH$bm;I6DC`UV~Z3RAE z4C-}sm!dxDVj<~Ky2~I3UGQ^GkST}$=;ERNS-N;~dd|Dg`}l)C{sr&ndn@GUdoJWZ z=EGm|;V*mtE8b6|1m;sl7wO9BVw%ABfasDMpc^#3Lc6SV_n6R5-{{*XbWLhNN81H= z@(p;RhfBTfrHlI5M;H2e!H2)%!#QW595r+?S(xDcJg13%QUe~6ek0s7B3$?_E^f|N zt`*QX0&3q0eIQ@T&2flw=e&Q3_tQp^<*@zhCfH}t--i033%_mm?Z&*scHe=E?HKX2 z2dZ7^+kYpXIK01|F8q9-pZuJ|P#=5gPDZ=%e)bRgN&IHS7Pz&`(JtXmeup0qAomjt zhujC~Le4zoB3=vKGZ6@Cc(WfjQ11Qkv)nJyMfytcF+KH9f0Oq!J@NQ0d6x44T`4!p zWyg(9=#Axu-;N*fFQ|`uhd@xnIS7Yq>yIw$k1qJYdh6eoM^Hb~Pm)y{Xhao&^ z6+N`lJ)`-@Cu`Rp4z5f_Eop08wRwGKTif))qnS?@@>;lTdE5H#TiaG`+_0{#_vY@~ zO!qClG>z-*+k(LE?zWDe)%b1f@yWd#H{7ze3(sl{A;uLgZA9qY(0f~3_m)wK%+uTh zZ>r?NQIJ|fiXFmPcx+8@M(BJjmG}a-eJ-UyEcoi~zP2v=47~ET^&RWF86N9O7aXcH zmn>aM725Pr;JVf8aDaPvU*{UHROrmc;W2l8N8jd+-NRz1Q&6q=&Ytd$jb0Ely>r95 zb=~Xx3WB%>qF(EW>=dJC>OvcdBML1fiV0<=(8V(OdVWX`8i`u=V zcf-cMw!RH*(%>yF`sNjHzhW61NiG?4&82U@a>24|mtK+*XS*~zN!R9HgG@Wu^_q3v z>*!o{@nvo6*LKa?c>nkRBBSKBcQq(bgMLl7E^#o#HZzvVBl9G zj$6saGh*?4Y+5#jXm&hT$vqvL`r6iYY`i(tXz=uI=w(G(fBaq%3stP%J&vP$Rga9mZ5(`uv;E%Y?v1yhpLcKU=v%vCz2jmI ziLPnWG8A_w+gC$C=!?9wNqw?!2EPD>0M$MuO+aDO*aS_vQ5|O8%+$u(5_hla*sMyl zmS*2zzomO)is5%+NZY&#pCIYzT+`jvM(c5VTr>`U=Yj8SZ5`bmE7!Jh2Jt~h>rZ<*FOdCo36Y;f76gCk9Z-$`=3#H`xG8mvIXx^ zhZp4Q@$!*}BzOZ6-d2UjM^wRk2pvf4uMc=x26z%Yt|jR5ZUbH`c-a0<$0c~19A1!b zH=gUMKk|?SZ$pIltdj2x&&PCABKaNyUYdN9BE097e6Z^X^1X!4r|Wkg8Xof@4@u-Z z20mThY1u;m;3KV+_m}vg^>+YxdYxAAet{nvuL*dM1Bd#9r~&U=4ln3$D;l2F19(V+ z_st0Jg=|5-Gd&;EH9EY|{wQ9kHzUG(G3&l%NcpDXA|LUp9A1#`=_(ga9+Kcy zMtF4)is^}Ww&$aNm%|J4Jqx@(v|S;=+Y#YS1Kut$5${}F&F0CF-{oc!fQq0v?tF6ZLxlcvu3k@|_P?hDEYV)Ab8($?K$Xg4e(kB5Q33E+L$|E9w@UT2`r>E>{e-VQ~5+5NPCg|E|>H$-7Q zOcVJ?@5KEG|9hPef5E5kTf+B$aAQ=>&CCa1zaMj8^KHw4Cdqev=FGJ3?6^N8zQ3Dm z^e^y^{Ep8SH~572cdvma#CG<{D%jG&ZUOeh*3O4Ei~$FOt)HE8jsb5qn-kyZk(D@^;}pgL{W4 z2kon9QRv8aL`mu=YPeuujZ<@4_n93>Bl`jGd;aW_I$vi9roJ7>k@HT!9!xoap3`!s9w;>%%jF1#-H z;UU^KOZmh`opyVr`(d|@GFZEEv>V!#Q}3}&`mxI|`0)hTe&?wZ=%Ka>@6Et23U?D! zXX~lh9St^IcOU-v^QJLD=_@H}Nh+ij1^5`wn<%D}?(W znl#>J0^dK_F!#Pj8RWw|cZX|H*K9*#lXWs=r~Mi8*;%prrJAbuAKqE9;3e9_8}nXV z_YdWLn?M`DJ4W}zc5vrmvA;vx`ab*5$yv6$`|<9;z@d6&Ge?=&CXIO*df#^1XMLHv zyuDOA$DXK6rOIyoW1fGp=eJ{3#1Fj>4nhaJ!OJ}lyYB&)`vlu?Eki@%#r+XpFXQ*H zvC7*`S=&&Q!NC48gEEx>m$t6dPu#|uy|woB|HTA8HpnCz~h5|pb9eYg~I8jPu*zP%BZhwX2J?|a%%i+_pu}QAKI&mMW#AZxa+K%s9$A()flCK5R-oPAhxfe- z?H=<*@ZJ}A#&{lWn~M37(PF}^N$uYIq~+FBw$ zi}>1h#O3(T8Fb0^XkeoY`A-6l=mZL_sDsS3wZ#~NF@Uy?uFv67z`i?#=V?2h?DKu; z$&|i#lJ9%^o^R&{$d7qR-EgcEo7FYAFR?u#KU>%S9%b9sG1?yYa%|vxicW5pVJu{q zy76tWVr=`sp=Z#x>VU^FiI{@*L$*0g;EtftEl0cK-YqYTt(Mpp-SXXng?0nV?!$1! z&-?9KJJ)De_H5|9`2xFK>-Kd_=i1&i-B|hu_tjVy?sWSu9i9Gosx2E$4l1n&-}Kn%i|= zwzH>W{pu_h`Zi&eGCOnb^xX7W+4?noeZ8A5oH3)rp-*4EVZ-X4?oAsuZ|v;mCeMsM z9IDm1rep2;89hC>th)f45AW*k?8|n|Th%;oRa4i@IdkSTcFoSsoYg(MGdHhk-t1M4 zD;sm&o!yOHvl{2jI?pV43-n^w2Tcj*>kDU1&&@L@Rg7IwUh;<0icDq68*zqORmmx( z)nzp$rlZbDO;^&yz3H{EA;^&#lL_9X^6=m?0`SS$6e(GfY7n$c0@fWGojKA3Y zWg`CKD1MQ7G!efjioeW!I1zuDxdVRME;zc(yZ}G@Jd45h_qXtK-Xs1GqhV4i+$?PT z3b-Wp8QNi9qWZh*qc+<9q5pfnJura&9{%t|KkY??=>K?V3y%NP2*1?(TftimDW^p7 zQ+(MD+W2uMwqxAq`O9tmc=LN~SRm$Ijep;Y`(1hFnXh?y zoqxVr==I_J7uhvb;<1ja(Y}5X$-}jFQXQ^pgZ35LiYwzIo_`y{tMRp=2cr7>nN98f zu)McN{x3%SS;W`oyBFmhIPa(Ao8bMmbk9L~e0ZG?2cor~%EArhJeQ#e=OQfK^S#SOPf&wj zh-}~hMn8t{dbqVKtk*PPvYy4y$*}h#HOzHwxVGK5vkq^swbI#Z(eCR}@X?-aKV1xb z{U|Txd7LivWAy@k9Hjpe*elXSyLgH2VpmSKt31lZbX|1O{;a*&e5^~spLwfW*QQ>! z&<}Sj-M1k>???8gfwz<47F5N|nPe8rS#8o3BN3C_dDl^5lH?4FuDa%$C2g$>mM*xW z4YT2nKI|=TSih;ysBjywadT%MY<*zCBNj);6L2kUeNrJf+ir8_N)!sau+|Fe zH?LcX$A~mGYkHs_L@ZCRppYW+5hb$KNkkn-L)NIFt9w)D#9)QAs{4)6=H zG};RmM9$_XwSjN$Th-hKdx*8`y-^UfvAMTxWB01mnh<;%no#ZbnN*n&CDc}oDNg9$S5D5Z8&ID;YgZPrd_@p}>%+ ztwL}S8EhL~e$^t?m!&a;D4PGkUZ?~1Li`CUp|0un&n(ynA;A8%e`YxYA+Z(em_Eyy z3C$KOAb7i+>Ch~DFeMC#ynT@M+CQ`G8Q3!$B?ex6&Yn5Vf=v;AyJ2sTLC z+6Z10Dz-M7Wvz{7p0Lf)4{$He@aF3&hdIq6%ol}lo43@5zx;iY^V;`Z{7>tYc@LLX zV!me;qwryBlGsD7!XgCcbeN)9dC14PBBzGH3wyHV@Gx9t7Ch`jCGgsTM?T`Ai1vA! z{#TGd%g6m}<|`z4FXM;a<6Q&131A`~)k8kweb3`W(<=d|G$F&c^`@X{q@-4=Ei*l2PBzWJA@Saohak?*fevdq~gI14c z!4%$JC>@X?U%pqsd}Rem@_h_^x*P{pzIc2H`QD5Kzzg}d1CQ}Sg0~t!G~N;5k&pFO zjf;Gg<82Nv$j5mq!^uMuybB||mz8|zDgp2PNU!DNJa?Bxa(@KxPK0aum?86}d|d4! zAN?$!)?YaqJi}#0Oz>7jc;yO@?N#v3zz;1S&o52WA2ux$@>Ky(^vB0F!8?ldTE488 z&p*;xKCs*GOzQGxm3*}d@9X%j<*P3uAD{1ZzRf;gS;?b(q$hCceCt)dc$^I7;QMDf z-+YmLKj`>EdujFgp2^HWlJDL4q4UkDe9!WHtjAlBUgx_Uem@zMs5G*z)L>jec9m!{k`brBM(XN{yf6lqVN`bKH~kMD{p8oF9DBh z%0hzoo~XS2zrcEZb!3tzz?>Y=K6yRh%=s*|Usnt4MoaP_R{;$K1V*Ocm|0VADVw5$@I3 z?ZUzU$thcAQyT+K;{e zJkAO=ZvUTl0H(cQuW~E5tXg4HknhKti8%Khwt8a2L|cM#_ZsA^$@NnaXpLc2(DLf@fnKi z>%3RgjaxOyL#RdMx*t3_P1kE0CDkO9w^N9U`s`3S2< zSYCzY5r$`=qtjH_G=!nw9L=e)9Kz6+k2a~WCh}$PILz|}GqCk3HLV%QQ9)Z3wgX-} zyzR+$+Mb|J<8!jUhBkw4X6;m#d){T_HR^2X6uVT)C;6cJ9K|lcpy|I8bwYa}m;ab{ z*v#NJ?f3XB$1#D|R)4{%whQRAs}OJ@i)>PaC!DwBL*!}4K98! z^6TE;ZvC`ODG+UtxaL)$vF2&`w}*hSc29nv@_!NWTn}+H*6tT2aQF zVV+OKpP^zom#H;;kEuWy?G{u>QL!9CF=I=g%I>(${L9NSEBSk zVr6?`d_|Q0?;}6gGK9!~o%gf7(uU)T$4@(#sYd;%?5(_C zVI*iiu4>dzm-UIi&aCnYT5NoMcn8Y)rZ&ih;F!bX7iZ}P99i%Apv9Bno1 zUOU`=`q3Tu+`;he-f#1#vOo=3pvAn*o@JG%n{#&JlVN+nJ{4>~aHA(Ruo6I%r5t{N zvH_D?wtSu$MdBGa2|qjuKNj$^;0yflB>ZRjvx~67kOyB;J=P&|xD7#atAA8G_eD44 z6B|)Qxr*#dVOubLn?HeCl&c6Tcie&`dYeCiT9oTJs6mqBqNZ{cK~3dN$T^IINWYFH zg6#MKP#r~*wgVbA&66{Z!ggpehQi)x5e^2g?p}|>iaLY2K(w>2S=@;lX(CEt6h}g9 zX=iaHJHl}`-$nT2ut@%%#X^U<8F%bw!Zv&(P8hM9-pQN`Tij8jkbDaawoHj&z5jh& z#qi{bLXC;M1?VVmVQ@wqa#T%M3PjA2++XJo_qy)BH7Q%%*wwWMQiQ$b#IABUdjg?_ z4P)a}(gh3QoZ?omSi)@R=l=WpD$ zEG1`Yh4rQ*xTnN?ye|s*Tcvpce0Zj{V>#oN<0&Q!m-imZLq6V;{>I^jb+~>XE;0+= z*CV_wz+-yiu{eTvrNay5*p4{PgM|d|vIwsqcw4|kJl^UAZ>qx!^3^~v=Id{VmJeP- zJ6&Dgmz8`B7rYCQUh9wN(fL~}VFI4tp9%Tqe7-U}mU6`VGu-$Uy;Q1vd5)vbm-}k% z%+QnI@%?^Xj&k5-!9%@prY+@o(BTF7_Q214Wi~E&ABphlm3*A*2_E;Yw0r~br|E^~ z+=4IU%X9dcugvl#U)t^Ka^zILoWDxG{Gs!uo&*DI;rA;MUbDjE6NKRX6Zo`z`{Ad2 z@{}RiKZx-13Xji8f|qgaFSO^UJRVpq3EnS}sm}Kq&nHhW!uJa>X}v5~`EqYp^8JFt z3;8|=JUu1|-sd8`R)xp;pWxl)@It-u3`M9@3K9=i84lnHYYzN*1gbPu2UT1n&@)-bM+J4V~ABQCU4Kh*i0mLFb zgC7_wdYunn^#Px5_riAvcV5$@p_|u^d&nW;D;4=|2{4H+@Fh@0pvM?YDC3XRuH8BaRpBo0)`=xf&Tg>l#cG{7 ztf9AJpU2~s0MEX!>({BdzK(k~Fz>VZNxWVAMI7@htK$9(zWjw-^Yaht*oWqMSF3wn}gP6Ic!<{9*wjCX}_Tjpk8$wV44Zo7v-4<#KtPw z5qXbU&dA`nBzWaj_a5PU`K+UIxOks`4BAqrGRw0n22RyyWW3gSr{U>3)@7l7e%odF zP4a&IC2iNHe#je!r?fqj?lBTe7dIM3-1AtLh?l23$HYB~OB3<9=_=y)Ti%w4A8#7r ze<<*bH$U}R)+4Mmv4T!%PBrz3^m>Jz@u!=~iFiIC6o}t%sZPXCGGi0@PcolNkw9o?<;7^@Oul1^l|)j zb3r10x;ZO>&zV_)GMM$8p5UKlDii#(?Akh0IC;c6&0%EBoWvT5fnQU`%!~Gr=9wE3 z`18!e_GXGZ77}ug<&gIihw~b}heSX30EFm&#(M_f^1a}9`TE2B0RD02&P4op^UWyz zg^~ZOs(%olc4k8KUmx+GmB{aOd-fUm2XIxRz0rP;#CdErPSM*NrKjDV5bbP>PB`*-+w_Vs`R*~;l>Vo(F-wl-fFy-;8LUPvq5 zMz`m}?_TuNkG&M)gzr57q?X~F*n=7>J?>oZ$70I~;rd~P@9qA7?0tWHokf}NoSd`` zAxLP0#FENsDOh7ECu!QI7%=?>1xh)T02M1aX_B^)v^gdz7A+E>2x_|&sRB#UsP$U4 z?xJ>gt9CW6T^HG+-Id+#Ub{=$G+HWm?Z>Sv?sk{^{XR3#d*+>-q_}tQ{oFrxlK0Fz zGtYeInP;B){l4?Ya4YP4y*!^ExAuDj&K7+5&!GD%w}*v28p>}<1Abttu_u&*U8VWE z#>zE$F+&mV25HquGzE7=*BH?09#M!xCSax|4SgH;K3h={&z&Bt8U*2EktAWvSyB|W% zTXH!$Haw!%w_SN0`|<@h$sz6|PK=jje{KM*Z^>c11FxLf7a+&Xj5}*4FJ;Z83y4y5 zJlX@K7cNo$%*~l4%lY;$U$$*-?Y=kH+vT4cuLsC?7JdcPt?t{zn%9g;gik(zAeKw! zwifTXj+(_q*JqY4SrKjiL{eui<6%)o&-PyF;=*V+$y;LvTTF$to#|uSCiW$VK%)u= z2YRJAz7`k285tblSe>??gUG))DGFLRD2T5G$Su4e{)iw-8i$N`pg5ylqX2G1@ih0~ za|i9={!pw0l_V%g^&YJhqH>E7O3ul}h~Sw1_4IaigR3Y>v;v0N?5u&%)-t zE-|sM@eN?aJPD$Zj{T|{rF#NI{u*2vR#;LXYQ#l;NXP!V*WyKMa9fv);*uUmmGg?7#hisGV%GVfP!lMo#Nr`4&-+Pc!kP$S0KMC505ixJscea+_IUiUK9P>`{xXnD zB?1cZ_ZNYj_j>&Kdr@DqcoBbD;4vLHt&Pg<3jy9ik3Wt9lt0eXefh0Jz;uMGAsr3d zJJ3bx@|=C9tE)LmR~4lDl9w*0+N5K=&*8>TmwT{<19Qk8e(i}&;Z`xb=Wf-rQo%}TDSvH)WAq~xSxPfZs ztP7_ZgU(I)#Y^e_3F!bbGDkp{h9ASLap6|?@@CJGT|E19w!OT%bh^$`o_#NGkL}o^ zy}U_C-G4{q)Xi7CQuW-nW7oZW)3Gw18QYI@tFzdvz&=KzPxdn0UexVFSf-HkTX_z2 zIrf~;7ER_k&)k1P|60oZ0sm~?a`=_tyjru}?pZPX0??wbyNdURi|}p?_K04Z20M$r zB>%l0>@WNo!qD%?`#-xJZT~2=-Jr!jiR{&IFHO&*t-}7A?yW6A+8C!u+HDRmI||-| z9v144-NB*g!l>PmXW7gbw ztPwgvzo#Hiy?>Olb^Zy&>4jeGK&9vPyt|rU^V*F9-h?ZQYcZ~JTr{+F@2wK=QHDbD$p>Z{8a78gI(s z=D8HsjE}x4&T>xRNx)9A?U^QYUkF;x6*ym|dji~irfZyY{}%jR>bXzBJ;QVV9B$49 zG(K)4lSGqU6!AjuQuBu{zwCdw2lD|(-3L0nRbt-Z!s(4R+`Q<*)y?-T)G(aq>Z_rf z>lA9}{z?#@2;A=r+zkQ#O@aIG6&yD4&ky4B>`FDlPvG9Bfv_3=o&f)w0sU73`kw~j z4+ine0{7nqZZEo|Paf3p{^Ee1;|&_lO(ya&7#NQAro-kLpv!1uGTcPF!tKSNL*7I; z_8@l9hJx*K?g8gML>ry>3EJqCPtyiH+a=PcXd|5KDOGp~lItKD?vzI!Xb&c;6t)yLoy(8z&I(M6MuXFBB+8BuDXhWR6v@v$vL>uF! z&9u)$`Y_d~Br{=Gae)JdXTHY1vY5M9mgN`8x$*pjZS?ixU|qFv1D#*|A0<5hqD5f> zE|j8;&!2PezBfGLaL-W=@kEbd5C6n@oeOSVUekR2@}?!%Vci~U;3Kv<3Z8|DqYgXU z3-2C`WZ7FFFBBLo-+OD(T$1NEeUa4KUYx_2-$Yji=9QlBB*_wdB!6*fusEbRn%|@j@ z-qj%T@!C8*_C|^~+2Td=V*t~$J(i^-_L~Dd{hlTBi{>}NbMJaY>men;^UIjL^E%*c zRj~%p6`J4QY54=SHNOU(Z-_;65*I{~69;}sS7?6!W9R|?Bg1E%2jD@Ra$JO`jc0Y| zj-1n{#8`j(JGahG>+5T3-|+mN{W456zn_lObxyyN-@D56A1yPOEB0~j$1_j14Hsqm zkEZYqEIYr!+_bTOXy5xW2RFA3Ri$JNU}!?_vB65jo3OqAD7r?>Q8x`CU!^7eoXbN* z@aG(@2)Kd+f6gyCKOTp$PR#u{?~^d_V88kDsiWg_{pd+=8^T^fsm}2@AC2zu&6=eM zOCx@&aoe$TfLWTh^H$FF$}`Uh-xUZi>DzWJ<-TF1^Jdx=sVy?6JdNirb>3Qx`7NI> z=G>JuItS(b4A67#`aI~v`D#h(YnR1KGIjg04K+oRv}-fE&cV6mI$SAS zCAeONQVihQfr|!S(YNwA$1EE_Ib*)cIcCWqz9}?-b%}v($0{ISGq`OyXSSZG$lAGP zIlgnoXNna^&*>pfBG-R(6XZ~|9rI`KY3KTOEhgCqKg?q#4_Vw}E{)++X-NucKz`*0 z^IPO`G3MLnq@X`oN8vY-%8Xt6D2J|A;Nsk0Ffw^LP+#=>Yn@~ahIv%o?*wnjMysEg zmmf7bi^1osRi@kyCUjbzH<&#)A} zV~BWy0o?2HEwsw*Sf_zJ=~q>5*GrgBp+R1lzUgNps_@h||FHVYcHtRcPp|6s4y8%bLpR@tpX3$|8 zA$0wq>-T8T7l{8;F8&TLjQPcy-p~gTpR%AE!*!wO{VK)*Un{*hTxZmHcYE=WuOV%F zbiIvjnAWS8pi{i|y6Y*}yfW_E3Y!-V^-s@*Vcjr;(D4DtbpUHOgOD*U@}Os6X&lwr zHq}|kIzc_iIbA^+a_v>ilXg13~gZd?Uo*6Aq3cN+0s&+1EdW{zBqyb@3h@C7!=#3!dd& zhv}$8B}kk6X?bY*pv$j}0thZHt&&rzgIpBlq%v{?< zUm3L%(~%bI`*h|H`Q$q&)ECwzQ|{=p{YRg1GCShx;9;*mkyqBi`#c$s>q8&r;_P#A z_A(A+7}os{d-2F`AL5bj!!ADYI~~TlQ84_piLn83<=c?R$71wJOjE}od!Y2ZHoI#& zY+n4{39mz_jJ#I4Yd36O9QW~}0oi}5e%n>pTDuCHySue#&d9acTbC}Vacj8u)Q()n zmBn2Nz}&Vrw#192-S%#N=OMMGrK7XG?Wz=}$(SXl8m><9%>S-6GvM*||2{>Er6*@L z$qjxAt@XZ+3Ys@bGYt1>DR}xO%`e?OtpuJ>ID&BAW6CD(2jMQkJz*H$iyJN_agIj! z8o2q~iiWSmO{M3)0d6d*MR>T44ByB2I3q@espbve$G9&Rey-_)dwWE3u4#Z9^*>5K z3c?NF*Jz2wKVQD9#q)KnIp4J62D*gPg=~JTzy0O=8cSmF^$8sf$Mf>B@Qcjb;pY0B zH5ZwGz|BHj=}Qyt~S&du`c z^wzCs9x)E-*9P(Li+Hu++auku?#~3_Uku_81mTwl;TO65G$L)j-|*+oy+hpRn$HBApF+R`7P(%02L3-F=j|{`V9^?OFsTW*p&moL!?Hr48jeQU8OWk+DrW-Rz z_hsnoXk&0b1ANonL>q4I;c(4;7j0CwgS1i657Vx;ZD10*$i9+icyW(K&hP?1Tyv+~ zxTao08>2|>fkf|X;J%LOx(B-WzDAnvE3o$N{QGF*!JO@|lipf8+X0@%g)GSX5$uck z-ba=;2DW{)0nYlt_e6Hl#)B;TY0tA`_bLq5PScISZW;4~_cgM#@sP-7+5p|^+>(E| z_d2)80d&V59s7c+t8M5(^ zFLJ-u%A4}sNq^*HA8q90dD_UwOV0n4^GBmB{uQ*Z!$o^3%7-?}uZ}iwWRD0qB4^-m zZG!$=Xv2RG?d!32M;qlPa>l^>2;I;Nku%)Xw<=7AsaGt=G;Q!r`B0y>(?+?<9un~P z(hd9rw2|&1+VFqX`JZwA+@odrRnSJb>@6W)Bi)FXrM=AdO)Ll5JGvO<0e`w>?+9+$ zJAzyGj^LKPBe?rW2lp07|EP0sb?)uXy~DYma_*h9t1vTn{t&yoCzPW67t#gy6#U2r z$Q#^rDlno9_niungj-LAXbOC0%kDQ69;_BjcEpg@`|#OVU=#r#c)*8^+D6-Tv*&Sf z%-x(@eRtcM+U9jUw+fF&?QTO%KlcAIN_>7Z-%`)Ygnx{|!KRB%To_O(2D z6r(oUYXjqX$A50)O;o_XWJ3mJlgYmE;lBlR*6q2VSUtgb!p}ceGR7X$$TBYs7AtUn zE3c(zLrrsUm;GX&d~1yxY2D48EjV9oeM|S<(f8LPN3JW!7~-Ba`u3p{&?sAoZnMyB zrRH6D1LgnXJ|ed%$JjUIzNURr$G$@+f}*D_W6u+8=64wNrLeXRyZy*iqTNPMW!&x~ z%fc$9Zb$k~tpL&HBqhQ(heqFv4BHw;0_?WGX8#Uc(qp4Z2t{AHxmrHK@+{s|6S_*A}2F zN585@=@x{6S#f$b07Xyp_%Cq8e%;Dn=0FQLULzf%j zT>uA2qkJp_UL)LU6z@FH`FPKJc$`@)e^`hlUc}#4#~*2E6z}J_@$n9Mc=T7i?*{zs z0NxHkvOkLV?SQ|-z)OLI`NbM*gtx=uMf}Zx;3yZ;&?p{G5{dEmn#Uj4D3rg&xcBA9 zu@UE!Y80;#9)5le#_cRi^2c|F6c3LQ#pJgee2_oV&?p{P3w*pvjBmAkIVDiMX7J+k z_Z;vz-c_S`e6GvKOL=%qOY!Ddyhwgr(_y;0dZBnV0iJ$ai}}TnKEnGp?tT7_1CR4d zHH!Bq@bLNLH?s~o`B7%d-^Xze?})!g5sCbfhDPxo!M%^im)2E&T(42QJ%RkTBT^yx z?GEx=;^ARv8{yp_$Zx;nk2EyO--iOcau1I~TIKH~mS|a8E@IK=1X)%n~m+(V7 zjf>_6%sannZ{=6%_64_wzz#rGe;ANB{W-#FOzd@Ls$ zcMcNw9>!zuVg8$LnFRXD#+`S>_4pZXJ$^dZZ0)CY9!m`&bEtF^>`#dmNG;c!o$ynXfgMczH)S=!bZo67q{z zc3eF8`T19V$P01ToG<%iSbhN?_`U^sr~gf}^38KraZzlzS}8h#OX9xK{74ZRUGxOTx8yJ=@0mXm6?E zlVaZ=$oEznevzzUSQmdUGVcNZT>r7=BGZE#_95&W$ggj>wyxhBu>RVbTNlqpx+Nx$ zOU$=jqgV$LuDz!{d9yw24BW3;DA{x4TDKQ0?I-(GHH^9`s8Ce-2iEzjgDC8!3X6;K337j*o21PNuZg+ zNHEnHB#}iv$Bm>UUGZn(`7IKj&t2Qniif3R&nFj}Hu!Rn3pw7hNL z-Ldpc(cQX$Xv&@;B-agAxAe3(bH44$;tkHXBesxsjVljt$~}5;@Bn;72wuj*84)}N zj_OAtex!4>!YDXBkNA;%L4buo;$dTOQqw#Nf@CKO8v`Ld27(Q<$Lezl1FIUcd?8IA6}qw}<5;GvT+=*)F|N^Ley&e)E0+ivpkUJhUm~xSjWBTQlJIB11a1PikEA zX1)eGG;OBQ1suR!fNlNTa4~t(vAucB;ze_!b~ zo9&(&#rqySeEv9Bq+E%IrZU2N2KT^=_&W$U(HUo-d7em>p~k3SA6m@ebxg7Q5KJmm?&(S2u79y>iejvy89x}bb1 zccw!c8pU1|;O+A8{569a0e{@DWxZ6Rc+&&CJ-}1_)44nOcpdTaAIYx*@#s$)8pY!o z7{2`Wd;Cpxbd2|5Ti>EJ4el5F`~gPFzX&(H*D$VKeiLprO4sP<)Zc&3f_|i*xJW=Z?>*nK$2_Q-1a}jYmHr$wzA% z?TPrg0zhQc+A z|KZKob-keqEbyXX-lKH^%*QqTj7z`%|1kaCZyMqX2PjbqLExAOa=7tAo9ko?am zfABW{EQd6{Im>kll3$gy#mjsmSyZ2CE|7m<;D2z4yez;w3XCVRO1pO&AhUxwZ{VkpxneR; z3DEN_g1^DJ0d${odiW~!ut2_^M!ueR7%G!L1}Qh1gc&-PN*A>S-d_#LH;R1S4~hF#BcYKpOoXj zY83w4!T(dBW&6PEIaC~8gSh8K!@8u;xtCG@GFIm%kdH<_r_6KdnfBx3U?=NytlM`? zLK8HZ{Oj}h@|-fBfo|xx&q4FOgoL?g2>mX^b35NJnM|Hz&v|=mm9Ig!@O%+;y>W=o zFY_GzbJA89k0TG%Cn*EqQn$$y_1BgQ+s)$mL3(_*gXz5(q=!-6P&ev>zO!XATjaU$ zGf+TYCvY8yF7n#vu3fOVx{G6eUQ2P&fINEUn`iu+^x#keWo*lLo4m(V?4Fqq-|O(( zTeJyBcjK9K)=B95kh~|AvF|gLHR8E`T&gR!t+j0`D#PTGM&36KVeBhy7wJ^4qkR{f zI!^ge&sCpL*G{rMV_O!r2`T6^%1hF2wC|K@d%6=@=UNai8ebM{J9OP0YyBnlDc0W= zL*N(h3IYe^LQHvAt%$e=?UAKfocaXn_6iP_Cv%^G^xS8#-;lQH)TdZCRty0bkSmf% zyVSK)CruhS18A2)lQb)if?#q9>O+El_y+s3^b^3pRrW8+fXzN~65BCj`zL#oF3dM@k{!*4Zk1Z6)qjNBgzZwKkN9? z@+YOAC4NfV5%AOkTGD8{q56eA9?0jGNy}sO+WvqZag;U#4Bri1Ag_3r=*i(#sox*w zyE^03{YQ5Uxb_HoEbogU{cD1_SHbP`cPZSXeblGhhQ{^vC#WlEtB_RxB-8iN3rXYmbA>Q8|Gz+6th(%vPqEJ+eQ6bR z6XTC#RrXsa&lfxX(s+0E0`QKyDLkdn4>8^8uv2K866K%yIo#o$ZwFf9ZY} z@-7CMi0$d=d!f=!<~X+4K3tE!x~LI#3G!n-k^Ub2G{y;1zHS_5-{ri~?z6EUzmj=z zIuE(p{ug{}-$1N)2@SvdW5?z?#^cztKAYEPKMuxv7#Cu!hj7MYTe#9}zp!EZlfw;t zf;FiE@!eRWbfr7r3}s(hjJ7*!H=SM;XQOtylPiA_E#^)q>5sX?Nqz%{ zdKHchhR|Ob;()FgaT$;4%NQ-iGplYt3K>Y-L7k4;YhbcH*Y{vqC}EjsAH;FE=m+vF zd#H_g4?9a;zGV{DNkk@;2gZX)DwE`Rig_(^?YPRAdZB*fp&#_0fbY{JnP1>h);a7| z!Vm2xctxIaZvRxqQ(5HAj>V7uGsd_a&nD;xoL@o?%Tl)82NRM$<8w?4{;50PB7K#k zq1^m5r2okFAH`W|BkG5n^9=E9t;8V4P?>G7$a}kJucUtB9cO=!Rr`oK^!X)?&kURX z{-FxI&zl5(B1c_r8cOw_JA66#WPI|UGUpDz7jDXzZ3M@Ie7BD8)G42k+0hAUTmKjb z`9WKpnRFN9p-t#ZZ@+L$nosK7I@AU~z8}rF<*8?eXGxqk)Jz;*za&W%`y_6;pRALTq@7cJIP1Cb>l|pD0|d3j6=2^%b0;* zrI>EYwj-6d@SS158}r6s7&gC;h8Bb-!kw|-6>BaKS-D9r^;_U#xx!w zRyv;+)>uTQW4$}f{E-L2$y_{)alec+cewH5c8(V_pz-BWV62HMbCPtFvB(6nV>xQx zQ|97foqI6+AvX@LbLpg+j-LkNe+s<)40L6vjJ)0APN<$KxGt1>66aJ;GS9!vZ|=s0ve((^%E4r9hanvx#UkT!~GA}yxNyoYhM z?_qlN7=PJw5O0<5!|iWGf07oSUn%357vrYlM!b)iqF$hV1a1OyDo#1MH})Szxu4`X zj=KM-8^fVeh_2_HygMoH#-LomFJ;a)mvtl|;Tf(2N!$h(w|iT(XgyE???-MJo-514|(iW%eSVqbKWyZFb^JSK|mdjMWCyzLlefGWTaiXJ- z4eDI-1j_L|q{FsiLW=r}_6{;gW&E)1Pfw(vX>uj7R)hP)xN`1- zC3^3V@yhzpre|&4MwxKk3F|eFA5B8$EDw%vIX8wLV?1T&uN7`hrNNCe!21Q@7t8*3 zt%dU^zVFVn36hA%GYb;iS>H1}#{f8YNIl~jBJ9W5r!l{%dnY-zz5?;-uYC-7!kF}Fz94@gfbP}_}LXZQAaptvuQRB*)h{fo>`k;QvfgEt+c*x3;LKXm;-DXMkg+E z-{kOn3*Z-;lk=>JX#AG#ANq-mU65a3)?@shHCtZcSdi&4f0PN&-$ijCzk`qq(l>bD zA2#O&>kz=}kh@?>xoO`Z-zkLt8RV1gFx$P+)-O(>KZ@3iQJ!4?EozL{Gn2zyGS?5b znq&XZq_?e?v*Dsy_ zCOcPPUo##&QQxXyLjgrc(RN2|LW#(@N!I;aj14n0?KSxV%0gSC!?uEk(YbzE$J0OeVNHdN+f<=cnvxRm8^3+jih8_Y*J@?X-3whQ5= z{9&2Lu*_oPoko^Nyx#nQ=#!QOEaW7*h;Y(zJ~_x)o+#&#tQ6FBAR$uaWz% z-$CvnAD90Z^6`hi10Pt-VxNh+V)a4!lC}xuCAtT_D5U%B7ciHOwJUfuP3Bxu4x&$3 zv%~zB<3ak>yEeIwZE^wK{pl#Y>lw??zvx*8>hHM$|L+Ri7fg|QFd~1@502?MJ{3Kz zV!F^nt83QpXLxp*epTgs%@i_7MLLT*9)Cuf;r=ts+Qw6URcH%-cK+}740m5l4&VcI z7xgH%AL^Hzj)8r-Lq1Xa$@=flsnLE7`|XkPEA0SyE>zxOTj#eOeOW2bqpWx1vyTlv zocPF~Juk<}4D!NSPH7_Z@Ub$qC;x)=hN#U(TW}uu6W&2*+t$pam~Mfl5Kj=v$%hl4 z`nlHgUU<+@H)c}DAV=_J`|o?8iALWB<#vVB`2ki^Fzu zj;y)pGxB!4!!Z^0G5>9B4If#LQO{)kkJyl@^!vhN#_l;TWB-Em**{~Aeu(SXScf`k zI4|=0JdV4l&)1->0)Nt9p^tij?IlWczyZKpe>P z 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�eLL|PXTRh4cBWmIl{hPRvdMgw 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%0D$+DTX>UDr?az>C0&_ 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%0D@IZgCCDc%XzRF;M4ifrisNnM^Y%X$iz*_MPf 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 M~JqgtNfrdi@EtIm<7zKd(R^yZ|pkCp->MK^Hs+ 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�SW+}Av(wR&*bjh9n$hqx1pX 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

D-UT+$O>rm1z@T(9Wjr`s=6xU$?sM||9^ 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ξ7`a*F)FnzJP&3x4Xg8 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¥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 `SOfxW{c@_SIG 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 z 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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 -# if !defined(OPENSSL_SYS_AIX) && !defined(OPENSSL_SYS_MACOSX) -# 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 -# 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__) || defined(_M_ARM64)) -# 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__) || defined(_M_ARM64)) -# 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__) || defined(_M_ARM64)) -# 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" - -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" - -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 deleted file mode 100644 index 21a9932e..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/aria.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2017, 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 - */ - - /* Copyright (c) 2017 National Security Research Institute. All rights reserved. */ - -#ifndef OSSL_CRYPTO_ARIA_H -# define OSSL_CRYPTO_ARIA_H -# pragma once - -# include - -# ifdef OPENSSL_NO_ARIA -# error ARIA is disabled. -# endif - -# define ARIA_ENCRYPT 1 -# define ARIA_DECRYPT 0 - -# define ARIA_BLOCK_SIZE 16 /* Size of each encryption/decryption block */ -# define ARIA_MAX_KEYS 17 /* Number of keys needed in the worst case */ - -typedef union { - unsigned char c[ARIA_BLOCK_SIZE]; - unsigned int u[ARIA_BLOCK_SIZE / sizeof(unsigned int)]; -} ARIA_u128; - -typedef unsigned char ARIA_c128[ARIA_BLOCK_SIZE]; - -struct aria_key_st { - ARIA_u128 rd_key[ARIA_MAX_KEYS]; - unsigned int rounds; -}; -typedef struct aria_key_st ARIA_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 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 deleted file mode 100644 index 36af1d76..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * Copyright 2015-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_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, 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, - ASN1_PCTX *pctx); - int (*priv_decode) (EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf); - int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk); - int (*priv_print) (BIO *out, const EVP_PKEY *pkey, int indent, - ASN1_PCTX *pctx); - int (*pkey_size) (const EVP_PKEY *pk); - int (*pkey_bits) (const EVP_PKEY *pk); - int (*pkey_security_bits) (const EVP_PKEY *pk); - int (*param_decode) (EVP_PKEY *pkey, - const unsigned char **pder, int derlen); - int (*param_encode) (const EVP_PKEY *pkey, unsigned char **pder); - int (*param_missing) (const EVP_PKEY *pk); - int (*param_copy) (EVP_PKEY *to, const EVP_PKEY *from); - int (*param_cmp) (const EVP_PKEY *a, const EVP_PKEY *b); - int (*param_print) (BIO *out, const EVP_PKEY *pkey, int indent, - ASN1_PCTX *pctx); - int (*sig_print) (BIO *out, - const X509_ALGOR *sigalg, const ASN1_STRING *sig, - int indent, ASN1_PCTX *pctx); - void (*pkey_free) (EVP_PKEY *pkey); - int (*pkey_ctrl) (EVP_PKEY *pkey, int op, long arg1, void *arg2); - /* Legacy functions for old PEM */ - int (*old_priv_decode) (EVP_PKEY *pkey, - 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, 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, - const ASN1_STRING *sig); - /* Check */ - int (*pkey_check) (const EVP_PKEY *pk); - int (*pkey_public_check) (const EVP_PKEY *pk); - int (*pkey_param_check) (const EVP_PKEY *pk); - /* Get/set raw private/public key data */ - int (*set_priv_key) (EVP_PKEY *pk, const unsigned char *priv, size_t len); - 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 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 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 - * names and data need to be free()ed - */ -# define ASN1_OBJECT_FLAG_DYNAMIC 0x01/* internal use */ -# define ASN1_OBJECT_FLAG_CRITICAL 0x02/* critical x509v3 object id */ -# define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04/* internal use */ -# define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08/* internal use */ -struct asn1_object_st { - const char *sn, *ln; - int nid; - int length; - const unsigned char *data; /* data remains const after init */ - int flags; /* Should we free this one */ -}; - -/* ASN1 print context structure */ - -struct asn1_pctx_st { - unsigned long flags; - unsigned long nm_flags; - unsigned long cert_flags; - unsigned long oid_flags; - unsigned long str_flags; -} /* ASN1_PCTX */ ; - -/* 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); -X509_ALGOR *ossl_X509_ALGOR_from_nid(int nid, int ptype, void *pval); - -time_t ossl_asn1_string_to_time_t(const char *asn1_string); -void ossl_asn1_string_set_bits_left(ASN1_STRING *str, unsigned int num); - -#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 deleted file mode 100644 index 3eadb9ec..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1_dsa.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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 deleted file mode 100644 index 6441386b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1err.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 7bc0dbb6..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/async.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * 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 OSSL_CRYPTO_ASYNC_H -# define OSSL_CRYPTO_ASYNC_H -# pragma once - -# include - -int async_init(void); -void async_deinit(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 deleted file mode 100644 index 574e0af7..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asyncerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index e38b981a..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bioerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 33f979ce..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * Copyright 2014-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_BN_H -# define OSSL_CRYPTO_BN_H -# pragma once - -# include -# include - -BIGNUM *bn_wexpand(BIGNUM *a, int words); -BIGNUM *bn_expand2(BIGNUM *a, int words); - -void bn_correct_top(BIGNUM *a); - -/* - * Determine the modified width-(w+1) Non-Adjacent Form (wNAF) of 'scalar'. - * This is an array r[] of values that are either zero or odd with an - * absolute value less than 2^w satisfying scalar = \sum_j r[j]*2^j where at - * most one of any w+1 consecutive digits is non-zero with the exception that - * the most significant digit may be only w-1 zeros away from that next - * non-zero digit. - */ -signed char *bn_compute_wNAF(const BIGNUM *scalar, int w, size_t *ret_len); - -int bn_get_top(const BIGNUM *a); - -int bn_get_dmax(const BIGNUM *a); - -/* Set all words to zero */ -void bn_set_all_zero(BIGNUM *a); - -/* - * Copy the internal BIGNUM words into out which holds size elements (and size - * must be bigger than top) - */ -int bn_copy_words(BN_ULONG *out, const BIGNUM *in, int size); - -BN_ULONG *bn_get_words(const BIGNUM *a); - -/* - * Set the internal data words in a to point to words which contains size - * elements. The BN_FLG_STATIC_DATA flag is set - */ -void bn_set_static_words(BIGNUM *a, const BN_ULONG *words, int size); - -/* - * Copy words into the BIGNUM |a|, reallocating space as necessary. - * The negative flag of |a| is not modified. - * Returns 1 on success and 0 on failure. - */ -/* - * |num_words| is int because bn_expand2 takes an int. This is an internal - * function so we simply trust callers not to pass negative values. - */ -int bn_set_words(BIGNUM *a, const BN_ULONG *words, int num_words); - -/* - * Some BIGNUM functions assume most significant limb to be non-zero, which - * is customarily arranged by bn_correct_top. Output from below functions - * is not processed with bn_correct_top, and for this reason it may not be - * returned out of public API. It may only be passed internally into other - * functions known to support non-minimal or zero-padded BIGNUMs. Even - * though the goal is to facilitate constant-time-ness, not each subroutine - * is constant-time by itself. They all have pre-conditions, consult source - * code... - */ -int bn_mul_mont_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - BN_MONT_CTX *mont, BN_CTX *ctx); -int bn_to_mont_fixed_top(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); -int bn_from_mont_fixed_top(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); -int bn_mod_add_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int bn_mod_sub_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int bn_mul_fixed_top(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -int bn_sqr_fixed_top(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); -int bn_lshift_fixed_top(BIGNUM *r, const BIGNUM *a, int n); -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; - -#if defined(OPENSSL_SYS_LINUX) && !defined(FIPS_MODULE) && defined (__s390x__) -# define S390X_MOD_EXP -#endif - -int s390x_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int s390x_crt(BIGNUM *r, const BIGNUM *i, const BIGNUM *p, const BIGNUM *q, - const BIGNUM *dmp, const BIGNUM *dmq, const BIGNUM *iqmp); - -#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 deleted file mode 100644 index f3a8a8af..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_conf.h +++ /dev/null @@ -1,29 +0,0 @@ -/* WARNING: do not edit! */ -/* Generated by Makefile from include/crypto/bn_conf.h.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 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 - * both 32-bit and 64-bit builds are supported from a single run - * of the Configure script. - */ - -/* Should we define BN_DIV2W here? */ - -/* Only one for the following should be defined */ -#undef SIXTY_FOUR_BIT_LONG -#undef SIXTY_FOUR_BIT -#define THIRTY_TWO_BIT - -#endif 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 deleted file mode 100644 index dbc901b1..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_conf.h.in +++ /dev/null @@ -1,28 +0,0 @@ -{- join("\n",map { "/* $_ */" } @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 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 - * both 32-bit and 64-bit builds are supported from a single run - * of the Configure script. - */ - -/* Should we define BN_DIV2W here? */ - -/* 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 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 deleted file mode 100644 index 6d12c20e..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_dh.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 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 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 deleted file mode 100644 index 00b160aa..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn_srp.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_SRP - -extern const BIGNUM ossl_bn_group_1024; - -extern const BIGNUM ossl_bn_group_1536; - -extern const BIGNUM ossl_bn_group_2048; - -extern const BIGNUM ossl_bn_group_3072; - -extern const BIGNUM ossl_bn_group_4096; - -extern const BIGNUM ossl_bn_group_6144; - -extern const BIGNUM ossl_bn_group_8192; - -extern const BIGNUM ossl_bn_generator_19; - -extern const BIGNUM ossl_bn_generator_5; - -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 deleted file mode 100644 index 131e30fa..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bnerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 54976d95..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/buffererr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index d29998ff..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/chacha.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. 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_CHACHA_H -#define OSSL_CRYPTO_CHACHA_H -# pragma once - -#include - -/* - * ChaCha20_ctr32 encrypts |len| bytes from |inp| with the given key and - * nonce and writes the result to |out|, which may be equal to |inp|. - * The |key| is not 32 bytes of verbatim key material though, but the - * said material collected into 8 32-bit elements array in host byte - * order. Same approach applies to nonce: the |counter| argument is - * pointer to concatenated nonce and counter values collected into 4 - * 32-bit elements. This, passing crypto material collected into 32-bit - * elements as opposite to passing verbatim byte vectors, is chosen for - * efficiency in multi-call scenarios. - */ -void ChaCha20_ctr32(unsigned char *out, const unsigned char *inp, - size_t len, const unsigned int key[8], - const unsigned int counter[4]); -/* - * You can notice that there is no key setup procedure. Because it's - * as trivial as collecting bytes into 32-bit elements, it's reckoned - * that below macro is sufficient. - */ -#define CHACHA_U8TOU32(p) ( \ - ((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 - -#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 deleted file mode 100644 index 8cadadf6..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmll_platform.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2bd16373..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmperr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index a7fcf11f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmserr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 0fd9c6de..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/comperr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index fc964512..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/conferr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 7369a730..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/context.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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 - */ - -#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 *); -int ossl_thread_register_fips(OSSL_LIB_CTX *); -void *ossl_thread_event_ctx_new(OSSL_LIB_CTX *); -void *ossl_fips_prov_ossl_ctx_new(OSSL_LIB_CTX *); -#if defined(OPENSSL_THREADS) -void *ossl_threads_ctx_new(OSSL_LIB_CTX *); -#endif - -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); -#if defined(OPENSSL_THREADS) -void ossl_threads_ctx_free(void *); -#endif 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 deleted file mode 100644 index f1a27e04..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/crmferr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index 39a956bf..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cryptlib.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 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 */ - -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_BASE_ONLY 0x00040000L - -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 deleted file mode 100644 index 1b6192e3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cryptoerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 760bc796..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cterr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index 22f69221..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ctype.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2017-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 version of ctype.h provides a standardised and platform - * independent implementation that supports seven bit ASCII characters. - * The specific intent is to not pass extended ASCII characters (> 127) - * even if the host operating system would. - * - * There is EBCDIC support included for machines which use this. However, - * there are a number of concerns about how well EBCDIC is supported - * throughout the rest of the source code. Refer to issue #4154 for - * details. - */ -#ifndef OSSL_CRYPTO_CTYPE_H -# define OSSL_CRYPTO_CTYPE_H -# pragma once - -# include - -# define CTYPE_MASK_lower 0x1 -# define CTYPE_MASK_upper 0x2 -# define CTYPE_MASK_digit 0x4 -# define CTYPE_MASK_space 0x8 -# define CTYPE_MASK_xdigit 0x10 -# define CTYPE_MASK_blank 0x20 -# define CTYPE_MASK_cntrl 0x40 -# define CTYPE_MASK_graph 0x80 -# define CTYPE_MASK_print 0x100 -# define CTYPE_MASK_punct 0x200 -# define CTYPE_MASK_base64 0x400 -# define CTYPE_MASK_asn1print 0x800 - -# define CTYPE_MASK_alpha (CTYPE_MASK_lower | CTYPE_MASK_upper) -# define CTYPE_MASK_alnum (CTYPE_MASK_alpha | CTYPE_MASK_digit) - -/* - * The ascii mask assumes that any other classification implies that - * the character is ASCII and that there are no ASCII characters - * that aren't in any of the classifications. - * - * This assumption holds at the moment, but it might not in the future. - */ -# define CTYPE_MASK_ascii (~0) - -# ifdef CHARSET_EBCDIC -int ossl_toascii(int c); -int ossl_fromascii(int c); -# else -# define ossl_toascii(c) (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 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)) -# ifdef CHARSET_EBCDIC -# define ossl_isascii(c) (ossl_ctype_check((c), CTYPE_MASK_ascii)) -# else -# define ossl_isascii(c) (((c) & ~127) == 0) -# 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_isgraph(c) (ossl_ctype_check((c), CTYPE_MASK_graph)) -# 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_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 deleted file mode 100644 index a0d5de65..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decoder.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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_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); -OSSL_DECODER_INSTANCE *ossl_decoder_instance_dup(const OSSL_DECODER_INSTANCE *src); -int ossl_decoder_ctx_add_decoder_inst(OSSL_DECODER_CTX *ctx, - OSSL_DECODER_INSTANCE *di); - -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); - -void *ossl_decoder_cache_new(OSSL_LIB_CTX *ctx); -void ossl_decoder_cache_free(void *vcache); -int ossl_decoder_cache_flush(OSSL_LIB_CTX *libctx); - -#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 deleted file mode 100644 index d7badc43..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decodererr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 07ea1ddd..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/des_platform.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * 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 deleted file mode 100644 index 51232d18..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dh.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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 deleted file mode 100644 index 519327f7..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dherr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 85d92a18..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsa.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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, - unsigned int nonce_type, const char *digestname, - OSSL_LIB_CTX *libctx, const char *propq); - -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 deleted file mode 100644 index fde8358f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsaerr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index 6d9c478c..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dso_conf.h +++ /dev/null @@ -1,18 +0,0 @@ -/* WARNING: do not edit! */ -/* Generated by Makefile from include/crypto/dso_conf.h.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 OSSL_CRYPTO_DSO_CONF_H -# define OSSL_CRYPTO_DSO_CONF_H -# pragma once - -# define DSO_NONE -# define DSO_EXTENSION ".so" -#endif 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 deleted file mode 100644 index 12de11ad..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dso_conf.h.in +++ /dev/null @@ -1,33 +0,0 @@ -{- join("\n",map { "/* $_ */" } @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 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 - # has support compiled in for them. Currently each method is enabled - # by a define "DSO_" ... we translate the "dso_scheme" config - # string entry into using the following logic; - my $scheme = $disabled{dso} ? undef : uc $target{dso_scheme}; - if (!$scheme) { - $scheme = "NONE"; - } - my @macros = ( "DSO_$scheme" ); - if ($scheme eq 'DLFCN') { - @macros = ( "DSO_DLFCN", "HAVE_DLFCN_H" ); - } elsif ($scheme eq "DLFCN_NO_H") { - @macros = ( "DSO_DLFCN" ); - } - join("\n", map { "# define $_" } @macros); -} -# 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 deleted file mode 100644 index da85a7bd..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ec.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * 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 - */ - -/* Internal EC functions for other submodules: not for application use */ - -#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 - * [1,EC_GROUP::order), where EC_GROUP::order is the cardinality of the - * subgroup generated by the generator G: - * - * res := x^(-1) (mod EC_GROUP::order). - * - * This function expects the following two conditions to hold: - * - the EC_GROUP order is prime, and - * - x is included in the range [1, EC_GROUP::order). - * - * This function returns 1 on success, 0 on error. - * - * If the EC_GROUP order is even, this function explicitly returns 0 as - * an error. - * In case any of the two conditions stated above is not satisfied, - * the correctness of its output is not guaranteed, even if the return - * value could still be 1 (as primality testing and a conditional modular - * reduction round on the input can be omitted by the underlying - * implementations for better SCA properties on regular input values). - */ -__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 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); -int ossl_ec_generate_key_dhkem(EC_KEY *eckey, - const unsigned char *ikm, size_t ikmlen); -int ossl_ecdsa_deterministic_sign(const unsigned char *dgst, int dlen, - unsigned char *sig, unsigned int *siglen, - EC_KEY *eckey, unsigned int nonce_type, - const char *digestname, - OSSL_LIB_CTX *libctx, const char *propq); -# 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 deleted file mode 100644 index 782526bf..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecerr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index f35b875f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecx.h +++ /dev/null @@ -1,158 +0,0 @@ -/* - * 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 - */ - -/* 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_ECX - -# 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; -}; - -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_ecx_compute_key(ECX_KEY *peer, ECX_KEY *priv, size_t keylen, - unsigned char *secret, size_t *secretlen, - size_t outlen); - -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 *tbs, size_t tbs_len, - const uint8_t public_key[32], const uint8_t private_key[32], - const uint8_t dom2flag, const uint8_t phflag, const uint8_t csflag, - const uint8_t *context, size_t context_len, - OSSL_LIB_CTX *libctx, const char *propq); -int -ossl_ed25519_verify(const uint8_t *tbs, size_t tbs_len, - const uint8_t signature[64], const uint8_t public_key[32], - const uint8_t dom2flag, const uint8_t phflag, const uint8_t csflag, - const uint8_t *context, size_t context_len, - 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 uint8_t phflag, 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 uint8_t phflag, 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_ECX */ -#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 deleted file mode 100644 index 6240438d..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encoder.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 56c45823..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encodererr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index fac6ed09..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/engine.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 engine_load_openssl_int(void); -void engine_load_devcrypto_int(void); -void engine_load_rdrand_int(void); -void engine_load_dynamic_int(void); -void engine_load_padlock_int(void); -void engine_load_capi_int(void); -void engine_load_dasync_int(void); -void engine_load_afalg_int(void); -void engine_cleanup_int(void); 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 deleted file mode 100644 index 737c841d..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/engineerr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index 15ec6fd0..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/err.h +++ /dev/null @@ -1,20 +0,0 @@ -/* - * 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 OSSL_CRYPTO_ERR_H -# define OSSL_CRYPTO_ERR_H -# pragma once - -int ossl_err_load_ERR_strings(void); -int ossl_err_load_crypto_strings(void); -void err_cleanup(void); -int err_shelve_state(void **); -void err_unshelve_state(void *); - -#endif 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 deleted file mode 100644 index 7acde5f8..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ess.h +++ /dev/null @@ -1,76 +0,0 @@ -/* - * 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 deleted file mode 100644 index 8df2df11..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/esserr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 34cea2f9..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evp.h +++ /dev/null @@ -1,970 +0,0 @@ -/* - * Copyright 2015-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_EVP_H -# define OSSL_CRYPTO_EVP_H -# pragma once - -# include -# include -# include "internal/refcount.h" -# include "crypto/ecx.h" - -/* - * Default PKCS5 PBE KDF salt lengths - * In RFC 8018, PBE1 uses 8 bytes (64 bits) for its salt length. - * It also specifies to use at least 8 bytes for PBES2. - * The NIST requirement for PBKDF2 is 128 bits so we use this as the - * default for PBE2 (scrypt and HKDF2) - */ -# define PKCS5_DEFAULT_PBE1_SALT_LEN PKCS5_SALT_LEN -# define PKCS5_DEFAULT_PBE2_SALT_LEN 16 -/* - * Don't free up md_ctx->pctx in EVP_MD_CTX_reset, use the reserved flag - * values in evp.h - */ -#define EVP_MD_CTX_FLAG_KEEP_PKEY_CTX 0x0400 -#define EVP_MD_CTX_FLAG_FINALISED 0x0800 - -#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 */ - ENGINE *engine; - /* Key: may be NULL */ - EVP_PKEY *pkey; - /* Peer key for key agreement, may be NULL */ - EVP_PKEY *peerkey; - /* Algorithm specific data */ - void *data; - /* 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 - -struct evp_pkey_method_st { - int pkey_id; - int flags; - int (*init) (EVP_PKEY_CTX *ctx); - 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); - int (*keygen_init) (EVP_PKEY_CTX *ctx); - int (*keygen) (EVP_PKEY_CTX *ctx, EVP_PKEY *pkey); - 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); - 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); - int (*verify_recover_init) (EVP_PKEY_CTX *ctx); - int (*verify_recover) (EVP_PKEY_CTX *ctx, - unsigned char *rout, size_t *routlen, - const unsigned char *sig, size_t siglen); - 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); - int (*verifyctx_init) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx); - int (*verifyctx) (EVP_PKEY_CTX *ctx, const unsigned char *sig, int siglen, - EVP_MD_CTX *mctx); - int (*encrypt_init) (EVP_PKEY_CTX *ctx); - int (*encrypt) (EVP_PKEY_CTX *ctx, unsigned char *out, size_t *outlen, - const unsigned char *in, size_t inlen); - 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); - int (*derive_init) (EVP_PKEY_CTX *ctx); - int (*derive) (EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); - 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); - int (*digestsign) (EVP_MD_CTX *ctx, unsigned char *sig, size_t *siglen, - const unsigned char *tbs, size_t tbslen); - int (*digestverify) (EVP_MD_CTX *ctx, const unsigned char *sig, - size_t siglen, const unsigned char *tbs, - size_t tbslen); - int (*check) (EVP_PKEY *pkey); - int (*public_check) (EVP_PKEY *pkey); - int (*param_check) (EVP_PKEY *pkey); - - int (*digest_custom) (EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx); -} /* EVP_PKEY_METHOD */ ; - -DEFINE_STACK_OF_CONST(EVP_PKEY_METHOD) - -void evp_pkey_set_cb_translate(BN_GENCB *cb, EVP_PKEY_CTX *ctx); - -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; - - 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; - - 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); - int (*copy) (EVP_MD_CTX *to, const EVP_MD_CTX *from); - int (*cleanup) (EVP_MD_CTX *ctx); - int block_size; - 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; - 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); - /* encrypt/decrypt data */ - int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, - const unsigned char *in, size_t inl); - /* cleanup ctx */ - int (*cleanup) (EVP_CIPHER_CTX *); - /* how big ctx->cipher_data needs to be */ - int ctx_size; - /* Populate a ASN1_TYPE with parameters */ - int (*set_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); - /* Get parameters from a ASN1_TYPE */ - int (*get_asn1_parameters) (EVP_CIPHER_CTX *, ASN1_TYPE *); - /* Miscellaneous operations */ - 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; - 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 */ - -/* Wrapper functions for each cipher mode */ - -#define EVP_C_DATA(kstruct, ctx) \ - ((kstruct *)EVP_CIPHER_CTX_get_cipher_data(ctx)) - -#define BLOCK_CIPHER_ecb_loop() \ - size_t i, bl; \ - bl = EVP_CIPHER_CTX_get0_cipher(ctx)->block_size; \ - if (inl < bl) return 1;\ - inl -= bl; \ - for (i=0; i <= inl; i+=bl) - -#define BLOCK_CIPHER_func_ecb(cname, cprefix, kstruct, ksched) \ -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_is_encrypting(ctx)); \ - return 1;\ -} - -#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_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_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;\ -} - -#define BLOCK_CIPHER_func_cbc(cname, cprefix, kstruct, ksched) \ -static int cname##_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ -{\ - while(inl>=EVP_MAXCHUNK) \ - {\ - 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, ctx->iv, EVP_CIPHER_CTX_is_encrypting(ctx));\ - return 1;\ -} - -#define BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \ -static int cname##_cfb##cbits##_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) \ -{\ - size_t chunk = EVP_MAXCHUNK;\ - if (cbits == 1) chunk >>= 3;\ - if (inl < chunk) chunk = inl;\ - while (inl && inl >= chunk)\ - {\ - 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, ctx->iv,\ - &num, EVP_CIPHER_CTX_is_encrypting(ctx));\ - EVP_CIPHER_CTX_set_num(ctx, num);\ - inl -= chunk;\ - in += chunk;\ - out += chunk;\ - if (inl < chunk) chunk = inl;\ - }\ - return 1;\ -} - -#define BLOCK_CIPHER_all_funcs(cname, cprefix, cbits, kstruct, ksched) \ - BLOCK_CIPHER_func_cbc(cname, cprefix, kstruct, ksched) \ - BLOCK_CIPHER_func_cfb(cname, cprefix, cbits, kstruct, ksched) \ - BLOCK_CIPHER_func_ecb(cname, cprefix, kstruct, ksched) \ - BLOCK_CIPHER_func_ofb(cname, cprefix, cbits, kstruct, ksched) - -#define BLOCK_CIPHER_def1(cname, nmode, mode, MODE, kstruct, nid, block_size, \ - key_len, iv_len, flags, init_key, cleanup, \ - set_asn1, get_asn1, ctrl) \ -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, \ - sizeof(kstruct), \ - set_asn1, get_asn1,\ - ctrl, \ - NULL \ -}; \ -const EVP_CIPHER *EVP_##cname##_##mode(void) { return &cname##_##mode; } - -#define BLOCK_CIPHER_def_cbc(cname, kstruct, nid, block_size, key_len, \ - iv_len, flags, init_key, cleanup, set_asn1, \ - get_asn1, ctrl) \ -BLOCK_CIPHER_def1(cname, cbc, cbc, CBC, kstruct, nid, block_size, key_len, \ - iv_len, flags, init_key, cleanup, set_asn1, get_asn1, ctrl) - -#define BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, \ - iv_len, cbits, flags, init_key, cleanup, \ - set_asn1, get_asn1, ctrl) \ -BLOCK_CIPHER_def1(cname, cfb##cbits, cfb##cbits, CFB, kstruct, nid, 1, \ - key_len, iv_len, flags, init_key, cleanup, set_asn1, \ - get_asn1, ctrl) - -#define BLOCK_CIPHER_def_ofb(cname, kstruct, nid, key_len, \ - iv_len, cbits, flags, init_key, cleanup, \ - set_asn1, get_asn1, ctrl) \ -BLOCK_CIPHER_def1(cname, ofb##cbits, ofb, OFB, kstruct, nid, 1, \ - key_len, iv_len, flags, init_key, cleanup, set_asn1, \ - get_asn1, ctrl) - -#define BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, \ - flags, init_key, cleanup, set_asn1, \ - get_asn1, ctrl) \ -BLOCK_CIPHER_def1(cname, ecb, ecb, ECB, kstruct, nid, block_size, key_len, \ - 0, flags, init_key, cleanup, set_asn1, get_asn1, ctrl) - -#define BLOCK_CIPHER_defs(cname, kstruct, \ - nid, block_size, key_len, iv_len, cbits, flags, \ - init_key, cleanup, set_asn1, get_asn1, ctrl) \ -BLOCK_CIPHER_def_cbc(cname, kstruct, nid, block_size, key_len, iv_len, flags, \ - init_key, cleanup, set_asn1, get_asn1, ctrl) \ -BLOCK_CIPHER_def_cfb(cname, kstruct, nid, key_len, iv_len, cbits, \ - flags, init_key, cleanup, set_asn1, get_asn1, ctrl) \ -BLOCK_CIPHER_def_ofb(cname, kstruct, nid, key_len, iv_len, cbits, \ - flags, init_key, cleanup, set_asn1, get_asn1, ctrl) \ -BLOCK_CIPHER_def_ecb(cname, kstruct, nid, block_size, key_len, flags, \ - init_key, cleanup, set_asn1, get_asn1, ctrl) - -/*- -#define BLOCK_CIPHER_defs(cname, kstruct, \ - nid, block_size, key_len, iv_len, flags,\ - init_key, cleanup, set_asn1, get_asn1, ctrl)\ -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,\ - sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+\ - sizeof((((EVP_CIPHER_CTX *)NULL)->c.kstruct)),\ - set_asn1, get_asn1,\ - ctrl, \ - NULL \ -};\ -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,\ - sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+\ - sizeof((((EVP_CIPHER_CTX *)NULL)->c.kstruct)),\ - set_asn1, get_asn1,\ - ctrl,\ - NULL \ -};\ -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,\ - sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+\ - sizeof((((EVP_CIPHER_CTX *)NULL)->c.kstruct)),\ - set_asn1, get_asn1,\ - ctrl,\ - NULL \ -};\ -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,\ - sizeof(EVP_CIPHER_CTX)-sizeof((((EVP_CIPHER_CTX *)NULL)->c))+\ - sizeof((((EVP_CIPHER_CTX *)NULL)->c.kstruct)),\ - set_asn1, get_asn1,\ - ctrl,\ - NULL \ -};\ -const EVP_CIPHER *EVP_##cname##_ecb(void) { return &cname##_ecb; } -*/ - -#define IMPLEMENT_BLOCK_CIPHER(cname, ksched, cprefix, kstruct, nid, \ - block_size, key_len, iv_len, cbits, \ - flags, init_key, \ - cleanup, set_asn1, get_asn1, ctrl) \ - BLOCK_CIPHER_all_funcs(cname, cprefix, cbits, kstruct, ksched) \ - BLOCK_CIPHER_defs(cname, kstruct, nid, block_size, key_len, iv_len, \ - cbits, flags, init_key, cleanup, set_asn1, \ - get_asn1, ctrl) - -#define IMPLEMENT_CFBR(cipher,cprefix,kstruct,ksched,keysize,cbits,iv_len,fl) \ - BLOCK_CIPHER_func_cfb(cipher##_##keysize,cprefix,cbits,kstruct,ksched) \ - BLOCK_CIPHER_def_cfb(cipher##_##keysize,kstruct, \ - NID_##cipher##_##keysize, keysize/8, iv_len, cbits, \ - (fl)|EVP_CIPH_FLAG_DEFAULT_ASN1, \ - cipher##_init_key, NULL, NULL, NULL, NULL) - -typedef struct { - unsigned char iv[EVP_MAX_IV_LENGTH]; - unsigned int iv_len; - unsigned int tag_len; -} evp_cipher_aead_asn1_params; - -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); - -/* - * 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 */ -# ifndef OPENSSL_NO_ECX - ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ -# endif -# endif -}; - -struct evp_pkey_st { - /* == Legacy attributes == */ - int type; - int save_type; - -# 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 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 - - /* == 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 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 *templ); -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 - -void evp_encode_ctx_set_flags(EVP_ENCODE_CTX *ctx, unsigned int flags); - -/* EVP_ENCODE_CTX flags */ -/* Don't generate new lines when encoding */ -#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_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_rand_can_seed(EVP_RAND_CTX *ctx); -size_t evp_rand_get_seed(EVP_RAND_CTX *ctx, - unsigned char **buffer, - int entropy, size_t min_len, size_t max_len, - int prediction_resistance, - const unsigned char *adin, size_t adin_len); -void evp_rand_clear_seed(EVP_RAND_CTX *ctx, - unsigned char *buffer, size_t b_len); -int evp_signature_get_number(const EVP_SIGNATURE *signature); - -int evp_pkey_decrypt_alloc(EVP_PKEY_CTX *ctx, unsigned char **outp, - size_t *outlenp, size_t expected_outlen, - const unsigned char *in, size_t inlen); - -#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 deleted file mode 100644 index 4a001107..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evperr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 969df17b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/httperr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 0f64869f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/lhash.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 - */ - -#ifndef OSSL_CRYPTO_LHASH_H -# define OSSL_CRYPTO_LHASH_H -# pragma once - -unsigned long ossl_lh_strcasehash(const char *); - -#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 deleted file mode 100644 index 46214f32..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/md32_common.h +++ /dev/null @@ -1,284 +0,0 @@ -/* - * 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 - */ - -/*- - * This is a generic 32 bit "collector" for message digest algorithms. - * Whenever needed it collects input character stream into chunks of - * 32 bit values and invokes a block function that performs actual hash - * calculations. - * - * Porting guide. - * - * Obligatory macros: - * - * DATA_ORDER_IS_BIG_ENDIAN or DATA_ORDER_IS_LITTLE_ENDIAN - * this macro defines byte order of input stream. - * HASH_CBLOCK - * size of a unit chunk HASH_BLOCK operates on. - * HASH_LONG - * has to be at least 32 bit wide. - * HASH_CTX - * context structure that at least contains following - * members: - * typedef struct { - * ... - * HASH_LONG Nl,Nh; - * either { - * HASH_LONG data[HASH_LBLOCK]; - * unsigned char data[HASH_CBLOCK]; - * }; - * unsigned int num; - * ... - * } HASH_CTX; - * data[] vector is expected to be zeroed upon first call to - * HASH_UPDATE. - * HASH_UPDATE - * name of "Update" function, implemented here. - * HASH_TRANSFORM - * name of "Transform" function, implemented here. - * HASH_FINAL - * name of "Final" function, implemented here. - * HASH_BLOCK_DATA_ORDER - * name of "block" function capable of treating *unaligned* input - * message in original (data) byte order, implemented externally. - * HASH_MAKE_STRING - * macro converting context variables to an ASCII hash string. - * - * MD5 example: - * - * #define DATA_ORDER_IS_LITTLE_ENDIAN - * - * #define HASH_LONG MD5_LONG - * #define HASH_CTX MD5_CTX - * #define HASH_CBLOCK MD5_CBLOCK - * #define HASH_UPDATE MD5_Update - * #define HASH_TRANSFORM MD5_Transform - * #define HASH_FINAL MD5_Final - * #define HASH_BLOCK_DATA_ORDER md5_block_data_order - */ - -#ifndef OSSL_CRYPTO_MD32_COMMON_H -# define OSSL_CRYPTO_MD32_COMMON_H -# pragma once - -# include - -# if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) -# error "DATA_ORDER must be defined!" -# endif - -# ifndef HASH_CBLOCK -# error "HASH_CBLOCK must be defined!" -# endif -# ifndef HASH_LONG -# error "HASH_LONG must be defined!" -# endif -# ifndef HASH_CTX -# error "HASH_CTX must be defined!" -# endif - -# ifndef HASH_UPDATE -# error "HASH_UPDATE must be defined!" -# endif -# ifndef HASH_TRANSFORM -# error "HASH_TRANSFORM must be defined!" -# endif -# ifndef HASH_FINAL -# error "HASH_FINAL must be defined!" -# endif - -# ifndef HASH_BLOCK_DATA_ORDER -# error "HASH_BLOCK_DATA_ORDER must be defined!" -# endif - -# 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), \ - l|=(((unsigned long)(*((c)++)))<<16), \ - l|=(((unsigned long)(*((c)++)))<< 8), \ - l|=(((unsigned long)(*((c)++))) ) ) -# define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \ - *((c)++)=(unsigned char)(((l)>>16)&0xff), \ - *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ - *((c)++)=(unsigned char)(((l) )&0xff), \ - l) - -# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) - -# define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++))) ), \ - l|=(((unsigned long)(*((c)++)))<< 8), \ - l|=(((unsigned long)(*((c)++)))<<16), \ - l|=(((unsigned long)(*((c)++)))<<24) ) -# define HOST_l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \ - *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ - *((c)++)=(unsigned char)(((l)>>16)&0xff), \ - *((c)++)=(unsigned char)(((l)>>24)&0xff), \ - l) - -# endif - -/* - * Time for some action :-) - */ - -int HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len) -{ - const unsigned char *data = data_; - unsigned char *p; - HASH_LONG l; - size_t n; - - if (len == 0) - return 1; - - l = (c->Nl + (((HASH_LONG) len) << 3)) & 0xffffffffUL; - if (l < c->Nl) /* overflow */ - c->Nh++; - c->Nh += (HASH_LONG) (len >> 29); /* might cause compiler warning on - * 16-bit */ - c->Nl = l; - - n = c->num; - if (n != 0) { - p = (unsigned char *)c->data; - - if (len >= HASH_CBLOCK || len + n >= HASH_CBLOCK) { - memcpy(p + n, data, HASH_CBLOCK - n); - HASH_BLOCK_DATA_ORDER(c, p, 1); - n = HASH_CBLOCK - n; - data += n; - len -= n; - c->num = 0; - /* - * We use memset rather than OPENSSL_cleanse() here deliberately. - * Using OPENSSL_cleanse() here could be a performance issue. It - * will get properly cleansed on finalisation so this isn't a - * security problem. - */ - memset(p, 0, HASH_CBLOCK); /* keep it zeroed */ - } else { - memcpy(p + n, data, len); - c->num += (unsigned int)len; - return 1; - } - } - - n = len / HASH_CBLOCK; - if (n > 0) { - HASH_BLOCK_DATA_ORDER(c, data, n); - n *= HASH_CBLOCK; - data += n; - len -= n; - } - - if (len != 0) { - p = (unsigned char *)c->data; - c->num = (unsigned int)len; - memcpy(p, data, len); - } - return 1; -} - -void HASH_TRANSFORM(HASH_CTX *c, const unsigned char *data) -{ - HASH_BLOCK_DATA_ORDER(c, data, 1); -} - -int HASH_FINAL(unsigned char *md, HASH_CTX *c) -{ - unsigned char *p = (unsigned char *)c->data; - size_t n = c->num; - - p[n] = 0x80; /* there is always room for one */ - n++; - - if (n > (HASH_CBLOCK - 8)) { - memset(p + n, 0, HASH_CBLOCK - n); - n = 0; - HASH_BLOCK_DATA_ORDER(c, p, 1); - } - memset(p + n, 0, HASH_CBLOCK - 8 - n); - - p += HASH_CBLOCK - 8; -# if defined(DATA_ORDER_IS_BIG_ENDIAN) - (void)HOST_l2c(c->Nh, p); - (void)HOST_l2c(c->Nl, p); -# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) - (void)HOST_l2c(c->Nl, p); - (void)HOST_l2c(c->Nh, p); -# endif - p -= HASH_CBLOCK; - HASH_BLOCK_DATA_ORDER(c, p, 1); - c->num = 0; - OPENSSL_cleanse(p, HASH_CBLOCK); - -# ifndef HASH_MAKE_STRING -# error "HASH_MAKE_STRING must be defined!" -# else - HASH_MAKE_STRING(c, md); -# endif - - return 1; -} - -# ifndef MD32_REG_T -# if defined(__alpha) || defined(__sparcv9) || defined(__mips) -# define MD32_REG_T long -/* - * This comment was originally written for MD5, which is why it - * discusses A-D. But it basically applies to all 32-bit digests, - * which is why it was moved to common header file. - * - * In case you wonder why A-D are declared as long and not - * as MD5_LONG. Doing so results in slight performance - * boost on LP64 architectures. The catch is we don't - * really care if 32 MSBs of a 64-bit register get polluted - * with eventual overflows as we *save* only 32 LSBs in - * *either* case. Now declaring 'em long excuses the compiler - * from keeping 32 MSBs zeroed resulting in 13% performance - * improvement under SPARC Solaris7/64 and 5% under AlphaLinux. - * Well, to be honest it should say that this *prevents* - * performance degradation. - */ -# else -/* - * Above is not absolute and there are LP64 compilers that - * generate better code if MD32_REG_T is defined int. The above - * pre-processor condition reflects the circumstances under which - * the conclusion was made and is subject to further extension. - */ -# define MD32_REG_T int -# endif -# endif - -#endif 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 deleted file mode 100644 index d03ca83d..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/modes.h +++ /dev/null @@ -1,236 +0,0 @@ -/* - * 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 -}; - -/* GHASH functions */ -void ossl_gcm_init_4bit(u128 Htable[16], const u64 H[2]); -void ossl_gcm_ghash_4bit(u64 Xi[2], const u128 Htable[16], - const u8 *inp, size_t len); -void ossl_gcm_gmult_4bit(u64 Xi[2], const u128 Htable[16]); - -/* - * 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; -}; - -/* XTS mode for SM4 algorithm specified by GB/T 17964-2021 */ -int ossl_crypto_xts128gb_encrypt(const XTS128_CONTEXT *ctx, - const unsigned char iv[16], - const unsigned char *inp, unsigned char *out, - size_t len, int enc); - -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 deleted file mode 100644 index f22e9287..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/objects.h +++ /dev/null @@ -1,12 +0,0 @@ -/* - * 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 - */ - -#include - -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 deleted file mode 100644 index ec994824..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/objectserr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index f9529b2a..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ocsperr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2cb4253d..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pem.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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 deleted file mode 100644 index b255ff5c..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pemerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 114971c6..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs12err.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 9caa9af4..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs7.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * 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 deleted file mode 100644 index c195190b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs7err.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index ba54f3bd..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/poly1305.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. 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 -#define POLY1305_DIGEST_SIZE 16 -#define POLY1305_KEY_SIZE 32 - -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 deleted file mode 100644 index d999396a..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ppc_arch.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2e1c85c1..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/punycode.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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_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); - -#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 deleted file mode 100644 index d375c2f9..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * Copyright 2016-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 - */ - -/* - * 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 - * or in the file LICENSE in the source distribution. - */ - -#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 -# if (defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200) || \ - (defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 80000) -# define OPENSSL_APPLE_CRYPTO_RANDOM 1 -# include -# include -# endif -# endif - -/* - * Defines related to seed sources - */ -#ifndef DEVRANDOM -/* - * 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 - */ -# define DEVRANDOM "/dev/urandom", "/dev/random", "/dev/hwrng", "/dev/srandom" -# if defined(__linux) && !defined(__ANDROID__) -# ifndef DEVRANDOM_WAIT -# define DEVRANDOM_WAIT "/dev/random" -# endif -/* - * 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. - */ -# ifndef DEVRANDOM_SAFE_KERNEL -# define DEVRANDOM_SAFE_KERNEL 4, 8 -# endif -/* - * 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. - */ -# 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 ossl_rand_pool_init(void); - -/* - * Finalise the random pool reseeding sources. - */ -void ossl_rand_pool_cleanup(void); - -/* - * Control the random pool use of open file descriptors. - */ -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_LIB_CTX *ctx, - unsigned char **pout, int entropy, - size_t min_len, size_t max_len); -size_t ossl_rand_get_user_entropy(OSSL_LIB_CTX *ctx, - unsigned char **pout, int entropy, - size_t min_len, size_t max_len); -void ossl_rand_cleanup_entropy(OSSL_LIB_CTX *ctx, - unsigned char *buf, size_t len); -void ossl_rand_cleanup_user_entropy(OSSL_LIB_CTX *ctx, - unsigned char *buf, size_t len); -size_t ossl_rand_get_nonce(OSSL_LIB_CTX *ctx, - unsigned char **pout, size_t min_len, size_t max_len, - const void *salt, size_t salt_len); -size_t ossl_rand_get_user_nonce(OSSL_LIB_CTX *ctx, unsigned char **pout, - size_t min_len, size_t max_len, - const void *salt, size_t salt_len); -void ossl_rand_cleanup_nonce(OSSL_LIB_CTX *ctx, - unsigned char *buf, size_t len); -void ossl_rand_cleanup_user_nonce(OSSL_LIB_CTX *ctx, - 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); - -# ifdef FIPS_MODULE -EVP_RAND_CTX *ossl_rand_get0_private_noncreating(OSSL_LIB_CTX *ctx); -# else -EVP_RAND_CTX *ossl_rand_get0_seed_noncreating(OSSL_LIB_CTX *ctx); -# endif - -/* Generate a uniformly distributed random integer in the interval [0, upper) */ -uint32_t ossl_rand_uniform_uint32(OSSL_LIB_CTX *ctx, uint32_t upper, int *err); - -/* - * Generate a uniformly distributed random integer in the interval - * [lower, upper). - */ -uint32_t ossl_rand_range_uint32(OSSL_LIB_CTX *ctx, uint32_t lower, uint32_t upper, - int *err); - -#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 deleted file mode 100644 index f4d1d954..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand_pool.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * 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 deleted file mode 100644 index 6e2eb071..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/randerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 6c26dbf4..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.def +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 deleted file mode 100644 index 95185841..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * 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_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" -; - -/* Extension combination tests. */ -#define RISCV_HAS_ZBB_AND_ZBC() (RISCV_HAS_ZBB() && RISCV_HAS_ZBC()) -#define RISCV_HAS_ZBKB_AND_ZKND_AND_ZKNE() (RISCV_HAS_ZBKB() && RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) -#define RISCV_HAS_ZKND_AND_ZKNE() (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) - -#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 deleted file mode 100644 index 8eddc168..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsa.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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_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_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(OSSL_LIB_CTX *ctx, - unsigned char *to, int tlen, - const unsigned char *from, int flen, - int num, unsigned char *kdk); -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 deleted file mode 100644 index 9b23500b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsaerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 58f49681..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/security_bits.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 deleted file mode 100644 index 99bcf0ff..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sha.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2018-2023 The OpenSSL Project Authors. All Rights Reserved. - * Copyright (c) 2018, 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_SHA_H -# define OSSL_CRYPTO_SHA_H -# pragma once - -# include - -int ossl_sha256_192_init(SHA256_CTX *c); -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 deleted file mode 100644 index 0d0767fc..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/siphash.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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_CRYPTO_SIPHASH_H -# define OSSL_CRYPTO_SIPHASH_H -# pragma once - -# 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; - -size_t SipHash_ctx_size(void); -size_t SipHash_hash_size(SIPHASH *ctx); -int SipHash_set_hash_size(SIPHASH *ctx, size_t hash_size); -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 deleted file mode 100644 index 8dc58bd3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/siv.h +++ /dev/null @@ -1,33 +0,0 @@ -/* - * 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 deleted file mode 100644 index 9ab6c0b7..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm2.h +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2017 Ribose Inc. All Rights Reserved. - * Ported from Ribose contributions from Botan. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. 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_SM2_H -# define OSSL_CRYPTO_SM2_H -# pragma once - -# include - -# 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 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 *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); - -/* - * SM2 signature generation. - */ -int ossl_sm2_internal_sign(const unsigned char *dgst, int dgstlen, - unsigned char *sig, unsigned int *siglen, - EC_KEY *eckey); - -/* - * SM2 signature verification. - */ -int ossl_sm2_internal_verify(const unsigned char *dgst, int dgstlen, - const unsigned char *sig, int siglen, - EC_KEY *eckey); - -/* - * SM2 encryption - */ -int ossl_sm2_ciphertext_size(const EC_KEY *key, const EVP_MD *digest, - size_t msg_len, size_t *ct_size); - -int ossl_sm2_plaintext_size(const unsigned char *ct, size_t ct_size, - size_t *pt_size); - -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 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 deleted file mode 100644 index 706f4d69..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm2err.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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_SM2ERR_H -# define OSSL_CRYPTO_SM2ERR_H -# pragma once - -# include -# include - -# ifdef __cplusplus -extern "C" { -# endif - -# ifndef OPENSSL_NO_SM2 - -int ossl_err_load_SM2_strings(void); - -/* - * SM2 reason codes. - */ -# define SM2_R_ASN1_ERROR 100 -# define SM2_R_BAD_SIGNATURE 101 -# define SM2_R_BUFFER_TOO_SMALL 107 -# define SM2_R_DIST_ID_TOO_LARGE 110 -# define SM2_R_ID_NOT_SET 112 -# define SM2_R_ID_TOO_LARGE 111 -# define SM2_R_INVALID_CURVE 108 -# define SM2_R_INVALID_DIGEST 102 -# 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 deleted file mode 100644 index e21ec81c..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm4.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2017 Ribose Inc. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. 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_SM4_H -# define OSSL_CRYPTO_SM4_H -# pragma once - -# include -# include - -# ifdef OPENSSL_NO_SM4 -# error SM4 is disabled. -# endif - -# define SM4_ENCRYPT 1 -# define SM4_DECRYPT 0 - -# define SM4_BLOCK_SIZE 16 -# define SM4_KEY_SCHEDULE 32 - -typedef struct SM4_KEY_st { - uint32_t rk[SM4_KEY_SCHEDULE]; -} SM4_KEY; - -int ossl_sm4_set_key(const uint8_t *key, SM4_KEY *ks); - -void ossl_sm4_encrypt(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 deleted file mode 100644 index cc4f5142..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sm4_platform.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * 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__) || defined (_M_ARM64) -# 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)); -} -static inline int vpsm4_ex_capable(void) -{ - return (OPENSSL_armcap_P & ARMV8_CPUID) && - (MIDR_IS_CPU_MODEL(OPENSSL_arm_midr, HISI_CPU_IMP, HISI_CPU_PART_KP920)); -} -# if defined(VPSM4_ASM) -# define VPSM4_CAPABLE vpsm4_capable() -# define VPSM4_EX_CAPABLE vpsm4_ex_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]); -void vpsm4_xts_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const SM4_KEY *key1, const SM4_KEY *key2, - const unsigned char ivec[16], const int enc); -void vpsm4_xts_encrypt_gb(const unsigned char *in, unsigned char *out, - size_t len, const SM4_KEY *key1, const SM4_KEY *key2, - const unsigned char ivec[16], const int enc); -# endif /* VPSM4_CAPABLE */ - -# ifdef VPSM4_EX_CAPABLE -int vpsm4_ex_set_encrypt_key(const unsigned char *userKey, SM4_KEY *key); -int vpsm4_ex_set_decrypt_key(const unsigned char *userKey, SM4_KEY *key); -void vpsm4_ex_encrypt(const unsigned char *in, unsigned char *out, - const SM4_KEY *key); -void vpsm4_ex_decrypt(const unsigned char *in, unsigned char *out, - const SM4_KEY *key); -void vpsm4_ex_cbc_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const SM4_KEY *key, - unsigned char *ivec, const int enc); -void vpsm4_ex_ecb_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const SM4_KEY *key, - const int enc); -void vpsm4_ex_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - const unsigned char ivec[16]); -void vpsm4_ex_xts_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const SM4_KEY *key1, const SM4_KEY *key2, - const unsigned char ivec[16], const int enc); -void vpsm4_ex_xts_encrypt_gb(const unsigned char *in, unsigned char *out, - size_t len, const SM4_KEY *key1, - const SM4_KEY *key2, const unsigned char ivec[16], - const int enc); -# endif /* VPSM4_EX_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 deleted file mode 100644 index 447e715b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sparc_arch.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * 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 deleted file mode 100644 index 7ef74283..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sparse_array.h +++ /dev/null @@ -1,92 +0,0 @@ -/* - * 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 deleted file mode 100644 index 9b7be71a..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/store.h +++ /dev/null @@ -1,23 +0,0 @@ -/* - * 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 OSSL_CRYPTO_STORE_H -# define OSSL_CRYPTO_STORE_H -# pragma once - -# include -# include -# include - -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 deleted file mode 100644 index c46d845f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/storeerr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2f34ba31..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/tserr.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index ad17f052..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/types.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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 deleted file mode 100644 index 789077a8..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/uierr.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index 18eb2f7c..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509.h +++ /dev/null @@ -1,391 +0,0 @@ -/* - * Copyright 2015-2024 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#ifndef OSSL_CRYPTO_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 */ - -/* Note: unless otherwise stated a field pointer is mandatory and should - * never be set to NULL: the ASN.1 code and accessors rely on mandatory - * fields never being NULL. - */ - -/* - * name entry structure, equivalent to AttributeTypeAndValue defined - * in RFC5280 et al. - */ -struct X509_name_entry_st { - ASN1_OBJECT *object; /* AttributeType */ - ASN1_STRING *value; /* AttributeValue */ - int set; /* index of RDNSequence for this entry */ - int size; /* temp variable */ -}; - -/* Name from RFC 5280. */ -struct X509_name_st { - STACK_OF(X509_NAME_ENTRY) *entries; /* DN components */ - int modified; /* true if 'bytes' needs to be built */ - BUF_MEM *bytes; /* cached encoding: cannot be NULL */ - /* canonical encoding used for rapid Name comparison */ - unsigned char *canon_enc; - int canon_enclen; -} /* X509_NAME */ ; - -/* Signature info structure */ - -struct x509_sig_info_st { - /* NID of message digest */ - int mdnid; - /* NID of public key algorithm */ - int pknid; - /* Security bits */ - int secbits; - /* Various flags */ - uint32_t flags; -}; - -/* PKCS#10 certificate request */ - -struct X509_req_info_st { - ASN1_ENCODING enc; /* cached encoding of signed part */ - ASN1_INTEGER *version; /* version, defaults to v1(0) so can be NULL */ - X509_NAME *subject; /* certificate request DN */ - X509_PUBKEY *pubkey; /* public key of request */ - /* - * Zero or more attributes. - * NB: although attributes is a mandatory field some broken - * encodings omit it so this may be NULL in that case. - */ - STACK_OF(X509_ATTRIBUTE) *attributes; -}; - -struct X509_req_st { - X509_REQ_INFO req_info; /* signed certificate request data */ - X509_ALGOR sig_alg; /* signature algorithm */ - 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 { - ASN1_INTEGER *version; /* version: defaults to v1(0) so may be NULL */ - X509_ALGOR sig_alg; /* signature algorithm */ - X509_NAME *issuer; /* CRL issuer name */ - ASN1_TIME *lastUpdate; /* lastUpdate field */ - ASN1_TIME *nextUpdate; /* nextUpdate field: optional */ - STACK_OF(X509_REVOKED) *revoked; /* revoked entries: optional */ - STACK_OF(X509_EXTENSION) *extensions; /* extensions: optional */ - ASN1_ENCODING enc; /* encoding of signed portion of CRL */ -}; - -struct X509_crl_st { - X509_CRL_INFO crl; /* signed CRL data */ - X509_ALGOR sig_alg; /* CRL signature algorithm */ - ASN1_BIT_STRING signature; /* CRL signature */ - CRYPTO_REF_COUNT references; - int flags; - /* - * Cached copies of decoded extension values, since extensions - * are optional any of these can be NULL. - */ - AUTHORITY_KEYID *akid; - ISSUING_DIST_POINT *idp; - /* Convenient breakdown of IDP */ - int idp_flags; - int idp_reasons; - /* CRL and base CRL numbers for delta processing */ - ASN1_INTEGER *crl_number; - ASN1_INTEGER *base_crl_number; - STACK_OF(GENERAL_NAMES) *issuers; - /* hash of CRL */ - unsigned char sha1_hash[SHA_DIGEST_LENGTH]; - /* alternative method to handle this CRL */ - const X509_CRL_METHOD *meth; - void *meth_data; - CRYPTO_RWLOCK *lock; - - OSSL_LIB_CTX *libctx; - char *propq; -}; - -struct x509_revoked_st { - ASN1_INTEGER serialNumber; /* revoked entry serial number */ - ASN1_TIME *revocationDate; /* revocation date */ - STACK_OF(X509_EXTENSION) *extensions; /* CRL entry extensions: optional */ - /* decoded value of CRLissuer extension: set if indirect CRL */ - STACK_OF(GENERAL_NAME) *issuer; - /* revocation reason: set to CRL_REASON_NONE if reason extension absent */ - int reason; - /* - * CRL entries are reordered for faster lookup of serial numbers. This - * field contains the original load sequence for this entry. - */ - int sequence; -}; - -/* - * This stuff is certificate "auxiliary info": it contains details which are - * useful in certificate stores and databases. When used this is tagged onto - * the end of the certificate itself. OpenSSL specific structure not defined - * in any RFC. - */ - -struct x509_cert_aux_st { - STACK_OF(ASN1_OBJECT) *trust; /* trusted uses */ - STACK_OF(ASN1_OBJECT) *reject; /* rejected uses */ - ASN1_UTF8STRING *alias; /* "friendly name" */ - ASN1_OCTET_STRING *keyid; /* key id of private key */ - STACK_OF(X509_ALGOR) *other; /* other unspecified info */ -}; - -struct x509_cinf_st { - ASN1_INTEGER *version; /* [ 0 ] default of v1 */ - ASN1_INTEGER serialNumber; - X509_ALGOR signature; - X509_NAME *issuer; - X509_VAL validity; - X509_NAME *subject; - X509_PUBKEY *key; - ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */ - ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */ - STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */ - ASN1_ENCODING enc; -}; - -struct x509_st { - X509_CINF cert_info; - X509_ALGOR sig_alg; - ASN1_BIT_STRING signature; - X509_SIG_INFO siginf; - CRYPTO_REF_COUNT references; - CRYPTO_EX_DATA ex_data; - /* These contain copies of various extension values */ - long ex_pathlen; - long ex_pcpathlen; - uint32_t ex_flags; - uint32_t ex_kusage; - uint32_t ex_xkusage; - uint32_t ex_nscert; - ASN1_OCTET_STRING *skid; - AUTHORITY_KEYID *akid; - X509_POLICY_CACHE *policy_cache; - STACK_OF(DIST_POINT) *crldp; - STACK_OF(GENERAL_NAME) *altname; - NAME_CONSTRAINTS *nc; -# ifndef OPENSSL_NO_RFC3779 - STACK_OF(IPAddressFamily) *rfc3779_addr; - struct ASIdentifiers_st *rfc3779_asid; -# endif - unsigned char sha1_hash[SHA_DIGEST_LENGTH]; - 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 */ ; - -/* - * This is a used when verifying cert chains. Since the gathering of the - * cert chain can take some time (and have to be 'retried', this needs to be - * kept and passed around. - */ -struct x509_store_ctx_st { /* X509_STORE_CTX */ - X509_STORE *store; - /* The following are set by the caller */ - /* The cert to check */ - X509 *cert; - /* chain of X509s - untrusted - passed in */ - STACK_OF(X509) *untrusted; - /* set of CRLs passed in */ - STACK_OF(X509_CRL) *crls; - X509_VERIFY_PARAM *param; - /* Other info for use with get_issuer() */ - void *other_ctx; - /* Callbacks for various operations */ - /* called to verify a certificate */ - int (*verify) (X509_STORE_CTX *ctx); - /* error callback */ - int (*verify_cb) (int ok, X509_STORE_CTX *ctx); - /* get issuers cert from ctx */ - int (*get_issuer) (X509 **issuer, X509_STORE_CTX *ctx, X509 *x); - /* check issued */ - int (*check_issued) (X509_STORE_CTX *ctx, X509 *x, X509 *issuer); - /* Check revocation status of chain */ - int (*check_revocation) (X509_STORE_CTX *ctx); - /* retrieve CRL */ - int (*get_crl) (X509_STORE_CTX *ctx, X509_CRL **crl, X509 *x); - /* Check CRL validity */ - int (*check_crl) (X509_STORE_CTX *ctx, X509_CRL *crl); - /* Check certificate against CRL */ - 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, - 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 */ - int valid; - /* number of untrusted certs */ - int num_untrusted; - /* chain of X509s - built up and trusted */ - STACK_OF(X509) *chain; - /* Valid policy tree */ - X509_POLICY_TREE *tree; - /* Require explicit policy value */ - int explicit_policy; - /* When something goes wrong, this is why */ - int error_depth; - int error; - X509 *current_cert; - /* cert currently being tested as valid issuer */ - X509 *current_issuer; - /* current CRL */ - X509_CRL *current_crl; - /* score of current CRL */ - int current_crl_score; - /* Reason mask */ - unsigned int current_reasons; - /* For CRL path validation: parent context */ - X509_STORE_CTX *parent; - CRYPTO_EX_DATA ex_data; - SSL_DANE *dane; - /* signed via bare TA public key, rather than CA certificate */ - int bare_ta_signed; - /* Raw Public Key */ - EVP_PKEY *rpk; - - OSSL_LIB_CTX *libctx; - char *propq; -}; - -/* PKCS#8 private key info structure */ - -struct pkcs8_priv_key_info_st { - ASN1_INTEGER *version; - X509_ALGOR *pkeyalg; - ASN1_OCTET_STRING *pkey; - STACK_OF(X509_ATTRIBUTE) *attributes; -}; - -struct X509_sig_st { - X509_ALGOR *algor; - ASN1_OCTET_STRING *digest; -}; - -struct x509_object_st { - /* one of the above types */ - X509_LOOKUP_TYPE type; - union { - char *ptr; - X509 *x509; - X509_CRL *crl; - EVP_PKEY *pkey; - } data; -}; - -int ossl_a2i_ipadd(unsigned char *ipout, const char *ipasc); -int ossl_x509_set1_time(int *modified, 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); - -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, - const char *propq); -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 ossl_x509_check_private_key(const EVP_PKEY *k, const EVP_PKEY *pkey); - -int x509v3_add_len_value_uchar(const char *name, const unsigned char *value, - size_t vallen, STACK_OF(CONF_VALUE) **extlist); -/* Attribute addition functions not checking for duplicate attributes */ -STACK_OF(X509_ATTRIBUTE) *ossl_x509at_add1_attr(STACK_OF(X509_ATTRIBUTE) **x, - X509_ATTRIBUTE *attr); -STACK_OF(X509_ATTRIBUTE) *ossl_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) *ossl_x509at_add1_attr_by_NID(STACK_OF(X509_ATTRIBUTE) **x, - int nid, int type, - const unsigned char *bytes, - int len); -STACK_OF(X509_ATTRIBUTE) *ossl_x509at_add1_attr_by_txt(STACK_OF(X509_ATTRIBUTE) **x, - const char *attrname, - int type, - const unsigned char *bytes, - int len); -#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 deleted file mode 100644 index c7c7d25e..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509err.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 66d3ad92..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509v3err.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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 deleted file mode 100644 index e57c0eab..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/__DECC_INCLUDE_EPILOGUE.H +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 file is only used by HP C on VMS, and is included automatically - * after each header file from this directory - */ - -/* restore state. Must correspond to the save in __decc_include_prologue.h */ -#pragma names restore 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 deleted file mode 100644 index a0139575..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/__DECC_INCLUDE_PROLOGUE.H +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright 2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 file is only used by HP C on VMS, and is included automatically - * after each header file from this directory - */ - -/* save state */ -#pragma names save -/* have the compiler shorten symbols larger than 31 chars to 23 chars - * followed by a 8 hex char CRC - */ -#pragma names as_is,shortened 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 deleted file mode 100644 index 36dbe0fc..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/asn1.h +++ /dev/null @@ -1,18 +0,0 @@ -/* - * 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 - -# include - -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 deleted file mode 100644 index 9481f4c9..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio.h +++ /dev/null @@ -1,101 +0,0 @@ -/* - * Copyright 2016-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_BIO_H -# define OSSL_INTERNAL_BIO_H -# pragma once - -# include -# include - -struct bio_method_st { - int type; - char *name; - int (*bwrite) (BIO *, const char *, size_t, size_t *); - int (*bwrite_old) (BIO *, const char *, int); - int (*bread) (BIO *, char *, size_t, size_t *); - int (*bread_old) (BIO *, char *, int); - int (*bputs) (BIO *, const char *); - int (*bgets) (BIO *, char *, int); - long (*ctrl) (BIO *, int, long, void *); - int (*create) (BIO *); - int (*destroy) (BIO *); - long (*callback_ctrl) (BIO *, int, BIO_info_cb *); - int (*bsendmmsg) (BIO *, BIO_MSG *, size_t, size_t, uint64_t, size_t *); - int (*brecvmmsg) (BIO *, BIO_MSG *, size_t, size_t, uint64_t, size_t *); -}; - -void bio_free_ex_data(BIO *bio); -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 -# define BIO_CTRL_SET_KTLS_TX_ZEROCOPY_SENDFILE 90 - -/* - * 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. - * BIO_FLAGS_KTLS_TX_ZEROCOPY_SENDFILE means we are using the zerocopy mode with - * this BIO for sending using sendfile. - */ -# define BIO_FLAGS_KTLS_TX_CTRL_MSG 0x1000 -# define BIO_FLAGS_KTLS_RX 0x2000 -# define BIO_FLAGS_KTLS_TX 0x4000 -# define BIO_FLAGS_KTLS_TX_ZEROCOPY_SENDFILE 0x8000 - -/* 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_zerocopy_sendfile_flag(b) \ - BIO_set_flags(b, BIO_FLAGS_KTLS_TX_ZEROCOPY_SENDFILE) - -# 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) -# define BIO_set_ktls_tx_zerocopy_sendfile(b) \ - BIO_ctrl(b, BIO_CTRL_SET_KTLS_TX_ZEROCOPY_SENDFILE, 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/bio_addr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio_addr.h deleted file mode 100644 index a6449b7e..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio_addr.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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_BIO_ADDR_H -# define OSSL_BIO_ADDR_H - -# include "internal/e_os.h" -# include "internal/sockets.h" - -# ifndef OPENSSL_NO_SOCK -union bio_addr_st { - struct sockaddr sa; -# if OPENSSL_USE_IPV6 - struct sockaddr_in6 s_in6; -# endif - struct sockaddr_in s_in; -# ifndef OPENSSL_NO_UNIX_SOCK - struct sockaddr_un s_un; -# endif -}; -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio_tfo.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio_tfo.h deleted file mode 100644 index 64c0d4c3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio_tfo.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * 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 - */ - -/* - * Contains definitions for simplifying the use of TCP Fast Open - * (RFC7413) in OpenSSL socket BIOs. - */ - -/* If a supported OS is added here, update test/bio_tfo_test.c */ -#if defined(TCP_FASTOPEN) && !defined(OPENSSL_NO_TFO) - -# if defined(OPENSSL_SYS_MACOSX) || defined(__FreeBSD__) -# include -# endif - -/* - * OSSL_TFO_SYSCTL is used to determine if TFO is supported by - * this kernel, and if supported, if it is enabled. This is more of - * a problem on FreeBSD 10.3 ~ 11.4, where TCP_FASTOPEN was defined, - * but not enabled by default in the kernel, and only for the server. - * Linux does not have sysctlbyname(), and the closest equivalent - * is to go into the /proc filesystem, but I'm not sure it's - * worthwhile. - * - * On MacOS and Linux: - * These operating systems use a single parameter to control TFO. - * The OSSL_TFO_CLIENT_FLAG and OSSL_TFO_SERVER_FLAGS are used to - * determine if TFO is enabled for the client and server respectively. - * - * OSSL_TFO_CLIENT_FLAG = 1 = client TFO enabled - * OSSL_TFO_SERVER_FLAG = 2 = server TFO enabled - * - * Such that: - * 0 = TFO disabled - * 3 = server and client TFO enabled - * - * macOS 10.14 and later support TFO. - * Linux kernel 3.6 added support for client TFO. - * Linux kernel 3.7 added support for server TFO. - * Linux kernel 3.13 enabled TFO by default. - * Linux kernel 4.11 added the TCP_FASTOPEN_CONNECT option. - * - * On FreeBSD: - * FreeBSD 10.3 ~ 11.4 uses a single sysctl for server enable. - * FreeBSD 12.0 and later uses separate sysctls for server and - * client enable. - * - * Some options are purposely NOT defined per-platform - * - * OSSL_TFO_SYSCTL - * Defined as a sysctlbyname() option to determine if - * TFO is enabled in the kernel (macOS, FreeBSD) - * - * OSSL_TFO_SERVER_SOCKOPT - * Defined to indicate the socket option used to enable - * TFO on a server socket (all) - * - * OSSL_TFO_SERVER_SOCKOPT_VALUE - * Value to be used with OSSL_TFO_SERVER_SOCKOPT - * - * OSSL_TFO_CONNECTX - * Use the connectx() function to make a client connection - * (macOS) - * - * OSSL_TFO_CLIENT_SOCKOPT - * Defined to indicate the socket option used to enable - * TFO on a client socket (FreeBSD, Linux 4.14 and later) - * - * OSSL_TFO_SENDTO - * Defined to indicate the sendto() message type to - * be used to initiate a TFO connection (FreeBSD, - * Linux pre-4.14) - * - * OSSL_TFO_DO_NOT_CONNECT - * Defined to skip calling connect() when creating a - * client socket (macOS, FreeBSD, Linux pre-4.14) - */ - -# if defined(OPENSSL_SYS_WINDOWS) -/* - * NO WINDOWS SUPPORT - * - * But this is what would be used on the server: - * - * define OSSL_TFO_SERVER_SOCKOPT TCP_FASTOPEN - * define OSSL_TFO_SERVER_SOCKOPT_VALUE 1 - * - * Still have to figure out client support - */ -# undef TCP_FASTOPEN -# endif - -/* NO VMS SUPPORT */ -# if defined(OPENSSL_SYS_VMS) -# undef TCP_FASTOPEN -# endif - -# if defined(OPENSSL_SYS_MACOSX) -# define OSSL_TFO_SYSCTL "net.inet.tcp.fastopen" -# define OSSL_TFO_SERVER_SOCKOPT TCP_FASTOPEN -# define OSSL_TFO_SERVER_SOCKOPT_VALUE 1 -# define OSSL_TFO_CONNECTX 1 -# define OSSL_TFO_DO_NOT_CONNECT 1 -# define OSSL_TFO_CLIENT_FLAG 1 -# define OSSL_TFO_SERVER_FLAG 2 -# endif - -# if defined(__FreeBSD__) -# if defined(TCP_FASTOPEN_PSK_LEN) -/* As of 12.0 these are the SYSCTLs */ -# define OSSL_TFO_SYSCTL_SERVER "net.inet.tcp.fastopen.server_enable" -# define OSSL_TFO_SYSCTL_CLIENT "net.inet.tcp.fastopen.client_enable" -# define OSSL_TFO_SERVER_SOCKOPT TCP_FASTOPEN -# define OSSL_TFO_SERVER_SOCKOPT_VALUE MAX_LISTEN -# define OSSL_TFO_CLIENT_SOCKOPT TCP_FASTOPEN -# define OSSL_TFO_DO_NOT_CONNECT 1 -# define OSSL_TFO_SENDTO 0 -/* These are the same because the sysctl are client/server-specific */ -# define OSSL_TFO_CLIENT_FLAG 1 -# define OSSL_TFO_SERVER_FLAG 1 -# else -/* 10.3 through 11.4 SYSCTL - ONLY SERVER SUPPORT */ -# define OSSL_TFO_SYSCTL "net.inet.tcp.fastopen.enabled" -# define OSSL_TFO_SERVER_SOCKOPT TCP_FASTOPEN -# define OSSL_TFO_SERVER_SOCKOPT_VALUE MAX_LISTEN -# define OSSL_TFO_SERVER_FLAG 1 -# endif -# endif - -# if defined(OPENSSL_SYS_LINUX) -/* OSSL_TFO_PROC not used, but of interest */ -# define OSSL_TFO_PROC "/proc/sys/net/ipv4/tcp_fastopen" -# define OSSL_TFO_SERVER_SOCKOPT TCP_FASTOPEN -# define OSSL_TFO_SERVER_SOCKOPT_VALUE MAX_LISTEN -# if defined(TCP_FASTOPEN_CONNECT) -# define OSSL_TFO_CLIENT_SOCKOPT TCP_FASTOPEN_CONNECT -# else -# define OSSL_TFO_SENDTO MSG_FASTOPEN -# define OSSL_TFO_DO_NOT_CONNECT 1 -# endif -# define OSSL_TFO_CLIENT_FLAG 1 -# define OSSL_TFO_SERVER_FLAG 2 -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/common.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/common.h deleted file mode 100644 index 15666f11..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/common.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - * 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 OSSL_INTERNAL_COMMON_H -# define OSSL_INTERNAL_COMMON_H -# pragma once - -# include -# include -# include "openssl/configuration.h" - -# include "internal/e_os.h" /* ossl_inline in many files */ -# include "internal/nelem.h" - -# if defined(__GNUC__) || defined(__clang__) -# define likely(x) __builtin_expect(!!(x), 1) -# define unlikely(x) __builtin_expect(!!(x), 0) -# else -# define likely(x) x -# define unlikely(x) x -# endif - -# if defined(__GNUC__) || defined(__clang__) -# define ALIGN32 __attribute((aligned(32))) -# define ALIGN64 __attribute((aligned(64))) -# elif defined(_MSC_VER) -# define ALIGN32 __declspec(align(32)) -# define ALIGN64 __declspec(align(64)) -# else -# define ALIGN32 -# define ALIGN64 -# endif - -# ifdef NDEBUG -# define ossl_assert(x) ((x) != 0) -# else -__owur static ossl_inline int ossl_assert_int(int expr, const char *exprstr, - const char *file, int line) -{ - if (!expr) - OPENSSL_die(exprstr, file, line); - - return expr; -} - -# define ossl_assert(x) ossl_assert_int((x) != 0, "Assertion failed: "#x, \ - __FILE__, __LINE__) - -# endif - -/* Check if |pre|, which must be a string literal, is a prefix of |str| */ -#define HAS_PREFIX(str, pre) (strncmp(str, pre "", sizeof(pre) - 1) == 0) -/* As before, and if check succeeds, advance |str| past the prefix |pre| */ -#define CHECK_AND_SKIP_PREFIX(str, pre) \ - (HAS_PREFIX(str, pre) ? ((str) += sizeof(pre) - 1, 1) : 0) -/* Check if the string literal |p| is a case-insensitive prefix of |s| */ -#define HAS_CASE_PREFIX(s, p) (OPENSSL_strncasecmp(s, p "", sizeof(p) - 1) == 0) -/* As before, and if check succeeds, advance |str| past the prefix |pre| */ -#define CHECK_AND_SKIP_CASE_PREFIX(str, pre) \ - (HAS_CASE_PREFIX(str, pre) ? ((str) += sizeof(pre) - 1, 1) : 0) -/* Check if the string literal |suffix| is a case-insensitive suffix of |str| */ -#define HAS_CASE_SUFFIX(str, suffix) (strlen(str) < sizeof(suffix) - 1 ? 0 : \ - OPENSSL_strcasecmp(str + strlen(str) - sizeof(suffix) + 1, suffix "") == 0) - -/* - * 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 - -# define OPENSSL_CONF "openssl.cnf" - -# ifndef OPENSSL_SYS_VMS -# define X509_CERT_AREA OPENSSLDIR -# define X509_CERT_DIR OPENSSLDIR "/certs" -# define X509_CERT_FILE OPENSSLDIR "/cert.pem" -# define X509_PRIVATE_DIR OPENSSLDIR "/private" -# define CTLOG_FILE OPENSSLDIR "/ct_log_list.cnf" -# else -# define X509_CERT_AREA "OSSL$DATAROOT:[000000]" -# define X509_CERT_DIR "OSSL$DATAROOT:[CERTS]" -# define X509_CERT_FILE "OSSL$DATAROOT:[000000]cert.pem" -# define X509_PRIVATE_DIR "OSSL$DATAROOT:[PRIVATE]" -# define CTLOG_FILE "OSSL$DATAROOT:[000000]ct_log_list.cnf" -# endif - -# define X509_CERT_DIR_EVP "SSL_CERT_DIR" -# define X509_CERT_FILE_EVP "SSL_CERT_FILE" -# define CTLOG_FILE_EVP "CTLOG_FILE" - -/* size of string representations */ -# define DECIMAL_SIZE(type) ((sizeof(type)*8+2)/3+1) -# define HEX_SIZE(type) (sizeof(type)*2) - -# define c2l(c,l) (l = ((unsigned long)(*((c)++))) , \ - l|=(((unsigned long)(*((c)++)))<< 8), \ - l|=(((unsigned long)(*((c)++)))<<16), \ - l|=(((unsigned long)(*((c)++)))<<24)) - -/* NOTE - c is not incremented as per c2l */ -# define c2ln(c,l1,l2,n) { \ - c+=n; \ - l1=l2=0; \ - switch (n) { \ - case 8: l2 =((unsigned long)(*(--(c))))<<24; \ - case 7: l2|=((unsigned long)(*(--(c))))<<16; \ - case 6: l2|=((unsigned long)(*(--(c))))<< 8; \ - case 5: l2|=((unsigned long)(*(--(c)))); \ - case 4: l1 =((unsigned long)(*(--(c))))<<24; \ - case 3: l1|=((unsigned long)(*(--(c))))<<16; \ - case 2: l1|=((unsigned long)(*(--(c))))<< 8; \ - case 1: l1|=((unsigned long)(*(--(c)))); \ - } \ - } - -# define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \ - *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ - *((c)++)=(unsigned char)(((l)>>16)&0xff), \ - *((c)++)=(unsigned char)(((l)>>24)&0xff)) - -# define n2l(c,l) (l =((unsigned long)(*((c)++)))<<24, \ - l|=((unsigned long)(*((c)++)))<<16, \ - l|=((unsigned long)(*((c)++)))<< 8, \ - l|=((unsigned long)(*((c)++)))) - -# define n2l8(c,l) (l =((uint64_t)(*((c)++)))<<56, \ - l|=((uint64_t)(*((c)++)))<<48, \ - l|=((uint64_t)(*((c)++)))<<40, \ - l|=((uint64_t)(*((c)++)))<<32, \ - l|=((uint64_t)(*((c)++)))<<24, \ - l|=((uint64_t)(*((c)++)))<<16, \ - l|=((uint64_t)(*((c)++)))<< 8, \ - l|=((uint64_t)(*((c)++)))) - -# define l2n(l,c) (*((c)++)=(unsigned char)(((l)>>24)&0xff), \ - *((c)++)=(unsigned char)(((l)>>16)&0xff), \ - *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ - *((c)++)=(unsigned char)(((l) )&0xff)) - -# define l2n8(l,c) (*((c)++)=(unsigned char)(((l)>>56)&0xff), \ - *((c)++)=(unsigned char)(((l)>>48)&0xff), \ - *((c)++)=(unsigned char)(((l)>>40)&0xff), \ - *((c)++)=(unsigned char)(((l)>>32)&0xff), \ - *((c)++)=(unsigned char)(((l)>>24)&0xff), \ - *((c)++)=(unsigned char)(((l)>>16)&0xff), \ - *((c)++)=(unsigned char)(((l)>> 8)&0xff), \ - *((c)++)=(unsigned char)(((l) )&0xff)) - -/* NOTE - c is not incremented as per l2c */ -# define l2cn(l1,l2,c,n) { \ - c+=n; \ - switch (n) { \ - case 8: *(--(c))=(unsigned char)(((l2)>>24)&0xff); \ - case 7: *(--(c))=(unsigned char)(((l2)>>16)&0xff); \ - case 6: *(--(c))=(unsigned char)(((l2)>> 8)&0xff); \ - case 5: *(--(c))=(unsigned char)(((l2) )&0xff); \ - case 4: *(--(c))=(unsigned char)(((l1)>>24)&0xff); \ - case 3: *(--(c))=(unsigned char)(((l1)>>16)&0xff); \ - case 2: *(--(c))=(unsigned char)(((l1)>> 8)&0xff); \ - case 1: *(--(c))=(unsigned char)(((l1) )&0xff); \ - } \ - } - -# define n2s(c,s) ((s=(((unsigned int)((c)[0]))<< 8)| \ - (((unsigned int)((c)[1])) )),(c)+=2) -# define s2n(s,c) (((c)[0]=(unsigned char)(((s)>> 8)&0xff), \ - (c)[1]=(unsigned char)(((s) )&0xff)),(c)+=2) - -# define n2l3(c,l) ((l =(((unsigned long)((c)[0]))<<16)| \ - (((unsigned long)((c)[1]))<< 8)| \ - (((unsigned long)((c)[2])) )),(c)+=3) - -# define l2n3(l,c) (((c)[0]=(unsigned char)(((l)>>16)&0xff), \ - (c)[1]=(unsigned char)(((l)>> 8)&0xff), \ - (c)[2]=(unsigned char)(((l) )&0xff)),(c)+=3) - -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/comp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/comp.h deleted file mode 100644 index c48c29d5..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/comp.h +++ /dev/null @@ -1,14 +0,0 @@ -/* - * 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 - */ - -#include - -void ossl_comp_zlib_cleanup(void); -void ossl_comp_brotli_cleanup(void); -void ossl_comp_zstd_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 deleted file mode 100644 index 8c6c29cd..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/conf.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 OSSL_INTERNAL_CONF_H -# define OSSL_INTERNAL_CONF_H -# pragma once - -# include - -# define DEFAULT_CONF_MFLAGS \ - (CONF_MFLAGS_DEFAULT_SECTION | \ - CONF_MFLAGS_IGNORE_MISSING_FILE | \ - CONF_MFLAGS_IGNORE_RETURN_CODES) - -struct ossl_init_settings_st { - char *filename; - char *appname; - unsigned long flags; -}; - -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 deleted file mode 100644 index 0ed6f823..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/constant_time.h +++ /dev/null @@ -1,421 +0,0 @@ -/* - * Copyright 2014-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. 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_CONSTANT_TIME_H -# define OSSL_INTERNAL_CONSTANT_TIME_H -# pragma once - -# include -# include -# include /* For 'ossl_inline' */ - -/*- - * The boolean methods return a bitmask of all ones (0xff...f) for true - * and 0 for false. This is useful for choosing a value based on the result - * of a conditional in constant time. For example, - * if (a < b) { - * c = a; - * } else { - * c = b; - * } - * can be written as - * unsigned int lt = constant_time_lt(a, b); - * c = constant_time_select(lt, a, b); - */ - -/* Returns the given value with the MSB copied to all the other bits. */ -static ossl_inline unsigned int constant_time_msb(unsigned int a); -/* Convenience method for uint32_t. */ -static ossl_inline uint32_t constant_time_msb_32(uint32_t a); -/* Convenience method for uint64_t. */ -static ossl_inline uint64_t constant_time_msb_64(uint64_t a); - -/* Returns 0xff..f if a < b and 0 otherwise. */ -static ossl_inline unsigned int constant_time_lt(unsigned int a, - unsigned int b); -/* Convenience method for getting an 8-bit mask. */ -static ossl_inline unsigned char constant_time_lt_8(unsigned int a, - unsigned int b); -/* Convenience method for uint64_t. */ -static ossl_inline uint64_t constant_time_lt_64(uint64_t a, uint64_t b); - -/* Returns 0xff..f if a >= b and 0 otherwise. */ -static ossl_inline unsigned int constant_time_ge(unsigned int a, - unsigned int b); -/* Convenience method for getting an 8-bit mask. */ -static ossl_inline unsigned char constant_time_ge_8(unsigned int a, - unsigned int b); - -/* Returns 0xff..f if a == 0 and 0 otherwise. */ -static ossl_inline unsigned int constant_time_is_zero(unsigned int a); -/* Convenience method for getting an 8-bit mask. */ -static ossl_inline unsigned char constant_time_is_zero_8(unsigned int a); -/* Convenience method for getting a 32-bit mask. */ -static ossl_inline uint32_t constant_time_is_zero_32(uint32_t a); - -/* Returns 0xff..f if a == b and 0 otherwise. */ -static ossl_inline unsigned int constant_time_eq(unsigned int a, - unsigned int b); -/* Convenience method for getting an 8-bit mask. */ -static ossl_inline unsigned char constant_time_eq_8(unsigned int a, - unsigned int b); -/* Signed integers. */ -static ossl_inline unsigned int constant_time_eq_int(int a, int b); -/* Convenience method for getting an 8-bit mask. */ -static ossl_inline unsigned char constant_time_eq_int_8(int a, int b); - -/*- - * Returns (mask & a) | (~mask & b). - * - * When |mask| is all 1s or all 0s (as returned by the methods above), - * the select methods return either |a| (if |mask| is nonzero) or |b| - * (if |mask| is zero). - */ -static ossl_inline unsigned int constant_time_select(unsigned int mask, - unsigned int a, - unsigned int b); -/* Convenience method for unsigned chars. */ -static ossl_inline unsigned char constant_time_select_8(unsigned char mask, - unsigned char a, - unsigned char b); - -/* Convenience method for uint32_t. */ -static ossl_inline uint32_t constant_time_select_32(uint32_t mask, uint32_t a, - uint32_t b); - -/* Convenience method for uint64_t. */ -static ossl_inline uint64_t constant_time_select_64(uint64_t mask, uint64_t a, - uint64_t b); -/* Convenience method for signed integers. */ -static ossl_inline int constant_time_select_int(unsigned int mask, int a, - int b); - - -static ossl_inline unsigned int constant_time_msb(unsigned int a) -{ - return 0 - (a >> (sizeof(a) * 8 - 1)); -} - - -static ossl_inline uint32_t constant_time_msb_32(uint32_t a) -{ - return 0 - (a >> 31); -} - -static ossl_inline uint64_t constant_time_msb_64(uint64_t a) -{ - return 0 - (a >> 63); -} - -static ossl_inline size_t constant_time_msb_s(size_t a) -{ - return 0 - (a >> (sizeof(a) * 8 - 1)); -} - -static ossl_inline unsigned int constant_time_lt(unsigned int a, - unsigned int b) -{ - return constant_time_msb(a ^ ((a ^ b) | ((a - b) ^ b))); -} - -static ossl_inline size_t constant_time_lt_s(size_t a, size_t b) -{ - return constant_time_msb_s(a ^ ((a ^ b) | ((a - b) ^ b))); -} - -static ossl_inline unsigned char constant_time_lt_8(unsigned int a, - unsigned int b) -{ - return (unsigned char)constant_time_lt(a, b); -} - -static ossl_inline uint64_t constant_time_lt_64(uint64_t a, uint64_t b) -{ - return constant_time_msb_64(a ^ ((a ^ b) | ((a - b) ^ b))); -} - -static ossl_inline unsigned int constant_time_ge(unsigned int a, - unsigned int b) -{ - return ~constant_time_lt(a, b); -} - -static ossl_inline size_t constant_time_ge_s(size_t a, size_t b) -{ - return ~constant_time_lt_s(a, b); -} - -static ossl_inline unsigned char constant_time_ge_8(unsigned int a, - unsigned int b) -{ - return (unsigned char)constant_time_ge(a, b); -} - -static ossl_inline unsigned char constant_time_ge_8_s(size_t a, size_t b) -{ - return (unsigned char)constant_time_ge_s(a, b); -} - -static ossl_inline unsigned int constant_time_is_zero(unsigned int a) -{ - return constant_time_msb(~a & (a - 1)); -} - -static ossl_inline size_t constant_time_is_zero_s(size_t a) -{ - return constant_time_msb_s(~a & (a - 1)); -} - -static ossl_inline unsigned char constant_time_is_zero_8(unsigned int a) -{ - return (unsigned char)constant_time_is_zero(a); -} - -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) -{ - return constant_time_is_zero(a ^ b); -} - -static ossl_inline size_t constant_time_eq_s(size_t a, size_t b) -{ - return constant_time_is_zero_s(a ^ b); -} - -static ossl_inline unsigned char constant_time_eq_8(unsigned int a, - unsigned int b) -{ - return (unsigned char)constant_time_eq(a, b); -} - -static ossl_inline unsigned char constant_time_eq_8_s(size_t a, size_t b) -{ - return (unsigned char)constant_time_eq_s(a, b); -} - -static ossl_inline unsigned int constant_time_eq_int(int a, int b) -{ - return constant_time_eq((unsigned)(a), (unsigned)(b)); -} - -static ossl_inline unsigned char constant_time_eq_int_8(int a, int b) -{ - return constant_time_eq_8((unsigned)(a), (unsigned)(b)); -} - -/* - * Returns the value unmodified, but avoids optimizations. - * The barriers prevent the compiler from narrowing down the - * possible value range of the mask and ~mask in the select - * statements, which avoids the recognition of the select - * and turning it into a conditional load or branch. - */ -static ossl_inline unsigned int value_barrier(unsigned int a) -{ -#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) - unsigned int r; - __asm__("" : "=r"(r) : "0"(a)); -#else - volatile unsigned int r = a; -#endif - return r; -} - -/* Convenience method for uint32_t. */ -static ossl_inline uint32_t value_barrier_32(uint32_t a) -{ -#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) - uint32_t r; - __asm__("" : "=r"(r) : "0"(a)); -#else - volatile uint32_t r = a; -#endif - return r; -} - -/* Convenience method for uint64_t. */ -static ossl_inline uint64_t value_barrier_64(uint64_t a) -{ -#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) - uint64_t r; - __asm__("" : "=r"(r) : "0"(a)); -#else - volatile uint64_t r = a; -#endif - return r; -} - -/* Convenience method for size_t. */ -static ossl_inline size_t value_barrier_s(size_t a) -{ -#if !defined(OPENSSL_NO_ASM) && defined(__GNUC__) - size_t r; - __asm__("" : "=r"(r) : "0"(a)); -#else - volatile size_t r = a; -#endif - return r; -} - -static ossl_inline unsigned int constant_time_select(unsigned int mask, - unsigned int a, - unsigned int b) -{ - return (value_barrier(mask) & a) | (value_barrier(~mask) & b); -} - -static ossl_inline size_t constant_time_select_s(size_t mask, - size_t a, - size_t b) -{ - return (value_barrier_s(mask) & a) | (value_barrier_s(~mask) & b); -} - -static ossl_inline unsigned char constant_time_select_8(unsigned char mask, - unsigned char a, - unsigned char b) -{ - return (unsigned char)constant_time_select(mask, a, b); -} - -static ossl_inline int constant_time_select_int(unsigned int mask, int a, - int b) -{ - return (int)constant_time_select(mask, (unsigned)(a), (unsigned)(b)); -} - -static ossl_inline int constant_time_select_int_s(size_t mask, int a, int b) -{ - return (int)constant_time_select((unsigned)mask, (unsigned)(a), - (unsigned)(b)); -} - -static ossl_inline uint32_t constant_time_select_32(uint32_t mask, uint32_t a, - uint32_t b) -{ - return (value_barrier_32(mask) & a) | (value_barrier_32(~mask) & b); -} - -static ossl_inline uint64_t constant_time_select_64(uint64_t mask, uint64_t a, - uint64_t b) -{ - return (value_barrier_64(mask) & a) | (value_barrier_64(~mask) & b); -} - -/* - * mask must be 0xFFFFFFFF or 0x00000000. - * - * if (mask) { - * uint32_t tmp = *a; - * - * *a = *b; - * *b = tmp; - * } - */ -static ossl_inline void constant_time_cond_swap_32(uint32_t mask, uint32_t *a, - uint32_t *b) -{ - uint32_t xor = *a ^ *b; - - xor &= mask; - *a ^= xor; - *b ^= xor; -} - -/* - * mask must be 0xFFFFFFFF or 0x00000000. - * - * if (mask) { - * uint64_t tmp = *a; - * - * *a = *b; - * *b = tmp; - * } - */ -static ossl_inline void constant_time_cond_swap_64(uint64_t mask, uint64_t *a, - uint64_t *b) -{ - uint64_t xor = *a ^ *b; - - xor &= mask; - *a ^= xor; - *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 - * private. - */ -static ossl_inline void constant_time_lookup(void *out, - const void *table, - size_t rowsize, - size_t numrows, - size_t idx) -{ - size_t i, j; - const unsigned char *tablec = (const unsigned char *)table; - unsigned char *outc = (unsigned char *)out; - unsigned char mask; - - memset(out, 0, rowsize); - - /* Note idx may underflow - but that is well defined */ - for (i = 0; i < numrows; i++, idx--) { - mask = (unsigned char)constant_time_is_zero_s(idx); - for (j = 0; j < rowsize; j++) - *(outc + j) |= constant_time_select_8(mask, *(tablec++), 0); - } -} - -/* - * Expected usage pattern is to unconditionally set error and then - * wipe it if there was no actual error. |clear| is 1 or 0. - */ -void err_clear_last_constant_time(int clear); - -#endif /* OSSL_INTERNAL_CONSTANT_TIME_H */ 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 deleted file mode 100644 index 03adb66b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/core.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * 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 deleted file mode 100644 index 64851fd8..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/cryptlib.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * 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 OSSL_INTERNAL_CRYPTLIB_H -# define OSSL_INTERNAL_CRYPTLIB_H -# pragma once - -# ifdef OPENSSL_USE_APPLINK -# define BIO_FLAGS_UPLINK_INTERNAL 0x8000 -# include "ms/uplink.h" -# else -# define BIO_FLAGS_UPLINK_INTERNAL 0 -# endif - -# include "internal/common.h" - -# include -# include -# include -# include -# include - -typedef struct ex_callback_st EX_CALLBACK; -DEFINE_STACK_OF(EX_CALLBACK) - -typedef struct mem_st MEM; -DEFINE_LHASH_OF_EX(MEM); - -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, ...); -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); - -char *ossl_safe_getenv(const char *name); - -extern CRYPTO_RWLOCK *memdbg_lock; -int openssl_strerror_r(int errnum, char *buf, size_t buflen); -# if !defined(OPENSSL_NO_STDIO) -FILE *openssl_fopen(const char *filename, const char *mode); -# else -void *openssl_fopen(const char *filename, const char *mode); -# endif - -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_THREAD_INDEX 19 -# define OSSL_LIB_CTX_DECODER_CACHE_INDEX 20 -# define OSSL_LIB_CTX_MAX_INDEXES 20 - -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); - -#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 deleted file mode 100644 index a3d78a7f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dane.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. 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_DANE_H -#define OSSL_INTERNAL_DANE_H -# pragma once - -# include - -/*- - * Certificate usages: - * https://tools.ietf.org/html/rfc6698#section-2.1.1 - */ -#define DANETLS_USAGE_PKIX_TA 0 -#define DANETLS_USAGE_PKIX_EE 1 -#define DANETLS_USAGE_DANE_TA 2 -#define DANETLS_USAGE_DANE_EE 3 -#define DANETLS_USAGE_LAST DANETLS_USAGE_DANE_EE - -/*- - * Selectors: - * https://tools.ietf.org/html/rfc6698#section-2.1.2 - */ -#define DANETLS_SELECTOR_CERT 0 -#define DANETLS_SELECTOR_SPKI 1 -#define DANETLS_SELECTOR_LAST DANETLS_SELECTOR_SPKI - -/*- - * Matching types: - * https://tools.ietf.org/html/rfc6698#section-2.1.3 - */ -#define DANETLS_MATCHING_FULL 0 -#define DANETLS_MATCHING_2256 1 -#define DANETLS_MATCHING_2512 2 -#define DANETLS_MATCHING_LAST DANETLS_MATCHING_2512 - -typedef struct danetls_record_st { - uint8_t usage; - uint8_t selector; - uint8_t mtype; - unsigned char *data; - size_t dlen; - EVP_PKEY *spki; -} danetls_record; - -DEFINE_STACK_OF(danetls_record) - -/* - * Shared DANE context - */ -struct dane_ctx_st { - const EVP_MD **mdevp; /* mtype -> digest */ - uint8_t *mdord; /* mtype -> preference */ - uint8_t mdmax; /* highest supported mtype */ - unsigned long flags; /* feature bitmask */ -}; - -/* - * Per connection DANE state - */ -struct ssl_dane_st { - struct dane_ctx_st *dctx; - STACK_OF(danetls_record) *trecs; - STACK_OF(X509) *certs; /* DANE-TA(2) Cert(0) Full(0) certs */ - danetls_record *mtlsa; /* Matching TLSA record */ - X509 *mcert; /* DANE matched cert */ - uint32_t umask; /* Usages present */ - int mdpth; /* Depth of matched cert */ - int pdpth; /* Depth of PKIX trust */ - unsigned long flags; /* feature bitmask */ -}; - -#define DANETLS_ENABLED(dane) \ - ((dane) != NULL && sk_danetls_record_num((dane)->trecs) > 0) - -#define DANETLS_USAGE_BIT(u) (((uint32_t)1) << u) - -#define DANETLS_PKIX_TA_MASK (DANETLS_USAGE_BIT(DANETLS_USAGE_PKIX_TA)) -#define DANETLS_PKIX_EE_MASK (DANETLS_USAGE_BIT(DANETLS_USAGE_PKIX_EE)) -#define DANETLS_DANE_TA_MASK (DANETLS_USAGE_BIT(DANETLS_USAGE_DANE_TA)) -#define DANETLS_DANE_EE_MASK (DANETLS_USAGE_BIT(DANETLS_USAGE_DANE_EE)) - -#define DANETLS_PKIX_MASK (DANETLS_PKIX_TA_MASK | DANETLS_PKIX_EE_MASK) -#define DANETLS_DANE_MASK (DANETLS_DANE_TA_MASK | DANETLS_DANE_EE_MASK) -#define DANETLS_TA_MASK (DANETLS_PKIX_TA_MASK | DANETLS_DANE_TA_MASK) -#define DANETLS_EE_MASK (DANETLS_PKIX_EE_MASK | DANETLS_DANE_EE_MASK) - -#define DANETLS_HAS_PKIX(dane) ((dane) && ((dane)->umask & DANETLS_PKIX_MASK)) -#define DANETLS_HAS_DANE(dane) ((dane) && ((dane)->umask & DANETLS_DANE_MASK)) -#define DANETLS_HAS_TA(dane) ((dane) && ((dane)->umask & DANETLS_TA_MASK)) -#define DANETLS_HAS_EE(dane) ((dane) && ((dane)->umask & DANETLS_EE_MASK)) - -#define DANETLS_HAS_PKIX_TA(dane) ((dane)&&((dane)->umask & DANETLS_PKIX_TA_MASK)) -#define DANETLS_HAS_PKIX_EE(dane) ((dane)&&((dane)->umask & DANETLS_PKIX_EE_MASK)) -#define DANETLS_HAS_DANE_TA(dane) ((dane)&&((dane)->umask & DANETLS_DANE_TA_MASK)) -#define DANETLS_HAS_DANE_EE(dane) ((dane)&&((dane)->umask & DANETLS_DANE_EE_MASK)) - -#endif /* OSSL_INTERNAL_DANE_H */ 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 deleted file mode 100644 index a313a015..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/deprecated.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * 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 deleted file mode 100644 index 8d6db8f0..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/der.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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_INTERNAL_DER_H -# define OSSL_INTERNAL_DER_H -# pragma once - -# 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); - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/deterministic_nonce.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/deterministic_nonce.h deleted file mode 100644 index 5f0313fe..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/deterministic_nonce.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * 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_INTERNAL_DETERMINISTIC_NONCE_H -# define OSSL_INTERNAL_DETERMINISTIC_NONCE_H -# pragma once - -# include - -int ossl_gen_deterministic_nonce_rfc6979(BIGNUM *out, const BIGNUM *q, - const BIGNUM *priv, - const unsigned char *message, - size_t message_len, - const char *digestname, - OSSL_LIB_CTX *libctx, - const char *propq); - -#endif /*OSSL_INTERNAL_DETERMINISTIC_NONCE_H */ 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 deleted file mode 100644 index 160ddb98..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dso.h +++ /dev/null @@ -1,164 +0,0 @@ -/* - * 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 OSSL_INTERNAL_DSO_H -# define OSSL_INTERNAL_DSO_H -# pragma once - -# include -# include "internal/dsoerr.h" - -/* These values are used as commands to DSO_ctrl() */ -# define DSO_CTRL_GET_FLAGS 1 -# define DSO_CTRL_SET_FLAGS 2 -# define DSO_CTRL_OR_FLAGS 3 - -/* - * By default, DSO_load() will translate the provided filename into a form - * typical for the platform using the dso_name_converter function of the - * method. Eg. win32 will transform "blah" into "blah.dll", and dlfcn will - * transform it into "libblah.so". This callback could even utilise the - * DSO_METHOD's converter too if it only wants to override behaviour for - * one or two possible DSO methods. However, the following flag can be - * set in a DSO to prevent *any* native name-translation at all - eg. if - * the caller has prompted the user for a path to a driver library so the - * filename should be interpreted as-is. - */ -# define DSO_FLAG_NO_NAME_TRANSLATION 0x01 -/* - * An extra flag to give if only the extension should be added as - * translation. This is obviously only of importance on Unix and other - * operating systems where the translation also may prefix the name with - * something, like 'lib', and ignored everywhere else. This flag is also - * ignored if DSO_FLAG_NO_NAME_TRANSLATION is used at the same time. - */ -# define DSO_FLAG_NAME_TRANSLATION_EXT_ONLY 0x02 - -/* - * Don't unload the DSO when we call DSO_free() - */ -# define DSO_FLAG_NO_UNLOAD_ON_FREE 0x04 - -/* - * This flag loads the library with public symbols. Meaning: The exported - * symbols of this library are public to all libraries loaded after this - * library. At the moment only implemented in unix. - */ -# define DSO_FLAG_GLOBAL_SYMBOLS 0x20 - -typedef void (*DSO_FUNC_TYPE) (void); - -typedef struct dso_st DSO; -typedef struct dso_meth_st DSO_METHOD; - -/* - * The function prototype used for method functions (or caller-provided - * callbacks) that transform filenames. They are passed a DSO structure - * pointer (or NULL if they are to be used independently of a DSO object) and - * a filename to transform. They should either return NULL (if there is an - * error condition) or a newly allocated string containing the transformed - * form that the caller will need to free with OPENSSL_free() when done. - */ -typedef char *(*DSO_NAME_CONVERTER_FUNC)(DSO *, const char *); -/* - * The function prototype used for method functions (or caller-provided - * callbacks) that merge two file specifications. They are passed a DSO - * structure pointer (or NULL if they are to be used independently of a DSO - * object) and two file specifications to merge. They should either return - * NULL (if there is an error condition) or a newly allocated string - * containing the result of merging that the caller will need to free with - * OPENSSL_free() when done. Here, merging means that bits and pieces are - * taken from each of the file specifications and added together in whatever - * fashion that is sensible for the DSO method in question. The only rule - * that really applies is that if the two specification contain pieces of the - * same type, the copy from the first string takes priority. One could see - * it as the first specification is the one given by the user and the second - * being a bunch of defaults to add on if they're missing in the first. - */ -typedef char *(*DSO_MERGER_FUNC)(DSO *, const char *, const char *); - -DSO *DSO_new(void); -int DSO_free(DSO *dso); -int DSO_flags(DSO *dso); -int DSO_up_ref(DSO *dso); -long DSO_ctrl(DSO *dso, int cmd, long larg, void *parg); - -/* - * These functions can be used to get/set the platform-independent filename - * used for a DSO. NB: set will fail if the DSO is already loaded. - */ -const char *DSO_get_filename(DSO *dso); -int DSO_set_filename(DSO *dso, const char *filename); -/* - * This function will invoke the DSO's name_converter callback to translate a - * filename, or if the callback isn't set it will instead use the DSO_METHOD's - * converter. If "filename" is NULL, the "filename" in the DSO itself will be - * used. If the DSO_FLAG_NO_NAME_TRANSLATION flag is set, then the filename is - * simply duplicated. NB: This function is usually called from within a - * DSO_METHOD during the processing of a DSO_load() call, and is exposed so - * that caller-created DSO_METHODs can do the same thing. A non-NULL return - * value will need to be OPENSSL_free()'d. - */ -char *DSO_convert_filename(DSO *dso, const char *filename); -/* - * This function will invoke the DSO's merger callback to merge two file - * specifications, or if the callback isn't set it will instead use the - * DSO_METHOD's merger. A non-NULL return value will need to be - * OPENSSL_free()'d. - */ -char *DSO_merge(DSO *dso, const char *filespec1, const char *filespec2); - -/* - * The all-singing all-dancing load function, you normally pass NULL for the - * first and third parameters. Use DSO_up_ref and DSO_free for subsequent - * reference count handling. Any flags passed in will be set in the - * constructed DSO after its init() function but before the load operation. - * If 'dso' is non-NULL, 'flags' is ignored. - */ -DSO *DSO_load(DSO *dso, const char *filename, DSO_METHOD *meth, int flags); - -/* This function binds to a function inside a shared library. */ -DSO_FUNC_TYPE DSO_bind_func(DSO *dso, const char *symname); - -/* - * This method is the default, but will beg, borrow, or steal whatever method - * should be the default on any particular platform (including - * DSO_METH_null() if necessary). - */ -DSO_METHOD *DSO_METHOD_openssl(void); - -/* - * This function writes null-terminated pathname of DSO module containing - * 'addr' into 'sz' large caller-provided 'path' and returns the number of - * characters [including trailing zero] written to it. If 'sz' is 0 or - * negative, 'path' is ignored and required amount of characters [including - * trailing zero] to accommodate pathname is returned. If 'addr' is NULL, then - * pathname of cryptolib itself is returned. Negative or zero return value - * denotes error. - */ -int DSO_pathbyaddr(void *addr, char *path, int sz); - -/* - * Like DSO_pathbyaddr() but instead returns a handle to the DSO for the symbol - * or NULL on error. - */ -DSO *DSO_dsobyaddr(void *addr, int flags); - -/* - * This function should be used with caution! It looks up symbols in *all* - * loaded modules and if module gets unloaded by somebody else attempt to - * dereference the pointer is doomed to have fatal consequences. Primary - * usage for this function is to probe *core* system functionality, e.g. - * check if getnameinfo(3) is available at run-time without bothering about - * OS-specific details such as libc.so.versioning or where does it actually - * reside: in libc itself or libsocket. - */ -void *DSO_global_lookup(const char *name); - -#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 deleted file mode 100644 index b1719e83..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/dsoerr.h +++ /dev/null @@ -1,48 +0,0 @@ -/* - * 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_DSOERR_H -# define OSSL_INTERNAL_DSOERR_H -# pragma once - -# include -# include - -# ifdef __cplusplus -extern "C" { -# endif - -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 - - -# 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 deleted file mode 100644 index d1ed62e8..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/e_os.h +++ /dev/null @@ -1,384 +0,0 @@ -/* - * 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 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(void); -# 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 defined(_MSC_VER) && (_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 */ - -/* ----------------------------- 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(void); -# ifndef NSSGETPID_MACRO -# define NSSGETPID_MACRO -# include -# include - inline int nssgetpid(void) - { - 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 deleted file mode 100644 index 7d5a73b1..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/endian.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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_ENDIAN_H -# define OSSL_INTERNAL_ENDIAN_H -# pragma once - -/* - * IS_LITTLE_ENDIAN and IS_BIG_ENDIAN can be used to detect the endianness - * 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 deleted file mode 100644 index d8a308f0..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/err.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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 OSSL_INTERNAL_ERR_H -# define OSSL_INTERNAL_ERR_H -# pragma once - -void err_free_strings_int(void); - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/event_queue.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/event_queue.h deleted file mode 100644 index bda1ee6a..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/event_queue.h +++ /dev/null @@ -1,163 +0,0 @@ -/* - * 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_INTERNAL_EVENT_QUEUE_H -# define OSSL_INTERNAL_EVENT_QUEUE_H -# pragma once - -# include "internal/priority_queue.h" -# include "internal/time.h" - -/* - * Opaque type holding an event. - */ -typedef struct ossl_event_st OSSL_EVENT; - -DEFINE_PRIORITY_QUEUE_OF(OSSL_EVENT); - -/* - * Public type representing an event queue, the underlying structure being - * opaque. - */ -typedef struct ossl_event_queue_st OSSL_EVENT_QUEUE; - -/* - * Public type representing a event queue entry. - * It is (internally) public so that it can be embedded into other structures, - * it should otherwise be treated as opaque. - */ -struct ossl_event_st { - uint32_t type; /* What type of event this is */ - uint32_t priority; /* What priority this event has */ - OSSL_TIME when; /* When the event is scheduled to happen */ - void *ctx; /* User argument passed to call backs */ - void *payload; /* Event specific data of unknown kind */ - size_t payload_size; /* Length (in bytes) of event specific data */ - - /* These fields are for internal use only */ - PRIORITY_QUEUE_OF(OSSL_EVENT) *queue; /* Queue containing this event */ - size_t ref; /* ID for this event */ - unsigned int flag_dynamic : 1; /* Malloced or not? */ -}; - -/* - * Utility function to populate an event structure and add it to the queue - */ -int ossl_event_queue_add(OSSL_EVENT_QUEUE *queue, OSSL_EVENT *event, - uint32_t type, uint32_t priority, - OSSL_TIME when, void *ctx, - void *payload, size_t payload_size); - -/* - * Utility functions to extract event fields - */ -static ossl_unused ossl_inline -uint32_t ossl_event_get_type(const OSSL_EVENT *event) -{ - return event->type; -} - -static ossl_unused ossl_inline -uint32_t ossl_event_get_priority(const OSSL_EVENT *event) -{ - return event->priority; -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_event_get_when(const OSSL_EVENT *event) -{ - return event->when; -} - -static ossl_unused ossl_inline -void *ossl_event_get0_ctx(const OSSL_EVENT *event) -{ - return event->ctx; -} - -static ossl_unused ossl_inline -void *ossl_event_get0_payload(const OSSL_EVENT *event, size_t *length) -{ - if (length != NULL) - *length = event->payload_size; - return event->payload; -} - -/* - * Create and free a queue. - */ -OSSL_EVENT_QUEUE *ossl_event_queue_new(void); -void ossl_event_queue_free(OSSL_EVENT_QUEUE *queue); - -/* - * Schedule a new event into an event queue. - * - * The event parameters are taken from the function arguments. - * - * The function returns NULL on failure and the added event on success. - */ -OSSL_EVENT *ossl_event_queue_add_new(OSSL_EVENT_QUEUE *queue, - uint32_t type, uint32_t priority, - OSSL_TIME when, void *ctx, - void *payload, size_t payload_size) -; - -/* - * Schedule an event into an event queue. - * - * The event parameters are taken from the function arguments. - * - * The function returns 0 on failure and 1 on success. - */ -int ossl_event_queue_add(OSSL_EVENT_QUEUE *queue, OSSL_EVENT *event, - uint32_t type, uint32_t priority, - OSSL_TIME when, void *ctx, - void *payload, size_t payload_size); - -/* - * Delete an event from the queue. - * This will cause the early deletion function to be called if it is non-NULL. - * A pointer to the event structure is returned. - */ -int ossl_event_queue_remove(OSSL_EVENT_QUEUE *queue, OSSL_EVENT *event); - -/* - * Free a dynamic event. - * Is a NOP for a static event. - */ -void ossl_event_free(OSSL_EVENT *event); - -/* - * Return the time until the next event for the specified event, if the event's - * time is past, zero is returned. Once activated, the event reference becomes - * invalid and this function becomes undefined. - */ -OSSL_TIME ossl_event_time_until(const OSSL_EVENT *event); - -/* - * Return the time until the next event in the queue. - * If the next event is in the past, zero is returned. - */ -OSSL_TIME ossl_event_queue_time_until_next(const OSSL_EVENT_QUEUE *queue); - -/* - * Postpone an event to trigger at the specified time. - * If the event has triggered, this function's behaviour is undefined. - */ -int ossl_event_queue_postpone_until(OSSL_EVENT_QUEUE *queue, - OSSL_EVENT *event, - OSSL_TIME when); - -/* - * Return the next event to process. - */ -int ossl_event_queue_get1_next_event(OSSL_EVENT_QUEUE *queue, - OSSL_EVENT **event); - -#endif 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 deleted file mode 100644 index edd8381e..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ffc.h +++ /dev/null @@ -1,221 +0,0 @@ -/* - * 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 - -/* - * 0x80, 0x100 reserved by include/openssl/dh.h with check bits that are not - * relevant for FFC. - */ - -# 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 -# define FFC_CHECK_BAD_LN_PAIR 0x20000 -# define FFC_CHECK_INVALID_SEED_SIZE 0x40000 - -/* 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); -void 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/hpke_util.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/hpke_util.h deleted file mode 100644 index e1da5e05..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/hpke_util.h +++ /dev/null @@ -1,100 +0,0 @@ -/* - * 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_INTERNAL_HPKE_UTIL_H -# define OSSL_INTERNAL_HPKE_UTIL_H -# pragma once - -/* Constants from RFC 9180 Section 7.1 and 7.3 */ -# define OSSL_HPKE_MAX_SECRET 64 -# define OSSL_HPKE_MAX_PUBLIC 133 -# define OSSL_HPKE_MAX_PRIVATE 66 -# define OSSL_HPKE_MAX_KDF_INPUTLEN 64 - -/* - * max length of a base-nonce (the Nn field from OSSL_HPKE_AEAD_INFO), this - * is used for a local stack array size - */ -# define OSSL_HPKE_MAX_NONCELEN 12 - -/* - * @brief info about a KEM - * Used to store constants from Section 7.1 "Table 2 KEM IDs" - * and the bitmask for EC curves described in Section 7.1.3 DeriveKeyPair - */ -typedef struct { - uint16_t kem_id; /* code point for key encipherment method */ - const char *keytype; /* string form of algtype "EC"/"X25519"/"X448" */ - const char *groupname; /* string form of EC group for NIST curves */ - const char *mdname; /* hash alg name for the HKDF */ - size_t Nsecret; /* size of secrets */ - size_t Nenc; /* length of encapsulated key */ - size_t Npk; /* length of public key */ - size_t Nsk; /* length of raw private key */ - uint8_t bitmask; -} OSSL_HPKE_KEM_INFO; - -/* - * @brief info about a KDF - */ -typedef struct { - uint16_t kdf_id; /* code point for KDF */ - const char *mdname; /* hash alg name for the HKDF */ - size_t Nh; /* length of hash/extract output */ -} OSSL_HPKE_KDF_INFO; - -/* - * @brief info about an AEAD - */ -typedef struct { - uint16_t aead_id; /* code point for aead alg */ - const char *name; /* alg name */ - size_t taglen; /* aead tag len */ - size_t Nk; /* size of a key for this aead */ - size_t Nn; /* length of a nonce for this aead */ -} OSSL_HPKE_AEAD_INFO; - -const OSSL_HPKE_KEM_INFO *ossl_HPKE_KEM_INFO_find_curve(const char *curve); -const OSSL_HPKE_KEM_INFO *ossl_HPKE_KEM_INFO_find_id(uint16_t kemid); -const OSSL_HPKE_KEM_INFO *ossl_HPKE_KEM_INFO_find_random(OSSL_LIB_CTX *ctx); -const OSSL_HPKE_KDF_INFO *ossl_HPKE_KDF_INFO_find_id(uint16_t kdfid); -const OSSL_HPKE_KDF_INFO *ossl_HPKE_KDF_INFO_find_random(OSSL_LIB_CTX *ctx); -const OSSL_HPKE_AEAD_INFO *ossl_HPKE_AEAD_INFO_find_id(uint16_t aeadid); -const OSSL_HPKE_AEAD_INFO *ossl_HPKE_AEAD_INFO_find_random(OSSL_LIB_CTX *ctx); - -int ossl_hpke_kdf_extract(EVP_KDF_CTX *kctx, - unsigned char *prk, size_t prklen, - const unsigned char *salt, size_t saltlen, - const unsigned char *ikm, size_t ikmlen); - -int ossl_hpke_kdf_expand(EVP_KDF_CTX *kctx, - unsigned char *okm, size_t okmlen, - const unsigned char *prk, size_t prklen, - const unsigned char *info, size_t infolen); - -int ossl_hpke_labeled_extract(EVP_KDF_CTX *kctx, - unsigned char *prk, size_t prklen, - const unsigned char *salt, size_t saltlen, - const char *protocol_label, - const unsigned char *suiteid, size_t suiteidlen, - const char *label, - const unsigned char *ikm, size_t ikmlen); -int ossl_hpke_labeled_expand(EVP_KDF_CTX *kctx, - unsigned char *okm, size_t okmlen, - const unsigned char *prk, size_t prklen, - const char *protocol_label, - const unsigned char *suiteid, size_t suiteidlen, - const char *label, - const unsigned char *info, size_t infolen); - -EVP_KDF_CTX *ossl_kdf_ctx_create(const char *kdfname, const char *mdname, - OSSL_LIB_CTX *libctx, const char *propq); - -int ossl_hpke_str2suite(const char *suitestr, OSSL_HPKE_SUITE *suite); -#endif 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 deleted file mode 100644 index 072653dc..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ktls.h +++ /dev/null @@ -1,434 +0,0 @@ -/* - * Copyright 2018-2024 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#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 -# ifdef TLS_CHACHA20_IV_LEN -# ifndef OPENSSL_NO_CHACHA -# define OPENSSL_KTLS_CHACHA20_POLY1305 -# endif -# endif - -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 -} - -/* Not supported on FreeBSD */ -static ossl_inline int ktls_enable_tx_zerocopy_sendfile(int fd) -{ - return 0; -} - -/* - * 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 -# if LINUX_VERSION_CODE < KERNEL_VERSION(5, 19, 0) -# define OPENSSL_NO_KTLS_ZC_TX -# ifndef PEDANTIC -# warning "KTLS requires Kernel Headers >= 5.19.0 for zerocopy sendfile" -# warning "Skipping Compilation of KTLS zerocopy sendfile" -# 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; -} - -static ossl_inline int ktls_enable_tx_zerocopy_sendfile(int fd) -{ -#ifndef OPENSSL_NO_KTLS_ZC_TX - int enable = 1; - - return setsockopt(fd, SOL_TLS, TLS_TX_ZEROCOPY_RO, - &enable, sizeof(enable)) ? 0 : 1; -#else - return 0; -#endif -} - -/* - * 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/list.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/list.h deleted file mode 100644 index fdd356c4..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/list.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * 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_INTERNAL_LIST_H -# define OSSL_INTERNAL_LIST_H -# pragma once - -# include -# include - -# ifdef NDEBUG -# define OSSL_LIST_DBG(x) -# else -# define OSSL_LIST_DBG(x) x; -# endif - -/* Define a list structure */ -# define OSSL_LIST(name) OSSL_LIST_ ## name - -/* Define fields to include an element of a list */ -# define OSSL_LIST_MEMBER(name, type) \ - struct { \ - type *next, *prev; \ - OSSL_LIST_DBG(struct ossl_list_st_ ## name *list) \ - } ossl_list_ ## name - -# define DEFINE_LIST_OF(name, type) \ - typedef struct ossl_list_st_ ## name OSSL_LIST(name); \ - struct ossl_list_st_ ## name { \ - type *alpha, *omega; \ - size_t num_elems; \ - }; \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_init(OSSL_LIST(name) *list) \ - { \ - memset(list, 0, sizeof(*list)); \ - } \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_init_elem(type *elem) \ - { \ - memset(&elem->ossl_list_ ## name, 0, \ - sizeof(elem->ossl_list_ ## name)); \ - } \ - static ossl_unused ossl_inline int \ - ossl_list_##name##_is_empty(const OSSL_LIST(name) *list) \ - { \ - return list->num_elems == 0; \ - } \ - static ossl_unused ossl_inline size_t \ - ossl_list_##name##_num(const OSSL_LIST(name) *list) \ - { \ - return list->num_elems; \ - } \ - static ossl_unused ossl_inline type * \ - ossl_list_##name##_head(const OSSL_LIST(name) *list) \ - { \ - assert(list->alpha == NULL \ - || list->alpha->ossl_list_ ## name.list == list); \ - return list->alpha; \ - } \ - static ossl_unused ossl_inline type * \ - ossl_list_##name##_tail(const OSSL_LIST(name) *list) \ - { \ - assert(list->omega == NULL \ - || list->omega->ossl_list_ ## name.list == list); \ - return list->omega; \ - } \ - static ossl_unused ossl_inline type * \ - ossl_list_##name##_next(const type *elem) \ - { \ - assert(elem->ossl_list_ ## name.next == NULL \ - || elem->ossl_list_ ## name.next \ - ->ossl_list_ ## name.prev == elem); \ - return elem->ossl_list_ ## name.next; \ - } \ - static ossl_unused ossl_inline type * \ - ossl_list_##name##_prev(const type *elem) \ - { \ - assert(elem->ossl_list_ ## name.prev == NULL \ - || elem->ossl_list_ ## name.prev \ - ->ossl_list_ ## name.next == elem); \ - return elem->ossl_list_ ## name.prev; \ - } \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_remove(OSSL_LIST(name) *list, type *elem) \ - { \ - assert(elem->ossl_list_ ## name.list == list); \ - OSSL_LIST_DBG(elem->ossl_list_ ## name.list = NULL) \ - if (list->alpha == elem) \ - list->alpha = elem->ossl_list_ ## name.next; \ - if (list->omega == elem) \ - list->omega = elem->ossl_list_ ## name.prev; \ - if (elem->ossl_list_ ## name.prev != NULL) \ - elem->ossl_list_ ## name.prev->ossl_list_ ## name.next = \ - elem->ossl_list_ ## name.next; \ - if (elem->ossl_list_ ## name.next != NULL) \ - elem->ossl_list_ ## name.next->ossl_list_ ## name.prev = \ - elem->ossl_list_ ## name.prev; \ - list->num_elems--; \ - memset(&elem->ossl_list_ ## name, 0, \ - sizeof(elem->ossl_list_ ## name)); \ - } \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_insert_head(OSSL_LIST(name) *list, type *elem) \ - { \ - assert(elem->ossl_list_ ## name.list == NULL); \ - OSSL_LIST_DBG(elem->ossl_list_ ## name.list = list) \ - if (list->alpha != NULL) \ - list->alpha->ossl_list_ ## name.prev = elem; \ - elem->ossl_list_ ## name.next = list->alpha; \ - elem->ossl_list_ ## name.prev = NULL; \ - list->alpha = elem; \ - if (list->omega == NULL) \ - list->omega = elem; \ - list->num_elems++; \ - } \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_insert_tail(OSSL_LIST(name) *list, type *elem) \ - { \ - assert(elem->ossl_list_ ## name.list == NULL); \ - OSSL_LIST_DBG(elem->ossl_list_ ## name.list = list) \ - if (list->omega != NULL) \ - list->omega->ossl_list_ ## name.next = elem; \ - elem->ossl_list_ ## name.prev = list->omega; \ - elem->ossl_list_ ## name.next = NULL; \ - list->omega = elem; \ - if (list->alpha == NULL) \ - list->alpha = elem; \ - list->num_elems++; \ - } \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_insert_before(OSSL_LIST(name) *list, type *e, \ - type *elem) \ - { \ - assert(elem->ossl_list_ ## name.list == NULL); \ - OSSL_LIST_DBG(elem->ossl_list_ ## name.list = list) \ - elem->ossl_list_ ## name.next = e; \ - elem->ossl_list_ ## name.prev = e->ossl_list_ ## name.prev; \ - if (e->ossl_list_ ## name.prev != NULL) \ - e->ossl_list_ ## name.prev->ossl_list_ ## name.next = elem; \ - e->ossl_list_ ## name.prev = elem; \ - if (list->alpha == e) \ - list->alpha = elem; \ - list->num_elems++; \ - } \ - static ossl_unused ossl_inline void \ - ossl_list_##name##_insert_after(OSSL_LIST(name) *list, type *e, \ - type *elem) \ - { \ - assert(elem->ossl_list_ ## name.list == NULL); \ - OSSL_LIST_DBG(elem->ossl_list_ ## name.list = list) \ - elem->ossl_list_ ## name.prev = e; \ - elem->ossl_list_ ## name.next = e->ossl_list_ ## name.next; \ - if (e->ossl_list_ ## name.next != NULL) \ - e->ossl_list_ ## name.next->ossl_list_ ## name.prev = elem; \ - e->ossl_list_ ## name.next = elem; \ - if (list->omega == e) \ - list->omega = elem; \ - list->num_elems++; \ - } \ - struct ossl_list_st_ ## name - -#endif 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 deleted file mode 100644 index 6c42a9cd..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/namemap.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 - */ - -#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 deleted file mode 100644 index b758513b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/nelem.h +++ /dev/null @@ -1,15 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index 47fb1677..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/numbers.h +++ /dev/null @@ -1,110 +0,0 @@ -/* - * Copyright 2015-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_NUMBERS_H -# define OSSL_INTERNAL_NUMBERS_H -# pragma once - -# include - -# 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 */ - -# 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 */ - -# 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)))) -# define __MININT__(T) (-__MAXINT__(T)) - -# else - -# error "do not know the integer encoding on this architecture" - -# endif - -# ifndef INT8_MAX -# define INT8_MIN __MININT__(int8_t) -# define INT8_MAX __MAXINT__(int8_t) -# define UINT8_MAX __MAXUINT__(uint8_t) -# endif - -# ifndef INT16_MAX -# define INT16_MIN __MININT__(int16_t) -# define INT16_MAX __MAXINT__(int16_t) -# define UINT16_MAX __MAXUINT__(uint16_t) -# endif - -# ifndef INT32_MAX -# define INT32_MIN __MININT__(int32_t) -# define INT32_MAX __MAXINT__(int32_t) -# define UINT32_MAX __MAXUINT__(uint32_t) -# endif - -# ifndef INT64_MAX -# define INT64_MIN __MININT__(int64_t) -# define INT64_MAX __MAXINT__(int64_t) -# define UINT64_MAX __MAXUINT__(uint64_t) -# endif - -/* - * 64-bit processor with LP64 ABI - */ -# ifdef SIXTY_FOUR_BIT_LONG -# ifndef UINT32_C -# define UINT32_C(c) (c) -# endif -# ifndef UINT64_C -# define UINT64_C(c) (c##UL) -# endif -# endif - -/* - * 64-bit processor other than LP64 ABI - */ -# ifdef SIXTY_FOUR_BIT -# ifndef UINT32_C -# define UINT32_C(c) (c##UL) -# endif -# ifndef UINT64_C -# define UINT64_C(c) (c##ULL) -# endif -# 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 deleted file mode 100644 index add34d14..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/o_dir.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 file is dual-licensed and is also available under the following - * terms: - * - * Copyright (c) 2004, Richard Levitte - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#ifndef OSSL_INTERNAL_O_DIR_H -# define OSSL_INTERNAL_O_DIR_H -# pragma once - -typedef struct OPENSSL_dir_context_st OPENSSL_DIR_CTX; - -/* - * returns NULL on error or end-of-directory. If it is end-of-directory, - * errno will be zero - */ -const char *OPENSSL_DIR_read(OPENSSL_DIR_CTX **ctx, const char *directory); -/* returns 1 on success, 0 on error */ -int OPENSSL_DIR_end(OPENSSL_DIR_CTX **ctx); - -#endif /* LPDIR_H */ 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 deleted file mode 100644 index 7abc6b8b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet.h +++ /dev/null @@ -1,939 +0,0 @@ -/* - * Copyright 2015-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_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 - -/* QUIC variable-length integer length prefix */ -#define WPACKET_FLAGS_QUIC_VLINT 4 - -/* - * 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/packet_quic.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet_quic.h deleted file mode 100644 index 5173b467..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet_quic.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * 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_INTERNAL_PACKET_QUIC_H -# define OSSL_INTERNAL_PACKET_QUIC_H -# pragma once - -# include "internal/packet.h" -# include "internal/quic_vlint.h" - -# ifndef OPENSSL_NO_QUIC -/* - * Decodes a QUIC variable-length integer in |pkt| and stores the result in - * |data|. - */ -__owur static ossl_inline int PACKET_get_quic_vlint(PACKET *pkt, - uint64_t *data) -{ - size_t enclen; - - if (PACKET_remaining(pkt) < 1) - return 0; - - enclen = ossl_quic_vlint_decode_len(*pkt->curr); - - if (PACKET_remaining(pkt) < enclen) - return 0; - - *data = ossl_quic_vlint_decode_unchecked(pkt->curr); - packet_forward(pkt, enclen); - return 1; -} - -/* - * Decodes a QUIC variable-length integer in |pkt| and stores the result in - * |data|. Unlike PACKET_get_quic_vlint, this does not advance the current - * position. If was_minimal is non-NULL, *was_minimal is set to 1 if the integer - * was encoded using the minimal possible number of bytes and 0 otherwise. - */ -__owur static ossl_inline int PACKET_peek_quic_vlint_ex(PACKET *pkt, - uint64_t *data, - int *was_minimal) -{ - size_t enclen; - - if (PACKET_remaining(pkt) < 1) - return 0; - - enclen = ossl_quic_vlint_decode_len(*pkt->curr); - - if (PACKET_remaining(pkt) < enclen) - return 0; - - *data = ossl_quic_vlint_decode_unchecked(pkt->curr); - - if (was_minimal != NULL) - *was_minimal = (enclen == ossl_quic_vlint_encode_len(*data)); - - return 1; -} - -__owur static ossl_inline int PACKET_peek_quic_vlint(PACKET *pkt, - uint64_t *data) -{ - return PACKET_peek_quic_vlint_ex(pkt, data, NULL); -} - -/* - * Skips over a QUIC variable-length integer in |pkt| without decoding it. - */ -__owur static ossl_inline int PACKET_skip_quic_vlint(PACKET *pkt) -{ - size_t enclen; - - if (PACKET_remaining(pkt) < 1) - return 0; - - enclen = ossl_quic_vlint_decode_len(*pkt->curr); - - if (PACKET_remaining(pkt) < enclen) - return 0; - - packet_forward(pkt, enclen); - return 1; -} - -/* - * Reads a variable-length vector prefixed with a QUIC variable-length integer - * denoting the 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_quic_length_prefixed(PACKET *pkt, - PACKET *subpkt) -{ - uint64_t length; - const unsigned char *data; - PACKET tmp = *pkt; - - if (!PACKET_get_quic_vlint(&tmp, &length) || - length > SIZE_MAX || - !PACKET_get_bytes(&tmp, &data, (size_t)length)) { - return 0; - } - - *pkt = tmp; - subpkt->curr = data; - subpkt->remaining = (size_t)length; - - return 1; -} - -/* - * Starts a QUIC sub-packet headed by a QUIC variable-length integer. A 4-byte - * representation is used. - */ -__owur int WPACKET_start_quic_sub_packet(WPACKET *pkt); - -/* - * Starts a QUIC sub-packet headed by a QUIC variable-length integer. max_len - * specifies the upper bound for the sub-packet size at the time the sub-packet - * is closed, which determines the encoding size for the variable-length - * integer header. max_len can be a precise figure or a worst-case bound - * if a precise figure is not available. - */ -__owur int WPACKET_start_quic_sub_packet_bound(WPACKET *pkt, size_t max_len); - -/* - * Allocates a QUIC sub-packet with exactly len bytes of payload, headed by a - * QUIC variable-length integer. The pointer to the payload buffer is output and - * must be filled by the caller. This function assures optimal selection of - * variable-length integer encoding length. - */ -__owur int WPACKET_quic_sub_allocate_bytes(WPACKET *pkt, size_t len, - unsigned char **bytes); - -/* - * Write a QUIC variable-length integer to the packet. - */ -__owur int WPACKET_quic_write_vlint(WPACKET *pkt, uint64_t v); - -# endif /* OPENSSL_NO_QUIC */ -#endif /* OSSL_INTERNAL_PACKET_QUIC_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 deleted file mode 100644 index 3518f008..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_build_set.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * 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_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_signed_bn(OSSL_PARAM_BLD *bld, OSSL_PARAM *p, - const char *key, const BIGNUM *bn); -int ossl_param_build_set_signed_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/param_names.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_names.h deleted file mode 100644 index e721d071..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_names.h +++ /dev/null @@ -1,376 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/internal/param_names.h.in - * - * Copyright 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 - */ - - -int ossl_param_find_pidx(const char *s); - -/* Parameter name definitions - generated by util/perl/OpenSSL/paramnames.pm */ -#define NUM_PIDX 290 - -#define PIDX_ALG_PARAM_CIPHER 0 -#define PIDX_ALG_PARAM_DIGEST 1 -#define PIDX_ALG_PARAM_ENGINE 2 -#define PIDX_ALG_PARAM_MAC 3 -#define PIDX_ALG_PARAM_PROPERTIES 4 -#define PIDX_ASYM_CIPHER_PARAM_DIGEST PIDX_PKEY_PARAM_DIGEST -#define PIDX_ASYM_CIPHER_PARAM_ENGINE PIDX_PKEY_PARAM_ENGINE -#define PIDX_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION 5 -#define PIDX_ASYM_CIPHER_PARAM_MGF1_DIGEST PIDX_PKEY_PARAM_MGF1_DIGEST -#define PIDX_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS PIDX_PKEY_PARAM_MGF1_PROPERTIES -#define PIDX_ASYM_CIPHER_PARAM_OAEP_DIGEST PIDX_ALG_PARAM_DIGEST -#define PIDX_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS 6 -#define PIDX_ASYM_CIPHER_PARAM_OAEP_LABEL 7 -#define PIDX_ASYM_CIPHER_PARAM_PAD_MODE PIDX_PKEY_PARAM_PAD_MODE -#define PIDX_ASYM_CIPHER_PARAM_PROPERTIES PIDX_PKEY_PARAM_PROPERTIES -#define PIDX_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION 8 -#define PIDX_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION 9 -#define PIDX_CAPABILITY_TLS_GROUP_ALG 10 -#define PIDX_CAPABILITY_TLS_GROUP_ID 11 -#define PIDX_CAPABILITY_TLS_GROUP_IS_KEM 12 -#define PIDX_CAPABILITY_TLS_GROUP_MAX_DTLS 13 -#define PIDX_CAPABILITY_TLS_GROUP_MAX_TLS 14 -#define PIDX_CAPABILITY_TLS_GROUP_MIN_DTLS 15 -#define PIDX_CAPABILITY_TLS_GROUP_MIN_TLS 16 -#define PIDX_CAPABILITY_TLS_GROUP_NAME 17 -#define PIDX_CAPABILITY_TLS_GROUP_NAME_INTERNAL 18 -#define PIDX_CAPABILITY_TLS_GROUP_SECURITY_BITS 19 -#define PIDX_CAPABILITY_TLS_SIGALG_CODE_POINT 20 -#define PIDX_CAPABILITY_TLS_SIGALG_HASH_NAME 21 -#define PIDX_CAPABILITY_TLS_SIGALG_HASH_OID 22 -#define PIDX_CAPABILITY_TLS_SIGALG_IANA_NAME 23 -#define PIDX_CAPABILITY_TLS_SIGALG_KEYTYPE 24 -#define PIDX_CAPABILITY_TLS_SIGALG_KEYTYPE_OID 25 -#define PIDX_CAPABILITY_TLS_SIGALG_MAX_TLS 14 -#define PIDX_CAPABILITY_TLS_SIGALG_MIN_TLS 16 -#define PIDX_CAPABILITY_TLS_SIGALG_NAME 26 -#define PIDX_CAPABILITY_TLS_SIGALG_OID 27 -#define PIDX_CAPABILITY_TLS_SIGALG_SECURITY_BITS 28 -#define PIDX_CAPABILITY_TLS_SIGALG_SIG_NAME 29 -#define PIDX_CAPABILITY_TLS_SIGALG_SIG_OID 30 -#define PIDX_CIPHER_PARAM_AEAD 31 -#define PIDX_CIPHER_PARAM_AEAD_IVLEN PIDX_CIPHER_PARAM_IVLEN -#define PIDX_CIPHER_PARAM_AEAD_MAC_KEY 32 -#define PIDX_CIPHER_PARAM_AEAD_TAG 33 -#define PIDX_CIPHER_PARAM_AEAD_TAGLEN 34 -#define PIDX_CIPHER_PARAM_AEAD_TLS1_AAD 35 -#define PIDX_CIPHER_PARAM_AEAD_TLS1_AAD_PAD 36 -#define PIDX_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN 37 -#define PIDX_CIPHER_PARAM_AEAD_TLS1_IV_FIXED 38 -#define PIDX_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV 39 -#define PIDX_CIPHER_PARAM_ALGORITHM_ID_PARAMS 40 -#define PIDX_CIPHER_PARAM_BLOCK_SIZE 41 -#define PIDX_CIPHER_PARAM_CTS 42 -#define PIDX_CIPHER_PARAM_CTS_MODE 43 -#define PIDX_CIPHER_PARAM_CUSTOM_IV 44 -#define PIDX_CIPHER_PARAM_HAS_RAND_KEY 45 -#define PIDX_CIPHER_PARAM_IV 46 -#define PIDX_CIPHER_PARAM_IVLEN 47 -#define PIDX_CIPHER_PARAM_KEYLEN 48 -#define PIDX_CIPHER_PARAM_MODE 49 -#define PIDX_CIPHER_PARAM_NUM 50 -#define PIDX_CIPHER_PARAM_PADDING 51 -#define PIDX_CIPHER_PARAM_RANDOM_KEY 52 -#define PIDX_CIPHER_PARAM_RC2_KEYBITS 53 -#define PIDX_CIPHER_PARAM_ROUNDS 54 -#define PIDX_CIPHER_PARAM_SPEED 55 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK 56 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD 57 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN 58 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC 59 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN 60 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN 61 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE 62 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE 63 -#define PIDX_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT 64 -#define PIDX_CIPHER_PARAM_TLS_MAC 65 -#define PIDX_CIPHER_PARAM_TLS_MAC_SIZE 66 -#define PIDX_CIPHER_PARAM_TLS_VERSION 67 -#define PIDX_CIPHER_PARAM_UPDATED_IV 68 -#define PIDX_CIPHER_PARAM_USE_BITS 69 -#define PIDX_CIPHER_PARAM_XTS_STANDARD 70 -#define PIDX_DECODER_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES -#define PIDX_DIGEST_PARAM_ALGID_ABSENT 71 -#define PIDX_DIGEST_PARAM_BLOCK_SIZE 41 -#define PIDX_DIGEST_PARAM_MICALG 72 -#define PIDX_DIGEST_PARAM_PAD_TYPE 73 -#define PIDX_DIGEST_PARAM_SIZE 74 -#define PIDX_DIGEST_PARAM_SSL3_MS 75 -#define PIDX_DIGEST_PARAM_XOF 76 -#define PIDX_DIGEST_PARAM_XOFLEN 77 -#define PIDX_DRBG_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER -#define PIDX_DRBG_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST -#define PIDX_DRBG_PARAM_ENTROPY_REQUIRED 78 -#define PIDX_DRBG_PARAM_MAC PIDX_ALG_PARAM_MAC -#define PIDX_DRBG_PARAM_MAX_ADINLEN 79 -#define PIDX_DRBG_PARAM_MAX_ENTROPYLEN 80 -#define PIDX_DRBG_PARAM_MAX_LENGTH 81 -#define PIDX_DRBG_PARAM_MAX_NONCELEN 82 -#define PIDX_DRBG_PARAM_MAX_PERSLEN 83 -#define PIDX_DRBG_PARAM_MIN_ENTROPYLEN 84 -#define PIDX_DRBG_PARAM_MIN_LENGTH 85 -#define PIDX_DRBG_PARAM_MIN_NONCELEN 86 -#define PIDX_DRBG_PARAM_PREDICTION_RESISTANCE 87 -#define PIDX_DRBG_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES -#define PIDX_DRBG_PARAM_RANDOM_DATA 88 -#define PIDX_DRBG_PARAM_RESEED_COUNTER 89 -#define PIDX_DRBG_PARAM_RESEED_REQUESTS 90 -#define PIDX_DRBG_PARAM_RESEED_TIME 91 -#define PIDX_DRBG_PARAM_RESEED_TIME_INTERVAL 92 -#define PIDX_DRBG_PARAM_SIZE 74 -#define PIDX_DRBG_PARAM_USE_DF 93 -#define PIDX_ENCODER_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER -#define PIDX_ENCODER_PARAM_ENCRYPT_LEVEL 94 -#define PIDX_ENCODER_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES -#define PIDX_ENCODER_PARAM_SAVE_PARAMETERS 95 -#define PIDX_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE 96 -#define PIDX_EXCHANGE_PARAM_KDF_DIGEST 97 -#define PIDX_EXCHANGE_PARAM_KDF_DIGEST_PROPS 98 -#define PIDX_EXCHANGE_PARAM_KDF_OUTLEN 99 -#define PIDX_EXCHANGE_PARAM_KDF_TYPE 100 -#define PIDX_EXCHANGE_PARAM_KDF_UKM 101 -#define PIDX_EXCHANGE_PARAM_PAD 102 -#define PIDX_GEN_PARAM_ITERATION 103 -#define PIDX_GEN_PARAM_POTENTIAL 104 -#define PIDX_KDF_PARAM_ARGON2_AD 105 -#define PIDX_KDF_PARAM_ARGON2_LANES 106 -#define PIDX_KDF_PARAM_ARGON2_MEMCOST 107 -#define PIDX_KDF_PARAM_ARGON2_VERSION 108 -#define PIDX_KDF_PARAM_CEK_ALG 109 -#define PIDX_KDF_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER -#define PIDX_KDF_PARAM_CONSTANT 110 -#define PIDX_KDF_PARAM_DATA 111 -#define PIDX_KDF_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST -#define PIDX_KDF_PARAM_EARLY_CLEAN 112 -#define PIDX_KDF_PARAM_HMACDRBG_ENTROPY 113 -#define PIDX_KDF_PARAM_HMACDRBG_NONCE 114 -#define PIDX_KDF_PARAM_INFO 115 -#define PIDX_KDF_PARAM_ITER 116 -#define PIDX_KDF_PARAM_KBKDF_R 117 -#define PIDX_KDF_PARAM_KBKDF_USE_L 118 -#define PIDX_KDF_PARAM_KBKDF_USE_SEPARATOR 119 -#define PIDX_KDF_PARAM_KEY 120 -#define PIDX_KDF_PARAM_LABEL 121 -#define PIDX_KDF_PARAM_MAC PIDX_ALG_PARAM_MAC -#define PIDX_KDF_PARAM_MAC_SIZE 122 -#define PIDX_KDF_PARAM_MODE 49 -#define PIDX_KDF_PARAM_PASSWORD 123 -#define PIDX_KDF_PARAM_PKCS12_ID 124 -#define PIDX_KDF_PARAM_PKCS5 125 -#define PIDX_KDF_PARAM_PREFIX 126 -#define PIDX_KDF_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES -#define PIDX_KDF_PARAM_SALT 127 -#define PIDX_KDF_PARAM_SCRYPT_MAXMEM 128 -#define PIDX_KDF_PARAM_SCRYPT_N 129 -#define PIDX_KDF_PARAM_SCRYPT_P 130 -#define PIDX_KDF_PARAM_SCRYPT_R 117 -#define PIDX_KDF_PARAM_SECRET 131 -#define PIDX_KDF_PARAM_SEED 132 -#define PIDX_KDF_PARAM_SIZE 74 -#define PIDX_KDF_PARAM_SSHKDF_SESSION_ID 133 -#define PIDX_KDF_PARAM_SSHKDF_TYPE 134 -#define PIDX_KDF_PARAM_SSHKDF_XCGHASH 135 -#define PIDX_KDF_PARAM_THREADS 136 -#define PIDX_KDF_PARAM_UKM 137 -#define PIDX_KDF_PARAM_X942_ACVPINFO 138 -#define PIDX_KDF_PARAM_X942_PARTYUINFO 139 -#define PIDX_KDF_PARAM_X942_PARTYVINFO 140 -#define PIDX_KDF_PARAM_X942_SUPP_PRIVINFO 141 -#define PIDX_KDF_PARAM_X942_SUPP_PUBINFO 142 -#define PIDX_KDF_PARAM_X942_USE_KEYBITS 143 -#define PIDX_KEM_PARAM_IKME 144 -#define PIDX_KEM_PARAM_OPERATION 145 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_BLOCK_PADDING 146 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_MAX_EARLY_DATA 147 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_MAX_FRAG_LEN 148 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_MODE 49 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_OPTIONS 149 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_READ_AHEAD 150 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_STREAM_MAC 151 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_TLSTREE 152 -#define PIDX_LIBSSL_RECORD_LAYER_PARAM_USE_ETM 153 -#define PIDX_LIBSSL_RECORD_LAYER_READ_BUFFER_LEN 154 -#define PIDX_MAC_PARAM_BLOCK_SIZE 155 -#define PIDX_MAC_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER -#define PIDX_MAC_PARAM_CUSTOM 156 -#define PIDX_MAC_PARAM_C_ROUNDS 157 -#define PIDX_MAC_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST -#define PIDX_MAC_PARAM_DIGEST_NOINIT 158 -#define PIDX_MAC_PARAM_DIGEST_ONESHOT 159 -#define PIDX_MAC_PARAM_D_ROUNDS 160 -#define PIDX_MAC_PARAM_IV 46 -#define PIDX_MAC_PARAM_KEY 120 -#define PIDX_MAC_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES -#define PIDX_MAC_PARAM_SALT 127 -#define PIDX_MAC_PARAM_SIZE 74 -#define PIDX_MAC_PARAM_TLS_DATA_SIZE 161 -#define PIDX_MAC_PARAM_XOF 76 -#define PIDX_OBJECT_PARAM_DATA 111 -#define PIDX_OBJECT_PARAM_DATA_STRUCTURE 162 -#define PIDX_OBJECT_PARAM_DATA_TYPE 163 -#define PIDX_OBJECT_PARAM_DESC 164 -#define PIDX_OBJECT_PARAM_REFERENCE 165 -#define PIDX_OBJECT_PARAM_TYPE 134 -#define PIDX_PASSPHRASE_PARAM_INFO 115 -#define PIDX_PKEY_PARAM_BITS 166 -#define PIDX_PKEY_PARAM_CIPHER PIDX_ALG_PARAM_CIPHER -#define PIDX_PKEY_PARAM_DEFAULT_DIGEST 167 -#define PIDX_PKEY_PARAM_DHKEM_IKM 168 -#define PIDX_PKEY_PARAM_DH_GENERATOR 169 -#define PIDX_PKEY_PARAM_DH_PRIV_LEN 170 -#define PIDX_PKEY_PARAM_DIGEST PIDX_ALG_PARAM_DIGEST -#define PIDX_PKEY_PARAM_DIGEST_SIZE 171 -#define PIDX_PKEY_PARAM_DIST_ID 172 -#define PIDX_PKEY_PARAM_EC_A 173 -#define PIDX_PKEY_PARAM_EC_B 174 -#define PIDX_PKEY_PARAM_EC_CHAR2_M 175 -#define PIDX_PKEY_PARAM_EC_CHAR2_PP_K1 176 -#define PIDX_PKEY_PARAM_EC_CHAR2_PP_K2 177 -#define PIDX_PKEY_PARAM_EC_CHAR2_PP_K3 178 -#define PIDX_PKEY_PARAM_EC_CHAR2_TP_BASIS 179 -#define PIDX_PKEY_PARAM_EC_CHAR2_TYPE 180 -#define PIDX_PKEY_PARAM_EC_COFACTOR 181 -#define PIDX_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS 182 -#define PIDX_PKEY_PARAM_EC_ENCODING 183 -#define PIDX_PKEY_PARAM_EC_FIELD_TYPE 184 -#define PIDX_PKEY_PARAM_EC_GENERATOR 185 -#define PIDX_PKEY_PARAM_EC_GROUP_CHECK_TYPE 186 -#define PIDX_PKEY_PARAM_EC_INCLUDE_PUBLIC 187 -#define PIDX_PKEY_PARAM_EC_ORDER 188 -#define PIDX_PKEY_PARAM_EC_P 130 -#define PIDX_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT 189 -#define PIDX_PKEY_PARAM_EC_PUB_X 190 -#define PIDX_PKEY_PARAM_EC_PUB_Y 191 -#define PIDX_PKEY_PARAM_EC_SEED 132 -#define PIDX_PKEY_PARAM_ENCODED_PUBLIC_KEY 192 -#define PIDX_PKEY_PARAM_ENGINE PIDX_ALG_PARAM_ENGINE -#define PIDX_PKEY_PARAM_FFC_COFACTOR 193 -#define PIDX_PKEY_PARAM_FFC_DIGEST PIDX_PKEY_PARAM_DIGEST -#define PIDX_PKEY_PARAM_FFC_DIGEST_PROPS PIDX_PKEY_PARAM_PROPERTIES -#define PIDX_PKEY_PARAM_FFC_G 194 -#define PIDX_PKEY_PARAM_FFC_GINDEX 195 -#define PIDX_PKEY_PARAM_FFC_H 196 -#define PIDX_PKEY_PARAM_FFC_P 130 -#define PIDX_PKEY_PARAM_FFC_PBITS 197 -#define PIDX_PKEY_PARAM_FFC_PCOUNTER 198 -#define PIDX_PKEY_PARAM_FFC_Q 199 -#define PIDX_PKEY_PARAM_FFC_QBITS 200 -#define PIDX_PKEY_PARAM_FFC_SEED 132 -#define PIDX_PKEY_PARAM_FFC_TYPE 134 -#define PIDX_PKEY_PARAM_FFC_VALIDATE_G 201 -#define PIDX_PKEY_PARAM_FFC_VALIDATE_LEGACY 202 -#define PIDX_PKEY_PARAM_FFC_VALIDATE_PQ 203 -#define PIDX_PKEY_PARAM_GROUP_NAME 204 -#define PIDX_PKEY_PARAM_IMPLICIT_REJECTION 5 -#define PIDX_PKEY_PARAM_MANDATORY_DIGEST 205 -#define PIDX_PKEY_PARAM_MASKGENFUNC 206 -#define PIDX_PKEY_PARAM_MAX_SIZE 207 -#define PIDX_PKEY_PARAM_MGF1_DIGEST 208 -#define PIDX_PKEY_PARAM_MGF1_PROPERTIES 209 -#define PIDX_PKEY_PARAM_PAD_MODE 210 -#define PIDX_PKEY_PARAM_PRIV_KEY 211 -#define PIDX_PKEY_PARAM_PROPERTIES PIDX_ALG_PARAM_PROPERTIES -#define PIDX_PKEY_PARAM_PUB_KEY 212 -#define PIDX_PKEY_PARAM_RSA_BITS PIDX_PKEY_PARAM_BITS -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT 213 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT1 214 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT2 215 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT3 216 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT4 217 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT5 218 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT6 219 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT7 220 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT8 221 -#define PIDX_PKEY_PARAM_RSA_COEFFICIENT9 222 -#define PIDX_PKEY_PARAM_RSA_D 223 -#define PIDX_PKEY_PARAM_RSA_DIGEST PIDX_PKEY_PARAM_DIGEST -#define PIDX_PKEY_PARAM_RSA_DIGEST_PROPS PIDX_PKEY_PARAM_PROPERTIES -#define PIDX_PKEY_PARAM_RSA_E 224 -#define PIDX_PKEY_PARAM_RSA_EXPONENT 225 -#define PIDX_PKEY_PARAM_RSA_EXPONENT1 226 -#define PIDX_PKEY_PARAM_RSA_EXPONENT10 227 -#define PIDX_PKEY_PARAM_RSA_EXPONENT2 228 -#define PIDX_PKEY_PARAM_RSA_EXPONENT3 229 -#define PIDX_PKEY_PARAM_RSA_EXPONENT4 230 -#define PIDX_PKEY_PARAM_RSA_EXPONENT5 231 -#define PIDX_PKEY_PARAM_RSA_EXPONENT6 232 -#define PIDX_PKEY_PARAM_RSA_EXPONENT7 233 -#define PIDX_PKEY_PARAM_RSA_EXPONENT8 234 -#define PIDX_PKEY_PARAM_RSA_EXPONENT9 235 -#define PIDX_PKEY_PARAM_RSA_FACTOR 236 -#define PIDX_PKEY_PARAM_RSA_FACTOR1 237 -#define PIDX_PKEY_PARAM_RSA_FACTOR10 238 -#define PIDX_PKEY_PARAM_RSA_FACTOR2 239 -#define PIDX_PKEY_PARAM_RSA_FACTOR3 240 -#define PIDX_PKEY_PARAM_RSA_FACTOR4 241 -#define PIDX_PKEY_PARAM_RSA_FACTOR5 242 -#define PIDX_PKEY_PARAM_RSA_FACTOR6 243 -#define PIDX_PKEY_PARAM_RSA_FACTOR7 244 -#define PIDX_PKEY_PARAM_RSA_FACTOR8 245 -#define PIDX_PKEY_PARAM_RSA_FACTOR9 246 -#define PIDX_PKEY_PARAM_RSA_MASKGENFUNC PIDX_PKEY_PARAM_MASKGENFUNC -#define PIDX_PKEY_PARAM_RSA_MGF1_DIGEST PIDX_PKEY_PARAM_MGF1_DIGEST -#define PIDX_PKEY_PARAM_RSA_N 129 -#define PIDX_PKEY_PARAM_RSA_PRIMES 247 -#define PIDX_PKEY_PARAM_RSA_PSS_SALTLEN 248 -#define PIDX_PKEY_PARAM_RSA_TEST_P1 249 -#define PIDX_PKEY_PARAM_RSA_TEST_P2 250 -#define PIDX_PKEY_PARAM_RSA_TEST_Q1 251 -#define PIDX_PKEY_PARAM_RSA_TEST_Q2 252 -#define PIDX_PKEY_PARAM_RSA_TEST_XP 253 -#define PIDX_PKEY_PARAM_RSA_TEST_XP1 254 -#define PIDX_PKEY_PARAM_RSA_TEST_XP2 255 -#define PIDX_PKEY_PARAM_RSA_TEST_XQ 256 -#define PIDX_PKEY_PARAM_RSA_TEST_XQ1 257 -#define PIDX_PKEY_PARAM_RSA_TEST_XQ2 258 -#define PIDX_PKEY_PARAM_SECURITY_BITS 259 -#define PIDX_PKEY_PARAM_USE_COFACTOR_ECDH PIDX_PKEY_PARAM_USE_COFACTOR_FLAG -#define PIDX_PKEY_PARAM_USE_COFACTOR_FLAG 260 -#define PIDX_PROV_PARAM_BUILDINFO 261 -#define PIDX_PROV_PARAM_CORE_MODULE_FILENAME 262 -#define PIDX_PROV_PARAM_CORE_PROV_NAME 263 -#define PIDX_PROV_PARAM_CORE_VERSION 264 -#define PIDX_PROV_PARAM_DRBG_TRUNC_DIGEST 265 -#define PIDX_PROV_PARAM_NAME 266 -#define PIDX_PROV_PARAM_SECURITY_CHECKS 267 -#define PIDX_PROV_PARAM_SELF_TEST_DESC 268 -#define PIDX_PROV_PARAM_SELF_TEST_PHASE 269 -#define PIDX_PROV_PARAM_SELF_TEST_TYPE 270 -#define PIDX_PROV_PARAM_STATUS 271 -#define PIDX_PROV_PARAM_TLS1_PRF_EMS_CHECK 272 -#define PIDX_PROV_PARAM_VERSION 108 -#define PIDX_RAND_PARAM_GENERATE 273 -#define PIDX_RAND_PARAM_MAX_REQUEST 274 -#define PIDX_RAND_PARAM_STATE 275 -#define PIDX_RAND_PARAM_STRENGTH 276 -#define PIDX_RAND_PARAM_TEST_ENTROPY 277 -#define PIDX_RAND_PARAM_TEST_NONCE 278 -#define PIDX_SIGNATURE_PARAM_ALGORITHM_ID 279 -#define PIDX_SIGNATURE_PARAM_CONTEXT_STRING 280 -#define PIDX_SIGNATURE_PARAM_DIGEST PIDX_PKEY_PARAM_DIGEST -#define PIDX_SIGNATURE_PARAM_DIGEST_SIZE PIDX_PKEY_PARAM_DIGEST_SIZE -#define PIDX_SIGNATURE_PARAM_INSTANCE 281 -#define PIDX_SIGNATURE_PARAM_KAT 282 -#define PIDX_SIGNATURE_PARAM_MGF1_DIGEST PIDX_PKEY_PARAM_MGF1_DIGEST -#define PIDX_SIGNATURE_PARAM_MGF1_PROPERTIES PIDX_PKEY_PARAM_MGF1_PROPERTIES -#define PIDX_SIGNATURE_PARAM_NONCE_TYPE 283 -#define PIDX_SIGNATURE_PARAM_PAD_MODE PIDX_PKEY_PARAM_PAD_MODE -#define PIDX_SIGNATURE_PARAM_PROPERTIES PIDX_PKEY_PARAM_PROPERTIES -#define PIDX_SIGNATURE_PARAM_PSS_SALTLEN 248 -#define PIDX_STORE_PARAM_ALIAS 284 -#define PIDX_STORE_PARAM_DIGEST 1 -#define PIDX_STORE_PARAM_EXPECT 285 -#define PIDX_STORE_PARAM_FINGERPRINT 286 -#define PIDX_STORE_PARAM_INPUT_TYPE 287 -#define PIDX_STORE_PARAM_ISSUER 266 -#define PIDX_STORE_PARAM_PROPERTIES 4 -#define PIDX_STORE_PARAM_SERIAL 288 -#define PIDX_STORE_PARAM_SUBJECT 289 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_names.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_names.h.in deleted file mode 100644 index f34db219..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_names.h.in +++ /dev/null @@ -1,18 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 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::paramnames qw(generate_internal_macros); --} - -int ossl_param_find_pidx(const char *s); - -/* Parameter name definitions - generated by util/perl/OpenSSL/paramnames.pm */ -{- generate_internal_macros(); -} diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/params.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/params.h deleted file mode 100644 index 3fbd0cf9..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/params.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 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 - */ - -#include -#include - -/* - * Extract the parameter into an allocated buffer. - * Any existing allocation in *out is cleared and freed. - * - * Returns 1 on success, 0 on failure and -1 if there are no matching params. - * - * *out and *out_len are guaranteed to be untouched if this function - * doesn't return success. - */ -int ossl_param_get1_octet_string(const OSSL_PARAM *params, const char *name, - unsigned char **out, size_t *out_len); -/* - * Concatenate all of the matching params together. - * *out will point to an allocated buffer on successful return. - * Any existing allocation in *out is cleared and freed. - * - * Passing 0 for maxsize means unlimited size output. - * - * Returns 1 on success, 0 on failure and -1 if there are no matching params. - * - * *out and *out_len are guaranteed to be untouched if this function - * doesn't return success. - */ -int ossl_param_get1_concat_octet_string(const OSSL_PARAM *params, const char *name, - unsigned char **out, size_t *out_len, - size_t maxsize); 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 deleted file mode 100644 index 54d997b0..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/passphrase.h +++ /dev/null @@ -1,122 +0,0 @@ -/* - * 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/priority_queue.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/priority_queue.h deleted file mode 100644 index 5be03bf1..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/priority_queue.h +++ /dev/null @@ -1,88 +0,0 @@ -/* - * 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_INTERNAL_PRIORITY_QUEUE_H -# define OSSL_INTERNAL_PRIORITY_QUEUE_H -# pragma once - -# include -# include - -# define PRIORITY_QUEUE_OF(type) OSSL_PRIORITY_QUEUE_ ## type - -# define DEFINE_PRIORITY_QUEUE_OF_INTERNAL(type, ctype) \ - typedef struct ossl_priority_queue_st_ ## type PRIORITY_QUEUE_OF(type); \ - static ossl_unused ossl_inline PRIORITY_QUEUE_OF(type) * \ - ossl_pqueue_##type##_new(int (*compare)(const ctype *, const ctype *)) \ - { \ - return (PRIORITY_QUEUE_OF(type) *)ossl_pqueue_new( \ - (int (*)(const void *, const void *))compare); \ - } \ - static ossl_unused ossl_inline void \ - ossl_pqueue_##type##_free(PRIORITY_QUEUE_OF(type) *pq) \ - { \ - ossl_pqueue_free((OSSL_PQUEUE *)pq); \ - } \ - static ossl_unused ossl_inline void \ - ossl_pqueue_##type##_pop_free(PRIORITY_QUEUE_OF(type) *pq, \ - void (*freefunc)(ctype *)) \ - { \ - ossl_pqueue_pop_free((OSSL_PQUEUE *)pq, (void (*)(void *))freefunc);\ - } \ - static ossl_unused ossl_inline int \ - ossl_pqueue_##type##_reserve(PRIORITY_QUEUE_OF(type) *pq, size_t n) \ - { \ - return ossl_pqueue_reserve((OSSL_PQUEUE *)pq, n); \ - } \ - static ossl_unused ossl_inline size_t \ - ossl_pqueue_##type##_num(const PRIORITY_QUEUE_OF(type) *pq) \ - { \ - return ossl_pqueue_num((OSSL_PQUEUE *)pq); \ - } \ - static ossl_unused ossl_inline int \ - ossl_pqueue_##type##_push(PRIORITY_QUEUE_OF(type) *pq, \ - ctype *data, size_t *elem) \ - { \ - return ossl_pqueue_push((OSSL_PQUEUE *)pq, (void *)data, elem); \ - } \ - static ossl_unused ossl_inline ctype * \ - ossl_pqueue_##type##_peek(const PRIORITY_QUEUE_OF(type) *pq) \ - { \ - return (type *)ossl_pqueue_peek((OSSL_PQUEUE *)pq); \ - } \ - static ossl_unused ossl_inline ctype * \ - ossl_pqueue_##type##_pop(PRIORITY_QUEUE_OF(type) *pq) \ - { \ - return (type *)ossl_pqueue_pop((OSSL_PQUEUE *)pq); \ - } \ - static ossl_unused ossl_inline ctype * \ - ossl_pqueue_##type##_remove(PRIORITY_QUEUE_OF(type) *pq, \ - size_t elem) \ - { \ - return (type *)ossl_pqueue_remove((OSSL_PQUEUE *)pq, elem); \ - } \ - struct ossl_priority_queue_st_ ## type - -# define DEFINE_PRIORITY_QUEUE_OF(type) \ - DEFINE_PRIORITY_QUEUE_OF_INTERNAL(type, type) - -typedef struct ossl_pqueue_st OSSL_PQUEUE; - -OSSL_PQUEUE *ossl_pqueue_new(int (*compare)(const void *, const void *)); -void ossl_pqueue_free(OSSL_PQUEUE *pq); -void ossl_pqueue_pop_free(OSSL_PQUEUE *pq, void (*freefunc)(void *)); -int ossl_pqueue_reserve(OSSL_PQUEUE *pq, size_t n); - -size_t ossl_pqueue_num(const OSSL_PQUEUE *pq); -int ossl_pqueue_push(OSSL_PQUEUE *pq, void *data, size_t *elem); -void *ossl_pqueue_peek(const OSSL_PQUEUE *pq); -void *ossl_pqueue_pop(OSSL_PQUEUE *pq); -void *ossl_pqueue_remove(OSSL_PQUEUE *pq, size_t elem); - -#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 deleted file mode 100644 index 3adff499..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/property.h +++ /dev/null @@ -1,99 +0,0 @@ -/* - * 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_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 deleted file mode 100644 index fbee53f1..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/propertyerr.h +++ /dev/null @@ -1,43 +0,0 @@ -/* - * 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 deleted file mode 100644 index ab41d643..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/provider.h +++ /dev/null @@ -1,119 +0,0 @@ -/* - * 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_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, - OSSL_PARAM *params, 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/quic_ackm.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_ackm.h deleted file mode 100644 index 03fc6088..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_ackm.h +++ /dev/null @@ -1,297 +0,0 @@ -/* - * 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_QUIC_ACKM_H -# define OSSL_QUIC_ACKM_H - -# include "internal/quic_statm.h" -# include "internal/quic_cc.h" -# include "internal/quic_types.h" -# include "internal/quic_wire.h" -# include "internal/time.h" -# include "internal/list.h" - -# ifndef OPENSSL_NO_QUIC - -typedef struct ossl_ackm_st OSSL_ACKM; - -OSSL_ACKM *ossl_ackm_new(OSSL_TIME (*now)(void *arg), - void *now_arg, - OSSL_STATM *statm, - const OSSL_CC_METHOD *cc_method, - OSSL_CC_DATA *cc_data); -void ossl_ackm_free(OSSL_ACKM *ackm); - -void ossl_ackm_set_loss_detection_deadline_callback(OSSL_ACKM *ackm, - void (*fn)(OSSL_TIME deadline, - void *arg), - void *arg); - -void ossl_ackm_set_ack_deadline_callback(OSSL_ACKM *ackm, - void (*fn)(OSSL_TIME deadline, - int pkt_space, - void *arg), - void *arg); - -/* - * Configures the RX-side maximum ACK delay. This is the maximum amount of time - * the peer is allowed to delay sending an ACK frame after receiving an - * ACK-eliciting packet. The peer communicates this value via a transport - * parameter and it must be provided to the ACKM. - */ -void ossl_ackm_set_rx_max_ack_delay(OSSL_ACKM *ackm, OSSL_TIME rx_max_ack_delay); - -/* - * Configures the TX-side maximum ACK delay. This is the maximum amount of time - * we are allowed to delay sending an ACK frame after receiving an ACK-eliciting - * packet. Note that this cannot be changed after a connection is established as - * it must be accurately reported in the transport parameters we send to our - * peer. - */ -void ossl_ackm_set_tx_max_ack_delay(OSSL_ACKM *ackm, OSSL_TIME tx_max_ack_delay); - -typedef struct ossl_ackm_tx_pkt_st OSSL_ACKM_TX_PKT; -struct ossl_ackm_tx_pkt_st { - /* The packet number of the transmitted packet. */ - QUIC_PN pkt_num; - - /* The number of bytes in the packet which was sent. */ - size_t num_bytes; - - /* The time at which the packet was sent. */ - OSSL_TIME time; - - /* - * If the packet being described by this structure contains an ACK frame, - * this must be set to the largest PN ACK'd by that frame. - * - * Otherwise, it should be set to QUIC_PN_INVALID. - * - * This is necessary to bound the number of PNs we have to keep track of on - * the RX side (RFC 9000 s. 13.2.4). It allows older PN tracking information - * on the RX side to be discarded. - */ - QUIC_PN largest_acked; - - /* - * One of the QUIC_PN_SPACE_* values. This qualifies the pkt_num field - * into a packet number space. - */ - unsigned int pkt_space :2; - - /* - * 1 if the packet is in flight. A packet is considered 'in flight' if it is - * counted for purposes of congestion control and 'bytes in flight' counts. - * Most packets are considered in flight. The only circumstance where a - * numbered packet is not considered in flight is if it contains only ACK - * frames (not even PADDING frames), as these frames can bypass CC. - */ - unsigned int is_inflight :1; - - /* - * 1 if the packet has one or more ACK-eliciting frames. - * Note that if this is set, is_inflight must be set. - */ - unsigned int is_ack_eliciting :1; - - /* 1 if the packet is a PTO probe. */ - unsigned int is_pto_probe :1; - - /* 1 if the packet is an MTU probe. */ - unsigned int is_mtu_probe :1; - - /* Callback called if frames in this packet are lost. arg is cb_arg. */ - void (*on_lost)(void *arg); - /* Callback called if frames in this packet are acked. arg is cb_arg. */ - void (*on_acked)(void *arg); - /* - * Callback called if frames in this packet are neither acked nor lost. arg - * is cb_arg. - */ - void (*on_discarded)(void *arg); - void *cb_arg; - - /* - * (Internal use fields; must be zero-initialized.) - * - * Keep a TX history list, anext is used to manifest - * a singly-linked list of newly-acknowledged packets, and lnext is used to - * manifest a singly-linked list of newly lost packets. - */ - OSSL_LIST_MEMBER(tx_history, OSSL_ACKM_TX_PKT); - - struct ossl_ackm_tx_pkt_st *anext; - struct ossl_ackm_tx_pkt_st *lnext; -}; - -int ossl_ackm_on_tx_packet(OSSL_ACKM *ackm, OSSL_ACKM_TX_PKT *pkt); -int ossl_ackm_on_rx_datagram(OSSL_ACKM *ackm, size_t num_bytes); - -# define OSSL_ACKM_ECN_NONE 0 -# define OSSL_ACKM_ECN_ECT1 1 -# define OSSL_ACKM_ECN_ECT0 2 -# define OSSL_ACKM_ECN_ECNCE 3 - -typedef struct ossl_ackm_rx_pkt_st { - /* The packet number of the received packet. */ - QUIC_PN pkt_num; - - /* The time at which the packet was received. */ - OSSL_TIME time; - - /* - * One of the QUIC_PN_SPACE_* values. This qualifies the pkt_num field - * into a packet number space. - */ - unsigned int pkt_space :2; - - /* 1 if the packet has one or more ACK-eliciting frames. */ - unsigned int is_ack_eliciting :1; - - /* - * One of the OSSL_ACKM_ECN_* values. This is the ECN labelling applied to - * the received packet. If unknown, use OSSL_ACKM_ECN_NONE. - */ - unsigned int ecn :2; -} OSSL_ACKM_RX_PKT; - -int ossl_ackm_on_rx_packet(OSSL_ACKM *ackm, const OSSL_ACKM_RX_PKT *pkt); - -int ossl_ackm_on_rx_ack_frame(OSSL_ACKM *ackm, const OSSL_QUIC_FRAME_ACK *ack, - int pkt_space, OSSL_TIME rx_time); - -/* - * Discards a PN space. This must be called for a PN space before freeing the - * ACKM if you want in-flight packets to have their discarded callbacks called. - * This should never be called in ordinary QUIC usage for the Application Data - * PN space, but it may be called for the Application Data PN space prior to - * freeing the ACKM to simplify teardown implementations. - */ -int ossl_ackm_on_pkt_space_discarded(OSSL_ACKM *ackm, int pkt_space); - -int ossl_ackm_on_handshake_confirmed(OSSL_ACKM *ackm); -int ossl_ackm_on_timeout(OSSL_ACKM *ackm); - -OSSL_TIME ossl_ackm_get_loss_detection_deadline(OSSL_ACKM *ackm); - -/* - * Generates an ACK frame, regardless of whether the ACK manager thinks - * one should currently be sent. - * - * This clears the flag returned by ossl_ackm_is_ack_desired and the deadline - * returned by ossl_ackm_get_ack_deadline. - */ -const OSSL_QUIC_FRAME_ACK *ossl_ackm_get_ack_frame(OSSL_ACKM *ackm, - int pkt_space); - -/* - * Returns the deadline after which an ACK frame should be generated by calling - * ossl_ackm_get_ack_frame, or OSSL_TIME_INFINITY if no deadline is currently - * applicable. If the deadline has already passed, this function may return that - * deadline, or may return OSSL_TIME_ZERO. - */ -OSSL_TIME ossl_ackm_get_ack_deadline(OSSL_ACKM *ackm, int pkt_space); - -/* - * Returns 1 if the ACK manager thinks an ACK frame ought to be generated and - * sent at this time. ossl_ackm_get_ack_frame will always provide an ACK frame - * whether or not this returns 1, so it is suggested that you call this function - * first to determine whether you need to generate an ACK frame. - * - * The return value of this function can change based on calls to - * ossl_ackm_on_rx_packet and based on the passage of time (see - * ossl_ackm_get_ack_deadline). - */ -int ossl_ackm_is_ack_desired(OSSL_ACKM *ackm, int pkt_space); - -/* - * Returns 1 if the given RX PN is 'processable'. A processable PN is one that - * is not either - * - * - duplicate, meaning that we have already been passed such a PN in a call - * to ossl_ackm_on_rx_packet; or - * - * - written off, meaning that the PN is so old we have stopped tracking state - * for it (meaning that we cannot tell whether it is a duplicate and cannot - * process it safely). - * - * This should be called for a packet before attempting to process its contents. - * Failure to do so may result in processing a duplicated packet in violation of - * the RFC. - * - * The return value of this function transitions from 1 to 0 for a given PN once - * that PN is passed to ossl_ackm_on_rx_packet, thus this function must be used - * before calling ossl_ackm_on_rx_packet. - */ -int ossl_ackm_is_rx_pn_processable(OSSL_ACKM *ackm, QUIC_PN pn, int pkt_space); - -typedef struct ossl_ackm_probe_info_st { - /* - * The following two probe request types are used only for anti-deadlock - * purposes in relation to the anti-amplification logic, by generating - * packets to buy ourselves more anti-amplification credit with the server - * until a client address is verified. Note that like all Initial packets, - * any Initial probes are padded. - * - * Note: The ACKM will only ever increase these by one at a time, - * as only one probe packet should be generated for these cases. - */ - uint32_t anti_deadlock_initial, anti_deadlock_handshake; - - /* - * Send an ACK-eliciting packet for each count here. - * - * Note: The ACKM may increase this by either one or two for each probe - * request, depending on how many probe packets it thinks should be - * generated. - */ - uint32_t pto[QUIC_PN_SPACE_NUM]; -} OSSL_ACKM_PROBE_INFO; - -/* - * Returns a pointer to a structure counting any pending probe requests which - * have been generated by the ACKM. The fields in the structure are incremented - * by one every time the ACKM wants another probe of the given type to be sent. - * If the ACKM thinks two packets should be generated for a probe, it will - * increment the field twice. - * - * It is permissible for the caller to decrement or zero these fields to keep - * track of when it has generated a probe as asked. The returned structure - * has the same lifetime as the ACKM. - * - * This function should be called after calling e.g. ossl_ackm_on_timeout - * to determine if any probe requests have been generated. - */ -OSSL_ACKM_PROBE_INFO *ossl_ackm_get0_probe_request(OSSL_ACKM *ackm); - -int ossl_ackm_get_largest_unacked(OSSL_ACKM *ackm, int pkt_space, QUIC_PN *pn); - -/* - * Forces the ACKM to consider a packet with the given PN in the given PN space - * as having been pseudo-lost. The main reason to use this is during a Retry, to - * force any resources sent in the first Initial packet to be resent. - * - * The lost callback is called for the packet, but the packet is NOT considered - * lost for congestion control purposes. Thus this is not exactly the same as a - * true loss situation. - */ -int ossl_ackm_mark_packet_pseudo_lost(OSSL_ACKM *ackm, - int pkt_space, QUIC_PN pn); - -/* - * Returns the PTO duration as currently calculated. This is a quantity of time. - * This duration is used in various parts of QUIC besides the ACKM. - */ -OSSL_TIME ossl_ackm_get_pto_duration(OSSL_ACKM *ackm); - -/* Returns the largest acked PN in the given PN space. */ -QUIC_PN ossl_ackm_get_largest_acked(OSSL_ACKM *ackm, int pkt_space); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_cc.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_cc.h deleted file mode 100644 index 60c710b0..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_cc.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * 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_QUIC_CC_H -# define OSSL_QUIC_CC_H - -#include "openssl/params.h" -#include "internal/time.h" - -# ifndef OPENSSL_NO_QUIC - -typedef struct ossl_cc_data_st OSSL_CC_DATA; - -typedef struct ossl_cc_ack_info_st { - /* The time the packet being acknowledged was originally sent. */ - OSSL_TIME tx_time; - - /* The size in bytes of the packet being acknowledged. */ - size_t tx_size; -} OSSL_CC_ACK_INFO; - -typedef struct ossl_cc_loss_info_st { - /* The time the packet being lost was originally sent. */ - OSSL_TIME tx_time; - - /* The size in bytes of the packet which has been determined lost. */ - size_t tx_size; -} OSSL_CC_LOSS_INFO; - -typedef struct ossl_cc_ecn_info_st { - /* - * The time at which the largest acked PN (in the incoming ACK frame) was - * sent. - */ - OSSL_TIME largest_acked_time; -} OSSL_CC_ECN_INFO; - -/* Parameter (read-write): Maximum datagram payload length in bytes. */ -#define OSSL_CC_OPTION_MAX_DGRAM_PAYLOAD_LEN "max_dgram_payload_len" - -/* Diagnostic (read-only): current congestion window size in bytes. */ -#define OSSL_CC_OPTION_CUR_CWND_SIZE "cur_cwnd_size" - -/* Diagnostic (read-only): minimum congestion window size in bytes. */ -#define OSSL_CC_OPTION_MIN_CWND_SIZE "min_cwnd_size" - -/* Diagnostic (read-only): current net bytes in flight. */ -#define OSSL_CC_OPTION_CUR_BYTES_IN_FLIGHT "bytes_in_flight" - -/* Diagnostic (read-only): method-specific state value. */ -#define OSSL_CC_OPTION_CUR_STATE "cur_state" - -/* - * Congestion control abstract interface. - * - * This interface is broadly based on the design described in RFC 9002. However, - * the demarcation between the ACKM and the congestion controller does not - * exactly match that delineated in the RFC 9002 pseudocode. Where aspects of - * the demarcation involve the congestion controller accessing internal state of - * the ACKM, the interface has been revised where possible to provide the - * information needed by the congestion controller and avoid needing to give the - * congestion controller access to the ACKM's internal data structures. - * - * Particular changes include: - * - * - In our implementation, it is the responsibility of the ACKM to determine - * if a loss event constitutes persistent congestion. - * - * - In our implementation, it is the responsibility of the ACKM to determine - * if the ECN-CE counter has increased. The congestion controller is simply - * informed when an ECN-CE event occurs. - * - * All of these changes are intended to avoid having a congestion controller - * have to access ACKM internal state. - */ -#define OSSL_CC_LOST_FLAG_PERSISTENT_CONGESTION (1U << 0) - -typedef struct ossl_cc_method_st { - /* - * Instantiation. - */ - OSSL_CC_DATA *(*new)(OSSL_TIME (*now_cb)(void *arg), - void *now_cb_arg); - - void (*free)(OSSL_CC_DATA *ccdata); - - /* - * Reset of state. - */ - void (*reset)(OSSL_CC_DATA *ccdata); - - /* - * Escape hatch for option configuration. - * - * params is an array of OSSL_PARAM structures. - * - * Returns 1 on success and 0 on failure. - */ - int (*set_input_params)(OSSL_CC_DATA *ccdata, - const OSSL_PARAM *params); - - /* - * (Re)bind output (diagnostic) information. - * - * params is an array of OSSL_PARAM structures used to output values. The - * storage locations associated with each parameter are stored internally - * and updated whenever the state of the congestion controller is updated; - * thus, the storage locations associated with the OSSL_PARAMs passed in the - * call to this function must remain valid until the congestion controller - * is freed or those parameters are unbound. A given parameter name may be - * bound to only one location at a time. The params structures themselves - * do not need to remain allocated after this call returns. - * - * Returns 1 on success and 0 on failure. - */ - int (*bind_diagnostics)(OSSL_CC_DATA *ccdata, - OSSL_PARAM *params); - - /* - * Unbind diagnostic information. The parameters with the given names are - * unbound, cancelling the effects of a previous call to bind_diagnostic(). - * params is an array of OSSL_PARAMs. The values of the parameters are - * ignored. If a parameter is already unbound, there is no effect for that - * parameter but other parameters are still unbound. - * - * Returns 1 on success or 0 on failure. - */ - int (*unbind_diagnostics)(OSSL_CC_DATA *ccdata, - OSSL_PARAM *params); - - /* - * Returns the amount of additional data (above and beyond the data - * currently in flight) which can be sent in bytes. Returns 0 if no more - * data can be sent at this time. The return value of this method - * can vary as time passes. - */ - uint64_t (*get_tx_allowance)(OSSL_CC_DATA *ccdata); - - /* - * Returns the time at which the return value of get_tx_allowance might be - * higher than its current value. This is not a guarantee and spurious - * wakeups are allowed. Returns ossl_time_infinite() if there is no current - * wakeup deadline. - */ - OSSL_TIME (*get_wakeup_deadline)(OSSL_CC_DATA *ccdata); - - /* - * The On Data Sent event. num_bytes should be the size of the packet in - * bytes (or the aggregate size of multiple packets which have just been - * sent). - */ - int (*on_data_sent)(OSSL_CC_DATA *ccdata, - uint64_t num_bytes); - - /* - * The On Data Acked event. See OSSL_CC_ACK_INFO structure for details - * of the information to be passed. - */ - int (*on_data_acked)(OSSL_CC_DATA *ccdata, - const OSSL_CC_ACK_INFO *info); - - /* - * The On Data Lost event. See OSSL_CC_LOSS_INFO structure for details - * of the information to be passed. - * - * Note: When the ACKM determines that a set of multiple packets has been - * lost, it is useful for a congestion control algorithm to be able to - * process this as a single loss event rather than multiple loss events. - * Thus, calling this function may cause the congestion controller to defer - * state updates under the assumption that subsequent calls to - * on_data_lost() representing further lost packets in the same loss event - * may be forthcoming. Always call on_data_lost_finished() after one or more - * calls to on_data_lost(). - */ - int (*on_data_lost)(OSSL_CC_DATA *ccdata, - const OSSL_CC_LOSS_INFO *info); - - /* - * To be called after a sequence of one or more on_data_lost() calls - * representing multiple packets in a single loss detection incident. - * - * Flags may be 0 or OSSL_CC_LOST_FLAG_PERSISTENT_CONGESTION. - */ - int (*on_data_lost_finished)(OSSL_CC_DATA *ccdata, uint32_t flags); - - /* - * For use when a PN space is invalidated or a packet must otherwise be - * 'undone' for congestion control purposes without acting as a loss signal. - * Only the size of the packet is needed. - */ - int (*on_data_invalidated)(OSSL_CC_DATA *ccdata, - uint64_t num_bytes); - - /* - * Called from the ACKM when detecting an increased ECN-CE value in an ACK - * frame. This indicates congestion. - * - * Note that this differs from the RFC's conceptual segregation of the loss - * detection and congestion controller functions, as in our implementation - * the ACKM is responsible for detecting increases to ECN-CE and simply - * tells the congestion controller when ECN-triggered congestion has - * occurred. This allows a slightly more efficient implementation and - * narrower interface between the ACKM and CC. - */ - int (*on_ecn)(OSSL_CC_DATA *ccdata, - const OSSL_CC_ECN_INFO *info); -} OSSL_CC_METHOD; - -extern const OSSL_CC_METHOD ossl_cc_dummy_method; -extern const OSSL_CC_METHOD ossl_cc_newreno_method; - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_cfq.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_cfq.h deleted file mode 100644 index 22c436dc..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_cfq.h +++ /dev/null @@ -1,154 +0,0 @@ -/* - * 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_QUIC_CFQ_H -# define OSSL_QUIC_CFQ_H - -# include -# include "internal/quic_types.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Control Frame Queue Item - * ============================= - * - * The CFQ item structure has a public and a private part. This structure - * documents the public part. - */ -typedef struct quic_cfq_item_st QUIC_CFQ_ITEM; - -struct quic_cfq_item_st { - /* - * These fields are not used by the CFQ, but are a convenience to assist the - * TXPIM in keeping a list of GCR control frames which were sent in a - * packet. They may be used for any purpose. - */ - QUIC_CFQ_ITEM *pkt_prev, *pkt_next; - - /* All other fields are private; use ossl_quic_cfq_item_* accessors. */ -}; - -# define QUIC_CFQ_STATE_NEW 0 -# define QUIC_CFQ_STATE_TX 1 - -/* If set, do not retransmit on loss */ -#define QUIC_CFQ_ITEM_FLAG_UNRELIABLE (1U << 0) - -/* Returns the frame type of a CFQ item. */ -uint64_t ossl_quic_cfq_item_get_frame_type(const QUIC_CFQ_ITEM *item); - -/* Returns a pointer to the encoded buffer of a CFQ item. */ -const unsigned char *ossl_quic_cfq_item_get_encoded(const QUIC_CFQ_ITEM *item); - -/* Returns the length of the encoded buffer in bytes. */ -size_t ossl_quic_cfq_item_get_encoded_len(const QUIC_CFQ_ITEM *item); - -/* Returns the CFQ item state, a QUIC_CFQ_STATE_* value. */ -int ossl_quic_cfq_item_get_state(const QUIC_CFQ_ITEM *item); - -/* Returns the PN space for the CFQ item. */ -uint32_t ossl_quic_cfq_item_get_pn_space(const QUIC_CFQ_ITEM *item); - -/* Returns 1 if this is an unreliable frame. */ -int ossl_quic_cfq_item_is_unreliable(const QUIC_CFQ_ITEM *item); - -/* - * QUIC Control Frame Queue - * ======================== - */ -typedef struct quic_cfq_st QUIC_CFQ; - -QUIC_CFQ *ossl_quic_cfq_new(void); -void ossl_quic_cfq_free(QUIC_CFQ *cfq); - -/* - * Input Side - * ---------- - */ - -/* - * Enqueue a frame to the CFQ. - * - * encoded points to the opaque encoded frame. - * - * free_cb is called by the CFQ when the buffer is no longer needed; - * free_cb_arg is an opaque value passed to free_cb. - * - * priority determines the relative ordering of control frames in a packet. - * Lower numerical values for priority mean that a frame should come earlier in - * a packet. pn_space is a QUIC_PN_SPACE_* value. - * - * On success, returns a QUIC_CFQ_ITEM pointer which acts as a handle to - * the queued frame. On failure, returns NULL. - * - * The frame is initially in the TX state, so there is no need to call - * ossl_quic_cfq_mark_tx() immediately after calling this function. - * - * The frame type is duplicated as the frame_type argument here, even though it - * is also encoded into the buffer. This allows the caller to determine the - * frame type if desired without having to decode the frame. - * - * flags is zero or more QUIC_CFQ_ITEM_FLAG values. - */ -typedef void (cfq_free_cb)(unsigned char *buf, size_t buf_len, void *arg); - -QUIC_CFQ_ITEM *ossl_quic_cfq_add_frame(QUIC_CFQ *cfq, - uint32_t priority, - uint32_t pn_space, - uint64_t frame_type, - uint32_t flags, - const unsigned char *encoded, - size_t encoded_len, - cfq_free_cb *free_cb, - void *free_cb_arg); - -/* - * Effects an immediate transition of the given CFQ item to the TX state. - */ -void ossl_quic_cfq_mark_tx(QUIC_CFQ *cfq, QUIC_CFQ_ITEM *item); - -/* - * Effects an immediate transition of the given CFQ item to the NEW state, - * allowing the frame to be retransmitted. If priority is not UINT32_MAX, - * the priority is changed to the given value. - */ -void ossl_quic_cfq_mark_lost(QUIC_CFQ *cfq, QUIC_CFQ_ITEM *item, - uint32_t priority); - -/* - * Releases a CFQ item. The item may be in either state (NEW or TX) prior to the - * call. The QUIC_CFQ_ITEM pointer must not be used following this call. - */ -void ossl_quic_cfq_release(QUIC_CFQ *cfq, QUIC_CFQ_ITEM *item); - -/* - * Output Side - * ----------- - */ - -/* - * Gets the highest priority CFQ item in the given PN space awaiting - * transmission. If there are none, returns NULL. - */ -QUIC_CFQ_ITEM *ossl_quic_cfq_get_priority_head(const QUIC_CFQ *cfq, - uint32_t pn_space); - -/* - * Given a CFQ item, gets the next CFQ item awaiting transmission in priority - * order in the given PN space. In other words, given the return value of - * ossl_quic_cfq_get_priority_head(), returns the next-lower priority item. - * Returns NULL if the given item is the last item in priority order. - */ -QUIC_CFQ_ITEM *ossl_quic_cfq_item_get_priority_next(const QUIC_CFQ_ITEM *item, - uint32_t pn_space); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_channel.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_channel.h deleted file mode 100644 index f46db063..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_channel.h +++ /dev/null @@ -1,429 +0,0 @@ -/* - * 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_QUIC_CHANNEL_H -# define OSSL_QUIC_CHANNEL_H - -# include -# include "internal/quic_types.h" -# include "internal/quic_stream_map.h" -# include "internal/quic_reactor.h" -# include "internal/quic_statm.h" -# include "internal/time.h" -# include "internal/thread.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Channel - * ============ - * - * A QUIC channel (QUIC_CHANNEL) is an object which binds together all of the - * various pieces of QUIC into a single top-level object, and handles connection - * state which is not specific to the client or server roles. In particular, it - * is strictly separated from the libssl front end I/O API personality layer, - * and is not an SSL object. - * - * The name QUIC_CHANNEL is chosen because QUIC_CONNECTION is already in use, - * but functionally these relate to the same thing (a QUIC connection). The use - * of two separate objects ensures clean separation between the API personality - * layer and common code for handling connections, and between the functionality - * which is specific to clients and which is specific to servers, and the - * functionality which is common to both. - * - * The API personality layer provides SSL objects (e.g. a QUIC_CONNECTION) which - * consume a QUIC channel and implement a specific public API. Things which are - * handled by the API personality layer include emulation of blocking semantics, - * handling of SSL object mode flags like non-partial write mode, etc. - * - * Where the QUIC_CHANNEL is used in a server role, there is one QUIC_CHANNEL - * per connection. In the future a QUIC Channel Manager will probably be defined - * to handle ownership of resources which are shared between connections (e.g. - * demuxers). Since we only use server-side functionality for dummy test servers - * for now, which only need to handle one connection at a time, this is not - * currently modelled. - * - * Synchronisation - * --------------- - * - * To support thread assisted mode, QUIC_CHANNEL can be used by multiple - * threads. **It is the caller's responsibility to ensure that the QUIC_CHANNEL - * is only accessed (whether via its methods or via direct access to its state) - * while the channel mutex is held**, except for methods explicitly marked as - * not requiring prior locking. This is an unchecked precondition. - * - * The instantiator of the channel is responsible for providing a suitable - * mutex which then serves as the channel mutex; see QUIC_CHANNEL_ARGS. - */ - -/* - * The function does not acquire the channel mutex and assumes it is already - * held by the calling thread. - * - * Any function tagged with this has the following precondition: - * - * Precondition: must hold channel mutex (unchecked) - */ -# define QUIC_NEEDS_LOCK - -/* - * The function acquires the channel mutex and releases it before returning in - * all circumstances. - * - * Any function tagged with this has the following precondition and - * postcondition: - * - * Precondition: must not hold channel mutex (unchecked) - * Postcondition: channel mutex is not held (by calling thread) - */ -# define QUIC_TAKES_LOCK - -/* - * The function acquires the channel mutex and leaves it acquired - * when returning success. - * - * Any function tagged with this has the following precondition and - * postcondition: - * - * Precondition: must not hold channel mutex (unchecked) - * Postcondition: channel mutex is held by calling thread - * or function returned failure - */ -# define QUIC_ACQUIRES_LOCK - -# define QUIC_TODO_LOCK - -# define QUIC_CHANNEL_STATE_IDLE 0 -# define QUIC_CHANNEL_STATE_ACTIVE 1 -# define QUIC_CHANNEL_STATE_TERMINATING_CLOSING 2 -# define QUIC_CHANNEL_STATE_TERMINATING_DRAINING 3 -# define QUIC_CHANNEL_STATE_TERMINATED 4 - -typedef struct quic_channel_args_st { - OSSL_LIB_CTX *libctx; - const char *propq; - int is_server; - SSL *tls; - - /* - * This must be a mutex the lifetime of which will exceed that of the - * channel. The instantiator of the channel is responsible for providing a - * mutex as this makes it easier to handle instantiation and teardown of - * channels in situations potentially requiring locking. - * - * Note that this is a MUTEX not a RWLOCK as it needs to be an OS mutex for - * compatibility with an OS's condition variable wait API, whereas RWLOCK - * may, depending on the build configuration, be implemented using an OS's - * mutex primitive or using its RW mutex primitive. - */ - CRYPTO_MUTEX *mutex; - - /* - * Optional function pointer to use to retrieve the current time. If NULL, - * ossl_time_now() is used. - */ - OSSL_TIME (*now_cb)(void *arg); - void *now_cb_arg; -} QUIC_CHANNEL_ARGS; - -typedef struct quic_channel_st QUIC_CHANNEL; - -/* Represents the cause for a connection's termination. */ -typedef struct quic_terminate_cause_st { - /* - * If we are in a TERMINATING or TERMINATED state, this is the error code - * associated with the error. This field is valid iff we are in the - * TERMINATING or TERMINATED states. - */ - uint64_t error_code; - - /* - * If terminate_app is set and this is nonzero, this is the frame type which - * caused the connection to be terminated. - */ - uint64_t frame_type; - - /* - * Optional reason string. When calling ossl_quic_channel_local_close, if a - * reason string pointer is passed, it is copied and stored inside - * QUIC_CHANNEL for the remainder of the lifetime of the channel object. - * Thus the string pointed to by this value, if non-NULL, is valid for the - * lifetime of the QUIC_CHANNEL object. - */ - const char *reason; - - /* - * Length of reason in bytes. The reason is supposed to contain a UTF-8 - * string but may be arbitrary data if the reason came from the network. - */ - size_t reason_len; - - /* Is this error code in the transport (0) or application (1) space? */ - unsigned int app : 1; - - /* - * If set, the cause of the termination is a received CONNECTION_CLOSE - * frame. Otherwise, we decided to terminate ourselves and sent a - * CONNECTION_CLOSE frame (regardless of whether the peer later also sends - * one). - */ - unsigned int remote : 1; -} QUIC_TERMINATE_CAUSE; - - -/* - * Create a new QUIC channel using the given arguments. The argument structure - * does not need to remain allocated. Returns NULL on failure. - */ -QUIC_CHANNEL *ossl_quic_channel_new(const QUIC_CHANNEL_ARGS *args); - -/* No-op if ch is NULL. */ -void ossl_quic_channel_free(QUIC_CHANNEL *ch); - -/* Set mutator callbacks for test framework support */ -int ossl_quic_channel_set_mutator(QUIC_CHANNEL *ch, - ossl_mutate_packet_cb mutatecb, - ossl_finish_mutate_cb finishmutatecb, - void *mutatearg); - -/* - * Connection Lifecycle Events - * =========================== - * - * Various events that can be raised on the channel by other parts of the QUIC - * implementation. Some of these are suitable for general use by any part of the - * code (e.g. ossl_quic_channel_raise_protocol_error), others are for very - * specific use by particular components only (e.g. - * ossl_quic_channel_on_handshake_confirmed). - */ - -/* - * To be used by a QUIC connection. Starts the channel. For a client-mode - * channel, this starts sending the first handshake layer message, etc. Can only - * be called in the idle state; successive calls are ignored. - */ -int ossl_quic_channel_start(QUIC_CHANNEL *ch); - -/* Start a locally initiated connection shutdown. */ -void ossl_quic_channel_local_close(QUIC_CHANNEL *ch, uint64_t app_error_code, - const char *app_reason); - -/* - * Called when the handshake is confirmed. - */ -int ossl_quic_channel_on_handshake_confirmed(QUIC_CHANNEL *ch); - -/* - * Raises a protocol error. This is intended to be the universal call suitable - * for handling of all peer-triggered protocol violations or errors detected by - * us. We specify a QUIC transport-scope error code and optional frame type - * which was responsible. If a frame type is not applicable, specify zero. The - * reason string is not currently handled, but should be a string of static - * storage duration. If the connection has already terminated due to a previous - * protocol error, this is a no-op; first error wins. - * - * Usually the ossl_quic_channel_raise_protocol_error() function should be used. - * The ossl_quic_channel_raise_protocol_error_loc() function can be used - * directly for passing through existing call site information from an existing - * error. - */ -void ossl_quic_channel_raise_protocol_error_loc(QUIC_CHANNEL *ch, - uint64_t error_code, - uint64_t frame_type, - const char *reason, - ERR_STATE *err_state, - const char *src_file, - int src_line, - const char *src_func); - -#define ossl_quic_channel_raise_protocol_error(ch, error_code, frame_type, reason) \ - ossl_quic_channel_raise_protocol_error_loc((ch), (error_code), \ - (frame_type), \ - (reason), \ - NULL, \ - OPENSSL_FILE, \ - OPENSSL_LINE, \ - OPENSSL_FUNC) - -#define ossl_quic_channel_raise_protocol_error_state(ch, error_code, frame_type, reason, state) \ - ossl_quic_channel_raise_protocol_error_loc((ch), (error_code), \ - (frame_type), \ - (reason), \ - (state), \ - OPENSSL_FILE, \ - OPENSSL_LINE, \ - OPENSSL_FUNC) - - -/* - * Returns 1 if permanent net error was detected on the QUIC_CHANNEL, - * 0 otherwise. - */ -int ossl_quic_channel_net_error(QUIC_CHANNEL *ch); - -/* Restore saved error state (best effort) */ -void ossl_quic_channel_restore_err_state(QUIC_CHANNEL *ch); - -/* For RXDP use. */ -void ossl_quic_channel_on_remote_conn_close(QUIC_CHANNEL *ch, - OSSL_QUIC_FRAME_CONN_CLOSE *f); -void ossl_quic_channel_on_new_conn_id(QUIC_CHANNEL *ch, - OSSL_QUIC_FRAME_NEW_CONN_ID *f); - -/* - * Queries and Accessors - * ===================== - */ - -/* Gets the reactor which can be used to tick/poll on the channel. */ -QUIC_REACTOR *ossl_quic_channel_get_reactor(QUIC_CHANNEL *ch); - -/* Gets the QSM used with the channel. */ -QUIC_STREAM_MAP *ossl_quic_channel_get_qsm(QUIC_CHANNEL *ch); - -/* Gets the statistics manager used with the channel. */ -OSSL_STATM *ossl_quic_channel_get_statm(QUIC_CHANNEL *ch); - -/* - * Gets/sets the current peer address. Generally this should be used before - * starting a channel in client mode. - */ -int ossl_quic_channel_get_peer_addr(QUIC_CHANNEL *ch, BIO_ADDR *peer_addr); -int ossl_quic_channel_set_peer_addr(QUIC_CHANNEL *ch, const BIO_ADDR *peer_addr); - -/* Gets/sets the underlying network read and write BIOs. */ -BIO *ossl_quic_channel_get_net_rbio(QUIC_CHANNEL *ch); -BIO *ossl_quic_channel_get_net_wbio(QUIC_CHANNEL *ch); -int ossl_quic_channel_set_net_rbio(QUIC_CHANNEL *ch, BIO *net_rbio); -int ossl_quic_channel_set_net_wbio(QUIC_CHANNEL *ch, BIO *net_wbio); - -/* - * Re-poll the network BIOs already set to determine if their support - * for polling has changed. - */ -int ossl_quic_channel_update_poll_descriptors(QUIC_CHANNEL *ch); - -/* - * Returns an existing stream by stream ID. Returns NULL if the stream does not - * exist. - */ -QUIC_STREAM *ossl_quic_channel_get_stream_by_id(QUIC_CHANNEL *ch, - uint64_t stream_id); - -/* Returns 1 if channel is terminating or terminated. */ -int ossl_quic_channel_is_term_any(const QUIC_CHANNEL *ch); -const QUIC_TERMINATE_CAUSE * -ossl_quic_channel_get_terminate_cause(const QUIC_CHANNEL *ch); -int ossl_quic_channel_is_closing(const QUIC_CHANNEL *ch); -int ossl_quic_channel_is_terminated(const QUIC_CHANNEL *ch); -int ossl_quic_channel_is_active(const QUIC_CHANNEL *ch); -int ossl_quic_channel_is_handshake_complete(const QUIC_CHANNEL *ch); -int ossl_quic_channel_is_handshake_confirmed(const QUIC_CHANNEL *ch); - -QUIC_DEMUX *ossl_quic_channel_get0_demux(QUIC_CHANNEL *ch); - -SSL *ossl_quic_channel_get0_ssl(QUIC_CHANNEL *ch); - -/* - * Retrieves a pointer to the channel mutex which was provided at the time the - * channel was instantiated. In order to allow locks to be acquired and released - * with the correct granularity, it is the caller's responsibility to ensure - * this lock is held for write while calling any QUIC_CHANNEL method, except for - * methods explicitly designed otherwise. - * - * This method is thread safe and does not require prior locking. It can also be - * called while the lock is already held. Note that this is simply a convenience - * function to access the mutex which was passed to the channel at instantiation - * time; it does not belong to the channel but rather is presumed to belong to - * the owner of the channel. - */ -CRYPTO_MUTEX *ossl_quic_channel_get_mutex(QUIC_CHANNEL *ch); - -/* - * Creates a new locally-initiated stream in the stream mapper, choosing an - * appropriate stream ID. If is_uni is 1, creates a unidirectional stream, else - * creates a bidirectional stream. Returns NULL on failure. - */ -QUIC_STREAM *ossl_quic_channel_new_stream_local(QUIC_CHANNEL *ch, int is_uni); - -/* - * Creates a new remotely-initiated stream in the stream mapper. The stream ID - * is used to confirm the initiator and determine the stream type. The stream is - * automatically added to the QSM's accept queue. A pointer to the stream is - * also returned. Returns NULL on failure. - */ -QUIC_STREAM *ossl_quic_channel_new_stream_remote(QUIC_CHANNEL *ch, - uint64_t stream_id); - -/* - * Configures incoming stream auto-reject. If enabled, incoming streams have - * both their sending and receiving parts automatically rejected using - * STOP_SENDING and STREAM_RESET frames. aec is the application error - * code to be used for those frames. - */ -void ossl_quic_channel_set_incoming_stream_auto_reject(QUIC_CHANNEL *ch, - int enable, - uint64_t aec); - -/* - * Causes the channel to reject the sending and receiving parts of a stream, - * as though autorejected. Can be used if a stream has already been - * accepted. - */ -void ossl_quic_channel_reject_stream(QUIC_CHANNEL *ch, QUIC_STREAM *qs); - -/* Replace local connection ID in TXP and DEMUX for testing purposes. */ -int ossl_quic_channel_replace_local_cid(QUIC_CHANNEL *ch, - const QUIC_CONN_ID *conn_id); - -/* Setters for the msg_callback and msg_callback_arg */ -void ossl_quic_channel_set_msg_callback(QUIC_CHANNEL *ch, - ossl_msg_cb msg_callback, - SSL *msg_callback_ssl); -void ossl_quic_channel_set_msg_callback_arg(QUIC_CHANNEL *ch, - void *msg_callback_arg); - -/* Testing use only - sets a TXKU threshold packet count override value. */ -void ossl_quic_channel_set_txku_threshold_override(QUIC_CHANNEL *ch, - uint64_t tx_pkt_threshold); - -/* Testing use only - gets current 1-RTT key epochs for QTX and QRX. */ -uint64_t ossl_quic_channel_get_tx_key_epoch(QUIC_CHANNEL *ch); -uint64_t ossl_quic_channel_get_rx_key_epoch(QUIC_CHANNEL *ch); - -/* Artificially trigger a spontaneous TXKU if possible. */ -int ossl_quic_channel_trigger_txku(QUIC_CHANNEL *ch); -int ossl_quic_channel_has_pending(const QUIC_CHANNEL *ch); - -/* Force transmission of an ACK-eliciting packet. */ -int ossl_quic_channel_ping(QUIC_CHANNEL *ch); - -/* For testing use. While enabled, ticking is not performed. */ -void ossl_quic_channel_set_inhibit_tick(QUIC_CHANNEL *ch, int inhibit); - -/* - * These queries exist for diagnostic purposes only. They may roll over. - * Do not rely on them for non-testing purposes. - */ -uint16_t ossl_quic_channel_get_diag_num_rx_ack(QUIC_CHANNEL *ch); - -/* - * Diagnostic use only. Gets the current local CID. - */ -void ossl_quic_channel_get_diag_local_cid(QUIC_CHANNEL *ch, QUIC_CONN_ID *cid); - -/* - * Returns 1 if stream count flow control allows us to create a new - * locally-initiated stream. - */ -int ossl_quic_channel_is_new_local_stream_admissible(QUIC_CHANNEL *ch, int is_uni); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_demux.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_demux.h deleted file mode 100644 index 444249e7..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_demux.h +++ /dev/null @@ -1,364 +0,0 @@ -/* - * 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_QUIC_DEMUX_H -# define OSSL_QUIC_DEMUX_H - -# include -# include "internal/quic_types.h" -# include "internal/bio_addr.h" -# include "internal/time.h" -# include "internal/list.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Demuxer - * ============ - * - * The QUIC connection demuxer is the entity responsible for receiving datagrams - * from the network via a datagram BIO. It parses packet headers to determine - * each packet's destination connection ID (DCID) and hands off processing of - * the packet to the correct QUIC Record Layer (QRL)'s RX side (known as the - * QRX). - * - * A QRX is instantiated per QUIC connection and contains the cryptographic - * resources needed to decrypt QUIC packets for that connection. Received - * datagrams are passed from the demuxer to the QRX via a callback registered - * for a specific DCID by the QRX; thus the demuxer has no specific knowledge of - * the QRX and is not coupled to it. - * - * A connection may have multiple connection IDs associated with it; a QRX - * handles this simply by registering multiple connection IDs with the demuxer - * via multiple register calls. - * - * URX Queue - * --------- - * - * Since the demuxer must handle the initial reception of datagrams from the OS, - * RX queue management for new, unprocessed datagrams is also handled by the - * demuxer. - * - * The demuxer maintains a queue of Unprocessed RX Entries (URXEs), which store - * unprocessed (i.e., encrypted, unvalidated) data received from the network. - * The URXE queue is designed to allow multiple datagrams to be received in a - * single call to BIO_recvmmsg, where supported. - * - * One URXE is used per received datagram. Each datagram may contain multiple - * packets, however, this is not the demuxer's concern. QUIC prohibits different - * packets in the same datagram from containing different DCIDs; the demuxer - * only considers the DCID of the first packet in a datagram when deciding how - * to route a received datagram, and it is the responsibility of the QRX to - * enforce this rule. Packets other than the first packet in a datagram are not - * examined by the demuxer, and the demuxer does not perform validation of - * packet headers other than to the minimum extent necessary to extract the - * DCID; further parsing and validation of packet headers is the responsibility - * of the QRX. - * - * Rather than defining an opaque interface, the URXE structure internals - * are exposed. Since the demuxer is only exposed to other parts of the QUIC - * implementation internals, this poses no problem, and has a number of - * advantages: - * - * - Fields in the URXE can be allocated to support requirements in other - * components, like the QRX, which would otherwise have to allocate extra - * memory corresponding to each URXE. - * - * - Other components, like the QRX, can keep the URXE in queues of its own - * when it is not being managed by the demuxer. - * - * URX Queue Structure - * ------------------- - * - * The URXE queue is maintained as a simple doubly-linked list. URXE entries are - * moved between different lists in their lifecycle (for example, from a free - * list to a pending list and vice versa). The buffer into which datagrams are - * received immediately follows this URXE header structure and is part of the - * same allocation. - */ - -typedef struct quic_urxe_st QUIC_URXE; - -/* Maximum number of packets we allow to exist in one datagram. */ -#define QUIC_MAX_PKT_PER_URXE (sizeof(uint64_t) * 8) - -struct quic_urxe_st { - OSSL_LIST_MEMBER(urxe, QUIC_URXE); - - /* - * The URXE data starts after this structure so we don't need a pointer. - * data_len stores the current length (i.e., the length of the received - * datagram) and alloc_len stores the allocation length. The URXE will be - * reallocated if we need a larger allocation than is available, though this - * should not be common as we will have a good idea of worst-case MTUs up - * front. - */ - size_t data_len, alloc_len; - - /* - * Bitfields per packet. processed indicates the packet has been processed - * and must not be processed again, hpr_removed indicates header protection - * has already been removed. Used by QRX only; not used by the demuxer. - */ - uint64_t processed, hpr_removed; - - /* - * Address of peer we received the datagram from, and the local interface - * address we received it on. If local address support is not enabled, local - * is zeroed. - */ - BIO_ADDR peer, local; - - /* - * Time at which datagram was received (or ossl_time_zero()) if a now - * function was not provided). - */ - OSSL_TIME time; - - /* - * Used by the QRX to mark whether a datagram has been deferred. Used by the - * QRX only; not used by the demuxer. - */ - char deferred; - - /* - * Used by the DEMUX to track if a URXE has been handed out. Used primarily - * for debugging purposes. - */ - char demux_state; -}; - -/* Accessors for URXE buffer. */ -static ossl_unused ossl_inline unsigned char * -ossl_quic_urxe_data(const QUIC_URXE *e) -{ - return (unsigned char *)&e[1]; -} - -static ossl_unused ossl_inline unsigned char * -ossl_quic_urxe_data_end(const QUIC_URXE *e) -{ - return ossl_quic_urxe_data(e) + e->data_len; -} - -/* List structure tracking a queue of URXEs. */ -DEFINE_LIST_OF(urxe, QUIC_URXE); -typedef OSSL_LIST(urxe) QUIC_URXE_LIST; - -/* - * List management helpers. These are used by the demuxer but can also be used - * by users of the demuxer to manage URXEs. - */ -void ossl_quic_urxe_remove(QUIC_URXE_LIST *l, QUIC_URXE *e); -void ossl_quic_urxe_insert_head(QUIC_URXE_LIST *l, QUIC_URXE *e); -void ossl_quic_urxe_insert_tail(QUIC_URXE_LIST *l, QUIC_URXE *e); - -/* Opaque type representing a demuxer. */ -typedef struct quic_demux_st QUIC_DEMUX; - -/* - * Called when a datagram is received for a given connection ID. - * - * e is a URXE containing the datagram payload. It is permissible for the callee - * to mutate this buffer; once the demuxer calls this callback, it will never - * read the buffer again. - * - * The callee must arrange for ossl_quic_demux_release_urxe or - * ossl_quic_demux_reinject_urxe to be called on the URXE at some point in the - * future (this need not be before the callback returns). - * - * At the time the callback is made, the URXE will not be in any queue, - * therefore the callee can use the prev and next fields as it wishes. - */ -typedef void (ossl_quic_demux_cb_fn)(QUIC_URXE *e, void *arg); - -/* - * Called when a datagram is received. - * Returns 1 if the datagram ends with a stateless reset token and - * 0 if not. - */ -typedef int (ossl_quic_stateless_reset_cb_fn)(const unsigned char *data, - size_t data_len, void *arg); - -/* - * Creates a new demuxer. The given BIO is used to receive datagrams from the - * network using BIO_recvmmsg. short_conn_id_len is the length of destination - * connection IDs used in RX'd packets; it must have the same value for all - * connections used on a socket. default_urxe_alloc_len is the buffer size to - * receive datagrams into; it should be a value large enough to contain any - * received datagram according to local MTUs, etc. - * - * now is an optional function used to determine the time a datagram was - * received. now_arg is an opaque argument passed to the function. If now is - * NULL, ossl_time_zero() is used as the datagram reception time. - */ -QUIC_DEMUX *ossl_quic_demux_new(BIO *net_bio, - size_t short_conn_id_len, - OSSL_TIME (*now)(void *arg), - void *now_arg); - -/* - * Destroy a demuxer. All URXEs must have been released back to the demuxer - * before calling this. No-op if demux is NULL. - */ -void ossl_quic_demux_free(QUIC_DEMUX *demux); - -/* - * Changes the BIO which the demuxer reads from. This also sets the MTU if the - * BIO supports querying the MTU. - */ -void ossl_quic_demux_set_bio(QUIC_DEMUX *demux, BIO *net_bio); - -/* - * Changes the MTU in bytes we use to receive datagrams. - */ -int ossl_quic_demux_set_mtu(QUIC_DEMUX *demux, unsigned int mtu); - -/* - * Register a datagram handler callback for a connection ID. - * - * ossl_quic_demux_pump will call the specified function if it receives a datagram - * the first packet of which has the specified destination connection ID. - * - * It is assumed all packets in a datagram have the same destination connection - * ID (as QUIC mandates this), but it is the user's responsibility to check for - * this and reject subsequent packets in a datagram that violate this rule. - * - * dst_conn_id is a destination connection ID; it is copied and need not remain - * valid after this function returns. - * - * cb_arg is passed to cb when it is called. For information on the callback, - * see its typedef above. - * - * Only one handler can be set for a given connection ID. If a handler is - * already set for the given connection ID, returns 0. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_demux_register(QUIC_DEMUX *demux, - const QUIC_CONN_ID *dst_conn_id, - ossl_quic_demux_cb_fn *cb, - void *cb_arg); - -/* - * Unregisters any datagram handler callback set for the given connection ID. - * Fails if no handler is registered for the given connection ID. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_demux_unregister(QUIC_DEMUX *demux, - const QUIC_CONN_ID *dst_conn_id); - -/* - * Unregisters any datagram handler callback from all connection IDs it is used - * for. cb and cb_arg must both match the values passed to - * ossl_quic_demux_register. - */ -void ossl_quic_demux_unregister_by_cb(QUIC_DEMUX *demux, - ossl_quic_demux_cb_fn *cb, - void *cb_arg); - -/* - * Set the default packet handler. This is used for incoming packets which don't - * match a registered DCID. This is only needed for servers. If a default packet - * handler is not set, a packet which doesn't match a registered DCID is - * silently dropped. A default packet handler may be unset by passing NULL. - * - * The handler is responsible for ensuring that ossl_quic_demux_reinject_urxe or - * ossl_quic_demux_release_urxe is called on the passed packet at some point in - * the future, which may or may not be before the handler returns. - */ -void ossl_quic_demux_set_default_handler(QUIC_DEMUX *demux, - ossl_quic_demux_cb_fn *cb, - void *cb_arg); - -/* - * Sets a callback for stateless reset processing. - * - * If set, this callback is called for datagrams for which we cannot identify - * a CID. This function should return 1 if there is a stateless reset token - * present and 0 if not. If there is a token present, the connection should - * also be reset. - */ -void ossl_quic_demux_set_stateless_reset_handler( - QUIC_DEMUX *demux, - ossl_quic_stateless_reset_cb_fn *cb, void *cb_arg); - -/* - * Releases a URXE back to the demuxer. No reference must be made to the URXE or - * its buffer after calling this function. The URXE must not be in any queue; - * that is, its prev and next pointers must be NULL. - */ -void ossl_quic_demux_release_urxe(QUIC_DEMUX *demux, - QUIC_URXE *e); - -/* - * Reinjects a URXE which was issued to a registered DCID callback or the - * default packet handler callback back into the pending queue. This is useful - * when a packet has been handled by the default packet handler callback such - * that a DCID has now been registered and can be dispatched normally by DCID. - * Once this has been called, the caller must not touch the URXE anymore and - * must not also call ossl_quic_demux_release_urxe(). - * - * The URXE is reinjected at the head of the queue, so it will be reprocessed - * immediately. - */ -void ossl_quic_demux_reinject_urxe(QUIC_DEMUX *demux, - QUIC_URXE *e); - -/* - * Process any unprocessed RX'd datagrams, by calling registered callbacks by - * connection ID, reading more datagrams from the BIO if necessary. - * - * Returns one of the following values: - * - * QUIC_DEMUX_PUMP_RES_OK - * At least one incoming datagram was processed. - * - * QUIC_DEMUX_PUMP_RES_TRANSIENT_FAIL - * No more incoming datagrams are currently available. - * Call again later. - * - * QUIC_DEMUX_PUMP_RES_PERMANENT_FAIL - * Either the network read BIO has failed in a non-transient fashion, or - * the QUIC implementation has encountered an internal state, assertion - * or allocation error. The caller should tear down the connection - * similarly to in the case of a protocol violation. - * - */ -#define QUIC_DEMUX_PUMP_RES_OK 1 -#define QUIC_DEMUX_PUMP_RES_TRANSIENT_FAIL (-1) -#define QUIC_DEMUX_PUMP_RES_PERMANENT_FAIL (-2) -#define QUIC_DEMUX_PUMP_RES_STATELESS_RESET (-3) - -int ossl_quic_demux_pump(QUIC_DEMUX *demux); - -/* - * Artificially inject a packet into the demuxer for testing purposes. The - * buffer must not exceed the URXE size being used by the demuxer. - * - * If peer or local are NULL, their respective fields are zeroed in the injected - * URXE. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_demux_inject(QUIC_DEMUX *demux, - const unsigned char *buf, - size_t buf_len, - const BIO_ADDR *peer, - const BIO_ADDR *local); - -/* - * Returns 1 if there are any pending URXEs. - */ -int ossl_quic_demux_has_pending(const QUIC_DEMUX *demux); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_error.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_error.h deleted file mode 100644 index ae195a5f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_error.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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_QUIC_ERROR_H -# define OSSL_QUIC_ERROR_H - -# include - -# ifndef OPENSSL_NO_QUIC - -/* RFC 9000 Section 20.1 */ -# define QUIC_ERR_NO_ERROR 0x00 -# define QUIC_ERR_INTERNAL_ERROR 0x01 -# define QUIC_ERR_CONNECTION_REFUSED 0x02 -# define QUIC_ERR_FLOW_CONTROL_ERROR 0x03 -# define QUIC_ERR_STREAM_LIMIT_ERROR 0x04 -# define QUIC_ERR_STREAM_STATE_ERROR 0x05 -# define QUIC_ERR_FINAL_SIZE_ERROR 0x06 -# define QUIC_ERR_FRAME_ENCODING_ERROR 0x07 -# define QUIC_ERR_TRANSPORT_PARAMETER_ERROR 0x08 -# define QUIC_ERR_CONNECTION_ID_LIMIT_ERROR 0x09 -# define QUIC_ERR_PROTOCOL_VIOLATION 0x0A -# define QUIC_ERR_INVALID_TOKEN 0x0B -# define QUIC_ERR_APPLICATION_ERROR 0x0C -# define QUIC_ERR_CRYPTO_BUFFER_EXCEEDED 0x0D -# define QUIC_ERR_KEY_UPDATE_ERROR 0x0E -# define QUIC_ERR_AEAD_LIMIT_REACHED 0x0F -# define QUIC_ERR_NO_VIABLE_PATH 0x10 - -/* Inclusive range for handshake-specific errors. */ -# define QUIC_ERR_CRYPTO_ERR_BEGIN 0x0100 -# define QUIC_ERR_CRYPTO_ERR_END 0x01FF - -# define QUIC_ERR_CRYPTO_ERR(X) \ - (QUIC_ERR_CRYPTO_ERR_BEGIN + (X)) - -# define QUIC_ERR_CRYPTO_UNEXPECTED_MESSAGE \ - QUIC_ERR_CRYPTO_ERR(SSL3_AD_UNEXPECTED_MESSAGE) - -# define QUIC_ERR_CRYPTO_MISSING_EXT \ - QUIC_ERR_CRYPTO_ERR(TLS13_AD_MISSING_EXTENSION) - -# define QUIC_ERR_CRYPTO_NO_APP_PROTO \ - QUIC_ERR_CRYPTO_ERR(TLS1_AD_NO_APPLICATION_PROTOCOL) - -const char *ossl_quic_err_to_string(uint64_t error_code); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_fc.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_fc.h deleted file mode 100644 index 49b448a3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_fc.h +++ /dev/null @@ -1,277 +0,0 @@ -/* - * 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_QUIC_FC_H -# define OSSL_QUIC_FC_H - -# include -# include "internal/time.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * TX Flow Controller (TXFC) - * ========================= - * - * For discussion, see doc/designs/quic-design/quic-fc.md. - */ -typedef struct quic_txfc_st QUIC_TXFC; - -struct quic_txfc_st { - QUIC_TXFC *parent; /* stream-level iff non-NULL */ - uint64_t swm, cwm; - char has_become_blocked; -}; - -/* - * Initialises a TX flow controller. conn_txfc should be non-NULL and point to - * the connection-level flow controller if the TXFC is for stream-level flow - * control, and NULL otherwise. - */ -int ossl_quic_txfc_init(QUIC_TXFC *txfc, QUIC_TXFC *conn_txfc); - -/* - * Gets the parent (i.e., connection-level) TX flow controller. Returns NULL if - * called on a connection-level TX flow controller. - */ -QUIC_TXFC *ossl_quic_txfc_get_parent(QUIC_TXFC *txfc); - -/* - * Bump the credit watermark (CWM) value. This is the 'On TX Window Updated' - * operation. This function is a no-op if it has already been called with an - * equal or higher CWM value. - * - * It returns 1 iff the call resulted in the CWM being bumped and 0 if it was - * not increased because it has already been called with an equal or higher CWM - * value. This is not an error per se but may indicate a local programming error - * or a protocol error in a remote peer. - */ -int ossl_quic_txfc_bump_cwm(QUIC_TXFC *txfc, uint64_t cwm); - -/* - * Get the number of bytes by which we are in credit. This is the number of - * controlled bytes we are allowed to send. (Thus if this function returns 0, we - * are currently blocked.) - * - * If called on a stream-level TXFC, ossl_quic_txfc_get_credit is called on - * the connection-level TXFC as well, and the lesser of the two values is - * returned. The consumed value is the amount already consumed on the connection - * level TXFC. - */ -uint64_t ossl_quic_txfc_get_credit(QUIC_TXFC *txfc, uint64_t consumed); - -/* - * Like ossl_quic_txfc_get_credit(), but when called on a stream-level TXFC, - * retrieves only the stream-level credit value and does not clamp it based on - * connection-level flow control. Any credit value is reduced by the consumed - * amount. - */ -uint64_t ossl_quic_txfc_get_credit_local(QUIC_TXFC *txfc, uint64_t consumed); - -/* - * Consume num_bytes of credit. This is the 'On TX' operation. This should be - * called when we transmit any controlled bytes. Calling this with an argument - * of 0 is a no-op. - * - * We must never transmit more controlled bytes than we are in credit for (see - * the return value of ossl_quic_txfc_get_credit()). If you call this function - * with num_bytes greater than our current credit, this function consumes the - * remainder of the credit and returns 0. This indicates a serious programming - * error on the caller's part. Otherwise, the function returns 1. - * - * If called on a stream-level TXFC, ossl_quic_txfc_consume_credit() is called - * on the connection-level TXFC also. If the call to that function on the - * connection-level TXFC returns zero, this function will also return zero. - */ -int ossl_quic_txfc_consume_credit(QUIC_TXFC *txfc, uint64_t num_bytes); - -/* - * Like ossl_quic_txfc_consume_credit(), but when called on a stream-level TXFC, - * consumes only from the stream-level credit and does not inform the - * connection-level TXFC. - */ -int ossl_quic_txfc_consume_credit_local(QUIC_TXFC *txfc, uint64_t num_bytes); - -/* - * This flag is provided for convenience. A caller is not required to use it. It - * is a boolean flag set whenever our credit drops to zero. If clear is 1, the - * flag is cleared. The old value of the flag is returned. Callers may use this - * to determine if they need to send a DATA_BLOCKED or STREAM_DATA_BLOCKED - * frame, which should contain the value returned by ossl_quic_txfc_get_cwm(). - */ -int ossl_quic_txfc_has_become_blocked(QUIC_TXFC *txfc, int clear); - -/* - * Get the current CWM value. This is mainly only needed when generating a - * DATA_BLOCKED or STREAM_DATA_BLOCKED frame, or for diagnostic purposes. - */ -uint64_t ossl_quic_txfc_get_cwm(QUIC_TXFC *txfc); - -/* - * Get the current spent watermark (SWM) value. This is purely for diagnostic - * use and should not be needed in normal circumstances. - */ -uint64_t ossl_quic_txfc_get_swm(QUIC_TXFC *txfc); - -/* - * RX Flow Controller (RXFC) - * ========================= - */ -typedef struct quic_rxfc_st QUIC_RXFC; - -struct quic_rxfc_st { - /* - * swm is the sent/received watermark, which tracks how much we have - * received from the peer. rwm is the retired watermark, which tracks how - * much has been passed to the application. esrwm is the rwm value at which - * the current auto-tuning epoch started. hwm is the highest stream length - * (STREAM frame offset + payload length) we have seen from a STREAM frame - * yet. - */ - uint64_t cwm, swm, rwm, esrwm, hwm, cur_window_size, max_window_size; - OSSL_TIME epoch_start; - OSSL_TIME (*now)(void *arg); - void *now_arg; - QUIC_RXFC *parent; - unsigned char error_code, has_cwm_changed, is_fin, standalone; -}; - -/* - * Initialises an RX flow controller. conn_rxfc should be non-NULL and point to - * a connection-level RXFC if the RXFC is for stream-level flow control, and - * NULL otherwise. initial_window_size and max_window_size specify the initial - * and absolute maximum window sizes, respectively. Window size values are - * expressed in bytes and determine how much credit the RXFC extends to the peer - * to transmit more data at a time. - */ -int ossl_quic_rxfc_init(QUIC_RXFC *rxfc, QUIC_RXFC *conn_rxfc, - uint64_t initial_window_size, - uint64_t max_window_size, - OSSL_TIME (*now)(void *arg), - void *now_arg); - -/* - * Initialises an RX flow controller which is used by itself and not under a - * connection-level RX flow controller. This can be used for stream count - * enforcement as well as CRYPTO buffer enforcement. - */ -int ossl_quic_rxfc_init_standalone(QUIC_RXFC *rxfc, - uint64_t initial_window_size, - OSSL_TIME (*now)(void *arg), - void *now_arg); - -/* - * Gets the parent (i.e., connection-level) RXFC. Returns NULL if called on a - * connection-level RXFC. - */ -QUIC_RXFC *ossl_quic_rxfc_get_parent(QUIC_RXFC *rxfc); - -/* - * Changes the current maximum window size value. - */ -void ossl_quic_rxfc_set_max_window_size(QUIC_RXFC *rxfc, - size_t max_window_size); - -/* - * To be called whenever a STREAM frame is received. - * - * end is the value (offset + len), where offset is the offset field of the - * STREAM frame and len is the length of the STREAM frame's payload in bytes. - * - * is_fin should be 1 if the STREAM frame had the FIN flag set and 0 otherwise. - * - * This function may be used on a stream-level RXFC only. The connection-level - * RXFC will have its state updated by the stream-level RXFC. - * - * You should check ossl_quic_rxfc_has_error() on both connection-level and - * stream-level RXFCs after calling this function, as an incoming STREAM frame - * may cause flow control limits to be exceeded by an errant peer. This - * function still returns 1 in this case, as this is not a caller error. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_rxfc_on_rx_stream_frame(QUIC_RXFC *rxfc, - uint64_t end, int is_fin); - -/* - * To be called whenever controlled bytes are retired, i.e. when bytes are - * dequeued from a QUIC stream and passed to the application. num_bytes - * is the number of bytes which were passed to the application. - * - * You should call this only on a stream-level RXFC. This function will update - * the connection-level RXFC automatically. - * - * rtt should be the current best understanding of the RTT to the peer, as - * offered by the Statistics Manager. - * - * You should check ossl_quic_rxfc_has_cwm_changed() after calling this - * function, as it may have caused the RXFC to decide to grant more flow control - * credit to the peer. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_rxfc_on_retire(QUIC_RXFC *rxfc, - uint64_t num_bytes, - OSSL_TIME rtt); - -/* - * Returns the current CWM which the RXFC thinks the peer should have. - * - * Note that the RXFC will increase this value in response to events, at which - * time a MAX_DATA or MAX_STREAM_DATA frame must be generated. Use - * ossl_quic_rxfc_has_cwm_changed() to detect this condition. - * - * This value increases monotonically. - */ -uint64_t ossl_quic_rxfc_get_cwm(QUIC_RXFC *rxfc); - -/* - * Returns the current SWM. This is the total number of bytes the peer has - * transmitted to us. This is intended for diagnostic use only; you should - * not need it. - */ -uint64_t ossl_quic_rxfc_get_swm(QUIC_RXFC *rxfc); - -/* - * Returns the current RWM. This is the total number of bytes that has been - * retired. This is intended for diagnostic use only; you should not need it. - */ -uint64_t ossl_quic_rxfc_get_rwm(QUIC_RXFC *rxfc); - -/* - * Returns the CWM changed flag. If clear is 1, the flag is cleared and the old - * value is returned. - */ -int ossl_quic_rxfc_has_cwm_changed(QUIC_RXFC *rxfc, int clear); - -/* - * Returns a QUIC_ERR_* error code if a flow control error has been detected. - * Otherwise, returns QUIC_ERR_NO_ERROR. If clear is 1, the error is cleared - * and the old value is returned. - * - * May return one of the following values: - * - * QUIC_ERR_FLOW_CONTROL_ERROR: - * This indicates a flow control protocol violation by the remote peer; the - * connection should be terminated in this event. - * QUIC_ERR_FINAL_SIZE: - * The peer attempted to change the stream length after ending the stream. - */ -int ossl_quic_rxfc_get_error(QUIC_RXFC *rxfc, int clear); - -/* - * Returns 1 if the RXFC is a stream-level RXFC and the RXFC knows the final - * size for the stream in bytes. If this is the case and final_size is non-NULL, - * writes the final size to *final_size. Otherwise, returns 0. - */ -int ossl_quic_rxfc_get_final_size(const QUIC_RXFC *rxfc, uint64_t *final_size); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_fifd.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_fifd.h deleted file mode 100644 index a260ec44..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_fifd.h +++ /dev/null @@ -1,80 +0,0 @@ -/* - * 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_QUIC_FIFD_H -# define OSSL_QUIC_FIFD_H - -# include -# include "internal/quic_types.h" -# include "internal/quic_cfq.h" -# include "internal/quic_ackm.h" -# include "internal/quic_txpim.h" -# include "internal/quic_stream.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Frame-in-Flight Dispatcher (FIFD) - * ====================================== - */ -struct quic_fifd_st { - /* Internal data; use the ossl_quic_fifd functions. */ - QUIC_CFQ *cfq; - OSSL_ACKM *ackm; - QUIC_TXPIM *txpim; - QUIC_SSTREAM *(*get_sstream_by_id)(uint64_t stream_id, - uint32_t pn_space, - void *arg); - void *get_sstream_by_id_arg; - void (*regen_frame)(uint64_t frame_type, - uint64_t stream_id, - QUIC_TXPIM_PKT *pkt, - void *arg); - void *regen_frame_arg; - void (*confirm_frame)(uint64_t frame_type, - uint64_t stream_id, - QUIC_TXPIM_PKT *pkt, - void *arg); - void *confirm_frame_arg; - void (*sstream_updated)(uint64_t stream_id, - void *arg); - void *sstream_updated_arg; -}; - -int ossl_quic_fifd_init(QUIC_FIFD *fifd, - QUIC_CFQ *cfq, - OSSL_ACKM *ackm, - QUIC_TXPIM *txpim, - /* stream_id is UINT64_MAX for the crypto stream */ - QUIC_SSTREAM *(*get_sstream_by_id)(uint64_t stream_id, - uint32_t pn_space, - void *arg), - void *get_sstream_by_id_arg, - /* stream_id is UINT64_MAX if not applicable */ - void (*regen_frame)(uint64_t frame_type, - uint64_t stream_id, - QUIC_TXPIM_PKT *pkt, - void *arg), - void *regen_frame_arg, - void (*confirm_frame)(uint64_t frame_type, - uint64_t stream_id, - QUIC_TXPIM_PKT *pkt, - void *arg), - void *confirm_frame_arg, - void (*sstream_updated)(uint64_t stream_id, - void *arg), - void *sstream_updated_arg); - -void ossl_quic_fifd_cleanup(QUIC_FIFD *fifd); /* (no-op) */ - -int ossl_quic_fifd_pkt_commit(QUIC_FIFD *fifd, QUIC_TXPIM_PKT *pkt); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_reactor.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_reactor.h deleted file mode 100644 index 57bb551e..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_reactor.h +++ /dev/null @@ -1,188 +0,0 @@ -/* - * 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_QUIC_REACTOR_H -# define OSSL_QUIC_REACTOR_H - -# include "internal/time.h" -# include "internal/sockets.h" -# include - -# ifndef OPENSSL_NO_QUIC - -/* - * Core I/O Reactor Framework - * ========================== - * - * Manages use of async network I/O which the QUIC stack is built on. The core - * mechanic looks like this: - * - * - There is a pollable FD for both the read and write side respectively. - * Readability and writeability of these FDs respectively determines when - * network I/O is available. - * - * - The reactor can export these FDs to the user, as well as flags indicating - * whether the user should listen for readability, writeability, or neither. - * - * - The reactor can export a timeout indication to the user, indicating when - * the reactor should be called (via libssl APIs) regardless of whether - * the network socket has become ready. - * - * The reactor is based around a tick callback which is essentially the mutator - * function. The mutator attempts to do whatever it can, attempting to perform - * network I/O to the extent currently feasible. When done, the mutator returns - * information to the reactor indicating when it should be woken up again: - * - * - Should it be woken up when network RX is possible? - * - Should it be woken up when network TX is possible? - * - Should it be woken up no later than some deadline X? - * - * The intention is that ALL I/O-related SSL_* functions with side effects (e.g. - * SSL_read/SSL_write) consist of three phases: - * - * - Optionally mutate the QUIC machine's state. - * - Optionally tick the QUIC reactor. - * - Optionally mutate the QUIC machine's state. - * - * For example, SSL_write is a mutation (appending to a stream buffer) followed - * by an optional tick (generally expected as we may want to send the data - * immediately, though not strictly needed if transmission is being deferred due - * to Nagle's algorithm, etc.). - * - * SSL_read is also a mutation and in principle does not need to tick the - * reactor, but it generally will anyway to ensure that the reactor is regularly - * ticked by an application which is only reading and not writing. - * - * If the SSL object is being used in blocking mode, SSL_read may need to block - * if no data is available yet, and SSL_write may need to block if buffers - * are full. - * - * The internals of the QUIC I/O engine always use asynchronous I/O. If the - * application desires blocking semantics, we handle this by adding a blocking - * adaptation layer on top of our internal asynchronous I/O API as exposed by - * the reactor interface. - */ -typedef struct quic_tick_result_st { - char net_read_desired; - char net_write_desired; - OSSL_TIME tick_deadline; -} QUIC_TICK_RESULT; - -typedef struct quic_reactor_st { - /* - * BIO poll descriptors which can be polled. poll_r is a poll descriptor - * which becomes readable when the QUIC state machine can potentially do - * work, and poll_w is a poll descriptor which becomes writable when the - * QUIC state machine can potentially do work. Generally, either of these - * conditions means that SSL_tick() should be called, or another SSL - * function which implicitly calls SSL_tick() (e.g. SSL_read/SSL_write()). - */ - BIO_POLL_DESCRIPTOR poll_r, poll_w; - OSSL_TIME tick_deadline; /* ossl_time_infinite() if none currently applicable */ - - void (*tick_cb)(QUIC_TICK_RESULT *res, void *arg, uint32_t flags); - void *tick_cb_arg; - - /* - * These are true if we would like to know when we can read or write from - * the network respectively. - */ - unsigned int net_read_desired : 1; - unsigned int net_write_desired : 1; - - /* - * Are the read and write poll descriptors we are currently configured with - * things we can actually poll? - */ - unsigned int can_poll_r : 1; - unsigned int can_poll_w : 1; -} QUIC_REACTOR; - -void ossl_quic_reactor_init(QUIC_REACTOR *rtor, - void (*tick_cb)(QUIC_TICK_RESULT *res, void *arg, - uint32_t flags), - void *tick_cb_arg, - OSSL_TIME initial_tick_deadline); - -void ossl_quic_reactor_set_poll_r(QUIC_REACTOR *rtor, - const BIO_POLL_DESCRIPTOR *r); - -void ossl_quic_reactor_set_poll_w(QUIC_REACTOR *rtor, - const BIO_POLL_DESCRIPTOR *w); - -const BIO_POLL_DESCRIPTOR *ossl_quic_reactor_get_poll_r(const QUIC_REACTOR *rtor); -const BIO_POLL_DESCRIPTOR *ossl_quic_reactor_get_poll_w(const QUIC_REACTOR *rtor); - -int ossl_quic_reactor_can_poll_r(const QUIC_REACTOR *rtor); -int ossl_quic_reactor_can_poll_w(const QUIC_REACTOR *rtor); - -int ossl_quic_reactor_can_support_poll_descriptor(const QUIC_REACTOR *rtor, - const BIO_POLL_DESCRIPTOR *d); - -int ossl_quic_reactor_net_read_desired(QUIC_REACTOR *rtor); -int ossl_quic_reactor_net_write_desired(QUIC_REACTOR *rtor); - -OSSL_TIME ossl_quic_reactor_get_tick_deadline(QUIC_REACTOR *rtor); - -/* - * Do whatever work can be done, and as much work as can be done. This involves - * e.g. seeing if we can read anything from the network (if we want to), seeing - * if we can write anything to the network (if we want to), etc. - * - * If the CHANNEL_ONLY flag is set, this indicates that we should only - * touch state which is synchronised by the channel mutex. - */ -#define QUIC_REACTOR_TICK_FLAG_CHANNEL_ONLY (1U << 0) - -int ossl_quic_reactor_tick(QUIC_REACTOR *rtor, uint32_t flags); - -/* - * Blocking I/O Adaptation Layer - * ============================= - * - * The blocking I/O adaptation layer implements blocking I/O on top of our - * asynchronous core. - * - * The core mechanism is block_until_pred(), which does not return until pred() - * returns a value other than 0. The blocker uses OS I/O synchronisation - * primitives (e.g. poll(2)) and ticks the reactor until the predicate is - * satisfied. The blocker is not required to call pred() more than once between - * tick calls. - * - * When pred returns a non-zero value, that value is returned by this function. - * This can be used to allow pred() to indicate error conditions and short - * circuit the blocking process. - * - * A return value of -1 is reserved for network polling errors. Therefore this - * return value should not be used by pred() if ambiguity is not desired. Note - * that the predicate function can always arrange its own output mechanism, for - * example by passing a structure of its own as the argument. - * - * If the SKIP_FIRST_TICK flag is set, the first call to reactor_tick() before - * the first call to pred() is skipped. This is useful if it is known that - * ticking the reactor again will not be useful (e.g. because it has already - * been done). - * - * This function assumes a write lock is held for the entire QUIC_CHANNEL. If - * mutex is non-NULL, it must be a lock currently held for write; it will be - * unlocked during any sleep, and then relocked for write afterwards. - * - * Precondition: mutex is NULL or is held for write (unchecked) - * Postcondition: mutex is NULL or is held for write (unless - * CRYPTO_THREAD_write_lock fails) - */ -#define SKIP_FIRST_TICK (1U << 0) - -int ossl_quic_reactor_block_until_pred(QUIC_REACTOR *rtor, - int (*pred)(void *arg), void *pred_arg, - uint32_t flags, - CRYPTO_RWLOCK *mutex); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_rx.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_rx.h deleted file mode 100644 index e26fd356..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_rx.h +++ /dev/null @@ -1,569 +0,0 @@ -/* - * 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_QUIC_RECORD_RX_H -# define OSSL_QUIC_RECORD_RX_H - -# include -# include "internal/quic_wire_pkt.h" -# include "internal/quic_types.h" -# include "internal/quic_record_util.h" -# include "internal/quic_demux.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Record Layer - RX - * ====================== - */ -typedef struct ossl_qrx_st OSSL_QRX; - -typedef struct ossl_qrx_args_st { - OSSL_LIB_CTX *libctx; - const char *propq; - - /* Demux to receive datagrams from. */ - QUIC_DEMUX *demux; - - /* Length of connection IDs used in short-header packets in bytes. */ - size_t short_conn_id_len; - - /* - * Maximum number of deferred datagrams buffered at any one time. - * Suggested value: 32. - */ - size_t max_deferred; - - /* Initial reference PN used for RX. */ - QUIC_PN init_largest_pn[QUIC_PN_SPACE_NUM]; - - /* Initial key phase. For debugging use only; always 0 in real use. */ - unsigned char init_key_phase_bit; -} OSSL_QRX_ARGS; - -/* Instantiates a new QRX. */ -OSSL_QRX *ossl_qrx_new(const OSSL_QRX_ARGS *args); - -/* - * Frees the QRX. All packets obtained using ossl_qrx_read_pkt must already - * have been released by calling ossl_qrx_release_pkt. - * - * You do not need to call ossl_qrx_remove_dst_conn_id first; this function will - * unregister the QRX from the demuxer for all registered destination connection - * IDs (DCIDs) automatically. - */ -void ossl_qrx_free(OSSL_QRX *qrx); - -/* Setters for the msg_callback and msg_callback_arg */ -void ossl_qrx_set_msg_callback(OSSL_QRX *qrx, ossl_msg_cb msg_callback, - SSL *msg_callback_ssl); -void ossl_qrx_set_msg_callback_arg(OSSL_QRX *qrx, - void *msg_callback_arg); - -/* - * DCID Management - * =============== - */ - -/* - * Adds a given DCID to the QRX. The QRX will register the DCID with the demuxer - * so that incoming packets with that DCID are passed to the given QRX. Multiple - * DCIDs may be associated with a QRX at any one time. You will need to add at - * least one DCID after instantiating the QRX. A zero-length DCID is a valid - * input to this function. This function fails if the DCID is already - * registered. - * - * Returns 1 on success or 0 on error. - */ -int ossl_qrx_add_dst_conn_id(OSSL_QRX *qrx, - const QUIC_CONN_ID *dst_conn_id); - -/* - * Remove a DCID previously registered with ossl_qrx_add_dst_conn_id. The DCID - * is unregistered from the demuxer. Fails if the DCID is not registered with - * the demuxer. - * - * Returns 1 on success or 0 on error. - */ -int ossl_qrx_remove_dst_conn_id(OSSL_QRX *qrx, - const QUIC_CONN_ID *dst_conn_id); - -/* - * Secret Management - * ================= - * - * A QRX has several encryption levels (Initial, Handshake, 0-RTT, 1-RTT) and - * two directions (RX, TX). At any given time, key material is managed for each - * (EL, RX/TX) combination. - * - * Broadly, for a given (EL, RX/TX), the following state machine is applicable: - * - * WAITING_FOR_KEYS --[Provide]--> HAVE_KEYS --[Discard]--> | DISCARDED | - * \-------------------------------------[Discard]--> | | - * - * To transition the RX side of an EL from WAITING_FOR_KEYS to HAVE_KEYS, call - * ossl_qrx_provide_secret (for the INITIAL EL, use of - * ossl_quic_provide_initial_secret is recommended). - * - * Once keys have been provisioned for an EL, you call - * ossl_qrx_discard_enc_level to transition the EL to the DISCARDED state. You - * can also call this function to transition directly to the DISCARDED state - * even before any keys have been provisioned for that EL. - * - * The DISCARDED state is terminal for a given EL; you cannot provide a secret - * again for that EL after reaching it. - * - * Incoming packets cannot be processed and decrypted if they target an EL - * not in the HAVE_KEYS state. However, there is a distinction between - * the WAITING_FOR_KEYS and DISCARDED states: - * - * - In the WAITING_FOR_KEYS state, the QRX assumes keys for the given - * EL will eventually arrive. Therefore, if it receives any packet - * for an EL in this state, it buffers it and tries to process it - * again once the EL reaches HAVE_KEYS. - * - * - In the DISCARDED state, the QRX assumes no keys for the given - * EL will ever arrive again. If it receives any packet for an EL - * in this state, it is simply discarded. - * - * If the user wishes to instantiate a new QRX to replace an old one for - * whatever reason, for example to take over for an already established QUIC - * connection, it is important that all ELs no longer being used (i.e., INITIAL, - * 0-RTT, 1-RTT) are transitioned to the DISCARDED state. Otherwise, the QRX - * will assume that keys for these ELs will arrive in future, and will buffer - * any received packets for those ELs perpetually. This can be done by calling - * ossl_qrx_discard_enc_level for all non-1-RTT ELs immediately after - * instantiating the QRX. - * - * The INITIAL EL is not setup automatically when the QRX is instantiated. This - * allows the caller to instead discard it immediately after instantiation of - * the QRX if it is not needed, for example if the QRX is being instantiated to - * take over handling of an existing connection which has already passed the - * INITIAL phase. This avoids the unnecessary derivation of INITIAL keys where - * they are not needed. In the ordinary case, ossl_quic_provide_initial_secret - * should be called immediately after instantiation. - */ - -/* - * Provides a secret to the QRX, which arises due to an encryption level change. - * enc_level is a QUIC_ENC_LEVEL_* value. To initialise the INITIAL encryption - * level, it is recommended to use ossl_quic_provide_initial_secret instead. - * - * You should seek to call this function for a given EL before packets of that - * EL arrive and are processed by the QRX. However, if packets have already - * arrived for a given EL, the QRX will defer processing of them and perform - * processing of them when this function is eventually called for the EL in - * question. - * - * suite_id is a QRL_SUITE_* value which determines the AEAD function used for - * the QRX. - * - * The secret passed is used directly to derive the "quic key", "quic iv" and - * "quic hp" values. - * - * secret_len is the length of the secret buffer in bytes. The buffer must be - * sized correctly to the chosen suite, else the function fails. - * - * This function can only be called once for a given EL, except for the INITIAL - * EL, which can need rekeying when a connection retry occurs. Subsequent calls - * for non-INITIAL ELs fail, as do calls made after a corresponding call to - * ossl_qrx_discard_enc_level for that EL. The secret for a non-INITIAL EL - * cannot be changed after it is set because QUIC has no facility for - * introducing additional key material after an EL is setup. QUIC key updates - * are managed semi-automatically by the QRX but do require some caller handling - * (see below). - * - * md is for internal use and should be NULL. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_qrx_provide_secret(OSSL_QRX *qrx, - uint32_t enc_level, - uint32_t suite_id, - EVP_MD *md, - const unsigned char *secret, - size_t secret_len); - -/* - * Informs the QRX that it can now discard key material for a given EL. The QRX - * will no longer be able to process incoming packets received at that - * encryption level. This function is idempotent and succeeds if the EL has - * already been discarded. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_qrx_discard_enc_level(OSSL_QRX *qrx, uint32_t enc_level); - -/* - * Packet Reception - * ================ - */ - -/* Information about a received packet. */ -typedef struct ossl_qrx_pkt_st { - /* - * Points to a logical representation of the decoded QUIC packet header. The - * data and len fields point to the decrypted QUIC payload (i.e., to a - * sequence of zero or more (potentially malformed) frames to be decoded). - */ - QUIC_PKT_HDR *hdr; - - /* - * Address the packet was received from. If this is not available for this - * packet, this field is NULL (but this can only occur for manually injected - * packets). - */ - const BIO_ADDR *peer; - - /* - * Local address the packet was sent to. If this is not available for this - * packet, this field is NULL. - */ - const BIO_ADDR *local; - - /* - * This is the length of the datagram which contained this packet. Note that - * the datagram may have contained other packets than this. The intended use - * for this is so that the user can enforce minimum datagram sizes (e.g. for - * datagrams containing INITIAL packets), as required by RFC 9000. - */ - size_t datagram_len; - - /* The PN which was decoded for the packet, if the packet has a PN field. */ - QUIC_PN pn; - - /* - * Time the packet was received, or ossl_time_zero() if the demuxer is not - * using a now() function. - */ - OSSL_TIME time; - - /* The QRX which was used to receive the packet. */ - OSSL_QRX *qrx; - - /* - * The key epoch the packet was received with. Always 0 for non-1-RTT - * packets. - */ - uint64_t key_epoch; -} OSSL_QRX_PKT; - -/* - * Tries to read a new decrypted packet from the QRX. - * - * On success, *pkt points to a OSSL_QRX_PKT structure. The structure should be - * freed when no longer needed by calling ossl_qrx_pkt_release(). The structure - * is refcounted; to gain extra references, call ossl_qrx_pkt_up_ref(). This - * will cause a corresponding number of calls to ossl_qrx_pkt_release() to be - * ignored. - * - * The resources referenced by (*pkt)->hdr, (*pkt)->hdr->data and (*pkt)->peer - * have the same lifetime as *pkt. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_qrx_read_pkt(OSSL_QRX *qrx, OSSL_QRX_PKT **pkt); - -/* - * Decrement the reference count for the given packet and frees it if the - * reference count drops to zero. No-op if pkt is NULL. - */ -void ossl_qrx_pkt_release(OSSL_QRX_PKT *pkt); - -/* Increments the reference count for the given packet. */ -void ossl_qrx_pkt_up_ref(OSSL_QRX_PKT *pkt); - -/* - * Returns 1 if there are any already processed (i.e. decrypted) packets waiting - * to be read from the QRX. - */ -int ossl_qrx_processed_read_pending(OSSL_QRX *qrx); - -/* - * Returns 1 if there are any unprocessed (i.e. not yet decrypted) packets - * waiting to be processed by the QRX. These may or may not result in - * successfully decrypted packets once processed. This indicates whether - * unprocessed data is buffered by the QRX, not whether any data is available in - * a kernel socket buffer. - */ -int ossl_qrx_unprocessed_read_pending(OSSL_QRX *qrx); - -/* - * Returns the number of UDP payload bytes received from the network so far - * since the last time this counter was cleared. If clear is 1, clears the - * counter and returns the old value. - * - * The intended use of this is to allow callers to determine how much credit to - * add to their anti-amplification budgets. This is reported separately instead - * of in the OSSL_QRX_PKT structure so that a caller can apply - * anti-amplification credit as soon as a datagram is received, before it has - * necessarily read all processed packets contained within that datagram from - * the QRX. - */ -uint64_t ossl_qrx_get_bytes_received(OSSL_QRX *qrx, int clear); - -/* - * Sets a callback which is called when a packet is received and being validated - * before being queued in the read queue. This is called after packet body - * decryption and authentication to prevent exposing side channels. pn_space is - * a QUIC_PN_SPACE_* value denoting which PN space the PN belongs to. - * - * If this callback returns 1, processing continues normally. - * If this callback returns 0, the packet is discarded. - * - * Other packets in the same datagram will still be processed where possible. - * - * The callback is optional and can be unset by passing NULL for cb. - * cb_arg is an opaque value passed to cb. - */ -typedef int (ossl_qrx_late_validation_cb)(QUIC_PN pn, int pn_space, - void *arg); - -int ossl_qrx_set_late_validation_cb(OSSL_QRX *qrx, - ossl_qrx_late_validation_cb *cb, - void *cb_arg); - -/* - * Forcibly injects a URXE which has been issued by the DEMUX into the QRX for - * processing. This can be used to pass a received datagram to the QRX if it - * would not be correctly routed to the QRX via standard DCID-based routing; for - * example, when handling an incoming Initial packet which is attempting to - * establish a new connection. - */ -void ossl_qrx_inject_urxe(OSSL_QRX *qrx, QUIC_URXE *e); - -/* - * Decryption of 1-RTT packets must be explicitly enabled by calling this - * function. This is to comply with the requirement that we not process 1-RTT - * packets until the handshake is complete, even if we already have 1-RTT - * secrets. Even if a 1-RTT secret is provisioned for the QRX, incoming 1-RTT - * packets will be handled as though no key is available until this function is - * called. Calling this function will then requeue any such deferred packets for - * processing. - */ -void ossl_qrx_allow_1rtt_processing(OSSL_QRX *qrx); - -/* - * Key Update (RX) - * =============== - * - * Key update on the RX side is a largely but not entirely automatic process. - * - * Key update is initially triggered by receiving a 1-RTT packet with a - * different Key Phase value. This could be caused by an attacker in the network - * flipping random bits, therefore such a key update is tentative until the - * packet payload is successfully decrypted and authenticated by the AEAD with - * the 'next' keys. These 'next' keys then become the 'current' keys and the - * 'current' keys then become the 'previous' keys. The 'previous' keys must be - * kept around temporarily as some packets may still be in flight in the network - * encrypted with the old keys. If the old Key Phase value is X and the new Key - * Phase Value is Y (where obviously X != Y), this creates an ambiguity as any - * new packet received with a KP of X could either be an attempt to initiate yet - * another key update right after the last one, or an old packet encrypted - * before the key update. - * - * RFC 9001 provides some guidance on handling this issue: - * - * Strategy 1: - * Three keys, disambiguation using packet numbers - * - * "A recovered PN that is lower than any PN from the current KP uses the - * previous packet protection keys; a recovered PN that is higher than any - * PN from the current KP requires use of the next packet protection - * keys." - * - * Strategy 2: - * Two keys and a timer - * - * "Alternatively, endpoints can retain only two sets of packet protection - * keys, swapping previous keys for next after enough time has passed to - * allow for reordering in the network. In this case, the KP bit alone can - * be used to select keys." - * - * Strategy 2 is more efficient (we can keep fewer cipher contexts around) and - * should cover all actually possible network conditions. It also allows a delay - * after we make the 'next' keys our 'current' keys before we generate new - * 'next' keys, which allows us to mitigate against malicious peers who try to - * initiate an excessive number of key updates. - * - * We therefore model the following state machine: - * - * - * PROVISIONED - * _______________________________ - * | | - * UNPROVISIONED --|----> NORMAL <----------\ |------> DISCARDED - * | | | | - * | | | | - * | v | | - * | UPDATING | | - * | | | | - * | | | | - * | v | | - * | COOLDOWN | | - * | | | | - * | | | | - * | \---------------| | - * |_______________________________| - * - * - * The RX starts (once a secret has been provisioned) in the NORMAL state. In - * the NORMAL state, the current expected value of the Key Phase bit is - * recorded. When a flipped Key Phase bit is detected, the RX attempts to - * decrypt and authenticate the received packet with the 'next' keys rather than - * the 'current' keys. If (and only if) this authentication is successful, we - * move to the UPDATING state. (An attacker in the network could flip - * the Key Phase bit randomly, so it is essential we do nothing until AEAD - * authentication is complete.) - * - * In the UPDATING state, we know a key update is occurring and record - * the new Key Phase bit value as the newly current value, but we still keep the - * old keys around so that we can still process any packets which were still in - * flight when the key update was initiated. In the UPDATING state, a - * Key Phase bit value different to the current expected value is treated not as - * the initiation of another key update, but a reference to our old keys. - * - * Eventually we will be reasonably sure we are not going to receive any more - * packets with the old keys. At this point, we can transition to the COOLDOWN - * state. This transition occurs automatically after a certain amount of time; - * RFC 9001 recommends it be the PTO interval, which relates to our RTT to the - * peer. The duration also SHOULD NOT exceed three times the PTO to assist with - * maintaining PFS. - * - * In the COOLDOWN phase, the old keys have been securely erased and only one - * set of keys can be used: the current keys. If a packet is received with a Key - * Phase bit value different to the current Key Phase Bit value, this is treated - * as a request for a Key Update, but this request is ignored and the packet is - * treated as malformed. We do this to allow mitigation against malicious peers - * trying to initiate an excessive number of Key Updates. The timeout for the - * transition from UPDATING to COOLDOWN is recommended as adequate for - * this purpose in itself by the RFC, so the normal additional timeout value for - * the transition from COOLDOWN to normal is zero (immediate transition). - * - * A summary of each state: - * - * Epoch Exp KP Uses Keys KS0 KS1 If Non-Expected KP Bit - * ----- ------ --------- ------ ----- ---------------------- - * NORMAL 0 0 Keyset 0 Gen 0 Gen 1 → UPDATING - * UPDATING 1 1 Keyset 1 Gen 0 Gen 1 Use Keyset 0 - * COOLDOWN 1 1 Keyset 1 Erased Gen 1 Ignore Packet (*) - * - * NORMAL 1 1 Keyset 1 Gen 2 Gen 1 → UPDATING - * UPDATING 2 0 Keyset 0 Gen 2 Gen 1 Use Keyset 1 - * COOLDOWN 2 0 Keyset 0 Gen 2 Erased Ignore Packet (*) - * - * (*) Actually implemented by attempting to decrypt the packet with the - * wrong keys (which ultimately has the same outcome), as recommended - * by RFC 9001 to avoid creating timing channels. - * - * Note that the key material for the next key generation ("key epoch") is - * always kept in the NORMAL state (necessary to avoid side-channel attacks). - * This material is derived during the transition from COOLDOWN to NORMAL. - * - * Note that when a peer initiates a Key Update, we MUST also initiate a Key - * Update as per the RFC. The caller is responsible for detecting this condition - * and making the necessary calls to the TX side by detecting changes to the - * return value of ossl_qrx_get_key_epoch(). - * - * The above states (NORMAL, UPDATING, COOLDOWN) can themselves be - * considered substates of the PROVISIONED state. Providing a secret to the QRX - * for an EL transitions from UNPROVISIONED, the initial state, to PROVISIONED - * (NORMAL). Dropping key material for an EL transitions from whatever the - * current substate of the PROVISIONED state is to the DISCARDED state, which is - * the terminal state. - * - * Note that non-1RTT ELs cannot undergo key update, therefore a non-1RTT EL is - * always in the NORMAL substate if it is in the PROVISIONED state. - */ - -/* - * Return the current RX key epoch for the 1-RTT encryption level. This is - * initially zero and is incremented by one for every Key Update successfully - * signalled by the peer. If the 1-RTT EL has not yet been provisioned or has - * been discarded, returns UINT64_MAX. - * - * A necessary implication of this API is that the least significant bit of the - * returned value corresponds to the currently expected Key Phase bit, though - * callers are not anticipated to have any need of this information. - * - * It is not possible for the returned value to overflow, as a QUIC connection - * cannot support more than 2**62 packet numbers, and a connection must be - * terminated if this limit is reached. - * - * The caller should use this function to detect when the key epoch has changed - * and use it to initiate a key update on the TX side. - * - * The value returned by this function increments specifically at the transition - * from the NORMAL to the UPDATING state discussed above. - */ -uint64_t ossl_qrx_get_key_epoch(OSSL_QRX *qrx); - -/* - * Sets an optional callback which will be called when the key epoch changes. - * - * The callback is optional and can be unset by passing NULL for cb. - * cb_arg is an opaque value passed to cb. pn is the PN of the packet. - * Since key update is only supported for 1-RTT packets, the PN is always - * in the Application Data PN space. -*/ -typedef void (ossl_qrx_key_update_cb)(QUIC_PN pn, void *arg); - -int ossl_qrx_set_key_update_cb(OSSL_QRX *qrx, - ossl_qrx_key_update_cb *cb, void *cb_arg); - -/* - * Relates to the 1-RTT encryption level. The caller should call this after the - * UPDATING state is reached, after a timeout to be determined by the caller. - * - * This transitions from the UPDATING state to the COOLDOWN state (if - * still in the UPDATING state). If normal is 1, then transitions from - * the COOLDOWN state to the NORMAL state. Both transitions can be performed at - * once if desired. - * - * If in the normal state, or if in the COOLDOWN state and normal is 0, this is - * a no-op and returns 1. Returns 0 if the 1-RTT EL has not been provisioned or - * has been dropped. - * - * It is essential that the caller call this within a few PTO intervals of a key - * update occurring (as detected by the caller in a call to - * ossl_qrx_key_get_key_epoch()), as otherwise the peer will not be able to - * perform a Key Update ever again. - */ -int ossl_qrx_key_update_timeout(OSSL_QRX *qrx, int normal); - - -/* - * Key Expiration - * ============== - */ - -/* - * Returns the number of seemingly forged packets which have been received by - * the QRX. If this value reaches the value returned by - * ossl_qrx_get_max_epoch_forged_pkt_count() for a given EL, all further - * received encrypted packets for that EL will be discarded without processing. - * - * Note that the forged packet limit is for the connection lifetime, thus it is - * not reset by a key update. It is suggested that the caller terminate the - * connection a reasonable margin before the limit is reached. However, the - * exact limit imposed does vary by EL due to the possibility that different ELs - * use different AEADs. - */ -uint64_t ossl_qrx_get_cur_forged_pkt_count(OSSL_QRX *qrx); - -/* - * Returns the maximum number of forged packets which the record layer will - * permit to be verified using this QRX instance. - */ -uint64_t ossl_qrx_get_max_forged_pkt_count(OSSL_QRX *qrx, - uint32_t enc_level); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_tx.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_tx.h deleted file mode 100644 index f3b798fe..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_tx.h +++ /dev/null @@ -1,383 +0,0 @@ -/* - * 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_QUIC_RECORD_TX_H -# define OSSL_QUIC_RECORD_TX_H - -# include -# include "internal/quic_wire_pkt.h" -# include "internal/quic_types.h" -# include "internal/quic_record_util.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Record Layer - TX - * ====================== - */ -typedef struct ossl_qtx_iovec_st { - const unsigned char *buf; - size_t buf_len; -} OSSL_QTX_IOVEC; - -typedef struct ossl_qtx_st OSSL_QTX; - -typedef int (*ossl_mutate_packet_cb)(const QUIC_PKT_HDR *hdrin, - const OSSL_QTX_IOVEC *iovecin, size_t numin, - QUIC_PKT_HDR **hdrout, - const OSSL_QTX_IOVEC **iovecout, - size_t *numout, - void *arg); - -typedef void (*ossl_finish_mutate_cb)(void *arg); - -typedef struct ossl_qtx_args_st { - OSSL_LIB_CTX *libctx; - const char *propq; - - /* BIO to transmit to. */ - BIO *bio; - - /* Maximum datagram payload length (MDPL) for TX purposes. */ - size_t mdpl; -} OSSL_QTX_ARGS; - -/* Instantiates a new QTX. */ -OSSL_QTX *ossl_qtx_new(const OSSL_QTX_ARGS *args); - -/* Frees the QTX. */ -void ossl_qtx_free(OSSL_QTX *qtx); - -/* Set mutator callbacks for test framework support */ -void ossl_qtx_set_mutator(OSSL_QTX *qtx, ossl_mutate_packet_cb mutatecb, - ossl_finish_mutate_cb finishmutatecb, void *mutatearg); - -/* Setters for the msg_callback and the msg_callback_arg */ -void ossl_qtx_set_msg_callback(OSSL_QTX *qtx, ossl_msg_cb msg_callback, - SSL *msg_callback_ssl); -void ossl_qtx_set_msg_callback_arg(OSSL_QTX *qtx, void *msg_callback_arg); - -/* - * Secret Management - * ----------------- - */ - -/* - * Provides a secret to the QTX, which arises due to an encryption level change. - * enc_level is a QUIC_ENC_LEVEL_* value. - * - * This function can be used to initialise the INITIAL encryption level, but you - * should not do so directly; see the utility function - * ossl_qrl_provide_initial_secret() instead, which can initialise the INITIAL - * encryption level of a QRX and QTX simultaneously without duplicating certain - * key derivation steps. - * - * You must call this function for a given EL before transmitting packets at - * that EL using this QTX, otherwise ossl_qtx_write_pkt will fail. - * - * suite_id is a QRL_SUITE_* value which determines the AEAD function used for - * the QTX. - * - * The secret passed is used directly to derive the "quic key", "quic iv" and - * "quic hp" values. - * - * secret_len is the length of the secret buffer in bytes. The buffer must be - * sized correctly to the chosen suite, else the function fails. - * - * This function can only be called once for a given EL, except for the INITIAL - * EL, as the INITIAL EL can need to be rekeyed if connection retry occurs. - * Subsequent calls for non-INITIAL ELs fail. Calls made after a corresponding - * call to ossl_qtx_discard_enc_level for a given EL also fail, including for - * the INITIAL EL. The secret for a non-INITIAL EL cannot be changed after it is - * set because QUIC has no facility for introducing additional key material - * after an EL is setup. (QUIC key updates generate new keys from existing key - * material and do not introduce new entropy into a connection's key material.) - * - * Returns 1 on success or 0 on failure. - */ -int ossl_qtx_provide_secret(OSSL_QTX *qtx, - uint32_t enc_level, - uint32_t suite_id, - EVP_MD *md, - const unsigned char *secret, - size_t secret_len); - -/* - * Informs the QTX that it can now discard key material for a given EL. The QTX - * will no longer be able to generate packets at that EL. This function is - * idempotent and succeeds if the EL has already been discarded. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_qtx_discard_enc_level(OSSL_QTX *qtx, uint32_t enc_level); - -/* Returns 1 if the given encryption level is provisioned. */ -int ossl_qtx_is_enc_level_provisioned(OSSL_QTX *qtx, uint32_t enc_level); - -/* - * Given the value ciphertext_len representing an encrypted packet payload - * length in bytes, determines how many plaintext bytes it will decrypt to. - * Returns 0 if the specified EL is not provisioned or ciphertext_len is too - * small. The result is written to *plaintext_len. - */ -int ossl_qtx_calculate_plaintext_payload_len(OSSL_QTX *qtx, uint32_t enc_level, - size_t ciphertext_len, - size_t *plaintext_len); - -/* - * Given the value plaintext_len represented a plaintext packet payload length - * in bytes, determines how many ciphertext bytes it will encrypt to. The value - * output does not include packet headers. Returns 0 if the specified EL is not - * provisioned. The result is written to *ciphertext_len. - */ -int ossl_qtx_calculate_ciphertext_payload_len(OSSL_QTX *qtx, uint32_t enc_level, - size_t plaintext_len, - size_t *ciphertext_len); - -uint32_t ossl_qrl_get_suite_cipher_tag_len(uint32_t suite_id); - - -/* - * Packet Transmission - * ------------------- - */ - -typedef struct ossl_qtx_pkt_st { - /* Logical packet header to be serialized. */ - QUIC_PKT_HDR *hdr; - - /* - * iovecs expressing the logical packet payload buffer. Zero-length entries - * are permitted. - */ - const OSSL_QTX_IOVEC *iovec; - size_t num_iovec; - - /* Destination address. Will be passed through to the BIO if non-NULL. */ - const BIO_ADDR *peer; - - /* - * Local address (optional). Specify as non-NULL only if TX BIO - * has local address support enabled. - */ - const BIO_ADDR *local; - - /* - * Logical PN. Used for encryption. This will automatically be encoded to - * hdr->pn, which need not be initialized. - */ - QUIC_PN pn; - - /* Packet flags. Zero or more OSSL_QTX_PKT_FLAG_* values. */ - uint32_t flags; -} OSSL_QTX_PKT; - -/* - * More packets will be written which should be coalesced into a single - * datagram; do not send this packet yet. To use this, set this flag for all - * packets but the final packet in a datagram, then send the final packet - * without this flag set. - * - * This flag is not a guarantee and the QTX may transmit immediately anyway if - * it is not possible to fit any more packets in the current datagram. - * - * If the caller change its mind and needs to cause a packet queued with - * COALESCE after having passed it to this function but without writing another - * packet, it should call ossl_qtx_flush_pkt(). - */ -#define OSSL_QTX_PKT_FLAG_COALESCE (1U << 0) - -/* - * Writes a packet. - * - * *pkt need be valid only for the duration of the call to this function. - * - * pkt->hdr->data and pkt->hdr->len are unused. The payload buffer is specified - * via an array of OSSL_QTX_IOVEC structures. The API is designed to support - * single-copy transmission; data is copied from the iovecs as it is encrypted - * into an internal staging buffer for transmission. - * - * The function may modify and clobber pkt->hdr->data, pkt->hdr->len, - * pkt->hdr->key_phase and pkt->hdr->pn for its own internal use. No other - * fields of pkt or pkt->hdr will be modified. - * - * It is the callers responsibility to determine how long the PN field in the - * encoded packet should be by setting pkt->hdr->pn_len. This function takes - * care of the PN encoding. Set pkt->pn to the desired PN. - * - * Note that 1-RTT packets do not have a DCID Length field, therefore the DCID - * length must be understood contextually. This function assumes the caller - * knows what it is doing and will serialize a DCID of whatever length is given. - * It is the caller's responsibility to ensure it uses a consistent DCID length - * for communication with any given set of remote peers. - * - * The packet is queued regardless of whether it is able to be sent immediately. - * This enables packets to be batched and sent at once on systems which support - * system calls to send multiple datagrams in a single system call (see - * BIO_sendmmsg). To flush queued datagrams to the network, see - * ossl_qtx_flush_net(). - * - * Returns 1 on success or 0 on failure. - */ -int ossl_qtx_write_pkt(OSSL_QTX *qtx, const OSSL_QTX_PKT *pkt); - -/* - * Finish any incomplete datagrams for transmission which were flagged for - * coalescing. If there is no current coalescing datagram, this is a no-op. - */ -void ossl_qtx_finish_dgram(OSSL_QTX *qtx); - -/* - * (Attempt to) flush any datagrams which are queued for transmission. Note that - * this does not cancel coalescing; call ossl_qtx_finish_dgram() first if that - * is desired. The queue is drained into the OS's sockets as much as possible. - * To determine if there is still data to be sent after calling this function, - * use ossl_qtx_get_queue_len_bytes(). - * - * Returns one of the following values: - * - * QTX_FLUSH_NET_RES_OK - * Either no packets are currently queued for transmission, - * or at least one packet was successfully submitted. - * - * QTX_FLUSH_NET_RES_TRANSIENT_FAIL - * The underlying network write BIO indicated a transient error - * (e.g. buffers full). - * - * QTX_FLUSH_NET_RES_PERMANENT_FAIL - * Internal error (e.g. assertion or allocation error) - * or the underlying network write BIO indicated a non-transient - * error. - */ -#define QTX_FLUSH_NET_RES_OK 1 -#define QTX_FLUSH_NET_RES_TRANSIENT_FAIL (-1) -#define QTX_FLUSH_NET_RES_PERMANENT_FAIL (-2) - -int ossl_qtx_flush_net(OSSL_QTX *qtx); - -/* - * Diagnostic function. If there is any datagram pending transmission, pops it - * and writes the details of the datagram as they would have been passed to - * *msg. Returns 1, or 0 if there are no datagrams pending. For test use only. - */ -int ossl_qtx_pop_net(OSSL_QTX *qtx, BIO_MSG *msg); - -/* Returns number of datagrams which are fully-formed but not yet sent. */ -size_t ossl_qtx_get_queue_len_datagrams(OSSL_QTX *qtx); - -/* - * Returns number of payload bytes across all datagrams which are fully-formed - * but not yet sent. Does not count any incomplete coalescing datagram. - */ -size_t ossl_qtx_get_queue_len_bytes(OSSL_QTX *qtx); - -/* - * Returns number of bytes in the current coalescing datagram, or 0 if there is - * no current coalescing datagram. Returns 0 after a call to - * ossl_qtx_finish_dgram(). - */ -size_t ossl_qtx_get_cur_dgram_len_bytes(OSSL_QTX *qtx); - -/* - * Returns number of queued coalesced packets which have not been put into a - * datagram yet. If this is non-zero, ossl_qtx_flush_pkt() needs to be called. - */ -size_t ossl_qtx_get_unflushed_pkt_count(OSSL_QTX *qtx); - -/* - * Change the BIO being used by the QTX. May be NULL if actual transmission is - * not currently required. Does not up-ref the BIO; the caller is responsible - * for ensuring the lifetime of the BIO exceeds the lifetime of the QTX. - */ -void ossl_qtx_set_bio(OSSL_QTX *qtx, BIO *bio); - -/* Changes the MDPL. */ -int ossl_qtx_set_mdpl(OSSL_QTX *qtx, size_t mdpl); - -/* Retrieves the current MDPL. */ -size_t ossl_qtx_get_mdpl(OSSL_QTX *qtx); - - -/* - * Key Update - * ---------- - * - * For additional discussion of key update considerations, see QRX header file. - */ - -/* - * Triggers a key update. The key update will be started by inverting the Key - * Phase bit of the next packet transmitted; no key update occurs until the next - * packet is transmitted. Thus, this function should generally be called - * immediately before queueing the next packet. - * - * There are substantial requirements imposed by RFC 9001 on under what - * circumstances a key update can be initiated. The caller is responsible for - * meeting most of these requirements. For example, this function cannot be - * called too soon after a previous key update has occurred. Key updates also - * cannot be initiated until the 1-RTT encryption level is reached. - * - * As a sanity check, this function will fail and return 0 if the non-1RTT - * encryption levels have not yet been dropped. - * - * The caller may decide itself to initiate a key update, but it also MUST - * initiate a key update where it detects that the peer has initiated a key - * update. The caller is responsible for initiating a TX key update by calling - * this function in this circumstance; thus, the caller is responsible for - * coupling the RX and TX QUIC record layers in this way. - */ -int ossl_qtx_trigger_key_update(OSSL_QTX *qtx); - - -/* - * Key Expiration - * -------------- - */ - -/* - * Returns the number of packets which have been encrypted for transmission with - * the current set of TX keys (the current "TX key epoch"). Reset to zero after - * a key update and incremented for each packet queued. If enc_level is not - * valid or relates to an EL which is not currently available, returns - * UINT64_MAX. - */ -uint64_t ossl_qtx_get_cur_epoch_pkt_count(OSSL_QTX *qtx, uint32_t enc_level); - -/* - * Returns the maximum number of packets which the record layer will permit to - * be encrypted using the current set of TX keys. If this limit is reached (that - * is, if the counter returned by ossl_qrx_tx_get_cur_epoch_pkt_count() reaches - * this value), as a safety measure, the QTX will not permit any further packets - * to be queued. All calls to ossl_qrx_write_pkt that try to send packets of a - * kind which need to be encrypted will fail. It is not possible to recover from - * this condition and the QTX must then be destroyed; therefore, callers should - * ensure they always trigger a key update well in advance of reaching this - * limit. - * - * The value returned by this function is based on the ciphersuite configured - * for the given encryption level. If keys have not been provisioned for the - * specified enc_level or the enc_level argument is invalid, this function - * returns UINT64_MAX, which is not a valid value. Note that it is not possible - * to perform a key update at any encryption level other than 1-RTT, therefore - * if this limit is reached at earlier encryption levels (which should not be - * possible) the connection must be terminated. Since this condition precludes - * the transmission of further packets, the only possible signalling of such an - * error condition to a peer is a Stateless Reset packet. - */ -uint64_t ossl_qtx_get_max_epoch_pkt_count(OSSL_QTX *qtx, uint32_t enc_level); - -/* - * Get the 1-RTT EL key epoch number for the QTX. This is intended for - * diagnostic purposes. Returns 0 if 1-RTT EL is not provisioned yet. - */ -uint64_t ossl_qtx_get_key_epoch(OSSL_QTX *qtx); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_util.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_util.h deleted file mode 100644 index 97e630d9..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_util.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 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_QUIC_RECORD_UTIL_H -# define OSSL_QUIC_RECORD_UTIL_H - -# include -# include "internal/quic_types.h" - -# ifndef OPENSSL_NO_QUIC - -struct ossl_qrx_st; -struct ossl_qtx_st; - -/* - * QUIC Key Derivation Utilities - * ============================= - */ - -/* HKDF-Extract(salt, IKM) (RFC 5869) */ -int ossl_quic_hkdf_extract(OSSL_LIB_CTX *libctx, - const char *propq, - const EVP_MD *md, - const unsigned char *salt, size_t salt_len, - const unsigned char *ikm, size_t ikm_len, - unsigned char *out, size_t out_len); - -/* - * A QUIC client sends its first INITIAL packet with a random DCID, which - * is used to compute the secrets used for INITIAL packet encryption in both - * directions (both client-to-server and server-to-client). - * - * This function performs the necessary DCID-based key derivation, and then - * provides the derived key material for the INITIAL encryption level to a QRX - * instance, a QTX instance, or both. - * - * This function derives the necessary key material and then: - * - if qrx is non-NULL, provides the appropriate secret to it; - * - if qtx is non-NULL, provides the appropriate secret to it. - * - * If both qrx and qtx are NULL, this is a no-op. This function is equivalent to - * making the appropriate calls to ossl_qrx_provide_secret() and - * ossl_qtx_provide_secret(). - * - * It is possible to use a QRX or QTX without ever calling this, for example if - * there is no desire to handle INITIAL packets (e.g. if a QRX/QTX is - * instantiated to succeed a previous QRX/QTX and handle a connection which is - * already established). However in this case you should make sure you call - * ossl_qrx_discard_enc_level(); see the header for that function for more - * details. Calling ossl_qtx_discard_enc_level() is not essential but could - * protect against programming errors. - * - * Returns 1 on success or 0 on error. - */ -int ossl_quic_provide_initial_secret(OSSL_LIB_CTX *libctx, - const char *propq, - const QUIC_CONN_ID *dst_conn_id, - int is_server, - struct ossl_qrx_st *qrx, - struct ossl_qtx_st *qtx); - -/* - * QUIC Record Layer Ciphersuite Info - * ================================== - */ - -/* Available QUIC Record Layer (QRL) ciphersuites. */ -# define QRL_SUITE_AES128GCM 1 /* SHA256 */ -# define QRL_SUITE_AES256GCM 2 /* SHA384 */ -# define QRL_SUITE_CHACHA20POLY1305 3 /* SHA256 */ - -/* Returns cipher name in bytes or NULL if suite ID is invalid. */ -const char *ossl_qrl_get_suite_cipher_name(uint32_t suite_id); - -/* Returns hash function name in bytes or NULL if suite ID is invalid. */ -const char *ossl_qrl_get_suite_md_name(uint32_t suite_id); - -/* Returns secret length in bytes or 0 if suite ID is invalid. */ -uint32_t ossl_qrl_get_suite_secret_len(uint32_t suite_id); - -/* Returns key length in bytes or 0 if suite ID is invalid. */ -uint32_t ossl_qrl_get_suite_cipher_key_len(uint32_t suite_id); - -/* Returns IV length in bytes or 0 if suite ID is invalid. */ -uint32_t ossl_qrl_get_suite_cipher_iv_len(uint32_t suite_id); - -/* Returns AEAD auth tag length in bytes or 0 if suite ID is invalid. */ -uint32_t ossl_qrl_get_suite_cipher_tag_len(uint32_t suite_id); - -/* Returns a QUIC_HDR_PROT_CIPHER_* value or 0 if suite ID is invalid. */ -uint32_t ossl_qrl_get_suite_hdr_prot_cipher_id(uint32_t suite_id); - -/* Returns header protection key length in bytes or 0 if suite ID is invalid. */ -uint32_t ossl_qrl_get_suite_hdr_prot_key_len(uint32_t suite_id); - -/* - * Returns maximum number of packets which may be safely encrypted with a suite - * or 0 if suite ID is invalid. - */ -uint64_t ossl_qrl_get_suite_max_pkt(uint32_t suite_id); - -/* - * Returns maximum number of RX'd packets which may safely fail AEAD decryption - * for a given suite or 0 if suite ID is invalid. - */ -uint64_t ossl_qrl_get_suite_max_forged_pkt(uint32_t suite_id); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_rx_depack.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_rx_depack.h deleted file mode 100644 index c90964a7..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_rx_depack.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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_QUIC_RX_DEPACK_H -# define OSSL_QUIC_RX_DEPACK_H - -# include "internal/quic_channel.h" - -# ifndef OPENSSL_NO_QUIC - -int ossl_quic_handle_frames(QUIC_CHANNEL *qc, OSSL_QRX_PKT *qpacket); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_sf_list.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_sf_list.h deleted file mode 100644 index 8ed1dcb1..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_sf_list.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * 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_QUIC_SF_LIST_H -# define OSSL_QUIC_SF_LIST_H - -#include "internal/common.h" -#include "internal/uint_set.h" -#include "internal/quic_record_rx.h" - -/* - * Stream frame list - * ================= - * - * This data structure supports similar operations as uint64 set but - * it has slightly different invariants and also carries data associated with - * the ranges in the list. - * - * Operations: - * Insert frame (optimized insertion at the beginning and at the end). - * Iterated peek into the frame(s) from the beginning. - * Dropping frames from the beginning up to an offset (exclusive). - * - * Invariant: The frames in the list are sorted by the start and end bounds. - * Invariant: There are no fully overlapping frames or frames that would - * be fully encompassed by another frame in the list. - * Invariant: No frame has start > end. - * Invariant: The range start is inclusive the end is exclusive to be - * able to mark an empty frame. - * Invariant: The offset never points further than into the first frame. - */ -# ifndef OPENSSL_NO_QUIC - -typedef struct stream_frame_st STREAM_FRAME; - -typedef struct sframe_list_st { - STREAM_FRAME *head, *tail; - /* Is the tail frame final. */ - unsigned int fin; - /* Number of stream frames in the list. */ - size_t num_frames; - /* Offset of data not yet dropped */ - uint64_t offset; - /* Is head locked ? */ - int head_locked; - /* Cleanse data on release? */ - int cleanse; -} SFRAME_LIST; - -/* - * Initializes the stream frame list fl. - */ -void ossl_sframe_list_init(SFRAME_LIST *fl); - -/* - * Destroys the stream frame list fl releasing any data - * still present inside it. - */ -void ossl_sframe_list_destroy(SFRAME_LIST *fl); - -/* - * Insert a stream frame data into the list. - * The data covers an offset range (range.start is inclusive, - * range.end is exclusive). - * fin should be set if this is the final frame of the stream. - * Returns an error if a frame cannot be inserted - due to - * STREAM_FRAME allocation error, or in case of erroneous - * fin flag (this is an ossl_assert() check so a caller must - * check it on its own too). - */ -int ossl_sframe_list_insert(SFRAME_LIST *fl, UINT_RANGE *range, - OSSL_QRX_PKT *pkt, - const unsigned char *data, int fin); - -/* - * Iterator to peek at the contiguous frames at the beginning - * of the frame list fl. - * The *data covers an offset range (range.start is inclusive, - * range.end is exclusive). - * *fin is set if this is the final frame of the stream. - * Opaque iterator *iter can be used to peek at the subsequent - * frame if there is any without any gap before it. - * Returns 1 on success. - * Returns 0 if there is no further contiguous frame. In that - * case *fin is set, if the end of the stream is reached. - */ -int ossl_sframe_list_peek(const SFRAME_LIST *fl, void **iter, - UINT_RANGE *range, const unsigned char **data, - int *fin); - -/* - * Drop all frames up to the offset limit. - * Also unlocks the head frame if locked. - * Returns 1 on success. - * Returns 0 when trying to drop frames at offsets that were not - * received yet. (ossl_assert() is used to check, so this is an invalid call.) - */ -int ossl_sframe_list_drop_frames(SFRAME_LIST *fl, uint64_t limit); - -/* - * Locks and returns the head frame of fl if it is readable - read offset is - * at the beginning or middle of the frame. - * range is set to encompass the not yet read part of the head frame, - * data pointer is set to appropriate offset within the frame if the read - * offset points in the middle of the frame, - * fin is set to 1 if the head frame is also the tail frame. - * Returns 1 on success, 0 if there is no readable data or the head - * frame is already locked. - */ -int ossl_sframe_list_lock_head(SFRAME_LIST *fl, UINT_RANGE *range, - const unsigned char **data, - int *fin); - -/* - * Just returns whether the head frame is locked by previous - * ossl_sframe_list_lock_head() call. - */ -int ossl_sframe_list_is_head_locked(SFRAME_LIST *fl); - -/* - * Callback function type to write stream frame data to some - * side storage before the packet containing the frame data - * is released. - * It should return 1 on success or 0 if there is not enough - * space available in the side storage. - */ -typedef int (sframe_list_write_at_cb)(uint64_t logical_offset, - const unsigned char *buf, - size_t buf_len, - void *cb_arg); - -/* - * Move the frame data in all the stream frames in the list fl - * from the packets to the side storage using the write_at_cb - * callback. - * Returns 1 if all the calls to the callback return 1. - * If the callback returns 0, the function stops processing further - * frames and returns 0. - */ -int ossl_sframe_list_move_data(SFRAME_LIST *fl, - sframe_list_write_at_cb *write_at_cb, - void *cb_arg); -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_ssl.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_ssl.h deleted file mode 100644 index 52d4527c..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_ssl.h +++ /dev/null @@ -1,132 +0,0 @@ -/* - * 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_QUIC_SSL_H -# define OSSL_QUIC_SSL_H - -# include -# include -# include "internal/quic_record_rx.h" /* OSSL_QRX */ -# include "internal/quic_ackm.h" /* OSSL_ACKM */ -# include "internal/quic_channel.h" /* QUIC_CHANNEL */ - -# ifndef OPENSSL_NO_QUIC - -__owur SSL *ossl_quic_new(SSL_CTX *ctx); -__owur int ossl_quic_init(SSL *s); -void ossl_quic_deinit(SSL *s); -void ossl_quic_free(SSL *s); -int ossl_quic_reset(SSL *s); -int ossl_quic_clear(SSL *s); -__owur int ossl_quic_accept(SSL *s); -__owur int ossl_quic_connect(SSL *s); -__owur int ossl_quic_read(SSL *s, void *buf, size_t len, size_t *readbytes); -__owur int ossl_quic_peek(SSL *s, void *buf, size_t len, size_t *readbytes); -__owur int ossl_quic_write(SSL *s, const void *buf, size_t len, size_t *written); -__owur long ossl_quic_ctrl(SSL *s, int cmd, long larg, void *parg); -__owur long ossl_quic_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg); -__owur long ossl_quic_callback_ctrl(SSL *s, int cmd, void (*fp) (void)); -__owur long ossl_quic_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void)); -__owur size_t ossl_quic_pending(const SSL *s); -__owur int ossl_quic_key_update(SSL *s, int update_type); -__owur int ossl_quic_get_key_update_type(const SSL *s); -__owur const SSL_CIPHER *ossl_quic_get_cipher_by_char(const unsigned char *p); -__owur int ossl_quic_num_ciphers(void); -__owur const SSL_CIPHER *ossl_quic_get_cipher(unsigned int u); -int ossl_quic_renegotiate_check(SSL *ssl, int initok); - -typedef struct quic_conn_st QUIC_CONNECTION; -typedef struct quic_xso_st QUIC_XSO; - -int ossl_quic_do_handshake(SSL *s); -void ossl_quic_set_connect_state(SSL *s); -void ossl_quic_set_accept_state(SSL *s); - -__owur int ossl_quic_has_pending(const SSL *s); -__owur int ossl_quic_handle_events(SSL *s); -__owur int ossl_quic_get_event_timeout(SSL *s, struct timeval *tv, - int *is_infinite); -OSSL_TIME ossl_quic_get_event_deadline(SSL *s); -__owur int ossl_quic_get_rpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *d); -__owur int ossl_quic_get_wpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *d); -__owur int ossl_quic_get_net_read_desired(SSL *s); -__owur int ossl_quic_get_net_write_desired(SSL *s); -__owur int ossl_quic_get_error(const SSL *s, int i); -__owur int ossl_quic_want(const SSL *s); -__owur int ossl_quic_conn_get_blocking_mode(const SSL *s); -__owur int ossl_quic_conn_set_blocking_mode(SSL *s, int blocking); -__owur int ossl_quic_conn_shutdown(SSL *s, uint64_t flags, - const SSL_SHUTDOWN_EX_ARGS *args, - size_t args_len); -__owur int ossl_quic_conn_stream_conclude(SSL *s); -void ossl_quic_conn_set0_net_rbio(SSL *s, BIO *net_wbio); -void ossl_quic_conn_set0_net_wbio(SSL *s, BIO *net_wbio); -BIO *ossl_quic_conn_get_net_rbio(const SSL *s); -BIO *ossl_quic_conn_get_net_wbio(const SSL *s); -__owur int ossl_quic_conn_set_initial_peer_addr(SSL *s, - const BIO_ADDR *peer_addr); -__owur SSL *ossl_quic_conn_stream_new(SSL *s, uint64_t flags); -__owur SSL *ossl_quic_get0_connection(SSL *s); -__owur int ossl_quic_get_stream_type(SSL *s); -__owur uint64_t ossl_quic_get_stream_id(SSL *s); -__owur int ossl_quic_is_stream_local(SSL *s); -__owur int ossl_quic_set_default_stream_mode(SSL *s, uint32_t mode); -__owur SSL *ossl_quic_detach_stream(SSL *s); -__owur int ossl_quic_attach_stream(SSL *conn, SSL *stream); -__owur int ossl_quic_set_incoming_stream_policy(SSL *s, int policy, - uint64_t aec); -__owur SSL *ossl_quic_accept_stream(SSL *s, uint64_t flags); -__owur size_t ossl_quic_get_accept_stream_queue_len(SSL *s); - -__owur int ossl_quic_stream_reset(SSL *ssl, - const SSL_STREAM_RESET_ARGS *args, - size_t args_len); - -__owur int ossl_quic_get_stream_read_state(SSL *ssl); -__owur int ossl_quic_get_stream_write_state(SSL *ssl); -__owur int ossl_quic_get_stream_read_error_code(SSL *ssl, - uint64_t *app_error_code); -__owur int ossl_quic_get_stream_write_error_code(SSL *ssl, - uint64_t *app_error_code); -__owur int ossl_quic_get_conn_close_info(SSL *ssl, - SSL_CONN_CLOSE_INFO *info, - size_t info_len); - -uint64_t ossl_quic_set_options(SSL *s, uint64_t opts); -uint64_t ossl_quic_clear_options(SSL *s, uint64_t opts); -uint64_t ossl_quic_get_options(const SSL *s); - -/* Modifies write buffer size for a stream. */ -__owur int ossl_quic_set_write_buffer_size(SSL *s, size_t size); - -/* - * Used to override ossl_time_now() for debug purposes. While this may be - * overridden at any time, expect strange results if you change it after - * connecting. - */ -int ossl_quic_conn_set_override_now_cb(SSL *s, - OSSL_TIME (*now_cb)(void *arg), - void *now_cb_arg); - -/* - * Condvar waiting in the assist thread doesn't support time faking as it relies - * on the OS's notion of time, thus this is used in test code to force a - * spurious wakeup instead. - */ -void ossl_quic_conn_force_assist_thread_wake(SSL *s); - -/* For use by tests only. */ -QUIC_CHANNEL *ossl_quic_conn_get_channel(SSL *s); - -int ossl_quic_has_pending(const SSL *s); -int ossl_quic_get_shutdown(const SSL *s); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_statm.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_statm.h deleted file mode 100644 index 5b33551b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_statm.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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_QUIC_STATS_H -# define OSSL_QUIC_STATS_H - -# include -# include "internal/time.h" - -# ifndef OPENSSL_NO_QUIC - -typedef struct ossl_statm_st { - OSSL_TIME smoothed_rtt, latest_rtt, min_rtt, rtt_variance; - char have_first_sample; -} OSSL_STATM; - -typedef struct ossl_rtt_info_st { - /* As defined in RFC 9002. */ - OSSL_TIME smoothed_rtt, latest_rtt, rtt_variance, min_rtt; -} OSSL_RTT_INFO; - -int ossl_statm_init(OSSL_STATM *statm); - -void ossl_statm_destroy(OSSL_STATM *statm); - -void ossl_statm_get_rtt_info(OSSL_STATM *statm, OSSL_RTT_INFO *rtt_info); - -void ossl_statm_update_rtt(OSSL_STATM *statm, - OSSL_TIME ack_delay, - OSSL_TIME override_latest_rtt); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_stream.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_stream.h deleted file mode 100644 index 0da8febd..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_stream.h +++ /dev/null @@ -1,429 +0,0 @@ -/* -* 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_INTERNAL_QUIC_STREAM_H -# define OSSL_INTERNAL_QUIC_STREAM_H -# pragma once - -#include "internal/e_os.h" -#include "internal/time.h" -#include "internal/quic_types.h" -#include "internal/quic_wire.h" -#include "internal/quic_record_tx.h" -#include "internal/quic_record_rx.h" -#include "internal/quic_fc.h" -#include "internal/quic_statm.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Send Stream - * ================ - * - * The QUIC Send Stream Manager (QUIC_SSTREAM) is responsible for: - * - * - accepting octet strings of stream data; - * - * - generating corresponding STREAM frames; - * - * - receiving notifications of lost frames, in order to generate new STREAM - * frames for the lost data; - * - * - receiving notifications of acknowledged frames, in order to internally - * reuse memory used to store acknowledged stream data; - * - * - informing the caller of how much more stream data it can accept into - * its internal buffers, so as to ensure that the amount of unacknowledged - * data which can be written to a stream is not infinite and to allow the - * caller to manifest backpressure conditions to the user. - * - * The QUIC_SSTREAM is instantiated once for every stream with a send component - * (i.e., for a unidirectional send stream or for the send component of a - * bidirectional stream). - * - * Note: The terms 'TX' and 'RX' are used when referring to frames, packets and - * datagrams. The terms 'send' and 'receive' are used when referring to the - * stream abstraction. Applications send; we transmit. - */ -typedef struct quic_sstream_st QUIC_SSTREAM; - -/* - * Instantiates a new QUIC_SSTREAM. init_buf_size specifies the initial size of - * the stream data buffer in bytes, which must be positive. - */ -QUIC_SSTREAM *ossl_quic_sstream_new(size_t init_buf_size); - -/* - * Frees a QUIC_SSTREAM and associated stream data storage. - * - * Any iovecs returned by ossl_quic_sstream_get_stream_frame cease to be valid after - * calling this function. - */ -void ossl_quic_sstream_free(QUIC_SSTREAM *qss); - -/* - * (For TX packetizer use.) Retrieves information about application stream data - * which is ready for transmission. - * - * *hdr is filled with the logical offset, maximum possible length of stream - * data which can be transmitted, and a pointer to the stream data to be - * transmitted. is_fin is set to 1 if hdr->offset + hdr->len is the final size - * of the stream and 0 otherwise. hdr->stream_id is not set; the caller must set - * it. - * - * The caller is not obligated to send all of the data. If the caller does not - * send all of the data, the caller must reduce hdr->len before serializing the - * header structure and must ensure that hdr->is_fin is cleared. - * - * hdr->has_explicit_len is always set. It is the caller's responsibility to - * clear this if it wants to use the optimization of omitting the length field, - * as only the caller can know when this optimization can be performed. - * - * *num_iov must be set to the size of the iov array at call time. When this - * function returns successfully, it is updated to the number of iov entries - * which have been written. - * - * The stream data may be split across up to two IOVs due to internal ring - * buffer organisation. The sum of the lengths of the IOVs and the value written - * to hdr->len will always match. If the caller decides to send less than - * hdr->len of stream data, it must adjust the IOVs accordingly. This may be - * done by updating hdr->len and then calling the utility function - * ossl_quic_sstream_adjust_iov(). - * - * After committing one or more bytes returned by ossl_quic_sstream_get_stream_frame to a - * packet, call ossl_quic_sstream_mark_transmitted with the inclusive range of logical - * byte numbers of the transmitted bytes (i.e., hdr->offset, hdr->offset + - * hdr->len - 1). If you do not call ossl_quic_sstream_mark_transmitted, the next call to - * ossl_quic_sstream_get_stream_frame will return the same data (or potentially the same - * and more, if more data has been appended by the application). - * - * It is the caller's responsibility to clamp the length of data which this - * function indicates is available according to other concerns, such as - * stream-level flow control, connection-level flow control, or the applicable - * maximum datagram payload length (MDPL) for a packet under construction. - * - * The skip argument can usually be given as zero. If it is non-zero, this - * function outputs a range which would be output if it were called again after - * calling ossl_quic_sstream_mark_transmitted() with the returned range, repeated 'skip' - * times, and so on. This may be useful for callers which wish to enumerate - * available stream frames and batch their calls to ossl_quic_sstream_mark_transmitted at - * a later time. - * - * On success, this function will never write *num_iov with a value other than - * 0, 1 or 2. A *num_iov value of 0 can only occurs when hdr->is_fin is set (for - * example, when a stream is closed after all existing data has been sent, and - * without sending any more data); otherwise the function returns 0 as there is - * nothing useful to report. - * - * Returns 1 on success and 0 if there is no stream data available for - * transmission, or on other error (such as if the caller provides fewer - * than two IOVs.) - */ -int ossl_quic_sstream_get_stream_frame(QUIC_SSTREAM *qss, - size_t skip, - OSSL_QUIC_FRAME_STREAM *hdr, - OSSL_QTX_IOVEC *iov, - size_t *num_iov); - -/* - * Returns 1 if there is data pending transmission. Equivalent to calling - * ossl_quic_sstream_get_stream_frame and seeing if it succeeds. - */ -int ossl_quic_sstream_has_pending(QUIC_SSTREAM *qss); - -/* - * Returns the current size of the stream; i.e., the number of bytes which have - * been appended to the stream so far. - */ -uint64_t ossl_quic_sstream_get_cur_size(QUIC_SSTREAM *qss); - -/* - * (For TX packetizer use.) Marks a logical range of the send stream as having - * been transmitted. - * - * 0 denotes the first byte ever sent on the stream. The start and end values - * are both inclusive, therefore all calls to this function always mark at least - * one byte as being transmitted; if no bytes have been transmitted, do not call - * this function. - * - * If the STREAM frame sent had the FIN bit set, you must also call - * ossl_quic_sstream_mark_transmitted_fin() after calling this function. - * - * If you sent a zero-length STREAM frame with the FIN bit set, you need only - * call ossl_quic_sstream_mark_transmitted_fin() and must not call this function. - * - * Returns 1 on success and 0 on error (e.g. if end < start). - */ -int ossl_quic_sstream_mark_transmitted(QUIC_SSTREAM *qss, - uint64_t start, - uint64_t end); - -/* - * (For TX packetizer use.) Marks a STREAM frame with the FIN bit set as having - * been transmitted. final_size is the final size of the stream (i.e., the value - * offset + len of the transmitted STREAM frame). - * - * This function fails returning 0 if ossl_quic_sstream_fin() has not been called or if - * final_size is not correct. The final_size argument is not strictly needed by - * the QUIC_SSTREAM but is required as a sanity check. - */ -int ossl_quic_sstream_mark_transmitted_fin(QUIC_SSTREAM *qss, - uint64_t final_size); - -/* - * (RX/ACKM use.) Marks a logical range of the send stream as having been lost. - * The send stream will return the lost data for retransmission on a future call - * to ossl_quic_sstream_get_stream_frame. The start and end values denote logical byte - * numbers and are inclusive. - * - * If the lost frame had the FIN bit set, you must also call - * ossl_quic_sstream_mark_lost_fin() after calling this function. - * - * Returns 1 on success and 0 on error (e.g. if end < start). - */ -int ossl_quic_sstream_mark_lost(QUIC_SSTREAM *qss, - uint64_t start, - uint64_t end); - -/* - * (RX/ACKM use.) Informs the QUIC_SSTREAM that a STREAM frame with the FIN bit - * set was lost. - * - * Returns 1 on success and 0 on error. - */ -int ossl_quic_sstream_mark_lost_fin(QUIC_SSTREAM *qss); - -/* - * (RX/ACKM use.) Marks a logical range of the send stream as having been - * acknowledged, meaning that the storage for the data in that range of the - * stream can be now recycled and neither that logical range of the stream nor - * any subset of it can be retransmitted again. The start and end values are - * inclusive. - * - * If the acknowledged frame had the FIN bit set, you must also call - * ossl_quic_sstream_mark_acked_fin() after calling this function. - * - * Returns 1 on success and 0 on error (e.g. if end < start). - */ -int ossl_quic_sstream_mark_acked(QUIC_SSTREAM *qss, - uint64_t start, - uint64_t end); - -/* - * (RX/ACKM use.) Informs the QUIC_SSTREAM that a STREAM frame with the FIN bit - * set was acknowledged. - * - * Returns 1 on success and 0 on error. - */ -int ossl_quic_sstream_mark_acked_fin(QUIC_SSTREAM *qss); - -/* - * (Front end use.) Appends user data to the stream. The data is copied into the - * stream. The amount of data consumed from buf is written to *consumed on - * success (short writes are possible). The amount of data which can be written - * can be determined in advance by calling the ossl_quic_sstream_get_buffer_avail() - * function; data is copied into an internal ring buffer of finite size. - * - * If the buffer is full, this should be materialised as a backpressure - * condition by the front end. This is not considered a failure condition; - * *consumed is written as 0 and the function returns 1. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_sstream_append(QUIC_SSTREAM *qss, - const unsigned char *buf, - size_t buf_len, - size_t *consumed); - -/* - * Marks a stream as finished. ossl_quic_sstream_append() may not be called anymore - * after calling this. - */ -void ossl_quic_sstream_fin(QUIC_SSTREAM *qss); - -/* - * If the stream has had ossl_quic_sstream_fin() called, returns 1 and writes - * the final size to *final_size. Otherwise, returns 0. - */ -int ossl_quic_sstream_get_final_size(QUIC_SSTREAM *qss, uint64_t *final_size); - -/* - * Returns 1 iff all bytes (and any FIN, if any) which have been appended to the - * QUIC_SSTREAM so far, and any FIN (if any), have been both sent and acked. - */ -int ossl_quic_sstream_is_totally_acked(QUIC_SSTREAM *qss); - -/* - * Resizes the internal ring buffer. All stream data is preserved safely. - * - * This can be used to expand or contract the ring buffer, but not to contract - * the ring buffer below the amount of stream data currently stored in it. - * Returns 1 on success and 0 on failure. - * - * IMPORTANT: Any buffers referenced by iovecs output by - * ossl_quic_sstream_get_stream_frame() cease to be valid after calling this function. - */ -int ossl_quic_sstream_set_buffer_size(QUIC_SSTREAM *qss, size_t num_bytes); - -/* - * Gets the internal ring buffer size in bytes. - */ -size_t ossl_quic_sstream_get_buffer_size(QUIC_SSTREAM *qss); - -/* - * Gets the number of bytes used in the internal ring buffer. - */ -size_t ossl_quic_sstream_get_buffer_used(QUIC_SSTREAM *qss); - -/* - * Gets the number of bytes free in the internal ring buffer. - */ -size_t ossl_quic_sstream_get_buffer_avail(QUIC_SSTREAM *qss); - -/* - * Utility function to ensure the length of an array of iovecs matches the - * length given as len. Trailing iovecs have their length values reduced or set - * to 0 as necessary. - */ -void ossl_quic_sstream_adjust_iov(size_t len, - OSSL_QTX_IOVEC *iov, - size_t num_iov); - -/* - * Sets flag to cleanse the buffered data when it is acked. - */ -void ossl_quic_sstream_set_cleanse(QUIC_SSTREAM *qss, int cleanse); - -/* - * QUIC Receive Stream Manager - * =========================== - * - * The QUIC Receive Stream Manager (QUIC_RSTREAM) is responsible for - * storing the received stream data frames until the application - * is able to read the data. - * - * The QUIC_RSTREAM is instantiated once for every stream that can receive data. - * (i.e., for a unidirectional receiving stream or for the receiving component - * of a bidirectional stream). - */ -typedef struct quic_rstream_st QUIC_RSTREAM; - -/* - * Create a new instance of QUIC_RSTREAM with pointers to the flow - * controller and statistics module. They can be NULL for unit testing. - * If they are non-NULL, the `rxfc` is called when receive stream data - * is read by application. `statm` is queried for current rtt. - * `rbuf_size` is the initial size of the ring buffer to be used - * when ossl_quic_rstream_move_to_rbuf() is called. - */ -QUIC_RSTREAM *ossl_quic_rstream_new(QUIC_RXFC *rxfc, - OSSL_STATM *statm, size_t rbuf_size); - -/* - * Frees a QUIC_RSTREAM and any associated storage. - */ -void ossl_quic_rstream_free(QUIC_RSTREAM *qrs); - -/* - * Adds received stream frame data to `qrs`. The `pkt_wrap` refcount is - * incremented if the `data` is queued directly without copying. - * It can be NULL for unit-testing purposes, i.e. if `data` is static or - * never released before calling ossl_quic_rstream_free(). - * The `offset` is the absolute offset of the data in the stream. - * `data_len` can be 0 - can be useful for indicating `fin` for empty stream. - * Or to indicate `fin` without any further data added to the stream. - */ - -int ossl_quic_rstream_queue_data(QUIC_RSTREAM *qrs, OSSL_QRX_PKT *pkt, - uint64_t offset, - const unsigned char *data, uint64_t data_len, - int fin); - -/* - * Copies the data from the stream storage to buffer `buf` of size `size`. - * `readbytes` is set to the number of bytes actually copied. - * `fin` is set to 1 if all the data from the stream were read so the - * stream is finished. It is set to 0 otherwise. - */ -int ossl_quic_rstream_read(QUIC_RSTREAM *qrs, unsigned char *buf, size_t size, - size_t *readbytes, int *fin); - -/* - * Peeks at the data in the stream storage. It copies them to buffer `buf` - * of size `size` and sets `readbytes` to the number of bytes actually copied. - * `fin` is set to 1 if the copied data reach end of the stream. - * It is set to 0 otherwise. - */ -int ossl_quic_rstream_peek(QUIC_RSTREAM *qrs, unsigned char *buf, size_t size, - size_t *readbytes, int *fin); - -/* - * Returns the size of the data available for reading. `fin` is set to 1 if - * after reading all the available data the stream will be finished, - * set to 0 otherwise. - */ -int ossl_quic_rstream_available(QUIC_RSTREAM *qrs, size_t *avail, int *fin); - -/* - * Sets *record to the beginning of the first readable stream data chunk and - * *reclen to the size of the chunk. *fin is set to 1 if the end of the - * chunk is the last of the stream data chunks. - * If there is no record available *record is set to NULL and *rec_len to 0; - * ossl_quic_rstream_release_record() should not be called in that case. - * Returns 1 on success (including calls if no record is available, or - * after end of the stream - in that case *fin will be set to 1 and - * *rec_len to 0), 0 on error. - * It is an error to call ossl_quic_rstream_get_record() multiple times - * without calling ossl_quic_rstream_release_record() in between. - */ -int ossl_quic_rstream_get_record(QUIC_RSTREAM *qrs, - const unsigned char **record, size_t *rec_len, - int *fin); - -/* - * Releases (possibly partially) the record returned by - * previous ossl_quic_rstream_get_record() call. - * read_len between previously returned *rec_len and SIZE_MAX indicates - * release of the whole record. Otherwise only part of the record is - * released. The remaining part of the record is unlocked, another - * call to ossl_quic_rstream_get_record() is needed to obtain further - * stream data. - * Returns 1 on success, 0 on error. - * It is an error to call ossl_quic_rstream_release_record() multiple - * times without calling ossl_quic_rstream_get_record() in between. - */ -int ossl_quic_rstream_release_record(QUIC_RSTREAM *qrs, size_t read_len); - -/* - * Moves received frame data from decrypted packets to ring buffer. - * This should be called when there are too many decrypted packets allocated. - * Returns 1 on success, 0 when it was not possible to release all - * referenced packets due to an insufficient size of the ring buffer. - * Exception is the packet from the record returned previously by - * ossl_quic_rstream_get_record() - that one will be always skipped. - */ -int ossl_quic_rstream_move_to_rbuf(QUIC_RSTREAM *qrs); - -/* - * Resizes the internal ring buffer to a new `rbuf_size` size. - * Returns 1 on success, 0 on error. - * Possible error conditions are an allocation failure, trying to resize - * the ring buffer when ossl_quic_rstream_get_record() was called and - * not yet released, or trying to resize the ring buffer to a smaller size - * than currently occupied. - */ -int ossl_quic_rstream_resize_rbuf(QUIC_RSTREAM *qrs, size_t rbuf_size); - -/* - * Sets flag to cleanse the buffered data when user reads it. - */ -void ossl_quic_rstream_set_cleanse(QUIC_RSTREAM *qrs, int cleanse); -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_stream_map.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_stream_map.h deleted file mode 100644 index ae749061..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_stream_map.h +++ /dev/null @@ -1,878 +0,0 @@ -/* -* 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_INTERNAL_QUIC_STREAM_MAP_H -# define OSSL_INTERNAL_QUIC_STREAM_MAP_H -# pragma once - -# include "internal/e_os.h" -# include "internal/time.h" -# include "internal/common.h" -# include "internal/quic_types.h" -# include "internal/quic_stream.h" -# include "internal/quic_fc.h" -# include - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Stream - * =========== - * - * Logical QUIC stream composing all relevant send and receive components. - */ -typedef struct quic_stream_st QUIC_STREAM; - -typedef struct quic_stream_list_node_st QUIC_STREAM_LIST_NODE; - -struct quic_stream_list_node_st { - QUIC_STREAM_LIST_NODE *prev, *next; -}; - -/* - * QUIC Send Stream States - * ----------------------- - * - * These correspond to the states defined in RFC 9000 s. 3.1, with the - * exception of the NONE state which represents the absence of a send stream - * part. - * - * Invariants in each state are noted in comments below. In particular, once all - * data has been acknowledged received, or we have reset the stream, we don't - * need to keep the QUIC_SSTREAM and data buffers around. Of course, we also - * don't have a QUIC_SSTREAM on a receive-only stream. - */ -#define QUIC_SSTREAM_STATE_NONE 0 /* --- sstream == NULL */ -#define QUIC_SSTREAM_STATE_READY 1 /* \ */ -#define QUIC_SSTREAM_STATE_SEND 2 /* |-- sstream != NULL */ -#define QUIC_SSTREAM_STATE_DATA_SENT 3 /* / */ -#define QUIC_SSTREAM_STATE_DATA_RECVD 4 /* \ */ -#define QUIC_SSTREAM_STATE_RESET_SENT 5 /* |-- sstream == NULL */ -#define QUIC_SSTREAM_STATE_RESET_RECVD 6 /* / */ - -/* - * QUIC Receive Stream States - * -------------------------- - * - * These correspond to the states defined in RFC 9000 s. 3.2, with the exception - * of the NONE state which represents the absence of a receive stream part. - * - * Invariants in each state are noted in comments below. In particular, once all - * data has been read by the application, we don't need to keep the QUIC_RSTREAM - * and data buffers around. If the receive part is instead reset before it is - * finished, we also don't need to keep the QUIC_RSTREAM around. Finally, we - * don't need a QUIC_RSTREAM on a send-only stream. - */ -#define QUIC_RSTREAM_STATE_NONE 0 /* --- rstream == NULL */ -#define QUIC_RSTREAM_STATE_RECV 1 /* \ */ -#define QUIC_RSTREAM_STATE_SIZE_KNOWN 2 /* |-- rstream != NULL */ -#define QUIC_RSTREAM_STATE_DATA_RECVD 3 /* / */ -#define QUIC_RSTREAM_STATE_DATA_READ 4 /* \ */ -#define QUIC_RSTREAM_STATE_RESET_RECVD 5 /* |-- rstream == NULL */ -#define QUIC_RSTREAM_STATE_RESET_READ 6 /* / */ - -struct quic_stream_st { - QUIC_STREAM_LIST_NODE active_node; /* for use by QUIC_STREAM_MAP */ - QUIC_STREAM_LIST_NODE accept_node; /* accept queue of remotely-created streams */ - QUIC_STREAM_LIST_NODE ready_for_gc_node; /* queue of streams now ready for GC */ - - /* Temporary link used by TXP. */ - QUIC_STREAM *txp_next; - - /* - * QUIC Stream ID. Do not assume that this encodes a type as this is a - * version-specific property and may change between QUIC versions; instead, - * use the type field. - */ - uint64_t id; - - /* - * Application Error Code (AEC) used for STOP_SENDING frame. - * This is only valid if stop_sending is 1. - */ - uint64_t stop_sending_aec; - - /* - * Application Error Code (AEC) used for RESET_STREAM frame. - * This is only valid if reset_stream is 1. - */ - uint64_t reset_stream_aec; - - /* - * Application Error Code (AEC) for incoming STOP_SENDING frame. - * This is only valid if peer_stop_sending is 1. - */ - uint64_t peer_stop_sending_aec; - - /* - * Application Error Code (AEC) for incoming RESET_STREAM frame. - * This is only valid if peer_reset_stream is 1. - */ - uint64_t peer_reset_stream_aec; - - /* Temporary value used by TXP. */ - uint64_t txp_txfc_new_credit_consumed; - - /* - * The final size of the send stream. Although this information can be - * discerned from a QUIC_SSTREAM, it is stored separately as we need to keep - * track of this even if we have thrown away the QUIC_SSTREAM. Use - * ossl_quic_stream_send_get_final_size to determine if this contain a - * valid value or if there is no final size yet for a sending part. - * - * For the receive part, the final size is tracked by the stream-level RXFC; - * use ossl_quic_stream_recv_get_final_size or - * ossl_quic_rxfc_get_final_size. - */ - uint64_t send_final_size; - - /* - * Send stream part and receive stream part buffer management objects. - * - * DO NOT test these pointers (sstream, rstream) for NULL. Determine the - * state of the send or receive stream part first using the appropriate - * function; then the invariant of that state guarantees that sstream or - * rstream either is or is not NULL respectively, therefore there is no - * valid use case for testing these pointers for NULL. In particular, a - * stream with a send part can still have sstream as NULL, and a stream with - * a receive part can still have rstream as NULL. QUIC_SSTREAM and - * QUIC_RSTREAM are stream buffer resource management objects which exist - * only when they need to for buffer management purposes. The existence or - * non-existence of a QUIC_SSTREAM or QUIC_RSTREAM object does not - * correspond with whether a stream's respective send or receive part - * logically exists or not. - */ - QUIC_SSTREAM *sstream; /* NULL if RX-only */ - QUIC_RSTREAM *rstream; /* NULL if TX only */ - - /* Stream-level flow control managers. */ - QUIC_TXFC txfc; /* NULL if RX-only */ - QUIC_RXFC rxfc; /* NULL if TX-only */ - - unsigned int type : 8; /* QUIC_STREAM_INITIATOR_*, QUIC_STREAM_DIR_* */ - - unsigned int send_state : 8; /* QUIC_SSTREAM_STATE_* */ - unsigned int recv_state : 8; /* QUIC_RSTREAM_STATE_* */ - - /* 1 iff this QUIC_STREAM is on the active queue (invariant). */ - unsigned int active : 1; - - /* - * This is a copy of the QUIC connection as_server value, indicating - * whether we are locally operating as a server or not. Having this - * significantly simplifies stream type determination relative to our - * perspective. It never changes after a QUIC_STREAM is created and is the - * same for all QUIC_STREAMS under a QUIC_STREAM_MAP. - */ - unsigned int as_server : 1; - - /* - * Has STOP_SENDING been requested (by us)? Note that this is not the same - * as want_stop_sending below, as a STOP_SENDING frame may already have been - * sent and fully acknowledged. - */ - unsigned int stop_sending : 1; - - /* - * Has RESET_STREAM been requested (by us)? Works identically to - * STOP_SENDING for transmission purposes. - */ - /* Has our peer sent a STOP_SENDING frame? */ - unsigned int peer_stop_sending : 1; - - /* Temporary flags used by TXP. */ - unsigned int txp_sent_fc : 1; - unsigned int txp_sent_stop_sending : 1; - unsigned int txp_sent_reset_stream : 1; - unsigned int txp_drained : 1; - unsigned int txp_blocked : 1; - - /* Frame regeneration flags. */ - unsigned int want_max_stream_data : 1; /* used for regen only */ - unsigned int want_stop_sending : 1; /* used for gen or regen */ - unsigned int want_reset_stream : 1; /* used for gen or regen */ - - /* Flags set when frames *we* sent were acknowledged. */ - unsigned int acked_stop_sending : 1; - - /* - * The stream's XSO has been deleted. Pending GC. - * - * Here is how stream deletion works: - * - * - A QUIC_STREAM cannot be deleted until it is neither in the accept - * queue nor has an associated XSO. This condition occurs when and only - * when deleted is true. - * - * - Once this is the case (i.e., no user-facing API object exposing the - * stream), we can delete the stream once we determine that all of our - * protocol obligations requiring us to keep the QUIC_STREAM around have - * been met. - * - * The following frames relate to the streams layer for a specific - * stream: - * - * STREAM - * - * RX Obligations: - * Ignore for a deleted stream. - * - * (This is different from our obligation for a - * locally-initiated stream ID we have not created yet, - * which we must treat as a protocol error. This can be - * distinguished via a simple monotonic counter.) - * - * TX Obligations: - * None, once we've decided to (someday) delete the stream. - * - * STOP_SENDING - * - * We cannot delete the stream until we have finished informing - * the peer that we are not going to be listening to it - * anymore. - * - * RX Obligations: - * When we delete a stream we must have already had a FIN - * or RESET_STREAM we transmitted acknowledged by the peer. - * Thus we can ignore STOP_SENDING frames for deleted - * streams (if they occur, they are probably just - * retransmissions). - * - * TX Obligations: - * _Acknowledged_ receipt of a STOP_SENDING frame by the - * peer (unless the peer's send part has already FIN'd). - * - * RESET_STREAM - * - * We cannot delete the stream until we have finished informing - * the peer that we are not going to be transmitting on it - * anymore. - * - * RX Obligations: - * This indicates the peer is not going to send any more - * data on the stream. We don't need to care about this - * since once a stream is marked for deletion we don't care - * about any data it does send. We can ignore this for - * deleted streams. The important criterion is that the - * peer has been successfully delivered our STOP_SENDING - * frame. - * - * TX Obligations: - * _Acknowledged_ receipt of a RESET_STREAM frame or FIN by - * the peer. - * - * MAX_STREAM_DATA - * - * RX Obligations: - * Ignore. Since we are not going to be sending any more - * data on a stream once it has been marked for deletion, - * we don't need to care about flow control information. - * - * TX Obligations: - * None. - * - * In other words, our protocol obligation is simply: - * - * - either: - * - the peer has acknowledged receipt of a STOP_SENDING frame sent - * by us; -or- - * - we have received a FIN and all preceding segments from the peer - * - * [NOTE: The actual criterion required here is simply 'we have - * received a FIN from the peer'. However, due to reordering and - * retransmissions we might subsequently receive non-FIN segments - * out of order. The FIN means we know the peer will stop - * transmitting on the stream at *some* point, but by sending - * STOP_SENDING we can avoid these needless retransmissions we - * will just ignore anyway. In actuality we could just handle all - * cases by sending a STOP_SENDING. The strategy we choose is to - * only avoid sending a STOP_SENDING and rely on a received FIN - * when we have received all preceding data, as this makes it - * reasonably certain no benefit would be gained by sending - * STOP_SENDING.] - * - * TODO(QUIC FUTURE): Implement the latter case (currently we - just always do STOP_SENDING). - * - * and; - * - * - we have drained our send stream (for a finished send stream) - * and got acknowledgement all parts of it including the FIN, or - * sent a RESET_STREAM frame and got acknowledgement of that frame. - * - * Once these conditions are met, we can GC the QUIC_STREAM. - * - */ - unsigned int deleted : 1; - /* Set to 1 once the above conditions are actually met. */ - unsigned int ready_for_gc : 1; - /* Set to 1 if this is currently counted in the shutdown flush stream count. */ - unsigned int shutdown_flush : 1; -}; - -#define QUIC_STREAM_INITIATOR_CLIENT 0 -#define QUIC_STREAM_INITIATOR_SERVER 1 -#define QUIC_STREAM_INITIATOR_MASK 1 - -#define QUIC_STREAM_DIR_BIDI 0 -#define QUIC_STREAM_DIR_UNI 2 -#define QUIC_STREAM_DIR_MASK 2 - -void ossl_quic_stream_check(const QUIC_STREAM *s); - -/* - * Returns 1 if the QUIC_STREAM was initiated by the endpoint with the server - * role. - */ -static ossl_inline ossl_unused int ossl_quic_stream_is_server_init(const QUIC_STREAM *s) -{ - return (s->type & QUIC_STREAM_INITIATOR_MASK) == QUIC_STREAM_INITIATOR_SERVER; -} - -/* - * Returns 1 if the QUIC_STREAM is bidirectional and 0 if it is unidirectional. - */ -static ossl_inline ossl_unused int ossl_quic_stream_is_bidi(const QUIC_STREAM *s) -{ - return (s->type & QUIC_STREAM_DIR_MASK) == QUIC_STREAM_DIR_BIDI; -} - -/* Returns 1 if the QUIC_STREAM was locally initiated. */ -static ossl_inline ossl_unused int ossl_quic_stream_is_local_init(const QUIC_STREAM *s) -{ - return ossl_quic_stream_is_server_init(s) == s->as_server; -} - -/* - * Returns 1 if the QUIC_STREAM has a sending part, based on its stream type. - * - * Do NOT use (s->sstream != NULL) to test this; use this function. Note that - * even if this function returns 1, s->sstream might be NULL if the QUIC_SSTREAM - * has been deemed no longer needed, for example due to a RESET_STREAM. - */ -static ossl_inline ossl_unused int ossl_quic_stream_has_send(const QUIC_STREAM *s) -{ - return s->send_state != QUIC_SSTREAM_STATE_NONE; -} - -/* - * Returns 1 if the QUIC_STREAM has a receiving part, based on its stream type. - * - * Do NOT use (s->rstream != NULL) to test this; use this function. Note that - * even if this function returns 1, s->rstream might be NULL if the QUIC_RSTREAM - * has been deemed no longer needed, for example if the receive stream is - * completely finished with. - */ -static ossl_inline ossl_unused int ossl_quic_stream_has_recv(const QUIC_STREAM *s) -{ - return s->recv_state != QUIC_RSTREAM_STATE_NONE; -} - -/* - * Returns 1 if the QUIC_STREAM has a QUIC_SSTREAM send buffer associated with - * it. If this returns 1, s->sstream is guaranteed to be non-NULL. The converse - * is not necessarily true; erasure of a send stream buffer which is no longer - * required is an optimisation which the QSM may, but is not obliged, to - * perform. - * - * This call should be used where it is desired to do something with the send - * stream buffer but there is no more specific send state restriction which is - * applicable. - * - * Note: This does NOT indicate whether it is suitable to allow an application - * to append to the buffer. DATA_SENT indicates all data (including FIN) has - * been *sent*; the absence of DATA_SENT does not mean a FIN has not been queued - * (meaning no more application data can be appended). This is enforced by - * QUIC_SSTREAM. - */ -static ossl_inline ossl_unused int ossl_quic_stream_has_send_buffer(const QUIC_STREAM *s) -{ - switch (s->send_state) { - case QUIC_SSTREAM_STATE_READY: - case QUIC_SSTREAM_STATE_SEND: - case QUIC_SSTREAM_STATE_DATA_SENT: - return 1; - default: - return 0; - } -} - -/* - * Returns 1 if the QUIC_STREAM has a sending part which is in one of the reset - * states. - */ -static ossl_inline ossl_unused int ossl_quic_stream_send_is_reset(const QUIC_STREAM *s) -{ - return s->send_state == QUIC_SSTREAM_STATE_RESET_SENT - || s->send_state == QUIC_SSTREAM_STATE_RESET_RECVD; -} - -/* - * Returns 1 if the QUIC_STREAM has a QUIC_RSTREAM receive buffer associated - * with it. If this returns 1, s->rstream is guaranteed to be non-NULL. The - * converse is not necessarily true; erasure of a receive stream buffer which is - * no longer required is an optimisation which the QSM may, but is not obliged, - * to perform. - * - * This call should be used where it is desired to do something with the receive - * stream buffer but there is no more specific receive state restriction which is - * applicable. - */ -static ossl_inline ossl_unused int ossl_quic_stream_has_recv_buffer(const QUIC_STREAM *s) -{ - switch (s->recv_state) { - case QUIC_RSTREAM_STATE_RECV: - case QUIC_RSTREAM_STATE_SIZE_KNOWN: - case QUIC_RSTREAM_STATE_DATA_RECVD: - return 1; - default: - return 0; - } -} - -/* - * Returns 1 if the QUIC_STREAM has a receiving part which is in one of the - * reset states. - */ -static ossl_inline ossl_unused int ossl_quic_stream_recv_is_reset(const QUIC_STREAM *s) -{ - return s->recv_state == QUIC_RSTREAM_STATE_RESET_RECVD - || s->recv_state == QUIC_RSTREAM_STATE_RESET_READ; -} - -/* - * Returns 1 if the stream has a send part and that part has a final size. - * - * If final_size is non-NULL, *final_size is the final size (on success) or an - * undefined value otherwise. - */ -static ossl_inline ossl_unused int ossl_quic_stream_send_get_final_size(const QUIC_STREAM *s, - uint64_t *final_size) -{ - switch (s->send_state) { - default: - case QUIC_SSTREAM_STATE_NONE: - return 0; - case QUIC_SSTREAM_STATE_SEND: - /* - * SEND may or may not have had a FIN - even if we have a FIN we do not - * move to DATA_SENT until we have actually sent all the data. So - * ask the QUIC_SSTREAM. - */ - return ossl_quic_sstream_get_final_size(s->sstream, final_size); - case QUIC_SSTREAM_STATE_DATA_SENT: - case QUIC_SSTREAM_STATE_DATA_RECVD: - case QUIC_SSTREAM_STATE_RESET_SENT: - case QUIC_SSTREAM_STATE_RESET_RECVD: - if (final_size != NULL) - *final_size = s->send_final_size; - return 1; - } -} - -/* - * Returns 1 if the stream has a receive part and that part has a final size. - * - * If final_size is non-NULL, *final_size is the final size (on success) or an - * undefined value otherwise. - */ -static ossl_inline ossl_unused int ossl_quic_stream_recv_get_final_size(const QUIC_STREAM *s, - uint64_t *final_size) -{ - switch (s->recv_state) { - default: - case QUIC_RSTREAM_STATE_NONE: - case QUIC_RSTREAM_STATE_RECV: - return 0; - - case QUIC_RSTREAM_STATE_SIZE_KNOWN: - case QUIC_RSTREAM_STATE_DATA_RECVD: - case QUIC_RSTREAM_STATE_DATA_READ: - case QUIC_RSTREAM_STATE_RESET_RECVD: - case QUIC_RSTREAM_STATE_RESET_READ: - if (!ossl_assert(ossl_quic_rxfc_get_final_size(&s->rxfc, final_size))) - return 0; - - return 1; - } -} - -/* - * QUIC Stream Map - * =============== - * - * The QUIC stream map: - * - * - maps stream IDs to QUIC_STREAM objects; - * - tracks which streams are 'active' (currently have data for transmission); - * - allows iteration over the active streams only. - * - */ -typedef struct quic_stream_map_st { - LHASH_OF(QUIC_STREAM) *map; - QUIC_STREAM_LIST_NODE active_list; - QUIC_STREAM_LIST_NODE accept_list; - QUIC_STREAM_LIST_NODE ready_for_gc_list; - size_t rr_stepping, rr_counter; - size_t num_accept, num_shutdown_flush; - QUIC_STREAM *rr_cur; - uint64_t (*get_stream_limit_cb)(int uni, void *arg); - void *get_stream_limit_cb_arg; - QUIC_RXFC *max_streams_bidi_rxfc; - QUIC_RXFC *max_streams_uni_rxfc; - int is_server; -} QUIC_STREAM_MAP; - -/* - * get_stream_limit is a callback which is called to retrieve the current stream - * limit for streams created by us. This mechanism is not used for - * peer-initiated streams. If a stream's stream ID is x, a stream is allowed if - * (x >> 2) < returned limit value; i.e., the returned value is exclusive. - * - * If uni is 1, get the limit for locally-initiated unidirectional streams, else - * get the limit for locally-initiated bidirectional streams. - * - * If the callback is NULL, stream limiting is not applied. - * Stream limiting is used to determine if frames can currently be produced for - * a stream. - */ -int ossl_quic_stream_map_init(QUIC_STREAM_MAP *qsm, - uint64_t (*get_stream_limit_cb)(int uni, void *arg), - void *get_stream_limit_cb_arg, - QUIC_RXFC *max_streams_bidi_rxfc, - QUIC_RXFC *max_streams_uni_rxfc, - int is_server); - -/* - * Any streams still in the map will be released as though - * ossl_quic_stream_map_release was called on them. - */ -void ossl_quic_stream_map_cleanup(QUIC_STREAM_MAP *qsm); - -/* - * Allocate a new stream. type is a combination of one QUIC_STREAM_INITIATOR_* - * value and one QUIC_STREAM_DIR_* value. Note that clients can e.g. allocate - * server-initiated streams as they will need to allocate a QUIC_STREAM - * structure to track any stream created by the server, etc. - * - * stream_id must be a valid value. Returns NULL if a stream already exists - * with the given ID. - */ -QUIC_STREAM *ossl_quic_stream_map_alloc(QUIC_STREAM_MAP *qsm, - uint64_t stream_id, - int type); - -/* - * Releases a stream object. Note that this must only be done once the teardown - * process is entirely complete and the object will never be referenced again. - */ -void ossl_quic_stream_map_release(QUIC_STREAM_MAP *qsm, QUIC_STREAM *stream); - -/* - * Calls visit_cb() for each stream in the map. visit_cb_arg is an opaque - * argument which is passed through. - */ -void ossl_quic_stream_map_visit(QUIC_STREAM_MAP *qsm, - void (*visit_cb)(QUIC_STREAM *stream, void *arg), - void *visit_cb_arg); - -/* - * Retrieves a stream by stream ID. Returns NULL if it does not exist. - */ -QUIC_STREAM *ossl_quic_stream_map_get_by_id(QUIC_STREAM_MAP *qsm, - uint64_t stream_id); - -/* - * Marks the given stream as active or inactive based on its state. Idempotent. - * - * When a stream is marked active, it becomes available in the iteration list, - * and when a stream is marked inactive, it no longer appears in the iteration - * list. - * - * Calling this function invalidates any iterator currently pointing at the - * given stream object, but iterators not currently pointing at the given stream - * object are not invalidated. - */ -void ossl_quic_stream_map_update_state(QUIC_STREAM_MAP *qsm, QUIC_STREAM *s); - -/* - * Sets the RR stepping value, n. The RR rotation will be advanced every n - * packets. The default value is 1. - */ -void ossl_quic_stream_map_set_rr_stepping(QUIC_STREAM_MAP *qsm, size_t stepping); - -/* - * Returns 1 if the stream ordinal given is allowed by the current stream count - * flow control limit, assuming a locally initiated stream of a type described - * by is_uni. - * - * Note that stream_ordinal is a stream ordinal, not a stream ID. - */ -int ossl_quic_stream_map_is_local_allowed_by_stream_limit(QUIC_STREAM_MAP *qsm, - uint64_t stream_ordinal, - int is_uni); - -/* - * Stream Send Part - * ================ - */ - -/* - * Ensures that the sending part has transitioned out of the READY state (i.e., - * to SEND, or a subsequent state). This function is named as it is because, - * while on paper the distinction between READY and SEND is whether we have - * started transmitting application data, in practice the meaningful distinction - * between the two states is whether we have allocated a stream ID to the stream - * or not. QUIC permits us to defer stream ID allocation until first STREAM (or - * STREAM_DATA_BLOCKED) frame transmission for locally-initiated streams. - * - * Our implementation does not currently do this and we allocate stream IDs up - * front, however we may revisit this in the future. Calling this represents a - * demand for a stream ID by the caller and ensures one has been allocated to - * the stream, and causes us to transition to SEND if we are still in the READY - * state. - * - * Returns 0 if there is no send part (caller error) and 1 otherwise. - */ -int ossl_quic_stream_map_ensure_send_part_id(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - -/* - * Transitions from SEND to the DATA_SENT state. Note that this is NOT the same - * as the point in time at which the final size of the stream becomes known - * (i.e., the time at which ossl_quic_sstream_fin()) is called as it occurs when - * we have SENT all data on a given stream send part, not merely buffered it. - * Note that this transition is NOT reversed in the event of some of that data - * being lost. - * - * Returns 1 if the state transition was successfully taken. Returns 0 if there - * is no send part (caller error) or if the state transition cannot be taken - * because the send part is not in the SEND state. - */ -int ossl_quic_stream_map_notify_all_data_sent(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - -/* - * Transitions from the DATA_SENT to DATA_RECVD state; should be called - * when all transmitted stream data is ACKed by the peer. - * - * Returns 1 if the state transition was successfully taken. Returns 0 if there - * is no send part (caller error) or the state transition cannot be taken - * because the send part is not in the DATA_SENT state. Because - * ossl_quic_stream_map_notify_all_data_sent() should always be called prior to - * this function, the send state must already be in DATA_SENT in order for this - * function to succeed. - */ -int ossl_quic_stream_map_notify_totally_acked(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - -/* - * Resets the sending part of a stream. This is a transition from the READY, - * SEND or DATA_SENT send stream states to the RESET_SENT state. - * - * This function returns 1 if the transition is taken (i.e., if the send stream - * part was in one of the states above), or if it is already in the RESET_SENT - * state (idempotent operation), or if it has reached the RESET_RECVD state. - * - * It returns 0 if in the DATA_RECVD state, as a send stream cannot be reset - * in this state. It also returns 0 if there is no send part (caller error). - */ -int ossl_quic_stream_map_reset_stream_send_part(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs, - uint64_t aec); - -/* - * Transitions from the RESET_SENT to the RESET_RECVD state. This should be - * called when a sent RESET_STREAM frame has been acknowledged by the peer. - * - * This function returns 1 if the transition is taken (i.e., if the send stream - * part was in one of the states above) or if it is already in the RESET_RECVD - * state (idempotent operation). - * - * It returns 0 if not in the RESET_SENT or RESET_RECVD states, as this function - * should only be called after we have already sent a RESET_STREAM frame and - * entered the RESET_SENT state. It also returns 0 if there is no send part - * (caller error). - */ -int ossl_quic_stream_map_notify_reset_stream_acked(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - - -/* - * Stream Receive Part - * =================== - */ - -/* - * Transitions from the RECV receive stream state to the SIZE_KNOWN state. This - * should be called once a STREAM frame is received for the stream with the FIN - * bit set. final_size should be the final size of the stream in bytes. - * - * Returns 1 if the transition was taken. - */ -int ossl_quic_stream_map_notify_size_known_recv_part(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs, - uint64_t final_size); - -/* - * Transitions from the SIZE_KNOWN receive stream state to the DATA_RECVD state. - * This should be called once all data for a receive stream is received. - * - * Returns 1 if the transition was taken. - */ -int ossl_quic_stream_map_notify_totally_received(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - -/* - * Transitions from the DATA_RECVD receive stream state to the DATA_READ state. - * This should be called once all data for a receive stream is read by the - * application. - * - * Returns 1 if the transition was taken. - */ -int ossl_quic_stream_map_notify_totally_read(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - -/* - * Transitions from the RECV, SIZE_KNOWN or DATA_RECVD receive stream state to - * the RESET_RECVD state. This should be called on RESET_STREAM. - * - * Returns 1 if the transition was taken. - */ -int ossl_quic_stream_map_notify_reset_recv_part(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs, - uint64_t app_error_code, - uint64_t final_size); - -/* - * Transitions from the RESET_RECVD receive stream state to the RESET_READ - * receive stream state. This should be called when the application is notified - * of a stream reset. - */ -int ossl_quic_stream_map_notify_app_read_reset_recv_part(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - -/* - * Marks the receiving part of a stream for STOP_SENDING. This is orthogonal to - * receive stream state as it does not affect it directly. - * - * Returns 1 if the receiving part of a stream was not already marked for - * STOP_SENDING. - * Returns 0 otherwise, which need not be considered an error. - */ -int ossl_quic_stream_map_stop_sending_recv_part(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs, - uint64_t aec); - -/* - * Marks the stream as wanting a STOP_SENDING frame transmitted. It is not valid - * to call this if ossl_quic_stream_map_stop_sending_recv_part() has not been - * called. For TXP use. - */ -int ossl_quic_stream_map_schedule_stop_sending(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *qs); - - -/* - * Accept Queue Management - * ======================= - */ - -/* - * Adds a stream to the accept queue. - */ -void ossl_quic_stream_map_push_accept_queue(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *s); - -/* - * Returns the next item to be popped from the accept queue, or NULL if it is - * empty. - */ -QUIC_STREAM *ossl_quic_stream_map_peek_accept_queue(QUIC_STREAM_MAP *qsm); - -/* - * Removes a stream from the accept queue. rtt is the estimated connection RTT. - * The stream is retired for the purposes of MAX_STREAMS RXFC. - * - * Precondition: s is in the accept queue. - */ -void ossl_quic_stream_map_remove_from_accept_queue(QUIC_STREAM_MAP *qsm, - QUIC_STREAM *s, - OSSL_TIME rtt); - -/* Returns the length of the accept queue. */ -size_t ossl_quic_stream_map_get_accept_queue_len(QUIC_STREAM_MAP *qsm); - -/* - * Shutdown Flush and GC - * ===================== - */ - -/* - * Delete streams ready for GC. Pointers to those QUIC_STREAM objects become - * invalid. - */ -void ossl_quic_stream_map_gc(QUIC_STREAM_MAP *qsm); - -/* - * Begins shutdown stream flush triage. Analyses all streams, including deleted - * but not yet GC'd streams, to determine if we should wait for that stream to - * be fully flushed before shutdown. After calling this, call - * ossl_quic_stream_map_is_shutdown_flush_finished() to determine if all - * shutdown flush eligible streams have been flushed. - */ -void ossl_quic_stream_map_begin_shutdown_flush(QUIC_STREAM_MAP *qsm); - -/* - * Returns 1 if all shutdown flush eligible streams have finished flushing, - * or if ossl_quic_stream_map_begin_shutdown_flush() has not been called. - */ -int ossl_quic_stream_map_is_shutdown_flush_finished(QUIC_STREAM_MAP *qsm); - -/* - * QUIC Stream Iterator - * ==================== - * - * Allows the current set of active streams to be walked using a RR-based - * algorithm. Each time ossl_quic_stream_iter_init is called, the RR algorithm - * is stepped. The RR algorithm rotates the iteration order such that the next - * active stream is returned first after n calls to ossl_quic_stream_iter_init, - * where n is the stepping value configured via - * ossl_quic_stream_map_set_rr_stepping. - * - * Suppose there are three active streams and the configured stepping is n: - * - * Iteration 0n: [Stream 1] [Stream 2] [Stream 3] - * Iteration 1n: [Stream 2] [Stream 3] [Stream 1] - * Iteration 2n: [Stream 3] [Stream 1] [Stream 2] - * - */ -typedef struct quic_stream_iter_st { - QUIC_STREAM_MAP *qsm; - QUIC_STREAM *first_stream, *stream; -} QUIC_STREAM_ITER; - -/* - * Initialise an iterator, advancing the RR algorithm as necessary (if - * advance_rr is 1). After calling this, it->stream will be the first stream in - * the iteration sequence, or NULL if there are no active streams. - */ -void ossl_quic_stream_iter_init(QUIC_STREAM_ITER *it, QUIC_STREAM_MAP *qsm, - int advance_rr); - -/* - * Advances to next stream in iteration sequence. You do not need to call this - * immediately after calling ossl_quic_stream_iter_init(). If the end of the - * list is reached, it->stream will be NULL after calling this. - */ -void ossl_quic_stream_iter_next(QUIC_STREAM_ITER *it); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_thread_assist.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_thread_assist.h deleted file mode 100644 index 592c2ffa..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_thread_assist.h +++ /dev/null @@ -1,102 +0,0 @@ -/* - * Copyright 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_QUIC_THREAD_ASSIST_H -# define OSSL_QUIC_THREAD_ASSIST_H - -# include -# include "internal/thread.h" -# include "internal/time.h" - -# if defined(OPENSSL_NO_QUIC) || defined(OPENSSL_NO_THREAD_POOL) -# define OPENSSL_NO_QUIC_THREAD_ASSIST -# endif - -# ifndef OPENSSL_NO_QUIC_THREAD_ASSIST - -/* - * QUIC Thread Assisted Functionality - * ================================== - * - * Where OS threading support is available, QUIC can optionally support a thread - * assisted mode of operation. The purpose of this mode of operation is to - * ensure that assorted timeout events which QUIC expects to be handled in a - * timely manner can be handled without the application needing to ensure that - * SSL_tick() is called on time. This is not needed if the application always - * has a call blocking to SSL_read() or SSL_write() (or another I/O function) on - * a QUIC SSL object, but if the application goes for long periods of time - * without making any such call to a QUIC SSL object, libssl cannot ordinarily - * guarantee that QUIC timeout events will be serviced in a timely fashion. - * Thread assisted mode is therefore of use to applications which do not always - * have an ongoing call to an I/O function on a QUIC SSL object but also do not - * want to have to arrange periodic ticking. - * - * A consequence of this is that the intrusiveness of thread assisted mode upon - * the general architecture of our QUIC engine is actually fairly limited and - * amounts to an automatic ticking of the QUIC engine when timeouts expire, - * synchronised correctly with an application's own threads using locking. - */ -typedef struct quic_thread_assist_st { - QUIC_CHANNEL *ch; - CRYPTO_CONDVAR *cv; - CRYPTO_THREAD *t; - int teardown, joined; - OSSL_TIME (*now_cb)(void *arg); - void *now_cb_arg; -} QUIC_THREAD_ASSIST; - -/* - * Initialise the thread assist object. The channel must have a valid mutex - * configured on it which will be retrieved automatically. It is assumed that - * the mutex is currently held when this function is called. This function does - * not affect the state of the mutex. - */ -int ossl_quic_thread_assist_init_start(QUIC_THREAD_ASSIST *qta, - QUIC_CHANNEL *ch, - OSSL_TIME (*now_cb)(void *arg), - void *now_cb_arg); - -/* - * Request the thread assist helper to begin stopping the assist thread. This - * returns before the teardown is complete. Idempotent; multiple calls to this - * function are inconsequential. - * - * Precondition: channel mutex must be held (unchecked) - */ -int ossl_quic_thread_assist_stop_async(QUIC_THREAD_ASSIST *qta); - -/* - * Wait until the thread assist helper is torn down. This automatically implies - * the effects of ossl_quic_thread_assist_stop_async(). Returns immediately - * if the teardown has already completed. - * - * Precondition: channel mutex must be held (unchecked) - */ -int ossl_quic_thread_assist_wait_stopped(QUIC_THREAD_ASSIST *qta); - -/* - * Deallocates state associated with the thread assist helper. - * ossl_quic_thread_assist_wait_stopped() must have returned successfully before - * calling this. It does not matter whether the channel mutex is held or not. - * - * Precondition: ossl_quic_thread_assist_wait_stopped() has returned 1 - * (asserted) - */ -int ossl_quic_thread_assist_cleanup(QUIC_THREAD_ASSIST *qta); - -/* - * Must be called to notify the assist thread if the channel deadline changes. - * - * Precondition: channel mutex must be held (unchecked) - */ -int ossl_quic_thread_assist_notify_deadline_changed(QUIC_THREAD_ASSIST *qta); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_tls.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_tls.h deleted file mode 100644 index 0e4a9d33..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_tls.h +++ /dev/null @@ -1,106 +0,0 @@ -/* - * 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_QUIC_TLS_H -# define OSSL_QUIC_TLS_H - -# include -# include "internal/quic_stream.h" - - -typedef struct quic_tls_st QUIC_TLS; - -typedef struct quic_tls_args_st { - /* - * The "inner" SSL object for the QUIC Connection. Contains an - * SSL_CONNECTION - */ - SSL *s; - - /* - * Called to send data on the crypto stream. We use a callback rather than - * passing the crypto stream QUIC_SSTREAM directly because this lets the CSM - * dynamically select the correct outgoing crypto stream based on the - * current EL. - */ - int (*crypto_send_cb)(const unsigned char *buf, size_t buf_len, - size_t *consumed, void *arg); - void *crypto_send_cb_arg; - - /* - * Call to receive crypto stream data. A pointer to the underlying buffer - * is provided, and subsequently released to avoid unnecessary copying of - * data. - */ - int (*crypto_recv_rcd_cb)(const unsigned char **buf, size_t *bytes_read, - void *arg); - void *crypto_recv_rcd_cb_arg; - int (*crypto_release_rcd_cb)(size_t bytes_read, void *arg); - void *crypto_release_rcd_cb_arg; - - - /* Called when a traffic secret is available for a given encryption level. */ - int (*yield_secret_cb)(uint32_t enc_level, int direction /* 0=RX, 1=TX */, - uint32_t suite_id, EVP_MD *md, - const unsigned char *secret, size_t secret_len, - void *arg); - void *yield_secret_cb_arg; - - /* - * Called when we receive transport parameters from the peer. - * - * Note: These parameters are not authenticated until the handshake is - * marked as completed. - */ - int (*got_transport_params_cb)(const unsigned char *params, - size_t params_len, - void *arg); - void *got_transport_params_cb_arg; - - /* - * Called when the handshake has been completed as far as the handshake - * protocol is concerned, meaning that the connection has been - * authenticated. - */ - int (*handshake_complete_cb)(void *arg); - void *handshake_complete_cb_arg; - - /* - * Called when something has gone wrong with the connection as far as the - * handshake layer is concerned, meaning that it should be immediately torn - * down. Note that this may happen at any time, including after a connection - * has been fully established. - */ - int (*alert_cb)(void *arg, unsigned char alert_code); - void *alert_cb_arg; - - /* Set to 1 if we are running in the server role. */ - int is_server; -} QUIC_TLS_ARGS; - -QUIC_TLS *ossl_quic_tls_new(const QUIC_TLS_ARGS *args); - -void ossl_quic_tls_free(QUIC_TLS *qtls); - -/* Advance the state machine */ -int ossl_quic_tls_tick(QUIC_TLS *qtls); - -int ossl_quic_tls_set_transport_params(QUIC_TLS *qtls, - const unsigned char *transport_params, - size_t transport_params_len); - -int ossl_quic_tls_get_error(QUIC_TLS *qtls, - uint64_t *error_code, - const char **error_msg, - ERR_STATE **error_state); - -int ossl_quic_tls_is_cert_request(QUIC_TLS *qtls); -int ossl_quic_tls_has_bad_max_early_data(QUIC_TLS *qtls); - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_tserver.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_tserver.h deleted file mode 100644 index 4f358dd4..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_tserver.h +++ /dev/null @@ -1,220 +0,0 @@ -/* - * 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_QUIC_TSERVER_H -# define OSSL_QUIC_TSERVER_H - -# include -# include -# include "internal/quic_stream.h" -# include "internal/quic_channel.h" -# include "internal/statem.h" -# include "internal/time.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Test Server Module - * ======================= - * - * This implements a QUIC test server. Since full QUIC server support is not yet - * implemented this server is limited in features and scope. It exists to - * provide a target for our QUIC client to talk to for testing purposes. - * - * A given QUIC test server instance supports only one client at a time. - * - * Note that this test server is not suitable for production use because it does - * not implement address verification, anti-amplification or retry logic. - */ -typedef struct quic_tserver_st QUIC_TSERVER; - -typedef struct quic_tserver_args_st { - OSSL_LIB_CTX *libctx; - const char *propq; - SSL_CTX *ctx; - BIO *net_rbio, *net_wbio; - OSSL_TIME (*now_cb)(void *arg); - void *now_cb_arg; - const unsigned char *alpn; - size_t alpnlen; -} QUIC_TSERVER_ARGS; - -QUIC_TSERVER *ossl_quic_tserver_new(const QUIC_TSERVER_ARGS *args, - const char *certfile, const char *keyfile); - -void ossl_quic_tserver_free(QUIC_TSERVER *srv); - -/* Set mutator callbacks for test framework support */ -int ossl_quic_tserver_set_plain_packet_mutator(QUIC_TSERVER *srv, - ossl_mutate_packet_cb mutatecb, - ossl_finish_mutate_cb finishmutatecb, - void *mutatearg); - -int ossl_quic_tserver_set_handshake_mutator(QUIC_TSERVER *srv, - ossl_statem_mutate_handshake_cb mutate_handshake_cb, - ossl_statem_finish_mutate_handshake_cb finish_mutate_handshake_cb, - void *mutatearg); - -/* Advances the state machine. */ -int ossl_quic_tserver_tick(QUIC_TSERVER *srv); - -/* Returns 1 if we have a (non-terminated) client. */ -int ossl_quic_tserver_is_connected(QUIC_TSERVER *srv); - -/* - * Returns 1 if we have finished the TLS handshake - */ -int ossl_quic_tserver_is_handshake_confirmed(const QUIC_TSERVER *srv); - -/* Returns 1 if the server is in any terminating or terminated state */ -int ossl_quic_tserver_is_term_any(const QUIC_TSERVER *srv); - -const QUIC_TERMINATE_CAUSE * -ossl_quic_tserver_get_terminate_cause(const QUIC_TSERVER *srv); - -/* Returns 1 if the server is in a terminated state */ -int ossl_quic_tserver_is_terminated(const QUIC_TSERVER *srv); - -/* - * Attempts to read from stream 0. Writes the number of bytes read to - * *bytes_read and returns 1 on success. If no bytes are available, 0 is written - * to *bytes_read and 1 is returned (this is considered a success case). - * - * Returns 0 if connection is not currently active. If the receive part of - * the stream has reached the end of stream condition, returns 0; call - * ossl_quic_tserver_has_read_ended() to identify this condition. - */ -int ossl_quic_tserver_read(QUIC_TSERVER *srv, - uint64_t stream_id, - unsigned char *buf, - size_t buf_len, - size_t *bytes_read); - -/* - * Returns 1 if the read part of the stream has ended normally. - */ -int ossl_quic_tserver_has_read_ended(QUIC_TSERVER *srv, uint64_t stream_id); - -/* - * Attempts to write to the given stream. Writes the number of bytes consumed to - * *bytes_written and returns 1 on success. If there is no space currently - * available to write any bytes, 0 is written to *consumed and 1 is returned - * (this is considered a success case). - * - * Note that unlike libssl public APIs, this API always works in a 'partial - * write' mode. - * - * Returns 0 if connection is not currently active. - */ -int ossl_quic_tserver_write(QUIC_TSERVER *srv, - uint64_t stream_id, - const unsigned char *buf, - size_t buf_len, - size_t *bytes_written); - -/* - * Signals normal end of the stream. - */ -int ossl_quic_tserver_conclude(QUIC_TSERVER *srv, uint64_t stream_id); - -/* - * Create a server-initiated stream. The stream ID of the newly - * created stream is written to *stream_id. - */ -int ossl_quic_tserver_stream_new(QUIC_TSERVER *srv, - int is_uni, - uint64_t *stream_id); - -BIO *ossl_quic_tserver_get0_rbio(QUIC_TSERVER *srv); - -SSL_CTX *ossl_quic_tserver_get0_ssl_ctx(QUIC_TSERVER *srv); - -/* - * Returns 1 if the peer has sent a STOP_SENDING frame for a stream. - * app_error_code is written if this returns 1. - */ -int ossl_quic_tserver_stream_has_peer_stop_sending(QUIC_TSERVER *srv, - uint64_t stream_id, - uint64_t *app_error_code); - -/* - * Returns 1 if the peer has sent a RESET_STREAM frame for a stream. - * app_error_code is written if this returns 1. - */ -int ossl_quic_tserver_stream_has_peer_reset_stream(QUIC_TSERVER *srv, - uint64_t stream_id, - uint64_t *app_error_code); - -/* - * Replaces existing local connection ID in the underlying QUIC_CHANNEL. - */ -int ossl_quic_tserver_set_new_local_cid(QUIC_TSERVER *srv, - const QUIC_CONN_ID *conn_id); - -/* - * Returns the stream ID of the next incoming stream, or UINT64_MAX if there - * currently is none. - */ -uint64_t ossl_quic_tserver_pop_incoming_stream(QUIC_TSERVER *srv); - -/* - * Returns 1 if all data sent on the given stream_id has been acked by the peer. - */ -int ossl_quic_tserver_is_stream_totally_acked(QUIC_TSERVER *srv, - uint64_t stream_id); - -/* Returns 1 if we are currently interested in reading data from the network */ -int ossl_quic_tserver_get_net_read_desired(QUIC_TSERVER *srv); - -/* Returns 1 if we are currently interested in writing data to the network */ -int ossl_quic_tserver_get_net_write_desired(QUIC_TSERVER *srv); - -/* Returns the next event deadline */ -OSSL_TIME ossl_quic_tserver_get_deadline(QUIC_TSERVER *srv); - -/* - * Shutdown the QUIC connection. Returns 1 if the connection is terminated and - * 0 otherwise. - */ -int ossl_quic_tserver_shutdown(QUIC_TSERVER *srv, uint64_t app_error_code); - -/* Force generation of an ACK-eliciting packet. */ -int ossl_quic_tserver_ping(QUIC_TSERVER *srv); - -/* Set tracing callback on channel. */ -void ossl_quic_tserver_set_msg_callback(QUIC_TSERVER *srv, - void (*f)(int write_p, int version, - int content_type, - const void *buf, size_t len, - SSL *ssl, void *arg), - void *arg); - -/* - * This is similar to ossl_quic_conn_get_channel; it should be used for test - * instrumentation only and not to bypass QUIC_TSERVER for 'normal' operations. - */ -QUIC_CHANNEL *ossl_quic_tserver_get_channel(QUIC_TSERVER *srv); - -/* Send a TLS new session ticket */ -int ossl_quic_tserver_new_ticket(QUIC_TSERVER *srv); - -/* - * Set the max_early_data value to be sent in NewSessionTickets. Only the - * values 0 and 0xffffffff are valid for use in QUIC. - */ -int ossl_quic_tserver_set_max_early_data(QUIC_TSERVER *srv, - uint32_t max_early_data); - -/* Set the find session callback for getting a server PSK */ -void ossl_quic_tserver_set_psk_find_session_cb(QUIC_TSERVER *srv, - SSL_psk_find_session_cb_func cb); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_txp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_txp.h deleted file mode 100644 index ae508f23..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_txp.h +++ /dev/null @@ -1,209 +0,0 @@ -/* - * 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_QUIC_TXP_H -# define OSSL_QUIC_TXP_H - -# include -# include "internal/quic_types.h" -# include "internal/quic_record_tx.h" -# include "internal/quic_cfq.h" -# include "internal/quic_txpim.h" -# include "internal/quic_stream.h" -# include "internal/quic_stream_map.h" -# include "internal/quic_fc.h" -# include "internal/bio_addr.h" -# include "internal/time.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC TX Packetiser - * ================== - */ -typedef struct ossl_quic_tx_packetiser_args_st { - /* Configuration Settings */ - QUIC_CONN_ID cur_scid; /* Current Source Connection ID we use. */ - QUIC_CONN_ID cur_dcid; /* Current Destination Connection ID we use. */ - BIO_ADDR peer; /* Current destination L4 address we use. */ - uint32_t ack_delay_exponent; /* ACK delay exponent used when encoding. */ - - /* Injected Dependencies */ - OSSL_QTX *qtx; /* QUIC Record Layer TX we are using */ - QUIC_TXPIM *txpim; /* QUIC TX'd Packet Information Manager */ - QUIC_CFQ *cfq; /* QUIC Control Frame Queue */ - OSSL_ACKM *ackm; /* QUIC Acknowledgement Manager */ - QUIC_STREAM_MAP *qsm; /* QUIC Streams Map */ - QUIC_TXFC *conn_txfc; /* QUIC Connection-Level TX Flow Controller */ - QUIC_RXFC *conn_rxfc; /* QUIC Connection-Level RX Flow Controller */ - QUIC_RXFC *max_streams_bidi_rxfc; /* QUIC RXFC for MAX_STREAMS generation */ - QUIC_RXFC *max_streams_uni_rxfc; - const OSSL_CC_METHOD *cc_method; /* QUIC Congestion Controller */ - OSSL_CC_DATA *cc_data; /* QUIC Congestion Controller Instance */ - OSSL_TIME (*now)(void *arg); /* Callback to get current time. */ - void *now_arg; - - /* - * Injected dependencies - crypto streams. - * - * Note: There is no crypto stream for the 0-RTT EL. - * crypto[QUIC_PN_SPACE_APP] is the 1-RTT crypto stream. - */ - QUIC_SSTREAM *crypto[QUIC_PN_SPACE_NUM]; - - } OSSL_QUIC_TX_PACKETISER_ARGS; - -typedef struct ossl_quic_tx_packetiser_st OSSL_QUIC_TX_PACKETISER; - -OSSL_QUIC_TX_PACKETISER *ossl_quic_tx_packetiser_new(const OSSL_QUIC_TX_PACKETISER_ARGS *args); - -typedef void (ossl_quic_initial_token_free_fn)(const unsigned char *buf, - size_t buf_len, void *arg); - -void ossl_quic_tx_packetiser_free(OSSL_QUIC_TX_PACKETISER *txp); - -/* - * When in the closing state we need to maintain a count of received bytes - * so that we can limit the number of close connection frames we send. - * Refer RFC 9000 s. 10.2.1 Closing Connection State. - */ -void ossl_quic_tx_packetiser_record_received_closing_bytes( - OSSL_QUIC_TX_PACKETISER *txp, size_t n); - -/* - * Generates a datagram by polling the various ELs to determine if they want to - * generate any frames, and generating a datagram which coalesces packets for - * any ELs which do. - * - * Returns 0 on failure (e.g. allocation error or other errors), 1 otherwise. - * - * *status is filled with status information about the generated packet. - * It is always filled even in case of failure. In particular, packets can be - * sent even if failure is later returned. - * See QUIC_TXP_STATUS for details. - */ -typedef struct quic_txp_status_st { - int sent_ack_eliciting; /* Was an ACK-eliciting packet sent? */ - int sent_handshake; /* Was a Handshake packet sent? */ - size_t sent_pkt; /* Number of packets sent (0 if nothing was sent) */ -} QUIC_TXP_STATUS; - -int ossl_quic_tx_packetiser_generate(OSSL_QUIC_TX_PACKETISER *txp, - QUIC_TXP_STATUS *status); - -/* - * Returns a deadline after which a call to ossl_quic_tx_packetiser_generate() - * might succeed even if it did not previously. This may return - * ossl_time_infinite() if there is no such deadline currently applicable. It - * returns ossl_time_zero() if there is (potentially) more data to be generated - * immediately. The value returned is liable to change after any call to - * ossl_quic_tx_packetiser_generate() (or after ACKM or CC state changes). Note - * that ossl_quic_tx_packetiser_generate() can also start to succeed for other - * non-chronological reasons, such as changes to send stream buffers, etc. - */ -OSSL_TIME ossl_quic_tx_packetiser_get_deadline(OSSL_QUIC_TX_PACKETISER *txp); - -/* - * Set the token used in Initial packets. The callback is called when the buffer - * is no longer needed; for example, when the TXP is freed or when this function - * is called again with a new buffer. Fails returning 0 if the token is too big - * to ever be reasonably encapsulated in an outgoing packet based on our current - * understanding of our PMTU. - */ -int ossl_quic_tx_packetiser_set_initial_token(OSSL_QUIC_TX_PACKETISER *txp, - const unsigned char *token, - size_t token_len, - ossl_quic_initial_token_free_fn *free_cb, - void *free_cb_arg); - -/* Change the DCID the TXP uses to send outgoing packets. */ -int ossl_quic_tx_packetiser_set_cur_dcid(OSSL_QUIC_TX_PACKETISER *txp, - const QUIC_CONN_ID *dcid); - -/* Change the SCID the TXP uses to send outgoing (long) packets. */ -int ossl_quic_tx_packetiser_set_cur_scid(OSSL_QUIC_TX_PACKETISER *txp, - const QUIC_CONN_ID *scid); - -/* - * Change the destination L4 address the TXP uses to send datagrams. Specify - * NULL (or AF_UNSPEC) to disable use of addressed mode. - */ -int ossl_quic_tx_packetiser_set_peer(OSSL_QUIC_TX_PACKETISER *txp, - const BIO_ADDR *peer); - -/* - * Inform the TX packetiser that an EL has been discarded. Idempotent. - * - * This does not inform the QTX as well; the caller must also inform the QTX. - * - * The TXP will no longer reference the crypto[enc_level] QUIC_SSTREAM which was - * provided in the TXP arguments. However, it is the callers responsibility to - * free that QUIC_SSTREAM if desired. - */ -int ossl_quic_tx_packetiser_discard_enc_level(OSSL_QUIC_TX_PACKETISER *txp, - uint32_t enc_level); - -/* - * Informs the TX packetiser that the handshake is complete. The TX packetiser - * will not send 1-RTT application data until the handshake is complete, - * as the authenticity of the peer is not confirmed until the handshake - * complete event occurs. - */ -void ossl_quic_tx_packetiser_notify_handshake_complete(OSSL_QUIC_TX_PACKETISER *txp); - -/* Asks the TXP to generate a HANDSHAKE_DONE frame in the next 1-RTT packet. */ -void ossl_quic_tx_packetiser_schedule_handshake_done(OSSL_QUIC_TX_PACKETISER *txp); - -/* Asks the TXP to ensure the next packet in the given PN space is ACK-eliciting. */ -void ossl_quic_tx_packetiser_schedule_ack_eliciting(OSSL_QUIC_TX_PACKETISER *txp, - uint32_t pn_space); - -/* - * Asks the TXP to ensure an ACK is put in the next packet in the given PN - * space. - */ -void ossl_quic_tx_packetiser_schedule_ack(OSSL_QUIC_TX_PACKETISER *txp, - uint32_t pn_space); - -/* - * Schedules a connection close. *f and f->reason are copied. This operation is - * irreversible and causes all further packets generated by the TXP to contain a - * CONNECTION_CLOSE frame. This function fails if it has already been called - * successfully; the information in *f cannot be changed after the first - * successful call to this function. - */ -int ossl_quic_tx_packetiser_schedule_conn_close(OSSL_QUIC_TX_PACKETISER *txp, - const OSSL_QUIC_FRAME_CONN_CLOSE *f); - -/* Setters for the msg_callback and msg_callback_arg */ -void ossl_quic_tx_packetiser_set_msg_callback(OSSL_QUIC_TX_PACKETISER *txp, - ossl_msg_cb msg_callback, - SSL *msg_callback_ssl); -void ossl_quic_tx_packetiser_set_msg_callback_arg(OSSL_QUIC_TX_PACKETISER *txp, - void *msg_callback_arg); - -/* - * Determines the next PN which will be used for a given PN space. - */ -QUIC_PN ossl_quic_tx_packetiser_get_next_pn(OSSL_QUIC_TX_PACKETISER *txp, - uint32_t pn_space); - -/* - * Sets a callback which is called whenever TXP sends an ACK frame. The callee - * must not modify the ACK frame data. Can be used to snoop on PNs being ACKed. - */ -void ossl_quic_tx_packetiser_set_ack_tx_cb(OSSL_QUIC_TX_PACKETISER *txp, - void (*cb)(const OSSL_QUIC_FRAME_ACK *ack, - uint32_t pn_space, - void *arg), - void *cb_arg); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_txpim.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_txpim.h deleted file mode 100644 index ed6e3875..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_txpim.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * 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_QUIC_TXPIM_H -# define OSSL_QUIC_TXPIM_H - -# include -# include "internal/quic_types.h" -# include "internal/quic_cfq.h" -# include "internal/quic_ackm.h" - -# ifndef OPENSSL_NO_QUIC - -/* - * QUIC Transmitted Packet Information Manager - * =========================================== - */ -typedef struct quic_txpim_st QUIC_TXPIM; -typedef struct quic_fifd_st QUIC_FIFD; - -typedef struct quic_txpim_pkt_st { - /* ACKM-specific data. Caller should fill this. */ - OSSL_ACKM_TX_PKT ackm_pkt; - - /* Linked list of CFQ items in this packet. */ - QUIC_CFQ_ITEM *retx_head; - - /* Reserved for FIFD use. */ - QUIC_FIFD *fifd; - - /* Regenerate-strategy frames. */ - unsigned int had_handshake_done_frame : 1; - unsigned int had_max_data_frame : 1; - unsigned int had_max_streams_bidi_frame : 1; - unsigned int had_max_streams_uni_frame : 1; - unsigned int had_ack_frame : 1; - unsigned int had_conn_close : 1; - - /* Private data follows. */ -} QUIC_TXPIM_PKT; - -/* Represents a range of bytes in an application or CRYPTO stream. */ -typedef struct quic_txpim_chunk_st { - /* The stream ID, or UINT64_MAX for the CRYPTO stream. */ - uint64_t stream_id; - /* - * The inclusive range of bytes in the stream. Exceptionally, if end < - * start, designates a frame of zero length (used for FIN-only frames). In - * this case end is the number of the final byte (i.e., one less than the - * final size of the stream). - */ - uint64_t start, end; - /* - * Whether a FIN was sent for this stream in the packet. Not valid for - * CRYPTO stream. - */ - unsigned int has_fin : 1; - /* - * If set, a STOP_SENDING frame was sent for this stream ID. (If no data was - * sent for the stream, set end < start.) - */ - unsigned int has_stop_sending : 1; - /* - * If set, a RESET_STREAM frame was sent for this stream ID. (If no data was - * sent for the stream, set end < start.) - */ - unsigned int has_reset_stream : 1; -} QUIC_TXPIM_CHUNK; - -QUIC_TXPIM *ossl_quic_txpim_new(void); - -/* - * Frees the TXPIM. All QUIC_TXPIM_PKTs which have been handed out by the TXPIM - * must be released via a call to ossl_quic_txpim_pkt_release() before calling - * this function. - */ -void ossl_quic_txpim_free(QUIC_TXPIM *txpim); - -/* - * Allocates a new QUIC_TXPIM_PKT structure from the pool. Returns NULL on - * failure. The returned structure is cleared of all data and is in a fresh - * initial state. - */ -QUIC_TXPIM_PKT *ossl_quic_txpim_pkt_alloc(QUIC_TXPIM *txpim); - -/* - * Releases the TXPIM packet, returning it to the pool. - */ -void ossl_quic_txpim_pkt_release(QUIC_TXPIM *txpim, QUIC_TXPIM_PKT *fpkt); - -/* Clears the chunk list of the packet, removing all entries. */ -void ossl_quic_txpim_pkt_clear_chunks(QUIC_TXPIM_PKT *fpkt); - -/* Appends a chunk to the packet. The structure is copied. */ -int ossl_quic_txpim_pkt_append_chunk(QUIC_TXPIM_PKT *fpkt, - const QUIC_TXPIM_CHUNK *chunk); - -/* Adds a CFQ item to the packet by prepending it to the retx_head list. */ -void ossl_quic_txpim_pkt_add_cfq_item(QUIC_TXPIM_PKT *fpkt, - QUIC_CFQ_ITEM *item); - -/* - * Returns a pointer to an array of stream chunk information structures for the - * given packet. The caller must call ossl_quic_txpim_pkt_get_num_chunks() to - * determine the length of this array. The returned pointer is invalidated - * if the chunk list is mutated, for example via a call to - * ossl_quic_txpim_pkt_append_chunk() or ossl_quic_txpim_pkt_clear_chunks(). - * - * The chunks are sorted by (stream_id, start) in ascending order. - */ -const QUIC_TXPIM_CHUNK *ossl_quic_txpim_pkt_get_chunks(const QUIC_TXPIM_PKT *fpkt); - -/* - * Returns the number of entries in the array returned by - * ossl_quic_txpim_pkt_get_chunks(). - */ -size_t ossl_quic_txpim_pkt_get_num_chunks(const QUIC_TXPIM_PKT *fpkt); - -/* - * Returns the number of QUIC_TXPIM_PKTs allocated by the given TXPIM that have - * yet to be returned to the TXPIM. - */ -size_t ossl_quic_txpim_get_in_use(const QUIC_TXPIM *txpim); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_types.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_types.h deleted file mode 100644 index d42164ba..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_types.h +++ /dev/null @@ -1,116 +0,0 @@ -/* - * 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_QUIC_TYPES_H -# define OSSL_QUIC_TYPES_H - -# include -# include -# include -# include - -# ifndef OPENSSL_NO_QUIC - -/* QUIC encryption levels. */ -enum { - QUIC_ENC_LEVEL_INITIAL = 0, - QUIC_ENC_LEVEL_HANDSHAKE, - QUIC_ENC_LEVEL_0RTT, - QUIC_ENC_LEVEL_1RTT, - QUIC_ENC_LEVEL_NUM /* Must be the ultimate entry */ -}; - -/* QUIC packet number spaces. */ -enum { - QUIC_PN_SPACE_INITIAL = 0, - QUIC_PN_SPACE_HANDSHAKE, - /* New entries must go here, so that QUIC_PN_SPACE_APP is the penultimate */ - QUIC_PN_SPACE_APP, - QUIC_PN_SPACE_NUM /* Must be the ultimate entry */ -}; - -static ossl_unused ossl_inline uint32_t -ossl_quic_enc_level_to_pn_space(uint32_t enc_level) -{ - switch (enc_level) { - case QUIC_ENC_LEVEL_INITIAL: - return QUIC_PN_SPACE_INITIAL; - case QUIC_ENC_LEVEL_HANDSHAKE: - return QUIC_PN_SPACE_HANDSHAKE; - case QUIC_ENC_LEVEL_0RTT: - case QUIC_ENC_LEVEL_1RTT: - return QUIC_PN_SPACE_APP; - default: - assert(0); - return QUIC_PN_SPACE_APP; - } -} - -/* QUIC packet number representation. */ -typedef uint64_t QUIC_PN; -# define QUIC_PN_INVALID UINT64_MAX - -static ossl_unused ossl_inline QUIC_PN ossl_quic_pn_max(QUIC_PN a, QUIC_PN b) -{ - return a > b ? a : b; -} - -static ossl_unused ossl_inline QUIC_PN ossl_quic_pn_min(QUIC_PN a, QUIC_PN b) -{ - return a < b ? a : b; -} - -static ossl_unused ossl_inline int ossl_quic_pn_valid(QUIC_PN pn) -{ - return pn < (((QUIC_PN)1) << 62); -} - -/* QUIC connection ID representation. */ -# define QUIC_MAX_CONN_ID_LEN 20 - -typedef struct quic_conn_id_st { - unsigned char id_len, id[QUIC_MAX_CONN_ID_LEN]; -} QUIC_CONN_ID; - -static ossl_unused ossl_inline int ossl_quic_conn_id_eq(const QUIC_CONN_ID *a, - const QUIC_CONN_ID *b) -{ - if (a->id_len != b->id_len || a->id_len > QUIC_MAX_CONN_ID_LEN) - return 0; - return memcmp(a->id, b->id, a->id_len) == 0; -} - -# define QUIC_MIN_INITIAL_DGRAM_LEN 1200 - -# define QUIC_DEFAULT_ACK_DELAY_EXP 3 -# define QUIC_MAX_ACK_DELAY_EXP 20 - -# define QUIC_DEFAULT_MAX_ACK_DELAY 25 - -# define QUIC_MIN_ACTIVE_CONN_ID_LIMIT 2 - -/* Arbitrary choice of default idle timeout (not an RFC value). */ -# define QUIC_DEFAULT_IDLE_TIMEOUT 30000 - -# define QUIC_STATELESS_RESET_TOKEN_LEN 16 - -typedef struct { - unsigned char token[QUIC_STATELESS_RESET_TOKEN_LEN]; -} QUIC_STATELESS_RESET_TOKEN; - -/* - * An encoded preferred_addr transport parameter cannot be shorter or longer - * than these lengths in bytes. - */ -# define QUIC_MIN_ENCODED_PREFERRED_ADDR_LEN 41 -# define QUIC_MAX_ENCODED_PREFERRED_ADDR_LEN 61 - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_vlint.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_vlint.h deleted file mode 100644 index d4b70b22..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_vlint.h +++ /dev/null @@ -1,127 +0,0 @@ -/* -* 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_INTERNAL_QUIC_VLINT_H -# define OSSL_INTERNAL_QUIC_VLINT_H -# pragma once - -# include "internal/e_os.h" - -# ifndef OPENSSL_NO_QUIC - -/* The smallest value requiring a 1, 2, 4, or 8-byte representation. */ -#define OSSL_QUIC_VLINT_1B_MIN 0 -#define OSSL_QUIC_VLINT_2B_MIN 64 -#define OSSL_QUIC_VLINT_4B_MIN 16384 -#define OSSL_QUIC_VLINT_8B_MIN 1073741824 - -/* The largest value representable in a given number of bytes. */ -#define OSSL_QUIC_VLINT_1B_MAX (OSSL_QUIC_VLINT_2B_MIN - 1) -#define OSSL_QUIC_VLINT_2B_MAX (OSSL_QUIC_VLINT_4B_MIN - 1) -#define OSSL_QUIC_VLINT_4B_MAX (OSSL_QUIC_VLINT_8B_MIN - 1) -#define OSSL_QUIC_VLINT_8B_MAX (((uint64_t)1 << 62) - 1) - -/* The largest value representable as a variable-length integer. */ -#define OSSL_QUIC_VLINT_MAX OSSL_QUIC_VLINT_8B_MAX - -/* - * Returns the number of bytes needed to encode v in the QUIC variable-length - * integer encoding. - * - * Returns 0 if v exceeds OSSL_QUIC_VLINT_MAX. - */ -static ossl_unused ossl_inline size_t ossl_quic_vlint_encode_len(uint64_t v) -{ - if (v < OSSL_QUIC_VLINT_2B_MIN) - return 1; - - if (v < OSSL_QUIC_VLINT_4B_MIN) - return 2; - - if (v < OSSL_QUIC_VLINT_8B_MIN) - return 4; - - if (v <= OSSL_QUIC_VLINT_MAX) - return 8; - - return 0; -} - -/* - * This function writes a QUIC varable-length encoded integer to buf. - * The smallest usable representation is used. - * - * It is the caller's responsibility to ensure that the buffer is big enough by - * calling ossl_quic_vlint_encode_len(v) before calling this function. - * - * Precondition: buf is at least ossl_quic_vlint_enc_len(v) bytes in size - * (unchecked) - * Precondition: v does not exceed OSSL_QUIC_VLINT_MAX - * (unchecked) - */ -void ossl_quic_vlint_encode(unsigned char *buf, uint64_t v); - -/* - * This function writes a QUIC variable-length encoded integer to buf. The - * specified number of bytes n are used for the encoding, which means that the - * encoded value may take up more space than necessary. - * - * It is the caller's responsibility to ensure that the buffer is of at least n - * bytes, and that v is representable by a n-byte QUIC variable-length integer. - * The representable ranges are: - * - * 1-byte encoding: [0, 2** 6-1] - * 2-byte encoding: [0, 2**14-1] - * 4-byte encoding: [0, 2**30-1] - * 8-byte encoding: [0, 2**62-1] - * - * Precondition: buf is at least n bytes in size (unchecked) - * Precondition: v does not exceed the representable range - * (ossl_quic_vlint_encode_len(v) <= n) (unchecked) - * Precondition: v does not exceed OSSL_QUIC_VLINT_MAX - * (unchecked) - */ -void ossl_quic_vlint_encode_n(unsigned char *buf, uint64_t v, int n); - -/* - * Given the first byte of an encoded QUIC variable-length integer, returns - * the number of bytes comprising the encoded integer, including the first - * byte. - */ -static ossl_unused ossl_inline size_t ossl_quic_vlint_decode_len(uint8_t first_byte) -{ - return 1U << ((first_byte & 0xC0) >> 6); -} - -/* - * Given a buffer containing an encoded QUIC variable-length integer, returns - * the decoded value. The buffer must be of at least - * ossl_quic_vlint_decode_len(buf[0]) bytes in size, and the caller is responsible - * for checking this. - * - * Precondition: buf is at least ossl_quic_vlint_decode_len(buf[0]) bytes in size - * (unchecked) - */ -uint64_t ossl_quic_vlint_decode_unchecked(const unsigned char *buf); - -/* - * Given a buffer buf of buf_len bytes in length, attempts to decode an encoded - * QUIC variable-length integer at the start of the buffer and writes the result - * to *v. If buf_len is inadequate, suggesting a truncated encoded integer, the - * function fails and 0 is returned. Otherwise, returns the number of bytes - * consumed. - * - * Precondition: buf is at least buf_len bytes in size - * Precondition: v (unchecked) - */ -int ossl_quic_vlint_decode(const unsigned char *buf, size_t buf_len, uint64_t *v); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_wire.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_wire.h deleted file mode 100644 index cd01feb0..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_wire.h +++ /dev/null @@ -1,784 +0,0 @@ -/* -* 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_INTERNAL_QUIC_WIRE_H -# define OSSL_INTERNAL_QUIC_WIRE_H -# pragma once - -# include "internal/e_os.h" -# include "internal/time.h" -# include "internal/quic_types.h" -# include "internal/packet_quic.h" - -# ifndef OPENSSL_NO_QUIC - -# define OSSL_QUIC_FRAME_TYPE_PADDING 0x00 -# define OSSL_QUIC_FRAME_TYPE_PING 0x01 -# define OSSL_QUIC_FRAME_TYPE_ACK_WITHOUT_ECN 0x02 -# define OSSL_QUIC_FRAME_TYPE_ACK_WITH_ECN 0x03 -# define OSSL_QUIC_FRAME_TYPE_RESET_STREAM 0x04 -# define OSSL_QUIC_FRAME_TYPE_STOP_SENDING 0x05 -# define OSSL_QUIC_FRAME_TYPE_CRYPTO 0x06 -# define OSSL_QUIC_FRAME_TYPE_NEW_TOKEN 0x07 -# define OSSL_QUIC_FRAME_TYPE_MAX_DATA 0x10 -# define OSSL_QUIC_FRAME_TYPE_MAX_STREAM_DATA 0x11 -# define OSSL_QUIC_FRAME_TYPE_MAX_STREAMS_BIDI 0x12 -# define OSSL_QUIC_FRAME_TYPE_MAX_STREAMS_UNI 0x13 -# define OSSL_QUIC_FRAME_TYPE_DATA_BLOCKED 0x14 -# define OSSL_QUIC_FRAME_TYPE_STREAM_DATA_BLOCKED 0x15 -# define OSSL_QUIC_FRAME_TYPE_STREAMS_BLOCKED_BIDI 0x16 -# define OSSL_QUIC_FRAME_TYPE_STREAMS_BLOCKED_UNI 0x17 -# define OSSL_QUIC_FRAME_TYPE_NEW_CONN_ID 0x18 -# define OSSL_QUIC_FRAME_TYPE_RETIRE_CONN_ID 0x19 -# define OSSL_QUIC_FRAME_TYPE_PATH_CHALLENGE 0x1A -# define OSSL_QUIC_FRAME_TYPE_PATH_RESPONSE 0x1B -# define OSSL_QUIC_FRAME_TYPE_CONN_CLOSE_TRANSPORT 0x1C -# define OSSL_QUIC_FRAME_TYPE_CONN_CLOSE_APP 0x1D -# define OSSL_QUIC_FRAME_TYPE_HANDSHAKE_DONE 0x1E - -# define OSSL_QUIC_FRAME_FLAG_STREAM_FIN 0x01 -# define OSSL_QUIC_FRAME_FLAG_STREAM_LEN 0x02 -# define OSSL_QUIC_FRAME_FLAG_STREAM_OFF 0x04 -# define OSSL_QUIC_FRAME_FLAG_STREAM_MASK ((uint64_t)0x07) - -/* Low 3 bits of the type contain flags */ -# define OSSL_QUIC_FRAME_TYPE_STREAM 0x08 /* base ID */ -# define OSSL_QUIC_FRAME_TYPE_STREAM_FIN \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_FIN) -# define OSSL_QUIC_FRAME_TYPE_STREAM_LEN \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_LEN) -# define OSSL_QUIC_FRAME_TYPE_STREAM_LEN_FIN \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_LEN | \ - OSSL_QUIC_FRAME_FLAG_STREAM_FIN) -# define OSSL_QUIC_FRAME_TYPE_STREAM_OFF \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_OFF) -# define OSSL_QUIC_FRAME_TYPE_STREAM_OFF_FIN \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_OFF | \ - OSSL_QUIC_FRAME_FLAG_STREAM_FIN) -# define OSSL_QUIC_FRAME_TYPE_STREAM_OFF_LEN \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_OFF | \ - OSSL_QUIC_FRAME_FLAG_STREAM_LEN) -# define OSSL_QUIC_FRAME_TYPE_STREAM_OFF_LEN_FIN \ - (OSSL_QUIC_FRAME_TYPE_STREAM | \ - OSSL_QUIC_FRAME_FLAG_STREAM_OFF | \ - OSSL_QUIC_FRAME_FLAG_STREAM_LEN | \ - OSSL_QUIC_FRAME_FLAG_STREAM_FIN) - -# define OSSL_QUIC_FRAME_TYPE_IS_STREAM(x) \ - (((x) & ~OSSL_QUIC_FRAME_FLAG_STREAM_MASK) == OSSL_QUIC_FRAME_TYPE_STREAM) -# define OSSL_QUIC_FRAME_TYPE_IS_ACK(x) \ - (((x) & ~(uint64_t)1) == OSSL_QUIC_FRAME_TYPE_ACK_WITHOUT_ECN) -# define OSSL_QUIC_FRAME_TYPE_IS_MAX_STREAMS(x) \ - (((x) & ~(uint64_t)1) == OSSL_QUIC_FRAME_TYPE_MAX_STREAMS_BIDI) -# define OSSL_QUIC_FRAME_TYPE_IS_STREAMS_BLOCKED(x) \ - (((x) & ~(uint64_t)1) == OSSL_QUIC_FRAME_TYPE_STREAMS_BLOCKED_BIDI) -# define OSSL_QUIC_FRAME_TYPE_IS_CONN_CLOSE(x) \ - (((x) & ~(uint64_t)1) == OSSL_QUIC_FRAME_TYPE_CONN_CLOSE_TRANSPORT) - -const char *ossl_quic_frame_type_to_string(uint64_t frame_type); - -static ossl_unused ossl_inline int -ossl_quic_frame_type_is_ack_eliciting(uint64_t frame_type) -{ - switch (frame_type) { - case OSSL_QUIC_FRAME_TYPE_PADDING: - case OSSL_QUIC_FRAME_TYPE_ACK_WITHOUT_ECN: - case OSSL_QUIC_FRAME_TYPE_ACK_WITH_ECN: - case OSSL_QUIC_FRAME_TYPE_CONN_CLOSE_TRANSPORT: - case OSSL_QUIC_FRAME_TYPE_CONN_CLOSE_APP: - return 0; - default: - return 1; - } -} - -/* QUIC Transport Parameter Types */ -# define QUIC_TPARAM_ORIG_DCID 0x00 -# define QUIC_TPARAM_MAX_IDLE_TIMEOUT 0x01 -# define QUIC_TPARAM_STATELESS_RESET_TOKEN 0x02 -# define QUIC_TPARAM_MAX_UDP_PAYLOAD_SIZE 0x03 -# define QUIC_TPARAM_INITIAL_MAX_DATA 0x04 -# define QUIC_TPARAM_INITIAL_MAX_STREAM_DATA_BIDI_LOCAL 0x05 -# define QUIC_TPARAM_INITIAL_MAX_STREAM_DATA_BIDI_REMOTE 0x06 -# define QUIC_TPARAM_INITIAL_MAX_STREAM_DATA_UNI 0x07 -# define QUIC_TPARAM_INITIAL_MAX_STREAMS_BIDI 0x08 -# define QUIC_TPARAM_INITIAL_MAX_STREAMS_UNI 0x09 -# define QUIC_TPARAM_ACK_DELAY_EXP 0x0A -# define QUIC_TPARAM_MAX_ACK_DELAY 0x0B -# define QUIC_TPARAM_DISABLE_ACTIVE_MIGRATION 0x0C -# define QUIC_TPARAM_PREFERRED_ADDR 0x0D -# define QUIC_TPARAM_ACTIVE_CONN_ID_LIMIT 0x0E -# define QUIC_TPARAM_INITIAL_SCID 0x0F -# define QUIC_TPARAM_RETRY_SCID 0x10 - -/* - * QUIC Frame Logical Representations - * ================================== - */ - -/* QUIC Frame: ACK */ -typedef struct ossl_quic_ack_range_st { - /* - * Represents an inclusive range of packet numbers [start, end]. - * start must be <= end. - */ - QUIC_PN start, end; -} OSSL_QUIC_ACK_RANGE; - -typedef struct ossl_quic_frame_ack_st { - /* - * A sequence of packet number ranges [[start, end]...]. - * - * The ranges must be sorted in descending order, for example: - * [ 95, 100] - * [ 90, 92] - * etc. - * - * As such, ack_ranges[0].end is always the highest packet number - * being acknowledged and ack_ranges[num_ack_ranges-1].start is - * always the lowest packet number being acknowledged. - * - * num_ack_ranges must be greater than zero, as an ACK frame must - * acknowledge at least one packet number. - */ - OSSL_QUIC_ACK_RANGE *ack_ranges; - size_t num_ack_ranges; - - OSSL_TIME delay_time; - uint64_t ect0, ect1, ecnce; - unsigned int ecn_present : 1; -} OSSL_QUIC_FRAME_ACK; - -/* Returns 1 if the given frame contains the given PN. */ -int ossl_quic_frame_ack_contains_pn(const OSSL_QUIC_FRAME_ACK *ack, QUIC_PN pn); - -/* QUIC Frame: STREAM */ -typedef struct ossl_quic_frame_stream_st { - uint64_t stream_id; /* Stream ID */ - uint64_t offset; /* Logical offset in stream */ - uint64_t len; /* Length of data in bytes */ - const unsigned char *data; - - /* - * On encode, this determines whether the len field should be encoded or - * not. If zero, the len field is not encoded and it is assumed the frame - * runs to the end of the packet. - * - * On decode, this determines whether the frame had an explicitly encoded - * length. If not set, the frame runs to the end of the packet and len has - * been set accordingly. - */ - unsigned int has_explicit_len : 1; - - /* 1 if this is the end of the stream */ - unsigned int is_fin : 1; -} OSSL_QUIC_FRAME_STREAM; - -/* QUIC Frame: CRYPTO */ -typedef struct ossl_quic_frame_crypto_st { - uint64_t offset; /* Logical offset in stream */ - uint64_t len; /* Length of the data in bytes */ - const unsigned char *data; -} OSSL_QUIC_FRAME_CRYPTO; - -/* QUIC Frame: RESET_STREAM */ -typedef struct ossl_quic_frame_reset_stream_st { - uint64_t stream_id; - uint64_t app_error_code; - uint64_t final_size; -} OSSL_QUIC_FRAME_RESET_STREAM; - -/* QUIC Frame: STOP_SENDING */ -typedef struct ossl_quic_frame_stop_sending_st { - uint64_t stream_id; - uint64_t app_error_code; -} OSSL_QUIC_FRAME_STOP_SENDING; - -/* QUIC Frame: NEW_CONNECTION_ID */ -typedef struct ossl_quic_frame_new_conn_id_st { - uint64_t seq_num; - uint64_t retire_prior_to; - QUIC_CONN_ID conn_id; - QUIC_STATELESS_RESET_TOKEN stateless_reset; -} OSSL_QUIC_FRAME_NEW_CONN_ID; - -/* QUIC Frame: CONNECTION_CLOSE */ -typedef struct ossl_quic_frame_conn_close_st { - unsigned int is_app : 1; /* 0: transport error, 1: app error */ - uint64_t error_code; /* 62-bit transport or app error code */ - uint64_t frame_type; /* transport errors only */ - char *reason; /* UTF-8 string, not necessarily zero-terminated */ - size_t reason_len; /* Length of reason in bytes */ -} OSSL_QUIC_FRAME_CONN_CLOSE; - -/* - * QUIC Wire Format Encoding - * ========================= - * - * These functions return 1 on success and 0 on failure. - */ - -/* - * Encodes zero or more QUIC PADDING frames to the packet writer. Each PADDING - * frame consumes one byte; num_bytes specifies the number of bytes of padding - * to write. - */ -int ossl_quic_wire_encode_padding(WPACKET *pkt, size_t num_bytes); - -/* - * Encodes a QUIC PING frame to the packet writer. This frame type takes - * no arguments. -*/ -int ossl_quic_wire_encode_frame_ping(WPACKET *pkt); - -/* - * Encodes a QUIC ACK frame to the packet writer, given a logical representation - * of the ACK frame. - * - * The ACK ranges passed must be sorted in descending order. - * - * The logical representation stores a list of packet number ranges. The wire - * encoding is slightly different and stores the first range in the list - * in a different manner. - * - * The ack_delay_exponent argument specifies the index of a power of two by - * which the ack->ack_delay field is be divided. This exponent value must match - * the value used when decoding. - */ -int ossl_quic_wire_encode_frame_ack(WPACKET *pkt, - uint32_t ack_delay_exponent, - const OSSL_QUIC_FRAME_ACK *ack); - -/* - * Encodes a QUIC RESET_STREAM frame to the packet writer, given a logical - * representation of the RESET_STREAM frame. - */ -int ossl_quic_wire_encode_frame_reset_stream(WPACKET *pkt, - const OSSL_QUIC_FRAME_RESET_STREAM *f); - -/* - * Encodes a QUIC STOP_SENDING frame to the packet writer, given a logical - * representation of the STOP_SENDING frame. - */ -int ossl_quic_wire_encode_frame_stop_sending(WPACKET *pkt, - const OSSL_QUIC_FRAME_STOP_SENDING *f); - -/* - * Encodes a QUIC CRYPTO frame header to the packet writer. - * - * To create a well-formed frame, the data written using this function must be - * immediately followed by f->len bytes of data. - */ -int ossl_quic_wire_encode_frame_crypto_hdr(WPACKET *hdr, - const OSSL_QUIC_FRAME_CRYPTO *f); - -/* - * Returns the number of bytes which will be required to encode the given - * CRYPTO frame header. Does not include the payload bytes in the count. - * Returns 0 if input is invalid. - */ -size_t ossl_quic_wire_get_encoded_frame_len_crypto_hdr(const OSSL_QUIC_FRAME_CRYPTO *f); - -/* - * Encodes a QUIC CRYPTO frame to the packet writer. - * - * This function returns a pointer to a buffer of f->len bytes which the caller - * should fill however it wishes. If f->data is non-NULL, it is automatically - * copied to the target buffer, otherwise the caller must fill the returned - * buffer. Returns NULL on failure. - */ -void *ossl_quic_wire_encode_frame_crypto(WPACKET *pkt, - const OSSL_QUIC_FRAME_CRYPTO *f); - -/* - * Encodes a QUIC NEW_TOKEN frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_new_token(WPACKET *pkt, - const unsigned char *token, - size_t token_len); - -/* - * Encodes a QUIC STREAM frame's header to the packet writer. The f->stream_id, - * f->offset and f->len fields are the values for the respective Stream ID, - * Offset and Length fields. - * - * If f->is_fin is non-zero, the frame is marked as the final frame in the - * stream. - * - * If f->has_explicit_len is zerro, the frame is assumed to be the final frame - * in the packet, which the caller is responsible for ensuring; the Length - * field is then omitted. - * - * To create a well-formed frame, the data written using this function must be - * immediately followed by f->len bytes of stream data. - */ -int ossl_quic_wire_encode_frame_stream_hdr(WPACKET *pkt, - const OSSL_QUIC_FRAME_STREAM *f); - -/* - * Returns the number of bytes which will be required to encode the given - * STREAM frame header. Does not include the payload bytes in the count. - * Returns 0 if input is invalid. - */ -size_t ossl_quic_wire_get_encoded_frame_len_stream_hdr(const OSSL_QUIC_FRAME_STREAM *f); - -/* - * Functions similarly to ossl_quic_wire_encode_frame_stream_hdr, but it also - * allocates space for f->len bytes of data after the header, creating a - * well-formed QUIC STREAM frame in one call. - * - * A pointer to the bytes allocated for the framme payload is returned, - * which the caller can fill however it wishes. If f->data is non-NULL, - * it is automatically copied to the target buffer, otherwise the caller - * must fill the returned buffer. Returns NULL on failure. - */ -void *ossl_quic_wire_encode_frame_stream(WPACKET *pkt, - const OSSL_QUIC_FRAME_STREAM *f); - -/* - * Encodes a QUIC MAX_DATA frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_max_data(WPACKET *pkt, - uint64_t max_data); - -/* - * Encodes a QUIC MAX_STREAM_DATA frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_max_stream_data(WPACKET *pkt, - uint64_t stream_id, - uint64_t max_data); - -/* - * Encodes a QUIC MAX_STREAMS frame to the packet writer. - * - * If is_uni is 0, the count specifies the maximum number of - * bidirectional streams; else it specifies the maximum number of unidirectional - * streams. - */ -int ossl_quic_wire_encode_frame_max_streams(WPACKET *pkt, - char is_uni, - uint64_t max_streams); - -/* - * Encodes a QUIC DATA_BLOCKED frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_data_blocked(WPACKET *pkt, - uint64_t max_data); - -/* - * Encodes a QUIC STREAM_DATA_BLOCKED frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_stream_data_blocked(WPACKET *pkt, - uint64_t stream_id, - uint64_t max_stream_data); -/* - * Encodes a QUIC STREAMS_BLOCKED frame to the packet writer. - * - * If is_uni is 0, the count specifies the maximum number of - * bidirectional streams; else it specifies the maximum number of unidirectional - * streams. - */ -int ossl_quic_wire_encode_frame_streams_blocked(WPACKET *pkt, - char is_uni, - uint64_t max_streams); - -/* - * Encodes a QUIC NEW_CONNECTION_ID frame to the packet writer, given a logical - * representation of the NEW_CONNECTION_ID frame. - * - * The buffer pointed to by the conn_id field must be valid for the duration of - * the call. - */ -int ossl_quic_wire_encode_frame_new_conn_id(WPACKET *pkt, - const OSSL_QUIC_FRAME_NEW_CONN_ID *f); - -/* - * Encodes a QUIC RETIRE_CONNECTION_ID frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_retire_conn_id(WPACKET *pkt, - uint64_t seq_num); - -/* - * Encodes a QUIC PATH_CHALLENGE frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_path_challenge(WPACKET *pkt, - uint64_t data); - -/* - * Encodes a QUIC PATH_RESPONSE frame to the packet writer. - */ -int ossl_quic_wire_encode_frame_path_response(WPACKET *pkt, - uint64_t data); - -/* - * Encodes a QUIC CONNECTION_CLOSE frame to the packet writer, given a logical - * representation of the CONNECTION_CLOSE frame. - * - * The reason field may be NULL, in which case no reason is encoded. If the - * reason field is non-NULL, it must point to a valid UTF-8 string and - * reason_len must be set to the length of the reason string in bytes. The - * reason string need not be zero terminated. - */ -int ossl_quic_wire_encode_frame_conn_close(WPACKET *pkt, - const OSSL_QUIC_FRAME_CONN_CLOSE *f); - -/* - * Encodes a QUIC HANDSHAKE_DONE frame to the packet writer. This frame type - * takes no arguiments. - */ -int ossl_quic_wire_encode_frame_handshake_done(WPACKET *pkt); - -/* - * Encodes a QUIC transport parameter TLV with the given ID into the WPACKET. - * The payload is an arbitrary buffer. - * - * If value is non-NULL, the value is copied into the packet. - * If it is NULL, value_len bytes are allocated for the payload and the caller - * should fill the buffer using the returned pointer. - * - * Returns a pointer to the start of the payload on success, or NULL on failure. - */ -unsigned char *ossl_quic_wire_encode_transport_param_bytes(WPACKET *pkt, - uint64_t id, - const unsigned char *value, - size_t value_len); - -/* - * Encodes a QUIC transport parameter TLV with the given ID into the WPACKET. - * The payload is a QUIC variable-length integer with the given value. - */ -int ossl_quic_wire_encode_transport_param_int(WPACKET *pkt, - uint64_t id, - uint64_t value); - -/* - * Encodes a QUIC transport parameter TLV with a given ID into the WPACKET. - * The payload is a QUIC connection ID. - */ -int ossl_quic_wire_encode_transport_param_cid(WPACKET *wpkt, - uint64_t id, - const QUIC_CONN_ID *cid); - -/* - * QUIC Wire Format Decoding - * ========================= - * - * These functions return 1 on success or 0 for failure. Typical reasons - * why these functions may fail include: - * - * - A frame decode function is called but the frame in the PACKET's buffer - * is not of the correct type. - * - * - A variable-length field in the encoded frame appears to exceed the bounds - * of the PACKET's buffer. - * - * These functions should be called with the PACKET pointing to the start of the - * frame (including the initial type field), and consume an entire frame - * including its type field. The expectation is that the caller will have - * already discerned the frame type using ossl_quic_wire_peek_frame_header(). - */ - -/* - * Decodes the type field header of a QUIC frame (without advancing the current - * position). This can be used to determine the frame type and determine which - * frame decoding function to call. - */ -int ossl_quic_wire_peek_frame_header(PACKET *pkt, uint64_t *type, - int *was_minimal); - -/* - * Like ossl_quic_wire_peek_frame_header, but advances the current position - * so that the type field is consumed. For advanced use only. - */ -int ossl_quic_wire_skip_frame_header(PACKET *pkt, uint64_t *type); - -/* - * Determines how many ranges are needed to decode a QUIC ACK frame. - * - * The number of ranges which must be allocated before the call to - * ossl_quic_wire_decode_frame_ack is written to *total_ranges. - * - * The PACKET is not advanced. - */ -int ossl_quic_wire_peek_frame_ack_num_ranges(const PACKET *pkt, - uint64_t *total_ranges); - -/* - * Decodes a QUIC ACK frame. The ack_ranges field of the passed structure should - * point to a preallocated array of ACK ranges and the num_ack_ranges field - * should specify the length of allocation. - * - * *total_ranges is written with the number of ranges in the decoded frame, - * which may be greater than the number of ranges which were decoded (i.e. if - * num_ack_ranges was too small to decode all ranges). - * - * On success, this function modifies the num_ack_ranges field to indicate the - * number of ranges in the decoded frame. This is the number of entries in the - * ACK ranges array written by this function; any additional entries are not - * modified. - * - * If the number of ACK ranges in the decoded frame exceeds that in - * num_ack_ranges, as many ACK ranges as possible are decoded into the range - * array. The caller can use the value written to *total_ranges to detect this - * condition, as *total_ranges will exceed num_ack_ranges. - * - * If ack is NULL, the frame is still decoded, but only *total_ranges is - * written. This can be used to determine the number of ranges which must be - * allocated. - * - * The ack_delay_exponent argument specifies the index of a power of two used to - * decode the ack_delay field. This must match the ack_delay_exponent value used - * to encode the frame. - */ -int ossl_quic_wire_decode_frame_ack(PACKET *pkt, - uint32_t ack_delay_exponent, - OSSL_QUIC_FRAME_ACK *ack, - uint64_t *total_ranges); - -/* - * Decodes a QUIC RESET_STREAM frame. - */ -int ossl_quic_wire_decode_frame_reset_stream(PACKET *pkt, - OSSL_QUIC_FRAME_RESET_STREAM *f); - -/* - * Decodes a QUIC STOP_SENDING frame. - */ -int ossl_quic_wire_decode_frame_stop_sending(PACKET *pkt, - OSSL_QUIC_FRAME_STOP_SENDING *f); - -/* - * Decodes a QUIC CRYPTO frame. - * - * f->data is set to point inside the packet buffer inside the PACKET, therefore - * it is safe to access for as long as the packet buffer exists. If nodata is - * set to 1 then reading the PACKET stops after the frame header and f->data is - * set to NULL. - */ -int ossl_quic_wire_decode_frame_crypto(PACKET *pkt, int nodata, - OSSL_QUIC_FRAME_CRYPTO *f); - -/* - * Decodes a QUIC NEW_TOKEN frame. *token is written with a pointer to the token - * bytes and *token_len is written with the length of the token in bytes. - */ -int ossl_quic_wire_decode_frame_new_token(PACKET *pkt, - const unsigned char **token, - size_t *token_len); - -/* - * Decodes a QUIC STREAM frame. - * - * If nodata is set to 1 then reading the PACKET stops after the frame header - * and f->data is set to NULL. In this case f->len will also be 0 in the event - * that "has_explicit_len" is 0. - * - * If the frame did not contain an offset field, f->offset is set to 0, as the - * absence of an offset field is equivalent to an offset of 0. - * - * If the frame contained a length field, f->has_explicit_len is set to 1 and - * the length of the data is placed in f->len. This function ensures that the - * length does not exceed the packet buffer, thus it is safe to access f->data. - * - * If the frame did not contain a length field, this means that the frame runs - * until the end of the packet. This function sets f->has_explicit_len to zero, - * and f->len to the amount of data remaining in the input buffer. Therefore, - * this function should be used with a PACKET representing a single packet (and - * not e.g. multiple packets). - * - * Note also that this means f->len is always valid after this function returns - * successfully, regardless of the value of f->has_explicit_len. - * - * f->data points inside the packet buffer inside the PACKET, therefore it is - * safe to access for as long as the packet buffer exists. - * - * f->is_fin is set according to whether the frame was marked as ending the - * stream. - */ -int ossl_quic_wire_decode_frame_stream(PACKET *pkt, int nodata, - OSSL_QUIC_FRAME_STREAM *f); - -/* - * Decodes a QUIC MAX_DATA frame. The Maximum Data field is written to - * *max_data. - */ -int ossl_quic_wire_decode_frame_max_data(PACKET *pkt, - uint64_t *max_data); - -/* - * Decodes a QUIC MAX_STREAM_DATA frame. The Stream ID is written to *stream_id - * and Maximum Stream Data field is written to *max_stream_data. - */ -int ossl_quic_wire_decode_frame_max_stream_data(PACKET *pkt, - uint64_t *stream_id, - uint64_t *max_stream_data); -/* - * Decodes a QUIC MAX_STREAMS frame. The Maximum Streams field is written to - * *max_streams. - * - * Whether the limit concerns bidirectional streams or unidirectional streams is - * denoted by the frame type; the caller should examine the frame type to - * determine this. - */ -int ossl_quic_wire_decode_frame_max_streams(PACKET *pkt, - uint64_t *max_streams); - -/* - * Decodes a QUIC DATA_BLOCKED frame. The Maximum Data field is written to - * *max_data. - */ -int ossl_quic_wire_decode_frame_data_blocked(PACKET *pkt, - uint64_t *max_data); - -/* - * Decodes a QUIC STREAM_DATA_BLOCKED frame. The Stream ID and Maximum Stream - * Data fields are written to *stream_id and *max_stream_data respectively. - */ -int ossl_quic_wire_decode_frame_stream_data_blocked(PACKET *pkt, - uint64_t *stream_id, - uint64_t *max_stream_data); - -/* - * Decodes a QUIC STREAMS_BLOCKED frame. The Maximum Streams field is written to - * *max_streams. - * - * Whether the limit concerns bidirectional streams or unidirectional streams is - * denoted by the frame type; the caller should examine the frame type to - * determine this. - */ -int ossl_quic_wire_decode_frame_streams_blocked(PACKET *pkt, - uint64_t *max_streams); - - -/* - * Decodes a QUIC NEW_CONNECTION_ID frame. The logical representation of the - * frame is written to *f. - * - * The conn_id field is set to point to the connection ID string inside the - * packet buffer; it is therefore valid for as long as the PACKET's buffer is - * valid. The conn_id_len field is set to the length of the connection ID string - * in bytes. - */ -int ossl_quic_wire_decode_frame_new_conn_id(PACKET *pkt, - OSSL_QUIC_FRAME_NEW_CONN_ID *f); - -/* - * Decodes a QUIC RETIRE_CONNECTION_ID frame. The Sequence Number field - * is written to *seq_num. - */ -int ossl_quic_wire_decode_frame_retire_conn_id(PACKET *pkt, - uint64_t *seq_num); - -/* - * Decodes a QUIC PATH_CHALLENGE frame. The Data field is written to *data. - */ -int ossl_quic_wire_decode_frame_path_challenge(PACKET *pkt, - uint64_t *data); - -/* - * Decodes a QUIC PATH_CHALLENGE frame. The Data field is written to *data. - */ -int ossl_quic_wire_decode_frame_path_response(PACKET *pkt, - uint64_t *data); - -/* - * Decodes a QUIC CONNECTION_CLOSE frame. The logical representation - * of the frame is written to *f. - * - * The reason field is set to point to the UTF-8 reason string inside - * the packet buffer; it is therefore valid for as long as the PACKET's - * buffer is valid. The reason_len field is set to the length of the - * reason string in bytes. - * - * IMPORTANT: The reason string is not zero-terminated. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_wire_decode_frame_conn_close(PACKET *pkt, - OSSL_QUIC_FRAME_CONN_CLOSE *f); - -/* - * Decodes one or more PADDING frames. PADDING frames have no arguments. - * - * Returns the number of PADDING frames decoded or 0 on error. - */ -size_t ossl_quic_wire_decode_padding(PACKET *pkt); - -/* - * Decodes a PING frame. The frame has no arguments. - */ -int ossl_quic_wire_decode_frame_ping(PACKET *pkt); - -/* - * Decodes a HANDSHAKE_DONE frame. The frame has no arguments. - */ -int ossl_quic_wire_decode_frame_handshake_done(PACKET *pkt); - -/* - * Peeks at the ID of the next QUIC transport parameter TLV in the stream. - * The ID is written to *id. - */ -int ossl_quic_wire_peek_transport_param(PACKET *pkt, uint64_t *id); - -/* - * Decodes a QUIC transport parameter TLV. A pointer to the value buffer is - * returned on success. This points inside the PACKET's buffer and is therefore - * valid as long as the PACKET's buffer is valid. - * - * The transport parameter ID is written to *id (if non-NULL) and the length of - * the payload in bytes is written to *len. - * - * Returns NULL on failure. - */ -const unsigned char *ossl_quic_wire_decode_transport_param_bytes(PACKET *pkt, - uint64_t *id, - size_t *len); - -/* - * Decodes a QUIC transport parameter TLV containing a variable-length integer. - * - * The transport parameter ID is written to *id (if non-NULL) and the value is - * written to *value. - */ -int ossl_quic_wire_decode_transport_param_int(PACKET *pkt, - uint64_t *id, - uint64_t *value); - -/* - * Decodes a QUIC transport parameter TLV containing a connection ID. - * - * The transport parameter ID is written to *id (if non-NULL) and the value is - * written to *value. - */ -int ossl_quic_wire_decode_transport_param_cid(PACKET *pkt, - uint64_t *id, - QUIC_CONN_ID *cid); - -/* - * Decodes a QUIC transport parameter TLV containing a preferred_address. - */ -typedef struct quic_preferred_addr_st { - uint16_t ipv4_port, ipv6_port; - unsigned char ipv4[4], ipv6[16]; - QUIC_STATELESS_RESET_TOKEN stateless_reset; - QUIC_CONN_ID cid; -} QUIC_PREFERRED_ADDR; - -int ossl_quic_wire_decode_transport_param_preferred_addr(PACKET *pkt, - QUIC_PREFERRED_ADDR *p); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_wire_pkt.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_wire_pkt.h deleted file mode 100644 index 18a483fc..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_wire_pkt.h +++ /dev/null @@ -1,629 +0,0 @@ -/* - * 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_QUIC_WIRE_PKT_H -# define OSSL_QUIC_WIRE_PKT_H - -# include -# include "internal/packet_quic.h" -# include "internal/quic_types.h" - -# ifndef OPENSSL_NO_QUIC - -# define QUIC_VERSION_NONE ((uint32_t)0) /* Used for version negotiation */ -# define QUIC_VERSION_1 ((uint32_t)1) /* QUIC v1 */ - -/* QUIC logical packet type. These do not match wire values. */ -# define QUIC_PKT_TYPE_INITIAL 1 -# define QUIC_PKT_TYPE_0RTT 2 -# define QUIC_PKT_TYPE_HANDSHAKE 3 -# define QUIC_PKT_TYPE_RETRY 4 -# define QUIC_PKT_TYPE_1RTT 5 -# define QUIC_PKT_TYPE_VERSION_NEG 6 - -/* - * Determine encryption level from packet type. Returns QUIC_ENC_LEVEL_NUM if - * the packet is not of a type which is encrypted. - */ -static ossl_inline ossl_unused uint32_t -ossl_quic_pkt_type_to_enc_level(uint32_t pkt_type) -{ - switch (pkt_type) { - case QUIC_PKT_TYPE_INITIAL: - return QUIC_ENC_LEVEL_INITIAL; - case QUIC_PKT_TYPE_HANDSHAKE: - return QUIC_ENC_LEVEL_HANDSHAKE; - case QUIC_PKT_TYPE_0RTT: - return QUIC_ENC_LEVEL_0RTT; - case QUIC_PKT_TYPE_1RTT: - return QUIC_ENC_LEVEL_1RTT; - default: - return QUIC_ENC_LEVEL_NUM; - } -} - -static ossl_inline ossl_unused uint32_t -ossl_quic_enc_level_to_pkt_type(uint32_t enc_level) -{ - switch (enc_level) { - case QUIC_ENC_LEVEL_INITIAL: - return QUIC_PKT_TYPE_INITIAL; - case QUIC_ENC_LEVEL_HANDSHAKE: - return QUIC_PKT_TYPE_HANDSHAKE; - case QUIC_ENC_LEVEL_0RTT: - return QUIC_PKT_TYPE_0RTT; - case QUIC_ENC_LEVEL_1RTT: - return QUIC_PKT_TYPE_1RTT; - default: - return UINT32_MAX; - } -} - -/* Determine if a packet type contains an encrypted payload. */ -static ossl_inline ossl_unused int -ossl_quic_pkt_type_is_encrypted(uint32_t pkt_type) -{ - switch (pkt_type) { - case QUIC_PKT_TYPE_RETRY: - case QUIC_PKT_TYPE_VERSION_NEG: - return 0; - default: - return 1; - } -} - -/* Determine if a packet type contains a PN field. */ -static ossl_inline ossl_unused int -ossl_quic_pkt_type_has_pn(uint32_t pkt_type) -{ - /* - * Currently a packet has a PN iff it is encrypted. This could change - * someday. - */ - return ossl_quic_pkt_type_is_encrypted(pkt_type); -} - -/* - * Determine if a packet type can appear with other packets in a datagram. Some - * packet types must be the sole packet in a datagram. - */ -static ossl_inline ossl_unused int -ossl_quic_pkt_type_can_share_dgram(uint32_t pkt_type) -{ - /* - * Currently only the encrypted packet types can share a datagram. This - * could change someday. - */ - return ossl_quic_pkt_type_is_encrypted(pkt_type); -} - -/* - * Determine if the packet type must come at the end of the datagram (due to the - * lack of a length field). - */ -static ossl_inline ossl_unused int -ossl_quic_pkt_type_must_be_last(uint32_t pkt_type) -{ - /* - * Any packet type which cannot share a datagram obviously must come last. - * 1-RTT also must come last as it lacks a length field. - */ - return !ossl_quic_pkt_type_can_share_dgram(pkt_type) - || pkt_type == QUIC_PKT_TYPE_1RTT; -} - -/* - * Determine if the packet type has a version field. - */ -static ossl_inline ossl_unused int -ossl_quic_pkt_type_has_version(uint32_t pkt_type) -{ - return pkt_type != QUIC_PKT_TYPE_1RTT && pkt_type != QUIC_PKT_TYPE_VERSION_NEG; -} - -/* - * Determine if the packet type has a SCID field. - */ -static ossl_inline ossl_unused int -ossl_quic_pkt_type_has_scid(uint32_t pkt_type) -{ - return pkt_type != QUIC_PKT_TYPE_1RTT; -} - -/* - * Smallest possible QUIC packet size as per RFC (aside from version negotiation - * packets). - */ -# define QUIC_MIN_VALID_PKT_LEN_CRYPTO 21 -# define QUIC_MIN_VALID_PKT_LEN_VERSION_NEG 7 -# define QUIC_MIN_VALID_PKT_LEN QUIC_MIN_VALID_PKT_LEN_VERSION_NEG - -typedef struct quic_pkt_hdr_ptrs_st QUIC_PKT_HDR_PTRS; - -/* - * QUIC Packet Header Protection - * ============================= - * - * Functions to apply and remove QUIC packet header protection. A header - * protector is initialised using ossl_quic_hdr_protector_init and must be - * destroyed using ossl_quic_hdr_protector_cleanup when no longer needed. - */ -typedef struct quic_hdr_protector_st { - OSSL_LIB_CTX *libctx; - const char *propq; - EVP_CIPHER_CTX *cipher_ctx; - EVP_CIPHER *cipher; - uint32_t cipher_id; -} QUIC_HDR_PROTECTOR; - -# define QUIC_HDR_PROT_CIPHER_AES_128 1 -# define QUIC_HDR_PROT_CIPHER_AES_256 2 -# define QUIC_HDR_PROT_CIPHER_CHACHA 3 - -/* - * Initialises a header protector. - * - * cipher_id: - * The header protection cipher method to use. One of - * QUIC_HDR_PROT_CIPHER_*. Must be chosen based on negotiated TLS cipher - * suite. - * - * quic_hp_key: - * This must be the "quic hp" key derived from a traffic secret. - * - * The length of the quic_hp_key must correspond to that expected for the - * given cipher ID. - * - * The header protector performs amortisable initialisation in this function, - * therefore a header protector should be used for as long as possible. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_hdr_protector_init(QUIC_HDR_PROTECTOR *hpr, - OSSL_LIB_CTX *libctx, - const char *propq, - uint32_t cipher_id, - const unsigned char *quic_hp_key, - size_t quic_hp_key_len); - -/* - * Destroys a header protector. This is also safe to call on a zero-initialized - * OSSL_QUIC_HDR_PROTECTOR structure which has not been initialized, or which - * has already been destroyed. - */ -void ossl_quic_hdr_protector_cleanup(QUIC_HDR_PROTECTOR *hpr); - -/* - * Removes header protection from a packet. The packet payload must currently be - * encrypted (i.e., you must remove header protection before decrypting packets - * received). The function examines the header buffer to determine which bytes - * of the header need to be decrypted. - * - * If this function fails, no data is modified. - * - * This is implemented as a call to ossl_quic_hdr_protector_decrypt_fields(). - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_hdr_protector_decrypt(QUIC_HDR_PROTECTOR *hpr, - QUIC_PKT_HDR_PTRS *ptrs); - -/* - * Applies header protection to a packet. The packet payload must already have - * been encrypted (i.e., you must apply header protection after encrypting - * a packet). The function examines the header buffer to determine which bytes - * of the header need to be encrypted. - * - * This is implemented as a call to ossl_quic_hdr_protector_encrypt_fields(). - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_hdr_protector_encrypt(QUIC_HDR_PROTECTOR *hpr, - QUIC_PKT_HDR_PTRS *ptrs); - -/* - * Removes header protection from a packet. The packet payload must currently - * be encrypted. This is a low-level function which assumes you have already - * determined which parts of the packet header need to be decrypted. - * - * sample: - * The range of bytes in the packet to be used to generate the header - * protection mask. It is permissible to set sample_len to the size of the - * remainder of the packet; this function will only use as many bytes as - * needed. If not enough sample bytes are provided, this function fails. - * - * first_byte: - * The first byte of the QUIC packet header to be decrypted. - * - * pn: - * Pointer to the start of the PN field. The caller is responsible - * for ensuring at least four bytes follow this pointer. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_hdr_protector_decrypt_fields(QUIC_HDR_PROTECTOR *hpr, - const unsigned char *sample, - size_t sample_len, - unsigned char *first_byte, - unsigned char *pn_bytes); - -/* - * Works analogously to ossl_hdr_protector_decrypt_fields, but applies header - * protection instead of removing it. - */ -int ossl_quic_hdr_protector_encrypt_fields(QUIC_HDR_PROTECTOR *hpr, - const unsigned char *sample, - size_t sample_len, - unsigned char *first_byte, - unsigned char *pn_bytes); - -/* - * QUIC Packet Header - * ================== - * - * This structure provides a logical representation of a QUIC packet header. - * - * QUIC packet formats fall into the following categories: - * - * Long Packets, which is subdivided into five possible packet types: - * Version Negotiation (a special case); - * Initial; - * 0-RTT; - * Handshake; and - * Retry - * - * Short Packets, which comprises only a single packet type (1-RTT). - * - * The packet formats vary and common fields are found in some packets but - * not others. The below table indicates which fields are present in which - * kinds of packet. * indicates header protection is applied. - * - * SLLLLL Legend: 1=1-RTT, i=Initial, 0=0-RTT, h=Handshake - * 1i0hrv r=Retry, v=Version Negotiation - * ------ - * 1i0hrv Header Form (0=Short, 1=Long) - * 1i0hr Fixed Bit (always 1) - * 1 Spin Bit - * 1 * Reserved Bits - * 1 * Key Phase - * 1i0h * Packet Number Length - * i0hr? Long Packet Type - * i0h Type-Specific Bits - * i0hr Version (note: always 0 for Version Negotiation packets) - * 1i0hrv Destination Connection ID - * i0hrv Source Connection ID - * 1i0h * Packet Number - * i Token - * i0h Length - * r Retry Token - * r Retry Integrity Tag - * - * For each field below, the conditions under which the field is valid are - * specified. If a field is not currently valid, it is initialized to a zero or - * NULL value. - */ -typedef struct quic_pkt_hdr_st { - /* [ALL] A QUIC_PKT_TYPE_* value. Always valid. */ - unsigned int type :8; - - /* [S] Value of the spin bit. Valid if (type == 1RTT). */ - unsigned int spin_bit :1; - - /* - * [S] Value of the Key Phase bit in the short packet. - * Valid if (type == 1RTT && !partial). - */ - unsigned int key_phase :1; - - /* - * [1i0h] Length of packet number in bytes. This is the decoded value. - * Valid if ((type == 1RTT || (version && type != RETRY)) && !partial). - */ - unsigned int pn_len :4; - - /* - * [ALL] Set to 1 if this is a partial decode because the packet header - * has not yet been deprotected. pn_len, pn and key_phase are not valid if - * this is set. - */ - unsigned int partial :1; - - /* - * [ALL] Whether the fixed bit was set. Note that only Version Negotiation - * packets are allowed to have this unset, so this will always be 1 for all - * other packet types (decode will fail if it is not set). Ignored when - * encoding unless encoding a Version Negotiation packet. - */ - unsigned int fixed :1; - - /* - * The unused bits in the low 4 bits of a Retry packet header's first byte. - * This is used to ensure that Retry packets have the same bit-for-bit - * representation in their header when decoding and encoding them again. - * This is necessary to validate Retry packet headers. - */ - unsigned int unused :4; - - /* - * The 'Reserved' bits in an Initial, Handshake, 0-RTT or 1-RTT packet - * header's first byte. These are provided so that the caller can validate - * that they are zero, as this must be done after packet protection is - * successfully removed to avoid creating a timing channel. - */ - unsigned int reserved :2; - - /* [L] Version field. Valid if (type != 1RTT). */ - uint32_t version; - - /* [ALL] The destination connection ID. Always valid. */ - QUIC_CONN_ID dst_conn_id; - - /* - * [L] The source connection ID. - * Valid if (type != 1RTT). - */ - QUIC_CONN_ID src_conn_id; - - /* - * [1i0h] Relatively-encoded packet number in raw, encoded form. The correct - * decoding of this value is context-dependent. The number of bytes valid in - * this buffer is determined by pn_len above. If the decode was partial, - * this field is not valid. - * - * Valid if ((type == 1RTT || (version && type != RETRY)) && !partial). - */ - unsigned char pn[4]; - - /* - * [i] Token field in Initial packet. Points to memory inside the decoded - * PACKET, and therefore is valid for as long as the PACKET's buffer is - * valid. token_len is the length of the token in bytes. - * - * Valid if (type == INITIAL). - */ - const unsigned char *token; - size_t token_len; - - /* - * [ALL] Payload length in bytes. - * - * Though 1-RTT, Retry and Version Negotiation packets do not contain an - * explicit length field, this field is always valid and is used by the - * packet header encoding and decoding routines to describe the payload - * length, regardless of whether the packet type encoded or decoded uses an - * explicit length indication. - */ - size_t len; - - /* - * Pointer to start of payload data in the packet. Points to memory inside - * the decoded PACKET, and therefore is valid for as long as the PACKET'S - * buffer is valid. The length of the buffer in bytes is in len above. - * - * For Version Negotiation packets, points to the array of supported - * versions. - * - * For Retry packets, points to the Retry packet payload, which comprises - * the Retry Token followed by a 16-byte Retry Integrity Tag. - * - * Regardless of whether a packet is a Version Negotiation packet (where the - * payload contains a list of supported versions), a Retry packet (where the - * payload contains a Retry Token and Retry Integrity Tag), or any other - * packet type (where the payload contains frames), the payload is not - * validated and the user must parse the payload bearing this in mind. - * - * If the decode was partial (partial is set), this points to the start of - * the packet number field, rather than the protected payload, as the length - * of the packet number field is unknown. The len field reflects this in - * this case (i.e., the len field is the number of payload bytes plus the - * number of bytes comprising the PN). - */ - const unsigned char *data; -} QUIC_PKT_HDR; - -/* - * Extra information which can be output by the packet header decode functions - * for the assistance of the header protector. This avoids the header protector - * needing to partially re-decode the packet header. - */ -struct quic_pkt_hdr_ptrs_st { - unsigned char *raw_start; /* start of packet */ - unsigned char *raw_sample; /* start of sampling range */ - size_t raw_sample_len; /* maximum length of sampling range */ - - /* - * Start of PN field. Guaranteed to be NULL unless at least four bytes are - * available via this pointer. - */ - unsigned char *raw_pn; -}; - -/* - * If partial is 1, reads the unprotected parts of a protected packet header - * from a PACKET, performing a partial decode. - * - * If partial is 0, the input is assumed to have already had header protection - * removed, and all header fields are decoded. - * - * If nodata is 1, the input is assumed to have no payload data in it. Otherwise - * payload data must be present. - * - * On success, the logical decode of the packet header is written to *hdr. - * hdr->partial is set or cleared according to whether a partial decode was - * performed. *ptrs is filled with pointers to various parts of the packet - * buffer. - * - * In order to decode short packets, the connection ID length being used must be - * known contextually, and should be passed as short_conn_id_len. If - * short_conn_id_len is set to an invalid value (a value greater than - * QUIC_MAX_CONN_ID_LEN), this function fails when trying to decode a short - * packet, but succeeds for long packets. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_wire_decode_pkt_hdr(PACKET *pkt, - size_t short_conn_id_len, - int partial, - int nodata, - QUIC_PKT_HDR *hdr, - QUIC_PKT_HDR_PTRS *ptrs); - -/* - * Encodes a packet header. The packet is written to pkt. - * - * The length of the (encrypted) packet payload should be written to hdr->len - * and will be placed in the serialized packet header. The payload data itself - * is not copied; the caller should write hdr->len bytes of encrypted payload to - * the WPACKET immediately after the call to this function. However, - * WPACKET_reserve_bytes is called for the payload size. - * - * This function does not apply header protection. You must apply header - * protection yourself after calling this function. *ptrs is filled with - * pointers which can be passed to a header protector, but this must be - * performed after the encrypted payload is written. - * - * The pointers in *ptrs are direct pointers into the WPACKET buffer. If more - * data is written to the WPACKET buffer, WPACKET buffer reallocations may - * occur, causing these pointers to become invalid. Therefore, you must not call - * any write WPACKET function between this call and the call to - * ossl_quic_hdr_protector_encrypt. This function calls WPACKET_reserve_bytes - * for the payload length, so you may assume hdr->len bytes are already free to - * write at the WPACKET cursor location once this function returns successfully. - * It is recommended that you call this function, write the encrypted payload, - * call ossl_quic_hdr_protector_encrypt, and then call - * WPACKET_allocate_bytes(hdr->len). - * - * Version Negotiation and Retry packets do not use header protection; for these - * header types, the fields in *ptrs are all written as zero. Version - * Negotiation, Retry and 1-RTT packets do not contain a Length field, but - * hdr->len bytes of data are still reserved in the WPACKET. - * - * If serializing a short packet and short_conn_id_len does not match the DCID - * specified in hdr, the function fails. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_wire_encode_pkt_hdr(WPACKET *pkt, - size_t short_conn_id_len, - const QUIC_PKT_HDR *hdr, - QUIC_PKT_HDR_PTRS *ptrs); - -/* - * Retrieves only the DCID from a packet header. This is intended for demuxer - * use. It avoids the need to parse the rest of the packet header twice. - * - * Information on packet length is not decoded, as this only needs to be used on - * the first packet in a datagram, therefore this takes a buffer and not a - * PACKET. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_wire_get_pkt_hdr_dst_conn_id(const unsigned char *buf, - size_t buf_len, - size_t short_conn_id_len, - QUIC_CONN_ID *dst_conn_id); - -/* - * Precisely predicts the encoded length of a packet header structure. - * - * May return 0 if the packet header is not valid, but the fact that this - * function returns non-zero does not guarantee that - * ossl_quic_wire_encode_pkt_hdr() will succeed. - */ -int ossl_quic_wire_get_encoded_pkt_hdr_len(size_t short_conn_id_len, - const QUIC_PKT_HDR *hdr); - -/* - * Packet Number Encoding - * ====================== - */ - -/* - * Decode an encoded packet header QUIC PN. - * - * enc_pn is the raw encoded PN to decode. enc_pn_len is its length in bytes as - * indicated by packet headers. largest_pn is the largest PN successfully - * processed in the relevant PN space. - * - * The resulting PN is written to *res_pn. - * - * Returns 1 on success or 0 on failure. - */ -int ossl_quic_wire_decode_pkt_hdr_pn(const unsigned char *enc_pn, - size_t enc_pn_len, - QUIC_PN largest_pn, - QUIC_PN *res_pn); - -/* - * Determine how many bytes should be used to encode a PN. Returns the number of - * bytes (which will be in range [1, 4]). - */ -int ossl_quic_wire_determine_pn_len(QUIC_PN pn, QUIC_PN largest_acked); - -/* - * Encode a PN for a packet header using the specified number of bytes, which - * should have been determined by calling ossl_quic_wire_determine_pn_len. The - * PN encoding process is done in two parts to allow the caller to override PN - * encoding length if it wishes. - * - * Returns 1 on success and 0 on failure. - */ -int ossl_quic_wire_encode_pkt_hdr_pn(QUIC_PN pn, - unsigned char *enc_pn, - size_t enc_pn_len); - -/* - * Retry Integrity Tags - * ==================== - */ - -# define QUIC_RETRY_INTEGRITY_TAG_LEN 16 - -/* - * Validate a retry integrity tag. Returns 1 if the tag is valid. - * - * Must be called on a hdr with a type of QUIC_PKT_TYPE_RETRY with a valid data - * pointer. - * - * client_initial_dcid must be the original DCID used by the client in its first - * Initial packet, as this is used to calculate the Retry Integrity Tag. - * - * Returns 0 if the tag is invalid, if called on any other type of packet or if - * the body is too short. - */ -int ossl_quic_validate_retry_integrity_tag(OSSL_LIB_CTX *libctx, - const char *propq, - const QUIC_PKT_HDR *hdr, - const QUIC_CONN_ID *client_initial_dcid); - -/* - * Calculates a retry integrity tag. Returns 0 on error, for example if hdr does - * not have a type of QUIC_PKT_TYPE_RETRY. - * - * client_initial_dcid must be the original DCID used by the client in its first - * Initial packet, as this is used to calculate the Retry Integrity Tag. - * - * tag must point to a buffer of QUIC_RETRY_INTEGRITY_TAG_LEN bytes in size. - * - * Note that hdr->data must point to the Retry packet body, and hdr->len must - * include the space for the Retry Integrity Tag. (This means that you can - * easily fill in a tag in a Retry packet you are generating by calling this - * function and passing (hdr->data + hdr->len - QUIC_RETRY_INTEGRITY_TAG_LEN) as - * the tag argument.) This function fails if hdr->len is too short to contain a - * Retry Integrity Tag. - */ -int ossl_quic_calculate_retry_integrity_tag(OSSL_LIB_CTX *libctx, - const char *propq, - const QUIC_PKT_HDR *hdr, - const QUIC_CONN_ID *client_initial_dcid, - unsigned char *tag); - -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/recordmethod.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/recordmethod.h deleted file mode 100644 index 53bd4ca6..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/recordmethod.h +++ /dev/null @@ -1,339 +0,0 @@ -/* - * 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_INTERNAL_RECORDMETHOD_H -# define OSSL_INTERNAL_RECORDMETHOD_H -# pragma once - -# include - -/* - * We use the term "record" here to refer to a packet of data. Records are - * typically protected via a cipher and MAC, or an AEAD cipher (although not - * always). This usage of the term record is consistent with the TLS concept. - * In QUIC the term "record" is not used but it is analogous to the QUIC term - * "packet". The interface in this file applies to all protocols that protect - * records/packets of data, i.e. (D)TLS and QUIC. The term record is used to - * refer to both contexts. - */ - -/* - * An OSSL_RECORD_METHOD is a protocol specific method which provides the - * functions for reading and writing records for that protocol. Which - * OSSL_RECORD_METHOD to use for a given protocol is defined by the SSL_METHOD. - */ -typedef struct ossl_record_method_st OSSL_RECORD_METHOD; - -/* - * An OSSL_RECORD_LAYER is just an externally defined opaque pointer created by - * the method - */ -typedef struct ossl_record_layer_st OSSL_RECORD_LAYER; - - -# define OSSL_RECORD_ROLE_CLIENT 0 -# define OSSL_RECORD_ROLE_SERVER 1 - -# define OSSL_RECORD_DIRECTION_READ 0 -# define OSSL_RECORD_DIRECTION_WRITE 1 - -/* - * Protection level. For <= TLSv1.2 only "NONE" and "APPLICATION" are used. - */ -# define OSSL_RECORD_PROTECTION_LEVEL_NONE 0 -# define OSSL_RECORD_PROTECTION_LEVEL_EARLY 1 -# define OSSL_RECORD_PROTECTION_LEVEL_HANDSHAKE 2 -# define OSSL_RECORD_PROTECTION_LEVEL_APPLICATION 3 - -# define OSSL_RECORD_RETURN_SUCCESS 1 -# define OSSL_RECORD_RETURN_RETRY 0 -# define OSSL_RECORD_RETURN_NON_FATAL_ERR -1 -# define OSSL_RECORD_RETURN_FATAL -2 -# define OSSL_RECORD_RETURN_EOF -3 - -/* - * Template for creating a record. A record consists of the |type| of data it - * will contain (e.g. alert, handshake, application data, etc) along with a - * buffer of payload data in |buf| of length |buflen|. - */ -struct ossl_record_template_st { - unsigned char type; - unsigned int version; - const unsigned char *buf; - size_t buflen; -}; - -typedef struct ossl_record_template_st OSSL_RECORD_TEMPLATE; - -/* - * Rather than a "method" approach, we could make this fetchable - Should we? - * There could be some complexity in finding suitable record layer implementations - * e.g. we need to find one that matches the negotiated protocol, cipher, - * extensions, etc. The selection_cb approach given above doesn't work so well - * if unknown third party providers with OSSL_RECORD_METHOD implementations are - * loaded. - */ - -/* - * If this becomes public API then we will need functions to create and - * free an OSSL_RECORD_METHOD, as well as functions to get/set the various - * function pointers....unless we make it fetchable. - */ -struct ossl_record_method_st { - /* - * Create a new OSSL_RECORD_LAYER object for handling the protocol version - * set by |vers|. |role| is 0 for client and 1 for server. |direction| - * indicates either read or write. |level| is the protection level as - * described above. |settings| are mandatory settings that will cause the - * new() call to fail if they are not understood (for example to require - * Encrypt-Then-Mac support). |options| are optional settings that will not - * cause the new() call to fail if they are not understood (for example - * whether to use "read ahead" or not). - * - * The BIO in |transport| is the BIO for the underlying transport layer. - * Where the direction is "read", then this BIO will only ever be used for - * reading data. Where the direction is "write", then this BIO will only - * every be used for writing data. - * - * An SSL object will always have at least 2 OSSL_RECORD_LAYER objects in - * force at any one time (one for reading and one for writing). In some - * protocols more than 2 might be used (e.g. in DTLS for retransmitting - * messages from an earlier epoch). - * - * The created OSSL_RECORD_LAYER object is stored in *ret on success (or - * NULL otherwise). The return value will be one of - * OSSL_RECORD_RETURN_SUCCESS, OSSL_RECORD_RETURN_FATAL or - * OSSL_RECORD_RETURN_NON_FATAL. A non-fatal return means that creation of - * the record layer has failed because it is unsuitable, but an alternative - * record layer can be tried instead. - */ - - /* - * If we eventually make this fetchable then we will need to use something - * other than EVP_CIPHER. Also mactype would not be a NID, but a string. For - * now though, this works. - */ - int (*new_record_layer)(OSSL_LIB_CTX *libctx, - const char *propq, int vers, - int role, int direction, - int level, - uint16_t epoch, - unsigned char *secret, - size_t secretlen, - unsigned char *key, - size_t keylen, - unsigned char *iv, - size_t ivlen, - unsigned char *mackey, - size_t mackeylen, - const EVP_CIPHER *ciph, - size_t taglen, - int mactype, - const EVP_MD *md, - COMP_METHOD *comp, - const EVP_MD *kdfdigest, - BIO *prev, - BIO *transport, - BIO *next, - BIO_ADDR *local, - BIO_ADDR *peer, - const OSSL_PARAM *settings, - const OSSL_PARAM *options, - const OSSL_DISPATCH *fns, - void *cbarg, - void *rlarg, - OSSL_RECORD_LAYER **ret); - int (*free)(OSSL_RECORD_LAYER *rl); - - /* Returns 1 if we have unprocessed data buffered or 0 otherwise */ - int (*unprocessed_read_pending)(OSSL_RECORD_LAYER *rl); - - /* - * Returns 1 if we have processed data buffered that can be read or 0 otherwise - * - not necessarily app data - */ - int (*processed_read_pending)(OSSL_RECORD_LAYER *rl); - - /* - * The amount of processed app data that is internally buffered and - * available to read - */ - size_t (*app_data_pending)(OSSL_RECORD_LAYER *rl); - - /* - * Find out the maximum number of records that the record layer is prepared - * to process in a single call to write_records. It is the caller's - * responsibility to ensure that no call to write_records exceeds this - * number of records. |type| is the type of the records that the caller - * wants to write, and |len| is the total amount of data that it wants - * to send. |maxfrag| is the maximum allowed fragment size based on user - * configuration, or TLS parameter negotiation. |*preffrag| contains on - * entry the default fragment size that will actually be used based on user - * configuration. This will always be less than or equal to |maxfrag|. On - * exit the record layer may update this to an alternative fragment size to - * be used. This must always be less than or equal to |maxfrag|. - */ - size_t (*get_max_records)(OSSL_RECORD_LAYER *rl, uint8_t type, size_t len, - size_t maxfrag, size_t *preffrag); - - /* - * Write |numtempl| records from the array of record templates pointed to - * by |templates|. Each record should be no longer than the value returned - * by get_max_record_len(), and there should be no more records than the - * value returned by get_max_records(). - * Where possible the caller will attempt to ensure that all records are the - * same length, except the last record. This may not always be possible so - * the record method implementation should not rely on this being the case. - * In the event of a retry the caller should call retry_write_records() - * to try again. No more calls to write_records() should be attempted until - * retry_write_records() returns success. - * Buffers allocated for the record templates can be freed immediately after - * write_records() returns - even in the case a retry. - * The record templates represent the plaintext payload. The encrypted - * output is written to the |transport| BIO. - * Returns: - * 1 on success - * 0 on retry - * -1 on failure - */ - int (*write_records)(OSSL_RECORD_LAYER *rl, OSSL_RECORD_TEMPLATE *templates, - size_t numtempl); - - /* - * Retry a previous call to write_records. The caller should continue to - * call this until the function returns with success or failure. After - * each retry more of the data may have been incrementally sent. - * Returns: - * 1 on success - * 0 on retry - * -1 on failure - */ - int (*retry_write_records)(OSSL_RECORD_LAYER *rl); - - /* - * Read a record and return the record layer version and record type in - * the |rversion| and |type| parameters. |*data| is set to point to a - * record layer buffer containing the record payload data and |*datalen| - * is filled in with the length of that data. The |epoch| and |seq_num| - * values are only used if DTLS has been negotiated. In that case they are - * filled in with the epoch and sequence number from the record. - * An opaque record layer handle for the record is returned in |*rechandle| - * which is used in a subsequent call to |release_record|. The buffer must - * remain available until all the bytes from record are released via one or - * more release_record calls. - * - * Internally the OSSL_RECORD_METHOD implementation may read/process - * multiple records in one go and buffer them. - */ - int (*read_record)(OSSL_RECORD_LAYER *rl, void **rechandle, int *rversion, - uint8_t *type, const unsigned char **data, size_t *datalen, - uint16_t *epoch, unsigned char *seq_num); - /* - * Release length bytes from a buffer associated with a record previously - * read with read_record. Once all the bytes from a record are released, the - * whole record and its associated buffer is released. Records are - * guaranteed to be released in the order that they are read. - */ - int (*release_record)(OSSL_RECORD_LAYER *rl, void *rechandle, size_t length); - - /* - * In the event that a fatal error is returned from the functions above then - * get_alert_code() can be called to obtain a more details identifier for - * the error. In (D)TLS this is the alert description code. - */ - int (*get_alert_code)(OSSL_RECORD_LAYER *rl); - - /* - * Update the transport BIO from the one originally set in the - * new_record_layer call - */ - int (*set1_bio)(OSSL_RECORD_LAYER *rl, BIO *bio); - - /* Called when protocol negotiation selects a protocol version to use */ - int (*set_protocol_version)(OSSL_RECORD_LAYER *rl, int version); - - /* - * Whether we are allowed to receive unencrypted alerts, even if we might - * otherwise expect encrypted records. Ignored by protocol versions where - * this isn't relevant - */ - void (*set_plain_alerts)(OSSL_RECORD_LAYER *rl, int allow); - - /* - * Called immediately after creation of the record layer if we are in a - * first handshake. Also called at the end of the first handshake - */ - void (*set_first_handshake)(OSSL_RECORD_LAYER *rl, int first); - - /* - * Set the maximum number of pipelines that the record layer should process. - * The default is 1. - */ - void (*set_max_pipelines)(OSSL_RECORD_LAYER *rl, size_t max_pipelines); - - /* - * Called to tell the record layer whether we are currently "in init" or - * not. Default at creation of the record layer is "yes". - */ - void (*set_in_init)(OSSL_RECORD_LAYER *rl, int in_init); - - /* - * Get a short or long human readable description of the record layer state - */ - void (*get_state)(OSSL_RECORD_LAYER *rl, const char **shortstr, - const char **longstr); - - /* - * Set new options or modify ones that were originally specified in the - * new_record_layer call. - */ - int (*set_options)(OSSL_RECORD_LAYER *rl, const OSSL_PARAM *options); - - const COMP_METHOD *(*get_compression)(OSSL_RECORD_LAYER *rl); - - /* - * Set the maximum fragment length to be used for the record layer. This - * will override any previous value supplied for the "max_frag_len" - * setting during construction of the record layer. - */ - void (*set_max_frag_len)(OSSL_RECORD_LAYER *rl, size_t max_frag_len); - - /* - * The maximum expansion in bytes that the record layer might add while - * writing a record - */ - size_t (*get_max_record_overhead)(OSSL_RECORD_LAYER *rl); - - /* - * Increment the record sequence number - */ - int (*increment_sequence_ctr)(OSSL_RECORD_LAYER *rl); - - /* - * Allocate read or write buffers. Does nothing if already allocated. - * Assumes default buffer length and 1 pipeline. - */ - int (*alloc_buffers)(OSSL_RECORD_LAYER *rl); - - /* - * Free read or write buffers. Fails if there is pending read or write - * data. Buffers are automatically reallocated on next read/write. - */ - int (*free_buffers)(OSSL_RECORD_LAYER *rl); -}; - - -/* Standard built-in record methods */ -extern const OSSL_RECORD_METHOD ossl_tls_record_method; -# ifndef OPENSSL_NO_KTLS -extern const OSSL_RECORD_METHOD ossl_ktls_record_method; -# endif -extern const OSSL_RECORD_METHOD ossl_dtls_record_method; - -#endif /* !defined(OSSL_INTERNAL_RECORDMETHOD_H) */ 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 deleted file mode 100644 index 4c9ab266..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/refcount.h +++ /dev/null @@ -1,291 +0,0 @@ -/* - * Copyright 2016-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_REFCOUNT_H -# define OSSL_INTERNAL_REFCOUNT_H -# pragma once - -# include -# 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 - -# if defined(HAVE_C11_ATOMICS) && defined(ATOMIC_INT_LOCK_FREE) \ - && ATOMIC_INT_LOCK_FREE > 0 - -# define HAVE_ATOMICS 1 - -typedef struct { - _Atomic int val; -} CRYPTO_REF_COUNT; - -static inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = atomic_fetch_add_explicit(&refcnt->val, 1, memory_order_relaxed) + 1; - return 1; -} - -/* - * Changes to shared structure other than reference counter have to be - * serialized. And any kind of serialization implies a release fence. This - * means that by the time reference counter is decremented all other - * changes are visible on all processors. Hence decrement itself can be - * relaxed. In case it hits zero, object will be destructed. Since it's - * last use of the object, destructor programmer might reason that access - * 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(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = atomic_fetch_sub_explicit(&refcnt->val, 1, memory_order_relaxed) - 1; - if (*ret == 0) - atomic_thread_fence(memory_order_acquire); - return 1; -} - -static inline int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = atomic_load_explicit(&refcnt->val, memory_order_relaxed); - return 1; -} - -# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) && __GCC_ATOMIC_INT_LOCK_FREE > 0 - -# define HAVE_ATOMICS 1 - -typedef struct { - int val; -} CRYPTO_REF_COUNT; - -static __inline__ int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = __atomic_fetch_add(&refcnt->val, 1, __ATOMIC_RELAXED) + 1; - return 1; -} - -static __inline__ int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = __atomic_fetch_sub(&refcnt->val, 1, __ATOMIC_RELAXED) - 1; - if (*ret == 0) - __atomic_thread_fence(__ATOMIC_ACQUIRE); - return 1; -} - -static __inline__ int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = __atomic_load_n(&refcnt->val, __ATOMIC_RELAXED); - return 1; -} - -# elif defined(__ICL) && defined(_WIN32) -# define HAVE_ATOMICS 1 - -typedef struct { - volatile int val; -} CRYPTO_REF_COUNT; - -static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedExchangeAdd((void *)&refcnt->val, 1) + 1; - return 1; -} - -static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *val, int *refcnt) -{ - *ret = _InterlockedExchangeAdd((void *)&refcnt->val, -1) - 1; - return 1; -} - -static __inline int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedOr((void *)&refcnt->val, 0); - return 1; -} - -# elif defined(_MSC_VER) && _MSC_VER>=1200 - -# define HAVE_ATOMICS 1 - -typedef struct { - volatile int val; -} 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 - -static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedExchangeAdd_nf(&refcnt->val, 1) + 1; - return 1; -} - -static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedExchangeAdd_nf(&refcnt->val, -1) - 1; - if (*ret == 0) - __dmb(_ARM_BARRIER_ISH); - return 1; -} - -static __inline int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedOr_nf((void *)&refcnt->val, 0); - return 1; -} - -# else -# if !defined(_WIN32_WCE) -# pragma intrinsic(_InterlockedExchangeAdd) -# else -# 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 - -static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedExchangeAdd(&refcnt->val, 1) + 1; - return 1; -} - -static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedExchangeAdd(&refcnt->val, -1) - 1; - return 1; -} - -static __inline int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) -{ - *ret = _InterlockedExchangeAdd(&refcnt->val, 0); - return 1; -} - -# endif - -# 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 struct { - int val; -# ifdef OPENSSL_THREADS - CRYPTO_RWLOCK *lock; -# endif -} CRYPTO_REF_COUNT; - -# ifdef OPENSSL_THREADS - -static ossl_unused ossl_inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, - int *ret) -{ - return CRYPTO_atomic_add(&refcnt->val, 1, ret, refcnt->lock); -} - -static ossl_unused ossl_inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, - int *ret) -{ - return CRYPTO_atomic_add(&refcnt->val, -1, ret, refcnt->lock); -} - -static ossl_unused ossl_inline int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, - int *ret) -{ - return CRYPTO_atomic_load_int(&refcnt->val, ret, refcnt->lock); -} - -# define CRYPTO_NEW_FREE_DEFINED 1 -static ossl_unused ossl_inline int CRYPTO_NEW_REF(CRYPTO_REF_COUNT *refcnt, int n) -{ - refcnt->val = n; - refcnt->lock = CRYPTO_THREAD_lock_new(); - if (refcnt->lock == NULL) { - ERR_raise(ERR_LIB_CRYPTO, ERR_R_CRYPTO_LIB); - return 0; - } - return 1; -} - -static ossl_unused ossl_inline void CRYPTO_FREE_REF(CRYPTO_REF_COUNT *refcnt) \ -{ - if (refcnt != NULL) - CRYPTO_THREAD_lock_free(refcnt->lock); -} - -# else /* OPENSSL_THREADS */ - -static ossl_unused ossl_inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, - int *ret) -{ - refcnt->val++; - *ret = refcnt->val; - return 1; -} - -static ossl_unused ossl_inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, - int *ret) -{ - refcnt->val--; - *ret = refcnt->val; - return 1; -} - -static ossl_unused ossl_inline int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, - int *ret) -{ - *ret = refcnt->val; - return 1; -} - -# endif /* OPENSSL_THREADS */ -# endif - -# ifndef CRYPTO_NEW_FREE_DEFINED -static ossl_unused ossl_inline int CRYPTO_NEW_REF(CRYPTO_REF_COUNT *refcnt, int n) -{ - refcnt->val = n; - return 1; -} - -static ossl_unused ossl_inline void CRYPTO_FREE_REF(CRYPTO_REF_COUNT *refcnt) \ -{ -} -# endif /* CRYPTO_NEW_FREE_DEFINED */ -#undef CRYPTO_NEW_FREE_DEFINED - -# if !defined(NDEBUG) && !defined(OPENSSL_NO_STDIO) -# define REF_ASSERT_ISNT(test) \ - (void)((test) ? (OPENSSL_die("refcount error", __FILE__, __LINE__), 1) : 0) -# else -# define REF_ASSERT_ISNT(i) -# 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.val, (void *)object) - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ring_buf.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ring_buf.h deleted file mode 100644 index 436f1ca1..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ring_buf.h +++ /dev/null @@ -1,277 +0,0 @@ -/* - * 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_INTERNAL_RING_BUF_H -# define OSSL_INTERNAL_RING_BUF_H -# pragma once - -# include /* For 'ossl_inline' */ -# include "internal/safe_math.h" - -/* - * ================================================================== - * Byte-wise ring buffer which supports pushing and popping blocks of multiple - * bytes at a time. The logical offset of each byte for the purposes of a QUIC - * stream is tracked. Bytes can be popped from the ring buffer in two stages; - * first they are popped, and then they are culled. Bytes which have been popped - * but not yet culled will not be overwritten, and can be restored. - */ -struct ring_buf { - void *start; - size_t alloc; /* size of buffer allocation in bytes */ - - /* - * Logical offset of the head (where we append to). This is the current size - * of the QUIC stream. This increases monotonically. - */ - uint64_t head_offset; - - /* - * Logical offset of the cull tail. Data is no longer needed and is - * deallocated as the cull tail advances, which occurs as data is - * acknowledged. This increases monotonically. - */ - uint64_t ctail_offset; -}; - -OSSL_SAFE_MATH_UNSIGNED(u64, uint64_t) - -#define MAX_OFFSET (((uint64_t)1) << 62) /* QUIC-imposed limit */ - -static ossl_inline int ring_buf_init(struct ring_buf *r) -{ - r->start = NULL; - r->alloc = 0; - r->head_offset = r->ctail_offset = 0; - return 1; -} - -static ossl_inline void ring_buf_destroy(struct ring_buf *r, int cleanse) -{ - if (cleanse) - OPENSSL_clear_free(r->start, r->alloc); - else - OPENSSL_free(r->start); - r->start = NULL; - r->alloc = 0; -} - -static ossl_inline size_t ring_buf_used(struct ring_buf *r) -{ - return (size_t)(r->head_offset - r->ctail_offset); -} - -static ossl_inline size_t ring_buf_avail(struct ring_buf *r) -{ - return r->alloc - ring_buf_used(r); -} - -static ossl_inline int ring_buf_write_at(struct ring_buf *r, - uint64_t logical_offset, - const unsigned char *buf, - size_t buf_len) -{ - size_t avail, idx, l; - unsigned char *start = r->start; - int i, err = 0; - - avail = ring_buf_avail(r); - if (logical_offset < r->ctail_offset - || safe_add_u64(logical_offset, buf_len, &err) - > safe_add_u64(r->head_offset, avail, &err) - || safe_add_u64(r->head_offset, buf_len, &err) - > MAX_OFFSET - || err) - return 0; - - for (i = 0; buf_len > 0 && i < 2; ++i) { - idx = logical_offset % r->alloc; - l = r->alloc - idx; - if (buf_len < l) - l = buf_len; - - memcpy(start + idx, buf, l); - if (r->head_offset < logical_offset + l) - r->head_offset = logical_offset + l; - - logical_offset += l; - buf += l; - buf_len -= l; - } - - assert(buf_len == 0); - - return 1; -} - -static ossl_inline size_t ring_buf_push(struct ring_buf *r, - const unsigned char *buf, - size_t buf_len) -{ - size_t pushed = 0, avail, idx, l; - unsigned char *start = r->start; - - for (;;) { - avail = ring_buf_avail(r); - if (buf_len > avail) - buf_len = avail; - - if (buf_len > MAX_OFFSET - r->head_offset) - buf_len = (size_t)(MAX_OFFSET - r->head_offset); - - if (buf_len == 0) - break; - - idx = r->head_offset % r->alloc; - l = r->alloc - idx; - if (buf_len < l) - l = buf_len; - - memcpy(start + idx, buf, l); - r->head_offset += l; - buf += l; - buf_len -= l; - pushed += l; - } - - return pushed; -} - -static ossl_inline const unsigned char *ring_buf_get_ptr(const struct ring_buf *r, - uint64_t logical_offset, - size_t *max_len) -{ - unsigned char *start = r->start; - size_t idx; - - if (logical_offset >= r->head_offset || logical_offset < r->ctail_offset) - return NULL; - idx = logical_offset % r->alloc; - *max_len = r->alloc - idx; - return start + idx; -} - -/* - * Retrieves data out of the read side of the ring buffer starting at the given - * logical offset. *buf is set to point to a contiguous span of bytes and - * *buf_len is set to the number of contiguous bytes. After this function - * returns, there may or may not be more bytes available at the logical offset - * of (logical_offset + *buf_len) by calling this function again. If the logical - * offset is out of the range retained by the ring buffer, returns 0, else - * returns 1. A logical offset at the end of the range retained by the ring - * buffer is not considered an error and is returned with a *buf_len of 0. - * - * The ring buffer state is not changed. - */ -static ossl_inline int ring_buf_get_buf_at(const struct ring_buf *r, - uint64_t logical_offset, - const unsigned char **buf, - size_t *buf_len) -{ - const unsigned char *start = r->start; - size_t idx, l; - - if (logical_offset > r->head_offset || logical_offset < r->ctail_offset) - return 0; - - if (r->alloc == 0) { - *buf = NULL; - *buf_len = 0; - return 1; - } - - idx = logical_offset % r->alloc; - l = (size_t)(r->head_offset - logical_offset); - if (l > r->alloc - idx) - l = r->alloc - idx; - - *buf = start + idx; - *buf_len = l; - return 1; -} - -static ossl_inline void ring_buf_cpop_range(struct ring_buf *r, - uint64_t start, uint64_t end, - int cleanse) -{ - assert(end >= start); - - if (start > r->ctail_offset || end >= MAX_OFFSET) - return; - - if (cleanse && r->alloc > 0 && end > r->ctail_offset) { - size_t idx = r->ctail_offset % r->alloc; - uint64_t cleanse_end = end + 1; - size_t l; - - if (cleanse_end > r->head_offset) - cleanse_end = r->head_offset; - l = (size_t)(cleanse_end - r->ctail_offset); - if (l > r->alloc - idx) { - OPENSSL_cleanse((unsigned char *)r->start + idx, r->alloc - idx); - l -= r->alloc - idx; - idx = 0; - } - if (l > 0) - OPENSSL_cleanse((unsigned char *)r->start + idx, l); - } - - r->ctail_offset = end + 1; - /* Allow culling unpushed data */ - if (r->head_offset < r->ctail_offset) - r->head_offset = r->ctail_offset; -} - -static ossl_inline int ring_buf_resize(struct ring_buf *r, size_t num_bytes, - int cleanse) -{ - struct ring_buf rnew = {0}; - const unsigned char *src = NULL; - size_t src_len = 0, copied = 0; - - if (num_bytes == r->alloc) - return 1; - - if (num_bytes < ring_buf_used(r)) - return 0; - - rnew.start = OPENSSL_malloc(num_bytes); - if (rnew.start == NULL) - return 0; - - rnew.alloc = num_bytes; - rnew.head_offset = r->head_offset - ring_buf_used(r); - rnew.ctail_offset = rnew.head_offset; - - for (;;) { - if (!ring_buf_get_buf_at(r, r->ctail_offset + copied, &src, &src_len)) { - OPENSSL_free(rnew.start); - return 0; - } - - if (src_len == 0) - break; - - if (ring_buf_push(&rnew, src, src_len) != src_len) { - OPENSSL_free(rnew.start); - return 0; - } - - copied += src_len; - } - - assert(rnew.head_offset == r->head_offset); - rnew.ctail_offset = r->ctail_offset; - - ring_buf_destroy(r, cleanse); - memcpy(r, &rnew, sizeof(*r)); - return 1; -} - -#endif /* OSSL_INTERNAL_RING_BUF_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/safe_math.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/safe_math.h deleted file mode 100644 index be37e6ab..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/safe_math.h +++ /dev/null @@ -1,443 +0,0 @@ -/* - * Copyright 2021-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_SAFE_MATH_H -# define OSSL_INTERNAL_SAFE_MATH_H -# pragma once - -# include /* For 'ossl_inline' */ - -# ifndef OPENSSL_NO_BUILTIN_OVERFLOW_CHECKING -# ifdef __has_builtin -# define has(func) __has_builtin(func) -# elif __GNUC__ > 5 -# define has(func) 1 -# endif -# endif /* OPENSSL_NO_BUILTIN_OVERFLOW_CHECKING */ - -# ifndef has -# define has(func) 0 -# endif - -/* - * Safe addition helpers - */ -# if has(__builtin_add_overflow) -# define OSSL_SAFE_MATH_ADDS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_add_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - type r; \ - \ - if (!__builtin_add_overflow(a, b, &r)) \ - return r; \ - *err |= 1; \ - return a < 0 ? min : max; \ - } - -# define OSSL_SAFE_MATH_ADDU(type_name, type, max) \ - static ossl_inline ossl_unused type safe_add_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - type r; \ - \ - if (!__builtin_add_overflow(a, b, &r)) \ - return r; \ - *err |= 1; \ - return a + b; \ - } - -# else /* has(__builtin_add_overflow) */ -# define OSSL_SAFE_MATH_ADDS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_add_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if ((a < 0) ^ (b < 0) \ - || (a > 0 && b <= max - a) \ - || (a < 0 && b >= min - a) \ - || a == 0) \ - return a + b; \ - *err |= 1; \ - return a < 0 ? min : max; \ - } - -# define OSSL_SAFE_MATH_ADDU(type_name, type, max) \ - static ossl_inline ossl_unused type safe_add_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b > max - a) \ - *err |= 1; \ - return a + b; \ - } -# endif /* has(__builtin_add_overflow) */ - -/* - * Safe subtraction helpers - */ -# if has(__builtin_sub_overflow) -# define OSSL_SAFE_MATH_SUBS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_sub_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - type r; \ - \ - if (!__builtin_sub_overflow(a, b, &r)) \ - return r; \ - *err |= 1; \ - return a < 0 ? min : max; \ - } - -# else /* has(__builtin_sub_overflow) */ -# define OSSL_SAFE_MATH_SUBS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_sub_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (!((a < 0) ^ (b < 0)) \ - || (b > 0 && a >= min + b) \ - || (b < 0 && a <= max + b) \ - || b == 0) \ - return a - b; \ - *err |= 1; \ - return a < 0 ? min : max; \ - } - -# endif /* has(__builtin_sub_overflow) */ - -# define OSSL_SAFE_MATH_SUBU(type_name, type) \ - static ossl_inline ossl_unused type safe_sub_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b > a) \ - *err |= 1; \ - return a - b; \ - } - -/* - * Safe multiplication helpers - */ -# if has(__builtin_mul_overflow) -# define OSSL_SAFE_MATH_MULS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_mul_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - type r; \ - \ - if (!__builtin_mul_overflow(a, b, &r)) \ - return r; \ - *err |= 1; \ - return (a < 0) ^ (b < 0) ? min : max; \ - } - -# define OSSL_SAFE_MATH_MULU(type_name, type, max) \ - static ossl_inline ossl_unused type safe_mul_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - type r; \ - \ - if (!__builtin_mul_overflow(a, b, &r)) \ - return r; \ - *err |= 1; \ - return a * b; \ - } - -# else /* has(__builtin_mul_overflow) */ -# define OSSL_SAFE_MATH_MULS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_mul_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (a == 0 || b == 0) \ - return 0; \ - if (a == 1) \ - return b; \ - if (b == 1) \ - return a; \ - if (a != min && b != min) { \ - const type x = a < 0 ? -a : a; \ - const type y = b < 0 ? -b : b; \ - \ - if (x <= max / y) \ - return a * b; \ - } \ - *err |= 1; \ - return (a < 0) ^ (b < 0) ? min : max; \ - } - -# define OSSL_SAFE_MATH_MULU(type_name, type, max) \ - static ossl_inline ossl_unused type safe_mul_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b != 0 && a > max / b) \ - *err |= 1; \ - return a * b; \ - } -# endif /* has(__builtin_mul_overflow) */ - -/* - * Safe division helpers - */ -# define OSSL_SAFE_MATH_DIVS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_div_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b == 0) { \ - *err |= 1; \ - return a < 0 ? min : max; \ - } \ - if (b == -1 && a == min) { \ - *err |= 1; \ - return max; \ - } \ - return a / b; \ - } - -# define OSSL_SAFE_MATH_DIVU(type_name, type, max) \ - static ossl_inline ossl_unused type safe_div_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b != 0) \ - return a / b; \ - *err |= 1; \ - return max; \ - } - -/* - * Safe modulus helpers - */ -# define OSSL_SAFE_MATH_MODS(type_name, type, min, max) \ - static ossl_inline ossl_unused type safe_mod_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b == 0) { \ - *err |= 1; \ - return 0; \ - } \ - if (b == -1 && a == min) { \ - *err |= 1; \ - return max; \ - } \ - return a % b; \ - } - -# define OSSL_SAFE_MATH_MODU(type_name, type) \ - static ossl_inline ossl_unused type safe_mod_ ## type_name(type a, \ - type b, \ - int *err) \ - { \ - if (b != 0) \ - return a % b; \ - *err |= 1; \ - return 0; \ - } - -/* - * Safe negation helpers - */ -# define OSSL_SAFE_MATH_NEGS(type_name, type, min) \ - static ossl_inline ossl_unused type safe_neg_ ## type_name(type a, \ - int *err) \ - { \ - if (a != min) \ - return -a; \ - *err |= 1; \ - return min; \ - } - -# define OSSL_SAFE_MATH_NEGU(type_name, type) \ - static ossl_inline ossl_unused type safe_neg_ ## type_name(type a, \ - int *err) \ - { \ - if (a == 0) \ - return a; \ - *err |= 1; \ - return 1 + ~a; \ - } - -/* - * Safe absolute value helpers - */ -# define OSSL_SAFE_MATH_ABSS(type_name, type, min) \ - static ossl_inline ossl_unused type safe_abs_ ## type_name(type a, \ - int *err) \ - { \ - if (a != min) \ - return a < 0 ? -a : a; \ - *err |= 1; \ - return min; \ - } - -# define OSSL_SAFE_MATH_ABSU(type_name, type) \ - static ossl_inline ossl_unused type safe_abs_ ## type_name(type a, \ - int *err) \ - { \ - return a; \ - } - -/* - * Safe fused multiply divide helpers - * - * These are a bit obscure: - * . They begin by checking the denominator for zero and getting rid of this - * corner case. - * - * . Second is an attempt to do the multiplication directly, if it doesn't - * overflow, the quotient is returned (for signed values there is a - * potential problem here which isn't present for unsigned). - * - * . Finally, the multiplication/division is transformed so that the larger - * of the numerators is divided first. This requires a remainder - * correction: - * - * a b / c = (a / c) b + (a mod c) b / c, where a > b - * - * The individual operations need to be overflow checked (again signed - * being more problematic). - * - * The algorithm used is not perfect but it should be "good enough". - */ -# define OSSL_SAFE_MATH_MULDIVS(type_name, type, max) \ - static ossl_inline ossl_unused type safe_muldiv_ ## type_name(type a, \ - type b, \ - type c, \ - int *err) \ - { \ - int e2 = 0; \ - type q, r, x, y; \ - \ - if (c == 0) { \ - *err |= 1; \ - return a == 0 || b == 0 ? 0 : max; \ - } \ - x = safe_mul_ ## type_name(a, b, &e2); \ - if (!e2) \ - return safe_div_ ## type_name(x, c, err); \ - if (b > a) { \ - x = b; \ - b = a; \ - a = x; \ - } \ - q = safe_div_ ## type_name(a, c, err); \ - r = safe_mod_ ## type_name(a, c, err); \ - x = safe_mul_ ## type_name(r, b, err); \ - y = safe_mul_ ## type_name(q, b, err); \ - q = safe_div_ ## type_name(x, c, err); \ - return safe_add_ ## type_name(y, q, err); \ - } - -# define OSSL_SAFE_MATH_MULDIVU(type_name, type, max) \ - static ossl_inline ossl_unused type safe_muldiv_ ## type_name(type a, \ - type b, \ - type c, \ - int *err) \ - { \ - int e2 = 0; \ - type x, y; \ - \ - if (c == 0) { \ - *err |= 1; \ - return a == 0 || b == 0 ? 0 : max; \ - } \ - x = safe_mul_ ## type_name(a, b, &e2); \ - if (!e2) \ - return x / c; \ - if (b > a) { \ - x = b; \ - b = a; \ - a = x; \ - } \ - x = safe_mul_ ## type_name(a % c, b, err); \ - y = safe_mul_ ## type_name(a / c, b, err); \ - return safe_add_ ## type_name(y, x / c, err); \ - } - -/* - * Calculate a / b rounding up: - * i.e. a / b + (a % b != 0) - * Which is usually (less safely) converted to (a + b - 1) / b - * If you *know* that b != 0, then it's safe to ignore err. - */ -#define OSSL_SAFE_MATH_DIV_ROUND_UP(type_name, type, max) \ - static ossl_inline ossl_unused type safe_div_round_up_ ## type_name \ - (type a, type b, int *errp) \ - { \ - type x; \ - int *err, err_local = 0; \ - \ - /* Allow errors to be ignored by callers */ \ - err = errp != NULL ? errp : &err_local; \ - /* Fast path, both positive */ \ - if (b > 0 && a > 0) { \ - /* Faster path: no overflow concerns */ \ - if (a < max - b) \ - return (a + b - 1) / b; \ - return a / b + (a % b != 0); \ - } \ - if (b == 0) { \ - *err |= 1; \ - return a == 0 ? 0 : max; \ - } \ - if (a == 0) \ - return 0; \ - /* Rather slow path because there are negatives involved */ \ - x = safe_mod_ ## type_name(a, b, err); \ - return safe_add_ ## type_name(safe_div_ ## type_name(a, b, err), \ - x != 0, err); \ - } - -/* Calculate ranges of types */ -# define OSSL_SAFE_MATH_MINS(type) ((type)1 << (sizeof(type) * 8 - 1)) -# define OSSL_SAFE_MATH_MAXS(type) (~OSSL_SAFE_MATH_MINS(type)) -# define OSSL_SAFE_MATH_MAXU(type) (~(type)0) - -/* - * Wrapper macros to create all the functions of a given type - */ -# define OSSL_SAFE_MATH_SIGNED(type_name, type) \ - OSSL_SAFE_MATH_ADDS(type_name, type, OSSL_SAFE_MATH_MINS(type), \ - OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_SUBS(type_name, type, OSSL_SAFE_MATH_MINS(type), \ - OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_MULS(type_name, type, OSSL_SAFE_MATH_MINS(type), \ - OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_DIVS(type_name, type, OSSL_SAFE_MATH_MINS(type), \ - OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_MODS(type_name, type, OSSL_SAFE_MATH_MINS(type), \ - OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_DIV_ROUND_UP(type_name, type, \ - OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_MULDIVS(type_name, type, OSSL_SAFE_MATH_MAXS(type)) \ - OSSL_SAFE_MATH_NEGS(type_name, type, OSSL_SAFE_MATH_MINS(type)) \ - OSSL_SAFE_MATH_ABSS(type_name, type, OSSL_SAFE_MATH_MINS(type)) - -# define OSSL_SAFE_MATH_UNSIGNED(type_name, type) \ - OSSL_SAFE_MATH_ADDU(type_name, type, OSSL_SAFE_MATH_MAXU(type)) \ - OSSL_SAFE_MATH_SUBU(type_name, type) \ - OSSL_SAFE_MATH_MULU(type_name, type, OSSL_SAFE_MATH_MAXU(type)) \ - OSSL_SAFE_MATH_DIVU(type_name, type, OSSL_SAFE_MATH_MAXU(type)) \ - OSSL_SAFE_MATH_MODU(type_name, type) \ - OSSL_SAFE_MATH_DIV_ROUND_UP(type_name, type, \ - OSSL_SAFE_MATH_MAXU(type)) \ - OSSL_SAFE_MATH_MULDIVU(type_name, type, OSSL_SAFE_MATH_MAXU(type)) \ - OSSL_SAFE_MATH_NEGU(type_name, type) \ - OSSL_SAFE_MATH_ABSU(type_name, type) - -#endif /* OSSL_INTERNAL_SAFE_MATH_H */ 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 deleted file mode 100644 index 80ad86e5..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sha3.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * 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 deleted file mode 100644 index f6496c81..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sizes.h +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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/internal/sm3.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sm3.h deleted file mode 100644 index db1d61f0..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sm3.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2017-2021 The OpenSSL Project Authors. All Rights Reserved. - * Copyright 2017 Ribose Inc. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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_SM3_H -# define OSSL_INTERNAL_SM3_H -# pragma once - -# include - -# ifdef OPENSSL_NO_SM3 -# error SM3 is disabled. -# endif - -# define SM3_DIGEST_LENGTH 32 -# define SM3_WORD unsigned int - -# define SM3_CBLOCK 64 -# define SM3_LBLOCK (SM3_CBLOCK/4) - -typedef struct SM3state_st { - SM3_WORD A, B, C, D, E, F, G, H; - SM3_WORD Nl, Nh; - SM3_WORD data[SM3_LBLOCK]; - unsigned int num; -} SM3_CTX; - -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); - -#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 deleted file mode 100644 index 2550c56b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sockets.h +++ /dev/null @@ -1,217 +0,0 @@ -/* - * 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 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 -# endif -# ifdef WIN32 -# define NO_SYS_UN_H -# endif -# ifdef OPENSSL_SYS_VMS -# define NO_SYS_PARAM_H -# define NO_SYS_UN_H -# endif - -# ifdef OPENSSL_NO_SOCK - -# elif defined(OPENSSL_SYS_WINDOWS) || defined(OPENSSL_SYS_MSDOS) -# if defined(__DJGPP__) -# define WATT32 -# define WATT32_NO_OLDIES -# include -# include -# include -# include -# include -# include -# elif defined(_WIN32_WCE) && _WIN32_WCE<410 -# define getservbyname _masked_declaration_getservbyname -# endif -# if !defined(IPPROTO_IP) - /* winsock[2].h was included already? */ -# include -# endif -# ifdef getservbyname - /* this is used to be wcecompat/include/winsock_extras.h */ -# undef getservbyname -struct servent *PASCAL getservbyname(const char *, const char *); -# endif - -# ifdef _WIN64 -/* - * Even though sizeof(SOCKET) is 8, it's safe to cast it to int, because - * the value constitutes an index in per-process table of limited size - * and not a real pointer. And we also depend on fact that all processors - * Windows run on happen to be two's-complement, which allows to - * interchange INVALID_SOCKET and -1. - */ -# define socket(d,t,p) ((int)socket(d,t,p)) -# define accept(s,f,l) ((int)accept(s,f,l)) -# endif - -/* Windows have other names for shutdown() reasons */ -# ifndef SHUT_RD -# define SHUT_RD SD_RECEIVE -# endif -# ifndef SHUT_WR -# define SHUT_WR SD_SEND -# endif -# ifndef SHUT_RDWR -# define SHUT_RDWR SD_BOTH -# endif - -# else -# if defined(__APPLE__) - /* - * This must be defined before including to get - * IPV6_RECVPKTINFO - */ -# define __APPLE_USE_RFC_3542 -# endif - -# ifndef NO_SYS_PARAM_H -# include -# endif -# ifdef OPENSSL_SYS_VXWORKS -# include -# endif - -# include -# if defined(OPENSSL_SYS_VMS) -typedef size_t socklen_t; /* Currently appears to be missing on VMS */ -# endif -# if defined(OPENSSL_SYS_VMS_NODECC) -# include -# include -# include -# else -# include -# 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) -# endif -# endif -# ifdef FILIO_H -# include /* FIONBIO in some SVR4, e.g. unixware, solaris */ -# endif -# include -# include -# include -# endif - -# ifdef OPENSSL_SYS_AIX -# include -# endif - -# ifdef OPENSSL_SYS_UNIX -# ifndef OPENSSL_SYS_TANDEM -# include -# endif -# include -# endif - -# ifndef VMS -# include -# else -# if !defined(TCPIP_TYPE_SOCKETSHR) && defined(__VMS_VER) && (__VMS_VER > 70000000) - /* ioctl is only in VMS > 7.0 and when socketshr is not used */ -# include -# endif -# include -# if defined(TCPIP_TYPE_SOCKETSHR) -# include -# endif -# endif - -# ifndef INVALID_SOCKET -# define INVALID_SOCKET (-1) -# endif -# endif - -/* - * Some IPv6 implementations are broken, you can disable them in known - * bad versions. - */ -# if !defined(OPENSSL_USE_IPV6) -# if defined(AF_INET6) -# define OPENSSL_USE_IPV6 1 -# else -# define OPENSSL_USE_IPV6 0 -# 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 -# define get_last_socket_error_is_eintr() (get_last_socket_error() == EINTR) - -# if defined(OPENSSL_SYS_WINDOWS) -# undef get_last_socket_error -# undef clear_socket_error -# undef get_last_socket_error_is_eintr -# define get_last_socket_error() WSAGetLastError() -# define clear_socket_error() WSASetLastError(0) -# define get_last_socket_error_is_eintr() (get_last_socket_error() == WSAEINTR) -# define readsocket(s,b,n) recv((s),(b),(n),0) -# define writesocket(s,b,n) send((s),(b),(n),0) -# elif defined(__DJGPP__) -# 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) -# elif defined(OPENSSL_SYS_VMS) -# define ioctlsocket(a,b,c) ioctl(a,b,c) -# define closesocket(s) close(s) -# define readsocket(s,b,n) recv((s),(b),(n),0) -# define writesocket(s,b,n) send((s),(b),(n),0) -# elif defined(OPENSSL_SYS_VXWORKS) -# define ioctlsocket(a,b,c) ioctl((a),(b),(int)(c)) -# 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) -# define readsocket(s,b,n) read((s),(b),(n)) -# 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/ssl.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ssl.h deleted file mode 100644 index 8a0c7974..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ssl.h +++ /dev/null @@ -1,24 +0,0 @@ -/* - * Copyright 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 - */ - -#include - -#ifndef OSSL_INTERNAL_SSL_H -# define OSSL_INTERNAL_SSL_H -# pragma once - -typedef void (*ossl_msg_cb)(int write_p, int version, int content_type, - const void *buf, size_t len, SSL *ssl, void *arg); - -int ossl_ssl_get_error(const SSL *s, int i, int check_err); - -/* Set if this is the QUIC handshake layer */ -# define TLS1_FLAGS_QUIC 0x2000 - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ssl3_cbc.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ssl3_cbc.h deleted file mode 100644 index 4fb5da19..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ssl3_cbc.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * 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 - */ - -#include - -/* tls_pad.c */ -int ssl3_cbc_remove_padding_and_mac(size_t *reclen, - size_t origreclen, - unsigned char *recdata, - unsigned char **mac, - int *alloced, - size_t block_size, size_t mac_size, - OSSL_LIB_CTX *libctx); - -int tls1_cbc_remove_padding_and_mac(size_t *reclen, - size_t origreclen, - unsigned char *recdata, - unsigned char **mac, - int *alloced, - size_t block_size, size_t mac_size, - int aead, - OSSL_LIB_CTX *libctx); - -/* ssl3_cbc.c */ -__owur char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx); -__owur int ssl3_cbc_digest_record(const EVP_MD *md, - unsigned char *md_out, - size_t *md_out_size, - const unsigned char *header, - const unsigned char *data, - size_t data_size, - size_t data_plus_mac_plus_padding_size, - const unsigned char *mac_secret, - size_t mac_secret_length, char is_sslv3); 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 deleted file mode 100644 index fd7f7e33..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sslconf.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * 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 - */ - -#ifndef OSSL_INTERNAL_SSLCONF_H -# define OSSL_INTERNAL_SSLCONF_H -# pragma once - -typedef struct ssl_conf_cmd_st SSL_CONF_CMD; - -const SSL_CONF_CMD *conf_ssl_get(size_t idx, const char **name, size_t *cnt); -int conf_ssl_name_find(const char *name, size_t *idx); -void conf_ssl_get_cmd(const SSL_CONF_CMD *cmd, size_t idx, char **cmdstr, - char **arg); - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/statem.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/statem.h deleted file mode 100644 index 136e6523..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/statem.h +++ /dev/null @@ -1,171 +0,0 @@ -/* - * Copyright 2015-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_STATEM_H -# define OSSL_INTERNAL_STATEM_H - -/***************************************************************************** - * * - * These enums should be considered PRIVATE to the state machine. No * - * non-state machine code should need to use these * - * * - *****************************************************************************/ -/* - * Valid return codes used for functions performing work prior to or after - * sending or receiving a message - */ -typedef enum { - /* Something went wrong */ - WORK_ERROR, - /* We're done working and there shouldn't be anything else to do after */ - WORK_FINISHED_STOP, - /* We're done working move onto the next thing */ - WORK_FINISHED_CONTINUE, - /* We're working on phase A */ - WORK_MORE_A, - /* We're working on phase B */ - WORK_MORE_B, - /* We're working on phase C */ - WORK_MORE_C -} WORK_STATE; - -/* Write transition return codes */ -typedef enum { - /* Something went wrong */ - WRITE_TRAN_ERROR, - /* A transition was successfully completed and we should continue */ - WRITE_TRAN_CONTINUE, - /* There is no more write work to be done */ - WRITE_TRAN_FINISHED -} WRITE_TRAN; - -/* Message flow states */ -typedef enum { - /* No handshake in progress */ - MSG_FLOW_UNINITED, - /* A permanent error with this connection */ - MSG_FLOW_ERROR, - /* We are reading messages */ - MSG_FLOW_READING, - /* We are writing messages */ - MSG_FLOW_WRITING, - /* Handshake has finished */ - MSG_FLOW_FINISHED -} MSG_FLOW_STATE; - -/* Read states */ -typedef enum { - READ_STATE_HEADER, - READ_STATE_BODY, - READ_STATE_POST_PROCESS -} READ_STATE; - -/* Write states */ -typedef enum { - WRITE_STATE_TRANSITION, - WRITE_STATE_PRE_WORK, - WRITE_STATE_SEND, - WRITE_STATE_POST_WORK -} WRITE_STATE; - -typedef enum { - CON_FUNC_ERROR = 0, - CON_FUNC_SUCCESS, - CON_FUNC_DONT_SEND -} CON_FUNC_RETURN; - -typedef int (*ossl_statem_mutate_handshake_cb)(const unsigned char *msgin, - size_t inlen, - unsigned char **msgout, - size_t *outlen, - void *arg); - -typedef void (*ossl_statem_finish_mutate_handshake_cb)(void *arg); - -/***************************************************************************** - * * - * This structure should be considered "opaque" to anything outside of the * - * state machine. No non-state machine code should be accessing the members * - * of this structure. * - * * - *****************************************************************************/ - -struct ossl_statem_st { - MSG_FLOW_STATE state; - WRITE_STATE write_state; - WORK_STATE write_state_work; - READ_STATE read_state; - WORK_STATE read_state_work; - OSSL_HANDSHAKE_STATE hand_state; - /* The handshake state requested by an API call (e.g. HelloRequest) */ - OSSL_HANDSHAKE_STATE request_state; - int in_init; - int read_state_first_init; - /* true when we are actually in SSL_accept() or SSL_connect() */ - int in_handshake; - /* - * True when are processing a "real" handshake that needs cleaning up (not - * just a HelloRequest or similar). - */ - int cleanuphand; - /* Should we skip the CertificateVerify message? */ - unsigned int no_cert_verify; - int use_timer; - - /* Test harness message mutator callbacks */ - ossl_statem_mutate_handshake_cb mutate_handshake_cb; - ossl_statem_finish_mutate_handshake_cb finish_mutate_handshake_cb; - void *mutatearg; - unsigned int write_in_progress : 1; -}; -typedef struct ossl_statem_st OSSL_STATEM; - -/***************************************************************************** - * * - * The following macros/functions represent the libssl internal API to the * - * state machine. Any libssl code may call these functions/macros * - * * - *****************************************************************************/ - -typedef struct ssl_connection_st SSL_CONNECTION; - -__owur int ossl_statem_accept(SSL *s); -__owur int ossl_statem_connect(SSL *s); -OSSL_HANDSHAKE_STATE ossl_statem_get_state(SSL_CONNECTION *s); -void ossl_statem_clear(SSL_CONNECTION *s); -void ossl_statem_set_renegotiate(SSL_CONNECTION *s); -void ossl_statem_send_fatal(SSL_CONNECTION *s, int al); -void ossl_statem_fatal(SSL_CONNECTION *s, int al, int reason, - const char *fmt, ...); -# define SSLfatal_alert(s, al) ossl_statem_send_fatal((s), (al)) -# define SSLfatal(s, al, r) SSLfatal_data((s), (al), (r), NULL) -# define SSLfatal_data \ - (ERR_new(), \ - ERR_set_debug(OPENSSL_FILE, OPENSSL_LINE, OPENSSL_FUNC), \ - ossl_statem_fatal) - -int ossl_statem_in_error(const SSL_CONNECTION *s); -void ossl_statem_set_in_init(SSL_CONNECTION *s, int init); -int ossl_statem_get_in_handshake(SSL_CONNECTION *s); -void ossl_statem_set_in_handshake(SSL_CONNECTION *s, int inhand); -__owur int ossl_statem_skip_early_data(SSL_CONNECTION *s); -void ossl_statem_check_finish_init(SSL_CONNECTION *s, int send); -void ossl_statem_set_hello_verify_done(SSL_CONNECTION *s); -__owur int ossl_statem_app_data_allowed(SSL_CONNECTION *s); -__owur int ossl_statem_export_allowed(SSL_CONNECTION *s); -__owur int ossl_statem_export_early_allowed(SSL_CONNECTION *s); - -/* Flush the write BIO */ -int statem_flush(SSL_CONNECTION *s); - -int ossl_statem_set_mutator(SSL *s, - ossl_statem_mutate_handshake_cb mutate_handshake_cb, - ossl_statem_finish_mutate_handshake_cb finish_mutate_handshake_cb, - void *mutatearg); - -#endif 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 deleted file mode 100644 index 33bae51e..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/symhacks.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - * 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.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread.h deleted file mode 100644 index 8c5bad77..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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_INTERNAL_THREAD_H -# define OPENSSL_INTERNAL_THREAD_H -# include -# include -# include -# include -# include -# include "crypto/context.h" - -void *ossl_crypto_thread_start(OSSL_LIB_CTX *ctx, CRYPTO_THREAD_ROUTINE start, - void *data); -int ossl_crypto_thread_join(void *task, CRYPTO_THREAD_RETVAL *retval); -int ossl_crypto_thread_clean(void *vhandle); -uint64_t ossl_get_avail_threads(OSSL_LIB_CTX *ctx); - -# if defined(OPENSSL_THREADS) - -# define OSSL_LIB_CTX_GET_THREADS(CTX) \ - ossl_lib_ctx_get_data(CTX, OSSL_LIB_CTX_THREAD_INDEX); - -typedef struct openssl_threads_st { - uint64_t max_threads; - uint64_t active_threads; - CRYPTO_MUTEX *lock; - CRYPTO_CONDVAR *cond_finished; -} OSSL_LIB_CTX_THREADS; - -# endif /* defined(OPENSSL_THREADS) */ - -#endif /* OPENSSL_INTERNAL_THREAD_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread_arch.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread_arch.h deleted file mode 100644 index 1bfc0ebb..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread_arch.h +++ /dev/null @@ -1,127 +0,0 @@ -/* - * 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_THREAD_ARCH_H -# define OSSL_INTERNAL_THREAD_ARCH_H -# include -# include -# include "internal/time.h" - -# if defined(_WIN32) -# include -# endif - -# if defined(OPENSSL_THREADS) && defined(OPENSSL_SYS_UNIX) -# define OPENSSL_THREADS_POSIX -# elif defined(OPENSSL_THREADS) && defined(OPENSSL_SYS_VMS) -# define OPENSSL_THREADS_POSIX -# elif defined(OPENSSL_THREADS) && defined(OPENSSL_SYS_WINDOWS) && \ - defined(_WIN32_WINNT) -# if _WIN32_WINNT >= 0x0600 -# define OPENSSL_THREADS_WINNT -# elif _WIN32_WINNT >= 0x0501 -# define OPENSSL_THREADS_WINNT -# define OPENSSL_THREADS_WINNT_LEGACY -# else -# define OPENSSL_THREADS_NONE -# endif -# else -# define OPENSSL_THREADS_NONE -# endif - -# include - -typedef void CRYPTO_MUTEX; -typedef void CRYPTO_CONDVAR; - -CRYPTO_MUTEX *ossl_crypto_mutex_new(void); -void ossl_crypto_mutex_lock(CRYPTO_MUTEX *mutex); -int ossl_crypto_mutex_try_lock(CRYPTO_MUTEX *mutex); -void ossl_crypto_mutex_unlock(CRYPTO_MUTEX *mutex); -void ossl_crypto_mutex_free(CRYPTO_MUTEX **mutex); - -CRYPTO_CONDVAR *ossl_crypto_condvar_new(void); -void ossl_crypto_condvar_wait(CRYPTO_CONDVAR *cv, CRYPTO_MUTEX *mutex); -void ossl_crypto_condvar_wait_timeout(CRYPTO_CONDVAR *cv, CRYPTO_MUTEX *mutex, - OSSL_TIME deadline); -void ossl_crypto_condvar_broadcast(CRYPTO_CONDVAR *cv); -void ossl_crypto_condvar_signal(CRYPTO_CONDVAR *cv); -void ossl_crypto_condvar_free(CRYPTO_CONDVAR **cv); - -typedef uint32_t CRYPTO_THREAD_RETVAL; -typedef CRYPTO_THREAD_RETVAL (*CRYPTO_THREAD_ROUTINE)(void *); -typedef CRYPTO_THREAD_RETVAL (*CRYPTO_THREAD_ROUTINE_CB)(void *, - void (**)(void *), - void **); - -# define CRYPTO_THREAD_NO_STATE 0UL -# define CRYPTO_THREAD_FINISHED (1UL << 0) -# define CRYPTO_THREAD_JOIN_AWAIT (1UL << 1) -# define CRYPTO_THREAD_JOINED (1UL << 2) - -# define CRYPTO_THREAD_GET_STATE(THREAD, FLAG) ((THREAD)->state & (FLAG)) -# define CRYPTO_THREAD_GET_ERROR(THREAD, FLAG) (((THREAD)->state >> 16) & (FLAG)) - -typedef struct crypto_thread_st { - uint32_t state; - void *data; - CRYPTO_THREAD_ROUTINE routine; - CRYPTO_THREAD_RETVAL retval; - void *handle; - CRYPTO_MUTEX *lock; - CRYPTO_MUTEX *statelock; - CRYPTO_CONDVAR *condvar; - unsigned long thread_id; - int joinable; - OSSL_LIB_CTX *ctx; -} CRYPTO_THREAD; - -# if defined(OPENSSL_THREADS) - -# define CRYPTO_THREAD_UNSET_STATE(THREAD, FLAG) \ - do { \ - (THREAD)->state &= ~(FLAG); \ - } while ((void)0, 0) - -# define CRYPTO_THREAD_SET_STATE(THREAD, FLAG) \ - do { \ - (THREAD)->state |= (FLAG); \ - } while ((void)0, 0) - -# define CRYPTO_THREAD_SET_ERROR(THREAD, FLAG) \ - do { \ - (THREAD)->state |= ((FLAG) << 16); \ - } while ((void)0, 0) - -# define CRYPTO_THREAD_UNSET_ERROR(THREAD, FLAG) \ - do { \ - (THREAD)->state &= ~((FLAG) << 16); \ - } while ((void)0, 0) - -# else - -# define CRYPTO_THREAD_UNSET_STATE(THREAD, FLAG) -# define CRYPTO_THREAD_SET_STATE(THREAD, FLAG) -# define CRYPTO_THREAD_SET_ERROR(THREAD, FLAG) -# define CRYPTO_THREAD_UNSET_ERROR(THREAD, FLAG) - -# endif /* defined(OPENSSL_THREADS) */ - -CRYPTO_THREAD * ossl_crypto_thread_native_start(CRYPTO_THREAD_ROUTINE routine, - void *data, int joinable); -int ossl_crypto_thread_native_spawn(CRYPTO_THREAD *thread); -int ossl_crypto_thread_native_join(CRYPTO_THREAD *thread, - CRYPTO_THREAD_RETVAL *retval); -int ossl_crypto_thread_native_perform_join(CRYPTO_THREAD *thread, - CRYPTO_THREAD_RETVAL *retval); -int ossl_crypto_thread_native_exit(void); -int ossl_crypto_thread_native_is_self(CRYPTO_THREAD *thread); -int ossl_crypto_thread_native_clean(CRYPTO_THREAD *thread); - -#endif /* OSSL_INTERNAL_THREAD_ARCH_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 deleted file mode 100644 index d6cb2eee..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread_once.h +++ /dev/null @@ -1,151 +0,0 @@ -/* - * 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_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 an int result (1 for success or - * 0 for failure). Typical usage might be: - * - * DEFINE_RUN_ONCE(myinitfunc) - * { - * do_some_initialisation(); - * if (init_is_successful()) - * return 1; - * - * return 0; - * } - */ -# define DEFINE_RUN_ONCE(init) \ - static int init(void); \ - int init##_ossl_ret_ = 0; \ - void init##_ossl_(void) \ - { \ - init##_ossl_ret_ = init(); \ - } \ - static int init(void) - -/* - * 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) \ - 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 an int result (1 for success or 0 for - * failure). Typical usage might be: - * - * DEFINE_RUN_ONCE_STATIC(myinitfunc) - * { - * do_some_initialisation(); - * if (init_is_successful()) - * return 1; - * - * return 0; - * } - */ -# define DEFINE_RUN_ONCE_STATIC(init) \ - static int init(void); \ - static int init##_ossl_ret_ = 0; \ - static void init##_ossl_(void) \ - { \ - init##_ossl_ret_ = init(); \ - } \ - static int init(void) - -/* - * DEFINE_RUN_ONCE_STATIC_ALT: Define an alternative initialiser function. This - * function will be declared as static within the file. It takes no arguments - * and returns an int result (1 for success or 0 for failure). An alternative - * initialiser function is expected to be associated with a primary initialiser - * function defined via DEFINE_ONCE_STATIC where both functions use the same - * CRYPTO_ONCE object to synchronise. Where an alternative initialiser function - * is used only one of the primary or the alternative initialiser function will - * ever be called - and that function will be called exactly once. Definition - * of an alternative initialiser function MUST occur AFTER the definition of the - * primary initialiser function. - * - * Typical usage might be: - * - * DEFINE_RUN_ONCE_STATIC(myinitfunc) - * { - * do_some_initialisation(); - * if (init_is_successful()) - * return 1; - * - * return 0; - * } - * - * DEFINE_RUN_ONCE_STATIC_ALT(myaltinitfunc, myinitfunc) - * { - * do_some_alternative_initialisation(); - * if (init_is_successful()) - * return 1; - * - * return 0; - * } - */ -# define DEFINE_RUN_ONCE_STATIC_ALT(initalt, init) \ - static int initalt(void); \ - static void initalt##_ossl_(void) \ - { \ - init##_ossl_ret_ = initalt(); \ - } \ - static int initalt(void) - -/* - * RUN_ONCE - use CRYPTO_THREAD_run_once, and check if the init succeeded - * @once: pointer to static object of type CRYPTO_ONCE - * @init: function name that was previously given to DEFINE_RUN_ONCE, - * DEFINE_RUN_ONCE_STATIC or DECLARE_RUN_ONCE. This function - * must return 1 for success or 0 for failure. - * - * The return value is 1 on success (*) or 0 in case of error. - * - * (*) by convention, since the init function must return 1 on success. - */ -# define RUN_ONCE(once, init) \ - (CRYPTO_THREAD_run_once(once, init##_ossl_) ? init##_ossl_ret_ : 0) - -/* - * RUN_ONCE_ALT - use CRYPTO_THREAD_run_once, to run an alternative initialiser - * function and check if that initialisation succeeded - * @once: pointer to static object of type CRYPTO_ONCE - * @initalt: alternative initialiser function name that was previously given to - * DEFINE_RUN_ONCE_STATIC_ALT. This function must return 1 for - * success or 0 for failure. - * @init: primary initialiser function name that was previously given to - * DEFINE_RUN_ONCE_STATIC. This function must return 1 for success or - * 0 for failure. - * - * The return value is 1 on success (*) or 0 in case of error. - * - * (*) by convention, since the init function must return 1 on success. - */ -# 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/time.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/time.h deleted file mode 100644 index 14d724ab..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/time.h +++ /dev/null @@ -1,242 +0,0 @@ -/* - * 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_INTERNAL_TIME_H -# define OSSL_INTERNAL_TIME_H -# pragma once - -# include /* uint64_t */ -# include "internal/e_os.h" /* for struct timeval */ -# include "internal/safe_math.h" - -/* - * Internal type defining a time. - * This should be treated as an opaque structure. - * - * The time datum is Unix's 1970 and at nanosecond precision, this gives - * a range of 584 years roughly. - */ -typedef struct { - uint64_t t; /* Ticks since the epoch */ -} OSSL_TIME; - -/* The precision of times allows this many values per second */ -# define OSSL_TIME_SECOND ((uint64_t)1000000000) - -/* One millisecond. */ -# define OSSL_TIME_MS (OSSL_TIME_SECOND / 1000) - -/* One microsecond. */ -# define OSSL_TIME_US (OSSL_TIME_MS / 1000) - -/* One nanosecond. */ -# define OSSL_TIME_NS (OSSL_TIME_US / 1000) - -#define ossl_seconds2time(s) ossl_ticks2time((s) * OSSL_TIME_SECOND) -#define ossl_time2seconds(t) (ossl_time2ticks(t) / OSSL_TIME_SECOND) -#define ossl_ms2time(ms) ossl_ticks2time((ms) * OSSL_TIME_MS) -#define ossl_time2ms(t) (ossl_time2ticks(t) / OSSL_TIME_MS) -#define ossl_us2time(us) ossl_ticks2time((us) * OSSL_TIME_US) -#define ossl_time2us(t) (ossl_time2ticks(t) / OSSL_TIME_US) - -/* - * Arithmetic operations on times. - * These operations are saturating, in that an overflow or underflow returns - * the largest or smallest value respectively. - */ -OSSL_SAFE_MATH_UNSIGNED(time, uint64_t) - -/* Convert a tick count into a time */ -static ossl_unused ossl_inline -OSSL_TIME ossl_ticks2time(uint64_t ticks) -{ - OSSL_TIME r; - - r.t = ticks; - return r; -} - -/* Convert a time to a tick count */ -static ossl_unused ossl_inline -uint64_t ossl_time2ticks(OSSL_TIME t) -{ - return t.t; -} - -/* Get current time */ -OSSL_TIME ossl_time_now(void); - -/* The beginning and end of the time range */ -static ossl_unused ossl_inline -OSSL_TIME ossl_time_zero(void) -{ - return ossl_ticks2time(0); -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_time_infinite(void) -{ - return ossl_ticks2time(~(uint64_t)0); -} - - -/* Convert time to timeval */ -static ossl_unused ossl_inline -struct timeval ossl_time_to_timeval(OSSL_TIME t) -{ - struct timeval tv; - int err = 0; - - /* - * Round up any nano secs which struct timeval doesn't support. Ensures that - * we never return a zero time if the input time is non zero - */ - t.t = safe_add_time(t.t, OSSL_TIME_US - 1, &err); - if (err) - t = ossl_time_infinite(); - -#ifdef _WIN32 - tv.tv_sec = (long int)(t.t / OSSL_TIME_SECOND); -#else - tv.tv_sec = (time_t)(t.t / OSSL_TIME_SECOND); -#endif - tv.tv_usec = (t.t % OSSL_TIME_SECOND) / OSSL_TIME_US; - return tv; -} - -/* Convert timeval to time */ -static ossl_unused ossl_inline -OSSL_TIME ossl_time_from_timeval(struct timeval tv) -{ - OSSL_TIME t; - -#ifndef __DJGPP__ /* tv_sec is unsigned on djgpp. */ - if (tv.tv_sec < 0) - return ossl_time_zero(); -#endif - t.t = tv.tv_sec * OSSL_TIME_SECOND + tv.tv_usec * OSSL_TIME_US; - return t; -} - -/* Convert OSSL_TIME to time_t */ -static ossl_unused ossl_inline -time_t ossl_time_to_time_t(OSSL_TIME t) -{ - return (time_t)(t.t / OSSL_TIME_SECOND); -} - -/* Convert time_t to OSSL_TIME */ -static ossl_unused ossl_inline -OSSL_TIME ossl_time_from_time_t(time_t t) -{ - OSSL_TIME ot; - - ot.t = t; - ot.t *= OSSL_TIME_SECOND; - return ot; -} - -/* Compare two time values, return -1 if less, 1 if greater and 0 if equal */ -static ossl_unused ossl_inline -int ossl_time_compare(OSSL_TIME a, OSSL_TIME b) -{ - if (a.t > b.t) - return 1; - if (a.t < b.t) - return -1; - return 0; -} - -/* Returns true if an OSSL_TIME is ossl_time_zero(). */ -static ossl_unused ossl_inline -int ossl_time_is_zero(OSSL_TIME t) -{ - return ossl_time_compare(t, ossl_time_zero()) == 0; -} - -/* Returns true if an OSSL_TIME is ossl_time_infinite(). */ -static ossl_unused ossl_inline -int ossl_time_is_infinite(OSSL_TIME t) -{ - return ossl_time_compare(t, ossl_time_infinite()) == 0; -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_time_add(OSSL_TIME a, OSSL_TIME b) -{ - OSSL_TIME r; - int err = 0; - - r.t = safe_add_time(a.t, b.t, &err); - return err ? ossl_time_infinite() : r; -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_time_subtract(OSSL_TIME a, OSSL_TIME b) -{ - OSSL_TIME r; - int err = 0; - - r.t = safe_sub_time(a.t, b.t, &err); - return err ? ossl_time_zero() : r; -} - -/* Returns |a - b|. */ -static ossl_unused ossl_inline -OSSL_TIME ossl_time_abs_difference(OSSL_TIME a, OSSL_TIME b) -{ - return a.t > b.t ? ossl_time_subtract(a, b) - : ossl_time_subtract(b, a); -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_time_multiply(OSSL_TIME a, uint64_t b) -{ - OSSL_TIME r; - int err = 0; - - r.t = safe_mul_time(a.t, b, &err); - return err ? ossl_time_infinite() : r; -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_time_divide(OSSL_TIME a, uint64_t b) -{ - OSSL_TIME r; - int err = 0; - - r.t = safe_div_time(a.t, b, &err); - return err ? ossl_time_zero() : r; -} - -static ossl_unused ossl_inline -OSSL_TIME ossl_time_muldiv(OSSL_TIME a, uint64_t b, uint64_t c) -{ - OSSL_TIME r; - int err = 0; - - r.t = safe_muldiv_time(a.t, b, c, &err); - return err ? ossl_time_zero() : r; -} - -/* Return higher of the two given time values. */ -static ossl_unused ossl_inline -OSSL_TIME ossl_time_max(OSSL_TIME a, OSSL_TIME b) -{ - return a.t > b.t ? a : b; -} - -/* Return the lower of the two given time values. */ -static ossl_unused ossl_inline -OSSL_TIME ossl_time_min(OSSL_TIME a, OSSL_TIME b) -{ - return a.t < b.t ? a : b; -} - -#endif 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 deleted file mode 100644 index 73fb53bc..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tlsgroups.h +++ /dev/null @@ -1,60 +0,0 @@ -/* - * 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_brainpoolP256r1_tls13 0x001F -# define OSSL_TLS_GROUP_ID_brainpoolP384r1_tls13 0x0020 -# define OSSL_TLS_GROUP_ID_brainpoolP512r1_tls13 0x0021 -# define OSSL_TLS_GROUP_ID_gc256A 0x0022 -# define OSSL_TLS_GROUP_ID_gc256B 0x0023 -# define OSSL_TLS_GROUP_ID_gc256C 0x0024 -# define OSSL_TLS_GROUP_ID_gc256D 0x0025 -# define OSSL_TLS_GROUP_ID_gc512A 0x0026 -# define OSSL_TLS_GROUP_ID_gc512B 0x0027 -# define OSSL_TLS_GROUP_ID_gc512C 0x0028 -# 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 deleted file mode 100644 index a840df0b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tsan_assist.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * 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 - */ - -/* - * Contemporary compilers implement lock-free atomic memory access - * primitives that facilitate writing "thread-opportunistic" or even real - * multi-threading low-overhead code. "Thread-opportunistic" is when - * exact result is not required, e.g. some statistics, or execution flow - * doesn't have to be unambiguous. Simplest example is lazy "constant" - * initialization when one can synchronize on variable itself, e.g. - * - * if (var == NOT_YET_INITIALIZED) - * var = function_returning_same_value(); - * - * This does work provided that loads and stores are single-instruction - * operations (and integer ones are on *all* supported platforms), but - * it upsets Thread Sanitizer. Suggested solution is - * - * if (tsan_load(&var) == NOT_YET_INITIALIZED) - * tsan_store(&var, function_returning_same_value()); - * - * Production machine code would be the same, so one can wonder why - * bother. Having Thread Sanitizer accept "thread-opportunistic" code - * allows to move on trouble-shooting real bugs. - * - * Resolving Thread Sanitizer nits was the initial purpose for this module, - * but it was later extended with more nuanced primitives that are useful - * even in "non-opportunistic" scenarios. Most notably verifying if a shared - * structure is fully initialized and bypassing the initialization lock. - * It's suggested to view macros defined in this module as "annotations" for - * thread-safe lock-free code, "Thread-Safe ANnotations"... - * - * It's assumed that ATOMIC_{LONG|INT}_LOCK_FREE are assigned same value as - * ATOMIC_POINTER_LOCK_FREE. And check for >= 2 ensures that corresponding - * code is inlined. It should be noted that statistics counters become - * accurate in such case. - * - * Special note about TSAN_QUALIFIER. It might be undesired to use it in - * a shared header. Because whether operation on specific variable or member - * is atomic or not might be irrelevant in other modules. In such case one - * can use TSAN_QUALIFIER in cast specifically when it has to count. - */ - -#ifndef OSSL_INTERNAL_TSAN_ASSIST_H -# define OSSL_INTERNAL_TSAN_ASSIST_H -# pragma once - -# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ - && !defined(__STDC_NO_ATOMICS__) -# include - -# if defined(ATOMIC_POINTER_LOCK_FREE) \ - && ATOMIC_POINTER_LOCK_FREE >= 2 -# 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_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 - -# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) - -# if defined(__GCC_ATOMIC_POINTER_LOCK_FREE) \ - && __GCC_ATOMIC_POINTER_LOCK_FREE >= 2 -# 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_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 - -# elif defined(_MSC_VER) && _MSC_VER>=1200 \ - && (defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \ - defined(_M_ARM64) || (defined(_M_ARM) && _M_ARM >= 7 && !defined(_WIN32_WCE))) -/* - * There is subtle dependency on /volatile: command-line option. - * "ms" implies same semantic as memory_order_acquire for loads and - * memory_order_release for stores, while "iso" - memory_order_relaxed for - * either. Real complication is that defaults are different on x86 and ARM. - * There is explanation for that, "ms" is backward compatible with earlier - * compiler versions, while multi-processor ARM can be viewed as brand new - * platform to MSC and its users, and with non-relaxed semantic taking toll - * with additional instructions and penalties, it kind of makes sense to - * default to "iso"... - */ -# define TSAN_QUALIFIER volatile -# if defined(_M_ARM) || defined(_M_ARM64) -# define _InterlockedExchangeAdd _InterlockedExchangeAdd_nf -# pragma intrinsic(_InterlockedExchangeAdd_nf) -# pragma intrinsic(__iso_volatile_load32, __iso_volatile_store32) -# ifdef _WIN64 -# define _InterlockedExchangeAdd64 _InterlockedExchangeAdd64_nf -# pragma intrinsic(_InterlockedExchangeAdd64_nf) -# pragma intrinsic(__iso_volatile_load64, __iso_volatile_store64) -# define tsan_load(ptr) (sizeof(*(ptr)) == 8 ? __iso_volatile_load64(ptr) \ - : __iso_volatile_load32(ptr)) -# define tsan_store(ptr, val) (sizeof(*(ptr)) == 8 ? __iso_volatile_store64((ptr), (val)) \ - : __iso_volatile_store32((ptr), (val))) -# else -# define tsan_load(ptr) __iso_volatile_load32(ptr) -# define tsan_store(ptr, val) __iso_volatile_store32((ptr), (val)) -# endif -# else -# define tsan_load(ptr) (*(ptr)) -# define tsan_store(ptr, val) (*(ptr) = (val)) -# endif -# pragma intrinsic(_InterlockedExchangeAdd) -# ifdef _WIN64 -# pragma intrinsic(_InterlockedExchangeAdd64) -# define tsan_add(ptr, n) (sizeof(*(ptr)) == 8 ? _InterlockedExchangeAdd64((ptr), (n)) \ - : _InterlockedExchangeAdd((ptr), (n))) -# else -# define tsan_add(ptr, n) _InterlockedExchangeAdd((ptr), (n)) -# endif -# if !defined(_ISO_VOLATILE) -# define tsan_ld_acq(ptr) (*(ptr)) -# define tsan_st_rel(ptr, val) (*(ptr) = (val)) -# endif - -# endif - -# ifndef TSAN_QUALIFIER - -# 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_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 - * protected with #ifdef tsan_ld_acq with locked fallback. - */ - -# endif - -# define tsan_counter(ptr) tsan_add((ptr), 1) -# define tsan_decr(ptr) tsan_add((ptr), -1) - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/uint_set.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/uint_set.h deleted file mode 100644 index dcb29b33..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/uint_set.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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_UINT_SET_H -# define OSSL_UINT_SET_H - -#include "openssl/params.h" -#include "internal/list.h" - -/* - * uint64_t Integer Sets - * ===================== - * - * Utilities for managing a logical set of unsigned 64-bit integers. The - * structure tracks each contiguous range of integers using one allocation and - * is thus optimised for cases where integers tend to appear consecutively. - * Queries are optimised under the assumption that they will generally be made - * on integers near the end of the set. - * - * Discussion of implementation details can be found in uint_set.c. - */ -typedef struct uint_range_st { - uint64_t start, end; -} UINT_RANGE; - -typedef struct uint_set_item_st UINT_SET_ITEM; -struct uint_set_item_st { - OSSL_LIST_MEMBER(uint_set, UINT_SET_ITEM); - UINT_RANGE range; -}; - -DEFINE_LIST_OF(uint_set, UINT_SET_ITEM); - -typedef OSSL_LIST(uint_set) UINT_SET; - -void ossl_uint_set_init(UINT_SET *s); -void ossl_uint_set_destroy(UINT_SET *s); - -/* - * Insert a range into a integer set. Returns 0 on allocation failure, in which - * case the integer set is in a valid but undefined state. Otherwise, returns 1. - * Ranges can overlap existing ranges without limitation. If a range is a subset - * of an existing range in the set, this is a no-op and returns 1. - */ -int ossl_uint_set_insert(UINT_SET *s, const UINT_RANGE *range); - -/* - * Remove a range from the set. Returns 0 on allocation failure, in which case - * the integer set is unchanged. Otherwise, returns 1. Ranges which are not - * already in the set can be removed without issue. If a passed range is not in - * the integer set at all, this is a no-op and returns 1. - */ -int ossl_uint_set_remove(UINT_SET *s, const UINT_RANGE *range); - -/* Returns 1 iff the given integer is in the integer set. */ -int ossl_uint_set_query(const UINT_SET *s, uint64_t v); - -#endif 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 deleted file mode 100644 index a6de8352..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/unicode.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * 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 deleted file mode 100644 index d251d0a0..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/__DECC_INCLUDE_EPILOGUE.H +++ /dev/null @@ -1,22 +0,0 @@ -/* - * 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 - */ - -/* - * This file is only used by HP C/C++ on VMS, and is included automatically - * after each header file from this directory - */ - -/* - * The C++ compiler doesn't understand these pragmas, even though it - * understands the corresponding command line qualifier. - */ -#ifndef __cplusplus -/* restore state. Must correspond to the save in __decc_include_prologue.h */ -# pragma names restore -#endif 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 deleted file mode 100644 index 91ac6b33..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/__DECC_INCLUDE_PROLOGUE.H +++ /dev/null @@ -1,26 +0,0 @@ -/* - * 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 - */ - -/* - * This file is only used by HP C/C++ on VMS, and is included automatically - * after each header file from this directory - */ - -/* - * The C++ compiler doesn't understand these pragmas, even though it - * understands the corresponding command line qualifier. - */ -#ifndef __cplusplus -/* save state */ -# pragma names save -/* have the compiler shorten symbols larger than 31 chars to 23 chars - * followed by a 8 hex char CRC - */ -# pragma names as_is,shortened -#endif 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 deleted file mode 100644 index d0f9dfc6..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/aes.h +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Copyright 2002-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_AES_H -# define OPENSSL_AES_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_AES_H -# endif - -# include - -# include -# ifdef __cplusplus -extern "C" { -# endif - -# 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 - unsigned long rd_key[4 * (AES_MAXNR + 1)]; -# else - unsigned int rd_key[4 * (AES_MAXNR + 1)]; -# endif - int rounds; -}; -typedef struct aes_key_st AES_KEY; - -# 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); -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); -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); -# endif - - -# ifdef __cplusplus -} -# endif - -#endif 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 deleted file mode 100644 index 09712345..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h +++ /dev/null @@ -1,1133 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/asn1.h.in - * - * 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_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 */ -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 */ -/* - * 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; -}; - -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))) - - -/* 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; -}; - -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))) - - -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); - -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_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); - -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); -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); - -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) -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); - -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) -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); -void *ASN1_item_unpack_ex(const ASN1_STRING *oct, const ASN1_ITEM *it, - OSSL_LIB_CTX *libctx, const char *propq); - -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.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h.in deleted file mode 100644 index 798b2211..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h.in +++ /dev/null @@ -1,966 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * 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 - */ - -{- -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); -void *ASN1_item_unpack_ex(const ASN1_STRING *oct, const ASN1_ITEM *it, - OSSL_LIB_CTX *libctx, const char *propq); - -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 deleted file mode 100644 index fdcb9836..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1_mac.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2015-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#error "This file is obsolete; please update your software." 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 deleted file mode 100644 index d4276220..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1err.h +++ /dev/null @@ -1,140 +0,0 @@ -/* - * 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_ASN1ERR_H -# define OPENSSL_ASN1ERR_H -# pragma once - -# include -# include -# include - - - -/* - * ASN1 reason codes. - */ -# define ASN1_R_ADDING_OBJECT 171 -# define ASN1_R_ASN1_PARSE_ERROR 203 -# define ASN1_R_ASN1_SIG_PARSE_ERROR 204 -# define ASN1_R_AUX_ERROR 100 -# define ASN1_R_BAD_OBJECT_HEADER 102 -# define ASN1_R_BAD_TEMPLATE 230 -# define ASN1_R_BMPSTRING_IS_WRONG_LENGTH 214 -# define ASN1_R_BN_LIB 105 -# define ASN1_R_BOOLEAN_IS_WRONG_LENGTH 106 -# define ASN1_R_BUFFER_TOO_SMALL 107 -# define ASN1_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 108 -# define ASN1_R_CONTEXT_NOT_INITIALISED 217 -# define ASN1_R_DATA_IS_WRONG 109 -# define ASN1_R_DECODE_ERROR 110 -# define ASN1_R_DEPTH_EXCEEDED 174 -# define ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED 198 -# define ASN1_R_ENCODE_ERROR 112 -# define ASN1_R_ERROR_GETTING_TIME 173 -# define ASN1_R_ERROR_LOADING_SECTION 172 -# define ASN1_R_ERROR_SETTING_CIPHER_PARAMS 114 -# define ASN1_R_EXPECTING_AN_INTEGER 115 -# define ASN1_R_EXPECTING_AN_OBJECT 116 -# define ASN1_R_EXPLICIT_LENGTH_MISMATCH 119 -# define ASN1_R_EXPLICIT_TAG_NOT_CONSTRUCTED 120 -# define ASN1_R_FIELD_MISSING 121 -# define ASN1_R_FIRST_NUM_TOO_LARGE 122 -# define ASN1_R_HEADER_TOO_LONG 123 -# define ASN1_R_ILLEGAL_BITSTRING_FORMAT 175 -# define ASN1_R_ILLEGAL_BOOLEAN 176 -# define ASN1_R_ILLEGAL_CHARACTERS 124 -# define ASN1_R_ILLEGAL_FORMAT 177 -# define ASN1_R_ILLEGAL_HEX 178 -# define ASN1_R_ILLEGAL_IMPLICIT_TAG 179 -# define ASN1_R_ILLEGAL_INTEGER 180 -# define ASN1_R_ILLEGAL_NEGATIVE_VALUE 226 -# define ASN1_R_ILLEGAL_NESTED_TAGGING 181 -# define ASN1_R_ILLEGAL_NULL 125 -# define ASN1_R_ILLEGAL_NULL_VALUE 182 -# define ASN1_R_ILLEGAL_OBJECT 183 -# define ASN1_R_ILLEGAL_OPTIONAL_ANY 126 -# define ASN1_R_ILLEGAL_OPTIONS_ON_ITEM_TEMPLATE 170 -# define ASN1_R_ILLEGAL_PADDING 221 -# define ASN1_R_ILLEGAL_TAGGED_ANY 127 -# define ASN1_R_ILLEGAL_TIME_VALUE 184 -# define ASN1_R_ILLEGAL_ZERO_CONTENT 222 -# define ASN1_R_INTEGER_NOT_ASCII_FORMAT 185 -# define ASN1_R_INTEGER_TOO_LARGE_FOR_LONG 128 -# define ASN1_R_INVALID_BIT_STRING_BITS_LEFT 220 -# define ASN1_R_INVALID_BMPSTRING_LENGTH 129 -# define ASN1_R_INVALID_DIGIT 130 -# define ASN1_R_INVALID_MIME_TYPE 205 -# define ASN1_R_INVALID_MODIFIER 186 -# define ASN1_R_INVALID_NUMBER 187 -# define ASN1_R_INVALID_OBJECT_ENCODING 216 -# define ASN1_R_INVALID_SCRYPT_PARAMETERS 227 -# define ASN1_R_INVALID_SEPARATOR 131 -# define ASN1_R_INVALID_STRING_TABLE_VALUE 218 -# 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 -# define ASN1_R_MIME_SIG_PARSE_ERROR 208 -# define ASN1_R_MISSING_EOC 137 -# define ASN1_R_MISSING_SECOND_NUMBER 138 -# define ASN1_R_MISSING_VALUE 189 -# define ASN1_R_MSTRING_NOT_UNIVERSAL 139 -# define ASN1_R_MSTRING_WRONG_TAG 140 -# define ASN1_R_NESTED_ASN1_STRING 197 -# define ASN1_R_NESTED_TOO_DEEP 201 -# define ASN1_R_NON_HEX_CHARACTERS 141 -# define ASN1_R_NOT_ASCII_FORMAT 190 -# define ASN1_R_NOT_ENOUGH_DATA 142 -# define ASN1_R_NO_CONTENT_TYPE 209 -# define ASN1_R_NO_MATCHING_CHOICE_TYPE 143 -# define ASN1_R_NO_MULTIPART_BODY_FAILURE 210 -# define ASN1_R_NO_MULTIPART_BOUNDARY 211 -# define ASN1_R_NO_SIG_CONTENT_TYPE 212 -# define ASN1_R_NULL_IS_WRONG_LENGTH 144 -# define ASN1_R_OBJECT_NOT_ASCII_FORMAT 191 -# define ASN1_R_ODD_NUMBER_OF_CHARS 145 -# define ASN1_R_SECOND_NUMBER_TOO_LARGE 147 -# define ASN1_R_SEQUENCE_LENGTH_MISMATCH 148 -# define ASN1_R_SEQUENCE_NOT_CONSTRUCTED 149 -# define ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG 192 -# define ASN1_R_SHORT_LINE 150 -# define ASN1_R_SIG_INVALID_MIME_TYPE 213 -# define ASN1_R_STREAMING_NOT_SUPPORTED 202 -# define ASN1_R_STRING_TOO_LONG 151 -# define ASN1_R_STRING_TOO_SHORT 152 -# define ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 154 -# define ASN1_R_TIME_NOT_ASCII_FORMAT 193 -# define ASN1_R_TOO_LARGE 223 -# define ASN1_R_TOO_LONG 155 -# define ASN1_R_TOO_SMALL 224 -# define ASN1_R_TYPE_NOT_CONSTRUCTED 156 -# 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 -# define ASN1_R_UNKNOWN_PUBLIC_KEY_TYPE 163 -# define ASN1_R_UNKNOWN_SIGNATURE_ALGORITHM 199 -# define ASN1_R_UNKNOWN_TAG 194 -# define ASN1_R_UNSUPPORTED_ANY_DEFINED_BY_TYPE 164 -# define ASN1_R_UNSUPPORTED_CIPHER 228 -# define ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE 167 -# define ASN1_R_UNSUPPORTED_TYPE 196 -# define ASN1_R_WRONG_INTEGER_TYPE 225 -# define ASN1_R_WRONG_PUBLIC_KEY_TYPE 200 -# define ASN1_R_WRONG_TAG 168 - -#endif 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 deleted file mode 100644 index 74ba47d0..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h +++ /dev/null @@ -1,946 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/asn1t.h.in - * - * 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_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 - -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 */ - -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/asn1t.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h.in deleted file mode 100644 index b536fe51..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1t.h.in +++ /dev/null @@ -1,923 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 826ffb99..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/async.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -#include - -#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) -/* application has to include to use this */ -#define OSSL_ASYNC_FD HANDLE -#define OSSL_BAD_ASYNC_FD INVALID_HANDLE_VALUE -# endif -#else -#define OSSL_ASYNC_FD int -#define OSSL_BAD_ASYNC_FD -1 -#endif -# include - - -# ifdef __cplusplus -extern "C" { -# endif - -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); - -#ifdef OSSL_ASYNC_FD -ASYNC_WAIT_CTX *ASYNC_WAIT_CTX_new(void); -void ASYNC_WAIT_CTX_free(ASYNC_WAIT_CTX *ctx); -int ASYNC_WAIT_CTX_set_wait_fd(ASYNC_WAIT_CTX *ctx, const void *key, - OSSL_ASYNC_FD fd, - void *custom_data, - void (*cleanup)(ASYNC_WAIT_CTX *, const void *, - OSSL_ASYNC_FD, void *)); -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); -int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); -#endif - -int ASYNC_is_capable(void); - -typedef void *(*ASYNC_stack_alloc_fn)(size_t *num); -typedef void (*ASYNC_stack_free_fn)(void *addr); - -int ASYNC_set_mem_functions(ASYNC_stack_alloc_fn alloc_fn, - ASYNC_stack_free_fn free_fn); -void ASYNC_get_mem_functions(ASYNC_stack_alloc_fn *alloc_fn, - ASYNC_stack_free_fn *free_fn); - -int ASYNC_start_job(ASYNC_JOB **job, ASYNC_WAIT_CTX *ctx, int *ret, - int (*func)(void *), void *args, size_t size); -int ASYNC_pause_job(void); - -ASYNC_JOB *ASYNC_get_current_job(void); -ASYNC_WAIT_CTX *ASYNC_get_wait_ctx(ASYNC_JOB *job); -void ASYNC_block_pause(void); -void ASYNC_unblock_pause(void); - - -# ifdef __cplusplus -} -# endif -#endif 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 deleted file mode 100644 index c093f7be..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asyncerr.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * 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_ASYNCERR_H -# define OPENSSL_ASYNCERR_H -# pragma once - -# include -# include -# include - - - -/* - * ASYNC reason codes. - */ -# define ASYNC_R_FAILED_TO_SET_POOL 101 -# define ASYNC_R_FAILED_TO_SWAP_CONTEXT 102 -# define ASYNC_R_INIT_FAILED 105 -# define ASYNC_R_INVALID_POOL_SIZE 103 - -#endif 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 deleted file mode 100644 index ea584def..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h +++ /dev/null @@ -1,1010 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/bio.h.in - * - * 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_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_DGRAM_PAIR (26|BIO_TYPE_SOURCE_SINK) -# define BIO_TYPE_DGRAM_MEM (27|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 - -# define BIO_CTRL_DGRAM_GET_LOCAL_ADDR_CAP 82 -# define BIO_CTRL_DGRAM_GET_LOCAL_ADDR_ENABLE 83 -# define BIO_CTRL_DGRAM_SET_LOCAL_ADDR_ENABLE 84 -# define BIO_CTRL_DGRAM_GET_EFFECTIVE_CAPS 85 -# define BIO_CTRL_DGRAM_GET_CAPS 86 -# define BIO_CTRL_DGRAM_SET_CAPS 87 -# define BIO_CTRL_DGRAM_GET_NO_TRUNC 88 -# define BIO_CTRL_DGRAM_SET_NO_TRUNC 89 - -/* - * internal BIO: - * # define BIO_CTRL_SET_KTLS_TX_ZEROCOPY_SENDFILE 90 - */ - -# define BIO_CTRL_GET_RPOLL_DESCRIPTOR 91 -# define BIO_CTRL_GET_WPOLL_DESCRIPTOR 92 -# define BIO_CTRL_DGRAM_DETECT_PEER_ADDR 93 - -# define BIO_DGRAM_CAP_NONE 0U -# define BIO_DGRAM_CAP_HANDLES_SRC_ADDR (1U << 0) -# define BIO_DGRAM_CAP_HANDLES_DST_ADDR (1U << 1) -# define BIO_DGRAM_CAP_PROVIDES_SRC_ADDR (1U << 2) -# define BIO_DGRAM_CAP_PROVIDES_DST_ADDR (1U << 3) - -# 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 0x8000 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 -# define BIO_CB_RECVMMSG 0x07 -# define BIO_CB_SENDMMSG 0x08 - -/* - * 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 */ - -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 { - 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 - -/* BIO_sendmmsg/BIO_recvmmsg-related definitions */ -typedef struct bio_msg_st { - void *data; - size_t data_len; - BIO_ADDR *peer, *local; - uint64_t flags; -} BIO_MSG; - -typedef struct bio_mmsg_cb_args_st { - BIO_MSG *msg; - size_t stride, num_msg; - uint64_t flags; - size_t *msgs_processed; -} BIO_MMSG_CB_ARGS; - -#define BIO_POLL_DESCRIPTOR_TYPE_NONE 0 -#define BIO_POLL_DESCRIPTOR_TYPE_SOCK_FD 1 -#define BIO_POLL_DESCRIPTOR_CUSTOM_START 8192 - -typedef struct bio_poll_descriptor_st { - uint32_t type; - union { - int fd; - void *custom; - uintptr_t custom_ui; - } value; -} BIO_POLL_DESCRIPTOR; - -/* - * #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_C_SET_TFO 156 /* like BIO_C_SET_NBIO */ - -# define BIO_C_SET_SOCK_TYPE 157 -# define BIO_C_GET_SOCK_TYPE 158 -# define BIO_C_GET_DGRAM_BIO 159 - -# 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) -# define BIO_set_tfo(b,n) BIO_ctrl(b,BIO_C_SET_TFO,(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_get_conn_mode(b) BIO_ctrl(b,BIO_C_GET_CONNECT,4,NULL) -# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) -# define BIO_set_sock_type(b,t) BIO_ctrl(b,BIO_C_SET_SOCK_TYPE,(t),NULL) -# define BIO_get_sock_type(b) BIO_ctrl(b,BIO_C_GET_SOCK_TYPE,0,NULL) -# define BIO_get0_dgram_bio(b, p) BIO_ctrl(b,BIO_C_GET_DGRAM_BIO,0,(void *)(BIO **)(p)) - -/* 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) -# define BIO_set_tfo_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,5,(n)?(void *)"a":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_detect_peer_addr(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_DETECT_PEER_ADDR, 0, (char *)(peer)) -# define BIO_dgram_get_mtu_overhead(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) -# define BIO_dgram_get_local_addr_cap(b) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_LOCAL_ADDR_CAP, 0, NULL) -# define BIO_dgram_get_local_addr_enable(b, penable) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_LOCAL_ADDR_ENABLE, 0, (char *)(penable)) -# define BIO_dgram_set_local_addr_enable(b, enable) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_LOCAL_ADDR_ENABLE, (enable), NULL) -# define BIO_dgram_get_effective_caps(b) \ - (uint32_t)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_EFFECTIVE_CAPS, 0, NULL) -# define BIO_dgram_get_caps(b) \ - (uint32_t)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_CAPS, 0, NULL) -# define BIO_dgram_set_caps(b, caps) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_CAPS, (long)(caps), NULL) -# define BIO_dgram_get_no_trunc(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_NO_TRUNC, 0, NULL) -# define BIO_dgram_set_no_trunc(b, enable) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_NO_TRUNC, (enable), NULL) -# define BIO_dgram_get_mtu(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU, 0, NULL) -# define BIO_dgram_set_mtu(b, mtu) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_MTU, (mtu), 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); -__owur int BIO_recvmmsg(BIO *b, BIO_MSG *msg, - size_t stride, size_t num_msg, uint64_t flags, - size_t *msgs_processed); -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); -__owur int BIO_sendmmsg(BIO *b, BIO_MSG *msg, - size_t stride, size_t num_msg, uint64_t flags, - size_t *msgs_processed); -__owur int BIO_get_rpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc); -__owur int BIO_get_wpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc); -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); -# ifndef OPENSSL_NO_DGRAM -const BIO_METHOD *BIO_s_dgram_mem(void); -# endif -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_dgram_pair(void); -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_err_is_non_fatal(unsigned int errcode); -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_copy(BIO_ADDR *dst, const BIO_ADDR *src); -BIO_ADDR *BIO_ADDR_dup(const BIO_ADDR *ap); -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 -# define BIO_SOCK_TFO 0x20 - -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); -# ifndef OPENSSL_NO_DGRAM -int BIO_new_bio_dgram_pair(BIO **bio1, size_t writebuf1, - BIO **bio2, size_t writebuf2); -# endif - -/* - * 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_set_sendmmsg(BIO_METHOD *biom, - int (*f) (BIO *, BIO_MSG *, size_t, size_t, - uint64_t, size_t *)); -int (*BIO_meth_get_sendmmsg(const BIO_METHOD *biom))(BIO *, BIO_MSG *, - size_t, size_t, - uint64_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_set_recvmmsg(BIO_METHOD *biom, - int (*f) (BIO *, BIO_MSG *, size_t, size_t, - uint64_t, size_t *)); -int (*BIO_meth_get_recvmmsg(const BIO_METHOD *biom))(BIO *, BIO_MSG *, - size_t, size_t, - uint64_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 (*ossl_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/bio.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h.in deleted file mode 100644 index 418d1197..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h.in +++ /dev/null @@ -1,987 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * 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 - */ -{- -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_DGRAM_PAIR (26|BIO_TYPE_SOURCE_SINK) -# define BIO_TYPE_DGRAM_MEM (27|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 - -# define BIO_CTRL_DGRAM_GET_LOCAL_ADDR_CAP 82 -# define BIO_CTRL_DGRAM_GET_LOCAL_ADDR_ENABLE 83 -# define BIO_CTRL_DGRAM_SET_LOCAL_ADDR_ENABLE 84 -# define BIO_CTRL_DGRAM_GET_EFFECTIVE_CAPS 85 -# define BIO_CTRL_DGRAM_GET_CAPS 86 -# define BIO_CTRL_DGRAM_SET_CAPS 87 -# define BIO_CTRL_DGRAM_GET_NO_TRUNC 88 -# define BIO_CTRL_DGRAM_SET_NO_TRUNC 89 - -/* - * internal BIO: - * # define BIO_CTRL_SET_KTLS_TX_ZEROCOPY_SENDFILE 90 - */ - -# define BIO_CTRL_GET_RPOLL_DESCRIPTOR 91 -# define BIO_CTRL_GET_WPOLL_DESCRIPTOR 92 -# define BIO_CTRL_DGRAM_DETECT_PEER_ADDR 93 - -# define BIO_DGRAM_CAP_NONE 0U -# define BIO_DGRAM_CAP_HANDLES_SRC_ADDR (1U << 0) -# define BIO_DGRAM_CAP_HANDLES_DST_ADDR (1U << 1) -# define BIO_DGRAM_CAP_PROVIDES_SRC_ADDR (1U << 2) -# define BIO_DGRAM_CAP_PROVIDES_DST_ADDR (1U << 3) - -# 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 0x8000 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 -# define BIO_CB_RECVMMSG 0x07 -# define BIO_CB_SENDMMSG 0x08 - -/* - * 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 - -/* BIO_sendmmsg/BIO_recvmmsg-related definitions */ -typedef struct bio_msg_st { - void *data; - size_t data_len; - BIO_ADDR *peer, *local; - uint64_t flags; -} BIO_MSG; - -typedef struct bio_mmsg_cb_args_st { - BIO_MSG *msg; - size_t stride, num_msg; - uint64_t flags; - size_t *msgs_processed; -} BIO_MMSG_CB_ARGS; - -#define BIO_POLL_DESCRIPTOR_TYPE_NONE 0 -#define BIO_POLL_DESCRIPTOR_TYPE_SOCK_FD 1 -#define BIO_POLL_DESCRIPTOR_CUSTOM_START 8192 - -typedef struct bio_poll_descriptor_st { - uint32_t type; - union { - int fd; - void *custom; - uintptr_t custom_ui; - } value; -} BIO_POLL_DESCRIPTOR; - -/* - * #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_C_SET_TFO 156 /* like BIO_C_SET_NBIO */ - -# define BIO_C_SET_SOCK_TYPE 157 -# define BIO_C_GET_SOCK_TYPE 158 -# define BIO_C_GET_DGRAM_BIO 159 - -# 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) -# define BIO_set_tfo(b,n) BIO_ctrl(b,BIO_C_SET_TFO,(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_get_conn_mode(b) BIO_ctrl(b,BIO_C_GET_CONNECT,4,NULL) -# define BIO_set_conn_mode(b,n) BIO_ctrl(b,BIO_C_SET_CONNECT_MODE,(n),NULL) -# define BIO_set_sock_type(b,t) BIO_ctrl(b,BIO_C_SET_SOCK_TYPE,(t),NULL) -# define BIO_get_sock_type(b) BIO_ctrl(b,BIO_C_GET_SOCK_TYPE,0,NULL) -# define BIO_get0_dgram_bio(b, p) BIO_ctrl(b,BIO_C_GET_DGRAM_BIO,0,(void *)(BIO **)(p)) - -/* 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) -# define BIO_set_tfo_accept(b,n) BIO_ctrl(b,BIO_C_SET_ACCEPT,5,(n)?(void *)"a":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_detect_peer_addr(b,peer) \ - (int)BIO_ctrl(b, BIO_CTRL_DGRAM_DETECT_PEER_ADDR, 0, (char *)(peer)) -# define BIO_dgram_get_mtu_overhead(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU_OVERHEAD, 0, NULL) -# define BIO_dgram_get_local_addr_cap(b) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_LOCAL_ADDR_CAP, 0, NULL) -# define BIO_dgram_get_local_addr_enable(b, penable) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_LOCAL_ADDR_ENABLE, 0, (char *)(penable)) -# define BIO_dgram_set_local_addr_enable(b, enable) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_LOCAL_ADDR_ENABLE, (enable), NULL) -# define BIO_dgram_get_effective_caps(b) \ - (uint32_t)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_EFFECTIVE_CAPS, 0, NULL) -# define BIO_dgram_get_caps(b) \ - (uint32_t)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_CAPS, 0, NULL) -# define BIO_dgram_set_caps(b, caps) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_CAPS, (long)(caps), NULL) -# define BIO_dgram_get_no_trunc(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_NO_TRUNC, 0, NULL) -# define BIO_dgram_set_no_trunc(b, enable) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_NO_TRUNC, (enable), NULL) -# define BIO_dgram_get_mtu(b) \ - (unsigned int)BIO_ctrl((b), BIO_CTRL_DGRAM_GET_MTU, 0, NULL) -# define BIO_dgram_set_mtu(b, mtu) \ - (int)BIO_ctrl((b), BIO_CTRL_DGRAM_SET_MTU, (mtu), 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); -__owur int BIO_recvmmsg(BIO *b, BIO_MSG *msg, - size_t stride, size_t num_msg, uint64_t flags, - size_t *msgs_processed); -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); -__owur int BIO_sendmmsg(BIO *b, BIO_MSG *msg, - size_t stride, size_t num_msg, uint64_t flags, - size_t *msgs_processed); -__owur int BIO_get_rpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc); -__owur int BIO_get_wpoll_descriptor(BIO *b, BIO_POLL_DESCRIPTOR *desc); -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); -# ifndef OPENSSL_NO_DGRAM -const BIO_METHOD *BIO_s_dgram_mem(void); -# endif -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_dgram_pair(void); -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_err_is_non_fatal(unsigned int errcode); -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_copy(BIO_ADDR *dst, const BIO_ADDR *src); -BIO_ADDR *BIO_ADDR_dup(const BIO_ADDR *ap); -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 -# define BIO_SOCK_TFO 0x20 - -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); -# ifndef OPENSSL_NO_DGRAM -int BIO_new_bio_dgram_pair(BIO **bio1, size_t writebuf1, - BIO **bio2, size_t writebuf2); -# endif - -/* - * 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_set_sendmmsg(BIO_METHOD *biom, - int (*f) (BIO *, BIO_MSG *, size_t, size_t, - uint64_t, size_t *)); -int (*BIO_meth_get_sendmmsg(const BIO_METHOD *biom))(BIO *, BIO_MSG *, - size_t, size_t, - uint64_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_set_recvmmsg(BIO_METHOD *biom, - int (*f) (BIO *, BIO_MSG *, size_t, size_t, - uint64_t, size_t *)); -int (*BIO_meth_get_recvmmsg(const BIO_METHOD *biom))(BIO *, BIO_MSG *, - size_t, size_t, - uint64_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 (*ossl_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 deleted file mode 100644 index e4fdb649..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bioerr.h +++ /dev/null @@ -1,72 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * 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 OPENSSL_BIOERR_H -# define OPENSSL_BIOERR_H -# pragma once - -# include -# include -# include - - - -/* - * BIO reason codes. - */ -# define BIO_R_ACCEPT_ERROR 100 -# define BIO_R_ADDRINFO_ADDR_IS_NOT_AF_INET 141 -# define BIO_R_AMBIGUOUS_HOST_OR_SERVICE 129 -# 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 -# define BIO_R_GETTING_SOCKTYPE 134 -# define BIO_R_INVALID_ARGUMENT 125 -# define BIO_R_INVALID_SOCKET 135 -# define BIO_R_IN_USE 123 -# define BIO_R_LENGTH_TOO_LONG 102 -# define BIO_R_LISTEN_V6_ONLY 136 -# define BIO_R_LOCAL_ADDR_NOT_AVAILABLE 111 -# define BIO_R_LOOKUP_RETURNED_NOTHING 142 -# define BIO_R_MALFORMED_HOST_OR_SERVICE 130 -# define BIO_R_NBIO_CONNECT_ERROR 110 -# define BIO_R_NON_FATAL 112 -# define BIO_R_NO_ACCEPT_ADDR_OR_SERVICE_SPECIFIED 143 -# 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 /* unused */ -# define BIO_R_TFO_DISABLED 106 -# define BIO_R_TFO_NO_KERNEL_SUPPORT 108 -# 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 -# define BIO_R_UNABLE_TO_LISTEN_SOCKET 119 -# define BIO_R_UNABLE_TO_NODELAY 138 -# define BIO_R_UNABLE_TO_REUSEADDR 139 -# define BIO_R_UNABLE_TO_TFO 109 -# define BIO_R_UNAVAILABLE_IP_FAMILY 145 -# define BIO_R_UNINITIALIZED 120 -# define BIO_R_UNKNOWN_INFO_TYPE 140 -# define BIO_R_UNSUPPORTED_IP_FAMILY 146 -# define BIO_R_UNSUPPORTED_METHOD 121 -# define BIO_R_UNSUPPORTED_PROTOCOL_FAMILY 131 -# define BIO_R_WRITE_TO_READ_ONLY_BIO 126 -# define BIO_R_WSASTARTUP 122 -# define BIO_R_PORT_MISMATCH 150 -# define BIO_R_PEER_ADDR_NOT_AVAILABLE 151 - -#endif 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 deleted file mode 100644 index 667d6423..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/blowfish.h +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright 1995-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_BLOWFISH_H -# define OPENSSL_BLOWFISH_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_BLOWFISH_H -# endif - -# include - -# ifndef OPENSSL_NO_BF -# include -# ifdef __cplusplus -extern "C" { -# endif - -# 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_ROUNDS 16 - -typedef struct bf_key_st { - BF_LONG P[BF_ROUNDS + 2]; - BF_LONG S[4 * 256]; -} BF_KEY; - -# 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 -} -# endif -# endif - -#endif 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 deleted file mode 100644 index ea706dca..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bn.h +++ /dev/null @@ -1,590 +0,0 @@ -/* - * 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 - */ - -#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 - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * 64-bit processor with LP64 ABI - */ -# ifdef SIXTY_FOUR_BIT_LONG -# define BN_ULONG unsigned long -# define BN_BYTES 8 -# endif - -/* - * 64-bit processor other than LP64 ABI - */ -# ifdef SIXTY_FOUR_BIT -# define BN_ULONG unsigned long long -# define BN_BYTES 8 -# endif - -# ifdef THIRTY_TWO_BIT -# define BN_ULONG unsigned int -# define BN_BYTES 4 -# endif - -# define BN_BITS2 (BN_BYTES * 8) -# define BN_BITS (BN_BITS2 * 2) -# define BN_TBIT ((BN_ULONG)1 << (BN_BITS2 - 1)) - -# define BN_FLG_MALLOCED 0x01 -# define BN_FLG_STATIC_DATA 0x02 - -/* - * avoid leaking exponent information through timing, - * BN_mod_exp_mont() will call BN_mod_exp_mont_consttime, - * BN_div() will call BN_div_no_branch, - * BN_mod_inverse() will call bn_mod_inverse_no_branch. - */ -# define BN_FLG_CONSTTIME 0x04 -# define BN_FLG_SECURE 0x08 - -# 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 */ -# endif - -void BN_set_flags(BIGNUM *b, int n); -int BN_get_flags(const BIGNUM *b, int n); - -/* Values for |top| in BN_rand() */ -#define BN_RAND_TOP_ANY -1 -#define BN_RAND_TOP_ONE 0 -#define BN_RAND_TOP_TWO 1 - -/* Values for |bottom| in BN_rand() */ -#define BN_RAND_BOTTOM_ANY 0 -#define BN_RAND_BOTTOM_ODD 1 - -/* - * get a clone of a BIGNUM with changed flags, for *temporary* use only (the - * two BIGNUMs cannot be used in parallel!). Also only for *read only* use. The - * value |dest| should be a newly allocated BIGNUM obtained via BN_new() that - * has not been otherwise initialised or used. - */ -void BN_with_flags(BIGNUM *dest, const BIGNUM *b, int flags); - -/* Wrapper function to make using BN_GENCB easier */ -int BN_GENCB_call(BN_GENCB *cb, int a, int b); - -BN_GENCB *BN_GENCB_new(void); -void BN_GENCB_free(BN_GENCB *cb); - -/* Populate a BN_GENCB structure with an "old"-style callback */ -void BN_GENCB_set_old(BN_GENCB *gencb, void (*callback) (int, int, void *), - void *cb_arg); - -/* Populate a BN_GENCB structure with a "new"-style callback */ -void BN_GENCB_set(BN_GENCB *gencb, int (*callback) (int, int, BN_GENCB *), - void *cb_arg); - -void *BN_GENCB_get_arg(BN_GENCB *cb); - -# 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 - * that will be done for checking that a random number is probably prime. The - * error rate for accepting a composite number as prime depends on the size of - * the prime |b|. The error rates used are for calculating an RSA key with 2 primes, - * and so the level is what you would expect for a key of double the size of the - * prime. - * - * This table is generated using the algorithm of FIPS PUB 186-4 - * Digital Signature Standard (DSS), section F.1, page 117. - * (https://dx.doi.org/10.6028/NIST.FIPS.186-4) - * - * The following magma script was used to generate the output: - * securitybits:=125; - * k:=1024; - * for t:=1 to 65 do - * for M:=3 to Floor(2*Sqrt(k-1)-1) do - * S:=0; - * // Sum over m - * for m:=3 to M do - * s:=0; - * // Sum over j - * for j:=2 to m do - * s+:=(RealField(32)!2)^-(j+(k-1)/j); - * end for; - * S+:=2^(m-(m-1)*t)*s; - * end for; - * A:=2^(k-2-M*t); - * B:=8*(Pi(RealField(32))^2-6)/3*2^(k-2)*S; - * pkt:=2.00743*Log(2)*k*2^-k*(A+B); - * seclevel:=Floor(-Log(2,pkt)); - * if seclevel ge securitybits then - * printf "k: %5o, security: %o bits (t: %o, M: %o)\n",k,seclevel,t,M; - * break; - * end if; - * end for; - * if seclevel ge securitybits then break; end if; - * end for; - * - * It can be run online at: - * http://magma.maths.usyd.edu.au/calc - * - * And will output: - * k: 1024, security: 129 bits (t: 6, M: 23) - * - * k is the number of bits of the prime, securitybits is the level we want to - * reach. - * - * prime length | RSA key size | # MR tests | security level - * -------------+--------------|------------+--------------- - * (b) >= 6394 | >= 12788 | 3 | 256 bit - * (b) >= 3747 | >= 7494 | 3 | 192 bit - * (b) >= 1345 | >= 2690 | 4 | 128 bit - * (b) >= 1080 | >= 2160 | 5 | 128 bit - * (b) >= 852 | >= 1704 | 5 | 112 bit - * (b) >= 476 | >= 952 | 5 | 80 bit - * (b) >= 400 | >= 800 | 6 | 80 bit - * (b) >= 347 | >= 694 | 7 | 80 bit - * (b) >= 308 | >= 616 | 8 | 80 bit - * (b) >= 55 | >= 110 | 27 | 64 bit - * (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) -# endif - -# define BN_num_bytes(a) ((BN_num_bits(a)+7)/8) - -int BN_abs_is_word(const BIGNUM *a, const BN_ULONG w); -int BN_is_zero(const BIGNUM *a); -int BN_is_one(const BIGNUM *a); -int BN_is_word(const BIGNUM *a, const BN_ULONG w); -int BN_is_odd(const BIGNUM *a); - -# define BN_one(a) (BN_set_word((a),1)) - -void BN_zero_ex(BIGNUM *a); - -# if OPENSSL_API_LEVEL > 908 -# define BN_zero(a) BN_zero_ex(a) -# else -# define BN_zero(a) (BN_set_word((a),0)) -# endif - -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); -BIGNUM *BN_new(void); -BIGNUM *BN_secure_new(void); -void BN_clear_free(BIGNUM *a); -BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b); -void BN_swap(BIGNUM *a, BIGNUM *b); -BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret); -BIGNUM *BN_signed_bin2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2bin(const BIGNUM *a, unsigned char *to); -int BN_bn2binpad(const BIGNUM *a, unsigned char *to, int tolen); -int BN_signed_bn2bin(const BIGNUM *a, unsigned char *to, int tolen); -BIGNUM *BN_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); -BIGNUM *BN_signed_lebin2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2lebinpad(const BIGNUM *a, unsigned char *to, int tolen); -int BN_signed_bn2lebin(const BIGNUM *a, unsigned char *to, int tolen); -BIGNUM *BN_native2bn(const unsigned char *s, int len, BIGNUM *ret); -BIGNUM *BN_signed_native2bn(const unsigned char *s, int len, BIGNUM *ret); -int BN_bn2nativepad(const BIGNUM *a, unsigned char *to, int tolen); -int BN_signed_bn2native(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); -int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx); -int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx); -/** BN_set_negative sets sign of a BIGNUM - * \param b pointer to the BIGNUM object - * \param n 0 if the BIGNUM b should be positive and a value != 0 otherwise - */ -void BN_set_negative(BIGNUM *b, int n); -/** BN_is_negative returns 1 if the BIGNUM is negative - * \param b pointer to the BIGNUM object - * \return 1 if a < 0 and 0 otherwise - */ -int BN_is_negative(const BIGNUM *b); - -int BN_div(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, const BIGNUM *d, - BN_CTX *ctx); -# define BN_mod(rem,m,d,ctx) BN_div(NULL,(rem),(m),(d),(ctx)) -int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx); -int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *m); -int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); -int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m, BN_CTX *ctx); -int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *m); -int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m, - BN_CTX *ctx); -int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n, const BIGNUM *m); - -BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w); -BN_ULONG BN_div_word(BIGNUM *a, BN_ULONG w); -int BN_mul_word(BIGNUM *a, BN_ULONG w); -int BN_add_word(BIGNUM *a, BN_ULONG w); -int BN_sub_word(BIGNUM *a, BN_ULONG w); -int BN_set_word(BIGNUM *a, BN_ULONG w); -BN_ULONG BN_get_word(const BIGNUM *a); - -int BN_cmp(const BIGNUM *a, const BIGNUM *b); -void BN_free(BIGNUM *a); -int BN_is_bit_set(const BIGNUM *a, int n); -int BN_lshift(BIGNUM *r, const BIGNUM *a, int n); -int BN_lshift1(BIGNUM *r, const BIGNUM *a); -int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); - -int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); -int BN_mod_exp_mont(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, - BN_MONT_CTX *in_mont); -int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx, BN_MONT_CTX *m_ctx); -int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1, const BIGNUM *p1, - const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m, - 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 -int BN_print_fp(FILE *fp, const BIGNUM *a); -# endif -int BN_print(BIO *bio, const BIGNUM *a); -int BN_reciprocal(BIGNUM *r, const BIGNUM *m, int len, BN_CTX *ctx); -int BN_rshift(BIGNUM *r, const BIGNUM *a, int n); -int BN_rshift1(BIGNUM *r, const BIGNUM *a); -void BN_clear(BIGNUM *a); -BIGNUM *BN_dup(const BIGNUM *a); -int BN_ucmp(const BIGNUM *a, const BIGNUM *b); -int BN_set_bit(BIGNUM *a, int n); -int BN_clear_bit(BIGNUM *a, int n); -char *BN_bn2hex(const BIGNUM *a); -char *BN_bn2dec(const BIGNUM *a); -int BN_hex2bn(BIGNUM **a, const char *str); -int BN_dec2bn(BIGNUM **a, const char *str); -int BN_asc2bn(BIGNUM **a, const char *str); -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, - const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx); - -void BN_consttime_swap(BN_ULONG swap, BIGNUM *a, BIGNUM *b, int nwords); - -/* Deprecated versions */ -# 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, - BN_MONT_CTX *mont, BN_CTX *ctx); -int BN_to_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); -int BN_from_montgomery(BIGNUM *r, const BIGNUM *a, BN_MONT_CTX *mont, - BN_CTX *ctx); -void BN_MONT_CTX_free(BN_MONT_CTX *mont); -int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod, BN_CTX *ctx); -BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to, BN_MONT_CTX *from); -BN_MONT_CTX *BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_RWLOCK *lock, - const BIGNUM *mod, BN_CTX *ctx); - -/* BN_BLINDING flags */ -# define BN_BLINDING_NO_UPDATE 0x00000001 -# define BN_BLINDING_NO_RECREATE 0x00000002 - -BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod); -void BN_BLINDING_free(BN_BLINDING *b); -int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_invert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx); -int BN_BLINDING_convert_ex(BIGNUM *n, BIGNUM *r, BN_BLINDING *b, BN_CTX *); -int BN_BLINDING_invert_ex(BIGNUM *n, const BIGNUM *r, BN_BLINDING *b, - BN_CTX *); - -int BN_BLINDING_is_current_thread(BN_BLINDING *b); -void BN_BLINDING_set_current_thread(BN_BLINDING *b); -int BN_BLINDING_lock(BN_BLINDING *b); -int BN_BLINDING_unlock(BN_BLINDING *b); - -unsigned long BN_BLINDING_get_flags(const BN_BLINDING *); -void BN_BLINDING_set_flags(BN_BLINDING *, unsigned long); -BN_BLINDING *BN_BLINDING_create_param(BN_BLINDING *b, - const BIGNUM *e, BIGNUM *m, BN_CTX *ctx, - int (*bn_mod_exp) (BIGNUM *r, - const BIGNUM *a, - const BIGNUM *p, - const BIGNUM *m, - BN_CTX *ctx, - BN_MONT_CTX *m_ctx), - BN_MONT_CTX *m_ctx); -# 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); -int BN_RECP_CTX_set(BN_RECP_CTX *recp, const BIGNUM *rdiv, BN_CTX *ctx); -int BN_mod_mul_reciprocal(BIGNUM *r, const BIGNUM *x, const BIGNUM *y, - BN_RECP_CTX *recp, BN_CTX *ctx); -int BN_mod_exp_recp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - const BIGNUM *m, BN_CTX *ctx); -int BN_div_recp(BIGNUM *dv, BIGNUM *rem, const BIGNUM *m, - BN_RECP_CTX *recp, BN_CTX *ctx); - -# ifndef OPENSSL_NO_EC2M - -/* - * Functions for arithmetic over binary polynomials represented by BIGNUMs. - * The BIGNUM::neg property of BIGNUMs representing binary polynomials is - * ignored. Note that input arguments are not const so that their bit arrays - * can be expanded to the appropriate size if needed. - */ - -/* - * r = a + b - */ -int BN_GF2m_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b); -# define BN_GF2m_sub(r, a, b) BN_GF2m_add(r, a, b) -/* - * r=a mod p - */ -int BN_GF2m_mod(BIGNUM *r, const BIGNUM *a, const BIGNUM *p); -/* r = (a * b) mod p */ -int BN_GF2m_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = (a * a) mod p */ -int BN_GF2m_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -/* r = (1 / b) mod p */ -int BN_GF2m_mod_inv(BIGNUM *r, const BIGNUM *b, const BIGNUM *p, BN_CTX *ctx); -/* r = (a / b) mod p */ -int BN_GF2m_mod_div(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = (a ^ b) mod p */ -int BN_GF2m_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const BIGNUM *p, BN_CTX *ctx); -/* r = sqrt(a) mod p */ -int BN_GF2m_mod_sqrt(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx); -/* r^2 + r = a mod p */ -int BN_GF2m_mod_solve_quad(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, - BN_CTX *ctx); -# define BN_GF2m_cmp(a, b) BN_ucmp((a), (b)) -/*- - * Some functions allow for representation of the irreducible polynomials - * as an unsigned int[], say p. The irreducible f(t) is then of the form: - * t^p[0] + t^p[1] + ... + t^p[k] - * where m = p[0] > p[1] > ... > p[k] = 0. - */ -/* r = a mod p */ -int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[]); -/* r = (a * b) mod p */ -int BN_GF2m_mod_mul_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = (a * a) mod p */ -int BN_GF2m_mod_sqr_arr(BIGNUM *r, const BIGNUM *a, const int p[], - BN_CTX *ctx); -/* r = (1 / b) mod p */ -int BN_GF2m_mod_inv_arr(BIGNUM *r, const BIGNUM *b, const int p[], - BN_CTX *ctx); -/* r = (a / b) mod p */ -int BN_GF2m_mod_div_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = (a ^ b) mod p */ -int BN_GF2m_mod_exp_arr(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, - const int p[], BN_CTX *ctx); -/* r = sqrt(a) mod p */ -int BN_GF2m_mod_sqrt_arr(BIGNUM *r, const BIGNUM *a, - const int p[], BN_CTX *ctx); -/* r^2 + r = a mod p */ -int BN_GF2m_mod_solve_quad_arr(BIGNUM *r, const BIGNUM *a, - const int p[], BN_CTX *ctx); -int BN_GF2m_poly2arr(const BIGNUM *a, int p[], int max); -int BN_GF2m_arr2poly(const int p[], BIGNUM *a); - -# endif - -/* - * faster mod functions for the 'NIST primes' 0 <= a < p^2 - */ -int BN_nist_mod_192(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_224(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_256(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_384(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); -int BN_nist_mod_521(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx); - -const BIGNUM *BN_get0_nist_prime_192(void); -const BIGNUM *BN_get0_nist_prime_224(void); -const BIGNUM *BN_get0_nist_prime_256(void); -const BIGNUM *BN_get0_nist_prime_384(void); -const BIGNUM *BN_get0_nist_prime_521(void); - -int (*BN_nist_mod_func(const BIGNUM *p)) (BIGNUM *r, const BIGNUM *a, - const BIGNUM *field, BN_CTX *ctx); - -int BN_generate_dsa_nonce(BIGNUM *out, const BIGNUM *range, - const BIGNUM *priv, const unsigned char *message, - size_t message_len, BN_CTX *ctx); - -/* Primes from RFC 2409 */ -BIGNUM *BN_get_rfc2409_prime_768(BIGNUM *bn); -BIGNUM *BN_get_rfc2409_prime_1024(BIGNUM *bn); - -/* Primes from RFC 3526 */ -BIGNUM *BN_get_rfc3526_prime_1536(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_2048(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_3072(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_4096(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_6144(BIGNUM *bn); -BIGNUM *BN_get_rfc3526_prime_8192(BIGNUM *bn); - -# 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); - - -# ifdef __cplusplus -} -# endif -#endif 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 deleted file mode 100644 index 7c3f6ef3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bnerr.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * 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 OPENSSL_BNERR_H -# define OPENSSL_BNERR_H -# pragma once - -# include -# include -# include - - - -/* - * BN reason codes. - */ -# define BN_R_ARG2_LT_ARG3 100 -# define BN_R_BAD_RECIPROCAL 101 -# define BN_R_BIGNUM_TOO_LONG 114 -# define BN_R_BITS_TOO_SMALL 118 -# define BN_R_CALLED_WITH_EVEN_MODULUS 102 -# define BN_R_DIV_BY_ZERO 103 -# define BN_R_ENCODING_ERROR 104 -# define BN_R_EXPAND_ON_STATIC_BIGNUM_DATA 105 -# define BN_R_INPUT_NOT_REDUCED 110 -# define BN_R_INVALID_LENGTH 106 -# define BN_R_INVALID_RANGE 115 -# define BN_R_INVALID_SHIFT 119 -# 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 -# define BN_R_TOO_MANY_TEMPORARY_VARIABLES 109 - -#endif 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 deleted file mode 100644 index 5773b986..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/buffer.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_BUFFER_H -# define OPENSSL_BUFFER_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_BUFFER_H -# endif - -# include -# ifndef OPENSSL_CRYPTO_H -# include -# endif -# include - - -#ifdef __cplusplus -extern "C" { -#endif - -# include -# include - -# 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 */ - char *data; - size_t max; /* size of buffer */ - unsigned long flags; -}; - -# define BUF_MEM_FLAG_SECURE 0x01 - -BUF_MEM *BUF_MEM_new(void); -BUF_MEM *BUF_MEM_new_ex(unsigned long flags); -void BUF_MEM_free(BUF_MEM *a); -size_t BUF_MEM_grow(BUF_MEM *str, size_t len); -size_t BUF_MEM_grow_clean(BUF_MEM *str, size_t len); -void BUF_reverse(unsigned char *out, const unsigned char *in, size_t siz); - - -# ifdef __cplusplus -} -# endif -#endif 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 deleted file mode 100644 index d18b1f8f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/buffererr.h +++ /dev/null @@ -1,25 +0,0 @@ -/* - * 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_BUFFERERR_H -# define OPENSSL_BUFFERERR_H -# pragma once - -# include -# include -# include - - - -/* - * BUF reason codes. - */ - -#endif 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 deleted file mode 100644 index 88c2279e..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/camellia.h +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Copyright 2006-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_CAMELLIA_H -# define OPENSSL_CAMELLIA_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_CAMELLIA_H -# endif - -# include - -# ifndef OPENSSL_NO_CAMELLIA -# include -#ifdef __cplusplus -extern "C" { -#endif - -# 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. - * Both sizes are in bytes. - */ - -/* This should be a hidden type, but EVP requires that the size be known */ - -# 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 */ - -struct camellia_key_st { - union { - double d; /* ensures 64-bit align */ - KEY_TABLE_TYPE rd_key; - } u; - int grand_rounds; -}; -typedef struct camellia_key_st CAMELLIA_KEY; - -# 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 -} -# endif -# endif - -#endif 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 deleted file mode 100644 index 0bf217be..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cast.h +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 1995-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_CAST_H -# define OPENSSL_CAST_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_CAST_H -# endif - -# include - -# ifndef OPENSSL_NO_CAST -# ifdef __cplusplus -extern "C" { -# endif - -# 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 -} -# endif -# endif - -#endif 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 deleted file mode 100644 index f5086183..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmac.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright 2010-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_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 -extern "C" { -# endif - -# 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 60beffd5..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h +++ /dev/null @@ -1,629 +0,0 @@ -/* - * 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 2 -# define OSSL_CMP_PVNO_3 3 -# define OSSL_CMP_PVNO OSSL_CMP_PVNO_2 /* v2 is the default */ - -/*- - * 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); - -OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_caCerts(const STACK_OF(X509) *caCerts); -int OSSL_CMP_ITAV_get0_caCerts(const OSSL_CMP_ITAV *itav, STACK_OF(X509) **out); - -OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaCert(const X509 *rootCaCert); -int OSSL_CMP_ITAV_get0_rootCaCert(const OSSL_CMP_ITAV *itav, X509 **out); -OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaKeyUpdate(const X509 *newWithNew, - const X509 *newWithOld, - const X509 *oldWithNew); -int OSSL_CMP_ITAV_get0_rootCaKeyUpdate(const OSSL_CMP_ITAV *itav, - X509 **newWithNew, - X509 **newWithOld, - X509 **oldWithNew); - -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); -OSSL_LIB_CTX *OSSL_CMP_CTX_get0_libctx(const OSSL_CMP_CTX *ctx); -const char *OSSL_CMP_CTX_get0_propq(const 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 -# define OSSL_CMP_OPT_USE_TLS 13 -/* 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); -# ifndef OPENSSL_NO_HTTP -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); -# endif -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); -# define OSSL_CMP_CTX_set0_trusted OSSL_CMP_CTX_set0_trustedStore -X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); -# define OSSL_CMP_CTX_get0_trusted OSSL_CMP_CTX_get0_trustedStore -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_serialNumber(OSSL_CMP_CTX *ctx, const ASN1_INTEGER *sn); -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_validatedSrvCert(const OSSL_CMP_CTX *ctx); -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 */ -# ifndef OPENSSL_NO_HTTP -OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, - const OSSL_CMP_MSG *req); -# endif - -/* 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); - -/* from cmp_genm.c */ -int OSSL_CMP_get1_caCerts(OSSL_CMP_CTX *ctx, STACK_OF(X509) **out); -int OSSL_CMP_get1_rootCaKeyUpdate(OSSL_CMP_CTX *ctx, - const X509 *oldWithOld, X509 **newWithNew, - X509 **newWithOld, X509 **oldWithNew); - -# 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 deleted file mode 100644 index 5bd8beb5..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h.in +++ /dev/null @@ -1,510 +0,0 @@ -/* - * {- 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 2 -# define OSSL_CMP_PVNO_3 3 -# define OSSL_CMP_PVNO OSSL_CMP_PVNO_2 /* v2 is the default */ - -/*- - * 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); - -OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_caCerts(const STACK_OF(X509) *caCerts); -int OSSL_CMP_ITAV_get0_caCerts(const OSSL_CMP_ITAV *itav, STACK_OF(X509) **out); - -OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaCert(const X509 *rootCaCert); -int OSSL_CMP_ITAV_get0_rootCaCert(const OSSL_CMP_ITAV *itav, X509 **out); -OSSL_CMP_ITAV *OSSL_CMP_ITAV_new_rootCaKeyUpdate(const X509 *newWithNew, - const X509 *newWithOld, - const X509 *oldWithNew); -int OSSL_CMP_ITAV_get0_rootCaKeyUpdate(const OSSL_CMP_ITAV *itav, - X509 **newWithNew, - X509 **newWithOld, - X509 **oldWithNew); - -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); -OSSL_LIB_CTX *OSSL_CMP_CTX_get0_libctx(const OSSL_CMP_CTX *ctx); -const char *OSSL_CMP_CTX_get0_propq(const 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 -# define OSSL_CMP_OPT_USE_TLS 13 -/* 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); -# ifndef OPENSSL_NO_HTTP -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); -# endif -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); -# define OSSL_CMP_CTX_set0_trusted OSSL_CMP_CTX_set0_trustedStore -X509_STORE *OSSL_CMP_CTX_get0_trustedStore(const OSSL_CMP_CTX *ctx); -# define OSSL_CMP_CTX_get0_trusted OSSL_CMP_CTX_get0_trustedStore -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_serialNumber(OSSL_CMP_CTX *ctx, const ASN1_INTEGER *sn); -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_validatedSrvCert(const OSSL_CMP_CTX *ctx); -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 */ -# ifndef OPENSSL_NO_HTTP -OSSL_CMP_MSG *OSSL_CMP_MSG_http_perform(OSSL_CMP_CTX *ctx, - const OSSL_CMP_MSG *req); -# endif - -/* 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); - -/* from cmp_genm.c */ -int OSSL_CMP_get1_caCerts(OSSL_CMP_CTX *ctx, STACK_OF(X509) **out); -int OSSL_CMP_get1_rootCaKeyUpdate(OSSL_CMP_CTX *ctx, - const X509 *oldWithOld, X509 **newWithNew, - X509 **newWithOld, X509 **oldWithNew); - -# 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 deleted file mode 100644 index 9a168922..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp_util.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * 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 deleted file mode 100644 index 57a6effb..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmperr.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * 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_GETTING_GENP 192 -# define CMP_R_INVALID_ARGS 100 -# define CMP_R_INVALID_GENP 193 -# define CMP_R_INVALID_OPTION 174 -# define CMP_R_INVALID_ROOTCAKEYUPDATE 195 -# 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_UNCLEAN_CTX 191 -# 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 deleted file mode 100644 index fe86a5c7..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h +++ /dev/null @@ -1,508 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/cms.h.in - * - * Copyright 2008-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_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_EnvelopedData_st CMS_EnvelopedData; -typedef struct CMS_ContentInfo_st CMS_ContentInfo; -typedef struct CMS_SignerInfo_st CMS_SignerInfo; -typedef struct CMS_SignedData_st CMS_SignedData; -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; - -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_ITEM(CMS_EnvelopedData) -DECLARE_ASN1_ALLOC_FUNCTIONS(CMS_SignedData) -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); -int CMS_final_digest(CMS_ContentInfo *cms, - const unsigned char *md, unsigned int mdlen, 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 *libctx, - 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 *libctx, 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 *libctx, - 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 *libctx, - 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 *libctx, 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 *libctx, - 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 *libctx, - const char *propq); -BIO *CMS_EnvelopedData_decrypt(CMS_EnvelopedData *env, BIO *detached_data, - EVP_PKEY *pkey, X509 *cert, - ASN1_OCTET_STRING *secret, unsigned int flags, - OSSL_LIB_CTX *libctx, 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); -BIO *CMS_SignedData_verify(CMS_SignedData *sd, BIO *detached_data, - STACK_OF(X509) *scerts, X509_STORE *store, - STACK_OF(X509) *extra, STACK_OF(X509_CRL) *crls, - unsigned int flags, - OSSL_LIB_CTX *libctx, const char *propq); - -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 *libctx); - -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/cms.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h.in deleted file mode 100644 index 23966770..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h.in +++ /dev/null @@ -1,410 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 2008-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_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_EnvelopedData_st CMS_EnvelopedData; -typedef struct CMS_ContentInfo_st CMS_ContentInfo; -typedef struct CMS_SignerInfo_st CMS_SignerInfo; -typedef struct CMS_SignedData_st CMS_SignedData; -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_ITEM(CMS_EnvelopedData) -DECLARE_ASN1_ALLOC_FUNCTIONS(CMS_SignedData) -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); -int CMS_final_digest(CMS_ContentInfo *cms, - const unsigned char *md, unsigned int mdlen, 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 *libctx, - 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 *libctx, 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 *libctx, - 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 *libctx, - 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 *libctx, 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 *libctx, - 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 *libctx, - const char *propq); -BIO *CMS_EnvelopedData_decrypt(CMS_EnvelopedData *env, BIO *detached_data, - EVP_PKEY *pkey, X509 *cert, - ASN1_OCTET_STRING *secret, unsigned int flags, - OSSL_LIB_CTX *libctx, 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); -BIO *CMS_SignedData_verify(CMS_SignedData *sd, BIO *detached_data, - STACK_OF(X509) *scerts, X509_STORE *store, - STACK_OF(X509) *extra, STACK_OF(X509_CRL) *crls, - unsigned int flags, - OSSL_LIB_CTX *libctx, const char *propq); - -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 *libctx); - -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 deleted file mode 100644 index 887035b1..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmserr.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * 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_CMSERR_H -# define OPENSSL_CMSERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_CMS - - -/* - * CMS reason codes. - */ -# define CMS_R_ADD_SIGNER_ERROR 99 -# define CMS_R_ATTRIBUTE_ERROR 161 -# 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 -# define CMS_R_CMS_LIB 104 -# define CMS_R_CONTENTIDENTIFIER_MISMATCH 170 -# define CMS_R_CONTENT_NOT_FOUND 105 -# define CMS_R_CONTENT_TYPE_MISMATCH 171 -# define CMS_R_CONTENT_TYPE_NOT_COMPRESSED_DATA 106 -# define CMS_R_CONTENT_TYPE_NOT_ENVELOPED_DATA 107 -# define CMS_R_CONTENT_TYPE_NOT_SIGNED_DATA 108 -# 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 -# define CMS_R_MSGSIGDIGEST_ERROR 172 -# define CMS_R_MSGSIGDIGEST_VERIFICATION_FAILURE 162 -# define CMS_R_MSGSIGDIGEST_WRONG_LENGTH 163 -# define CMS_R_NEED_ONE_SIGNER 164 -# define CMS_R_NOT_A_SIGNED_RECEIPT 165 -# define CMS_R_NOT_ENCRYPTED_DATA 122 -# define CMS_R_NOT_KEK 123 -# define CMS_R_NOT_KEY_AGREEMENT 181 -# define CMS_R_NOT_KEY_TRANSPORT 124 -# define CMS_R_NOT_PWRI 177 -# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125 -# define CMS_R_NO_CIPHER 126 -# define CMS_R_NO_CONTENT 127 -# define CMS_R_NO_CONTENT_TYPE 173 -# define CMS_R_NO_DEFAULT_DIGEST 128 -# define CMS_R_NO_DIGEST_SET 129 -# define CMS_R_NO_KEY 130 -# define CMS_R_NO_KEY_OR_CERT 174 -# define CMS_R_NO_MATCHING_DIGEST 131 -# define CMS_R_NO_MATCHING_RECIPIENT 132 -# define CMS_R_NO_MATCHING_SIGNATURE 166 -# define CMS_R_NO_MSGSIGDIGEST 167 -# define CMS_R_NO_PASSWORD 178 -# define CMS_R_NO_PRIVATE_KEY 133 -# define CMS_R_NO_PUBLIC_KEY 134 -# define CMS_R_NO_RECEIPT_REQUEST 168 -# define CMS_R_NO_SIGNERS 135 -# define CMS_R_OPERATION_UNSUPPORTED 182 -# 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 -# define CMS_R_STORE_INIT_ERROR 141 -# define CMS_R_TYPE_NOT_COMPRESSED_DATA 142 -# define CMS_R_TYPE_NOT_DATA 143 -# define CMS_R_TYPE_NOT_DIGESTED_DATA 144 -# define CMS_R_TYPE_NOT_ENCRYPTED_DATA 145 -# define CMS_R_TYPE_NOT_ENVELOPED_DATA 146 -# define CMS_R_UNABLE_TO_FINALIZE_CONTEXT 147 -# define CMS_R_UNKNOWN_CIPHER 148 -# define CMS_R_UNKNOWN_DIGEST_ALGORITHM 149 -# define CMS_R_UNKNOWN_ID 150 -# 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_SIGNATURE_ALGORITHM 195 -# define CMS_R_UNSUPPORTED_TYPE 156 -# define CMS_R_UNWRAP_ERROR 157 -# define CMS_R_UNWRAP_FAILURE 180 -# define CMS_R_VERIFICATION_FAILURE 158 -# define CMS_R_WRAP_ERROR 159 - -# endif -#endif 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 deleted file mode 100644 index f81ba0f3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comp.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_COMP_H -# define OPENSSL_COMP_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_COMP_H -# endif - -# include - -# ifndef OPENSSL_NO_COMP -# include -# include -# ifdef __cplusplus -extern "C" { -# endif - - - -COMP_CTX *COMP_CTX_new(COMP_METHOD *meth); -const COMP_METHOD *COMP_CTX_get_method(const COMP_CTX *ctx); -int COMP_CTX_get_type(const COMP_CTX* comp); -int COMP_get_type(const COMP_METHOD *meth); -const char *COMP_get_name(const COMP_METHOD *meth); -void COMP_CTX_free(COMP_CTX *ctx); - -int COMP_compress_block(COMP_CTX *ctx, unsigned char *out, int olen, - unsigned char *in, int ilen); -int COMP_expand_block(COMP_CTX *ctx, unsigned char *out, int olen, - unsigned char *in, int ilen); - -COMP_METHOD *COMP_zlib(void); -COMP_METHOD *COMP_zlib_oneshot(void); -COMP_METHOD *COMP_brotli(void); -COMP_METHOD *COMP_brotli_oneshot(void); -COMP_METHOD *COMP_zstd(void); -COMP_METHOD *COMP_zstd_oneshot(void); - -#ifndef OPENSSL_NO_DEPRECATED_1_1_0 -# define COMP_zlib_cleanup() while(0) continue -#endif - -# ifdef OPENSSL_BIO_H -const BIO_METHOD *BIO_f_zlib(void); -const BIO_METHOD *BIO_f_brotli(void); -const BIO_METHOD *BIO_f_zstd(void); -# endif - - -# ifdef __cplusplus -} -# endif -# endif -#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 deleted file mode 100644 index 1948d37f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comperr.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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_COMPERR_H -# define OPENSSL_COMPERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_COMP - - -/* - * COMP reason codes. - */ -# define COMP_R_BROTLI_DECODE_ERROR 102 -# define COMP_R_BROTLI_ENCODE_ERROR 103 -# define COMP_R_BROTLI_NOT_SUPPORTED 104 -# define COMP_R_ZLIB_DEFLATE_ERROR 99 -# define COMP_R_ZLIB_INFLATE_ERROR 100 -# define COMP_R_ZLIB_NOT_SUPPORTED 101 -# define COMP_R_ZSTD_COMPRESS_ERROR 105 -# define COMP_R_ZSTD_DECODE_ERROR 106 -# define COMP_R_ZSTD_DECOMPRESS_ERROR 107 -# define COMP_R_ZSTD_NOT_SUPPORTED 108 - -# endif -#endif 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 deleted file mode 100644 index 61bb0087..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h +++ /dev/null @@ -1,214 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/conf.h.in - * - * 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_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; - -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; - -# 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.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h.in deleted file mode 100644 index 56632870..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h.in +++ /dev/null @@ -1,177 +0,0 @@ -/* - * {- 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 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 deleted file mode 100644 index ed67d577..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf_api.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_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 - -#ifdef __cplusplus -extern "C" { -#endif - -/* Up until OpenSSL 0.9.5a, this was new_section */ -CONF_VALUE *_CONF_new_section(CONF *conf, const char *section); -/* Up until OpenSSL 0.9.5a, this was get_section */ -CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section); -/* Up until OpenSSL 0.9.5a, this was CONF_get_section */ -STACK_OF(CONF_VALUE) *_CONF_get_section_values(const CONF *conf, - const char *section); - -int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value); -char *_CONF_get_string(const CONF *conf, const char *section, - const char *name); -long _CONF_get_number(const CONF *conf, const char *section, - const char *name); - -int _CONF_new_data(CONF *conf); -void _CONF_free_data(CONF *conf); - -#ifdef __cplusplus -} -#endif -#endif 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 deleted file mode 100644 index a8798e79..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conferr.h +++ /dev/null @@ -1,52 +0,0 @@ -/* - * 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_CONFERR_H -# define OPENSSL_CONFERR_H -# pragma once - -# include -# include -# include - - - -/* - * 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 -# define CONF_R_MODULE_INITIALIZATION_ERROR 109 -# define CONF_R_NO_CLOSE_BRACE 102 -# define CONF_R_NO_CONF 105 -# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 -# define CONF_R_NO_SECTION 107 -# 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_RECURSIVE_SECTION_REFERENCE 126 -# 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 -# define CONF_R_SSL_SECTION_NOT_FOUND 120 -# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 -# define CONF_R_UNKNOWN_MODULE_NAME 113 -# define CONF_R_VARIABLE_EXPANSION_TOO_LONG 116 -# define CONF_R_VARIABLE_HAS_NO_VALUE 104 - -#endif 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 deleted file mode 100644 index 6ee48d98..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h +++ /dev/null @@ -1,281 +0,0 @@ -/* - * 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 30200 -# 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_APPS -# define OPENSSL_NO_APPS -# endif -# ifndef OPENSSL_NO_ASAN -# define OPENSSL_NO_ASAN -# endif -# ifndef OPENSSL_NO_ASM -# define OPENSSL_NO_ASM -# endif -# ifndef OPENSSL_NO_ASYNC -# define OPENSSL_NO_ASYNC -# endif -# ifndef OPENSSL_NO_AUTOERRINIT -# define OPENSSL_NO_AUTOERRINIT -# endif -# ifndef OPENSSL_NO_BROTLI -# define OPENSSL_NO_BROTLI -# endif -# ifndef OPENSSL_NO_BROTLI_DYNAMIC -# define OPENSSL_NO_BROTLI_DYNAMIC -# endif -# ifndef OPENSSL_NO_CAPIENG -# define OPENSSL_NO_CAPIENG -# endif -# ifndef OPENSSL_NO_CMP -# define OPENSSL_NO_CMP -# endif -# ifndef OPENSSL_NO_CMS -# define OPENSSL_NO_CMS -# endif -# ifndef OPENSSL_NO_COMP -# define OPENSSL_NO_COMP -# endif -# ifndef OPENSSL_NO_CRMF -# define OPENSSL_NO_CRMF -# 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_DEFAULT_THREAD_POOL -# define OPENSSL_NO_DEFAULT_THREAD_POOL -# endif -# ifndef OPENSSL_NO_DEPRECATED -# define OPENSSL_NO_DEPRECATED -# endif -# ifndef OPENSSL_NO_DEVCRYPTOENG -# define OPENSSL_NO_DEVCRYPTOENG -# endif -# ifndef OPENSSL_NO_DGRAM -# define OPENSSL_NO_DGRAM -# endif -# ifndef OPENSSL_NO_DOCS -# define OPENSSL_NO_DOCS -# endif -# ifndef OPENSSL_NO_DSA -# define OPENSSL_NO_DSA -# endif -# ifndef OPENSSL_NO_DSO -# define OPENSSL_NO_DSO -# endif -# ifndef OPENSSL_NO_DTLS -# define OPENSSL_NO_DTLS -# endif -# ifndef OPENSSL_NO_DTLS1 -# define OPENSSL_NO_DTLS1 -# endif -# ifndef OPENSSL_NO_DTLS1_2 -# define OPENSSL_NO_DTLS1_2 -# endif -# ifndef OPENSSL_NO_EC2M -# define OPENSSL_NO_EC2M -# 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_ENGINE -# define OPENSSL_NO_ENGINE -# endif -# ifndef OPENSSL_NO_ERR -# define OPENSSL_NO_ERR -# endif -# ifndef OPENSSL_NO_EXTERNAL_TESTS -# define OPENSSL_NO_EXTERNAL_TESTS -# endif -# ifndef OPENSSL_NO_FILENAMES -# define OPENSSL_NO_FILENAMES -# 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_GOST -# define OPENSSL_NO_GOST -# endif -# ifndef OPENSSL_NO_HTTP -# define OPENSSL_NO_HTTP -# endif -# ifndef OPENSSL_NO_IDEA -# define OPENSSL_NO_IDEA -# 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_MD4 -# define OPENSSL_NO_MD4 -# endif -# ifndef OPENSSL_NO_MSAN -# define OPENSSL_NO_MSAN -# endif -# ifndef OPENSSL_NO_MULTIBLOCK -# define OPENSSL_NO_MULTIBLOCK -# endif -# ifndef OPENSSL_NO_NEXTPROTONEG -# define OPENSSL_NO_NEXTPROTONEG -# endif -# ifndef OPENSSL_NO_OCSP -# define OPENSSL_NO_OCSP -# endif -# ifndef OPENSSL_NO_PADLOCKENG -# define OPENSSL_NO_PADLOCKENG -# endif -# ifndef OPENSSL_NO_PSK -# define OPENSSL_NO_PSK -# endif -# ifndef OPENSSL_NO_QUIC -# define OPENSSL_NO_QUIC -# endif -# ifndef OPENSSL_NO_RC5 -# define OPENSSL_NO_RC5 -# endif -# ifndef OPENSSL_NO_SCTP -# define OPENSSL_NO_SCTP -# endif -# ifndef OPENSSL_NO_SOCK -# define OPENSSL_NO_SOCK -# endif -# ifndef OPENSSL_NO_SRP -# define OPENSSL_NO_SRP -# 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_STDIO -# define OPENSSL_NO_STDIO -# endif -# ifndef OPENSSL_NO_TESTS -# define OPENSSL_NO_TESTS -# endif -# ifndef OPENSSL_NO_TFO -# define OPENSSL_NO_TFO -# endif -# ifndef OPENSSL_NO_THREAD_POOL -# define OPENSSL_NO_THREAD_POOL -# endif -# ifndef OPENSSL_NO_TRACE -# define OPENSSL_NO_TRACE -# endif -# ifndef OPENSSL_NO_UBSAN -# define OPENSSL_NO_UBSAN -# endif -# ifndef OPENSSL_NO_UI_CONSOLE -# define OPENSSL_NO_UI_CONSOLE -# 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_WINSTORE -# define OPENSSL_NO_WINSTORE -# endif -# ifndef OPENSSL_NO_ZLIB -# define OPENSSL_NO_ZLIB -# endif -# ifndef OPENSSL_NO_ZLIB_DYNAMIC -# define OPENSSL_NO_ZLIB_DYNAMIC -# endif -# ifndef OPENSSL_NO_ZSTD -# define OPENSSL_NO_ZSTD -# endif -# ifndef OPENSSL_NO_ZSTD_DYNAMIC -# define OPENSSL_NO_ZSTD_DYNAMIC -# 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) -# 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 - -# if defined(OPENSSL_NO_COMP) || (defined(OPENSSL_NO_BROTLI) && defined(OPENSSL_NO_ZSTD) && defined(OPENSSL_NO_ZLIB)) -# define OPENSSL_NO_COMP_ALG -# else -# undef OPENSSL_NO_COMP_ALG -# endif - -# 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 deleted file mode 100644 index 86077d0a..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h.in +++ /dev/null @@ -1,75 +0,0 @@ -/* - * {- 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} -} - -# if defined(OPENSSL_NO_COMP) || (defined(OPENSSL_NO_BROTLI) && defined(OPENSSL_NO_ZSTD) && defined(OPENSSL_NO_ZLIB)) -# define OPENSSL_NO_COMP_ALG -# else -# undef OPENSSL_NO_COMP_ALG -# endif - -# 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 deleted file mode 100644 index 17cefaa4..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conftypes.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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 deleted file mode 100644 index 18c19918..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core.h +++ /dev/null @@ -1,236 +0,0 @@ -/* - * 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_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); -}; - -# define OSSL_DISPATCH_END \ - { 0, NULL } - -/* - * 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 deleted file mode 100644 index 9b03f20c..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_dispatch.h +++ /dev/null @@ -1,984 +0,0 @@ -/* - * 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_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)) - -/* New seeding functions prototypes with the 101-104 series */ -#define OSSL_FUNC_CLEANUP_USER_ENTROPY 96 -#define OSSL_FUNC_CLEANUP_USER_NONCE 97 -#define OSSL_FUNC_GET_USER_ENTROPY 98 -#define OSSL_FUNC_GET_USER_NONCE 99 - -#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(size_t, get_user_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(void, cleanup_user_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(size_t, get_user_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)) -OSSL_CORE_MAKE_FUNC(void, cleanup_user_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)) - -/* Extended import and export functions */ -# define OSSL_FUNC_KEYMGMT_IMPORT_TYPES_EX 45 -# define OSSL_FUNC_KEYMGMT_EXPORT_TYPES_EX 46 -OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_import_types_ex, - (void *provctx, int selection)) -OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types_ex, - (void *provctx, 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 -# define OSSL_FUNC_KEM_AUTH_ENCAPSULATE_INIT 12 -# define OSSL_FUNC_KEM_AUTH_DECAPSULATE_INIT 13 - -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_auth_encapsulate_init, (void *ctx, void *provkey, - void *authprivkey, - 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_auth_decapsulate_init, (void *ctx, void *provkey, - void *authpubkey, - 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 -#define OSSL_FUNC_STORE_DELETE 9 -#define OSSL_FUNC_STORE_OPEN_EX 10 -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)) -OSSL_CORE_MAKE_FUNC(int, store_delete, - (void *provctx, const char *uri, const OSSL_PARAM params[], - OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_cbarg)) -OSSL_CORE_MAKE_FUNC(void *, store_open_ex, - (void *provctx, const char *uri, const OSSL_PARAM params[], - OSSL_PASSPHRASE_CALLBACK *pw_cb, void *pw_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 deleted file mode 100644 index ffffe90f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_names.h +++ /dev/null @@ -1,475 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/core_names.h.in - * - * 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 - -/* 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" - -/* Known CIPHER names (not a complete list) */ -# define OSSL_CIPHER_NAME_AES_128_GCM_SIV "AES-128-GCM-SIV" -# define OSSL_CIPHER_NAME_AES_192_GCM_SIV "AES-192-GCM-SIV" -# define OSSL_CIPHER_NAME_AES_256_GCM_SIV "AES-256-GCM-SIV" - -/* 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_256_192 "SHA2-256/192" -# 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" - -/* 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" - -/* 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" -# define OSSL_KDF_NAME_HMACDRBGKDF "HMAC-DRBG-KDF" - -/* 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" - -/* 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" - -/* OSSL_KEM_PARAM_OPERATION values */ -#define OSSL_KEM_PARAM_OPERATION_RSASVE "RSASVE" -#define OSSL_KEM_PARAM_OPERATION_DHKEM "DHKEM" - -/* Parameter name definitions - generated by util/perl/OpenSSL/paramnames.pm */ -# define OSSL_ALG_PARAM_CIPHER "cipher" -# define OSSL_ALG_PARAM_DIGEST "digest" -# define OSSL_ALG_PARAM_ENGINE "engine" -# define OSSL_ALG_PARAM_MAC "mac" -# define OSSL_ALG_PARAM_PROPERTIES "properties" -# define OSSL_ASYM_CIPHER_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -# define OSSL_ASYM_CIPHER_PARAM_ENGINE OSSL_PKEY_PARAM_ENGINE -# define OSSL_ASYM_CIPHER_PARAM_IMPLICIT_REJECTION "implicit-rejection" -# 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" -# define OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL "oaep-label" -# define OSSL_ASYM_CIPHER_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE -# define OSSL_ASYM_CIPHER_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES -# define OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION "tls-client-version" -# define OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION "tls-negotiated-version" -# define OSSL_CAPABILITY_TLS_GROUP_ALG "tls-group-alg" -# define OSSL_CAPABILITY_TLS_GROUP_ID "tls-group-id" -# define OSSL_CAPABILITY_TLS_GROUP_IS_KEM "tls-group-is-kem" -# define OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS "tls-max-dtls" -# 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_MIN_TLS "tls-min-tls" -# 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_SECURITY_BITS "tls-group-sec-bits" -# define OSSL_CAPABILITY_TLS_SIGALG_CODE_POINT "tls-sigalg-code-point" -# define OSSL_CAPABILITY_TLS_SIGALG_HASH_NAME "tls-sigalg-hash-name" -# define OSSL_CAPABILITY_TLS_SIGALG_HASH_OID "tls-sigalg-hash-oid" -# define OSSL_CAPABILITY_TLS_SIGALG_IANA_NAME "tls-sigalg-iana-name" -# define OSSL_CAPABILITY_TLS_SIGALG_KEYTYPE "tls-sigalg-keytype" -# define OSSL_CAPABILITY_TLS_SIGALG_KEYTYPE_OID "tls-sigalg-keytype-oid" -# define OSSL_CAPABILITY_TLS_SIGALG_MAX_TLS "tls-max-tls" -# define OSSL_CAPABILITY_TLS_SIGALG_MIN_TLS "tls-min-tls" -# define OSSL_CAPABILITY_TLS_SIGALG_NAME "tls-sigalg-name" -# define OSSL_CAPABILITY_TLS_SIGALG_OID "tls-sigalg-oid" -# define OSSL_CAPABILITY_TLS_SIGALG_SECURITY_BITS "tls-sigalg-sec-bits" -# define OSSL_CAPABILITY_TLS_SIGALG_SIG_NAME "tls-sigalg-sig-name" -# define OSSL_CAPABILITY_TLS_SIGALG_SIG_OID "tls-sigalg-sig-oid" -# define OSSL_CIPHER_PARAM_AEAD "aead" -# define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN -# define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey" -# define OSSL_CIPHER_PARAM_AEAD_TAG "tag" -# define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" -# define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD "tlsaad" -# define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD "tlsaadpad" -# define OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN "tlsivgen" -# define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" -# define OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV "tlsivinv" -# define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS "alg_id_param" -# define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize" -# define OSSL_CIPHER_PARAM_CTS "cts" -# define OSSL_CIPHER_PARAM_CTS_MODE "cts_mode" -# define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv" -# define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey" -# define OSSL_CIPHER_PARAM_IV "iv" -# define OSSL_CIPHER_PARAM_IVLEN "ivlen" -# define OSSL_CIPHER_PARAM_KEYLEN "keylen" -# define OSSL_CIPHER_PARAM_MODE "mode" -# define OSSL_CIPHER_PARAM_NUM "num" -# define OSSL_CIPHER_PARAM_PADDING "padding" -# define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" -# define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" -# define OSSL_CIPHER_PARAM_ROUNDS "rounds" -# define OSSL_CIPHER_PARAM_SPEED "speed" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD "tls1multi_aad" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN "tls1multi_aadpacklen" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC "tls1multi_enc" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN "tls1multi_encin" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN "tls1multi_enclen" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE "tls1multi_interleave" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE "tls1multi_maxbufsz" -# define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT "tls1multi_maxsndfrag" -# define OSSL_CIPHER_PARAM_TLS_MAC "tls-mac" -# define OSSL_CIPHER_PARAM_TLS_MAC_SIZE "tls-mac-size" -# define OSSL_CIPHER_PARAM_TLS_VERSION "tls-version" -# define OSSL_CIPHER_PARAM_UPDATED_IV "updated-iv" -# define OSSL_CIPHER_PARAM_USE_BITS "use-bits" -# define OSSL_CIPHER_PARAM_XTS_STANDARD "xts_standard" -# define OSSL_DECODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -# define OSSL_DIGEST_PARAM_ALGID_ABSENT "algid-absent" -# define OSSL_DIGEST_PARAM_BLOCK_SIZE "blocksize" -# define OSSL_DIGEST_PARAM_MICALG "micalg" -# define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type" -# define OSSL_DIGEST_PARAM_SIZE "size" -# define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms" -# define OSSL_DIGEST_PARAM_XOF "xof" -# define OSSL_DIGEST_PARAM_XOFLEN "xoflen" -# define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -# define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -# define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required" -# define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC -# define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen" -# define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen" -# define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length" -# define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen" -# define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen" -# define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen" -# define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length" -# define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen" -# define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance" -# define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -# define OSSL_DRBG_PARAM_RANDOM_DATA "random_data" -# define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter" -# define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests" -# define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time" -# define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval" -# define OSSL_DRBG_PARAM_SIZE "size" -# define OSSL_DRBG_PARAM_USE_DF "use_derivation_function" -# define OSSL_ENCODER_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -# define OSSL_ENCODER_PARAM_ENCRYPT_LEVEL "encrypt-level" -# define OSSL_ENCODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -# define OSSL_ENCODER_PARAM_SAVE_PARAMETERS "save-parameters" -# define OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE "ecdh-cofactor-mode" -# define OSSL_EXCHANGE_PARAM_KDF_DIGEST "kdf-digest" -# define OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS "kdf-digest-props" -# define OSSL_EXCHANGE_PARAM_KDF_OUTLEN "kdf-outlen" -# define OSSL_EXCHANGE_PARAM_KDF_TYPE "kdf-type" -# define OSSL_EXCHANGE_PARAM_KDF_UKM "kdf-ukm" -# define OSSL_EXCHANGE_PARAM_PAD "pad" -# define OSSL_GEN_PARAM_ITERATION "iteration" -# define OSSL_GEN_PARAM_POTENTIAL "potential" -# define OSSL_KDF_PARAM_ARGON2_AD "ad" -# define OSSL_KDF_PARAM_ARGON2_LANES "lanes" -# define OSSL_KDF_PARAM_ARGON2_MEMCOST "memcost" -# define OSSL_KDF_PARAM_ARGON2_VERSION "version" -# define OSSL_KDF_PARAM_CEK_ALG "cekalg" -# define OSSL_KDF_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -# define OSSL_KDF_PARAM_CONSTANT "constant" -# define OSSL_KDF_PARAM_DATA "data" -# define OSSL_KDF_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -# define OSSL_KDF_PARAM_EARLY_CLEAN "early_clean" -# define OSSL_KDF_PARAM_HMACDRBG_ENTROPY "entropy" -# define OSSL_KDF_PARAM_HMACDRBG_NONCE "nonce" -# define OSSL_KDF_PARAM_INFO "info" -# define OSSL_KDF_PARAM_ITER "iter" -# define OSSL_KDF_PARAM_KBKDF_R "r" -# define OSSL_KDF_PARAM_KBKDF_USE_L "use-l" -# define OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR "use-separator" -# define OSSL_KDF_PARAM_KEY "key" -# define OSSL_KDF_PARAM_LABEL "label" -# define OSSL_KDF_PARAM_MAC OSSL_ALG_PARAM_MAC -# define OSSL_KDF_PARAM_MAC_SIZE "maclen" -# define OSSL_KDF_PARAM_MODE "mode" -# define OSSL_KDF_PARAM_PASSWORD "pass" -# define OSSL_KDF_PARAM_PKCS12_ID "id" -# define OSSL_KDF_PARAM_PKCS5 "pkcs5" -# define OSSL_KDF_PARAM_PREFIX "prefix" -# define OSSL_KDF_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -# define OSSL_KDF_PARAM_SALT "salt" -# define OSSL_KDF_PARAM_SCRYPT_MAXMEM "maxmem_bytes" -# define OSSL_KDF_PARAM_SCRYPT_N "n" -# define OSSL_KDF_PARAM_SCRYPT_P "p" -# define OSSL_KDF_PARAM_SCRYPT_R "r" -# define OSSL_KDF_PARAM_SECRET "secret" -# define OSSL_KDF_PARAM_SEED "seed" -# define OSSL_KDF_PARAM_SIZE "size" -# define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id" -# define OSSL_KDF_PARAM_SSHKDF_TYPE "type" -# define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash" -# define OSSL_KDF_PARAM_THREADS "threads" -# define OSSL_KDF_PARAM_UKM "ukm" -# 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_PRIVINFO "supp-privinfo" -# define OSSL_KDF_PARAM_X942_SUPP_PUBINFO "supp-pubinfo" -# define OSSL_KDF_PARAM_X942_USE_KEYBITS "use-keybits" -# define OSSL_KEM_PARAM_IKME "ikme" -# define OSSL_KEM_PARAM_OPERATION "operation" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_BLOCK_PADDING "block_padding" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_MAX_EARLY_DATA "max_early_data" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_MAX_FRAG_LEN "max_frag_len" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_MODE "mode" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_OPTIONS "options" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_READ_AHEAD "read_ahead" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_STREAM_MAC "stream_mac" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_TLSTREE "tlstree" -# define OSSL_LIBSSL_RECORD_LAYER_PARAM_USE_ETM "use_etm" -# define OSSL_LIBSSL_RECORD_LAYER_READ_BUFFER_LEN "read_buffer_len" -# define OSSL_MAC_PARAM_BLOCK_SIZE "block-size" -# define OSSL_MAC_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -# define OSSL_MAC_PARAM_CUSTOM "custom" -# define OSSL_MAC_PARAM_C_ROUNDS "c-rounds" -# define OSSL_MAC_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -# define OSSL_MAC_PARAM_DIGEST_NOINIT "digest-noinit" -# define OSSL_MAC_PARAM_DIGEST_ONESHOT "digest-oneshot" -# define OSSL_MAC_PARAM_D_ROUNDS "d-rounds" -# define OSSL_MAC_PARAM_IV "iv" -# define OSSL_MAC_PARAM_KEY "key" -# define OSSL_MAC_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -# define OSSL_MAC_PARAM_SALT "salt" -# define OSSL_MAC_PARAM_SIZE "size" -# define OSSL_MAC_PARAM_TLS_DATA_SIZE "tls-data-size" -# define OSSL_MAC_PARAM_XOF "xof" -# define OSSL_OBJECT_PARAM_DATA "data" -# define OSSL_OBJECT_PARAM_DATA_STRUCTURE "data-structure" -# define OSSL_OBJECT_PARAM_DATA_TYPE "data-type" -# define OSSL_OBJECT_PARAM_DESC "desc" -# define OSSL_OBJECT_PARAM_REFERENCE "reference" -# define OSSL_OBJECT_PARAM_TYPE "type" -# define OSSL_PASSPHRASE_PARAM_INFO "info" -# define OSSL_PKEY_PARAM_BITS "bits" -# define OSSL_PKEY_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -# define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" -# define OSSL_PKEY_PARAM_DHKEM_IKM "dhkem-ikm" -# define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator" -# define OSSL_PKEY_PARAM_DH_PRIV_LEN "priv_len" -# define OSSL_PKEY_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -# define OSSL_PKEY_PARAM_DIGEST_SIZE "digest-size" -# define OSSL_PKEY_PARAM_DIST_ID "distid" -# define OSSL_PKEY_PARAM_EC_A "a" -# define OSSL_PKEY_PARAM_EC_B "b" -# define OSSL_PKEY_PARAM_EC_CHAR2_M "m" -# 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_CHAR2_TP_BASIS "tp" -# define OSSL_PKEY_PARAM_EC_CHAR2_TYPE "basis-type" -# define OSSL_PKEY_PARAM_EC_COFACTOR "cofactor" -# define OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS "decoded-from-explicit" -# define OSSL_PKEY_PARAM_EC_ENCODING "encoding" -# define OSSL_PKEY_PARAM_EC_FIELD_TYPE "field-type" -# define OSSL_PKEY_PARAM_EC_GENERATOR "generator" -# define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check" -# define OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC "include-public" -# define OSSL_PKEY_PARAM_EC_ORDER "order" -# define OSSL_PKEY_PARAM_EC_P "p" -# define OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT "point-format" -# define OSSL_PKEY_PARAM_EC_PUB_X "qx" -# define OSSL_PKEY_PARAM_EC_PUB_Y "qy" -# define OSSL_PKEY_PARAM_EC_SEED "seed" -# define OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY "encoded-pub-key" -# define OSSL_PKEY_PARAM_ENGINE OSSL_ALG_PARAM_ENGINE -# define OSSL_PKEY_PARAM_FFC_COFACTOR "j" -# 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_FFC_G "g" -# define OSSL_PKEY_PARAM_FFC_GINDEX "gindex" -# define OSSL_PKEY_PARAM_FFC_H "hindex" -# define OSSL_PKEY_PARAM_FFC_P "p" -# define OSSL_PKEY_PARAM_FFC_PBITS "pbits" -# define OSSL_PKEY_PARAM_FFC_PCOUNTER "pcounter" -# define OSSL_PKEY_PARAM_FFC_Q "q" -# define OSSL_PKEY_PARAM_FFC_QBITS "qbits" -# define OSSL_PKEY_PARAM_FFC_SEED "seed" -# define OSSL_PKEY_PARAM_FFC_TYPE "type" -# define OSSL_PKEY_PARAM_FFC_VALIDATE_G "validate-g" -# define OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY "validate-legacy" -# define OSSL_PKEY_PARAM_FFC_VALIDATE_PQ "validate-pq" -# define OSSL_PKEY_PARAM_GROUP_NAME "group" -# define OSSL_PKEY_PARAM_IMPLICIT_REJECTION "implicit-rejection" -# define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest" -# define OSSL_PKEY_PARAM_MASKGENFUNC "mgf" -# define OSSL_PKEY_PARAM_MAX_SIZE "max-size" -# define OSSL_PKEY_PARAM_MGF1_DIGEST "mgf1-digest" -# define OSSL_PKEY_PARAM_MGF1_PROPERTIES "mgf1-properties" -# define OSSL_PKEY_PARAM_PAD_MODE "pad-mode" -# define OSSL_PKEY_PARAM_PRIV_KEY "priv" -# define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -# define OSSL_PKEY_PARAM_PUB_KEY "pub" -# define OSSL_PKEY_PARAM_RSA_BITS OSSL_PKEY_PARAM_BITS -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 "rsa-coefficient1" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT2 "rsa-coefficient2" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT3 "rsa-coefficient3" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT4 "rsa-coefficient4" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT5 "rsa-coefficient5" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT6 "rsa-coefficient6" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT7 "rsa-coefficient7" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT8 "rsa-coefficient8" -# define OSSL_PKEY_PARAM_RSA_COEFFICIENT9 "rsa-coefficient9" -# define OSSL_PKEY_PARAM_RSA_D "d" -# 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_E "e" -# define OSSL_PKEY_PARAM_RSA_EXPONENT "rsa-exponent" -# define OSSL_PKEY_PARAM_RSA_EXPONENT1 "rsa-exponent1" -# define OSSL_PKEY_PARAM_RSA_EXPONENT10 "rsa-exponent10" -# define OSSL_PKEY_PARAM_RSA_EXPONENT2 "rsa-exponent2" -# define OSSL_PKEY_PARAM_RSA_EXPONENT3 "rsa-exponent3" -# define OSSL_PKEY_PARAM_RSA_EXPONENT4 "rsa-exponent4" -# define OSSL_PKEY_PARAM_RSA_EXPONENT5 "rsa-exponent5" -# define OSSL_PKEY_PARAM_RSA_EXPONENT6 "rsa-exponent6" -# define OSSL_PKEY_PARAM_RSA_EXPONENT7 "rsa-exponent7" -# define OSSL_PKEY_PARAM_RSA_EXPONENT8 "rsa-exponent8" -# define OSSL_PKEY_PARAM_RSA_EXPONENT9 "rsa-exponent9" -# define OSSL_PKEY_PARAM_RSA_FACTOR "rsa-factor" -# define OSSL_PKEY_PARAM_RSA_FACTOR1 "rsa-factor1" -# define OSSL_PKEY_PARAM_RSA_FACTOR10 "rsa-factor10" -# define OSSL_PKEY_PARAM_RSA_FACTOR2 "rsa-factor2" -# define OSSL_PKEY_PARAM_RSA_FACTOR3 "rsa-factor3" -# define OSSL_PKEY_PARAM_RSA_FACTOR4 "rsa-factor4" -# define OSSL_PKEY_PARAM_RSA_FACTOR5 "rsa-factor5" -# define OSSL_PKEY_PARAM_RSA_FACTOR6 "rsa-factor6" -# define OSSL_PKEY_PARAM_RSA_FACTOR7 "rsa-factor7" -# define OSSL_PKEY_PARAM_RSA_FACTOR8 "rsa-factor8" -# define OSSL_PKEY_PARAM_RSA_FACTOR9 "rsa-factor9" -# 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_N "n" -# define OSSL_PKEY_PARAM_RSA_PRIMES "primes" -# define OSSL_PKEY_PARAM_RSA_PSS_SALTLEN "saltlen" -# 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_PKEY_PARAM_RSA_TEST_XP "xp" -# define OSSL_PKEY_PARAM_RSA_TEST_XP1 "xp1" -# define OSSL_PKEY_PARAM_RSA_TEST_XP2 "xp2" -# define OSSL_PKEY_PARAM_RSA_TEST_XQ "xq" -# define OSSL_PKEY_PARAM_RSA_TEST_XQ1 "xq1" -# define OSSL_PKEY_PARAM_RSA_TEST_XQ2 "xq2" -# define OSSL_PKEY_PARAM_SECURITY_BITS "security-bits" -# define OSSL_PKEY_PARAM_USE_COFACTOR_ECDH OSSL_PKEY_PARAM_USE_COFACTOR_FLAG -# define OSSL_PKEY_PARAM_USE_COFACTOR_FLAG "use-cofactor-flag" -# define OSSL_PROV_PARAM_BUILDINFO "buildinfo" -# define OSSL_PROV_PARAM_CORE_MODULE_FILENAME "module-filename" -# define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name" -# define OSSL_PROV_PARAM_CORE_VERSION "openssl-version" -# define OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" -# define OSSL_PROV_PARAM_NAME "name" -# define OSSL_PROV_PARAM_SECURITY_CHECKS "security-checks" -# define OSSL_PROV_PARAM_SELF_TEST_DESC "st-desc" -# define OSSL_PROV_PARAM_SELF_TEST_PHASE "st-phase" -# define OSSL_PROV_PARAM_SELF_TEST_TYPE "st-type" -# define OSSL_PROV_PARAM_STATUS "status" -# define OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" -# define OSSL_PROV_PARAM_VERSION "version" -# define OSSL_RAND_PARAM_GENERATE "generate" -# define OSSL_RAND_PARAM_MAX_REQUEST "max_request" -# define OSSL_RAND_PARAM_STATE "state" -# define OSSL_RAND_PARAM_STRENGTH "strength" -# define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy" -# define OSSL_RAND_PARAM_TEST_NONCE "test_nonce" -# define OSSL_SIGNATURE_PARAM_ALGORITHM_ID "algorithm-id" -# define OSSL_SIGNATURE_PARAM_CONTEXT_STRING "context-string" -# define OSSL_SIGNATURE_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -# define OSSL_SIGNATURE_PARAM_DIGEST_SIZE OSSL_PKEY_PARAM_DIGEST_SIZE -# define OSSL_SIGNATURE_PARAM_INSTANCE "instance" -# define OSSL_SIGNATURE_PARAM_KAT "kat" -# 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_NONCE_TYPE "nonce-type" -# define OSSL_SIGNATURE_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE -# define OSSL_SIGNATURE_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES -# define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen" -# define OSSL_STORE_PARAM_ALIAS "alias" -# define OSSL_STORE_PARAM_DIGEST "digest" -# define OSSL_STORE_PARAM_EXPECT "expect" -# define OSSL_STORE_PARAM_FINGERPRINT "fingerprint" -# define OSSL_STORE_PARAM_INPUT_TYPE "input-type" -# define OSSL_STORE_PARAM_ISSUER "name" -# define OSSL_STORE_PARAM_PROPERTIES "properties" -# define OSSL_STORE_PARAM_SERIAL "serial" -# define OSSL_STORE_PARAM_SUBJECT "subject" - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_names.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_names.h.in deleted file mode 100644 index c14520fe..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_names.h.in +++ /dev/null @@ -1,119 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * 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 - */ -{- -use OpenSSL::paramnames qw(generate_public_macros); --} - -#ifndef OPENSSL_CORE_NAMES_H -# define OPENSSL_CORE_NAMES_H -# pragma once - -# ifdef __cplusplus -extern "C" { -# endif - -/* 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" - -/* Known CIPHER names (not a complete list) */ -# define OSSL_CIPHER_NAME_AES_128_GCM_SIV "AES-128-GCM-SIV" -# define OSSL_CIPHER_NAME_AES_192_GCM_SIV "AES-192-GCM-SIV" -# define OSSL_CIPHER_NAME_AES_256_GCM_SIV "AES-256-GCM-SIV" - -/* 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_256_192 "SHA2-256/192" -# 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" - -/* 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" - -/* 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" -# define OSSL_KDF_NAME_HMACDRBGKDF "HMAC-DRBG-KDF" - -/* 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" - -/* 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" - -/* OSSL_KEM_PARAM_OPERATION values */ -#define OSSL_KEM_PARAM_OPERATION_RSASVE "RSASVE" -#define OSSL_KEM_PARAM_OPERATION_DHKEM "DHKEM" - -/* Parameter name definitions - generated by util/perl/OpenSSL/paramnames.pm */ -{- generate_public_macros(); -} - -# 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 deleted file mode 100644 index 62ccf39d..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_object.h +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 deleted file mode 100644 index 1f901f35..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h +++ /dev/null @@ -1,229 +0,0 @@ -/*- - * WARNING: do not edit! - * Generated by Makefile from include/openssl/crmf.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 - * - * 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); -X509_PUBKEY -*OSSL_CRMF_CERTTEMPLATE_get0_publicKey(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); -const ASN1_INTEGER -*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(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 deleted file mode 100644 index 43411fa4..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h.in +++ /dev/null @@ -1,182 +0,0 @@ -/*- - * {- 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 - * - * 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); -X509_PUBKEY -*OSSL_CRMF_CERTTEMPLATE_get0_publicKey(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); -const ASN1_INTEGER -*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(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 deleted file mode 100644 index b242b922..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmferr.h +++ /dev/null @@ -1,50 +0,0 @@ -/* - * 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 deleted file mode 100644 index 55e00dcc..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h +++ /dev/null @@ -1,561 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/crypto.h.in - * - * Copyright 1995-2023 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 - */ - - - -#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); -int CRYPTO_atomic_load_int(int *val, int *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; -}; - -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); -__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); - -void OSSL_sleep(uint64_t millis); - -# ifdef __cplusplus -} -# endif -#endif 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 deleted file mode 100644 index b2d691b9..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h.in +++ /dev/null @@ -1,538 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 1995-2023 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); -int CRYPTO_atomic_load_int(int *val, int *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); - -void OSSL_sleep(uint64_t millis); - -# 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 deleted file mode 100644 index e84b12df..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cryptoerr.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * 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 OPENSSL_CRYPTOERR_H -# define OPENSSL_CRYPTOERR_H -# pragma once - -# include -# include -# include - - - -/* - * CRYPTO reason codes. - */ -# 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 deleted file mode 100644 index ccab33a5..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cryptoerr_legacy.h +++ /dev/null @@ -1,1466 +0,0 @@ -/* - * 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 deleted file mode 100644 index e6dd1192..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h +++ /dev/null @@ -1,573 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/ct.h.in - * - * 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 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 - -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, - 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/ct.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h.in deleted file mode 100644 index 3fc2aaa9..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h.in +++ /dev/null @@ -1,525 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 935d32d8..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cterr.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * 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_CTERR_H -# define OPENSSL_CTERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_CT - - -/* - * CT reason codes. - */ -# define CT_R_BASE64_DECODE_ERROR 108 -# define CT_R_INVALID_LOG_ID_LENGTH 100 -# define CT_R_LOG_CONF_INVALID 109 -# define CT_R_LOG_CONF_INVALID_KEY 110 -# define CT_R_LOG_CONF_MISSING_DESCRIPTION 111 -# define CT_R_LOG_CONF_MISSING_KEY 112 -# define CT_R_LOG_KEY_INVALID 113 -# define CT_R_SCT_FUTURE_TIMESTAMP 116 -# define CT_R_SCT_INVALID 104 -# define CT_R_SCT_INVALID_SIGNATURE 107 -# define CT_R_SCT_LIST_INVALID 105 -# define CT_R_SCT_LOG_ID_MISMATCH 114 -# define CT_R_SCT_NOT_SET 106 -# define CT_R_SCT_UNSUPPORTED_VERSION 115 -# define CT_R_UNRECOGNIZED_SIGNATURE_NID 101 -# define CT_R_UNSUPPORTED_ENTRY_TYPE 102 -# define CT_R_UNSUPPORTED_VERSION 103 - -# endif -#endif 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 deleted file mode 100644 index d4ee2cf4..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/decoder.h +++ /dev/null @@ -1,133 +0,0 @@ -/* - * 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 deleted file mode 100644 index 4212a38b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/decodererr.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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 deleted file mode 100644 index 09798a61..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/des.h +++ /dev/null @@ -1,211 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# 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 - -typedef unsigned char DES_cblock[8]; -typedef /* const */ unsigned char const_DES_cblock[8]; -/* - * With "const", gcc 2.8.1 on Solaris thinks that DES_cblock * and - * const_DES_cblock * are incompatible pointer types. - */ - -typedef struct DES_ks { - union { - DES_cblock cblock; - /* - * make sure things are correct size on machines with 8 byte longs - */ - DES_LONG deslong[2]; - } ks[16]; -} 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_CBC_MODE 0 -# define DES_PCBC_MODE 1 - -# 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) \ - 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) \ - 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) \ - DES_ede3_ofb64_encrypt((i),(o),(l),(k1),(k2),(k1),(iv),(n)) - -# 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); -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); -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); -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); -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 - * other DES routine in the library. You should not use this function except - * to implement 'modes' of DES. I say this because the functions that call - * this routine do the conversion from 'char *' to long, and this needs to be - * done to make sure 'non-aligned' memory access do not occur. The - * characters are loaded 'little endian'. Data is a pointer to 2 unsigned - * 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 - * permutation (IP) and final permutation (FP) have been left out. As for - * DES_encrypt1(), you should not use this function. It is used by the - * routines in the library that implement triple DES. IP() DES_encrypt2() - * 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); -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); -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); -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); -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 - */ -# 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); -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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index f1c0ed06..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dh.h +++ /dev/null @@ -1,335 +0,0 @@ -/* - * 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_DH_H -# define OPENSSL_DH_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_DH_H -# endif - -# include -# include - -# ifdef __cplusplus -extern "C" { -# endif - -#include - -/* 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 */ - -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); - -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) -# define EVP_PKEY_CTRL_DH_RFC5114 (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_DH_KDF_TYPE (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 12) -# define EVP_PKEY_CTRL_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 13) -# define EVP_PKEY_CTRL_GET_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 14) -# define EVP_PKEY_CTRL_DH_NID (EVP_PKEY_ALG_CTRL + 15) -# define EVP_PKEY_CTRL_DH_PAD (EVP_PKEY_ALG_CTRL + 16) - -/* KDF types */ -# define EVP_PKEY_DH_KDF_NONE 1 -# define EVP_PKEY_DH_KDF_X9_42 2 - -# ifndef OPENSSL_NO_STDIO -# include -# endif -# 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, some of them shared with DH_check_pub_key */ -/* - * 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 /* +DH_check_pub_key */ -# define DH_CHECK_INVALID_J_VALUE 0x40 -# define DH_MODULUS_TOO_SMALL 0x80 -# define DH_MODULUS_TOO_LARGE 0x100 /* +DH_check_pub_key */ - -/* 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 deleted file mode 100644 index 2997d7d4..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dherr.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * 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_DHERR_H -# define OPENSSL_DHERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_DH - - -/* - * 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 -# define DH_R_CHECK_INVALID_J_VALUE 115 -# define DH_R_CHECK_INVALID_Q_VALUE 116 -# define DH_R_CHECK_PUBKEY_INVALID 122 -# define DH_R_CHECK_PUBKEY_TOO_LARGE 123 -# define DH_R_CHECK_PUBKEY_TOO_SMALL 124 -# define DH_R_CHECK_P_NOT_PRIME 117 -# define DH_R_CHECK_P_NOT_SAFE_PRIME 118 -# define DH_R_CHECK_Q_NOT_PRIME 119 -# define DH_R_DECODE_ERROR 104 -# 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_INVALID_SIZE 129 -# 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 -# define DH_R_PARAMETER_ENCODING_ERROR 105 -# define DH_R_PEER_KEY_ERROR 111 -# define DH_R_Q_TOO_LARGE 130 -# define DH_R_SHARED_INFO_ERROR 113 -# define DH_R_UNABLE_TO_CHECK_GENERATOR 121 - -# endif -#endif 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 deleted file mode 100644 index 109878e6..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsa.h +++ /dev/null @@ -1,280 +0,0 @@ -/* - * 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_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 - -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 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) - -# 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 - -# 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 - * 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 DSA_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 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; */ - -# 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) - -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); - -OSSL_DEPRECATEDIN_3_0 const DSA_METHOD *DSA_OpenSSL(void); - -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); - -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 */ -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 */ -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); - -# 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 */ -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 */ -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); - -OSSL_DEPRECATEDIN_3_0 int DSA_generate_key(DSA *a); - -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 -/* - * 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) - -# ifndef OPENSSL_NO_DH -/* - * Convert DSA structure (key or just parameters) into DH structure (be - * careful to avoid small subgroup attacks when using this!) - */ -OSSL_DEPRECATEDIN_3_0 DH *DSA_dup_DH(const DSA *r); -# endif - -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); - -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 *); -OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign(DSA_METHOD *dsam, - DSA_SIG *(*sign) (const unsigned char *, int, DSA *)); -OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_sign_setup(const DSA_METHOD *dsam)) - (DSA *, BN_CTX *, BIGNUM **, BIGNUM **); -OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_sign_setup(DSA_METHOD *dsam, - int (*sign_setup) (DSA *, BN_CTX *, BIGNUM **, BIGNUM **)); -OSSL_DEPRECATEDIN_3_0 int (*DSA_meth_get_verify(const DSA_METHOD *dsam)) - (const unsigned char *, int, DSA_SIG *, DSA *); -OSSL_DEPRECATEDIN_3_0 int DSA_meth_set_verify(DSA_METHOD *dsam, - int (*verify) (const unsigned char *, int, DSA_SIG *, DSA *)); -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 *); -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 *)); -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 *); -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 *)); -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 *); -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 *)); -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 *)); - -# 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 deleted file mode 100644 index 26ada57d..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsaerr.h +++ /dev/null @@ -1,44 +0,0 @@ -/* - * 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_DSAERR_H -# define OPENSSL_DSAERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_DSA - - -/* - * 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 -# define DSA_R_DECODE_ERROR 104 -# define DSA_R_INVALID_DIGEST_TYPE 106 -# define DSA_R_INVALID_PARAMETERS 112 -# define DSA_R_MISSING_PARAMETERS 101 -# define DSA_R_MISSING_PRIVATE_KEY 111 -# 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 deleted file mode 100644 index 5dc6b541..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dtls1.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2005-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_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 - -#include - -/* 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 */ - -# define DTLS1_COOKIE_LENGTH 255 - -# define DTLS1_RT_HEADER_LENGTH 13 - -# define DTLS1_HM_HEADER_LENGTH 12 - -# define DTLS1_HM_BAD_FRAGMENT -2 -# define DTLS1_HM_FRAGMENT_RETRY -3 - -# define DTLS1_CCS_HEADER_LENGTH 1 - -# define DTLS1_AL_HEADER_LENGTH 2 - -# define DTLS1_TMO_ALERT_COUNT 12 - -#ifdef __cplusplus -} -#endif -#endif 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 deleted file mode 100644 index e01f6275..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_os2.h +++ /dev/null @@ -1,308 +0,0 @@ -/* - * 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_E_OS2_H -# define OPENSSL_E_OS2_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_E_OS2_H -# endif - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/****************************************************************************** - * Detect operating systems. This probably needs completing. - * The result is that at least one OPENSSL_SYS_os macro should be defined. - * However, if none is defined, Unix is assumed. - **/ - -# define OPENSSL_SYS_UNIX - -/* --------------------- Microsoft operating systems ---------------------- */ - -/* - * Note that MSDOS actually denotes 32-bit environments running on top of - * MS-DOS, such as DJGPP one. - */ -# if defined(OPENSSL_SYS_MSDOS) -# undef OPENSSL_SYS_UNIX -# endif - -/* - * For 32 bit environment, there seems to be the CygWin environment and then - * all the others that try to do the same thing Microsoft does... - */ -/* - * UEFI lives here because it might be built with a Microsoft toolchain and - * we need to avoid the false positive match on Windows. - */ -# if defined(OPENSSL_SYS_UEFI) -# undef OPENSSL_SYS_UNIX -# elif defined(OPENSSL_SYS_UWIN) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WIN32_UWIN -# else -# if defined(__CYGWIN__) || defined(OPENSSL_SYS_CYGWIN) -# define OPENSSL_SYS_WIN32_CYGWIN -# else -# if defined(_WIN32) || defined(OPENSSL_SYS_WIN32) -# undef OPENSSL_SYS_UNIX -# if !defined(OPENSSL_SYS_WIN32) -# define OPENSSL_SYS_WIN32 -# endif -# endif -# if defined(_WIN64) || defined(OPENSSL_SYS_WIN64) -# undef OPENSSL_SYS_UNIX -# if !defined(OPENSSL_SYS_WIN64) -# define OPENSSL_SYS_WIN64 -# endif -# endif -# if defined(OPENSSL_SYS_WINNT) -# undef OPENSSL_SYS_UNIX -# endif -# if defined(OPENSSL_SYS_WINCE) -# undef OPENSSL_SYS_UNIX -# endif -# endif -# endif - -/* Anything that tries to look like Microsoft is "Windows" */ -# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_WIN64) || defined(OPENSSL_SYS_WINNT) || defined(OPENSSL_SYS_WINCE) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_WINDOWS -# ifndef OPENSSL_SYS_MSDOS -# define OPENSSL_SYS_MSDOS -# endif -# endif - -/* - * DLL settings. This part is a bit tough, because it's up to the - * application implementer how he or she will link the application, so it - * requires some macro to be used. - */ -# ifdef OPENSSL_SYS_WINDOWS -# ifndef OPENSSL_OPT_WINDLL -# if defined(_WINDLL) /* This is used when building OpenSSL to - * indicate that DLL linkage should be used */ -# define OPENSSL_OPT_WINDLL -# endif -# endif -# endif - -/* ------------------------------- OpenVMS -------------------------------- */ -# if defined(__VMS) || defined(VMS) -# if !defined(OPENSSL_SYS_VMS) -# undef OPENSSL_SYS_UNIX -# define OPENSSL_SYS_VMS -# endif -# if defined(__DECC) -# define OPENSSL_SYS_VMS_DECC -# elif defined(__DECCXX) -# define OPENSSL_SYS_VMS_DECC -# define OPENSSL_SYS_VMS_DECCXX -# else -# define OPENSSL_SYS_VMS_NODECC -# endif -# endif - -/* -------------------------------- Unix ---------------------------------- */ -# ifdef OPENSSL_SYS_UNIX -# if defined(linux) || defined(__linux__) && !defined(OPENSSL_SYS_LINUX) -# define OPENSSL_SYS_LINUX -# endif -# if defined(_AIX) && !defined(OPENSSL_SYS_AIX) -# define OPENSSL_SYS_AIX -# endif -# endif - -/* -------------------------------- VOS ----------------------------------- */ -# if defined(__VOS__) && !defined(OPENSSL_SYS_VOS) -# define OPENSSL_SYS_VOS -# ifdef __HPPA__ -# define OPENSSL_SYS_VOS_HPPA -# endif -# ifdef __IA32__ -# define OPENSSL_SYS_VOS_IA32 -# 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 - *****************************************************************************/ - -/*- - * OPENSSL_EXTERN is normally used to declare a symbol with possible extra - * attributes to handle its presence in a shared library. - * OPENSSL_EXPORT is used to define a symbol with extra possible attributes - * to make it visible in a shared library. - * Care needs to be taken when a header file is used both to declare and - * define symbols. Basically, for any library that exports some global - * variables, the following code must be present in the header file that - * declares them, before OPENSSL_EXTERN is used: - * - * #ifdef SOME_BUILD_FLAG_MACRO - * # undef OPENSSL_EXTERN - * # define OPENSSL_EXTERN OPENSSL_EXPORT - * #endif - * - * The default is to have OPENSSL_EXPORT and OPENSSL_EXTERN - * have some generally sensible values. - */ - -# if defined(OPENSSL_SYS_WINDOWS) && defined(OPENSSL_OPT_WINDLL) -# define OPENSSL_EXPORT extern __declspec(dllexport) -# define OPENSSL_EXTERN extern __declspec(dllimport) -# else -# define OPENSSL_EXPORT extern -# define OPENSSL_EXTERN extern -# endif - -# ifdef _WIN32 -# ifdef _WIN64 -# define ossl_ssize_t __int64 -# define OSSL_SSIZE_MAX _I64_MAX -# else -# define ossl_ssize_t int -# define OSSL_SSIZE_MAX INT_MAX -# endif -# endif - -# if defined(OPENSSL_SYS_UEFI) && !defined(ossl_ssize_t) -# define ossl_ssize_t INTN -# define OSSL_SSIZE_MAX MAX_INTN -# endif - -# ifndef ossl_ssize_t -# define ossl_ssize_t ssize_t -# if defined(SSIZE_MAX) -# define OSSL_SSIZE_MAX SSIZE_MAX -# elif defined(_POSIX_SSIZE_MAX) -# define OSSL_SSIZE_MAX _POSIX_SSIZE_MAX -# else -# define OSSL_SSIZE_MAX ((ssize_t)(SIZE_MAX>>1)) -# endif -# endif - -# 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; -typedef INT16 int16_t; -typedef UINT16 uint16_t; -typedef INT32 int32_t; -typedef UINT32 uint32_t; -typedef INT64 int64_t; -typedef UINT64 uint64_t; -# elif (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || \ - 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 - * stdint.h: currently just older VC++ - */ -typedef signed char int8_t; -typedef unsigned char uint8_t; -typedef short int16_t; -typedef unsigned short uint16_t; -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 */ -# if !defined(inline) && !defined(__cplusplus) -# if defined(__STDC_VERSION__) && __STDC_VERSION__>=199901L - /* just use inline */ -# define ossl_inline inline -# elif defined(__GNUC__) && __GNUC__>=2 -# define ossl_inline __inline__ -# elif defined(_MSC_VER) - /* - * Visual Studio: inline is available in C++ only, however - * __inline is available for C, see - * http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx - */ -# define ossl_inline __inline -# else -# define ossl_inline -# endif -# else -# define ossl_inline inline -# endif - -# if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && \ - !defined(__cplusplus) -# define ossl_noreturn _Noreturn -# elif defined(__GNUC__) && __GNUC__ >= 2 -# define ossl_noreturn __attribute__((noreturn)) -# else -# define ossl_noreturn -# endif - -/* ossl_unused: portable unused attribute for use in public headers */ -# if defined(__GNUC__) -# define ossl_unused __attribute__((unused)) -# else -# define ossl_unused -# endif - -#ifdef __cplusplus -} -#endif -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_ostime.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_ostime.h deleted file mode 100644 index 0e174875..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_ostime.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 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_E_OSTIME_H -# define OPENSSL_E_OSTIME_H -# pragma once - -# include -# include -# include - -/* - * This header guarantees that 'struct timeval' will be available. It includes - * the minimum headers needed to facilitate this. This may still be a - * substantial set of headers on some platforms (e.g. on Win32). - */ - -# if defined(OPENSSL_SYS_WINDOWS) -# if !defined(_WINSOCKAPI_) - /* - * winsock2.h defines _WINSOCK2API_ and both winsock2.h and winsock.h define - * _WINSOCKAPI_. Both of these provide struct timeval. Don't include - * winsock2.h if either header has been included to avoid breakage with - * applications that prefer to use over . - */ -# include -# endif -# else -# include -# endif - -#endif 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 deleted file mode 100644 index e0ae1aa8..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ebcdic.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 1999-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_EBCDIC_H -# define OPENSSL_EBCDIC_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_EBCDIC_H -# endif - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* Avoid name clashes with other applications */ -# define os_toascii _openssl_os_toascii -# define os_toebcdic _openssl_os_toebcdic -# define ebcdic2ascii _openssl_ebcdic2ascii -# define ascii2ebcdic _openssl_ascii2ebcdic - -extern const unsigned char os_toascii[256]; -extern const unsigned char os_toebcdic[256]; -void *ebcdic2ascii(void *dest, const void *srce, size_t count); -void *ascii2ebcdic(void *dest, const void *srce, size_t count); - -#ifdef __cplusplus -} -#endif -#endif 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 deleted file mode 100644 index e1cbe982..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ec.h +++ /dev/null @@ -1,1588 +0,0 @@ -/* - * Copyright 2002-2023 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 - */ - -#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 - -# ifdef __cplusplus -extern "C" { -# endif - -/* 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 { - /** the point is encoded as z||x, where the octet z specifies - * which solution of the quadratic equation y is */ - POINT_CONVERSION_COMPRESSED = 2, - /** the point is encoded as z||x||y, where z is the octet 0x04 */ - POINT_CONVERSION_UNCOMPRESSED = 4, - /** the point is encoded as z||x||y, where the octet z specifies - * which solution of the quadratic equation y is */ - 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; -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 - */ -OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_simple_method(void); - -/** Returns GFp methods using montgomery multiplication. - * \return EC_METHOD object - */ -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 - */ -OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nist_method(void); - -# ifndef OPENSSL_NO_EC_NISTP_64_GCC_128 -/** Returns 64-bit optimized methods for nistp224 - * \return EC_METHOD object - */ -OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp224_method(void); - -/** Returns 64-bit optimized methods for nistp256 - * \return EC_METHOD object - */ -OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp256_method(void); - -/** Returns 64-bit optimized methods for nistp521 - * \return EC_METHOD object - */ -OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GFp_nistp521_method(void); -# endif /* OPENSSL_NO_EC_NISTP_64_GCC_128 */ - -# ifndef OPENSSL_NO_EC2M -/********************************************************************/ -/* EC_METHOD for curves over GF(2^m) */ -/********************************************************************/ - -/** Returns the basic GF2m ec method - * \return EC_METHOD object - */ -OSSL_DEPRECATEDIN_3_0 const EC_METHOD *EC_GF2m_simple_method(void); - -# endif - -/********************************************************************/ -/* EC_GROUP functions */ -/********************************************************************/ - -/** - * 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. - */ -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); - -/** 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 - * \return 1 on success and 0 if an error occurred. - */ -int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src); - -/** 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); - -/** 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. - * \param order the order of the group generated by the generator. - * \param cofactor the index of the sub-group generated by the generator - * in the group of all points on the elliptic curve. - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, - const BIGNUM *order, const BIGNUM *cofactor); - -/** Returns the generator of a EC_GROUP object. - * \param group EC_GROUP object - * \return the currently used generator (possibly NULL). - */ -const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group); - -/** Returns the montgomery data for order(Generator) - * \param group EC_GROUP object - * \return the currently used montgomery data (possibly NULL). -*/ -BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group); - -/** Gets the order of a EC_GROUP - * \param group EC_GROUP object - * \param order BIGNUM to which the order is copied - * \param ctx unused - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx); - -/** Gets the order of an EC_GROUP - * \param group EC_GROUP object - * \return the group order - */ -const BIGNUM *EC_GROUP_get0_order(const EC_GROUP *group); - -/** Gets the number of bits of the order of an EC_GROUP - * \param group EC_GROUP object - * \return number of bits of group order. - */ -int EC_GROUP_order_bits(const EC_GROUP *group); - -/** Gets the cofactor of a EC_GROUP - * \param group EC_GROUP object - * \param cofactor BIGNUM to which the cofactor is copied - * \param ctx unused - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, - BN_CTX *ctx); - -/** Gets the cofactor of an EC_GROUP - * \param group EC_GROUP object - * \return the group cofactor - */ -const BIGNUM *EC_GROUP_get0_cofactor(const EC_GROUP *group); - -/** Sets the name of a EC_GROUP object - * \param group EC_GROUP object - * \param nid NID of the curve name OID - */ -void EC_GROUP_set_curve_name(EC_GROUP *group, int nid); - -/** Returns the curve name of a EC_GROUP object - * \param group EC_GROUP object - * \return NID of the curve name OID or 0 if not set. - */ -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); - -void EC_GROUP_set_point_conversion_form(EC_GROUP *group, - point_conversion_form_t form); -point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *); - -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 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 - * defining the underlying field (GF2m) - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_GROUP_set_curve(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); - -/** Gets the parameters of the 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 - * defining the underlying field (GF2m) - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * defining the underlying field (GF2m) - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p BIGNUM with the prime number (GFp) or the polynomial - * defining the underlying field (GF2m) - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 -/** 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 - * defining the underlying field (GF2m) - * \param a BIGNUM with parameter a of the equation - * \param b BIGNUM with parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p BIGNUM with the prime number (GFp) or the polynomial - * defining the underlying field (GF2m) - * \param a BIGNUM for parameter a of the equation - * \param b BIGNUM for parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - */ -int EC_GROUP_get_degree(const EC_GROUP *group); - -/** Checks whether the parameter in the EC_GROUP define a valid ec group - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 if group is a valid ec group and 0 otherwise - */ -int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx); - -/** Checks whether the discriminant of the elliptic curve is zero or not - * \param group EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 1 if the discriminant is not zero and 0 otherwise - */ -int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx); - -/** Compares two EC_GROUP objects - * \param a first EC_GROUP object - * \param b second EC_GROUP object - * \param ctx BN_CTX object (optional) - * \return 0 if the groups are equal, 1 if not, or -1 on error - */ -int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx); - -/* - * EC_GROUP_new_GF*() calls EC_GROUP_new() and EC_GROUP_set_GF*() after - * choosing an appropriate EC_METHOD - */ - -/** Creates a new EC_GROUP object with the specified parameters defined - * over GFp (defined by the equation y^2 = x^3 + a*x + b) - * \param p BIGNUM with the prime number - * \param a BIGNUM with the parameter a of the equation - * \param b BIGNUM with the parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return newly created EC_GROUP object with the specified parameters - */ -EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); -# 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 - * \param a BIGNUM with the parameter a of the equation - * \param b BIGNUM with the parameter b of the equation - * \param ctx BN_CTX object (optional) - * \return newly created EC_GROUP object with the specified parameters - */ -EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, - const BIGNUM *b, BN_CTX *ctx); -# endif - -/** - * 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 an OSSL_PARAM array with the parameters describing the given - * EC_GROUP. - * The resulting parameters may contain an explicit or a named curve depending - * on the EC_GROUP. - * \param group pointer to the EC_GROUP object - * \param libctx The associated library context or NULL for the default - * context - * \param propq A property query string - * \param bnctx BN_CTX object (optional) - * \return newly created OSSL_PARAM array with the parameters - * describing the given EC_GROUP or NULL if an error occurred - */ -OSSL_PARAM *EC_GROUP_to_params(const EC_GROUP *group, OSSL_LIB_CTX *libctx, - const char *propq, BN_CTX *bnctx); - -/** - * 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 - */ -EC_GROUP *EC_GROUP_new_by_curve_name(int nid); - -/** Creates a new EC_GROUP object from an ECPARAMETERS object - * \param params pointer to the ECPARAMETERS object - * \return newly created EC_GROUP object with specified curve or NULL - * if an error occurred - */ -EC_GROUP *EC_GROUP_new_from_ecparameters(const ECPARAMETERS *params); - -/** Creates an ECPARAMETERS object for the given EC_GROUP object. - * \param group pointer to the EC_GROUP object - * \param params pointer to an existing ECPARAMETERS object or NULL - * \return pointer to the new ECPARAMETERS object or NULL - * if an error occurred. - */ -ECPARAMETERS *EC_GROUP_get_ecparameters(const EC_GROUP *group, - ECPARAMETERS *params); - -/** Creates a new EC_GROUP object from an ECPKPARAMETERS object - * \param params pointer to an existing ECPKPARAMETERS object, or NULL - * \return newly created EC_GROUP object with specified curve, or NULL - * if an error occurred - */ -EC_GROUP *EC_GROUP_new_from_ecpkparameters(const ECPKPARAMETERS *params); - -/** Creates an ECPKPARAMETERS object for the given EC_GROUP object. - * \param group pointer to the EC_GROUP object - * \param params pointer to an existing ECPKPARAMETERS object or NULL - * \return pointer to the new ECPKPARAMETERS object or NULL - * if an error occurred. - */ -ECPKPARAMETERS *EC_GROUP_get_ecpkparameters(const EC_GROUP *group, - ECPKPARAMETERS *params); - -/********************************************************************/ -/* handling of internal curves */ -/********************************************************************/ - -typedef struct { - int nid; - const char *comment; -} EC_builtin_curve; - -/* - * EC_builtin_curves(EC_builtin_curve *r, size_t size) returns number of all - * available curves or zero if a error occurred. In case r is not zero, - * nitems EC_builtin_curve structures are filled with the data of the first - * nitems internal groups - */ -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 */ -/********************************************************************/ - -/** Creates a new EC_POINT object for the specified EC_GROUP - * \param group EC_GROUP the underlying EC_GROUP object - * \return newly created EC_POINT object or NULL if an error occurred - */ -EC_POINT *EC_POINT_new(const EC_GROUP *group); - -/** Frees a EC_POINT object - * \param point EC_POINT object to be freed - */ -void EC_POINT_free(EC_POINT *point); - -/** Clears and frees a EC_POINT object - * \param point EC_POINT object to be cleared and freed - */ -void EC_POINT_clear_free(EC_POINT *point); - -/** Copies EC_POINT object - * \param dst destination EC_POINT object - * \param src source EC_POINT object - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src); - -/** Creates a new EC_POINT object and copies the content of the supplied - * EC_POINT - * \param src source EC_POINT object - * \param group underlying the EC_GROUP object - * \return newly created EC_POINT object or NULL if an error occurred - */ -EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group); - -/** Sets a point to infinity (neutral element) - * \param group underlying EC_GROUP object - * \param point EC_POINT to set to infinity - * \return 1 on success and 0 if an error occurred - */ -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 - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param z BIGNUM with the z-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param z BIGNUM for the z-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_set_affine_coordinates(const EC_GROUP *group, EC_POINT *p, - const BIGNUM *x, const BIGNUM *y, - BN_CTX *ctx); - -/** Gets the affine coordinates of an EC_POINT. - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param p EC_POINT object - * \param x BIGNUM with the x-coordinate - * \param y BIGNUM with the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM for the x-coordinate - * \param y BIGNUM for the y-coordinate - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param x BIGNUM with x-coordinate - * \param y_bit integer with the y-Bit (either 0 or 1) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param form point conversion form - * \param buf memory buffer for the result. If NULL the function returns - * required buffer size. - * \param len length of the memory buffer - * \param ctx BN_CTX object (optional) - * \return the length of the encoded octet string or 0 if an error occurred - */ -size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p, - point_conversion_form_t form, - unsigned char *buf, size_t len, BN_CTX *ctx); - -/** Decodes a EC_POINT from a octet string - * \param group underlying EC_GROUP object - * \param p EC_POINT object - * \param buf memory buffer with the encoded ec point - * \param len length of the encoded ec point - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p, - const unsigned char *buf, size_t len, BN_CTX *ctx); - -/** Encodes an EC_POINT object to an allocated octet string - * \param group underlying EC_GROUP object - * \param point EC_POINT object - * \param form point conversion form - * \param pbuf returns pointer to allocated buffer - * \param ctx BN_CTX object (optional) - * \return the length of the encoded octet string or 0 if an error occurred - */ -size_t EC_POINT_point2buf(const EC_GROUP *group, const EC_POINT *point, - point_conversion_form_t form, - unsigned char **pbuf, BN_CTX *ctx); - -/* other interfaces to point2oct/oct2point: */ -# 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 *, - EC_POINT *, BN_CTX *); - -/********************************************************************/ -/* functions for doing EC_POINT arithmetic */ -/********************************************************************/ - -/** Computes the sum of two EC_POINT - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result (r = a + b) - * \param a EC_POINT object with the first summand - * \param b EC_POINT object with the second summand - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - const EC_POINT *b, BN_CTX *ctx); - -/** Computes the double of a EC_POINT - * \param group underlying EC_GROUP object - * \param r EC_POINT object for the result (r = 2 * a) - * \param a EC_POINT object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, - BN_CTX *ctx); - -/** Computes the inverse of a EC_POINT - * \param group underlying EC_GROUP object - * \param a EC_POINT object to be inverted (it's used for the result as well) - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx); - -/** Checks whether the point is the neutral element of the group - * \param group the underlying EC_GROUP object - * \param p EC_POINT object - * \return 1 if the point is the neutral element and 0 otherwise - */ -int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p); - -/** Checks whether the point is on the curve - * \param group underlying EC_GROUP object - * \param point EC_POINT object to check - * \param ctx BN_CTX object (optional) - * \return 1 if the point is on the curve, 0 if not, or -1 on error - */ -int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, - BN_CTX *ctx); - -/** Compares two EC_POINTs - * \param group underlying EC_GROUP object - * \param a first EC_POINT object - * \param b second EC_POINT object - * \param ctx BN_CTX object (optional) - * \return 1 if the points are not equal, 0 if they are, or -1 on error - */ -int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, - 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 - * \param r EC_POINT object for the result - * \param n BIGNUM with the multiplier for the group generator (optional) - * \param num number further summands - * \param p array of size num of EC_POINT objects - * \param m array of size num of BIGNUM objects - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - * \param r EC_POINT object for the result - * \param n BIGNUM with the multiplier for the group generator (optional) - * \param q EC_POINT object with the first factor of the second summand - * \param m BIGNUM with the second factor of the second summand - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ -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 - */ -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 - */ -OSSL_DEPRECATEDIN_3_0 int EC_GROUP_have_precompute_mult(const EC_GROUP *group); -# endif /* OPENSSL_NO_DEPRECATED_3_0 */ - -/********************************************************************/ -/* ASN1 stuff */ -/********************************************************************/ - -DECLARE_ASN1_ITEM(ECPKPARAMETERS) -DECLARE_ASN1_ALLOC_FUNCTIONS(ECPKPARAMETERS) -DECLARE_ASN1_ITEM(ECPARAMETERS) -DECLARE_ASN1_ALLOC_FUNCTIONS(ECPARAMETERS) - -/* - * EC_GROUP_get_basis_type() returns the NID of the basis type used to - * represent the field elements - */ -int EC_GROUP_get_basis_type(const EC_GROUP *); -# 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 - -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) \ - ASN1_d2i_bio_of(EC_GROUP, NULL, d2i_ECPKParameters, bp, 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) \ - ASN1_i2d_fp((i2d_of_void *)i2d_ECPKParameters, (fp), (void *)(x)) - -# 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 - -/* some values for the flags field */ -# 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) - -/* 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. - */ -OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_ex(OSSL_LIB_CTX *ctx, const char *propq); - -/** - * 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); - -OSSL_DEPRECATEDIN_3_0 int EC_KEY_get_flags(const EC_KEY *key); - -OSSL_DEPRECATEDIN_3_0 void EC_KEY_set_flags(EC_KEY *key, int flags); - -OSSL_DEPRECATEDIN_3_0 void EC_KEY_clear_flags(EC_KEY *key, int flags); - -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. - */ -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. - */ -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. - */ -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. - */ -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. - */ -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). - */ -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). - */ -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 - * \param group EC_GROUP to use in the EC_KEY object (note: the EC_KEY - * object will use an own copy of the EC_GROUP). - * \return 1 on success and 0 if an error occurred. - */ -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). - */ -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 - * \param prv BIGNUM with the private key (note: the EC_KEY object - * will use an own copy of the BIGNUM). - * \return 1 on success and 0 if an error occurred. - */ -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) - */ -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 - * \param pub EC_POINT object with the public key (note: the EC_KEY object - * will use an own copy of the EC_POINT object). - * \return 1 on success and 0 if an error occurred. - */ -OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub); - -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) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_EC_KEY, l, p, newf, dupf, freef) - -# 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 */ -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. - * \param key EC_KEY object - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred. - */ -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. - */ -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. - */ -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 sign and 0 otherwise. - */ -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. - * \param key the EC_KEY object - * \param x public key x coordinate - * \param y public key y coordinate - * \return 1 on success and 0 otherwise. - */ -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 - * \param form point conversion form - * \param pbuf returns pointer to allocated buffer - * \param ctx BN_CTX object (optional) - * \return the length of the encoded octet string or 0 if an error occurred - */ -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 - * \param buf memory buffer with the encoded ec point - * \param len length of the encoded ec point - * \param ctx BN_CTX object (optional) - * \return 1 on success and 0 if an error occurred - */ - -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 - * \param buf memory buffer with the encoded private key - * \param len length of the encoded key - * \return 1 on success and 0 if an error occurred - */ - -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 - * \param buf memory buffer for the result. If NULL the function returns - * required buffer size. - * \param len length of the memory buffer - * \return the length of the encoded octet string or 0 if an error occurred - */ - -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 - */ -OSSL_DEPRECATEDIN_3_0 size_t EC_KEY_priv2buf(const EC_KEY *eckey, - unsigned char **pbuf); - -/********************************************************************/ -/* de- and encoding functions for SEC1 ECPrivateKey */ -/********************************************************************/ - -/** Decodes a private key from a memory buffer. - * \param key a pointer to a EC_KEY object which should be used (or NULL) - * \param in pointer to memory with the DER encoded private key - * \param len length of the DER encoded private key - * \return the decoded private key or NULL if an error occurred. - */ -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 - * \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. - */ -OSSL_DEPRECATEDIN_3_0 int i2d_ECPrivateKey(const EC_KEY *key, - unsigned char **out); - -/********************************************************************/ -/* de- and encoding functions for EC parameters */ -/********************************************************************/ - -/** Decodes ec parameter from a memory buffer. - * \param key a pointer to a EC_KEY object which should be used (or NULL) - * \param in pointer to memory with the DER encoded ec parameters - * \param len length of the DER encoded ec parameters - * \return a EC_KEY object with the decoded parameters or NULL if an error - * occurred. - */ -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 - * \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. - */ -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 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. - */ -OSSL_DEPRECATEDIN_3_0 EC_KEY *o2i_ECPublicKey(EC_KEY **key, - const unsigned char **in, long len); - -/** 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 - */ -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 - */ -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 - * \param key EC_KEY object - * \param off line offset - * \return 1 on success and 0 if an error occurred - */ -OSSL_DEPRECATEDIN_3_0 int EC_KEY_print(BIO *bp, const EC_KEY *key, int off); - -# 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 - */ -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 - * \param key EC_KEY object - * \param off line offset - * \return 1 on success and 0 if an error occurred - */ -OSSL_DEPRECATEDIN_3_0 int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off); -# endif /* OPENSSL_NO_STDIO */ - -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 mistakenly attributed to ANSI X9.62, - * it is actually specified in ANSI X9.63. - * This identifier is retained for backwards compatibility - */ -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); - -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; - -/** Allocates and initialize a ECDSA_SIG structure - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -ECDSA_SIG *ECDSA_SIG_new(void); - -/** frees a ECDSA_SIG structure - * \param sig pointer to the ECDSA_SIG structure - */ -void ECDSA_SIG_free(ECDSA_SIG *sig); - -/** 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 - */ -DECLARE_ASN1_ENCODE_FUNCTIONS_only(ECDSA_SIG, ECDSA_SIG) - -/** 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) - */ - -/** Accessor for r and s fields of ECDSA_SIG - * \param sig pointer to ECDSA_SIG structure - * \param pr pointer to BIGNUM pointer for r (may be NULL) - * \param ps pointer to BIGNUM pointer for s (may be NULL) - */ -void ECDSA_SIG_get0(const ECDSA_SIG *sig, const BIGNUM **pr, const BIGNUM **ps); - -/** Accessor for r field of ECDSA_SIG - * \param sig pointer to ECDSA_SIG structure - */ -const BIGNUM *ECDSA_SIG_get0_r(const ECDSA_SIG *sig); - -/** Accessor for s field of ECDSA_SIG - * \param sig pointer to ECDSA_SIG structure - */ -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 - * \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 - * \param dgst_len length of the hash value - * \param eckey EC_KEY object containing a private EC key - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -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). - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param kinv BIGNUM with a pre-computed inverse k (optional) - * \param rp BIGNUM with a pre-computed rp value (optional), - * see ECDSA_sign_setup - * \param eckey EC_KEY object containing a private EC key - * \return pointer to a ECDSA_SIG structure or NULL if an error occurred - */ -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. - * \param dgst pointer to the hash value - * \param dgst_len length of the hash value - * \param sig ECDSA_SIG structure - * \param eckey EC_KEY object containing a public EC key - * \return 1 if the signature is valid, 0 if the signature is invalid - * and -1 on error - */ -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 - * \param ctx BN_CTX object (optional) - * \param kinv BIGNUM pointer for the inverse of k - * \param rp BIGNUM pointer for x coordinate of k * generator - * \return 1 on success and 0 otherwise - */ -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). - * \param type this parameter is ignored - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param sig memory for the DER encoded created signature - * \param siglen pointer to the length of the returned signature - * \param eckey EC_KEY object containing a private EC key - * \return 1 on success and 0 otherwise - */ -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). - * \param type this parameter is ignored - * \param dgst pointer to the hash value to sign - * \param dgstlen length of the hash value - * \param sig buffer to hold the DER encoded signature - * \param siglen pointer to the length of the returned signature - * \param kinv BIGNUM with a pre-computed inverse k (optional) - * \param rp BIGNUM with a pre-computed rp value (optional), - * see ECDSA_sign_setup - * \param eckey EC_KEY object containing a private EC key - * \return 1 on success and 0 otherwise - */ -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. - * \param type this parameter is ignored - * \param dgst pointer to the hash value - * \param dgstlen length of the hash value - * \param sig pointer to the DER encoded signature - * \param siglen length of the DER encoded signature - * \param eckey EC_KEY object containing a public EC key - * \return 1 if the signature is valid, 0 if the signature is invalid - * and -1 on error - */ -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 - */ -OSSL_DEPRECATEDIN_3_0 int ECDSA_size(const EC_KEY *eckey); - -/********************************************************************/ -/* EC_KEY_METHOD constructors, destructors, writers and accessors */ -/********************************************************************/ - -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)); - -OSSL_DEPRECATEDIN_3_0 void EC_KEY_METHOD_set_keygen(EC_KEY_METHOD *meth, - int (*keygen)(EC_KEY *key)); - -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)); - -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)); - -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 BIGNUM *in_kinv, - const BIGNUM *in_r, - EC_KEY *eckey)); - -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 */ - -# 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) - -# 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 -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 56bd4cc2..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecdh.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 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 deleted file mode 100644 index 56bd4cc2..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecdsa.h +++ /dev/null @@ -1,10 +0,0 @@ -/* - * Copyright 2002-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 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 deleted file mode 100644 index f15f91f6..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ecerr.h +++ /dev/null @@ -1,104 +0,0 @@ -/* - * 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_ECERR_H -# define OPENSSL_ECERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_EC - - -/* - * EC reason codes. - */ -# define EC_R_ASN1_ERROR 115 -# define EC_R_BAD_SIGNATURE 156 -# define EC_R_BIGNUM_OUT_OF_RANGE 144 -# define EC_R_BUFFER_TOO_SMALL 100 -# 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_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 -# define EC_R_INVALID_DIGEST 151 -# define EC_R_INVALID_DIGEST_TYPE 138 -# 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 -# define EC_R_LADDER_POST_FAILURE 136 -# define EC_R_LADDER_PRE_FAILURE 153 -# define EC_R_LADDER_STEP_FAILURE 162 -# define EC_R_MISSING_OID 167 -# define EC_R_MISSING_PARAMETERS 124 -# define EC_R_MISSING_PRIVATE_KEY 125 -# define EC_R_NEED_NEW_SETUP_VALUES 157 -# define EC_R_NOT_A_NIST_PRIME 135 -# define EC_R_NOT_IMPLEMENTED 126 -# define EC_R_NOT_INITIALIZED 111 -# define EC_R_NO_PARAMETERS_SET 139 -# define EC_R_NO_PRIVATE_VALUE 154 -# define EC_R_OPERATION_NOT_SUPPORTED 152 -# define EC_R_PASSED_NULL_PARAMETER 134 -# define EC_R_PEER_KEY_ERROR 149 -# define EC_R_POINT_ARITHMETIC_FAILURE 155 -# define EC_R_POINT_AT_INFINITY 106 -# define EC_R_POINT_COORDINATES_BLIND_FAILURE 163 -# define EC_R_POINT_IS_NOT_ON_CURVE 107 -# 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 -# define EC_R_UNKNOWN_GROUP 129 -# define EC_R_UNKNOWN_ORDER 114 -# define EC_R_UNSUPPORTED_FIELD 131 -# define EC_R_WRONG_CURVE_PARAMETERS 145 -# define EC_R_WRONG_ORDER 130 - -# endif -#endif 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 deleted file mode 100644 index c37a6f16..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/encoder.h +++ /dev/null @@ -1,124 +0,0 @@ -/* - * 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 deleted file mode 100644 index 5e318b14..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/encodererr.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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 deleted file mode 100644 index 2fbc82c3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/engine.h +++ /dev/null @@ -1,833 +0,0 @@ -/* - * Copyright 2000-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 - */ - -#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 -# 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 - -/* - * 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 -/* Obvious all-or-nothing cases. */ -# 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 - * internally to control registration of ENGINE implementations, and can be - * 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 - -/* ENGINE flags that can be set by ENGINE_set_flags(). */ -/* Not used */ -/* #define ENGINE_FLAGS_MALLOCED 0x0001 */ - -/* - * This flag is for ENGINEs that wish to handle the various 'CMD'-related - * control commands on their own. Without this flag, ENGINE_ctrl() handles - * these control commands on behalf of the ENGINE using their "cmd_defns" - * data. - */ -# define ENGINE_FLAGS_MANUAL_CMD_CTRL (int)0x0002 - -/* - * This flag is for ENGINEs who return new duplicate structures when found - * via "ENGINE_by_id()". When an ENGINE must store state (eg. if - * ENGINE_ctrl() commands are called in sequence as part of some stateful - * process like key-generation setup and execution), it can set this flag - - * then each attempt to obtain the ENGINE will result in it being copied into - * a new structure. Normally, ENGINEs don't declare this flag so - * ENGINE_by_id() just increments the existing ENGINE's structural reference - * count. - */ -# define ENGINE_FLAGS_BY_ID_COPY (int)0x0004 - -/* - * This flag if for an ENGINE that does not want its methods registered as - * part of ENGINE_register_all_complete() for example if the methods are not - * usable as default methods. - */ - -# define ENGINE_FLAGS_NO_REGISTER_ALL (int)0x0008 - -/* - * ENGINEs can support their own command types, and these flags are used in - * ENGINE_CTRL_GET_CMD_FLAGS to indicate to the caller what kind of input - * each command expects. Currently only numeric and string input is - * supported. If a control command supports none of the _NUMERIC, _STRING, or - * _NO_INPUT options, then it is regarded as an "internal" control command - - * and not for use in config setting situations. As such, they're not - * available to the ENGINE_ctrl_cmd_string() function, only raw ENGINE_ctrl() - * access. Changes to this list of 'command types' should be reflected - * carefully in ENGINE_cmd_is_executable() and ENGINE_ctrl_cmd_string(). - */ - -/* accepts a 'long' input value (3rd parameter to ENGINE_ctrl) */ -# 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 -/* - * Indicates that the control command takes *no* input. Ie. the control - * command is unparameterised. - */ -# 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 - -/* - * NB: These 3 control commands are deprecated and should not be used. - * ENGINEs relying on these commands should compile conditional support for - * compatibility (eg. if these symbols are defined) but should also migrate - * the same functionality to their own ENGINE-specific control functions that - * can be "discovered" by calling applications. The fact these control - * commands wouldn't be "executable" (ie. usable by text-based config) - * doesn't change the fact that application code can find and use them - * without requiring per-ENGINE hacking. - */ - -/* - * These flags are used to tell the ctrl function what should be done. All - * command numbers are shared between all engines, even if some don't make - * 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 - * 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 - * when calling the password - * callback and the user - * interface */ -# 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 - * section in the already - * loaded configuration */ - -/* - * These control commands allow an application to deal with an arbitrary - * engine in a dynamic way. Warn: Negative return values indicate errors FOR - * THESE COMMANDS because zero is used to indicate 'end-of-list'. Other - * commands, including ENGINE-specific command types, return zero for an - * error. An ENGINE can choose to implement these ctrl functions, and can - * internally manage things however it chooses - it does so by setting the - * ENGINE_FLAGS_MANUAL_CMD_CTRL flag (using ENGINE_set_flags()). Otherwise - * the ENGINE_ctrl() code handles this on the ENGINE's behalf using the - * cmd_defns data (set using ENGINE_set_cmd_defns()). This means an ENGINE's - * ctrl() handler need only implement its own commands - the above "meta" - * commands will be taken care of. - */ - -/* - * Returns non-zero if the supplied ENGINE has a ctrl() handler. If "not", - * then all the remaining control commands will return failure, so it is - * 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 -/* - * 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 -/* - * 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 -/* - * 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 -/* - * 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 - * NAME_LEN case, the return value is the length of the command name (not - * counting a trailing EOL). In the NAME case, the 'void*' argument must be a - * 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 -/* 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 -/* - * 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 - -/* - * 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 - -/* - * NB: These 2 nCipher "chil" control commands are deprecated, and their - * functionality is now available through ENGINE-specific control commands - * (exposed through the above-mentioned 'CMD'-handling). Code using these 2 - * commands should be migrated to the more general command handling before - * these are removed. - */ - -/* 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. - */ - -/* - * If an ENGINE supports its own specific control commands and wishes the - * framework to handle the above 'ENGINE_CMD_***'-manipulation commands on - * its behalf, it should supply a null-terminated array of ENGINE_CMD_DEFN - * entries to ENGINE_set_cmd_defns(). It should also implement a ctrl() - * handler that supports the stated commands (ie. the "cmd_num" entries as - * described by the array). NB: The array must be ordered in increasing order - * of cmd_num. "null-terminated" means that the last ENGINE_CMD_DEFN element - * has cmd_num set to zero and/or cmd_name set to NULL. - */ -typedef struct ENGINE_CMD_DEFN_st { - unsigned int cmd_num; /* The command number */ - const char *cmd_name; /* The command name itself */ - const char *cmd_desc; /* A short description of the command */ - unsigned int cmd_flags; /* The input the command expects */ -} ENGINE_CMD_DEFN; - -/* Generic function pointer */ -typedef int (*ENGINE_GEN_FUNC_PTR) (void); -/* Generic function pointer taking no arguments */ -typedef int (*ENGINE_GEN_INT_FUNC_PTR) (ENGINE *); -/* Specific control function pointer */ -typedef int (*ENGINE_CTRL_FUNC_PTR) (ENGINE *, int, long, void *, - void (*f) (void)); -/* Generic load_key function pointer */ -typedef EVP_PKEY *(*ENGINE_LOAD_KEY_PTR)(ENGINE *, const char *, - UI_METHOD *ui_method, - void *callback_data); -typedef int (*ENGINE_SSL_CLIENT_CERT_PTR) (ENGINE *, SSL *ssl, - STACK_OF(X509_NAME) *ca_dn, - X509 **pcert, EVP_PKEY **pkey, - STACK_OF(X509) **pother, - UI_METHOD *ui_method, - void *callback_data); -/*- - * These callback types are for an ENGINE's handler for cipher and digest logic. - * These handlers have these prototypes; - * int foo(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid); - * int foo(ENGINE *e, const EVP_MD **digest, const int **nids, int nid); - * Looking at how to implement these handlers in the case of cipher support, if - * the framework wants the EVP_CIPHER for 'nid', it will call; - * foo(e, &p_evp_cipher, NULL, nid); (return zero for failure) - * If the framework wants a list of supported 'nid's, it will call; - * foo(e, NULL, &p_nids, 0); (returns number of 'nids' or -1 for error) - */ -/* - * Returns to a pointer to the array of supported cipher 'nid's. If the - * second parameter is non-NULL it is set to the size of the returned array. - */ -typedef int (*ENGINE_CIPHERS_PTR) (ENGINE *, const EVP_CIPHER **, - const int **, int); -typedef int (*ENGINE_DIGESTS_PTR) (ENGINE *, const EVP_MD **, const int **, - int); -typedef int (*ENGINE_PKEY_METHS_PTR) (ENGINE *, EVP_PKEY_METHOD **, - const int **, int); -typedef int (*ENGINE_PKEY_ASN1_METHS_PTR) (ENGINE *, EVP_PKEY_ASN1_METHOD **, - const int **, int); -/* - * STRUCTURE functions ... all of these functions deal with pointers to - * ENGINE structures where the pointers have a "structural reference". This - * means that their reference is to allowed access to the structure but it - * does not imply that the structure is functional. To simply increment or - * decrement the structural reference count, use ENGINE_by_id and - * ENGINE_free. NB: This is not required when iterating using ENGINE_get_next - * as it will automatically decrement the structural reference count of the - * "current" ENGINE and increment the structural reference count of the - * ENGINE it returns (unless it is NULL). - */ - -/* Get the first/last "ENGINE" type available. */ -# 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). */ -# 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. */ -# ifndef OPENSSL_NO_DEPRECATED_3_0 -OSSL_DEPRECATEDIN_3_0 int ENGINE_add(ENGINE *e); -# endif -/* Remove an existing "ENGINE" type from the array. */ -# 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. */ -# ifndef OPENSSL_NO_DEPRECATED_3_0 -OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_by_id(const char *id); -# endif - -# 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. - */ -# 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; - * ENGINE_register_***(e) - registers the implementation from 'e' (if it has one) - * ENGINE_unregister_***(e) - unregister the implementation from 'e' - * ENGINE_register_all_***() - call ENGINE_register_***() for each 'e' in the list - * Cleanup is automatically registered from each table when required. - */ -# 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 - * of these functions can result in static linkage of code your application - * may not need. If you only need a subset of functionality, consider using - * more selective initialisation. - */ -# 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 - * send down an integer, a pointer to data or a function pointer are - * provided. Any of the parameters may or may not be NULL, depending on the - * command number. In actuality, this function only requires a structural - * (rather than functional) reference to an engine, but many control commands - * may require the engine be functional. The caller should be aware of trying - * commands that require an operational ENGINE, and only use functional - * references in such situations. - */ -# 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 - * "setting". Eg. in an application's config file that gets processed through - * ENGINE_ctrl_cmd_string(). If this returns zero, it is not available to - * ENGINE_ctrl_cmd_string(), only ENGINE_ctrl(). - */ -# 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 - * command name instead of a command number, and can handle optional - * commands. See the comment on ENGINE_ctrl_cmd_string() for an explanation - * on how to use the cmd_name and 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 - * cmd_name is converted to a command number and the control command is - * called using 'arg' as an argument (unless the ENGINE doesn't support such - * a command, in which case no control command is called). The command is - * checked for input flags, and if necessary the argument will be converted - * to a numeric value. If cmd_optional is non-zero, then if the ENGINE - * doesn't support the given cmd_name the return value will be success - * anyway. This function is intended for applications to use so that users - * (or config files) can supply engine-specific config data to the ENGINE at - * run-time to control behaviour of specific engines. As such, it shouldn't - * be used for calling ENGINE_ctrl() functions that return data, deal with - * binary data, or that are otherwise supposed to be used directly through - * ENGINE_ctrl() in application code. Any "return" data from an ENGINE_ctrl() - * operation in this function will be lost - the return value is interpreted - * as failure if the return value is zero, success otherwise, and this - * function returns a boolean value as a result. In other words, vendors of - * 'ENGINE'-enabled devices should write ENGINE implementations with - * parameterisations that work in this scheme, so that compliant ENGINE-based - * 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 - * don't address reference counting at all - one uses them to populate an - * ENGINE structure with personalised implementations of things prior to - * using it directly or adding it to the builtin ENGINE list in OpenSSL. - * These are also here so that the ENGINE structure doesn't have to be - * exposed and break binary compatibility! - */ -# 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); -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); -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); -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) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_ENGINE, l, p, newf, dupf, freef) -# 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 - -# 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 - -/* - * These return values from within the ENGINE structure. These can be useful - * with functional references as well as structural references - it depends - * which you obtained. Using the result for functional purposes if you only - * obtained a structural reference may be problematic! - */ -# 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); -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); -OSSL_DEPRECATEDIN_3_0 -const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e); -OSSL_DEPRECATEDIN_3_0 int ENGINE_get_flags(const ENGINE *e); -# endif - -/* - * FUNCTIONAL functions. These functions deal with ENGINE structures that - * have (or will) be initialised for use. Broadly speaking, the structural - * functions are useful for iterating the list of available engine types, - * creating new engine types, and other "list" operations. These functions - * actually deal with ENGINEs that are to be used. As such these functions - * can fail (if applicable) when particular engines are unavailable - eg. if - * a hardware accelerator is not attached or not functioning correctly. Each - * ENGINE has 2 reference counts; structural and functional. Every time a - * functional reference is obtained or released, a corresponding structural - * reference is automatically obtained or released too. - */ - -/* - * 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. - */ -# ifndef OPENSSL_NO_DEPRECATED_3_0 -OSSL_DEPRECATEDIN_3_0 int ENGINE_init(ENGINE *e); -# endif -/* - * 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. - */ -# 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); -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 - * default) performing any RSA operations. The value returned is an - * incremented reference, so it should be free'd (ENGINE_finish) before it is - * discarded. - */ -# ifndef OPENSSL_NO_DEPRECATED_3_0 -OSSL_DEPRECATEDIN_3_0 ENGINE *ENGINE_get_default_RSA(void); -# endif -/* Same for the other "methods" */ -# 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". - */ -# 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 - * the result is non-zero (success) then the ENGINE structure will have had - * its reference count up'd so the caller should still free their own - * reference 'e'. - */ -# 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" */ -# 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 - * ENGINE_METHOD_*** defines above. As with the "ENGINE_register_complete()" - * function, this function can result in unnecessary static linkage. If your - * application requires only specific functionality, consider using more - * selective functions. - */ -# 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); */ - -/**************************/ -/* DYNAMIC ENGINE SUPPORT */ -/**************************/ - -/* Binary/behaviour compatibility levels */ -# 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 - -/* - * When compiling an ENGINE entirely as an external shared library, loadable - * by the "dynamic" ENGINE, these types are needed. The 'dynamic_fns' - * structure type provides the calling application's (or library's) error - * functionality and memory management function pointers to the loaded - * library. These should be used/set in the loaded library code so that the - * loading application's 'state' will be used/changed in all operations. The - * 'static_state' pointer allows the loaded library to know if it shares the - * same static data as the calling application (or library), and thus whether - * these callbacks need to be set or not. - */ -typedef void *(*dyn_MEM_malloc_fn) (size_t, const char *, int); -typedef void *(*dyn_MEM_realloc_fn) (void *, size_t, const char *, int); -typedef void (*dyn_MEM_free_fn) (void *, const char *, int); -typedef struct st_dynamic_MEM_fns { - dyn_MEM_malloc_fn malloc_fn; - dyn_MEM_realloc_fn realloc_fn; - dyn_MEM_free_fn free_fn; -} dynamic_MEM_fns; -/* - * FIXME: Perhaps the memory and locking code (crypto.h) should declare and - * use these types so we (and any other dependent code) can simplify a bit?? - */ -/* The top-level structure */ -typedef struct st_dynamic_fns { - void *static_state; - dynamic_MEM_fns mem_fns; -} dynamic_fns; - -/* - * The version checking function should be of this prototype. NB: The - * ossl_version value passed in is the OSSL_DYNAMIC_VERSION of the loading - * code. If this function returns zero, it indicates a (potential) version - * incompatibility and the loaded library doesn't believe it can proceed. - * Otherwise, the returned value is the (latest) version supported by the - * loading library. The loader may still decide that the loaded code's - * version is unsatisfactory and could veto the load. The function is - * expected to be implemented with the symbol name "v_check", and a default - * implementation can be fully instantiated with - * IMPLEMENT_DYNAMIC_CHECK_FN(). - */ -typedef unsigned long (*dynamic_v_check_fn) (unsigned long ossl_version); -# 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; \ - return 0; } - -/* - * This function is passed the ENGINE structure to initialise with its own - * function and command settings. It should not adjust the structural or - * functional reference counts. If this function returns zero, (a) the load - * will be aborted, (b) the previous ENGINE state will be memcpy'd back onto - * the structure, and (c) the shared library will be unloaded. So - * implementations should do their own internal cleanup in failure - * circumstances otherwise they could leak. The 'id' parameter, if non-NULL, - * represents the ENGINE id that the loader is looking for. If this is NULL, - * the shared library can choose to return failure or to initialise a - * 'default' ENGINE. If non-NULL, the shared library must initialise only an - * ENGINE matching the passed 'id'. The function is expected to be - * implemented with the symbol name "bind_engine". A standard implementation - * can be instantiated with IMPLEMENT_DYNAMIC_BIND_FN(fn) where the parameter - * 'fn' is a callback function that populates the ENGINE structure and - * returns an int value (zero for failure). 'fn' should have prototype; - * [static] int fn(ENGINE *e, const char *id); - */ -typedef int (*dynamic_bind_engine) (ENGINE *e, const char *id, - const dynamic_fns *fns); -# define IMPLEMENT_DYNAMIC_BIND_FN(fn) \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns); \ - OPENSSL_EXPORT \ - int bind_engine(ENGINE *e, const char *id, const dynamic_fns *fns) { \ - if (ENGINE_get_static_state() == fns->static_state) goto skip_cbs; \ - CRYPTO_set_mem_functions(fns->mem_fns.malloc_fn, \ - fns->mem_fns.realloc_fn, \ - fns->mem_fns.free_fn); \ - OPENSSL_init_crypto(OPENSSL_INIT_NO_ATEXIT, NULL); \ - skip_cbs: \ - if (!fn(e, id)) return 0; \ - return 1; } - -/* - * If the loading application (or library) and the loaded ENGINE library - * share the same static data (eg. they're both dynamically linked to the - * same libcrypto.so) we need a way to avoid trying to set system callbacks - - * this would fail, and for the same reason that it's unnecessary to try. If - * the loaded ENGINE has (or gets from through the loader) its own copy of - * the libcrypto static data, we will need to set the callbacks. The easiest - * way to detect this is to have a function that returns a pointer to some - * static data and let the loading application and loaded ENGINE compare - * their respective values. - */ -void *ENGINE_get_static_state(void); - -# 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 /* 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 deleted file mode 100644 index d439b682..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/engineerr.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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_ENGINEERR_H -# define OPENSSL_ENGINEERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_ENGINE - - -/* - * ENGINE reason codes. - */ -# define ENGINE_R_ALREADY_LOADED 100 -# define ENGINE_R_ARGUMENT_IS_NOT_A_NUMBER 133 -# define ENGINE_R_CMD_NOT_EXECUTABLE 134 -# define ENGINE_R_COMMAND_TAKES_INPUT 135 -# define ENGINE_R_COMMAND_TAKES_NO_INPUT 136 -# define ENGINE_R_CONFLICTING_ENGINE_ID 103 -# define ENGINE_R_CTRL_COMMAND_NOT_IMPLEMENTED 119 -# define ENGINE_R_DSO_FAILURE 104 -# define ENGINE_R_DSO_NOT_FOUND 132 -# define ENGINE_R_ENGINES_SECTION_ERROR 148 -# define ENGINE_R_ENGINE_CONFIGURATION_ERROR 102 -# define ENGINE_R_ENGINE_IS_NOT_IN_LIST 105 -# define ENGINE_R_ENGINE_SECTION_ERROR 149 -# define ENGINE_R_FAILED_LOADING_PRIVATE_KEY 128 -# define ENGINE_R_FAILED_LOADING_PUBLIC_KEY 129 -# define ENGINE_R_FINISH_FAILED 106 -# define ENGINE_R_ID_OR_NAME_MISSING 108 -# define ENGINE_R_INIT_FAILED 109 -# define ENGINE_R_INTERNAL_LIST_ERROR 110 -# define ENGINE_R_INVALID_ARGUMENT 143 -# define ENGINE_R_INVALID_CMD_NAME 137 -# define ENGINE_R_INVALID_CMD_NUMBER 138 -# define ENGINE_R_INVALID_INIT_VALUE 151 -# define ENGINE_R_INVALID_STRING 150 -# define ENGINE_R_NOT_INITIALISED 117 -# define ENGINE_R_NOT_LOADED 112 -# define ENGINE_R_NO_CONTROL_FUNCTION 120 -# define ENGINE_R_NO_INDEX 144 -# define ENGINE_R_NO_LOAD_FUNCTION 125 -# define ENGINE_R_NO_REFERENCE 130 -# define ENGINE_R_NO_SUCH_ENGINE 116 -# define ENGINE_R_UNIMPLEMENTED_CIPHER 146 -# define ENGINE_R_UNIMPLEMENTED_DIGEST 147 -# define ENGINE_R_UNIMPLEMENTED_PUBLIC_KEY_METHOD 101 -# define ENGINE_R_VERSION_INCOMPATIBILITY 145 - -# endif -#endif 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 deleted file mode 100644 index b987e31f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h +++ /dev/null @@ -1,511 +0,0 @@ -/* - * 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_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; - -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_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); -int ERR_count_to_mark(void); - -ERR_STATE *OSSL_ERR_STATE_new(void); -void OSSL_ERR_STATE_save(ERR_STATE *es); -void OSSL_ERR_STATE_save_to_mark(ERR_STATE *es); -void OSSL_ERR_STATE_restore(const ERR_STATE *es); -void OSSL_ERR_STATE_free(ERR_STATE *es); - -#ifdef __cplusplus -} -#endif - -#endif 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 deleted file mode 100644 index 1ef09de0..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h.in +++ /dev/null @@ -1,500 +0,0 @@ -/* - * 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 - */ - -{- -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); -int ERR_count_to_mark(void); - -ERR_STATE *OSSL_ERR_STATE_new(void); -void OSSL_ERR_STATE_save(ERR_STATE *es); -void OSSL_ERR_STATE_save_to_mark(ERR_STATE *es); -void OSSL_ERR_STATE_restore(const ERR_STATE *es); -void OSSL_ERR_STATE_free(ERR_STATE *es); - -#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 deleted file mode 100644 index 4055bebb..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ess.h +++ /dev/null @@ -1,128 +0,0 @@ -/* - * 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 deleted file mode 100644 index d1a685b9..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ess.h.in +++ /dev/null @@ -1,81 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 165ce7c4..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/esserr.h +++ /dev/null @@ -1,32 +0,0 @@ -/* - * 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 deleted file mode 100644 index ea7620d6..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evp.h +++ /dev/null @@ -1,2181 +0,0 @@ -/* - * 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_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 - -# define EVP_MAX_MD_SIZE 64/* longest known is SHA512 */ -# define EVP_MAX_KEY_LENGTH 64 -# define EVP_MAX_IV_LENGTH 16 -# define EVP_MAX_BLOCK_LENGTH 32 -# define EVP_MAX_AEAD_TAG_LENGTH 16 - -# define PKCS5_SALT_LEN 8 -/* Default PKCS#5 iteration count */ -# define PKCS5_DEFAULT_ITER 2048 - -# include - -# 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 -# define EVP_PKEY_RSA2 NID_rsa -# define EVP_PKEY_RSA_PSS NID_rsassaPss -# define EVP_PKEY_DSA NID_dsa -# define EVP_PKEY_DSA1 NID_dsa_2 -# define EVP_PKEY_DSA2 NID_dsaWithSHA -# define EVP_PKEY_DSA3 NID_dsaWithSHA1 -# define EVP_PKEY_DSA4 NID_dsaWithSHA1_2 -# define EVP_PKEY_DH NID_dhKeyAgreement -# define EVP_PKEY_DHX NID_dhpublicnumber -# define EVP_PKEY_EC NID_X9_62_id_ecPublicKey -# define EVP_PKEY_SM2 NID_sm2 -# define EVP_PKEY_HMAC NID_hmac -# define EVP_PKEY_CMAC NID_cmac -# define EVP_PKEY_SCRYPT NID_id_scrypt -# define EVP_PKEY_TLS1_PRF NID_tls1_prf -# define EVP_PKEY_HKDF NID_hkdf -# define EVP_PKEY_POLY1305 NID_poly1305 -# define EVP_PKEY_SIPHASH NID_siphash -# define EVP_PKEY_X25519 NID_X25519 -# 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_PRIVATE_KEY \ - ( EVP_PKEY_KEY_PARAMETERS | OSSL_KEYMGMT_SELECT_PRIVATE_KEY ) -# 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 -# 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)); -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); -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 - -/* digest is extensible-output function, XOF */ -# define EVP_MD_FLAG_XOF 0x0002 - -/* DigestAlgorithmIdentifier flags... */ - -# define EVP_MD_FLAG_DIGALGID_MASK 0x0018 - -/* NULL or absent parameter accepted. Use NULL */ - -# define EVP_MD_FLAG_DIGALGID_NULL 0x0000 - -/* NULL or absent parameter accepted. Use NULL for PKCS#1 otherwise absent */ - -# define EVP_MD_FLAG_DIGALGID_ABSENT 0x0008 - -/* Custom handling via ctrl */ - -# define EVP_MD_FLAG_DIGALGID_CUSTOM 0x0018 - -/* Note if suitable for use in FIPS mode */ -# define EVP_MD_FLAG_FIPS 0x0400 - -/* Digest ctrls */ - -# 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 */ - -# define EVP_MD_CTRL_ALG_CTRL 0x1000 - -# endif /* !EVP_MD */ - -/* values for EVP_MD_CTX flags */ - -# define EVP_MD_CTX_FLAG_ONESHOT 0x0001/* digest update will be - * called once only */ -# define EVP_MD_CTX_FLAG_CLEANED 0x0002/* context has already been - * cleaned */ -# define EVP_MD_CTX_FLAG_REUSE 0x0004/* Don't free up ctx->md_data - * in EVP_MD_CTX_reset */ -/* - * FIPS and pad options are ignored in 1.0.0, definitions are here so we - * don't accidentally reuse the values for other purposes. - */ - -/* 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 - * parameters are handled through EVP_DigestSign*() and EVP_DigestVerify*() - * instead. - */ -# define EVP_MD_CTX_FLAG_PAD_MASK 0xF0/* RSA mode to use */ -# define EVP_MD_CTX_FLAG_PAD_PKCS1 0x00/* PKCS#1 v1.5 mode */ -# define EVP_MD_CTX_FLAG_PAD_X931 0x10/* X9.31 mode */ -# define EVP_MD_CTX_FLAG_PAD_PSS 0x20/* PSS mode */ - -# define EVP_MD_CTX_FLAG_NO_INIT 0x0100/* Don't initialize md_data */ -/* - * Some functions such as EVP_DigestSign only finalise copies of internal - * contexts so additional data can be included after the finalisation call. - * This is inefficient if this functionality is not required: it is disabled - * if the following flag is set. - */ -# define EVP_MD_CTX_FLAG_FINALISE 0x0200 -/* NOTE: 0x0400 and 0x0800 are 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)); -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 */ - -/* Modes for ciphers */ - -# define EVP_CIPH_STREAM_CIPHER 0x0 -# define EVP_CIPH_ECB_MODE 0x1 -# define EVP_CIPH_CBC_MODE 0x2 -# define EVP_CIPH_CFB_MODE 0x3 -# define EVP_CIPH_OFB_MODE 0x4 -# define EVP_CIPH_CTR_MODE 0x5 -# define EVP_CIPH_GCM_MODE 0x6 -# define EVP_CIPH_CCM_MODE 0x7 -# 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_GCM_SIV_MODE 0x10005 -# define EVP_CIPH_MODE 0xF0007 -/* Set if variable length cipher */ -# define EVP_CIPH_VARIABLE_LENGTH 0x8 -/* Set if the iv handling should be done by the cipher itself */ -# define EVP_CIPH_CUSTOM_IV 0x10 -/* Set if the cipher's init() function should be called if key is NULL */ -# define EVP_CIPH_ALWAYS_CALL_INIT 0x20 -/* Call ctrl() to init cipher parameters */ -# define EVP_CIPH_CTRL_INIT 0x40 -/* Don't use standard key length function */ -# define EVP_CIPH_CUSTOM_KEY_LENGTH 0x80 -/* Don't use standard block padding */ -# define EVP_CIPH_NO_PADDING 0x100 -/* cipher handles random key generation */ -# define EVP_CIPH_RAND_KEY 0x200 -/* cipher has its own additional copying logic */ -# define EVP_CIPH_CUSTOM_COPY 0x400 -/* Don't use standard iv length function */ -# define EVP_CIPH_CUSTOM_IV_LENGTH 0x800 -/* 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 -/* 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 - * older applications it could overflow buffers. - */ - -# define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1 - -/* ctrl() values */ - -# define EVP_CTRL_INIT 0x0 -# define EVP_CTRL_SET_KEY_LENGTH 0x1 -# define EVP_CTRL_GET_RC2_KEY_BITS 0x2 -# define EVP_CTRL_SET_RC2_KEY_BITS 0x3 -# define EVP_CTRL_GET_RC5_ROUNDS 0x4 -# define EVP_CTRL_SET_RC5_ROUNDS 0x5 -# define EVP_CTRL_RAND_KEY 0x6 -# define EVP_CTRL_PBE_PRF_NID 0x7 -# define EVP_CTRL_COPY 0x8 -# define EVP_CTRL_AEAD_SET_IVLEN 0x9 -# define EVP_CTRL_AEAD_GET_TAG 0x10 -# define EVP_CTRL_AEAD_SET_TAG 0x11 -# define EVP_CTRL_AEAD_SET_IV_FIXED 0x12 -# define EVP_CTRL_GCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN -# define EVP_CTRL_GCM_GET_TAG EVP_CTRL_AEAD_GET_TAG -# define EVP_CTRL_GCM_SET_TAG EVP_CTRL_AEAD_SET_TAG -# define EVP_CTRL_GCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED -# define EVP_CTRL_GCM_IV_GEN 0x13 -# define EVP_CTRL_CCM_SET_IVLEN EVP_CTRL_AEAD_SET_IVLEN -# define EVP_CTRL_CCM_GET_TAG EVP_CTRL_AEAD_GET_TAG -# define EVP_CTRL_CCM_SET_TAG EVP_CTRL_AEAD_SET_TAG -# define EVP_CTRL_CCM_SET_IV_FIXED EVP_CTRL_AEAD_SET_IV_FIXED -# define EVP_CTRL_CCM_SET_L 0x14 -# define EVP_CTRL_CCM_SET_MSGLEN 0x15 -/* - * AEAD cipher deduces payload length and returns number of bytes required to - * store MAC and eventual padding. Subsequent call to EVP_Cipher even - * appends/verifies MAC. - */ -# define EVP_CTRL_AEAD_TLS1_AAD 0x16 -/* Used by composite AEAD ciphers, no-op in GCM, CCM... */ -# define EVP_CTRL_AEAD_SET_MAC_KEY 0x17 -/* Set the GCM invocation field, decrypt only */ -# define EVP_CTRL_GCM_SET_IV_INV 0x18 - -# define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19 -# define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a -# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b -# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c - -# define EVP_CTRL_SSL3_MASTER_SECRET 0x1d - -/* EVP_CTRL_SET_SBOX takes the char * specifying S-boxes */ -# define EVP_CTRL_SET_SBOX 0x1e -/* - * EVP_CTRL_SBOX_USED takes a 'size_t' and 'char *', pointing at a - * pre-allocated buffer with specified size - */ -# define EVP_CTRL_SBOX_USED 0x1f -/* EVP_CTRL_KEY_MESH takes 'size_t' number of bytes to mesh the key after, - * 0 switches meshing off - */ -# define EVP_CTRL_KEY_MESH 0x20 -/* EVP_CTRL_BLOCK_PADDING_MODE takes the padding mode */ -# define EVP_CTRL_BLOCK_PADDING_MODE 0x21 - -/* Set the output buffers to use for a pipelined operation */ -# define EVP_CTRL_SET_PIPELINE_OUTPUT_BUFS 0x22 -/* Set the input buffers to use for a pipelined operation */ -# 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 -#define EVP_PADDING_ISO7816_4 2 -#define EVP_PADDING_ANSI923 3 -#define EVP_PADDING_ISO10126 4 -#define EVP_PADDING_ZERO 5 - -/* RFC 5246 defines additional data to be 13 bytes in length */ -# define EVP_AEAD_TLS1_AAD_LEN 13 - -typedef struct { - unsigned char *out; - const unsigned char *inp; - size_t len; - unsigned int interleave; -} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM; - -/* GCM TLS constants */ -/* Length of fixed part of IV derived from PRF */ -# define EVP_GCM_TLS_FIXED_IV_LEN 4 -/* Length of explicit part of IV part of TLS records */ -# define EVP_GCM_TLS_EXPLICIT_IV_LEN 8 -/* Length of tag for TLS */ -# define EVP_GCM_TLS_TAG_LEN 16 - -/* CCM TLS constants */ -/* Length of fixed part of IV derived from PRF */ -# define EVP_CCM_TLS_FIXED_IV_LEN 4 -/* Length of explicit part of IV part of TLS records */ -# define EVP_CCM_TLS_EXPLICIT_IV_LEN 8 -/* Total length of CCM IV length for TLS */ -# define EVP_CCM_TLS_IV_LEN 12 -/* Length of tag for TLS */ -# define EVP_CCM_TLS_TAG_LEN 16 -/* Length of CCM8 tag for TLS */ -# define EVP_CCM8_TLS_TAG_LEN 8 - -/* Length of tag for TLS */ -# define EVP_CHACHAPOLY_TLS_TAG_LEN 16 - -typedef struct evp_cipher_info_st { - const EVP_CIPHER *cipher; - unsigned char iv[EVP_MAX_IV_LENGTH]; -} EVP_CIPHER_INFO; - - -/* Password based encryption function */ -typedef int (EVP_PBE_KEYGEN) (EVP_CIPHER_CTX *ctx, const char *pass, - int passlen, ASN1_TYPE *param, - const EVP_CIPHER *cipher, const EVP_MD *md, - int en_de); - -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,\ - (rsa)) -# endif - -# ifndef OPENSSL_NO_DSA -# define EVP_PKEY_assign_DSA(pkey,dsa) EVP_PKEY_assign((pkey),EVP_PKEY_DSA,\ - (dsa)) -# endif - -# 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_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,(shkey)) -# endif - -# ifndef OPENSSL_NO_POLY1305 -# define EVP_PKEY_assign_POLY1305(pkey,polykey) EVP_PKEY_assign((pkey),\ - EVP_PKEY_POLY1305,(polykey)) -# endif - -/* Add some extra combinations */ -# define EVP_get_digestbynid(a) EVP_get_digestbyname(OBJ_nid2sn(a)) -# define EVP_get_digestbyobj(a) EVP_get_digestbynid(OBJ_obj2nid(a)) -# 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_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)); -# 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_get0_md_data(const EVP_MD_CTX *ctx); -# define EVP_MD_CTX_md_data EVP_MD_CTX_get0_md_data - -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); -# 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); -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); -# 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_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_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) - -# define EVP_SignInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) -# define EVP_SignInit(a,b) EVP_DigestInit(a,b) -# define EVP_SignUpdate(a,b,c) EVP_DigestUpdate(a,b,c) -# define EVP_VerifyInit_ex(a,b,c) EVP_DigestInit_ex(a,b,c) -# define EVP_VerifyInit(a,b) EVP_DigestInit(a,b) -# 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) - -# 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,(void *)(md)) -# endif -# 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,(c_pp)) - -__owur int EVP_Cipher(EVP_CIPHER_CTX *c, - unsigned char *out, - const unsigned char *in, unsigned int inl); - -# define EVP_add_cipher_alias(n,alias) \ - OBJ_NAME_add((alias),OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS,(n)) -# define EVP_add_digest_alias(n,alias) \ - OBJ_NAME_add((alias),OBJ_NAME_TYPE_MD_METH|OBJ_NAME_ALIAS,(n)) -# define EVP_delete_cipher_alias(alias) \ - OBJ_NAME_remove(alias,OBJ_NAME_TYPE_CIPHER_METH|OBJ_NAME_ALIAS); -# 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); -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, - size_t cnt); -__owur int EVP_DigestFinal_ex(EVP_MD_CTX *ctx, unsigned char *md, - unsigned int *s); -__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); -__owur int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, - unsigned int *s); -__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); -void EVP_set_pw_prompt(const char *prompt); -char *EVP_get_pw_prompt(void); - -__owur int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md, - const unsigned char *salt, - const unsigned char *data, int datal, int count, - unsigned char *key, unsigned char *iv); - -void EVP_CIPHER_CTX_set_flags(EVP_CIPHER_CTX *ctx, int flags); -void EVP_CIPHER_CTX_clear_flags(EVP_CIPHER_CTX *ctx, int flags); -int EVP_CIPHER_CTX_test_flags(const EVP_CIPHER_CTX *ctx, int flags); - -__owur int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv); -__owur int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, - 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, - int *outl); -__owur int EVP_EncryptFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, - int *outl); - -__owur int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv); -__owur int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, - 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, - int *outl); -__owur int EVP_DecryptFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, - int *outl); - -__owur int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, - const unsigned char *key, const unsigned char *iv, - int enc); -__owur int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, - 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, - int *outl); -__owur int EVP_CipherFinal_ex(EVP_CIPHER_CTX *ctx, unsigned char *outm, - int *outl); - -__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, - size_t tbslen); - -__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); - -__owur 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); -__owur 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); - -__owur 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); - -__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); -__owur int EVP_OpenFinal(EVP_CIPHER_CTX *ctx, unsigned char *out, int *outl); - -__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); - -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, 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, - const unsigned char *in, int inl); -void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl); -int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n); - -void EVP_DecodeInit(EVP_ENCODE_CTX *ctx); -int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl, - const unsigned char *in, int inl); -int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned - char *out, int *outl); -int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n); - -# 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 -EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void); -int EVP_CIPHER_CTX_reset(EVP_CIPHER_CTX *c); -void EVP_CIPHER_CTX_free(EVP_CIPHER_CTX *c); -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); -const BIO_METHOD *BIO_f_cipher(void); -const BIO_METHOD *BIO_f_reliable(void); -__owur int BIO_set_cipher(BIO *b, const EVP_CIPHER *c, const unsigned char *k, - const unsigned char *i, int enc); - -const EVP_MD *EVP_md_null(void); -# ifndef OPENSSL_NO_MD2 -const EVP_MD *EVP_md2(void); -# endif -# ifndef OPENSSL_NO_MD4 -const EVP_MD *EVP_md4(void); -# endif -# ifndef OPENSSL_NO_MD5 -const EVP_MD *EVP_md5(void); -const EVP_MD *EVP_md5_sha1(void); -# endif -# ifndef OPENSSL_NO_BLAKE2 -const EVP_MD *EVP_blake2b512(void); -const EVP_MD *EVP_blake2s256(void); -# endif -const EVP_MD *EVP_sha1(void); -const EVP_MD *EVP_sha224(void); -const EVP_MD *EVP_sha256(void); -const EVP_MD *EVP_sha384(void); -const EVP_MD *EVP_sha512(void); -const EVP_MD *EVP_sha512_224(void); -const EVP_MD *EVP_sha512_256(void); -const EVP_MD *EVP_sha3_224(void); -const EVP_MD *EVP_sha3_256(void); -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 -# ifndef OPENSSL_NO_RMD160 -const EVP_MD *EVP_ripemd160(void); -# endif -# ifndef OPENSSL_NO_WHIRLPOOL -const EVP_MD *EVP_whirlpool(void); -# endif -# ifndef OPENSSL_NO_SM3 -const EVP_MD *EVP_sm3(void); -# endif -const EVP_CIPHER *EVP_enc_null(void); /* does nothing :-) */ -# ifndef OPENSSL_NO_DES -const EVP_CIPHER *EVP_des_ecb(void); -const EVP_CIPHER *EVP_des_ede(void); -const EVP_CIPHER *EVP_des_ede3(void); -const EVP_CIPHER *EVP_des_ede_ecb(void); -const EVP_CIPHER *EVP_des_ede3_ecb(void); -const EVP_CIPHER *EVP_des_cfb64(void); -# define EVP_des_cfb EVP_des_cfb64 -const EVP_CIPHER *EVP_des_cfb1(void); -const EVP_CIPHER *EVP_des_cfb8(void); -const EVP_CIPHER *EVP_des_ede_cfb64(void); -# define EVP_des_ede_cfb EVP_des_ede_cfb64 -const EVP_CIPHER *EVP_des_ede3_cfb64(void); -# define EVP_des_ede3_cfb EVP_des_ede3_cfb64 -const EVP_CIPHER *EVP_des_ede3_cfb1(void); -const EVP_CIPHER *EVP_des_ede3_cfb8(void); -const EVP_CIPHER *EVP_des_ofb(void); -const EVP_CIPHER *EVP_des_ede_ofb(void); -const EVP_CIPHER *EVP_des_ede3_ofb(void); -const EVP_CIPHER *EVP_des_cbc(void); -const EVP_CIPHER *EVP_des_ede_cbc(void); -const EVP_CIPHER *EVP_des_ede3_cbc(void); -const EVP_CIPHER *EVP_desx_cbc(void); -const EVP_CIPHER *EVP_des_ede3_wrap(void); -/* - * This should now be supported through the dev_crypto ENGINE. But also, why - * are rc4 and md5 declarations made here inside a "NO_DES" precompiler - * branch? - */ -# endif -# ifndef OPENSSL_NO_RC4 -const EVP_CIPHER *EVP_rc4(void); -const EVP_CIPHER *EVP_rc4_40(void); -# ifndef OPENSSL_NO_MD5 -const EVP_CIPHER *EVP_rc4_hmac_md5(void); -# endif -# endif -# ifndef OPENSSL_NO_IDEA -const EVP_CIPHER *EVP_idea_ecb(void); -const EVP_CIPHER *EVP_idea_cfb64(void); -# define EVP_idea_cfb EVP_idea_cfb64 -const EVP_CIPHER *EVP_idea_ofb(void); -const EVP_CIPHER *EVP_idea_cbc(void); -# endif -# ifndef OPENSSL_NO_RC2 -const EVP_CIPHER *EVP_rc2_ecb(void); -const EVP_CIPHER *EVP_rc2_cbc(void); -const EVP_CIPHER *EVP_rc2_40_cbc(void); -const EVP_CIPHER *EVP_rc2_64_cbc(void); -const EVP_CIPHER *EVP_rc2_cfb64(void); -# define EVP_rc2_cfb EVP_rc2_cfb64 -const EVP_CIPHER *EVP_rc2_ofb(void); -# endif -# ifndef OPENSSL_NO_BF -const EVP_CIPHER *EVP_bf_ecb(void); -const EVP_CIPHER *EVP_bf_cbc(void); -const EVP_CIPHER *EVP_bf_cfb64(void); -# define EVP_bf_cfb EVP_bf_cfb64 -const EVP_CIPHER *EVP_bf_ofb(void); -# endif -# ifndef OPENSSL_NO_CAST -const EVP_CIPHER *EVP_cast5_ecb(void); -const EVP_CIPHER *EVP_cast5_cbc(void); -const EVP_CIPHER *EVP_cast5_cfb64(void); -# define EVP_cast5_cfb EVP_cast5_cfb64 -const EVP_CIPHER *EVP_cast5_ofb(void); -# endif -# ifndef OPENSSL_NO_RC5 -const EVP_CIPHER *EVP_rc5_32_12_16_cbc(void); -const EVP_CIPHER *EVP_rc5_32_12_16_ecb(void); -const EVP_CIPHER *EVP_rc5_32_12_16_cfb64(void); -# define EVP_rc5_32_12_16_cfb EVP_rc5_32_12_16_cfb64 -const EVP_CIPHER *EVP_rc5_32_12_16_ofb(void); -# endif -const EVP_CIPHER *EVP_aes_128_ecb(void); -const EVP_CIPHER *EVP_aes_128_cbc(void); -const EVP_CIPHER *EVP_aes_128_cfb1(void); -const EVP_CIPHER *EVP_aes_128_cfb8(void); -const EVP_CIPHER *EVP_aes_128_cfb128(void); -# define EVP_aes_128_cfb EVP_aes_128_cfb128 -const EVP_CIPHER *EVP_aes_128_ofb(void); -const EVP_CIPHER *EVP_aes_128_ctr(void); -const EVP_CIPHER *EVP_aes_128_ccm(void); -const EVP_CIPHER *EVP_aes_128_gcm(void); -const EVP_CIPHER *EVP_aes_128_xts(void); -const EVP_CIPHER *EVP_aes_128_wrap(void); -const EVP_CIPHER *EVP_aes_128_wrap_pad(void); -# ifndef OPENSSL_NO_OCB -const EVP_CIPHER *EVP_aes_128_ocb(void); -# endif -const EVP_CIPHER *EVP_aes_192_ecb(void); -const EVP_CIPHER *EVP_aes_192_cbc(void); -const EVP_CIPHER *EVP_aes_192_cfb1(void); -const EVP_CIPHER *EVP_aes_192_cfb8(void); -const EVP_CIPHER *EVP_aes_192_cfb128(void); -# define EVP_aes_192_cfb EVP_aes_192_cfb128 -const EVP_CIPHER *EVP_aes_192_ofb(void); -const EVP_CIPHER *EVP_aes_192_ctr(void); -const EVP_CIPHER *EVP_aes_192_ccm(void); -const EVP_CIPHER *EVP_aes_192_gcm(void); -const EVP_CIPHER *EVP_aes_192_wrap(void); -const EVP_CIPHER *EVP_aes_192_wrap_pad(void); -# ifndef OPENSSL_NO_OCB -const EVP_CIPHER *EVP_aes_192_ocb(void); -# endif -const EVP_CIPHER *EVP_aes_256_ecb(void); -const EVP_CIPHER *EVP_aes_256_cbc(void); -const EVP_CIPHER *EVP_aes_256_cfb1(void); -const EVP_CIPHER *EVP_aes_256_cfb8(void); -const EVP_CIPHER *EVP_aes_256_cfb128(void); -# define EVP_aes_256_cfb EVP_aes_256_cfb128 -const EVP_CIPHER *EVP_aes_256_ofb(void); -const EVP_CIPHER *EVP_aes_256_ctr(void); -const EVP_CIPHER *EVP_aes_256_ccm(void); -const EVP_CIPHER *EVP_aes_256_gcm(void); -const EVP_CIPHER *EVP_aes_256_xts(void); -const EVP_CIPHER *EVP_aes_256_wrap(void); -const EVP_CIPHER *EVP_aes_256_wrap_pad(void); -# ifndef OPENSSL_NO_OCB -const EVP_CIPHER *EVP_aes_256_ocb(void); -# endif -const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void); -const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void); -const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void); -const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void); -# ifndef OPENSSL_NO_ARIA -const EVP_CIPHER *EVP_aria_128_ecb(void); -const EVP_CIPHER *EVP_aria_128_cbc(void); -const EVP_CIPHER *EVP_aria_128_cfb1(void); -const EVP_CIPHER *EVP_aria_128_cfb8(void); -const EVP_CIPHER *EVP_aria_128_cfb128(void); -# define EVP_aria_128_cfb EVP_aria_128_cfb128 -const EVP_CIPHER *EVP_aria_128_ctr(void); -const EVP_CIPHER *EVP_aria_128_ofb(void); -const EVP_CIPHER *EVP_aria_128_gcm(void); -const EVP_CIPHER *EVP_aria_128_ccm(void); -const EVP_CIPHER *EVP_aria_192_ecb(void); -const EVP_CIPHER *EVP_aria_192_cbc(void); -const EVP_CIPHER *EVP_aria_192_cfb1(void); -const EVP_CIPHER *EVP_aria_192_cfb8(void); -const EVP_CIPHER *EVP_aria_192_cfb128(void); -# define EVP_aria_192_cfb EVP_aria_192_cfb128 -const EVP_CIPHER *EVP_aria_192_ctr(void); -const EVP_CIPHER *EVP_aria_192_ofb(void); -const EVP_CIPHER *EVP_aria_192_gcm(void); -const EVP_CIPHER *EVP_aria_192_ccm(void); -const EVP_CIPHER *EVP_aria_256_ecb(void); -const EVP_CIPHER *EVP_aria_256_cbc(void); -const EVP_CIPHER *EVP_aria_256_cfb1(void); -const EVP_CIPHER *EVP_aria_256_cfb8(void); -const EVP_CIPHER *EVP_aria_256_cfb128(void); -# define EVP_aria_256_cfb EVP_aria_256_cfb128 -const EVP_CIPHER *EVP_aria_256_ctr(void); -const EVP_CIPHER *EVP_aria_256_ofb(void); -const EVP_CIPHER *EVP_aria_256_gcm(void); -const EVP_CIPHER *EVP_aria_256_ccm(void); -# endif -# ifndef OPENSSL_NO_CAMELLIA -const EVP_CIPHER *EVP_camellia_128_ecb(void); -const EVP_CIPHER *EVP_camellia_128_cbc(void); -const EVP_CIPHER *EVP_camellia_128_cfb1(void); -const EVP_CIPHER *EVP_camellia_128_cfb8(void); -const EVP_CIPHER *EVP_camellia_128_cfb128(void); -# define EVP_camellia_128_cfb EVP_camellia_128_cfb128 -const EVP_CIPHER *EVP_camellia_128_ofb(void); -const EVP_CIPHER *EVP_camellia_128_ctr(void); -const EVP_CIPHER *EVP_camellia_192_ecb(void); -const EVP_CIPHER *EVP_camellia_192_cbc(void); -const EVP_CIPHER *EVP_camellia_192_cfb1(void); -const EVP_CIPHER *EVP_camellia_192_cfb8(void); -const EVP_CIPHER *EVP_camellia_192_cfb128(void); -# define EVP_camellia_192_cfb EVP_camellia_192_cfb128 -const EVP_CIPHER *EVP_camellia_192_ofb(void); -const EVP_CIPHER *EVP_camellia_192_ctr(void); -const EVP_CIPHER *EVP_camellia_256_ecb(void); -const EVP_CIPHER *EVP_camellia_256_cbc(void); -const EVP_CIPHER *EVP_camellia_256_cfb1(void); -const EVP_CIPHER *EVP_camellia_256_cfb8(void); -const EVP_CIPHER *EVP_camellia_256_cfb128(void); -# define EVP_camellia_256_cfb EVP_camellia_256_cfb128 -const EVP_CIPHER *EVP_camellia_256_ofb(void); -const EVP_CIPHER *EVP_camellia_256_ctr(void); -# endif -# ifndef OPENSSL_NO_CHACHA -const EVP_CIPHER *EVP_chacha20(void); -# ifndef OPENSSL_NO_POLY1305 -const EVP_CIPHER *EVP_chacha20_poly1305(void); -# endif -# endif - -# ifndef OPENSSL_NO_SEED -const EVP_CIPHER *EVP_seed_ecb(void); -const EVP_CIPHER *EVP_seed_cbc(void); -const EVP_CIPHER *EVP_seed_cfb128(void); -# define EVP_seed_cfb EVP_seed_cfb128 -const EVP_CIPHER *EVP_seed_ofb(void); -# endif - -# ifndef OPENSSL_NO_SM4 -const EVP_CIPHER *EVP_sm4_ecb(void); -const EVP_CIPHER *EVP_sm4_cbc(void); -const EVP_CIPHER *EVP_sm4_cfb128(void); -# define EVP_sm4_cfb EVP_sm4_cfb128 -const EVP_CIPHER *EVP_sm4_ofb(void); -const EVP_CIPHER *EVP_sm4_ctr(void); -# endif - -# 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 \ - | OPENSSL_INIT_LOAD_CONFIG, NULL) -# define OPENSSL_add_all_algorithms_noconf() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS \ - | OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) - -# ifdef OPENSSL_LOAD_CONF -# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_conf() -# else -# define OpenSSL_add_all_algorithms() OPENSSL_add_all_algorithms_noconf() -# endif - -# define OpenSSL_add_all_ciphers() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_CIPHERS, NULL) -# define OpenSSL_add_all_digests() \ - OPENSSL_init_crypto(OPENSSL_INIT_ADD_ALL_DIGESTS, NULL) - -# define EVP_cleanup() while(0) continue -# endif - -int EVP_add_cipher(const EVP_CIPHER *cipher); -int EVP_add_digest(const EVP_MD *digest); - -const EVP_CIPHER *EVP_get_cipherbyname(const char *name); -const EVP_MD *EVP_get_digestbyname(const char *name); - -void EVP_CIPHER_do_all(void (*fn) (const EVP_CIPHER *ciph, - const char *from, const char *to, void *x), - void *arg); -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), - void *arg); -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); - -/* 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_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_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 -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 -OSSL_DEPRECATEDIN_3_0 -const unsigned char *EVP_PKEY_get0_poly1305(const EVP_PKEY *pkey, size_t *len); -# endif -# ifndef OPENSSL_NO_SIPHASH -OSSL_DEPRECATEDIN_3_0 -const unsigned char *EVP_PKEY_get0_siphash(const EVP_PKEY *pkey, size_t *len); -# endif - -struct rsa_st; -OSSL_DEPRECATEDIN_3_0 -int EVP_PKEY_set1_RSA(EVP_PKEY *pkey, struct rsa_st *key); -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); - -# ifndef OPENSSL_NO_DSA -struct dsa_st; -OSSL_DEPRECATEDIN_3_0 -int EVP_PKEY_set1_DSA(EVP_PKEY *pkey, struct dsa_st *key); -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 -struct dh_st; -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); -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 /* 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(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(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_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); -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); - -# 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_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); -int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type); - -/* These are used by EVP_CIPHER methods */ -int EVP_CIPHER_set_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); -int EVP_CIPHER_get_asn1_iv(EVP_CIPHER_CTX *c, ASN1_TYPE *type); - -/* PKCS5 password based encryption */ -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); -int PKCS5_PBKDF2_HMAC(const char *pass, int passlen, - const unsigned char *salt, int saltlen, int iter, - const EVP_MD *digest, int keylen, unsigned char *out); -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); - -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 */ -# define EVP_PBE_TYPE_OUTER 0x0 -/* Is an PRF type OID */ -# define EVP_PBE_TYPE_PRF 0x1 -/* Is a PKCS#5 v2.0 KDF */ -# define EVP_PBE_TYPE_KDF 0x2 - -int EVP_PBE_alg_add_type(int pbe_type, int pbe_nid, int cipher_nid, - int md_nid, EVP_PBE_KEYGEN *keygen); -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); - -# define ASN1_PKEY_ALIAS 0x1 -# define ASN1_PKEY_DYNAMIC 0x2 -# define ASN1_PKEY_SIGPARAM_NULL 0x4 - -# define ASN1_PKEY_CTRL_PKCS7_SIGN 0x1 -# define ASN1_PKEY_CTRL_PKCS7_ENCRYPT 0x2 -# define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3 -# define ASN1_PKEY_CTRL_CMS_SIGN 0x5 -# define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7 -# define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8 - -# 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); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pe, int type); -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pe, - const char *str, int len); -int EVP_PKEY_asn1_add0(const EVP_PKEY_ASN1_METHOD *ameth); -int EVP_PKEY_asn1_add_alias(int to, int from); -int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *pkey_base_id, - int *ppkey_flags, const char **pinfo, - const char **ppem_str, - const EVP_PKEY_ASN1_METHOD *ameth); - -const EVP_PKEY_ASN1_METHOD *EVP_PKEY_get0_asn1(const EVP_PKEY *pkey); -EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_new(int id, int flags, - const char *pem_str, - const char *info); -void EVP_PKEY_asn1_copy(EVP_PKEY_ASN1_METHOD *dst, - const EVP_PKEY_ASN1_METHOD *src); -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, - 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, ASN1_PCTX *pctx), - int (*pkey_size) (const EVP_PKEY *pk), - int (*pkey_bits) (const EVP_PKEY *pk)); -void EVP_PKEY_asn1_set_private(EVP_PKEY_ASN1_METHOD *ameth, - int (*priv_decode) (EVP_PKEY *pk, - const PKCS8_PRIV_KEY_INFO - *p8inf), - int (*priv_encode) (PKCS8_PRIV_KEY_INFO *p8, - const EVP_PKEY *pk), - int (*priv_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, - ASN1_PCTX *pctx)); -void EVP_PKEY_asn1_set_param(EVP_PKEY_ASN1_METHOD *ameth, - int (*param_decode) (EVP_PKEY *pkey, - const unsigned char **pder, - int derlen), - int (*param_encode) (const EVP_PKEY *pkey, - unsigned char **pder), - int (*param_missing) (const EVP_PKEY *pk), - int (*param_copy) (EVP_PKEY *to, - const EVP_PKEY *from), - int (*param_cmp) (const EVP_PKEY *a, - const EVP_PKEY *b), - int (*param_print) (BIO *out, - const EVP_PKEY *pkey, - int indent, - ASN1_PCTX *pctx)); - -void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth, - void (*pkey_free) (EVP_PKEY *pkey)); -void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_ctrl) (EVP_PKEY *pkey, int op, - long arg1, void *arg2)); -void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth, - 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)); - -void EVP_PKEY_asn1_set_siginf(EVP_PKEY_ASN1_METHOD *ameth, - int (*siginf_set) (X509_SIG_INFO *siginf, - const X509_ALGOR *alg, - const ASN1_STRING *sig)); - -void EVP_PKEY_asn1_set_check(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_check) (const EVP_PKEY *pk)); - -void EVP_PKEY_asn1_set_public_check(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_pub_check) (const EVP_PKEY *pk)); - -void EVP_PKEY_asn1_set_param_check(EVP_PKEY_ASN1_METHOD *ameth, - int (*pkey_param_check) (const EVP_PKEY *pk)); - -void EVP_PKEY_asn1_set_set_priv_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*set_priv_key) (EVP_PKEY *pk, - const unsigned char - *priv, - size_t len)); -void EVP_PKEY_asn1_set_set_pub_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*set_pub_key) (EVP_PKEY *pk, - const unsigned char *pub, - size_t len)); -void EVP_PKEY_asn1_set_get_priv_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*get_priv_key) (const EVP_PKEY *pk, - unsigned char *priv, - size_t *len)); -void EVP_PKEY_asn1_set_get_pub_key(EVP_PKEY_ASN1_METHOD *ameth, - int (*get_pub_key) (const EVP_PKEY *pk, - unsigned char *pub, - size_t *len)); - -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_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 \ - | EVP_PKEY_OP_SIGNCTX | EVP_PKEY_OP_VERIFYCTX) - -# define EVP_PKEY_OP_TYPE_CRYPT \ - (EVP_PKEY_OP_ENCRYPT | EVP_PKEY_OP_DECRYPT) - -# define EVP_PKEY_OP_TYPE_NOGEN \ - (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) - - -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_SET_MAC_KEY 6 -# define EVP_PKEY_CTRL_DIGESTINIT 7 -/* Used by GOST key encryption in TLS */ -# define EVP_PKEY_CTRL_SET_IV 8 -# 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 - -# define EVP_PKEY_FLAG_AUTOARGLEN 2 -/* - * 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 - -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_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, - const char *value); -int EVP_PKEY_CTX_ctrl_uint64(EVP_PKEY_CTX *ctx, int keytype, int optype, - int cmd, uint64_t value); - -int EVP_PKEY_CTX_str2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *str); -int EVP_PKEY_CTX_hex2ctrl(EVP_PKEY_CTX *ctx, int cmd, const char *hex); - -int EVP_PKEY_CTX_md(EVP_PKEY_CTX *ctx, int optype, int cmd, const char *md); - -int EVP_PKEY_CTX_get_operation(EVP_PKEY_CTX *ctx); -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); -int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, unsigned char *priv, - size_t *len); -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(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); - -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_auth_encapsulate_init(EVP_PKEY_CTX *ctx, EVP_PKEY *authpriv, - 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_auth_decapsulate_init(EVP_PKEY_CTX *ctx, EVP_PKEY *authpub, - 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); -# 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 (*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_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_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 -} -# endif -#endif 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 deleted file mode 100644 index 11f3faa4..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evperr.h +++ /dev/null @@ -1,137 +0,0 @@ -/* - * 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_EVPERR_H -# define OPENSSL_EVPERR_H -# pragma once - -# include -# include -# include - - - -/* - * 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_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_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_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_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_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_BITS 166 -# define EVP_R_UNKNOWN_CIPHER 160 -# define EVP_R_UNKNOWN_DIGEST 161 -# define EVP_R_UNKNOWN_KEY_TYPE 207 -# define EVP_R_UNKNOWN_MAX_SIZE 167 -# define EVP_R_UNKNOWN_OPTION 169 -# define EVP_R_UNKNOWN_PBE_ALGORITHM 121 -# define EVP_R_UNKNOWN_SECURITY_BITS 168 -# define EVP_R_UNSUPPORTED_ALGORITHM 156 -# define EVP_R_UNSUPPORTED_CIPHER 107 -# 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_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 deleted file mode 100644 index 5c77f6d6..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fips_names.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * 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 deleted file mode 100644 index 42ba014b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fipskey.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * 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 deleted file mode 100644 index 56b947e8..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/fipskey.h.in +++ /dev/null @@ -1,35 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index f9e1bff3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/hmac.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * 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_HMAC_H -# define OPENSSL_HMAC_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_HMAC_H -# endif - -# include - -# include - -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HMAC_MAX_MD_CBLOCK 200 /* Deprecated */ -# endif - -# ifdef __cplusplus -extern "C" { -# endif - -# 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 - -unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, - const unsigned char *data, size_t data_len, - unsigned char *md, unsigned int *md_len); - -# ifdef __cplusplus -} -# endif - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/hpke.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/hpke.h deleted file mode 100644 index af637ac6..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/hpke.h +++ /dev/null @@ -1,169 +0,0 @@ -/* - * Copyright 2022-2023 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 - */ - -/* APIs and data structures for HPKE (RFC9180) */ -#ifndef OSSL_HPKE_H -# define OSSL_HPKE_H -# pragma once - -# include - -/* HPKE modes */ -# define OSSL_HPKE_MODE_BASE 0 /* Base mode */ -# define OSSL_HPKE_MODE_PSK 1 /* Pre-shared key mode */ -# define OSSL_HPKE_MODE_AUTH 2 /* Authenticated mode */ -# define OSSL_HPKE_MODE_PSKAUTH 3 /* PSK+authenticated mode */ - -/* - * Max for ikm, psk, pskid, info and exporter contexts. - * RFC9180, section 7.2.1 RECOMMENDS 64 octets but we have test vectors from - * Appendix A.6.1 with a 66 octet IKM so we'll allow that. - */ -# define OSSL_HPKE_MAX_PARMLEN 66 -# define OSSL_HPKE_MIN_PSKLEN 32 -# define OSSL_HPKE_MAX_INFOLEN 1024 - -/* - * The (16bit) HPKE algorithm ID IANA codepoints - * If/when new IANA codepoints are added there are tables in - * crypto/hpke/hpke_util.c that must also be updated. - */ -# define OSSL_HPKE_KEM_ID_RESERVED 0x0000 /* not used */ -# define OSSL_HPKE_KEM_ID_P256 0x0010 /* NIST P-256 */ -# define OSSL_HPKE_KEM_ID_P384 0x0011 /* NIST P-384 */ -# define OSSL_HPKE_KEM_ID_P521 0x0012 /* NIST P-521 */ -# define OSSL_HPKE_KEM_ID_X25519 0x0020 /* Curve25519 */ -# define OSSL_HPKE_KEM_ID_X448 0x0021 /* Curve448 */ - -# define OSSL_HPKE_KDF_ID_RESERVED 0x0000 /* not used */ -# define OSSL_HPKE_KDF_ID_HKDF_SHA256 0x0001 /* HKDF-SHA256 */ -# define OSSL_HPKE_KDF_ID_HKDF_SHA384 0x0002 /* HKDF-SHA384 */ -# define OSSL_HPKE_KDF_ID_HKDF_SHA512 0x0003 /* HKDF-SHA512 */ - -# define OSSL_HPKE_AEAD_ID_RESERVED 0x0000 /* not used */ -# define OSSL_HPKE_AEAD_ID_AES_GCM_128 0x0001 /* AES-GCM-128 */ -# define OSSL_HPKE_AEAD_ID_AES_GCM_256 0x0002 /* AES-GCM-256 */ -# define OSSL_HPKE_AEAD_ID_CHACHA_POLY1305 0x0003 /* Chacha20-Poly1305 */ -# define OSSL_HPKE_AEAD_ID_EXPORTONLY 0xFFFF /* export-only fake ID */ - -/* strings for suite components */ -# define OSSL_HPKE_KEMSTR_P256 "P-256" /* KEM id 0x10 */ -# define OSSL_HPKE_KEMSTR_P384 "P-384" /* KEM id 0x11 */ -# define OSSL_HPKE_KEMSTR_P521 "P-521" /* KEM id 0x12 */ -# define OSSL_HPKE_KEMSTR_X25519 "X25519" /* KEM id 0x20 */ -# define OSSL_HPKE_KEMSTR_X448 "X448" /* KEM id 0x21 */ -# define OSSL_HPKE_KDFSTR_256 "hkdf-sha256" /* KDF id 1 */ -# define OSSL_HPKE_KDFSTR_384 "hkdf-sha384" /* KDF id 2 */ -# define OSSL_HPKE_KDFSTR_512 "hkdf-sha512" /* KDF id 3 */ -# define OSSL_HPKE_AEADSTR_AES128GCM "aes-128-gcm" /* AEAD id 1 */ -# define OSSL_HPKE_AEADSTR_AES256GCM "aes-256-gcm" /* AEAD id 2 */ -# define OSSL_HPKE_AEADSTR_CP "chacha20-poly1305" /* AEAD id 3 */ -# define OSSL_HPKE_AEADSTR_EXP "exporter" /* AEAD id 0xff */ - -/* - * Roles for use in creating an OSSL_HPKE_CTX, most - * important use of this is to control nonce re-use. - */ -# define OSSL_HPKE_ROLE_SENDER 0 -# define OSSL_HPKE_ROLE_RECEIVER 1 - -# ifdef __cplusplus -extern "C" { -# endif - -typedef struct { - uint16_t kem_id; /* Key Encapsulation Method id */ - uint16_t kdf_id; /* Key Derivation Function id */ - uint16_t aead_id; /* AEAD alg id */ -} OSSL_HPKE_SUITE; - -/** - * Suite constants, use this like: - * OSSL_HPKE_SUITE myvar = OSSL_HPKE_SUITE_DEFAULT; - */ -# ifndef OPENSSL_NO_ECX -# define OSSL_HPKE_SUITE_DEFAULT \ - {\ - OSSL_HPKE_KEM_ID_X25519, \ - OSSL_HPKE_KDF_ID_HKDF_SHA256, \ - OSSL_HPKE_AEAD_ID_AES_GCM_128 \ - } -# else -# define OSSL_HPKE_SUITE_DEFAULT \ - {\ - OSSL_HPKE_KEM_ID_P256, \ - OSSL_HPKE_KDF_ID_HKDF_SHA256, \ - OSSL_HPKE_AEAD_ID_AES_GCM_128 \ - } -#endif - -typedef struct ossl_hpke_ctx_st OSSL_HPKE_CTX; - -OSSL_HPKE_CTX *OSSL_HPKE_CTX_new(int mode, OSSL_HPKE_SUITE suite, int role, - OSSL_LIB_CTX *libctx, const char *propq); -void OSSL_HPKE_CTX_free(OSSL_HPKE_CTX *ctx); - -int OSSL_HPKE_encap(OSSL_HPKE_CTX *ctx, - unsigned char *enc, size_t *enclen, - const unsigned char *pub, size_t publen, - const unsigned char *info, size_t infolen); -int OSSL_HPKE_seal(OSSL_HPKE_CTX *ctx, - unsigned char *ct, size_t *ctlen, - const unsigned char *aad, size_t aadlen, - const unsigned char *pt, size_t ptlen); - -int OSSL_HPKE_keygen(OSSL_HPKE_SUITE suite, - unsigned char *pub, size_t *publen, EVP_PKEY **priv, - const unsigned char *ikm, size_t ikmlen, - OSSL_LIB_CTX *libctx, const char *propq); -int OSSL_HPKE_decap(OSSL_HPKE_CTX *ctx, - const unsigned char *enc, size_t enclen, - EVP_PKEY *recippriv, - const unsigned char *info, size_t infolen); -int OSSL_HPKE_open(OSSL_HPKE_CTX *ctx, - unsigned char *pt, size_t *ptlen, - const unsigned char *aad, size_t aadlen, - const unsigned char *ct, size_t ctlen); - -int OSSL_HPKE_export(OSSL_HPKE_CTX *ctx, - unsigned char *secret, - size_t secretlen, - const unsigned char *label, - size_t labellen); - -int OSSL_HPKE_CTX_set1_authpriv(OSSL_HPKE_CTX *ctx, EVP_PKEY *priv); -int OSSL_HPKE_CTX_set1_authpub(OSSL_HPKE_CTX *ctx, - const unsigned char *pub, - size_t publen); -int OSSL_HPKE_CTX_set1_psk(OSSL_HPKE_CTX *ctx, - const char *pskid, - const unsigned char *psk, size_t psklen); - -int OSSL_HPKE_CTX_set1_ikme(OSSL_HPKE_CTX *ctx, - const unsigned char *ikme, size_t ikmelen); - -int OSSL_HPKE_CTX_set_seq(OSSL_HPKE_CTX *ctx, uint64_t seq); -int OSSL_HPKE_CTX_get_seq(OSSL_HPKE_CTX *ctx, uint64_t *seq); - -int OSSL_HPKE_suite_check(OSSL_HPKE_SUITE suite); -int OSSL_HPKE_get_grease_value(const OSSL_HPKE_SUITE *suite_in, - OSSL_HPKE_SUITE *suite, - unsigned char *enc, size_t *enclen, - unsigned char *ct, size_t ctlen, - OSSL_LIB_CTX *libctx, const char *propq); -int OSSL_HPKE_str2suite(const char *str, OSSL_HPKE_SUITE *suite); -size_t OSSL_HPKE_get_ciphertext_size(OSSL_HPKE_SUITE suite, size_t clearlen); -size_t OSSL_HPKE_get_public_encap_size(OSSL_HPKE_SUITE suite); -size_t OSSL_HPKE_get_recommended_ikmelen(OSSL_HPKE_SUITE suite); - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index a3cbf15f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/http.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2000-2023 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" - -# ifndef OPENSSL_NO_HTTP - -#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); - - -# endif /* !defined(OPENSSL_NO_HTTP) */ -# 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 deleted file mode 100644 index ee089592..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/httperr.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * 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 deleted file mode 100644 index 1f9bb3b3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/idea.h +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# 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 - -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 - -# 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 0983230a..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/kdf.h +++ /dev/null @@ -1,138 +0,0 @@ -/* - * 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_KDF_H -# define OPENSSL_KDF_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_KDF_H -# endif - -# include -# include -# include -# include - -# ifdef __cplusplus -extern "C" { -# 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) -# define EVP_PKEY_CTRL_TLS_SEED (EVP_PKEY_ALG_CTRL + 2) -# define EVP_PKEY_CTRL_HKDF_MD (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_HKDF_SALT (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_HKDF_KEY (EVP_PKEY_ALG_CTRL + 5) -# define EVP_PKEY_CTRL_HKDF_INFO (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_HKDF_MODE (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_PASS (EVP_PKEY_ALG_CTRL + 8) -# define EVP_PKEY_CTRL_SCRYPT_SALT (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_SCRYPT_N (EVP_PKEY_ALG_CTRL + 10) -# define EVP_PKEY_CTRL_SCRYPT_R (EVP_PKEY_ALG_CTRL + 11) -# 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 \ - 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 - -int EVP_PKEY_CTX_set_tls1_prf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); - -int EVP_PKEY_CTX_set1_tls1_prf_secret(EVP_PKEY_CTX *pctx, - const unsigned char *sec, int seclen); - -int EVP_PKEY_CTX_add1_tls1_prf_seed(EVP_PKEY_CTX *pctx, - const unsigned char *seed, int seedlen); - -int EVP_PKEY_CTX_set_hkdf_md(EVP_PKEY_CTX *ctx, const EVP_MD *md); - -int EVP_PKEY_CTX_set1_hkdf_salt(EVP_PKEY_CTX *ctx, - const unsigned char *salt, int saltlen); - -int EVP_PKEY_CTX_set1_hkdf_key(EVP_PKEY_CTX *ctx, - const unsigned char *key, int keylen); - -int EVP_PKEY_CTX_add1_hkdf_info(EVP_PKEY_CTX *ctx, - const unsigned char *info, int infolen); - -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 - -int EVP_PKEY_CTX_set1_pbe_pass(EVP_PKEY_CTX *ctx, const char *pass, - int passlen); - -int EVP_PKEY_CTX_set1_scrypt_salt(EVP_PKEY_CTX *ctx, - const unsigned char *salt, int saltlen); - -int EVP_PKEY_CTX_set_scrypt_N(EVP_PKEY_CTX *ctx, uint64_t n); - -int EVP_PKEY_CTX_set_scrypt_r(EVP_PKEY_CTX *ctx, uint64_t r); - -int EVP_PKEY_CTX_set_scrypt_p(EVP_PKEY_CTX *ctx, uint64_t p); - -int EVP_PKEY_CTX_set_scrypt_maxmem_bytes(EVP_PKEY_CTX *ctx, - uint64_t maxmem_bytes); - - -# 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 deleted file mode 100644 index 963d766d..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/kdferr.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * 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_KDFERR_H -# define OPENSSL_KDFERR_H -# pragma once - -#include - -#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 deleted file mode 100644 index 8af9edd2..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h +++ /dev/null @@ -1,331 +0,0 @@ -/* - * 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 - */ - - - -/* - * 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) - -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)) - - -#ifdef __cplusplus -} -#endif - -#endif 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 deleted file mode 100644 index c9dbd1f3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h.in +++ /dev/null @@ -1,306 +0,0 @@ -/* - * 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 - */ - -{- -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 deleted file mode 100644 index e9ef9387..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/macros.h +++ /dev/null @@ -1,326 +0,0 @@ -/* - * 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_DEPRECATEDIN_{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_1 -# 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 deleted file mode 100644 index 5d4cb77e..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md2.h +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# endif - -# define MD2_DIGEST_LENGTH 16 - -# if !defined(OPENSSL_NO_DEPRECATED_3_0) - -typedef unsigned char MD2_INT; - -# define MD2_BLOCK 16 - -typedef struct MD2state_st { - unsigned int num; - unsigned char data[MD2_BLOCK]; - 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 6c150a6c..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md4.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# 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_CBLOCK 64 -# define MD4_LBLOCK (MD4_CBLOCK/4) - -typedef struct MD4state_st { - MD4_LONG A, B, C, D; - MD4_LONG Nl, Nh; - 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 77a57734..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/md5.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# 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_CBLOCK 64 -# define MD5_LBLOCK (MD5_CBLOCK/4) - -typedef struct MD5state_st { - MD5_LONG A, B, C, D; - MD5_LONG Nl, Nh; - 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 5a7ee289..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/mdc2.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# endif - -# 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; - 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index e1907991..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/modes.h +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright 2008-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_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" { -# endif -typedef void (*block128_f) (const unsigned char in[16], - unsigned char out[16], const void *key); - -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]); - -typedef void (*ccm128_f) (const unsigned char *in, unsigned char *out, - size_t blocks, const void *key, - const unsigned char ivec[16], - unsigned char cmac[16]); - -void CRYPTO_cbc128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], block128_f block); -void CRYPTO_cbc128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], block128_f block); - -void CRYPTO_ctr128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], - unsigned char ecount_buf[16], unsigned int *num, - block128_f block); - -void CRYPTO_ctr128_encrypt_ctr32(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], - unsigned char ecount_buf[16], - unsigned int *num, ctr128_f ctr); - -void CRYPTO_ofb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int *num, - block128_f block); - -void CRYPTO_cfb128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); -void CRYPTO_cfb128_8_encrypt(const unsigned char *in, unsigned char *out, - size_t length, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); -void CRYPTO_cfb128_1_encrypt(const unsigned char *in, unsigned char *out, - size_t bits, const void *key, - unsigned char ivec[16], int *num, - int enc, block128_f block); - -size_t CRYPTO_cts128_encrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, unsigned char ivec[16], - block128_f block); -size_t CRYPTO_cts128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); -size_t CRYPTO_cts128_decrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, unsigned char ivec[16], - block128_f block); -size_t CRYPTO_cts128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); - -size_t CRYPTO_nistcts128_encrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, - unsigned char ivec[16], - block128_f block); -size_t CRYPTO_nistcts128_encrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); -size_t CRYPTO_nistcts128_decrypt_block(const unsigned char *in, - unsigned char *out, size_t len, - const void *key, - unsigned char ivec[16], - block128_f block); -size_t CRYPTO_nistcts128_decrypt(const unsigned char *in, unsigned char *out, - size_t len, const void *key, - unsigned char ivec[16], cbc128_f cbc); - -typedef struct gcm128_context GCM128_CONTEXT; - -GCM128_CONTEXT *CRYPTO_gcm128_new(void *key, block128_f block); -void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block); -void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const unsigned char *iv, - size_t len); -int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const unsigned char *aad, - size_t len); -int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len); -int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len); -int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len, ctr128_f stream); -int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, - const unsigned char *in, unsigned char *out, - size_t len, ctr128_f stream); -int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const unsigned char *tag, - size_t len); -void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, unsigned char *tag, size_t len); -void CRYPTO_gcm128_release(GCM128_CONTEXT *ctx); - -typedef struct ccm128_context CCM128_CONTEXT; - -void CRYPTO_ccm128_init(CCM128_CONTEXT *ctx, - unsigned int M, unsigned int L, void *key, - block128_f block); -int CRYPTO_ccm128_setiv(CCM128_CONTEXT *ctx, const unsigned char *nonce, - size_t nlen, size_t mlen); -void CRYPTO_ccm128_aad(CCM128_CONTEXT *ctx, const unsigned char *aad, - size_t alen); -int CRYPTO_ccm128_encrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len); -int CRYPTO_ccm128_decrypt(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len); -int CRYPTO_ccm128_encrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len, - ccm128_f stream); -int CRYPTO_ccm128_decrypt_ccm64(CCM128_CONTEXT *ctx, const unsigned char *inp, - unsigned char *out, size_t len, - ccm128_f stream); -size_t CRYPTO_ccm128_tag(CCM128_CONTEXT *ctx, unsigned char *tag, size_t len); - -typedef struct xts128_context XTS128_CONTEXT; - -int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx, - const unsigned char iv[16], - const unsigned char *inp, unsigned char *out, - size_t len, int enc); - -size_t CRYPTO_128_wrap(void *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, size_t inlen, - block128_f block); - -size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv, - unsigned char *out, - const unsigned char *in, size_t inlen, - block128_f block); -size_t CRYPTO_128_wrap_pad(void *key, const unsigned char *icv, - unsigned char *out, const unsigned char *in, - size_t inlen, block128_f block); -size_t CRYPTO_128_unwrap_pad(void *key, const unsigned char *icv, - unsigned char *out, const unsigned char *in, - size_t inlen, block128_f block); - -# ifndef OPENSSL_NO_OCB -typedef struct ocb128_context OCB128_CONTEXT; - -typedef void (*ocb128_f) (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]); - -OCB128_CONTEXT *CRYPTO_ocb128_new(void *keyenc, void *keydec, - block128_f encrypt, block128_f decrypt, - ocb128_f stream); -int CRYPTO_ocb128_init(OCB128_CONTEXT *ctx, void *keyenc, void *keydec, - block128_f encrypt, block128_f decrypt, - ocb128_f stream); -int CRYPTO_ocb128_copy_ctx(OCB128_CONTEXT *dest, OCB128_CONTEXT *src, - void *keyenc, void *keydec); -int CRYPTO_ocb128_setiv(OCB128_CONTEXT *ctx, const unsigned char *iv, - size_t len, size_t taglen); -int CRYPTO_ocb128_aad(OCB128_CONTEXT *ctx, const unsigned char *aad, - size_t len); -int CRYPTO_ocb128_encrypt(OCB128_CONTEXT *ctx, const unsigned char *in, - unsigned char *out, size_t len); -int CRYPTO_ocb128_decrypt(OCB128_CONTEXT *ctx, const unsigned char *in, - unsigned char *out, size_t len); -int CRYPTO_ocb128_finish(OCB128_CONTEXT *ctx, const unsigned char *tag, - size_t len); -int CRYPTO_ocb128_tag(OCB128_CONTEXT *ctx, unsigned char *tag, size_t len); -void CRYPTO_ocb128_cleanup(OCB128_CONTEXT *ctx); -# endif /* OPENSSL_NO_OCB */ - -# ifdef __cplusplus -} -# endif - -#endif 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 deleted file mode 100644 index e1b441b3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/obj_mac.h +++ /dev/null @@ -1,5802 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by crypto/objects/objects.pl - * - * Copyright 2000-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_OBJ_MAC_H -# define OPENSSL_OBJ_MAC_H -# pragma once - -#define SN_undef "UNDEF" -#define LN_undef "undefined" -#define NID_undef 0 -#define OBJ_undef 0L - -#define SN_itu_t "ITU-T" -#define LN_itu_t "itu-t" -#define NID_itu_t 645 -#define OBJ_itu_t 0L - -#define NID_ccitt 404 -#define OBJ_ccitt OBJ_itu_t - -#define SN_iso "ISO" -#define LN_iso "iso" -#define NID_iso 181 -#define OBJ_iso 1L - -#define SN_joint_iso_itu_t "JOINT-ISO-ITU-T" -#define LN_joint_iso_itu_t "joint-iso-itu-t" -#define NID_joint_iso_itu_t 646 -#define OBJ_joint_iso_itu_t 2L - -#define NID_joint_iso_ccitt 393 -#define OBJ_joint_iso_ccitt OBJ_joint_iso_itu_t - -#define SN_member_body "member-body" -#define LN_member_body "ISO Member Body" -#define NID_member_body 182 -#define OBJ_member_body OBJ_iso,2L - -#define SN_identified_organization "identified-organization" -#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 -#define OBJ_hmac_md5 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,1L - -#define SN_hmac_sha1 "HMAC-SHA1" -#define LN_hmac_sha1 "hmac-sha1" -#define NID_hmac_sha1 781 -#define OBJ_hmac_sha1 OBJ_identified_organization,6L,1L,5L,5L,8L,1L,2L - -#define SN_x509ExtAdmission "x509ExtAdmission" -#define LN_x509ExtAdmission "Professional Information or basis for Admission" -#define NID_x509ExtAdmission 1093 -#define OBJ_x509ExtAdmission OBJ_identified_organization,36L,8L,3L,3L - -#define SN_certicom_arc "certicom-arc" -#define NID_certicom_arc 677 -#define OBJ_certicom_arc OBJ_identified_organization,132L - -#define SN_ieee "ieee" -#define NID_ieee 1170 -#define OBJ_ieee OBJ_identified_organization,111L - -#define SN_ieee_siswg "ieee-siswg" -#define LN_ieee_siswg "IEEE Security in Storage Working Group" -#define NID_ieee_siswg 1171 -#define OBJ_ieee_siswg OBJ_ieee,2L,1619L - -#define SN_international_organizations "international-organizations" -#define LN_international_organizations "International Organizations" -#define NID_international_organizations 647 -#define OBJ_international_organizations OBJ_joint_iso_itu_t,23L - -#define SN_wap "wap" -#define NID_wap 678 -#define OBJ_wap OBJ_international_organizations,43L - -#define SN_wap_wsg "wap-wsg" -#define NID_wap_wsg 679 -#define OBJ_wap_wsg OBJ_wap,1L - -#define SN_selected_attribute_types "selected-attribute-types" -#define LN_selected_attribute_types "Selected Attribute Types" -#define NID_selected_attribute_types 394 -#define OBJ_selected_attribute_types OBJ_joint_iso_itu_t,5L,1L,5L - -#define SN_clearance "clearance" -#define NID_clearance 395 -#define OBJ_clearance OBJ_selected_attribute_types,55L - -#define SN_ISO_US "ISO-US" -#define LN_ISO_US "ISO US Member Body" -#define NID_ISO_US 183 -#define OBJ_ISO_US OBJ_member_body,840L - -#define SN_X9_57 "X9-57" -#define LN_X9_57 "X9.57" -#define NID_X9_57 184 -#define OBJ_X9_57 OBJ_ISO_US,10040L - -#define SN_X9cm "X9cm" -#define LN_X9cm "X9.57 CM ?" -#define NID_X9cm 185 -#define OBJ_X9cm OBJ_X9_57,4L - -#define SN_ISO_CN "ISO-CN" -#define LN_ISO_CN "ISO CN Member Body" -#define NID_ISO_CN 1140 -#define OBJ_ISO_CN OBJ_member_body,156L - -#define SN_oscca "oscca" -#define NID_oscca 1141 -#define OBJ_oscca OBJ_ISO_CN,10197L - -#define SN_sm_scheme "sm-scheme" -#define NID_sm_scheme 1142 -#define OBJ_sm_scheme OBJ_oscca,1L - -#define SN_dsa "DSA" -#define LN_dsa "dsaEncryption" -#define NID_dsa 116 -#define OBJ_dsa OBJ_X9cm,1L - -#define SN_dsaWithSHA1 "DSA-SHA1" -#define LN_dsaWithSHA1 "dsaWithSHA1" -#define NID_dsaWithSHA1 113 -#define OBJ_dsaWithSHA1 OBJ_X9cm,3L - -#define SN_ansi_X9_62 "ansi-X9-62" -#define LN_ansi_X9_62 "ANSI X9.62" -#define NID_ansi_X9_62 405 -#define OBJ_ansi_X9_62 OBJ_ISO_US,10045L - -#define OBJ_X9_62_id_fieldType OBJ_ansi_X9_62,1L - -#define SN_X9_62_prime_field "prime-field" -#define NID_X9_62_prime_field 406 -#define OBJ_X9_62_prime_field OBJ_X9_62_id_fieldType,1L - -#define SN_X9_62_characteristic_two_field "characteristic-two-field" -#define NID_X9_62_characteristic_two_field 407 -#define OBJ_X9_62_characteristic_two_field OBJ_X9_62_id_fieldType,2L - -#define SN_X9_62_id_characteristic_two_basis "id-characteristic-two-basis" -#define NID_X9_62_id_characteristic_two_basis 680 -#define OBJ_X9_62_id_characteristic_two_basis OBJ_X9_62_characteristic_two_field,3L - -#define SN_X9_62_onBasis "onBasis" -#define NID_X9_62_onBasis 681 -#define OBJ_X9_62_onBasis OBJ_X9_62_id_characteristic_two_basis,1L - -#define SN_X9_62_tpBasis "tpBasis" -#define NID_X9_62_tpBasis 682 -#define OBJ_X9_62_tpBasis OBJ_X9_62_id_characteristic_two_basis,2L - -#define SN_X9_62_ppBasis "ppBasis" -#define NID_X9_62_ppBasis 683 -#define OBJ_X9_62_ppBasis OBJ_X9_62_id_characteristic_two_basis,3L - -#define OBJ_X9_62_id_publicKeyType OBJ_ansi_X9_62,2L - -#define SN_X9_62_id_ecPublicKey "id-ecPublicKey" -#define NID_X9_62_id_ecPublicKey 408 -#define OBJ_X9_62_id_ecPublicKey OBJ_X9_62_id_publicKeyType,1L - -#define OBJ_X9_62_ellipticCurve OBJ_ansi_X9_62,3L - -#define OBJ_X9_62_c_TwoCurve OBJ_X9_62_ellipticCurve,0L - -#define SN_X9_62_c2pnb163v1 "c2pnb163v1" -#define NID_X9_62_c2pnb163v1 684 -#define OBJ_X9_62_c2pnb163v1 OBJ_X9_62_c_TwoCurve,1L - -#define SN_X9_62_c2pnb163v2 "c2pnb163v2" -#define NID_X9_62_c2pnb163v2 685 -#define OBJ_X9_62_c2pnb163v2 OBJ_X9_62_c_TwoCurve,2L - -#define SN_X9_62_c2pnb163v3 "c2pnb163v3" -#define NID_X9_62_c2pnb163v3 686 -#define OBJ_X9_62_c2pnb163v3 OBJ_X9_62_c_TwoCurve,3L - -#define SN_X9_62_c2pnb176v1 "c2pnb176v1" -#define NID_X9_62_c2pnb176v1 687 -#define OBJ_X9_62_c2pnb176v1 OBJ_X9_62_c_TwoCurve,4L - -#define SN_X9_62_c2tnb191v1 "c2tnb191v1" -#define NID_X9_62_c2tnb191v1 688 -#define OBJ_X9_62_c2tnb191v1 OBJ_X9_62_c_TwoCurve,5L - -#define SN_X9_62_c2tnb191v2 "c2tnb191v2" -#define NID_X9_62_c2tnb191v2 689 -#define OBJ_X9_62_c2tnb191v2 OBJ_X9_62_c_TwoCurve,6L - -#define SN_X9_62_c2tnb191v3 "c2tnb191v3" -#define NID_X9_62_c2tnb191v3 690 -#define OBJ_X9_62_c2tnb191v3 OBJ_X9_62_c_TwoCurve,7L - -#define SN_X9_62_c2onb191v4 "c2onb191v4" -#define NID_X9_62_c2onb191v4 691 -#define OBJ_X9_62_c2onb191v4 OBJ_X9_62_c_TwoCurve,8L - -#define SN_X9_62_c2onb191v5 "c2onb191v5" -#define NID_X9_62_c2onb191v5 692 -#define OBJ_X9_62_c2onb191v5 OBJ_X9_62_c_TwoCurve,9L - -#define SN_X9_62_c2pnb208w1 "c2pnb208w1" -#define NID_X9_62_c2pnb208w1 693 -#define OBJ_X9_62_c2pnb208w1 OBJ_X9_62_c_TwoCurve,10L - -#define SN_X9_62_c2tnb239v1 "c2tnb239v1" -#define NID_X9_62_c2tnb239v1 694 -#define OBJ_X9_62_c2tnb239v1 OBJ_X9_62_c_TwoCurve,11L - -#define SN_X9_62_c2tnb239v2 "c2tnb239v2" -#define NID_X9_62_c2tnb239v2 695 -#define OBJ_X9_62_c2tnb239v2 OBJ_X9_62_c_TwoCurve,12L - -#define SN_X9_62_c2tnb239v3 "c2tnb239v3" -#define NID_X9_62_c2tnb239v3 696 -#define OBJ_X9_62_c2tnb239v3 OBJ_X9_62_c_TwoCurve,13L - -#define SN_X9_62_c2onb239v4 "c2onb239v4" -#define NID_X9_62_c2onb239v4 697 -#define OBJ_X9_62_c2onb239v4 OBJ_X9_62_c_TwoCurve,14L - -#define SN_X9_62_c2onb239v5 "c2onb239v5" -#define NID_X9_62_c2onb239v5 698 -#define OBJ_X9_62_c2onb239v5 OBJ_X9_62_c_TwoCurve,15L - -#define SN_X9_62_c2pnb272w1 "c2pnb272w1" -#define NID_X9_62_c2pnb272w1 699 -#define OBJ_X9_62_c2pnb272w1 OBJ_X9_62_c_TwoCurve,16L - -#define SN_X9_62_c2pnb304w1 "c2pnb304w1" -#define NID_X9_62_c2pnb304w1 700 -#define OBJ_X9_62_c2pnb304w1 OBJ_X9_62_c_TwoCurve,17L - -#define SN_X9_62_c2tnb359v1 "c2tnb359v1" -#define NID_X9_62_c2tnb359v1 701 -#define OBJ_X9_62_c2tnb359v1 OBJ_X9_62_c_TwoCurve,18L - -#define SN_X9_62_c2pnb368w1 "c2pnb368w1" -#define NID_X9_62_c2pnb368w1 702 -#define OBJ_X9_62_c2pnb368w1 OBJ_X9_62_c_TwoCurve,19L - -#define SN_X9_62_c2tnb431r1 "c2tnb431r1" -#define NID_X9_62_c2tnb431r1 703 -#define OBJ_X9_62_c2tnb431r1 OBJ_X9_62_c_TwoCurve,20L - -#define OBJ_X9_62_primeCurve OBJ_X9_62_ellipticCurve,1L - -#define SN_X9_62_prime192v1 "prime192v1" -#define NID_X9_62_prime192v1 409 -#define OBJ_X9_62_prime192v1 OBJ_X9_62_primeCurve,1L - -#define SN_X9_62_prime192v2 "prime192v2" -#define NID_X9_62_prime192v2 410 -#define OBJ_X9_62_prime192v2 OBJ_X9_62_primeCurve,2L - -#define SN_X9_62_prime192v3 "prime192v3" -#define NID_X9_62_prime192v3 411 -#define OBJ_X9_62_prime192v3 OBJ_X9_62_primeCurve,3L - -#define SN_X9_62_prime239v1 "prime239v1" -#define NID_X9_62_prime239v1 412 -#define OBJ_X9_62_prime239v1 OBJ_X9_62_primeCurve,4L - -#define SN_X9_62_prime239v2 "prime239v2" -#define NID_X9_62_prime239v2 413 -#define OBJ_X9_62_prime239v2 OBJ_X9_62_primeCurve,5L - -#define SN_X9_62_prime239v3 "prime239v3" -#define NID_X9_62_prime239v3 414 -#define OBJ_X9_62_prime239v3 OBJ_X9_62_primeCurve,6L - -#define SN_X9_62_prime256v1 "prime256v1" -#define NID_X9_62_prime256v1 415 -#define OBJ_X9_62_prime256v1 OBJ_X9_62_primeCurve,7L - -#define OBJ_X9_62_id_ecSigType OBJ_ansi_X9_62,4L - -#define SN_ecdsa_with_SHA1 "ecdsa-with-SHA1" -#define NID_ecdsa_with_SHA1 416 -#define OBJ_ecdsa_with_SHA1 OBJ_X9_62_id_ecSigType,1L - -#define SN_ecdsa_with_Recommended "ecdsa-with-Recommended" -#define NID_ecdsa_with_Recommended 791 -#define OBJ_ecdsa_with_Recommended OBJ_X9_62_id_ecSigType,2L - -#define SN_ecdsa_with_Specified "ecdsa-with-Specified" -#define NID_ecdsa_with_Specified 792 -#define OBJ_ecdsa_with_Specified OBJ_X9_62_id_ecSigType,3L - -#define SN_ecdsa_with_SHA224 "ecdsa-with-SHA224" -#define NID_ecdsa_with_SHA224 793 -#define OBJ_ecdsa_with_SHA224 OBJ_ecdsa_with_Specified,1L - -#define SN_ecdsa_with_SHA256 "ecdsa-with-SHA256" -#define NID_ecdsa_with_SHA256 794 -#define OBJ_ecdsa_with_SHA256 OBJ_ecdsa_with_Specified,2L - -#define SN_ecdsa_with_SHA384 "ecdsa-with-SHA384" -#define NID_ecdsa_with_SHA384 795 -#define OBJ_ecdsa_with_SHA384 OBJ_ecdsa_with_Specified,3L - -#define SN_ecdsa_with_SHA512 "ecdsa-with-SHA512" -#define NID_ecdsa_with_SHA512 796 -#define OBJ_ecdsa_with_SHA512 OBJ_ecdsa_with_Specified,4L - -#define OBJ_secg_ellipticCurve OBJ_certicom_arc,0L - -#define SN_secp112r1 "secp112r1" -#define NID_secp112r1 704 -#define OBJ_secp112r1 OBJ_secg_ellipticCurve,6L - -#define SN_secp112r2 "secp112r2" -#define NID_secp112r2 705 -#define OBJ_secp112r2 OBJ_secg_ellipticCurve,7L - -#define SN_secp128r1 "secp128r1" -#define NID_secp128r1 706 -#define OBJ_secp128r1 OBJ_secg_ellipticCurve,28L - -#define SN_secp128r2 "secp128r2" -#define NID_secp128r2 707 -#define OBJ_secp128r2 OBJ_secg_ellipticCurve,29L - -#define SN_secp160k1 "secp160k1" -#define NID_secp160k1 708 -#define OBJ_secp160k1 OBJ_secg_ellipticCurve,9L - -#define SN_secp160r1 "secp160r1" -#define NID_secp160r1 709 -#define OBJ_secp160r1 OBJ_secg_ellipticCurve,8L - -#define SN_secp160r2 "secp160r2" -#define NID_secp160r2 710 -#define OBJ_secp160r2 OBJ_secg_ellipticCurve,30L - -#define SN_secp192k1 "secp192k1" -#define NID_secp192k1 711 -#define OBJ_secp192k1 OBJ_secg_ellipticCurve,31L - -#define SN_secp224k1 "secp224k1" -#define NID_secp224k1 712 -#define OBJ_secp224k1 OBJ_secg_ellipticCurve,32L - -#define SN_secp224r1 "secp224r1" -#define NID_secp224r1 713 -#define OBJ_secp224r1 OBJ_secg_ellipticCurve,33L - -#define SN_secp256k1 "secp256k1" -#define NID_secp256k1 714 -#define OBJ_secp256k1 OBJ_secg_ellipticCurve,10L - -#define SN_secp384r1 "secp384r1" -#define NID_secp384r1 715 -#define OBJ_secp384r1 OBJ_secg_ellipticCurve,34L - -#define SN_secp521r1 "secp521r1" -#define NID_secp521r1 716 -#define OBJ_secp521r1 OBJ_secg_ellipticCurve,35L - -#define SN_sect113r1 "sect113r1" -#define NID_sect113r1 717 -#define OBJ_sect113r1 OBJ_secg_ellipticCurve,4L - -#define SN_sect113r2 "sect113r2" -#define NID_sect113r2 718 -#define OBJ_sect113r2 OBJ_secg_ellipticCurve,5L - -#define SN_sect131r1 "sect131r1" -#define NID_sect131r1 719 -#define OBJ_sect131r1 OBJ_secg_ellipticCurve,22L - -#define SN_sect131r2 "sect131r2" -#define NID_sect131r2 720 -#define OBJ_sect131r2 OBJ_secg_ellipticCurve,23L - -#define SN_sect163k1 "sect163k1" -#define NID_sect163k1 721 -#define OBJ_sect163k1 OBJ_secg_ellipticCurve,1L - -#define SN_sect163r1 "sect163r1" -#define NID_sect163r1 722 -#define OBJ_sect163r1 OBJ_secg_ellipticCurve,2L - -#define SN_sect163r2 "sect163r2" -#define NID_sect163r2 723 -#define OBJ_sect163r2 OBJ_secg_ellipticCurve,15L - -#define SN_sect193r1 "sect193r1" -#define NID_sect193r1 724 -#define OBJ_sect193r1 OBJ_secg_ellipticCurve,24L - -#define SN_sect193r2 "sect193r2" -#define NID_sect193r2 725 -#define OBJ_sect193r2 OBJ_secg_ellipticCurve,25L - -#define SN_sect233k1 "sect233k1" -#define NID_sect233k1 726 -#define OBJ_sect233k1 OBJ_secg_ellipticCurve,26L - -#define SN_sect233r1 "sect233r1" -#define NID_sect233r1 727 -#define OBJ_sect233r1 OBJ_secg_ellipticCurve,27L - -#define SN_sect239k1 "sect239k1" -#define NID_sect239k1 728 -#define OBJ_sect239k1 OBJ_secg_ellipticCurve,3L - -#define SN_sect283k1 "sect283k1" -#define NID_sect283k1 729 -#define OBJ_sect283k1 OBJ_secg_ellipticCurve,16L - -#define SN_sect283r1 "sect283r1" -#define NID_sect283r1 730 -#define OBJ_sect283r1 OBJ_secg_ellipticCurve,17L - -#define SN_sect409k1 "sect409k1" -#define NID_sect409k1 731 -#define OBJ_sect409k1 OBJ_secg_ellipticCurve,36L - -#define SN_sect409r1 "sect409r1" -#define NID_sect409r1 732 -#define OBJ_sect409r1 OBJ_secg_ellipticCurve,37L - -#define SN_sect571k1 "sect571k1" -#define NID_sect571k1 733 -#define OBJ_sect571k1 OBJ_secg_ellipticCurve,38L - -#define SN_sect571r1 "sect571r1" -#define NID_sect571r1 734 -#define OBJ_sect571r1 OBJ_secg_ellipticCurve,39L - -#define OBJ_wap_wsg_idm_ecid OBJ_wap_wsg,4L - -#define SN_wap_wsg_idm_ecid_wtls1 "wap-wsg-idm-ecid-wtls1" -#define NID_wap_wsg_idm_ecid_wtls1 735 -#define OBJ_wap_wsg_idm_ecid_wtls1 OBJ_wap_wsg_idm_ecid,1L - -#define SN_wap_wsg_idm_ecid_wtls3 "wap-wsg-idm-ecid-wtls3" -#define NID_wap_wsg_idm_ecid_wtls3 736 -#define OBJ_wap_wsg_idm_ecid_wtls3 OBJ_wap_wsg_idm_ecid,3L - -#define SN_wap_wsg_idm_ecid_wtls4 "wap-wsg-idm-ecid-wtls4" -#define NID_wap_wsg_idm_ecid_wtls4 737 -#define OBJ_wap_wsg_idm_ecid_wtls4 OBJ_wap_wsg_idm_ecid,4L - -#define SN_wap_wsg_idm_ecid_wtls5 "wap-wsg-idm-ecid-wtls5" -#define NID_wap_wsg_idm_ecid_wtls5 738 -#define OBJ_wap_wsg_idm_ecid_wtls5 OBJ_wap_wsg_idm_ecid,5L - -#define SN_wap_wsg_idm_ecid_wtls6 "wap-wsg-idm-ecid-wtls6" -#define NID_wap_wsg_idm_ecid_wtls6 739 -#define OBJ_wap_wsg_idm_ecid_wtls6 OBJ_wap_wsg_idm_ecid,6L - -#define SN_wap_wsg_idm_ecid_wtls7 "wap-wsg-idm-ecid-wtls7" -#define NID_wap_wsg_idm_ecid_wtls7 740 -#define OBJ_wap_wsg_idm_ecid_wtls7 OBJ_wap_wsg_idm_ecid,7L - -#define SN_wap_wsg_idm_ecid_wtls8 "wap-wsg-idm-ecid-wtls8" -#define NID_wap_wsg_idm_ecid_wtls8 741 -#define OBJ_wap_wsg_idm_ecid_wtls8 OBJ_wap_wsg_idm_ecid,8L - -#define SN_wap_wsg_idm_ecid_wtls9 "wap-wsg-idm-ecid-wtls9" -#define NID_wap_wsg_idm_ecid_wtls9 742 -#define OBJ_wap_wsg_idm_ecid_wtls9 OBJ_wap_wsg_idm_ecid,9L - -#define SN_wap_wsg_idm_ecid_wtls10 "wap-wsg-idm-ecid-wtls10" -#define NID_wap_wsg_idm_ecid_wtls10 743 -#define OBJ_wap_wsg_idm_ecid_wtls10 OBJ_wap_wsg_idm_ecid,10L - -#define SN_wap_wsg_idm_ecid_wtls11 "wap-wsg-idm-ecid-wtls11" -#define NID_wap_wsg_idm_ecid_wtls11 744 -#define OBJ_wap_wsg_idm_ecid_wtls11 OBJ_wap_wsg_idm_ecid,11L - -#define SN_wap_wsg_idm_ecid_wtls12 "wap-wsg-idm-ecid-wtls12" -#define NID_wap_wsg_idm_ecid_wtls12 745 -#define OBJ_wap_wsg_idm_ecid_wtls12 OBJ_wap_wsg_idm_ecid,12L - -#define SN_cast5_cbc "CAST5-CBC" -#define LN_cast5_cbc "cast5-cbc" -#define NID_cast5_cbc 108 -#define OBJ_cast5_cbc OBJ_ISO_US,113533L,7L,66L,10L - -#define SN_cast5_ecb "CAST5-ECB" -#define LN_cast5_ecb "cast5-ecb" -#define NID_cast5_ecb 109 - -#define SN_cast5_cfb64 "CAST5-CFB" -#define LN_cast5_cfb64 "cast5-cfb" -#define NID_cast5_cfb64 110 - -#define SN_cast5_ofb64 "CAST5-OFB" -#define LN_cast5_ofb64 "cast5-ofb" -#define NID_cast5_ofb64 111 - -#define LN_pbeWithMD5AndCast5_CBC "pbeWithMD5AndCast5CBC" -#define NID_pbeWithMD5AndCast5_CBC 112 -#define OBJ_pbeWithMD5AndCast5_CBC OBJ_ISO_US,113533L,7L,66L,12L - -#define SN_id_PasswordBasedMAC "id-PasswordBasedMAC" -#define LN_id_PasswordBasedMAC "password based MAC" -#define NID_id_PasswordBasedMAC 782 -#define OBJ_id_PasswordBasedMAC OBJ_ISO_US,113533L,7L,66L,13L - -#define SN_id_DHBasedMac "id-DHBasedMac" -#define LN_id_DHBasedMac "Diffie-Hellman based MAC" -#define NID_id_DHBasedMac 783 -#define OBJ_id_DHBasedMac OBJ_ISO_US,113533L,7L,66L,30L - -#define SN_rsadsi "rsadsi" -#define LN_rsadsi "RSA Data Security, Inc." -#define NID_rsadsi 1 -#define OBJ_rsadsi OBJ_ISO_US,113549L - -#define SN_pkcs "pkcs" -#define LN_pkcs "RSA Data Security, Inc. PKCS" -#define NID_pkcs 2 -#define OBJ_pkcs OBJ_rsadsi,1L - -#define SN_pkcs1 "pkcs1" -#define NID_pkcs1 186 -#define OBJ_pkcs1 OBJ_pkcs,1L - -#define LN_rsaEncryption "rsaEncryption" -#define NID_rsaEncryption 6 -#define OBJ_rsaEncryption OBJ_pkcs1,1L - -#define SN_md2WithRSAEncryption "RSA-MD2" -#define LN_md2WithRSAEncryption "md2WithRSAEncryption" -#define NID_md2WithRSAEncryption 7 -#define OBJ_md2WithRSAEncryption OBJ_pkcs1,2L - -#define SN_md4WithRSAEncryption "RSA-MD4" -#define LN_md4WithRSAEncryption "md4WithRSAEncryption" -#define NID_md4WithRSAEncryption 396 -#define OBJ_md4WithRSAEncryption OBJ_pkcs1,3L - -#define SN_md5WithRSAEncryption "RSA-MD5" -#define LN_md5WithRSAEncryption "md5WithRSAEncryption" -#define NID_md5WithRSAEncryption 8 -#define OBJ_md5WithRSAEncryption OBJ_pkcs1,4L - -#define SN_sha1WithRSAEncryption "RSA-SHA1" -#define LN_sha1WithRSAEncryption "sha1WithRSAEncryption" -#define NID_sha1WithRSAEncryption 65 -#define OBJ_sha1WithRSAEncryption OBJ_pkcs1,5L - -#define SN_rsaesOaep "RSAES-OAEP" -#define LN_rsaesOaep "rsaesOaep" -#define NID_rsaesOaep 919 -#define OBJ_rsaesOaep OBJ_pkcs1,7L - -#define SN_mgf1 "MGF1" -#define LN_mgf1 "mgf1" -#define NID_mgf1 911 -#define OBJ_mgf1 OBJ_pkcs1,8L - -#define SN_pSpecified "PSPECIFIED" -#define LN_pSpecified "pSpecified" -#define NID_pSpecified 935 -#define OBJ_pSpecified OBJ_pkcs1,9L - -#define SN_rsassaPss "RSASSA-PSS" -#define LN_rsassaPss "rsassaPss" -#define NID_rsassaPss 912 -#define OBJ_rsassaPss OBJ_pkcs1,10L - -#define SN_sha256WithRSAEncryption "RSA-SHA256" -#define LN_sha256WithRSAEncryption "sha256WithRSAEncryption" -#define NID_sha256WithRSAEncryption 668 -#define OBJ_sha256WithRSAEncryption OBJ_pkcs1,11L - -#define SN_sha384WithRSAEncryption "RSA-SHA384" -#define LN_sha384WithRSAEncryption "sha384WithRSAEncryption" -#define NID_sha384WithRSAEncryption 669 -#define OBJ_sha384WithRSAEncryption OBJ_pkcs1,12L - -#define SN_sha512WithRSAEncryption "RSA-SHA512" -#define LN_sha512WithRSAEncryption "sha512WithRSAEncryption" -#define NID_sha512WithRSAEncryption 670 -#define OBJ_sha512WithRSAEncryption OBJ_pkcs1,13L - -#define SN_sha224WithRSAEncryption "RSA-SHA224" -#define LN_sha224WithRSAEncryption "sha224WithRSAEncryption" -#define NID_sha224WithRSAEncryption 671 -#define OBJ_sha224WithRSAEncryption OBJ_pkcs1,14L - -#define SN_sha512_224WithRSAEncryption "RSA-SHA512/224" -#define LN_sha512_224WithRSAEncryption "sha512-224WithRSAEncryption" -#define NID_sha512_224WithRSAEncryption 1145 -#define OBJ_sha512_224WithRSAEncryption OBJ_pkcs1,15L - -#define SN_sha512_256WithRSAEncryption "RSA-SHA512/256" -#define LN_sha512_256WithRSAEncryption "sha512-256WithRSAEncryption" -#define NID_sha512_256WithRSAEncryption 1146 -#define OBJ_sha512_256WithRSAEncryption OBJ_pkcs1,16L - -#define SN_pkcs3 "pkcs3" -#define NID_pkcs3 27 -#define OBJ_pkcs3 OBJ_pkcs,3L - -#define LN_dhKeyAgreement "dhKeyAgreement" -#define NID_dhKeyAgreement 28 -#define OBJ_dhKeyAgreement OBJ_pkcs3,1L - -#define SN_pkcs5 "pkcs5" -#define NID_pkcs5 187 -#define OBJ_pkcs5 OBJ_pkcs,5L - -#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES" -#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC" -#define NID_pbeWithMD2AndDES_CBC 9 -#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs5,1L - -#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES" -#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC" -#define NID_pbeWithMD5AndDES_CBC 10 -#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs5,3L - -#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64" -#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC" -#define NID_pbeWithMD2AndRC2_CBC 168 -#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs5,4L - -#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64" -#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC" -#define NID_pbeWithMD5AndRC2_CBC 169 -#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs5,6L - -#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES" -#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC" -#define NID_pbeWithSHA1AndDES_CBC 170 -#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs5,10L - -#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64" -#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC" -#define NID_pbeWithSHA1AndRC2_CBC 68 -#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs5,11L - -#define LN_id_pbkdf2 "PBKDF2" -#define NID_id_pbkdf2 69 -#define OBJ_id_pbkdf2 OBJ_pkcs5,12L - -#define LN_pbes2 "PBES2" -#define NID_pbes2 161 -#define OBJ_pbes2 OBJ_pkcs5,13L - -#define LN_pbmac1 "PBMAC1" -#define NID_pbmac1 162 -#define OBJ_pbmac1 OBJ_pkcs5,14L - -#define SN_pkcs7 "pkcs7" -#define NID_pkcs7 20 -#define OBJ_pkcs7 OBJ_pkcs,7L - -#define LN_pkcs7_data "pkcs7-data" -#define NID_pkcs7_data 21 -#define OBJ_pkcs7_data OBJ_pkcs7,1L - -#define LN_pkcs7_signed "pkcs7-signedData" -#define NID_pkcs7_signed 22 -#define OBJ_pkcs7_signed OBJ_pkcs7,2L - -#define LN_pkcs7_enveloped "pkcs7-envelopedData" -#define NID_pkcs7_enveloped 23 -#define OBJ_pkcs7_enveloped OBJ_pkcs7,3L - -#define LN_pkcs7_signedAndEnveloped "pkcs7-signedAndEnvelopedData" -#define NID_pkcs7_signedAndEnveloped 24 -#define OBJ_pkcs7_signedAndEnveloped OBJ_pkcs7,4L - -#define LN_pkcs7_digest "pkcs7-digestData" -#define NID_pkcs7_digest 25 -#define OBJ_pkcs7_digest OBJ_pkcs7,5L - -#define LN_pkcs7_encrypted "pkcs7-encryptedData" -#define NID_pkcs7_encrypted 26 -#define OBJ_pkcs7_encrypted OBJ_pkcs7,6L - -#define SN_pkcs9 "pkcs9" -#define NID_pkcs9 47 -#define OBJ_pkcs9 OBJ_pkcs,9L - -#define LN_pkcs9_emailAddress "emailAddress" -#define NID_pkcs9_emailAddress 48 -#define OBJ_pkcs9_emailAddress OBJ_pkcs9,1L - -#define LN_pkcs9_unstructuredName "unstructuredName" -#define NID_pkcs9_unstructuredName 49 -#define OBJ_pkcs9_unstructuredName OBJ_pkcs9,2L - -#define LN_pkcs9_contentType "contentType" -#define NID_pkcs9_contentType 50 -#define OBJ_pkcs9_contentType OBJ_pkcs9,3L - -#define LN_pkcs9_messageDigest "messageDigest" -#define NID_pkcs9_messageDigest 51 -#define OBJ_pkcs9_messageDigest OBJ_pkcs9,4L - -#define LN_pkcs9_signingTime "signingTime" -#define NID_pkcs9_signingTime 52 -#define OBJ_pkcs9_signingTime OBJ_pkcs9,5L - -#define LN_pkcs9_countersignature "countersignature" -#define NID_pkcs9_countersignature 53 -#define OBJ_pkcs9_countersignature OBJ_pkcs9,6L - -#define LN_pkcs9_challengePassword "challengePassword" -#define NID_pkcs9_challengePassword 54 -#define OBJ_pkcs9_challengePassword OBJ_pkcs9,7L - -#define LN_pkcs9_unstructuredAddress "unstructuredAddress" -#define NID_pkcs9_unstructuredAddress 55 -#define OBJ_pkcs9_unstructuredAddress OBJ_pkcs9,8L - -#define LN_pkcs9_extCertAttributes "extendedCertificateAttributes" -#define NID_pkcs9_extCertAttributes 56 -#define OBJ_pkcs9_extCertAttributes OBJ_pkcs9,9L - -#define SN_ext_req "extReq" -#define LN_ext_req "Extension Request" -#define NID_ext_req 172 -#define OBJ_ext_req OBJ_pkcs9,14L - -#define SN_SMIMECapabilities "SMIME-CAPS" -#define LN_SMIMECapabilities "S/MIME Capabilities" -#define NID_SMIMECapabilities 167 -#define OBJ_SMIMECapabilities OBJ_pkcs9,15L - -#define SN_SMIME "SMIME" -#define LN_SMIME "S/MIME" -#define NID_SMIME 188 -#define OBJ_SMIME OBJ_pkcs9,16L - -#define SN_id_smime_mod "id-smime-mod" -#define NID_id_smime_mod 189 -#define OBJ_id_smime_mod OBJ_SMIME,0L - -#define SN_id_smime_ct "id-smime-ct" -#define NID_id_smime_ct 190 -#define OBJ_id_smime_ct OBJ_SMIME,1L - -#define SN_id_smime_aa "id-smime-aa" -#define NID_id_smime_aa 191 -#define OBJ_id_smime_aa OBJ_SMIME,2L - -#define SN_id_smime_alg "id-smime-alg" -#define NID_id_smime_alg 192 -#define OBJ_id_smime_alg OBJ_SMIME,3L - -#define SN_id_smime_cd "id-smime-cd" -#define NID_id_smime_cd 193 -#define OBJ_id_smime_cd OBJ_SMIME,4L - -#define SN_id_smime_spq "id-smime-spq" -#define NID_id_smime_spq 194 -#define OBJ_id_smime_spq OBJ_SMIME,5L - -#define SN_id_smime_cti "id-smime-cti" -#define NID_id_smime_cti 195 -#define OBJ_id_smime_cti OBJ_SMIME,6L - -#define SN_id_smime_mod_cms "id-smime-mod-cms" -#define NID_id_smime_mod_cms 196 -#define OBJ_id_smime_mod_cms OBJ_id_smime_mod,1L - -#define SN_id_smime_mod_ess "id-smime-mod-ess" -#define NID_id_smime_mod_ess 197 -#define OBJ_id_smime_mod_ess OBJ_id_smime_mod,2L - -#define SN_id_smime_mod_oid "id-smime-mod-oid" -#define NID_id_smime_mod_oid 198 -#define OBJ_id_smime_mod_oid OBJ_id_smime_mod,3L - -#define SN_id_smime_mod_msg_v3 "id-smime-mod-msg-v3" -#define NID_id_smime_mod_msg_v3 199 -#define OBJ_id_smime_mod_msg_v3 OBJ_id_smime_mod,4L - -#define SN_id_smime_mod_ets_eSignature_88 "id-smime-mod-ets-eSignature-88" -#define NID_id_smime_mod_ets_eSignature_88 200 -#define OBJ_id_smime_mod_ets_eSignature_88 OBJ_id_smime_mod,5L - -#define SN_id_smime_mod_ets_eSignature_97 "id-smime-mod-ets-eSignature-97" -#define NID_id_smime_mod_ets_eSignature_97 201 -#define OBJ_id_smime_mod_ets_eSignature_97 OBJ_id_smime_mod,6L - -#define SN_id_smime_mod_ets_eSigPolicy_88 "id-smime-mod-ets-eSigPolicy-88" -#define NID_id_smime_mod_ets_eSigPolicy_88 202 -#define OBJ_id_smime_mod_ets_eSigPolicy_88 OBJ_id_smime_mod,7L - -#define SN_id_smime_mod_ets_eSigPolicy_97 "id-smime-mod-ets-eSigPolicy-97" -#define NID_id_smime_mod_ets_eSigPolicy_97 203 -#define OBJ_id_smime_mod_ets_eSigPolicy_97 OBJ_id_smime_mod,8L - -#define SN_id_smime_ct_receipt "id-smime-ct-receipt" -#define NID_id_smime_ct_receipt 204 -#define OBJ_id_smime_ct_receipt OBJ_id_smime_ct,1L - -#define SN_id_smime_ct_authData "id-smime-ct-authData" -#define NID_id_smime_ct_authData 205 -#define OBJ_id_smime_ct_authData OBJ_id_smime_ct,2L - -#define SN_id_smime_ct_publishCert "id-smime-ct-publishCert" -#define NID_id_smime_ct_publishCert 206 -#define OBJ_id_smime_ct_publishCert OBJ_id_smime_ct,3L - -#define SN_id_smime_ct_TSTInfo "id-smime-ct-TSTInfo" -#define NID_id_smime_ct_TSTInfo 207 -#define OBJ_id_smime_ct_TSTInfo OBJ_id_smime_ct,4L - -#define SN_id_smime_ct_TDTInfo "id-smime-ct-TDTInfo" -#define NID_id_smime_ct_TDTInfo 208 -#define OBJ_id_smime_ct_TDTInfo OBJ_id_smime_ct,5L - -#define SN_id_smime_ct_contentInfo "id-smime-ct-contentInfo" -#define NID_id_smime_ct_contentInfo 209 -#define OBJ_id_smime_ct_contentInfo OBJ_id_smime_ct,6L - -#define SN_id_smime_ct_DVCSRequestData "id-smime-ct-DVCSRequestData" -#define NID_id_smime_ct_DVCSRequestData 210 -#define OBJ_id_smime_ct_DVCSRequestData OBJ_id_smime_ct,7L - -#define SN_id_smime_ct_DVCSResponseData "id-smime-ct-DVCSResponseData" -#define NID_id_smime_ct_DVCSResponseData 211 -#define OBJ_id_smime_ct_DVCSResponseData OBJ_id_smime_ct,8L - -#define SN_id_smime_ct_compressedData "id-smime-ct-compressedData" -#define NID_id_smime_ct_compressedData 786 -#define OBJ_id_smime_ct_compressedData OBJ_id_smime_ct,9L - -#define SN_id_smime_ct_contentCollection "id-smime-ct-contentCollection" -#define NID_id_smime_ct_contentCollection 1058 -#define OBJ_id_smime_ct_contentCollection OBJ_id_smime_ct,19L - -#define SN_id_smime_ct_authEnvelopedData "id-smime-ct-authEnvelopedData" -#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 - -#define SN_id_ct_xml "id-ct-xml" -#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_ct_ASPA "id-ct-ASPA" -#define NID_id_ct_ASPA 1250 -#define OBJ_id_ct_ASPA OBJ_id_smime_ct,49L - -#define SN_id_ct_signedTAL "id-ct-signedTAL" -#define NID_id_ct_signedTAL 1284 -#define OBJ_id_ct_signedTAL OBJ_id_smime_ct,50L - -#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 - -#define SN_id_smime_aa_securityLabel "id-smime-aa-securityLabel" -#define NID_id_smime_aa_securityLabel 213 -#define OBJ_id_smime_aa_securityLabel OBJ_id_smime_aa,2L - -#define SN_id_smime_aa_mlExpandHistory "id-smime-aa-mlExpandHistory" -#define NID_id_smime_aa_mlExpandHistory 214 -#define OBJ_id_smime_aa_mlExpandHistory OBJ_id_smime_aa,3L - -#define SN_id_smime_aa_contentHint "id-smime-aa-contentHint" -#define NID_id_smime_aa_contentHint 215 -#define OBJ_id_smime_aa_contentHint OBJ_id_smime_aa,4L - -#define SN_id_smime_aa_msgSigDigest "id-smime-aa-msgSigDigest" -#define NID_id_smime_aa_msgSigDigest 216 -#define OBJ_id_smime_aa_msgSigDigest OBJ_id_smime_aa,5L - -#define SN_id_smime_aa_encapContentType "id-smime-aa-encapContentType" -#define NID_id_smime_aa_encapContentType 217 -#define OBJ_id_smime_aa_encapContentType OBJ_id_smime_aa,6L - -#define SN_id_smime_aa_contentIdentifier "id-smime-aa-contentIdentifier" -#define NID_id_smime_aa_contentIdentifier 218 -#define OBJ_id_smime_aa_contentIdentifier OBJ_id_smime_aa,7L - -#define SN_id_smime_aa_macValue "id-smime-aa-macValue" -#define NID_id_smime_aa_macValue 219 -#define OBJ_id_smime_aa_macValue OBJ_id_smime_aa,8L - -#define SN_id_smime_aa_equivalentLabels "id-smime-aa-equivalentLabels" -#define NID_id_smime_aa_equivalentLabels 220 -#define OBJ_id_smime_aa_equivalentLabels OBJ_id_smime_aa,9L - -#define SN_id_smime_aa_contentReference "id-smime-aa-contentReference" -#define NID_id_smime_aa_contentReference 221 -#define OBJ_id_smime_aa_contentReference OBJ_id_smime_aa,10L - -#define SN_id_smime_aa_encrypKeyPref "id-smime-aa-encrypKeyPref" -#define NID_id_smime_aa_encrypKeyPref 222 -#define OBJ_id_smime_aa_encrypKeyPref OBJ_id_smime_aa,11L - -#define SN_id_smime_aa_signingCertificate "id-smime-aa-signingCertificate" -#define NID_id_smime_aa_signingCertificate 223 -#define OBJ_id_smime_aa_signingCertificate OBJ_id_smime_aa,12L - -#define SN_id_smime_aa_smimeEncryptCerts "id-smime-aa-smimeEncryptCerts" -#define NID_id_smime_aa_smimeEncryptCerts 224 -#define OBJ_id_smime_aa_smimeEncryptCerts OBJ_id_smime_aa,13L - -#define SN_id_smime_aa_timeStampToken "id-smime-aa-timeStampToken" -#define NID_id_smime_aa_timeStampToken 225 -#define OBJ_id_smime_aa_timeStampToken OBJ_id_smime_aa,14L - -#define SN_id_smime_aa_ets_sigPolicyId "id-smime-aa-ets-sigPolicyId" -#define NID_id_smime_aa_ets_sigPolicyId 226 -#define OBJ_id_smime_aa_ets_sigPolicyId OBJ_id_smime_aa,15L - -#define SN_id_smime_aa_ets_commitmentType "id-smime-aa-ets-commitmentType" -#define NID_id_smime_aa_ets_commitmentType 227 -#define OBJ_id_smime_aa_ets_commitmentType OBJ_id_smime_aa,16L - -#define SN_id_smime_aa_ets_signerLocation "id-smime-aa-ets-signerLocation" -#define NID_id_smime_aa_ets_signerLocation 228 -#define OBJ_id_smime_aa_ets_signerLocation OBJ_id_smime_aa,17L - -#define SN_id_smime_aa_ets_signerAttr "id-smime-aa-ets-signerAttr" -#define NID_id_smime_aa_ets_signerAttr 229 -#define OBJ_id_smime_aa_ets_signerAttr OBJ_id_smime_aa,18L - -#define SN_id_smime_aa_ets_otherSigCert "id-smime-aa-ets-otherSigCert" -#define NID_id_smime_aa_ets_otherSigCert 230 -#define OBJ_id_smime_aa_ets_otherSigCert OBJ_id_smime_aa,19L - -#define SN_id_smime_aa_ets_contentTimestamp "id-smime-aa-ets-contentTimestamp" -#define NID_id_smime_aa_ets_contentTimestamp 231 -#define OBJ_id_smime_aa_ets_contentTimestamp OBJ_id_smime_aa,20L - -#define SN_id_smime_aa_ets_CertificateRefs "id-smime-aa-ets-CertificateRefs" -#define NID_id_smime_aa_ets_CertificateRefs 232 -#define OBJ_id_smime_aa_ets_CertificateRefs OBJ_id_smime_aa,21L - -#define SN_id_smime_aa_ets_RevocationRefs "id-smime-aa-ets-RevocationRefs" -#define NID_id_smime_aa_ets_RevocationRefs 233 -#define OBJ_id_smime_aa_ets_RevocationRefs OBJ_id_smime_aa,22L - -#define SN_id_smime_aa_ets_certValues "id-smime-aa-ets-certValues" -#define NID_id_smime_aa_ets_certValues 234 -#define OBJ_id_smime_aa_ets_certValues OBJ_id_smime_aa,23L - -#define SN_id_smime_aa_ets_revocationValues "id-smime-aa-ets-revocationValues" -#define NID_id_smime_aa_ets_revocationValues 235 -#define OBJ_id_smime_aa_ets_revocationValues OBJ_id_smime_aa,24L - -#define SN_id_smime_aa_ets_escTimeStamp "id-smime-aa-ets-escTimeStamp" -#define NID_id_smime_aa_ets_escTimeStamp 236 -#define OBJ_id_smime_aa_ets_escTimeStamp OBJ_id_smime_aa,25L - -#define SN_id_smime_aa_ets_certCRLTimestamp "id-smime-aa-ets-certCRLTimestamp" -#define NID_id_smime_aa_ets_certCRLTimestamp 237 -#define OBJ_id_smime_aa_ets_certCRLTimestamp OBJ_id_smime_aa,26L - -#define SN_id_smime_aa_ets_archiveTimeStamp "id-smime-aa-ets-archiveTimeStamp" -#define NID_id_smime_aa_ets_archiveTimeStamp 238 -#define OBJ_id_smime_aa_ets_archiveTimeStamp OBJ_id_smime_aa,27L - -#define SN_id_smime_aa_signatureType "id-smime-aa-signatureType" -#define NID_id_smime_aa_signatureType 239 -#define OBJ_id_smime_aa_signatureType OBJ_id_smime_aa,28L - -#define SN_id_smime_aa_dvcs_dvc "id-smime-aa-dvcs-dvc" -#define NID_id_smime_aa_dvcs_dvc 240 -#define OBJ_id_smime_aa_dvcs_dvc OBJ_id_smime_aa,29L - -#define SN_id_aa_ets_attrCertificateRefs "id-aa-ets-attrCertificateRefs" -#define NID_id_aa_ets_attrCertificateRefs 1261 -#define OBJ_id_aa_ets_attrCertificateRefs OBJ_id_smime_aa,44L - -#define SN_id_aa_ets_attrRevocationRefs "id-aa-ets-attrRevocationRefs" -#define NID_id_aa_ets_attrRevocationRefs 1262 -#define OBJ_id_aa_ets_attrRevocationRefs OBJ_id_smime_aa,45L - -#define SN_id_smime_aa_signingCertificateV2 "id-smime-aa-signingCertificateV2" -#define NID_id_smime_aa_signingCertificateV2 1086 -#define OBJ_id_smime_aa_signingCertificateV2 OBJ_id_smime_aa,47L - -#define SN_id_aa_ets_archiveTimestampV2 "id-aa-ets-archiveTimestampV2" -#define NID_id_aa_ets_archiveTimestampV2 1280 -#define OBJ_id_aa_ets_archiveTimestampV2 OBJ_id_smime_aa,48L - -#define SN_id_smime_alg_ESDHwith3DES "id-smime-alg-ESDHwith3DES" -#define NID_id_smime_alg_ESDHwith3DES 241 -#define OBJ_id_smime_alg_ESDHwith3DES OBJ_id_smime_alg,1L - -#define SN_id_smime_alg_ESDHwithRC2 "id-smime-alg-ESDHwithRC2" -#define NID_id_smime_alg_ESDHwithRC2 242 -#define OBJ_id_smime_alg_ESDHwithRC2 OBJ_id_smime_alg,2L - -#define SN_id_smime_alg_3DESwrap "id-smime-alg-3DESwrap" -#define NID_id_smime_alg_3DESwrap 243 -#define OBJ_id_smime_alg_3DESwrap OBJ_id_smime_alg,3L - -#define SN_id_smime_alg_RC2wrap "id-smime-alg-RC2wrap" -#define NID_id_smime_alg_RC2wrap 244 -#define OBJ_id_smime_alg_RC2wrap OBJ_id_smime_alg,4L - -#define SN_id_smime_alg_ESDH "id-smime-alg-ESDH" -#define NID_id_smime_alg_ESDH 245 -#define OBJ_id_smime_alg_ESDH OBJ_id_smime_alg,5L - -#define SN_id_smime_alg_CMS3DESwrap "id-smime-alg-CMS3DESwrap" -#define NID_id_smime_alg_CMS3DESwrap 246 -#define OBJ_id_smime_alg_CMS3DESwrap OBJ_id_smime_alg,6L - -#define SN_id_smime_alg_CMSRC2wrap "id-smime-alg-CMSRC2wrap" -#define NID_id_smime_alg_CMSRC2wrap 247 -#define OBJ_id_smime_alg_CMSRC2wrap OBJ_id_smime_alg,7L - -#define SN_id_alg_PWRI_KEK "id-alg-PWRI-KEK" -#define NID_id_alg_PWRI_KEK 893 -#define OBJ_id_alg_PWRI_KEK OBJ_id_smime_alg,9L - -#define SN_id_smime_cd_ldap "id-smime-cd-ldap" -#define NID_id_smime_cd_ldap 248 -#define OBJ_id_smime_cd_ldap OBJ_id_smime_cd,1L - -#define SN_id_smime_spq_ets_sqt_uri "id-smime-spq-ets-sqt-uri" -#define NID_id_smime_spq_ets_sqt_uri 249 -#define OBJ_id_smime_spq_ets_sqt_uri OBJ_id_smime_spq,1L - -#define SN_id_smime_spq_ets_sqt_unotice "id-smime-spq-ets-sqt-unotice" -#define NID_id_smime_spq_ets_sqt_unotice 250 -#define OBJ_id_smime_spq_ets_sqt_unotice OBJ_id_smime_spq,2L - -#define SN_id_smime_cti_ets_proofOfOrigin "id-smime-cti-ets-proofOfOrigin" -#define NID_id_smime_cti_ets_proofOfOrigin 251 -#define OBJ_id_smime_cti_ets_proofOfOrigin OBJ_id_smime_cti,1L - -#define SN_id_smime_cti_ets_proofOfReceipt "id-smime-cti-ets-proofOfReceipt" -#define NID_id_smime_cti_ets_proofOfReceipt 252 -#define OBJ_id_smime_cti_ets_proofOfReceipt OBJ_id_smime_cti,2L - -#define SN_id_smime_cti_ets_proofOfDelivery "id-smime-cti-ets-proofOfDelivery" -#define NID_id_smime_cti_ets_proofOfDelivery 253 -#define OBJ_id_smime_cti_ets_proofOfDelivery OBJ_id_smime_cti,3L - -#define SN_id_smime_cti_ets_proofOfSender "id-smime-cti-ets-proofOfSender" -#define NID_id_smime_cti_ets_proofOfSender 254 -#define OBJ_id_smime_cti_ets_proofOfSender OBJ_id_smime_cti,4L - -#define SN_id_smime_cti_ets_proofOfApproval "id-smime-cti-ets-proofOfApproval" -#define NID_id_smime_cti_ets_proofOfApproval 255 -#define OBJ_id_smime_cti_ets_proofOfApproval OBJ_id_smime_cti,5L - -#define SN_id_smime_cti_ets_proofOfCreation "id-smime-cti-ets-proofOfCreation" -#define NID_id_smime_cti_ets_proofOfCreation 256 -#define OBJ_id_smime_cti_ets_proofOfCreation OBJ_id_smime_cti,6L - -#define LN_friendlyName "friendlyName" -#define NID_friendlyName 156 -#define OBJ_friendlyName OBJ_pkcs9,20L - -#define LN_localKeyID "localKeyID" -#define NID_localKeyID 157 -#define OBJ_localKeyID OBJ_pkcs9,21L - -#define OBJ_ms_corp 1L,3L,6L,1L,4L,1L,311L - -#define SN_ms_csp_name "CSPName" -#define LN_ms_csp_name "Microsoft CSP Name" -#define NID_ms_csp_name 417 -#define OBJ_ms_csp_name OBJ_ms_corp,17L,1L - -#define SN_LocalKeySet "LocalKeySet" -#define LN_LocalKeySet "Microsoft Local Key set" -#define NID_LocalKeySet 856 -#define OBJ_LocalKeySet OBJ_ms_corp,17L,2L - -#define OBJ_certTypes OBJ_pkcs9,22L - -#define LN_x509Certificate "x509Certificate" -#define NID_x509Certificate 158 -#define OBJ_x509Certificate OBJ_certTypes,1L - -#define LN_sdsiCertificate "sdsiCertificate" -#define NID_sdsiCertificate 159 -#define OBJ_sdsiCertificate OBJ_certTypes,2L - -#define OBJ_crlTypes OBJ_pkcs9,23L - -#define LN_x509Crl "x509Crl" -#define NID_x509Crl 160 -#define OBJ_x509Crl OBJ_crlTypes,1L - -#define SN_id_aa_CMSAlgorithmProtection "id-aa-CMSAlgorithmProtection" -#define NID_id_aa_CMSAlgorithmProtection 1263 -#define OBJ_id_aa_CMSAlgorithmProtection OBJ_pkcs9,52L - -#define OBJ_pkcs12 OBJ_pkcs,12L - -#define OBJ_pkcs12_pbeids OBJ_pkcs12,1L - -#define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128" -#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4" -#define NID_pbe_WithSHA1And128BitRC4 144 -#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids,1L - -#define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40" -#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4" -#define NID_pbe_WithSHA1And40BitRC4 145 -#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids,2L - -#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES" -#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC" -#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146 -#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids,3L - -#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES" -#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC" -#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147 -#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids,4L - -#define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128" -#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC" -#define NID_pbe_WithSHA1And128BitRC2_CBC 148 -#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids,5L - -#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40" -#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC" -#define NID_pbe_WithSHA1And40BitRC2_CBC 149 -#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids,6L - -#define OBJ_pkcs12_Version1 OBJ_pkcs12,10L - -#define OBJ_pkcs12_BagIds OBJ_pkcs12_Version1,1L - -#define LN_keyBag "keyBag" -#define NID_keyBag 150 -#define OBJ_keyBag OBJ_pkcs12_BagIds,1L - -#define LN_pkcs8ShroudedKeyBag "pkcs8ShroudedKeyBag" -#define NID_pkcs8ShroudedKeyBag 151 -#define OBJ_pkcs8ShroudedKeyBag OBJ_pkcs12_BagIds,2L - -#define LN_certBag "certBag" -#define NID_certBag 152 -#define OBJ_certBag OBJ_pkcs12_BagIds,3L - -#define LN_crlBag "crlBag" -#define NID_crlBag 153 -#define OBJ_crlBag OBJ_pkcs12_BagIds,4L - -#define LN_secretBag "secretBag" -#define NID_secretBag 154 -#define OBJ_secretBag OBJ_pkcs12_BagIds,5L - -#define LN_safeContentsBag "safeContentsBag" -#define NID_safeContentsBag 155 -#define OBJ_safeContentsBag OBJ_pkcs12_BagIds,6L - -#define SN_md2 "MD2" -#define LN_md2 "md2" -#define NID_md2 3 -#define OBJ_md2 OBJ_rsadsi,2L,2L - -#define SN_md4 "MD4" -#define LN_md4 "md4" -#define NID_md4 257 -#define OBJ_md4 OBJ_rsadsi,2L,4L - -#define SN_md5 "MD5" -#define LN_md5 "md5" -#define NID_md5 4 -#define OBJ_md5 OBJ_rsadsi,2L,5L - -#define SN_md5_sha1 "MD5-SHA1" -#define LN_md5_sha1 "md5-sha1" -#define NID_md5_sha1 114 - -#define LN_hmacWithMD5 "hmacWithMD5" -#define NID_hmacWithMD5 797 -#define OBJ_hmacWithMD5 OBJ_rsadsi,2L,6L - -#define LN_hmacWithSHA1 "hmacWithSHA1" -#define NID_hmacWithSHA1 163 -#define OBJ_hmacWithSHA1 OBJ_rsadsi,2L,7L - -#define SN_sm2 "SM2" -#define LN_sm2 "sm2" -#define NID_sm2 1172 -#define OBJ_sm2 OBJ_sm_scheme,301L - -#define SN_sm3 "SM3" -#define LN_sm3 "sm3" -#define NID_sm3 1143 -#define OBJ_sm3 OBJ_sm_scheme,401L - -#define SN_sm3WithRSAEncryption "RSA-SM3" -#define LN_sm3WithRSAEncryption "sm3WithRSAEncryption" -#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_hmacWithSM3 "hmacWithSM3" -#define NID_hmacWithSM3 1281 -#define OBJ_hmacWithSM3 OBJ_sm3,3L,1L - -#define LN_hmacWithSHA224 "hmacWithSHA224" -#define NID_hmacWithSHA224 798 -#define OBJ_hmacWithSHA224 OBJ_rsadsi,2L,8L - -#define LN_hmacWithSHA256 "hmacWithSHA256" -#define NID_hmacWithSHA256 799 -#define OBJ_hmacWithSHA256 OBJ_rsadsi,2L,9L - -#define LN_hmacWithSHA384 "hmacWithSHA384" -#define NID_hmacWithSHA384 800 -#define OBJ_hmacWithSHA384 OBJ_rsadsi,2L,10L - -#define LN_hmacWithSHA512 "hmacWithSHA512" -#define NID_hmacWithSHA512 801 -#define OBJ_hmacWithSHA512 OBJ_rsadsi,2L,11L - -#define LN_hmacWithSHA512_224 "hmacWithSHA512-224" -#define NID_hmacWithSHA512_224 1193 -#define OBJ_hmacWithSHA512_224 OBJ_rsadsi,2L,12L - -#define LN_hmacWithSHA512_256 "hmacWithSHA512-256" -#define NID_hmacWithSHA512_256 1194 -#define OBJ_hmacWithSHA512_256 OBJ_rsadsi,2L,13L - -#define SN_rc2_cbc "RC2-CBC" -#define LN_rc2_cbc "rc2-cbc" -#define NID_rc2_cbc 37 -#define OBJ_rc2_cbc OBJ_rsadsi,3L,2L - -#define SN_rc2_ecb "RC2-ECB" -#define LN_rc2_ecb "rc2-ecb" -#define NID_rc2_ecb 38 - -#define SN_rc2_cfb64 "RC2-CFB" -#define LN_rc2_cfb64 "rc2-cfb" -#define NID_rc2_cfb64 39 - -#define SN_rc2_ofb64 "RC2-OFB" -#define LN_rc2_ofb64 "rc2-ofb" -#define NID_rc2_ofb64 40 - -#define SN_rc2_40_cbc "RC2-40-CBC" -#define LN_rc2_40_cbc "rc2-40-cbc" -#define NID_rc2_40_cbc 98 - -#define SN_rc2_64_cbc "RC2-64-CBC" -#define LN_rc2_64_cbc "rc2-64-cbc" -#define NID_rc2_64_cbc 166 - -#define SN_rc4 "RC4" -#define LN_rc4 "rc4" -#define NID_rc4 5 -#define OBJ_rc4 OBJ_rsadsi,3L,4L - -#define SN_rc4_40 "RC4-40" -#define LN_rc4_40 "rc4-40" -#define NID_rc4_40 97 - -#define SN_des_ede3_cbc "DES-EDE3-CBC" -#define LN_des_ede3_cbc "des-ede3-cbc" -#define NID_des_ede3_cbc 44 -#define OBJ_des_ede3_cbc OBJ_rsadsi,3L,7L - -#define SN_rc5_cbc "RC5-CBC" -#define LN_rc5_cbc "rc5-cbc" -#define NID_rc5_cbc 120 -#define OBJ_rc5_cbc OBJ_rsadsi,3L,8L - -#define SN_rc5_ecb "RC5-ECB" -#define LN_rc5_ecb "rc5-ecb" -#define NID_rc5_ecb 121 - -#define SN_rc5_cfb64 "RC5-CFB" -#define LN_rc5_cfb64 "rc5-cfb" -#define NID_rc5_cfb64 122 - -#define SN_rc5_ofb64 "RC5-OFB" -#define LN_rc5_ofb64 "rc5-ofb" -#define NID_rc5_ofb64 123 - -#define SN_ms_ext_req "msExtReq" -#define LN_ms_ext_req "Microsoft Extension Request" -#define NID_ms_ext_req 171 -#define OBJ_ms_ext_req OBJ_ms_corp,2L,1L,14L - -#define SN_ms_code_ind "msCodeInd" -#define LN_ms_code_ind "Microsoft Individual Code Signing" -#define NID_ms_code_ind 134 -#define OBJ_ms_code_ind OBJ_ms_corp,2L,1L,21L - -#define SN_ms_code_com "msCodeCom" -#define LN_ms_code_com "Microsoft Commercial Code Signing" -#define NID_ms_code_com 135 -#define OBJ_ms_code_com OBJ_ms_corp,2L,1L,22L - -#define SN_ms_ctl_sign "msCTLSign" -#define LN_ms_ctl_sign "Microsoft Trust List Signing" -#define NID_ms_ctl_sign 136 -#define OBJ_ms_ctl_sign OBJ_ms_corp,10L,3L,1L - -#define SN_ms_sgc "msSGC" -#define LN_ms_sgc "Microsoft Server Gated Crypto" -#define NID_ms_sgc 137 -#define OBJ_ms_sgc OBJ_ms_corp,10L,3L,3L - -#define SN_ms_efs "msEFS" -#define LN_ms_efs "Microsoft Encrypted File System" -#define NID_ms_efs 138 -#define OBJ_ms_efs OBJ_ms_corp,10L,3L,4L - -#define SN_ms_smartcard_login "msSmartcardLogin" -#define LN_ms_smartcard_login "Microsoft Smartcard Login" -#define NID_ms_smartcard_login 648 -#define OBJ_ms_smartcard_login OBJ_ms_corp,20L,2L,2L - -#define SN_ms_upn "msUPN" -#define LN_ms_upn "Microsoft User Principal Name" -#define NID_ms_upn 649 -#define OBJ_ms_upn OBJ_ms_corp,20L,2L,3L - -#define SN_ms_ntds_sec_ext "ms-ntds-sec-ext" -#define LN_ms_ntds_sec_ext "Microsoft NTDS CA Extension" -#define NID_ms_ntds_sec_ext 1292 -#define OBJ_ms_ntds_sec_ext OBJ_ms_corp,25L,2L - -#define SN_ms_ntds_obj_sid "ms-ntds-obj-sid" -#define LN_ms_ntds_obj_sid "Microsoft NTDS AD objectSid" -#define NID_ms_ntds_obj_sid 1291 -#define OBJ_ms_ntds_obj_sid OBJ_ms_corp,25L,2L,1L - -#define SN_ms_cert_templ "ms-cert-templ" -#define LN_ms_cert_templ "Microsoft certificate template" -#define NID_ms_cert_templ 1293 -#define OBJ_ms_cert_templ OBJ_ms_corp,21L,7L - -#define SN_ms_app_policies "ms-app-policies" -#define LN_ms_app_policies "Microsoft Application Policies Extension" -#define NID_ms_app_policies 1294 -#define OBJ_ms_app_policies OBJ_ms_corp,21L,10L - -#define SN_idea_cbc "IDEA-CBC" -#define LN_idea_cbc "idea-cbc" -#define NID_idea_cbc 34 -#define OBJ_idea_cbc 1L,3L,6L,1L,4L,1L,188L,7L,1L,1L,2L - -#define SN_idea_ecb "IDEA-ECB" -#define LN_idea_ecb "idea-ecb" -#define NID_idea_ecb 36 - -#define SN_idea_cfb64 "IDEA-CFB" -#define LN_idea_cfb64 "idea-cfb" -#define NID_idea_cfb64 35 - -#define SN_idea_ofb64 "IDEA-OFB" -#define LN_idea_ofb64 "idea-ofb" -#define NID_idea_ofb64 46 - -#define SN_bf_cbc "BF-CBC" -#define LN_bf_cbc "bf-cbc" -#define NID_bf_cbc 91 -#define OBJ_bf_cbc 1L,3L,6L,1L,4L,1L,3029L,1L,2L - -#define SN_bf_ecb "BF-ECB" -#define LN_bf_ecb "bf-ecb" -#define NID_bf_ecb 92 - -#define SN_bf_cfb64 "BF-CFB" -#define LN_bf_cfb64 "bf-cfb" -#define NID_bf_cfb64 93 - -#define SN_bf_ofb64 "BF-OFB" -#define LN_bf_ofb64 "bf-ofb" -#define NID_bf_ofb64 94 - -#define SN_id_pkix "PKIX" -#define NID_id_pkix 127 -#define OBJ_id_pkix 1L,3L,6L,1L,5L,5L,7L - -#define SN_id_pkix_mod "id-pkix-mod" -#define NID_id_pkix_mod 258 -#define OBJ_id_pkix_mod OBJ_id_pkix,0L - -#define SN_id_pe "id-pe" -#define NID_id_pe 175 -#define OBJ_id_pe OBJ_id_pkix,1L - -#define SN_id_qt "id-qt" -#define NID_id_qt 259 -#define OBJ_id_qt OBJ_id_pkix,2L - -#define SN_id_kp "id-kp" -#define NID_id_kp 128 -#define OBJ_id_kp OBJ_id_pkix,3L - -#define SN_id_it "id-it" -#define NID_id_it 260 -#define OBJ_id_it OBJ_id_pkix,4L - -#define SN_id_pkip "id-pkip" -#define NID_id_pkip 261 -#define OBJ_id_pkip OBJ_id_pkix,5L - -#define SN_id_alg "id-alg" -#define NID_id_alg 262 -#define OBJ_id_alg OBJ_id_pkix,6L - -#define SN_id_cmc "id-cmc" -#define NID_id_cmc 263 -#define OBJ_id_cmc OBJ_id_pkix,7L - -#define SN_id_on "id-on" -#define NID_id_on 264 -#define OBJ_id_on OBJ_id_pkix,8L - -#define SN_id_pda "id-pda" -#define NID_id_pda 265 -#define OBJ_id_pda OBJ_id_pkix,9L - -#define SN_id_aca "id-aca" -#define NID_id_aca 266 -#define OBJ_id_aca OBJ_id_pkix,10L - -#define SN_id_qcs "id-qcs" -#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 - -#define SN_id_ppl "id-ppl" -#define NID_id_ppl 662 -#define OBJ_id_ppl OBJ_id_pkix,21L - -#define SN_id_ad "id-ad" -#define NID_id_ad 176 -#define OBJ_id_ad OBJ_id_pkix,48L - -#define SN_id_pkix1_explicit_88 "id-pkix1-explicit-88" -#define NID_id_pkix1_explicit_88 269 -#define OBJ_id_pkix1_explicit_88 OBJ_id_pkix_mod,1L - -#define SN_id_pkix1_implicit_88 "id-pkix1-implicit-88" -#define NID_id_pkix1_implicit_88 270 -#define OBJ_id_pkix1_implicit_88 OBJ_id_pkix_mod,2L - -#define SN_id_pkix1_explicit_93 "id-pkix1-explicit-93" -#define NID_id_pkix1_explicit_93 271 -#define OBJ_id_pkix1_explicit_93 OBJ_id_pkix_mod,3L - -#define SN_id_pkix1_implicit_93 "id-pkix1-implicit-93" -#define NID_id_pkix1_implicit_93 272 -#define OBJ_id_pkix1_implicit_93 OBJ_id_pkix_mod,4L - -#define SN_id_mod_crmf "id-mod-crmf" -#define NID_id_mod_crmf 273 -#define OBJ_id_mod_crmf OBJ_id_pkix_mod,5L - -#define SN_id_mod_cmc "id-mod-cmc" -#define NID_id_mod_cmc 274 -#define OBJ_id_mod_cmc OBJ_id_pkix_mod,6L - -#define SN_id_mod_kea_profile_88 "id-mod-kea-profile-88" -#define NID_id_mod_kea_profile_88 275 -#define OBJ_id_mod_kea_profile_88 OBJ_id_pkix_mod,7L - -#define SN_id_mod_kea_profile_93 "id-mod-kea-profile-93" -#define NID_id_mod_kea_profile_93 276 -#define OBJ_id_mod_kea_profile_93 OBJ_id_pkix_mod,8L - -#define SN_id_mod_cmp "id-mod-cmp" -#define NID_id_mod_cmp 277 -#define OBJ_id_mod_cmp OBJ_id_pkix_mod,9L - -#define SN_id_mod_qualified_cert_88 "id-mod-qualified-cert-88" -#define NID_id_mod_qualified_cert_88 278 -#define OBJ_id_mod_qualified_cert_88 OBJ_id_pkix_mod,10L - -#define SN_id_mod_qualified_cert_93 "id-mod-qualified-cert-93" -#define NID_id_mod_qualified_cert_93 279 -#define OBJ_id_mod_qualified_cert_93 OBJ_id_pkix_mod,11L - -#define SN_id_mod_attribute_cert "id-mod-attribute-cert" -#define NID_id_mod_attribute_cert 280 -#define OBJ_id_mod_attribute_cert OBJ_id_pkix_mod,12L - -#define SN_id_mod_timestamp_protocol "id-mod-timestamp-protocol" -#define NID_id_mod_timestamp_protocol 281 -#define OBJ_id_mod_timestamp_protocol OBJ_id_pkix_mod,13L - -#define SN_id_mod_ocsp "id-mod-ocsp" -#define NID_id_mod_ocsp 282 -#define OBJ_id_mod_ocsp OBJ_id_pkix_mod,14L - -#define SN_id_mod_dvcs "id-mod-dvcs" -#define NID_id_mod_dvcs 283 -#define OBJ_id_mod_dvcs OBJ_id_pkix_mod,15L - -#define SN_id_mod_cmp2000 "id-mod-cmp2000" -#define NID_id_mod_cmp2000 284 -#define OBJ_id_mod_cmp2000 OBJ_id_pkix_mod,16L - -#define SN_id_mod_cmp2000_02 "id-mod-cmp2000-02" -#define NID_id_mod_cmp2000_02 1251 -#define OBJ_id_mod_cmp2000_02 OBJ_id_pkix_mod,50L - -#define SN_id_mod_cmp2021_88 "id-mod-cmp2021-88" -#define NID_id_mod_cmp2021_88 1252 -#define OBJ_id_mod_cmp2021_88 OBJ_id_pkix_mod,99L - -#define SN_id_mod_cmp2021_02 "id-mod-cmp2021-02" -#define NID_id_mod_cmp2021_02 1253 -#define OBJ_id_mod_cmp2021_02 OBJ_id_pkix_mod,100L - -#define SN_info_access "authorityInfoAccess" -#define LN_info_access "Authority Information Access" -#define NID_info_access 177 -#define OBJ_info_access OBJ_id_pe,1L - -#define SN_biometricInfo "biometricInfo" -#define LN_biometricInfo "Biometric Info" -#define NID_biometricInfo 285 -#define OBJ_biometricInfo OBJ_id_pe,2L - -#define SN_qcStatements "qcStatements" -#define NID_qcStatements 286 -#define OBJ_qcStatements OBJ_id_pe,3L - -#define SN_ac_auditEntity "ac-auditEntity" -#define NID_ac_auditEntity 287 -#define OBJ_ac_auditEntity OBJ_id_pe,4L - -#define SN_ac_targeting "ac-targeting" -#define NID_ac_targeting 288 -#define OBJ_ac_targeting OBJ_id_pe,5L - -#define SN_aaControls "aaControls" -#define NID_aaControls 289 -#define OBJ_aaControls OBJ_id_pe,6L - -#define SN_sbgp_ipAddrBlock "sbgp-ipAddrBlock" -#define NID_sbgp_ipAddrBlock 290 -#define OBJ_sbgp_ipAddrBlock OBJ_id_pe,7L - -#define SN_sbgp_autonomousSysNum "sbgp-autonomousSysNum" -#define NID_sbgp_autonomousSysNum 291 -#define OBJ_sbgp_autonomousSysNum OBJ_id_pe,8L - -#define SN_sbgp_routerIdentifier "sbgp-routerIdentifier" -#define NID_sbgp_routerIdentifier 292 -#define OBJ_sbgp_routerIdentifier OBJ_id_pe,9L - -#define SN_ac_proxying "ac-proxying" -#define NID_ac_proxying 397 -#define OBJ_ac_proxying OBJ_id_pe,10L - -#define SN_sinfo_access "subjectInfoAccess" -#define LN_sinfo_access "Subject Information Access" -#define NID_sinfo_access 398 -#define OBJ_sinfo_access OBJ_id_pe,11L - -#define SN_proxyCertInfo "proxyCertInfo" -#define LN_proxyCertInfo "Proxy Certificate Information" -#define NID_proxyCertInfo 663 -#define OBJ_proxyCertInfo OBJ_id_pe,14L - -#define SN_tlsfeature "tlsfeature" -#define LN_tlsfeature "TLS Feature" -#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 -#define OBJ_id_qt_cps OBJ_id_qt,1L - -#define SN_id_qt_unotice "id-qt-unotice" -#define LN_id_qt_unotice "Policy Qualifier User Notice" -#define NID_id_qt_unotice 165 -#define OBJ_id_qt_unotice OBJ_id_qt,2L - -#define SN_textNotice "textNotice" -#define NID_textNotice 293 -#define OBJ_textNotice OBJ_id_qt,3L - -#define SN_server_auth "serverAuth" -#define LN_server_auth "TLS Web Server Authentication" -#define NID_server_auth 129 -#define OBJ_server_auth OBJ_id_kp,1L - -#define SN_client_auth "clientAuth" -#define LN_client_auth "TLS Web Client Authentication" -#define NID_client_auth 130 -#define OBJ_client_auth OBJ_id_kp,2L - -#define SN_code_sign "codeSigning" -#define LN_code_sign "Code Signing" -#define NID_code_sign 131 -#define OBJ_code_sign OBJ_id_kp,3L - -#define SN_email_protect "emailProtection" -#define LN_email_protect "E-mail Protection" -#define NID_email_protect 132 -#define OBJ_email_protect OBJ_id_kp,4L - -#define SN_ipsecEndSystem "ipsecEndSystem" -#define LN_ipsecEndSystem "IPSec End System" -#define NID_ipsecEndSystem 294 -#define OBJ_ipsecEndSystem OBJ_id_kp,5L - -#define SN_ipsecTunnel "ipsecTunnel" -#define LN_ipsecTunnel "IPSec Tunnel" -#define NID_ipsecTunnel 295 -#define OBJ_ipsecTunnel OBJ_id_kp,6L - -#define SN_ipsecUser "ipsecUser" -#define LN_ipsecUser "IPSec User" -#define NID_ipsecUser 296 -#define OBJ_ipsecUser OBJ_id_kp,7L - -#define SN_time_stamp "timeStamping" -#define LN_time_stamp "Time Stamping" -#define NID_time_stamp 133 -#define OBJ_time_stamp OBJ_id_kp,8L - -#define SN_OCSP_sign "OCSPSigning" -#define LN_OCSP_sign "OCSP Signing" -#define NID_OCSP_sign 180 -#define OBJ_OCSP_sign OBJ_id_kp,9L - -#define SN_dvcs "DVCS" -#define LN_dvcs "dvcs" -#define NID_dvcs 297 -#define OBJ_dvcs OBJ_id_kp,10L - -#define SN_ipsec_IKE "ipsecIKE" -#define LN_ipsec_IKE "ipsec Internet Key Exchange" -#define NID_ipsec_IKE 1022 -#define OBJ_ipsec_IKE OBJ_id_kp,17L - -#define SN_capwapAC "capwapAC" -#define LN_capwapAC "Ctrl/provision WAP Access" -#define NID_capwapAC 1023 -#define OBJ_capwapAC OBJ_id_kp,18L - -#define SN_capwapWTP "capwapWTP" -#define LN_capwapWTP "Ctrl/Provision WAP Termination" -#define NID_capwapWTP 1024 -#define OBJ_capwapWTP OBJ_id_kp,19L - -#define SN_sshClient "secureShellClient" -#define LN_sshClient "SSH Client" -#define NID_sshClient 1025 -#define OBJ_sshClient OBJ_id_kp,21L - -#define SN_sshServer "secureShellServer" -#define LN_sshServer "SSH Server" -#define NID_sshServer 1026 -#define OBJ_sshServer OBJ_id_kp,22L - -#define SN_sendRouter "sendRouter" -#define LN_sendRouter "Send Router" -#define NID_sendRouter 1027 -#define OBJ_sendRouter OBJ_id_kp,23L - -#define SN_sendProxiedRouter "sendProxiedRouter" -#define LN_sendProxiedRouter "Send Proxied Router" -#define NID_sendProxiedRouter 1028 -#define OBJ_sendProxiedRouter OBJ_id_kp,24L - -#define SN_sendOwner "sendOwner" -#define LN_sendOwner "Send Owner" -#define NID_sendOwner 1029 -#define OBJ_sendOwner OBJ_id_kp,25L - -#define SN_sendProxiedOwner "sendProxiedOwner" -#define LN_sendProxiedOwner "Send Proxied Owner" -#define NID_sendProxiedOwner 1030 -#define OBJ_sendProxiedOwner OBJ_id_kp,26L - -#define SN_cmcCA "cmcCA" -#define LN_cmcCA "CMC Certificate Authority" -#define NID_cmcCA 1131 -#define OBJ_cmcCA OBJ_id_kp,27L - -#define SN_cmcRA "cmcRA" -#define LN_cmcRA "CMC Registration Authority" -#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 - -#define SN_id_it_signKeyPairTypes "id-it-signKeyPairTypes" -#define NID_id_it_signKeyPairTypes 299 -#define OBJ_id_it_signKeyPairTypes OBJ_id_it,2L - -#define SN_id_it_encKeyPairTypes "id-it-encKeyPairTypes" -#define NID_id_it_encKeyPairTypes 300 -#define OBJ_id_it_encKeyPairTypes OBJ_id_it,3L - -#define SN_id_it_preferredSymmAlg "id-it-preferredSymmAlg" -#define NID_id_it_preferredSymmAlg 301 -#define OBJ_id_it_preferredSymmAlg OBJ_id_it,4L - -#define SN_id_it_caKeyUpdateInfo "id-it-caKeyUpdateInfo" -#define NID_id_it_caKeyUpdateInfo 302 -#define OBJ_id_it_caKeyUpdateInfo OBJ_id_it,5L - -#define SN_id_it_currentCRL "id-it-currentCRL" -#define NID_id_it_currentCRL 303 -#define OBJ_id_it_currentCRL OBJ_id_it,6L - -#define SN_id_it_unsupportedOIDs "id-it-unsupportedOIDs" -#define NID_id_it_unsupportedOIDs 304 -#define OBJ_id_it_unsupportedOIDs OBJ_id_it,7L - -#define SN_id_it_subscriptionRequest "id-it-subscriptionRequest" -#define NID_id_it_subscriptionRequest 305 -#define OBJ_id_it_subscriptionRequest OBJ_id_it,8L - -#define SN_id_it_subscriptionResponse "id-it-subscriptionResponse" -#define NID_id_it_subscriptionResponse 306 -#define OBJ_id_it_subscriptionResponse OBJ_id_it,9L - -#define SN_id_it_keyPairParamReq "id-it-keyPairParamReq" -#define NID_id_it_keyPairParamReq 307 -#define OBJ_id_it_keyPairParamReq OBJ_id_it,10L - -#define SN_id_it_keyPairParamRep "id-it-keyPairParamRep" -#define NID_id_it_keyPairParamRep 308 -#define OBJ_id_it_keyPairParamRep OBJ_id_it,11L - -#define SN_id_it_revPassphrase "id-it-revPassphrase" -#define NID_id_it_revPassphrase 309 -#define OBJ_id_it_revPassphrase OBJ_id_it,12L - -#define SN_id_it_implicitConfirm "id-it-implicitConfirm" -#define NID_id_it_implicitConfirm 310 -#define OBJ_id_it_implicitConfirm OBJ_id_it,13L - -#define SN_id_it_confirmWaitTime "id-it-confirmWaitTime" -#define NID_id_it_confirmWaitTime 311 -#define OBJ_id_it_confirmWaitTime OBJ_id_it,14L - -#define SN_id_it_origPKIMessage "id-it-origPKIMessage" -#define NID_id_it_origPKIMessage 312 -#define OBJ_id_it_origPKIMessage OBJ_id_it,15L - -#define SN_id_it_suppLangTags "id-it-suppLangTags" -#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_it_rootCaCert "id-it-rootCaCert" -#define NID_id_it_rootCaCert 1254 -#define OBJ_id_it_rootCaCert OBJ_id_it,20L - -#define SN_id_it_certProfile "id-it-certProfile" -#define NID_id_it_certProfile 1255 -#define OBJ_id_it_certProfile OBJ_id_it,21L - -#define SN_id_it_crlStatusList "id-it-crlStatusList" -#define NID_id_it_crlStatusList 1256 -#define OBJ_id_it_crlStatusList OBJ_id_it,22L - -#define SN_id_it_crls "id-it-crls" -#define NID_id_it_crls 1257 -#define OBJ_id_it_crls OBJ_id_it,23L - -#define SN_id_regCtrl "id-regCtrl" -#define NID_id_regCtrl 313 -#define OBJ_id_regCtrl OBJ_id_pkip,1L - -#define SN_id_regInfo "id-regInfo" -#define NID_id_regInfo 314 -#define OBJ_id_regInfo OBJ_id_pkip,2L - -#define SN_id_regCtrl_regToken "id-regCtrl-regToken" -#define NID_id_regCtrl_regToken 315 -#define OBJ_id_regCtrl_regToken OBJ_id_regCtrl,1L - -#define SN_id_regCtrl_authenticator "id-regCtrl-authenticator" -#define NID_id_regCtrl_authenticator 316 -#define OBJ_id_regCtrl_authenticator OBJ_id_regCtrl,2L - -#define SN_id_regCtrl_pkiPublicationInfo "id-regCtrl-pkiPublicationInfo" -#define NID_id_regCtrl_pkiPublicationInfo 317 -#define OBJ_id_regCtrl_pkiPublicationInfo OBJ_id_regCtrl,3L - -#define SN_id_regCtrl_pkiArchiveOptions "id-regCtrl-pkiArchiveOptions" -#define NID_id_regCtrl_pkiArchiveOptions 318 -#define OBJ_id_regCtrl_pkiArchiveOptions OBJ_id_regCtrl,4L - -#define SN_id_regCtrl_oldCertID "id-regCtrl-oldCertID" -#define NID_id_regCtrl_oldCertID 319 -#define OBJ_id_regCtrl_oldCertID OBJ_id_regCtrl,5L - -#define SN_id_regCtrl_protocolEncrKey "id-regCtrl-protocolEncrKey" -#define NID_id_regCtrl_protocolEncrKey 320 -#define OBJ_id_regCtrl_protocolEncrKey OBJ_id_regCtrl,6L - -#define SN_id_regCtrl_altCertTemplate "id-regCtrl-altCertTemplate" -#define NID_id_regCtrl_altCertTemplate 1258 -#define OBJ_id_regCtrl_altCertTemplate OBJ_id_regCtrl,7L - -#define SN_id_regCtrl_algId "id-regCtrl-algId" -#define NID_id_regCtrl_algId 1259 -#define OBJ_id_regCtrl_algId OBJ_id_regCtrl,11L - -#define SN_id_regCtrl_rsaKeyLen "id-regCtrl-rsaKeyLen" -#define NID_id_regCtrl_rsaKeyLen 1260 -#define OBJ_id_regCtrl_rsaKeyLen OBJ_id_regCtrl,12L - -#define SN_id_regInfo_utf8Pairs "id-regInfo-utf8Pairs" -#define NID_id_regInfo_utf8Pairs 321 -#define OBJ_id_regInfo_utf8Pairs OBJ_id_regInfo,1L - -#define SN_id_regInfo_certReq "id-regInfo-certReq" -#define NID_id_regInfo_certReq 322 -#define OBJ_id_regInfo_certReq OBJ_id_regInfo,2L - -#define SN_id_alg_des40 "id-alg-des40" -#define NID_id_alg_des40 323 -#define OBJ_id_alg_des40 OBJ_id_alg,1L - -#define SN_id_alg_noSignature "id-alg-noSignature" -#define NID_id_alg_noSignature 324 -#define OBJ_id_alg_noSignature OBJ_id_alg,2L - -#define SN_id_alg_dh_sig_hmac_sha1 "id-alg-dh-sig-hmac-sha1" -#define NID_id_alg_dh_sig_hmac_sha1 325 -#define OBJ_id_alg_dh_sig_hmac_sha1 OBJ_id_alg,3L - -#define SN_id_alg_dh_pop "id-alg-dh-pop" -#define NID_id_alg_dh_pop 326 -#define OBJ_id_alg_dh_pop OBJ_id_alg,4L - -#define SN_id_cmc_statusInfo "id-cmc-statusInfo" -#define NID_id_cmc_statusInfo 327 -#define OBJ_id_cmc_statusInfo OBJ_id_cmc,1L - -#define SN_id_cmc_identification "id-cmc-identification" -#define NID_id_cmc_identification 328 -#define OBJ_id_cmc_identification OBJ_id_cmc,2L - -#define SN_id_cmc_identityProof "id-cmc-identityProof" -#define NID_id_cmc_identityProof 329 -#define OBJ_id_cmc_identityProof OBJ_id_cmc,3L - -#define SN_id_cmc_dataReturn "id-cmc-dataReturn" -#define NID_id_cmc_dataReturn 330 -#define OBJ_id_cmc_dataReturn OBJ_id_cmc,4L - -#define SN_id_cmc_transactionId "id-cmc-transactionId" -#define NID_id_cmc_transactionId 331 -#define OBJ_id_cmc_transactionId OBJ_id_cmc,5L - -#define SN_id_cmc_senderNonce "id-cmc-senderNonce" -#define NID_id_cmc_senderNonce 332 -#define OBJ_id_cmc_senderNonce OBJ_id_cmc,6L - -#define SN_id_cmc_recipientNonce "id-cmc-recipientNonce" -#define NID_id_cmc_recipientNonce 333 -#define OBJ_id_cmc_recipientNonce OBJ_id_cmc,7L - -#define SN_id_cmc_addExtensions "id-cmc-addExtensions" -#define NID_id_cmc_addExtensions 334 -#define OBJ_id_cmc_addExtensions OBJ_id_cmc,8L - -#define SN_id_cmc_encryptedPOP "id-cmc-encryptedPOP" -#define NID_id_cmc_encryptedPOP 335 -#define OBJ_id_cmc_encryptedPOP OBJ_id_cmc,9L - -#define SN_id_cmc_decryptedPOP "id-cmc-decryptedPOP" -#define NID_id_cmc_decryptedPOP 336 -#define OBJ_id_cmc_decryptedPOP OBJ_id_cmc,10L - -#define SN_id_cmc_lraPOPWitness "id-cmc-lraPOPWitness" -#define NID_id_cmc_lraPOPWitness 337 -#define OBJ_id_cmc_lraPOPWitness OBJ_id_cmc,11L - -#define SN_id_cmc_getCert "id-cmc-getCert" -#define NID_id_cmc_getCert 338 -#define OBJ_id_cmc_getCert OBJ_id_cmc,15L - -#define SN_id_cmc_getCRL "id-cmc-getCRL" -#define NID_id_cmc_getCRL 339 -#define OBJ_id_cmc_getCRL OBJ_id_cmc,16L - -#define SN_id_cmc_revokeRequest "id-cmc-revokeRequest" -#define NID_id_cmc_revokeRequest 340 -#define OBJ_id_cmc_revokeRequest OBJ_id_cmc,17L - -#define SN_id_cmc_regInfo "id-cmc-regInfo" -#define NID_id_cmc_regInfo 341 -#define OBJ_id_cmc_regInfo OBJ_id_cmc,18L - -#define SN_id_cmc_responseInfo "id-cmc-responseInfo" -#define NID_id_cmc_responseInfo 342 -#define OBJ_id_cmc_responseInfo OBJ_id_cmc,19L - -#define SN_id_cmc_queryPending "id-cmc-queryPending" -#define NID_id_cmc_queryPending 343 -#define OBJ_id_cmc_queryPending OBJ_id_cmc,21L - -#define SN_id_cmc_popLinkRandom "id-cmc-popLinkRandom" -#define NID_id_cmc_popLinkRandom 344 -#define OBJ_id_cmc_popLinkRandom OBJ_id_cmc,22L - -#define SN_id_cmc_popLinkWitness "id-cmc-popLinkWitness" -#define NID_id_cmc_popLinkWitness 345 -#define OBJ_id_cmc_popLinkWitness OBJ_id_cmc,23L - -#define SN_id_cmc_confirmCertAcceptance "id-cmc-confirmCertAcceptance" -#define NID_id_cmc_confirmCertAcceptance 346 -#define OBJ_id_cmc_confirmCertAcceptance OBJ_id_cmc,24L - -#define SN_id_on_personalData "id-on-personalData" -#define NID_id_on_personalData 347 -#define OBJ_id_on_personalData OBJ_id_on,1L - -#define SN_id_on_permanentIdentifier "id-on-permanentIdentifier" -#define LN_id_on_permanentIdentifier "Permanent Identifier" -#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 - -#define SN_id_pda_placeOfBirth "id-pda-placeOfBirth" -#define NID_id_pda_placeOfBirth 349 -#define OBJ_id_pda_placeOfBirth OBJ_id_pda,2L - -#define SN_id_pda_gender "id-pda-gender" -#define NID_id_pda_gender 351 -#define OBJ_id_pda_gender OBJ_id_pda,3L - -#define SN_id_pda_countryOfCitizenship "id-pda-countryOfCitizenship" -#define NID_id_pda_countryOfCitizenship 352 -#define OBJ_id_pda_countryOfCitizenship OBJ_id_pda,4L - -#define SN_id_pda_countryOfResidence "id-pda-countryOfResidence" -#define NID_id_pda_countryOfResidence 353 -#define OBJ_id_pda_countryOfResidence OBJ_id_pda,5L - -#define SN_id_aca_authenticationInfo "id-aca-authenticationInfo" -#define NID_id_aca_authenticationInfo 354 -#define OBJ_id_aca_authenticationInfo OBJ_id_aca,1L - -#define SN_id_aca_accessIdentity "id-aca-accessIdentity" -#define NID_id_aca_accessIdentity 355 -#define OBJ_id_aca_accessIdentity OBJ_id_aca,2L - -#define SN_id_aca_chargingIdentity "id-aca-chargingIdentity" -#define NID_id_aca_chargingIdentity 356 -#define OBJ_id_aca_chargingIdentity OBJ_id_aca,3L - -#define SN_id_aca_group "id-aca-group" -#define NID_id_aca_group 357 -#define OBJ_id_aca_group OBJ_id_aca,4L - -#define SN_id_aca_role "id-aca-role" -#define NID_id_aca_role 358 -#define OBJ_id_aca_role OBJ_id_aca,5L - -#define SN_id_aca_encAttrs "id-aca-encAttrs" -#define NID_id_aca_encAttrs 399 -#define OBJ_id_aca_encAttrs OBJ_id_aca,6L - -#define SN_id_qcs_pkixQCSyntax_v1 "id-qcs-pkixQCSyntax-v1" -#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 - -#define SN_id_cct_PKIData "id-cct-PKIData" -#define NID_id_cct_PKIData 361 -#define OBJ_id_cct_PKIData OBJ_id_cct,2L - -#define SN_id_cct_PKIResponse "id-cct-PKIResponse" -#define NID_id_cct_PKIResponse 362 -#define OBJ_id_cct_PKIResponse OBJ_id_cct,3L - -#define SN_id_ppl_anyLanguage "id-ppl-anyLanguage" -#define LN_id_ppl_anyLanguage "Any language" -#define NID_id_ppl_anyLanguage 664 -#define OBJ_id_ppl_anyLanguage OBJ_id_ppl,0L - -#define SN_id_ppl_inheritAll "id-ppl-inheritAll" -#define LN_id_ppl_inheritAll "Inherit all" -#define NID_id_ppl_inheritAll 665 -#define OBJ_id_ppl_inheritAll OBJ_id_ppl,1L - -#define SN_Independent "id-ppl-independent" -#define LN_Independent "Independent" -#define NID_Independent 667 -#define OBJ_Independent OBJ_id_ppl,2L - -#define SN_ad_OCSP "OCSP" -#define LN_ad_OCSP "OCSP" -#define NID_ad_OCSP 178 -#define OBJ_ad_OCSP OBJ_id_ad,1L - -#define SN_ad_ca_issuers "caIssuers" -#define LN_ad_ca_issuers "CA Issuers" -#define NID_ad_ca_issuers 179 -#define OBJ_ad_ca_issuers OBJ_id_ad,2L - -#define SN_ad_timeStamping "ad_timestamping" -#define LN_ad_timeStamping "AD Time Stamping" -#define NID_ad_timeStamping 363 -#define OBJ_ad_timeStamping OBJ_id_ad,3L - -#define SN_ad_dvcs "AD_DVCS" -#define LN_ad_dvcs "ad dvcs" -#define NID_ad_dvcs 364 -#define OBJ_ad_dvcs OBJ_id_ad,4L - -#define SN_caRepository "caRepository" -#define LN_caRepository "CA Repository" -#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" -#define LN_id_pkix_OCSP_basic "Basic OCSP Response" -#define NID_id_pkix_OCSP_basic 365 -#define OBJ_id_pkix_OCSP_basic OBJ_id_pkix_OCSP,1L - -#define SN_id_pkix_OCSP_Nonce "Nonce" -#define LN_id_pkix_OCSP_Nonce "OCSP Nonce" -#define NID_id_pkix_OCSP_Nonce 366 -#define OBJ_id_pkix_OCSP_Nonce OBJ_id_pkix_OCSP,2L - -#define SN_id_pkix_OCSP_CrlID "CrlID" -#define LN_id_pkix_OCSP_CrlID "OCSP CRL ID" -#define NID_id_pkix_OCSP_CrlID 367 -#define OBJ_id_pkix_OCSP_CrlID OBJ_id_pkix_OCSP,3L - -#define SN_id_pkix_OCSP_acceptableResponses "acceptableResponses" -#define LN_id_pkix_OCSP_acceptableResponses "Acceptable OCSP Responses" -#define NID_id_pkix_OCSP_acceptableResponses 368 -#define OBJ_id_pkix_OCSP_acceptableResponses OBJ_id_pkix_OCSP,4L - -#define SN_id_pkix_OCSP_noCheck "noCheck" -#define LN_id_pkix_OCSP_noCheck "OCSP No Check" -#define NID_id_pkix_OCSP_noCheck 369 -#define OBJ_id_pkix_OCSP_noCheck OBJ_id_pkix_OCSP,5L - -#define SN_id_pkix_OCSP_archiveCutoff "archiveCutoff" -#define LN_id_pkix_OCSP_archiveCutoff "OCSP Archive Cutoff" -#define NID_id_pkix_OCSP_archiveCutoff 370 -#define OBJ_id_pkix_OCSP_archiveCutoff OBJ_id_pkix_OCSP,6L - -#define SN_id_pkix_OCSP_serviceLocator "serviceLocator" -#define LN_id_pkix_OCSP_serviceLocator "OCSP Service Locator" -#define NID_id_pkix_OCSP_serviceLocator 371 -#define OBJ_id_pkix_OCSP_serviceLocator OBJ_id_pkix_OCSP,7L - -#define SN_id_pkix_OCSP_extendedStatus "extendedStatus" -#define LN_id_pkix_OCSP_extendedStatus "Extended OCSP Status" -#define NID_id_pkix_OCSP_extendedStatus 372 -#define OBJ_id_pkix_OCSP_extendedStatus OBJ_id_pkix_OCSP,8L - -#define SN_id_pkix_OCSP_valid "valid" -#define NID_id_pkix_OCSP_valid 373 -#define OBJ_id_pkix_OCSP_valid OBJ_id_pkix_OCSP,9L - -#define SN_id_pkix_OCSP_path "path" -#define NID_id_pkix_OCSP_path 374 -#define OBJ_id_pkix_OCSP_path OBJ_id_pkix_OCSP,10L - -#define SN_id_pkix_OCSP_trustRoot "trustRoot" -#define LN_id_pkix_OCSP_trustRoot "Trust Root" -#define NID_id_pkix_OCSP_trustRoot 375 -#define OBJ_id_pkix_OCSP_trustRoot OBJ_id_pkix_OCSP,11L - -#define SN_algorithm "algorithm" -#define LN_algorithm "algorithm" -#define NID_algorithm 376 -#define OBJ_algorithm 1L,3L,14L,3L,2L - -#define SN_md5WithRSA "RSA-NP-MD5" -#define LN_md5WithRSA "md5WithRSA" -#define NID_md5WithRSA 104 -#define OBJ_md5WithRSA OBJ_algorithm,3L - -#define SN_des_ecb "DES-ECB" -#define LN_des_ecb "des-ecb" -#define NID_des_ecb 29 -#define OBJ_des_ecb OBJ_algorithm,6L - -#define SN_des_cbc "DES-CBC" -#define LN_des_cbc "des-cbc" -#define NID_des_cbc 31 -#define OBJ_des_cbc OBJ_algorithm,7L - -#define SN_des_ofb64 "DES-OFB" -#define LN_des_ofb64 "des-ofb" -#define NID_des_ofb64 45 -#define OBJ_des_ofb64 OBJ_algorithm,8L - -#define SN_des_cfb64 "DES-CFB" -#define LN_des_cfb64 "des-cfb" -#define NID_des_cfb64 30 -#define OBJ_des_cfb64 OBJ_algorithm,9L - -#define SN_rsaSignature "rsaSignature" -#define NID_rsaSignature 377 -#define OBJ_rsaSignature OBJ_algorithm,11L - -#define SN_dsa_2 "DSA-old" -#define LN_dsa_2 "dsaEncryption-old" -#define NID_dsa_2 67 -#define OBJ_dsa_2 OBJ_algorithm,12L - -#define SN_dsaWithSHA "DSA-SHA" -#define LN_dsaWithSHA "dsaWithSHA" -#define NID_dsaWithSHA 66 -#define OBJ_dsaWithSHA OBJ_algorithm,13L - -#define SN_shaWithRSAEncryption "RSA-SHA" -#define LN_shaWithRSAEncryption "shaWithRSAEncryption" -#define NID_shaWithRSAEncryption 42 -#define OBJ_shaWithRSAEncryption OBJ_algorithm,15L - -#define SN_des_ede_ecb "DES-EDE" -#define LN_des_ede_ecb "des-ede" -#define NID_des_ede_ecb 32 -#define OBJ_des_ede_ecb OBJ_algorithm,17L - -#define SN_des_ede3_ecb "DES-EDE3" -#define LN_des_ede3_ecb "des-ede3" -#define NID_des_ede3_ecb 33 - -#define SN_des_ede_cbc "DES-EDE-CBC" -#define LN_des_ede_cbc "des-ede-cbc" -#define NID_des_ede_cbc 43 - -#define SN_des_ede_cfb64 "DES-EDE-CFB" -#define LN_des_ede_cfb64 "des-ede-cfb" -#define NID_des_ede_cfb64 60 - -#define SN_des_ede3_cfb64 "DES-EDE3-CFB" -#define LN_des_ede3_cfb64 "des-ede3-cfb" -#define NID_des_ede3_cfb64 61 - -#define SN_des_ede_ofb64 "DES-EDE-OFB" -#define LN_des_ede_ofb64 "des-ede-ofb" -#define NID_des_ede_ofb64 62 - -#define SN_des_ede3_ofb64 "DES-EDE3-OFB" -#define LN_des_ede3_ofb64 "des-ede3-ofb" -#define NID_des_ede3_ofb64 63 - -#define SN_desx_cbc "DESX-CBC" -#define LN_desx_cbc "desx-cbc" -#define NID_desx_cbc 80 - -#define SN_sha "SHA" -#define LN_sha "sha" -#define NID_sha 41 -#define OBJ_sha OBJ_algorithm,18L - -#define SN_sha1 "SHA1" -#define LN_sha1 "sha1" -#define NID_sha1 64 -#define OBJ_sha1 OBJ_algorithm,26L - -#define SN_dsaWithSHA1_2 "DSA-SHA1-old" -#define LN_dsaWithSHA1_2 "dsaWithSHA1-old" -#define NID_dsaWithSHA1_2 70 -#define OBJ_dsaWithSHA1_2 OBJ_algorithm,27L - -#define SN_sha1WithRSA "RSA-SHA1-2" -#define LN_sha1WithRSA "sha1WithRSA" -#define NID_sha1WithRSA 115 -#define OBJ_sha1WithRSA OBJ_algorithm,29L - -#define SN_ripemd160 "RIPEMD160" -#define LN_ripemd160 "ripemd160" -#define NID_ripemd160 117 -#define OBJ_ripemd160 1L,3L,36L,3L,2L,1L - -#define SN_ripemd160WithRSA "RSA-RIPEMD160" -#define LN_ripemd160WithRSA "ripemd160WithRSA" -#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 OBJ_blake2bmac,16L - -#define SN_blake2s256 "BLAKE2s256" -#define LN_blake2s256 "blake2s256" -#define NID_blake2s256 1057 -#define OBJ_blake2s256 OBJ_blake2smac,8L - -#define SN_sxnet "SXNetID" -#define LN_sxnet "Strong Extranet ID" -#define NID_sxnet 143 -#define OBJ_sxnet 1L,3L,101L,1L,4L,1L - -#define SN_X500 "X500" -#define LN_X500 "directory services (X.500)" -#define NID_X500 11 -#define OBJ_X500 2L,5L - -#define SN_X509 "X509" -#define NID_X509 12 -#define OBJ_X509 OBJ_X500,4L - -#define SN_commonName "CN" -#define LN_commonName "commonName" -#define NID_commonName 13 -#define OBJ_commonName OBJ_X509,3L - -#define SN_surname "SN" -#define LN_surname "surname" -#define NID_surname 100 -#define OBJ_surname OBJ_X509,4L - -#define LN_serialNumber "serialNumber" -#define NID_serialNumber 105 -#define OBJ_serialNumber OBJ_X509,5L - -#define SN_countryName "C" -#define LN_countryName "countryName" -#define NID_countryName 14 -#define OBJ_countryName OBJ_X509,6L - -#define SN_localityName "L" -#define LN_localityName "localityName" -#define NID_localityName 15 -#define OBJ_localityName OBJ_X509,7L - -#define SN_stateOrProvinceName "ST" -#define LN_stateOrProvinceName "stateOrProvinceName" -#define NID_stateOrProvinceName 16 -#define OBJ_stateOrProvinceName OBJ_X509,8L - -#define SN_streetAddress "street" -#define LN_streetAddress "streetAddress" -#define NID_streetAddress 660 -#define OBJ_streetAddress OBJ_X509,9L - -#define SN_organizationName "O" -#define LN_organizationName "organizationName" -#define NID_organizationName 17 -#define OBJ_organizationName OBJ_X509,10L - -#define SN_organizationalUnitName "OU" -#define LN_organizationalUnitName "organizationalUnitName" -#define NID_organizationalUnitName 18 -#define OBJ_organizationalUnitName OBJ_X509,11L - -#define SN_title "title" -#define LN_title "title" -#define NID_title 106 -#define OBJ_title OBJ_X509,12L - -#define LN_description "description" -#define NID_description 107 -#define OBJ_description OBJ_X509,13L - -#define LN_searchGuide "searchGuide" -#define NID_searchGuide 859 -#define OBJ_searchGuide OBJ_X509,14L - -#define LN_businessCategory "businessCategory" -#define NID_businessCategory 860 -#define OBJ_businessCategory OBJ_X509,15L - -#define LN_postalAddress "postalAddress" -#define NID_postalAddress 861 -#define OBJ_postalAddress OBJ_X509,16L - -#define LN_postalCode "postalCode" -#define NID_postalCode 661 -#define OBJ_postalCode OBJ_X509,17L - -#define LN_postOfficeBox "postOfficeBox" -#define NID_postOfficeBox 862 -#define OBJ_postOfficeBox OBJ_X509,18L - -#define LN_physicalDeliveryOfficeName "physicalDeliveryOfficeName" -#define NID_physicalDeliveryOfficeName 863 -#define OBJ_physicalDeliveryOfficeName OBJ_X509,19L - -#define LN_telephoneNumber "telephoneNumber" -#define NID_telephoneNumber 864 -#define OBJ_telephoneNumber OBJ_X509,20L - -#define LN_telexNumber "telexNumber" -#define NID_telexNumber 865 -#define OBJ_telexNumber OBJ_X509,21L - -#define LN_teletexTerminalIdentifier "teletexTerminalIdentifier" -#define NID_teletexTerminalIdentifier 866 -#define OBJ_teletexTerminalIdentifier OBJ_X509,22L - -#define LN_facsimileTelephoneNumber "facsimileTelephoneNumber" -#define NID_facsimileTelephoneNumber 867 -#define OBJ_facsimileTelephoneNumber OBJ_X509,23L - -#define LN_x121Address "x121Address" -#define NID_x121Address 868 -#define OBJ_x121Address OBJ_X509,24L - -#define LN_internationaliSDNNumber "internationaliSDNNumber" -#define NID_internationaliSDNNumber 869 -#define OBJ_internationaliSDNNumber OBJ_X509,25L - -#define LN_registeredAddress "registeredAddress" -#define NID_registeredAddress 870 -#define OBJ_registeredAddress OBJ_X509,26L - -#define LN_destinationIndicator "destinationIndicator" -#define NID_destinationIndicator 871 -#define OBJ_destinationIndicator OBJ_X509,27L - -#define LN_preferredDeliveryMethod "preferredDeliveryMethod" -#define NID_preferredDeliveryMethod 872 -#define OBJ_preferredDeliveryMethod OBJ_X509,28L - -#define LN_presentationAddress "presentationAddress" -#define NID_presentationAddress 873 -#define OBJ_presentationAddress OBJ_X509,29L - -#define LN_supportedApplicationContext "supportedApplicationContext" -#define NID_supportedApplicationContext 874 -#define OBJ_supportedApplicationContext OBJ_X509,30L - -#define SN_member "member" -#define NID_member 875 -#define OBJ_member OBJ_X509,31L - -#define SN_owner "owner" -#define NID_owner 876 -#define OBJ_owner OBJ_X509,32L - -#define LN_roleOccupant "roleOccupant" -#define NID_roleOccupant 877 -#define OBJ_roleOccupant OBJ_X509,33L - -#define SN_seeAlso "seeAlso" -#define NID_seeAlso 878 -#define OBJ_seeAlso OBJ_X509,34L - -#define LN_userPassword "userPassword" -#define NID_userPassword 879 -#define OBJ_userPassword OBJ_X509,35L - -#define LN_userCertificate "userCertificate" -#define NID_userCertificate 880 -#define OBJ_userCertificate OBJ_X509,36L - -#define LN_cACertificate "cACertificate" -#define NID_cACertificate 881 -#define OBJ_cACertificate OBJ_X509,37L - -#define LN_authorityRevocationList "authorityRevocationList" -#define NID_authorityRevocationList 882 -#define OBJ_authorityRevocationList OBJ_X509,38L - -#define LN_certificateRevocationList "certificateRevocationList" -#define NID_certificateRevocationList 883 -#define OBJ_certificateRevocationList OBJ_X509,39L - -#define LN_crossCertificatePair "crossCertificatePair" -#define NID_crossCertificatePair 884 -#define OBJ_crossCertificatePair OBJ_X509,40L - -#define SN_name "name" -#define LN_name "name" -#define NID_name 173 -#define OBJ_name OBJ_X509,41L - -#define SN_givenName "GN" -#define LN_givenName "givenName" -#define NID_givenName 99 -#define OBJ_givenName OBJ_X509,42L - -#define SN_initials "initials" -#define LN_initials "initials" -#define NID_initials 101 -#define OBJ_initials OBJ_X509,43L - -#define LN_generationQualifier "generationQualifier" -#define NID_generationQualifier 509 -#define OBJ_generationQualifier OBJ_X509,44L - -#define LN_x500UniqueIdentifier "x500UniqueIdentifier" -#define NID_x500UniqueIdentifier 503 -#define OBJ_x500UniqueIdentifier OBJ_X509,45L - -#define SN_dnQualifier "dnQualifier" -#define LN_dnQualifier "dnQualifier" -#define NID_dnQualifier 174 -#define OBJ_dnQualifier OBJ_X509,46L - -#define LN_enhancedSearchGuide "enhancedSearchGuide" -#define NID_enhancedSearchGuide 885 -#define OBJ_enhancedSearchGuide OBJ_X509,47L - -#define LN_protocolInformation "protocolInformation" -#define NID_protocolInformation 886 -#define OBJ_protocolInformation OBJ_X509,48L - -#define LN_distinguishedName "distinguishedName" -#define NID_distinguishedName 887 -#define OBJ_distinguishedName OBJ_X509,49L - -#define LN_uniqueMember "uniqueMember" -#define NID_uniqueMember 888 -#define OBJ_uniqueMember OBJ_X509,50L - -#define LN_houseIdentifier "houseIdentifier" -#define NID_houseIdentifier 889 -#define OBJ_houseIdentifier OBJ_X509,51L - -#define LN_supportedAlgorithms "supportedAlgorithms" -#define NID_supportedAlgorithms 890 -#define OBJ_supportedAlgorithms OBJ_X509,52L - -#define LN_deltaRevocationList "deltaRevocationList" -#define NID_deltaRevocationList 891 -#define OBJ_deltaRevocationList OBJ_X509,53L - -#define SN_dmdName "dmdName" -#define NID_dmdName 892 -#define OBJ_dmdName OBJ_X509,54L - -#define LN_pseudonym "pseudonym" -#define NID_pseudonym 510 -#define OBJ_pseudonym OBJ_X509,65L - -#define SN_role "role" -#define LN_role "role" -#define NID_role 400 -#define OBJ_role OBJ_X509,72L - -#define LN_organizationIdentifier "organizationIdentifier" -#define NID_organizationIdentifier 1089 -#define OBJ_organizationIdentifier OBJ_X509,97L - -#define SN_countryCode3c "c3" -#define LN_countryCode3c "countryCode3c" -#define NID_countryCode3c 1090 -#define OBJ_countryCode3c OBJ_X509,98L - -#define SN_countryCode3n "n3" -#define LN_countryCode3n "countryCode3n" -#define NID_countryCode3n 1091 -#define OBJ_countryCode3n OBJ_X509,99L - -#define LN_dnsName "dnsName" -#define NID_dnsName 1092 -#define OBJ_dnsName OBJ_X509,100L - -#define SN_X500algorithms "X500algorithms" -#define LN_X500algorithms "directory services - algorithms" -#define NID_X500algorithms 378 -#define OBJ_X500algorithms OBJ_X500,8L - -#define SN_rsa "RSA" -#define LN_rsa "rsa" -#define NID_rsa 19 -#define OBJ_rsa OBJ_X500algorithms,1L,1L - -#define SN_mdc2WithRSA "RSA-MDC2" -#define LN_mdc2WithRSA "mdc2WithRSA" -#define NID_mdc2WithRSA 96 -#define OBJ_mdc2WithRSA OBJ_X500algorithms,3L,100L - -#define SN_mdc2 "MDC2" -#define LN_mdc2 "mdc2" -#define NID_mdc2 95 -#define OBJ_mdc2 OBJ_X500algorithms,3L,101L - -#define SN_id_ce "id-ce" -#define NID_id_ce 81 -#define OBJ_id_ce OBJ_X500,29L - -#define SN_subject_directory_attributes "subjectDirectoryAttributes" -#define LN_subject_directory_attributes "X509v3 Subject Directory Attributes" -#define NID_subject_directory_attributes 769 -#define OBJ_subject_directory_attributes OBJ_id_ce,9L - -#define SN_subject_key_identifier "subjectKeyIdentifier" -#define LN_subject_key_identifier "X509v3 Subject Key Identifier" -#define NID_subject_key_identifier 82 -#define OBJ_subject_key_identifier OBJ_id_ce,14L - -#define SN_key_usage "keyUsage" -#define LN_key_usage "X509v3 Key Usage" -#define NID_key_usage 83 -#define OBJ_key_usage OBJ_id_ce,15L - -#define SN_private_key_usage_period "privateKeyUsagePeriod" -#define LN_private_key_usage_period "X509v3 Private Key Usage Period" -#define NID_private_key_usage_period 84 -#define OBJ_private_key_usage_period OBJ_id_ce,16L - -#define SN_subject_alt_name "subjectAltName" -#define LN_subject_alt_name "X509v3 Subject Alternative Name" -#define NID_subject_alt_name 85 -#define OBJ_subject_alt_name OBJ_id_ce,17L - -#define SN_issuer_alt_name "issuerAltName" -#define LN_issuer_alt_name "X509v3 Issuer Alternative Name" -#define NID_issuer_alt_name 86 -#define OBJ_issuer_alt_name OBJ_id_ce,18L - -#define SN_basic_constraints "basicConstraints" -#define LN_basic_constraints "X509v3 Basic Constraints" -#define NID_basic_constraints 87 -#define OBJ_basic_constraints OBJ_id_ce,19L - -#define SN_crl_number "crlNumber" -#define LN_crl_number "X509v3 CRL Number" -#define NID_crl_number 88 -#define OBJ_crl_number OBJ_id_ce,20L - -#define SN_crl_reason "CRLReason" -#define LN_crl_reason "X509v3 CRL Reason Code" -#define NID_crl_reason 141 -#define OBJ_crl_reason OBJ_id_ce,21L - -#define SN_invalidity_date "invalidityDate" -#define LN_invalidity_date "Invalidity Date" -#define NID_invalidity_date 142 -#define OBJ_invalidity_date OBJ_id_ce,24L - -#define SN_delta_crl "deltaCRL" -#define LN_delta_crl "X509v3 Delta CRL Indicator" -#define NID_delta_crl 140 -#define OBJ_delta_crl OBJ_id_ce,27L - -#define SN_issuing_distribution_point "issuingDistributionPoint" -#define LN_issuing_distribution_point "X509v3 Issuing Distribution Point" -#define NID_issuing_distribution_point 770 -#define OBJ_issuing_distribution_point OBJ_id_ce,28L - -#define SN_certificate_issuer "certificateIssuer" -#define LN_certificate_issuer "X509v3 Certificate Issuer" -#define NID_certificate_issuer 771 -#define OBJ_certificate_issuer OBJ_id_ce,29L - -#define SN_name_constraints "nameConstraints" -#define LN_name_constraints "X509v3 Name Constraints" -#define NID_name_constraints 666 -#define OBJ_name_constraints OBJ_id_ce,30L - -#define SN_crl_distribution_points "crlDistributionPoints" -#define LN_crl_distribution_points "X509v3 CRL Distribution Points" -#define NID_crl_distribution_points 103 -#define OBJ_crl_distribution_points OBJ_id_ce,31L - -#define SN_certificate_policies "certificatePolicies" -#define LN_certificate_policies "X509v3 Certificate Policies" -#define NID_certificate_policies 89 -#define OBJ_certificate_policies OBJ_id_ce,32L - -#define SN_any_policy "anyPolicy" -#define LN_any_policy "X509v3 Any Policy" -#define NID_any_policy 746 -#define OBJ_any_policy OBJ_certificate_policies,0L - -#define SN_policy_mappings "policyMappings" -#define LN_policy_mappings "X509v3 Policy Mappings" -#define NID_policy_mappings 747 -#define OBJ_policy_mappings OBJ_id_ce,33L - -#define SN_authority_key_identifier "authorityKeyIdentifier" -#define LN_authority_key_identifier "X509v3 Authority Key Identifier" -#define NID_authority_key_identifier 90 -#define OBJ_authority_key_identifier OBJ_id_ce,35L - -#define SN_policy_constraints "policyConstraints" -#define LN_policy_constraints "X509v3 Policy Constraints" -#define NID_policy_constraints 401 -#define OBJ_policy_constraints OBJ_id_ce,36L - -#define SN_ext_key_usage "extendedKeyUsage" -#define LN_ext_key_usage "X509v3 Extended Key Usage" -#define NID_ext_key_usage 126 -#define OBJ_ext_key_usage OBJ_id_ce,37L - -#define SN_authority_attribute_identifier "authorityAttributeIdentifier" -#define LN_authority_attribute_identifier "X509v3 Authority Attribute Identifier" -#define NID_authority_attribute_identifier 1295 -#define OBJ_authority_attribute_identifier OBJ_id_ce,38L - -#define SN_role_spec_cert_identifier "roleSpecCertIdentifier" -#define LN_role_spec_cert_identifier "X509v3 Role Specification Certificate Identifier" -#define NID_role_spec_cert_identifier 1296 -#define OBJ_role_spec_cert_identifier OBJ_id_ce,39L - -#define SN_basic_att_constraints "basicAttConstraints" -#define LN_basic_att_constraints "X509v3 Basic Attribute Certificate Constraints" -#define NID_basic_att_constraints 1297 -#define OBJ_basic_att_constraints OBJ_id_ce,41L - -#define SN_delegated_name_constraints "delegatedNameConstraints" -#define LN_delegated_name_constraints "X509v3 Delegated Name Constraints" -#define NID_delegated_name_constraints 1298 -#define OBJ_delegated_name_constraints OBJ_id_ce,42L - -#define SN_time_specification "timeSpecification" -#define LN_time_specification "X509v3 Time Specification" -#define NID_time_specification 1299 -#define OBJ_time_specification OBJ_id_ce,43L - -#define SN_freshest_crl "freshestCRL" -#define LN_freshest_crl "X509v3 Freshest CRL" -#define NID_freshest_crl 857 -#define OBJ_freshest_crl OBJ_id_ce,46L - -#define SN_attribute_descriptor "attributeDescriptor" -#define LN_attribute_descriptor "X509v3 Attribute Descriptor" -#define NID_attribute_descriptor 1300 -#define OBJ_attribute_descriptor OBJ_id_ce,48L - -#define SN_user_notice "userNotice" -#define LN_user_notice "X509v3 User Notice" -#define NID_user_notice 1301 -#define OBJ_user_notice OBJ_id_ce,49L - -#define SN_soa_identifier "sOAIdentifier" -#define LN_soa_identifier "X509v3 Source of Authority Identifier" -#define NID_soa_identifier 1302 -#define OBJ_soa_identifier OBJ_id_ce,50L - -#define SN_acceptable_cert_policies "acceptableCertPolicies" -#define LN_acceptable_cert_policies "X509v3 Acceptable Certification Policies" -#define NID_acceptable_cert_policies 1303 -#define OBJ_acceptable_cert_policies OBJ_id_ce,52L - -#define SN_inhibit_any_policy "inhibitAnyPolicy" -#define LN_inhibit_any_policy "X509v3 Inhibit Any Policy" -#define NID_inhibit_any_policy 748 -#define OBJ_inhibit_any_policy OBJ_id_ce,54L - -#define SN_target_information "targetInformation" -#define LN_target_information "X509v3 AC Targeting" -#define NID_target_information 402 -#define OBJ_target_information OBJ_id_ce,55L - -#define SN_no_rev_avail "noRevAvail" -#define LN_no_rev_avail "X509v3 No Revocation Available" -#define NID_no_rev_avail 403 -#define OBJ_no_rev_avail OBJ_id_ce,56L - -#define SN_acceptable_privilege_policies "acceptablePrivPolicies" -#define LN_acceptable_privilege_policies "X509v3 Acceptable Privilege Policies" -#define NID_acceptable_privilege_policies 1304 -#define OBJ_acceptable_privilege_policies OBJ_id_ce,57L - -#define SN_indirect_issuer "indirectIssuer" -#define LN_indirect_issuer "X509v3 Indirect Issuer" -#define NID_indirect_issuer 1305 -#define OBJ_indirect_issuer OBJ_id_ce,61L - -#define SN_no_assertion "noAssertion" -#define LN_no_assertion "X509v3 No Assertion" -#define NID_no_assertion 1306 -#define OBJ_no_assertion OBJ_id_ce,62L - -#define SN_id_aa_issuing_distribution_point "aAissuingDistributionPoint" -#define LN_id_aa_issuing_distribution_point "X509v3 Attribute Authority Issuing Distribution Point" -#define NID_id_aa_issuing_distribution_point 1307 -#define OBJ_id_aa_issuing_distribution_point OBJ_id_ce,63L - -#define SN_issued_on_behalf_of "issuedOnBehalfOf" -#define LN_issued_on_behalf_of "X509v3 Issued On Behalf Of" -#define NID_issued_on_behalf_of 1308 -#define OBJ_issued_on_behalf_of OBJ_id_ce,64L - -#define SN_single_use "singleUse" -#define LN_single_use "X509v3 Single Use" -#define NID_single_use 1309 -#define OBJ_single_use OBJ_id_ce,65L - -#define SN_group_ac "groupAC" -#define LN_group_ac "X509v3 Group Attribute Certificate" -#define NID_group_ac 1310 -#define OBJ_group_ac OBJ_id_ce,66L - -#define SN_allowed_attribute_assignments "allowedAttributeAssignments" -#define LN_allowed_attribute_assignments "X509v3 Allowed Attribute Assignments" -#define NID_allowed_attribute_assignments 1311 -#define OBJ_allowed_attribute_assignments OBJ_id_ce,67L - -#define SN_attribute_mappings "attributeMappings" -#define LN_attribute_mappings "X509v3 Attribute Mappings" -#define NID_attribute_mappings 1312 -#define OBJ_attribute_mappings OBJ_id_ce,68L - -#define SN_holder_name_constraints "holderNameConstraints" -#define LN_holder_name_constraints "X509v3 Holder Name Constraints" -#define NID_holder_name_constraints 1313 -#define OBJ_holder_name_constraints OBJ_id_ce,69L - -#define SN_authorization_validation "authorizationValidation" -#define LN_authorization_validation "X509v3 Authorization Validation" -#define NID_authorization_validation 1314 -#define OBJ_authorization_validation OBJ_id_ce,70L - -#define SN_prot_restrict "protRestrict" -#define LN_prot_restrict "X509v3 Protocol Restriction" -#define NID_prot_restrict 1315 -#define OBJ_prot_restrict OBJ_id_ce,71L - -#define SN_subject_alt_public_key_info "subjectAltPublicKeyInfo" -#define LN_subject_alt_public_key_info "X509v3 Subject Alternative Public Key Info" -#define NID_subject_alt_public_key_info 1316 -#define OBJ_subject_alt_public_key_info OBJ_id_ce,72L - -#define SN_alt_signature_algorithm "altSignatureAlgorithm" -#define LN_alt_signature_algorithm "X509v3 Alternative Signature Algorithm" -#define NID_alt_signature_algorithm 1317 -#define OBJ_alt_signature_algorithm OBJ_id_ce,73L - -#define SN_alt_signature_value "altSignatureValue" -#define LN_alt_signature_value "X509v3 Alternative Signature Value" -#define NID_alt_signature_value 1318 -#define OBJ_alt_signature_value OBJ_id_ce,74L - -#define SN_associated_information "associatedInformation" -#define LN_associated_information "X509v3 Associated Information" -#define NID_associated_information 1319 -#define OBJ_associated_information OBJ_id_ce,75L - -#define SN_anyExtendedKeyUsage "anyExtendedKeyUsage" -#define LN_anyExtendedKeyUsage "Any Extended Key Usage" -#define NID_anyExtendedKeyUsage 910 -#define OBJ_anyExtendedKeyUsage OBJ_ext_key_usage,0L - -#define SN_netscape "Netscape" -#define LN_netscape "Netscape Communications Corp." -#define NID_netscape 57 -#define OBJ_netscape 2L,16L,840L,1L,113730L - -#define SN_netscape_cert_extension "nsCertExt" -#define LN_netscape_cert_extension "Netscape Certificate Extension" -#define NID_netscape_cert_extension 58 -#define OBJ_netscape_cert_extension OBJ_netscape,1L - -#define SN_netscape_data_type "nsDataType" -#define LN_netscape_data_type "Netscape Data Type" -#define NID_netscape_data_type 59 -#define OBJ_netscape_data_type OBJ_netscape,2L - -#define SN_netscape_cert_type "nsCertType" -#define LN_netscape_cert_type "Netscape Cert Type" -#define NID_netscape_cert_type 71 -#define OBJ_netscape_cert_type OBJ_netscape_cert_extension,1L - -#define SN_netscape_base_url "nsBaseUrl" -#define LN_netscape_base_url "Netscape Base Url" -#define NID_netscape_base_url 72 -#define OBJ_netscape_base_url OBJ_netscape_cert_extension,2L - -#define SN_netscape_revocation_url "nsRevocationUrl" -#define LN_netscape_revocation_url "Netscape Revocation Url" -#define NID_netscape_revocation_url 73 -#define OBJ_netscape_revocation_url OBJ_netscape_cert_extension,3L - -#define SN_netscape_ca_revocation_url "nsCaRevocationUrl" -#define LN_netscape_ca_revocation_url "Netscape CA Revocation Url" -#define NID_netscape_ca_revocation_url 74 -#define OBJ_netscape_ca_revocation_url OBJ_netscape_cert_extension,4L - -#define SN_netscape_renewal_url "nsRenewalUrl" -#define LN_netscape_renewal_url "Netscape Renewal Url" -#define NID_netscape_renewal_url 75 -#define OBJ_netscape_renewal_url OBJ_netscape_cert_extension,7L - -#define SN_netscape_ca_policy_url "nsCaPolicyUrl" -#define LN_netscape_ca_policy_url "Netscape CA Policy Url" -#define NID_netscape_ca_policy_url 76 -#define OBJ_netscape_ca_policy_url OBJ_netscape_cert_extension,8L - -#define SN_netscape_ssl_server_name "nsSslServerName" -#define LN_netscape_ssl_server_name "Netscape SSL Server Name" -#define NID_netscape_ssl_server_name 77 -#define OBJ_netscape_ssl_server_name OBJ_netscape_cert_extension,12L - -#define SN_netscape_comment "nsComment" -#define LN_netscape_comment "Netscape Comment" -#define NID_netscape_comment 78 -#define OBJ_netscape_comment OBJ_netscape_cert_extension,13L - -#define SN_netscape_cert_sequence "nsCertSequence" -#define LN_netscape_cert_sequence "Netscape Certificate Sequence" -#define NID_netscape_cert_sequence 79 -#define OBJ_netscape_cert_sequence OBJ_netscape_data_type,5L - -#define SN_ns_sgc "nsSGC" -#define LN_ns_sgc "Netscape Server Gated Crypto" -#define NID_ns_sgc 139 -#define OBJ_ns_sgc OBJ_netscape,4L,1L - -#define SN_org "ORG" -#define LN_org "org" -#define NID_org 379 -#define OBJ_org OBJ_iso,3L - -#define SN_dod "DOD" -#define LN_dod "dod" -#define NID_dod 380 -#define OBJ_dod OBJ_org,6L - -#define SN_iana "IANA" -#define LN_iana "iana" -#define NID_iana 381 -#define OBJ_iana OBJ_dod,1L - -#define OBJ_internet OBJ_iana - -#define SN_Directory "directory" -#define LN_Directory "Directory" -#define NID_Directory 382 -#define OBJ_Directory OBJ_internet,1L - -#define SN_Management "mgmt" -#define LN_Management "Management" -#define NID_Management 383 -#define OBJ_Management OBJ_internet,2L - -#define SN_Experimental "experimental" -#define LN_Experimental "Experimental" -#define NID_Experimental 384 -#define OBJ_Experimental OBJ_internet,3L - -#define SN_Private "private" -#define LN_Private "Private" -#define NID_Private 385 -#define OBJ_Private OBJ_internet,4L - -#define SN_Security "security" -#define LN_Security "Security" -#define NID_Security 386 -#define OBJ_Security OBJ_internet,5L - -#define SN_SNMPv2 "snmpv2" -#define LN_SNMPv2 "SNMPv2" -#define NID_SNMPv2 387 -#define OBJ_SNMPv2 OBJ_internet,6L - -#define LN_Mail "Mail" -#define NID_Mail 388 -#define OBJ_Mail OBJ_internet,7L - -#define SN_Enterprises "enterprises" -#define LN_Enterprises "Enterprises" -#define NID_Enterprises 389 -#define OBJ_Enterprises OBJ_Private,1L - -#define SN_dcObject "dcobject" -#define LN_dcObject "dcObject" -#define NID_dcObject 390 -#define OBJ_dcObject OBJ_Enterprises,1466L,344L - -#define SN_mime_mhs "mime-mhs" -#define LN_mime_mhs "MIME MHS" -#define NID_mime_mhs 504 -#define OBJ_mime_mhs OBJ_Mail,1L - -#define SN_mime_mhs_headings "mime-mhs-headings" -#define LN_mime_mhs_headings "mime-mhs-headings" -#define NID_mime_mhs_headings 505 -#define OBJ_mime_mhs_headings OBJ_mime_mhs,1L - -#define SN_mime_mhs_bodies "mime-mhs-bodies" -#define LN_mime_mhs_bodies "mime-mhs-bodies" -#define NID_mime_mhs_bodies 506 -#define OBJ_mime_mhs_bodies OBJ_mime_mhs,2L - -#define SN_id_hex_partial_message "id-hex-partial-message" -#define LN_id_hex_partial_message "id-hex-partial-message" -#define NID_id_hex_partial_message 507 -#define OBJ_id_hex_partial_message OBJ_mime_mhs_headings,1L - -#define SN_id_hex_multipart_message "id-hex-multipart-message" -#define LN_id_hex_multipart_message "id-hex-multipart-message" -#define NID_id_hex_multipart_message 508 -#define OBJ_id_hex_multipart_message OBJ_mime_mhs_headings,2L - -#define SN_zlib_compression "ZLIB" -#define LN_zlib_compression "zlib compression" -#define NID_zlib_compression 125 -#define OBJ_zlib_compression OBJ_id_smime_alg,8L - -#define OBJ_csor 2L,16L,840L,1L,101L,3L - -#define OBJ_nistAlgorithms OBJ_csor,4L - -#define OBJ_aes OBJ_nistAlgorithms,1L - -#define SN_aes_128_ecb "AES-128-ECB" -#define LN_aes_128_ecb "aes-128-ecb" -#define NID_aes_128_ecb 418 -#define OBJ_aes_128_ecb OBJ_aes,1L - -#define SN_aes_128_cbc "AES-128-CBC" -#define LN_aes_128_cbc "aes-128-cbc" -#define NID_aes_128_cbc 419 -#define OBJ_aes_128_cbc OBJ_aes,2L - -#define SN_aes_128_ofb128 "AES-128-OFB" -#define LN_aes_128_ofb128 "aes-128-ofb" -#define NID_aes_128_ofb128 420 -#define OBJ_aes_128_ofb128 OBJ_aes,3L - -#define SN_aes_128_cfb128 "AES-128-CFB" -#define LN_aes_128_cfb128 "aes-128-cfb" -#define NID_aes_128_cfb128 421 -#define OBJ_aes_128_cfb128 OBJ_aes,4L - -#define SN_id_aes128_wrap "id-aes128-wrap" -#define NID_id_aes128_wrap 788 -#define OBJ_id_aes128_wrap OBJ_aes,5L - -#define SN_aes_128_gcm "id-aes128-GCM" -#define LN_aes_128_gcm "aes-128-gcm" -#define NID_aes_128_gcm 895 -#define OBJ_aes_128_gcm OBJ_aes,6L - -#define SN_aes_128_ccm "id-aes128-CCM" -#define LN_aes_128_ccm "aes-128-ccm" -#define NID_aes_128_ccm 896 -#define OBJ_aes_128_ccm OBJ_aes,7L - -#define SN_id_aes128_wrap_pad "id-aes128-wrap-pad" -#define NID_id_aes128_wrap_pad 897 -#define OBJ_id_aes128_wrap_pad OBJ_aes,8L - -#define SN_aes_192_ecb "AES-192-ECB" -#define LN_aes_192_ecb "aes-192-ecb" -#define NID_aes_192_ecb 422 -#define OBJ_aes_192_ecb OBJ_aes,21L - -#define SN_aes_192_cbc "AES-192-CBC" -#define LN_aes_192_cbc "aes-192-cbc" -#define NID_aes_192_cbc 423 -#define OBJ_aes_192_cbc OBJ_aes,22L - -#define SN_aes_192_ofb128 "AES-192-OFB" -#define LN_aes_192_ofb128 "aes-192-ofb" -#define NID_aes_192_ofb128 424 -#define OBJ_aes_192_ofb128 OBJ_aes,23L - -#define SN_aes_192_cfb128 "AES-192-CFB" -#define LN_aes_192_cfb128 "aes-192-cfb" -#define NID_aes_192_cfb128 425 -#define OBJ_aes_192_cfb128 OBJ_aes,24L - -#define SN_id_aes192_wrap "id-aes192-wrap" -#define NID_id_aes192_wrap 789 -#define OBJ_id_aes192_wrap OBJ_aes,25L - -#define SN_aes_192_gcm "id-aes192-GCM" -#define LN_aes_192_gcm "aes-192-gcm" -#define NID_aes_192_gcm 898 -#define OBJ_aes_192_gcm OBJ_aes,26L - -#define SN_aes_192_ccm "id-aes192-CCM" -#define LN_aes_192_ccm "aes-192-ccm" -#define NID_aes_192_ccm 899 -#define OBJ_aes_192_ccm OBJ_aes,27L - -#define SN_id_aes192_wrap_pad "id-aes192-wrap-pad" -#define NID_id_aes192_wrap_pad 900 -#define OBJ_id_aes192_wrap_pad OBJ_aes,28L - -#define SN_aes_256_ecb "AES-256-ECB" -#define LN_aes_256_ecb "aes-256-ecb" -#define NID_aes_256_ecb 426 -#define OBJ_aes_256_ecb OBJ_aes,41L - -#define SN_aes_256_cbc "AES-256-CBC" -#define LN_aes_256_cbc "aes-256-cbc" -#define NID_aes_256_cbc 427 -#define OBJ_aes_256_cbc OBJ_aes,42L - -#define SN_aes_256_ofb128 "AES-256-OFB" -#define LN_aes_256_ofb128 "aes-256-ofb" -#define NID_aes_256_ofb128 428 -#define OBJ_aes_256_ofb128 OBJ_aes,43L - -#define SN_aes_256_cfb128 "AES-256-CFB" -#define LN_aes_256_cfb128 "aes-256-cfb" -#define NID_aes_256_cfb128 429 -#define OBJ_aes_256_cfb128 OBJ_aes,44L - -#define SN_id_aes256_wrap "id-aes256-wrap" -#define NID_id_aes256_wrap 790 -#define OBJ_id_aes256_wrap OBJ_aes,45L - -#define SN_aes_256_gcm "id-aes256-GCM" -#define LN_aes_256_gcm "aes-256-gcm" -#define NID_aes_256_gcm 901 -#define OBJ_aes_256_gcm OBJ_aes,46L - -#define SN_aes_256_ccm "id-aes256-CCM" -#define LN_aes_256_ccm "aes-256-ccm" -#define NID_aes_256_ccm 902 -#define OBJ_aes_256_ccm OBJ_aes,47L - -#define SN_id_aes256_wrap_pad "id-aes256-wrap-pad" -#define NID_id_aes256_wrap_pad 903 -#define OBJ_id_aes256_wrap_pad OBJ_aes,48L - -#define SN_aes_128_xts "AES-128-XTS" -#define LN_aes_128_xts "aes-128-xts" -#define NID_aes_128_xts 913 -#define OBJ_aes_128_xts OBJ_ieee_siswg,0L,1L,1L - -#define SN_aes_256_xts "AES-256-XTS" -#define LN_aes_256_xts "aes-256-xts" -#define NID_aes_256_xts 914 -#define OBJ_aes_256_xts OBJ_ieee_siswg,0L,1L,2L - -#define SN_aes_128_cfb1 "AES-128-CFB1" -#define LN_aes_128_cfb1 "aes-128-cfb1" -#define NID_aes_128_cfb1 650 - -#define SN_aes_192_cfb1 "AES-192-CFB1" -#define LN_aes_192_cfb1 "aes-192-cfb1" -#define NID_aes_192_cfb1 651 - -#define SN_aes_256_cfb1 "AES-256-CFB1" -#define LN_aes_256_cfb1 "aes-256-cfb1" -#define NID_aes_256_cfb1 652 - -#define SN_aes_128_cfb8 "AES-128-CFB8" -#define LN_aes_128_cfb8 "aes-128-cfb8" -#define NID_aes_128_cfb8 653 - -#define SN_aes_192_cfb8 "AES-192-CFB8" -#define LN_aes_192_cfb8 "aes-192-cfb8" -#define NID_aes_192_cfb8 654 - -#define SN_aes_256_cfb8 "AES-256-CFB8" -#define LN_aes_256_cfb8 "aes-256-cfb8" -#define NID_aes_256_cfb8 655 - -#define SN_aes_128_ctr "AES-128-CTR" -#define LN_aes_128_ctr "aes-128-ctr" -#define NID_aes_128_ctr 904 - -#define SN_aes_192_ctr "AES-192-CTR" -#define LN_aes_192_ctr "aes-192-ctr" -#define NID_aes_192_ctr 905 - -#define SN_aes_256_ctr "AES-256-CTR" -#define LN_aes_256_ctr "aes-256-ctr" -#define NID_aes_256_ctr 906 - -#define SN_aes_128_ocb "AES-128-OCB" -#define LN_aes_128_ocb "aes-128-ocb" -#define NID_aes_128_ocb 958 - -#define SN_aes_192_ocb "AES-192-OCB" -#define LN_aes_192_ocb "aes-192-ocb" -#define NID_aes_192_ocb 959 - -#define SN_aes_256_ocb "AES-256-OCB" -#define LN_aes_256_ocb "aes-256-ocb" -#define NID_aes_256_ocb 960 - -#define SN_des_cfb1 "DES-CFB1" -#define LN_des_cfb1 "des-cfb1" -#define NID_des_cfb1 656 - -#define SN_des_cfb8 "DES-CFB8" -#define LN_des_cfb8 "des-cfb8" -#define NID_des_cfb8 657 - -#define SN_des_ede3_cfb1 "DES-EDE3-CFB1" -#define LN_des_ede3_cfb1 "des-ede3-cfb1" -#define NID_des_ede3_cfb1 658 - -#define SN_des_ede3_cfb8 "DES-EDE3-CFB8" -#define LN_des_ede3_cfb8 "des-ede3-cfb8" -#define NID_des_ede3_cfb8 659 - -#define OBJ_nist_hashalgs OBJ_nistAlgorithms,2L - -#define SN_sha256 "SHA256" -#define LN_sha256 "sha256" -#define NID_sha256 672 -#define OBJ_sha256 OBJ_nist_hashalgs,1L - -#define SN_sha384 "SHA384" -#define LN_sha384 "sha384" -#define NID_sha384 673 -#define OBJ_sha384 OBJ_nist_hashalgs,2L - -#define SN_sha512 "SHA512" -#define LN_sha512 "sha512" -#define NID_sha512 674 -#define OBJ_sha512 OBJ_nist_hashalgs,3L - -#define SN_sha224 "SHA224" -#define LN_sha224 "sha224" -#define NID_sha224 675 -#define OBJ_sha224 OBJ_nist_hashalgs,4L - -#define SN_sha512_224 "SHA512-224" -#define LN_sha512_224 "sha512-224" -#define NID_sha512_224 1094 -#define OBJ_sha512_224 OBJ_nist_hashalgs,5L - -#define SN_sha512_256 "SHA512-256" -#define LN_sha512_256 "sha512-256" -#define NID_sha512_256 1095 -#define OBJ_sha512_256 OBJ_nist_hashalgs,6L - -#define SN_sha3_224 "SHA3-224" -#define LN_sha3_224 "sha3-224" -#define NID_sha3_224 1096 -#define OBJ_sha3_224 OBJ_nist_hashalgs,7L - -#define SN_sha3_256 "SHA3-256" -#define LN_sha3_256 "sha3-256" -#define NID_sha3_256 1097 -#define OBJ_sha3_256 OBJ_nist_hashalgs,8L - -#define SN_sha3_384 "SHA3-384" -#define LN_sha3_384 "sha3-384" -#define NID_sha3_384 1098 -#define OBJ_sha3_384 OBJ_nist_hashalgs,9L - -#define SN_sha3_512 "SHA3-512" -#define LN_sha3_512 "sha3-512" -#define NID_sha3_512 1099 -#define OBJ_sha3_512 OBJ_nist_hashalgs,10L - -#define SN_shake128 "SHAKE128" -#define LN_shake128 "shake128" -#define NID_shake128 1100 -#define OBJ_shake128 OBJ_nist_hashalgs,11L - -#define SN_shake256 "SHAKE256" -#define LN_shake256 "shake256" -#define NID_shake256 1101 -#define OBJ_shake256 OBJ_nist_hashalgs,12L - -#define SN_hmac_sha3_224 "id-hmacWithSHA3-224" -#define LN_hmac_sha3_224 "hmac-sha3-224" -#define NID_hmac_sha3_224 1102 -#define OBJ_hmac_sha3_224 OBJ_nist_hashalgs,13L - -#define SN_hmac_sha3_256 "id-hmacWithSHA3-256" -#define LN_hmac_sha3_256 "hmac-sha3-256" -#define NID_hmac_sha3_256 1103 -#define OBJ_hmac_sha3_256 OBJ_nist_hashalgs,14L - -#define SN_hmac_sha3_384 "id-hmacWithSHA3-384" -#define LN_hmac_sha3_384 "hmac-sha3-384" -#define NID_hmac_sha3_384 1104 -#define OBJ_hmac_sha3_384 OBJ_nist_hashalgs,15L - -#define SN_hmac_sha3_512 "id-hmacWithSHA3-512" -#define LN_hmac_sha3_512 "hmac-sha3-512" -#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" -#define NID_dsa_with_SHA224 802 -#define OBJ_dsa_with_SHA224 OBJ_dsa_with_sha2,1L - -#define SN_dsa_with_SHA256 "dsa_with_SHA256" -#define NID_dsa_with_SHA256 803 -#define OBJ_dsa_with_SHA256 OBJ_dsa_with_sha2,2L - -#define OBJ_sigAlgs OBJ_nistAlgorithms,3L - -#define SN_dsa_with_SHA384 "id-dsa-with-sha384" -#define LN_dsa_with_SHA384 "dsa_with_SHA384" -#define NID_dsa_with_SHA384 1106 -#define OBJ_dsa_with_SHA384 OBJ_sigAlgs,3L - -#define SN_dsa_with_SHA512 "id-dsa-with-sha512" -#define LN_dsa_with_SHA512 "dsa_with_SHA512" -#define NID_dsa_with_SHA512 1107 -#define OBJ_dsa_with_SHA512 OBJ_sigAlgs,4L - -#define SN_dsa_with_SHA3_224 "id-dsa-with-sha3-224" -#define LN_dsa_with_SHA3_224 "dsa_with_SHA3-224" -#define NID_dsa_with_SHA3_224 1108 -#define OBJ_dsa_with_SHA3_224 OBJ_sigAlgs,5L - -#define SN_dsa_with_SHA3_256 "id-dsa-with-sha3-256" -#define LN_dsa_with_SHA3_256 "dsa_with_SHA3-256" -#define NID_dsa_with_SHA3_256 1109 -#define OBJ_dsa_with_SHA3_256 OBJ_sigAlgs,6L - -#define SN_dsa_with_SHA3_384 "id-dsa-with-sha3-384" -#define LN_dsa_with_SHA3_384 "dsa_with_SHA3-384" -#define NID_dsa_with_SHA3_384 1110 -#define OBJ_dsa_with_SHA3_384 OBJ_sigAlgs,7L - -#define SN_dsa_with_SHA3_512 "id-dsa-with-sha3-512" -#define LN_dsa_with_SHA3_512 "dsa_with_SHA3-512" -#define NID_dsa_with_SHA3_512 1111 -#define OBJ_dsa_with_SHA3_512 OBJ_sigAlgs,8L - -#define SN_ecdsa_with_SHA3_224 "id-ecdsa-with-sha3-224" -#define LN_ecdsa_with_SHA3_224 "ecdsa_with_SHA3-224" -#define NID_ecdsa_with_SHA3_224 1112 -#define OBJ_ecdsa_with_SHA3_224 OBJ_sigAlgs,9L - -#define SN_ecdsa_with_SHA3_256 "id-ecdsa-with-sha3-256" -#define LN_ecdsa_with_SHA3_256 "ecdsa_with_SHA3-256" -#define NID_ecdsa_with_SHA3_256 1113 -#define OBJ_ecdsa_with_SHA3_256 OBJ_sigAlgs,10L - -#define SN_ecdsa_with_SHA3_384 "id-ecdsa-with-sha3-384" -#define LN_ecdsa_with_SHA3_384 "ecdsa_with_SHA3-384" -#define NID_ecdsa_with_SHA3_384 1114 -#define OBJ_ecdsa_with_SHA3_384 OBJ_sigAlgs,11L - -#define SN_ecdsa_with_SHA3_512 "id-ecdsa-with-sha3-512" -#define LN_ecdsa_with_SHA3_512 "ecdsa_with_SHA3-512" -#define NID_ecdsa_with_SHA3_512 1115 -#define OBJ_ecdsa_with_SHA3_512 OBJ_sigAlgs,12L - -#define SN_RSA_SHA3_224 "id-rsassa-pkcs1-v1_5-with-sha3-224" -#define LN_RSA_SHA3_224 "RSA-SHA3-224" -#define NID_RSA_SHA3_224 1116 -#define OBJ_RSA_SHA3_224 OBJ_sigAlgs,13L - -#define SN_RSA_SHA3_256 "id-rsassa-pkcs1-v1_5-with-sha3-256" -#define LN_RSA_SHA3_256 "RSA-SHA3-256" -#define NID_RSA_SHA3_256 1117 -#define OBJ_RSA_SHA3_256 OBJ_sigAlgs,14L - -#define SN_RSA_SHA3_384 "id-rsassa-pkcs1-v1_5-with-sha3-384" -#define LN_RSA_SHA3_384 "RSA-SHA3-384" -#define NID_RSA_SHA3_384 1118 -#define OBJ_RSA_SHA3_384 OBJ_sigAlgs,15L - -#define SN_RSA_SHA3_512 "id-rsassa-pkcs1-v1_5-with-sha3-512" -#define LN_RSA_SHA3_512 "RSA-SHA3-512" -#define NID_RSA_SHA3_512 1119 -#define OBJ_RSA_SHA3_512 OBJ_sigAlgs,16L - -#define SN_hold_instruction_code "holdInstructionCode" -#define LN_hold_instruction_code "Hold Instruction Code" -#define NID_hold_instruction_code 430 -#define OBJ_hold_instruction_code OBJ_id_ce,23L - -#define OBJ_holdInstruction OBJ_X9_57,2L - -#define SN_hold_instruction_none "holdInstructionNone" -#define LN_hold_instruction_none "Hold Instruction None" -#define NID_hold_instruction_none 431 -#define OBJ_hold_instruction_none OBJ_holdInstruction,1L - -#define SN_hold_instruction_call_issuer "holdInstructionCallIssuer" -#define LN_hold_instruction_call_issuer "Hold Instruction Call Issuer" -#define NID_hold_instruction_call_issuer 432 -#define OBJ_hold_instruction_call_issuer OBJ_holdInstruction,2L - -#define SN_hold_instruction_reject "holdInstructionReject" -#define LN_hold_instruction_reject "Hold Instruction Reject" -#define NID_hold_instruction_reject 433 -#define OBJ_hold_instruction_reject OBJ_holdInstruction,3L - -#define SN_itu_t_identified_organization "itu-t-identified-organization" -#define NID_itu_t_identified_organization 1264 -#define OBJ_itu_t_identified_organization OBJ_itu_t,4L - -#define SN_etsi "etsi" -#define NID_etsi 1265 -#define OBJ_etsi OBJ_itu_t_identified_organization,0L - -#define SN_electronic_signature_standard "electronic-signature-standard" -#define NID_electronic_signature_standard 1266 -#define OBJ_electronic_signature_standard OBJ_etsi,1733L - -#define SN_ess_attributes "ess-attributes" -#define NID_ess_attributes 1267 -#define OBJ_ess_attributes OBJ_electronic_signature_standard,2L - -#define SN_id_aa_ets_mimeType "id-aa-ets-mimeType" -#define NID_id_aa_ets_mimeType 1268 -#define OBJ_id_aa_ets_mimeType OBJ_ess_attributes,1L - -#define SN_id_aa_ets_longTermValidation "id-aa-ets-longTermValidation" -#define NID_id_aa_ets_longTermValidation 1269 -#define OBJ_id_aa_ets_longTermValidation OBJ_ess_attributes,2L - -#define SN_id_aa_ets_SignaturePolicyDocument "id-aa-ets-SignaturePolicyDocument" -#define NID_id_aa_ets_SignaturePolicyDocument 1270 -#define OBJ_id_aa_ets_SignaturePolicyDocument OBJ_ess_attributes,3L - -#define SN_id_aa_ets_archiveTimestampV3 "id-aa-ets-archiveTimestampV3" -#define NID_id_aa_ets_archiveTimestampV3 1271 -#define OBJ_id_aa_ets_archiveTimestampV3 OBJ_ess_attributes,4L - -#define SN_id_aa_ATSHashIndex "id-aa-ATSHashIndex" -#define NID_id_aa_ATSHashIndex 1272 -#define OBJ_id_aa_ATSHashIndex OBJ_ess_attributes,5L - -#define SN_cades "cades" -#define NID_cades 1273 -#define OBJ_cades OBJ_etsi,19122L - -#define SN_cades_attributes "cades-attributes" -#define NID_cades_attributes 1274 -#define OBJ_cades_attributes OBJ_cades,1L - -#define SN_id_aa_ets_signerAttrV2 "id-aa-ets-signerAttrV2" -#define NID_id_aa_ets_signerAttrV2 1275 -#define OBJ_id_aa_ets_signerAttrV2 OBJ_cades_attributes,1L - -#define SN_id_aa_ets_sigPolicyStore "id-aa-ets-sigPolicyStore" -#define NID_id_aa_ets_sigPolicyStore 1276 -#define OBJ_id_aa_ets_sigPolicyStore OBJ_cades_attributes,3L - -#define SN_id_aa_ATSHashIndex_v2 "id-aa-ATSHashIndex-v2" -#define NID_id_aa_ATSHashIndex_v2 1277 -#define OBJ_id_aa_ATSHashIndex_v2 OBJ_cades_attributes,4L - -#define SN_id_aa_ATSHashIndex_v3 "id-aa-ATSHashIndex-v3" -#define NID_id_aa_ATSHashIndex_v3 1278 -#define OBJ_id_aa_ATSHashIndex_v3 OBJ_cades_attributes,5L - -#define SN_signedAssertion "signedAssertion" -#define NID_signedAssertion 1279 -#define OBJ_signedAssertion OBJ_cades_attributes,6L - -#define SN_data "data" -#define NID_data 434 -#define OBJ_data OBJ_itu_t,9L - -#define SN_pss "pss" -#define NID_pss 435 -#define OBJ_pss OBJ_data,2342L - -#define SN_ucl "ucl" -#define NID_ucl 436 -#define OBJ_ucl OBJ_pss,19200300L - -#define SN_pilot "pilot" -#define NID_pilot 437 -#define OBJ_pilot OBJ_ucl,100L - -#define LN_pilotAttributeType "pilotAttributeType" -#define NID_pilotAttributeType 438 -#define OBJ_pilotAttributeType OBJ_pilot,1L - -#define LN_pilotAttributeSyntax "pilotAttributeSyntax" -#define NID_pilotAttributeSyntax 439 -#define OBJ_pilotAttributeSyntax OBJ_pilot,3L - -#define LN_pilotObjectClass "pilotObjectClass" -#define NID_pilotObjectClass 440 -#define OBJ_pilotObjectClass OBJ_pilot,4L - -#define LN_pilotGroups "pilotGroups" -#define NID_pilotGroups 441 -#define OBJ_pilotGroups OBJ_pilot,10L - -#define LN_iA5StringSyntax "iA5StringSyntax" -#define NID_iA5StringSyntax 442 -#define OBJ_iA5StringSyntax OBJ_pilotAttributeSyntax,4L - -#define LN_caseIgnoreIA5StringSyntax "caseIgnoreIA5StringSyntax" -#define NID_caseIgnoreIA5StringSyntax 443 -#define OBJ_caseIgnoreIA5StringSyntax OBJ_pilotAttributeSyntax,5L - -#define LN_pilotObject "pilotObject" -#define NID_pilotObject 444 -#define OBJ_pilotObject OBJ_pilotObjectClass,3L - -#define LN_pilotPerson "pilotPerson" -#define NID_pilotPerson 445 -#define OBJ_pilotPerson OBJ_pilotObjectClass,4L - -#define SN_account "account" -#define NID_account 446 -#define OBJ_account OBJ_pilotObjectClass,5L - -#define SN_document "document" -#define NID_document 447 -#define OBJ_document OBJ_pilotObjectClass,6L - -#define SN_room "room" -#define NID_room 448 -#define OBJ_room OBJ_pilotObjectClass,7L - -#define LN_documentSeries "documentSeries" -#define NID_documentSeries 449 -#define OBJ_documentSeries OBJ_pilotObjectClass,9L - -#define SN_Domain "domain" -#define LN_Domain "Domain" -#define NID_Domain 392 -#define OBJ_Domain OBJ_pilotObjectClass,13L - -#define LN_rFC822localPart "rFC822localPart" -#define NID_rFC822localPart 450 -#define OBJ_rFC822localPart OBJ_pilotObjectClass,14L - -#define LN_dNSDomain "dNSDomain" -#define NID_dNSDomain 451 -#define OBJ_dNSDomain OBJ_pilotObjectClass,15L - -#define LN_domainRelatedObject "domainRelatedObject" -#define NID_domainRelatedObject 452 -#define OBJ_domainRelatedObject OBJ_pilotObjectClass,17L - -#define LN_friendlyCountry "friendlyCountry" -#define NID_friendlyCountry 453 -#define OBJ_friendlyCountry OBJ_pilotObjectClass,18L - -#define LN_simpleSecurityObject "simpleSecurityObject" -#define NID_simpleSecurityObject 454 -#define OBJ_simpleSecurityObject OBJ_pilotObjectClass,19L - -#define LN_pilotOrganization "pilotOrganization" -#define NID_pilotOrganization 455 -#define OBJ_pilotOrganization OBJ_pilotObjectClass,20L - -#define LN_pilotDSA "pilotDSA" -#define NID_pilotDSA 456 -#define OBJ_pilotDSA OBJ_pilotObjectClass,21L - -#define LN_qualityLabelledData "qualityLabelledData" -#define NID_qualityLabelledData 457 -#define OBJ_qualityLabelledData OBJ_pilotObjectClass,22L - -#define SN_userId "UID" -#define LN_userId "userId" -#define NID_userId 458 -#define OBJ_userId OBJ_pilotAttributeType,1L - -#define LN_textEncodedORAddress "textEncodedORAddress" -#define NID_textEncodedORAddress 459 -#define OBJ_textEncodedORAddress OBJ_pilotAttributeType,2L - -#define SN_rfc822Mailbox "mail" -#define LN_rfc822Mailbox "rfc822Mailbox" -#define NID_rfc822Mailbox 460 -#define OBJ_rfc822Mailbox OBJ_pilotAttributeType,3L - -#define SN_info "info" -#define NID_info 461 -#define OBJ_info OBJ_pilotAttributeType,4L - -#define LN_favouriteDrink "favouriteDrink" -#define NID_favouriteDrink 462 -#define OBJ_favouriteDrink OBJ_pilotAttributeType,5L - -#define LN_roomNumber "roomNumber" -#define NID_roomNumber 463 -#define OBJ_roomNumber OBJ_pilotAttributeType,6L - -#define SN_photo "photo" -#define NID_photo 464 -#define OBJ_photo OBJ_pilotAttributeType,7L - -#define LN_userClass "userClass" -#define NID_userClass 465 -#define OBJ_userClass OBJ_pilotAttributeType,8L - -#define SN_host "host" -#define NID_host 466 -#define OBJ_host OBJ_pilotAttributeType,9L - -#define SN_manager "manager" -#define NID_manager 467 -#define OBJ_manager OBJ_pilotAttributeType,10L - -#define LN_documentIdentifier "documentIdentifier" -#define NID_documentIdentifier 468 -#define OBJ_documentIdentifier OBJ_pilotAttributeType,11L - -#define LN_documentTitle "documentTitle" -#define NID_documentTitle 469 -#define OBJ_documentTitle OBJ_pilotAttributeType,12L - -#define LN_documentVersion "documentVersion" -#define NID_documentVersion 470 -#define OBJ_documentVersion OBJ_pilotAttributeType,13L - -#define LN_documentAuthor "documentAuthor" -#define NID_documentAuthor 471 -#define OBJ_documentAuthor OBJ_pilotAttributeType,14L - -#define LN_documentLocation "documentLocation" -#define NID_documentLocation 472 -#define OBJ_documentLocation OBJ_pilotAttributeType,15L - -#define LN_homeTelephoneNumber "homeTelephoneNumber" -#define NID_homeTelephoneNumber 473 -#define OBJ_homeTelephoneNumber OBJ_pilotAttributeType,20L - -#define SN_secretary "secretary" -#define NID_secretary 474 -#define OBJ_secretary OBJ_pilotAttributeType,21L - -#define LN_otherMailbox "otherMailbox" -#define NID_otherMailbox 475 -#define OBJ_otherMailbox OBJ_pilotAttributeType,22L - -#define LN_lastModifiedTime "lastModifiedTime" -#define NID_lastModifiedTime 476 -#define OBJ_lastModifiedTime OBJ_pilotAttributeType,23L - -#define LN_lastModifiedBy "lastModifiedBy" -#define NID_lastModifiedBy 477 -#define OBJ_lastModifiedBy OBJ_pilotAttributeType,24L - -#define SN_domainComponent "DC" -#define LN_domainComponent "domainComponent" -#define NID_domainComponent 391 -#define OBJ_domainComponent OBJ_pilotAttributeType,25L - -#define LN_aRecord "aRecord" -#define NID_aRecord 478 -#define OBJ_aRecord OBJ_pilotAttributeType,26L - -#define LN_pilotAttributeType27 "pilotAttributeType27" -#define NID_pilotAttributeType27 479 -#define OBJ_pilotAttributeType27 OBJ_pilotAttributeType,27L - -#define LN_mXRecord "mXRecord" -#define NID_mXRecord 480 -#define OBJ_mXRecord OBJ_pilotAttributeType,28L - -#define LN_nSRecord "nSRecord" -#define NID_nSRecord 481 -#define OBJ_nSRecord OBJ_pilotAttributeType,29L - -#define LN_sOARecord "sOARecord" -#define NID_sOARecord 482 -#define OBJ_sOARecord OBJ_pilotAttributeType,30L - -#define LN_cNAMERecord "cNAMERecord" -#define NID_cNAMERecord 483 -#define OBJ_cNAMERecord OBJ_pilotAttributeType,31L - -#define LN_associatedDomain "associatedDomain" -#define NID_associatedDomain 484 -#define OBJ_associatedDomain OBJ_pilotAttributeType,37L - -#define LN_associatedName "associatedName" -#define NID_associatedName 485 -#define OBJ_associatedName OBJ_pilotAttributeType,38L - -#define LN_homePostalAddress "homePostalAddress" -#define NID_homePostalAddress 486 -#define OBJ_homePostalAddress OBJ_pilotAttributeType,39L - -#define LN_personalTitle "personalTitle" -#define NID_personalTitle 487 -#define OBJ_personalTitle OBJ_pilotAttributeType,40L - -#define LN_mobileTelephoneNumber "mobileTelephoneNumber" -#define NID_mobileTelephoneNumber 488 -#define OBJ_mobileTelephoneNumber OBJ_pilotAttributeType,41L - -#define LN_pagerTelephoneNumber "pagerTelephoneNumber" -#define NID_pagerTelephoneNumber 489 -#define OBJ_pagerTelephoneNumber OBJ_pilotAttributeType,42L - -#define LN_friendlyCountryName "friendlyCountryName" -#define NID_friendlyCountryName 490 -#define OBJ_friendlyCountryName OBJ_pilotAttributeType,43L - -#define SN_uniqueIdentifier "uid" -#define LN_uniqueIdentifier "uniqueIdentifier" -#define NID_uniqueIdentifier 102 -#define OBJ_uniqueIdentifier OBJ_pilotAttributeType,44L - -#define LN_organizationalStatus "organizationalStatus" -#define NID_organizationalStatus 491 -#define OBJ_organizationalStatus OBJ_pilotAttributeType,45L - -#define LN_janetMailbox "janetMailbox" -#define NID_janetMailbox 492 -#define OBJ_janetMailbox OBJ_pilotAttributeType,46L - -#define LN_mailPreferenceOption "mailPreferenceOption" -#define NID_mailPreferenceOption 493 -#define OBJ_mailPreferenceOption OBJ_pilotAttributeType,47L - -#define LN_buildingName "buildingName" -#define NID_buildingName 494 -#define OBJ_buildingName OBJ_pilotAttributeType,48L - -#define LN_dSAQuality "dSAQuality" -#define NID_dSAQuality 495 -#define OBJ_dSAQuality OBJ_pilotAttributeType,49L - -#define LN_singleLevelQuality "singleLevelQuality" -#define NID_singleLevelQuality 496 -#define OBJ_singleLevelQuality OBJ_pilotAttributeType,50L - -#define LN_subtreeMinimumQuality "subtreeMinimumQuality" -#define NID_subtreeMinimumQuality 497 -#define OBJ_subtreeMinimumQuality OBJ_pilotAttributeType,51L - -#define LN_subtreeMaximumQuality "subtreeMaximumQuality" -#define NID_subtreeMaximumQuality 498 -#define OBJ_subtreeMaximumQuality OBJ_pilotAttributeType,52L - -#define LN_personalSignature "personalSignature" -#define NID_personalSignature 499 -#define OBJ_personalSignature OBJ_pilotAttributeType,53L - -#define LN_dITRedirect "dITRedirect" -#define NID_dITRedirect 500 -#define OBJ_dITRedirect OBJ_pilotAttributeType,54L - -#define SN_audio "audio" -#define NID_audio 501 -#define OBJ_audio OBJ_pilotAttributeType,55L - -#define LN_documentPublisher "documentPublisher" -#define NID_documentPublisher 502 -#define OBJ_documentPublisher OBJ_pilotAttributeType,56L - -#define SN_id_set "id-set" -#define LN_id_set "Secure Electronic Transactions" -#define NID_id_set 512 -#define OBJ_id_set OBJ_international_organizations,42L - -#define SN_set_ctype "set-ctype" -#define LN_set_ctype "content types" -#define NID_set_ctype 513 -#define OBJ_set_ctype OBJ_id_set,0L - -#define SN_set_msgExt "set-msgExt" -#define LN_set_msgExt "message extensions" -#define NID_set_msgExt 514 -#define OBJ_set_msgExt OBJ_id_set,1L - -#define SN_set_attr "set-attr" -#define NID_set_attr 515 -#define OBJ_set_attr OBJ_id_set,3L - -#define SN_set_policy "set-policy" -#define NID_set_policy 516 -#define OBJ_set_policy OBJ_id_set,5L - -#define SN_set_certExt "set-certExt" -#define LN_set_certExt "certificate extensions" -#define NID_set_certExt 517 -#define OBJ_set_certExt OBJ_id_set,7L - -#define SN_set_brand "set-brand" -#define NID_set_brand 518 -#define OBJ_set_brand OBJ_id_set,8L - -#define SN_setct_PANData "setct-PANData" -#define NID_setct_PANData 519 -#define OBJ_setct_PANData OBJ_set_ctype,0L - -#define SN_setct_PANToken "setct-PANToken" -#define NID_setct_PANToken 520 -#define OBJ_setct_PANToken OBJ_set_ctype,1L - -#define SN_setct_PANOnly "setct-PANOnly" -#define NID_setct_PANOnly 521 -#define OBJ_setct_PANOnly OBJ_set_ctype,2L - -#define SN_setct_OIData "setct-OIData" -#define NID_setct_OIData 522 -#define OBJ_setct_OIData OBJ_set_ctype,3L - -#define SN_setct_PI "setct-PI" -#define NID_setct_PI 523 -#define OBJ_setct_PI OBJ_set_ctype,4L - -#define SN_setct_PIData "setct-PIData" -#define NID_setct_PIData 524 -#define OBJ_setct_PIData OBJ_set_ctype,5L - -#define SN_setct_PIDataUnsigned "setct-PIDataUnsigned" -#define NID_setct_PIDataUnsigned 525 -#define OBJ_setct_PIDataUnsigned OBJ_set_ctype,6L - -#define SN_setct_HODInput "setct-HODInput" -#define NID_setct_HODInput 526 -#define OBJ_setct_HODInput OBJ_set_ctype,7L - -#define SN_setct_AuthResBaggage "setct-AuthResBaggage" -#define NID_setct_AuthResBaggage 527 -#define OBJ_setct_AuthResBaggage OBJ_set_ctype,8L - -#define SN_setct_AuthRevReqBaggage "setct-AuthRevReqBaggage" -#define NID_setct_AuthRevReqBaggage 528 -#define OBJ_setct_AuthRevReqBaggage OBJ_set_ctype,9L - -#define SN_setct_AuthRevResBaggage "setct-AuthRevResBaggage" -#define NID_setct_AuthRevResBaggage 529 -#define OBJ_setct_AuthRevResBaggage OBJ_set_ctype,10L - -#define SN_setct_CapTokenSeq "setct-CapTokenSeq" -#define NID_setct_CapTokenSeq 530 -#define OBJ_setct_CapTokenSeq OBJ_set_ctype,11L - -#define SN_setct_PInitResData "setct-PInitResData" -#define NID_setct_PInitResData 531 -#define OBJ_setct_PInitResData OBJ_set_ctype,12L - -#define SN_setct_PI_TBS "setct-PI-TBS" -#define NID_setct_PI_TBS 532 -#define OBJ_setct_PI_TBS OBJ_set_ctype,13L - -#define SN_setct_PResData "setct-PResData" -#define NID_setct_PResData 533 -#define OBJ_setct_PResData OBJ_set_ctype,14L - -#define SN_setct_AuthReqTBS "setct-AuthReqTBS" -#define NID_setct_AuthReqTBS 534 -#define OBJ_setct_AuthReqTBS OBJ_set_ctype,16L - -#define SN_setct_AuthResTBS "setct-AuthResTBS" -#define NID_setct_AuthResTBS 535 -#define OBJ_setct_AuthResTBS OBJ_set_ctype,17L - -#define SN_setct_AuthResTBSX "setct-AuthResTBSX" -#define NID_setct_AuthResTBSX 536 -#define OBJ_setct_AuthResTBSX OBJ_set_ctype,18L - -#define SN_setct_AuthTokenTBS "setct-AuthTokenTBS" -#define NID_setct_AuthTokenTBS 537 -#define OBJ_setct_AuthTokenTBS OBJ_set_ctype,19L - -#define SN_setct_CapTokenData "setct-CapTokenData" -#define NID_setct_CapTokenData 538 -#define OBJ_setct_CapTokenData OBJ_set_ctype,20L - -#define SN_setct_CapTokenTBS "setct-CapTokenTBS" -#define NID_setct_CapTokenTBS 539 -#define OBJ_setct_CapTokenTBS OBJ_set_ctype,21L - -#define SN_setct_AcqCardCodeMsg "setct-AcqCardCodeMsg" -#define NID_setct_AcqCardCodeMsg 540 -#define OBJ_setct_AcqCardCodeMsg OBJ_set_ctype,22L - -#define SN_setct_AuthRevReqTBS "setct-AuthRevReqTBS" -#define NID_setct_AuthRevReqTBS 541 -#define OBJ_setct_AuthRevReqTBS OBJ_set_ctype,23L - -#define SN_setct_AuthRevResData "setct-AuthRevResData" -#define NID_setct_AuthRevResData 542 -#define OBJ_setct_AuthRevResData OBJ_set_ctype,24L - -#define SN_setct_AuthRevResTBS "setct-AuthRevResTBS" -#define NID_setct_AuthRevResTBS 543 -#define OBJ_setct_AuthRevResTBS OBJ_set_ctype,25L - -#define SN_setct_CapReqTBS "setct-CapReqTBS" -#define NID_setct_CapReqTBS 544 -#define OBJ_setct_CapReqTBS OBJ_set_ctype,26L - -#define SN_setct_CapReqTBSX "setct-CapReqTBSX" -#define NID_setct_CapReqTBSX 545 -#define OBJ_setct_CapReqTBSX OBJ_set_ctype,27L - -#define SN_setct_CapResData "setct-CapResData" -#define NID_setct_CapResData 546 -#define OBJ_setct_CapResData OBJ_set_ctype,28L - -#define SN_setct_CapRevReqTBS "setct-CapRevReqTBS" -#define NID_setct_CapRevReqTBS 547 -#define OBJ_setct_CapRevReqTBS OBJ_set_ctype,29L - -#define SN_setct_CapRevReqTBSX "setct-CapRevReqTBSX" -#define NID_setct_CapRevReqTBSX 548 -#define OBJ_setct_CapRevReqTBSX OBJ_set_ctype,30L - -#define SN_setct_CapRevResData "setct-CapRevResData" -#define NID_setct_CapRevResData 549 -#define OBJ_setct_CapRevResData OBJ_set_ctype,31L - -#define SN_setct_CredReqTBS "setct-CredReqTBS" -#define NID_setct_CredReqTBS 550 -#define OBJ_setct_CredReqTBS OBJ_set_ctype,32L - -#define SN_setct_CredReqTBSX "setct-CredReqTBSX" -#define NID_setct_CredReqTBSX 551 -#define OBJ_setct_CredReqTBSX OBJ_set_ctype,33L - -#define SN_setct_CredResData "setct-CredResData" -#define NID_setct_CredResData 552 -#define OBJ_setct_CredResData OBJ_set_ctype,34L - -#define SN_setct_CredRevReqTBS "setct-CredRevReqTBS" -#define NID_setct_CredRevReqTBS 553 -#define OBJ_setct_CredRevReqTBS OBJ_set_ctype,35L - -#define SN_setct_CredRevReqTBSX "setct-CredRevReqTBSX" -#define NID_setct_CredRevReqTBSX 554 -#define OBJ_setct_CredRevReqTBSX OBJ_set_ctype,36L - -#define SN_setct_CredRevResData "setct-CredRevResData" -#define NID_setct_CredRevResData 555 -#define OBJ_setct_CredRevResData OBJ_set_ctype,37L - -#define SN_setct_PCertReqData "setct-PCertReqData" -#define NID_setct_PCertReqData 556 -#define OBJ_setct_PCertReqData OBJ_set_ctype,38L - -#define SN_setct_PCertResTBS "setct-PCertResTBS" -#define NID_setct_PCertResTBS 557 -#define OBJ_setct_PCertResTBS OBJ_set_ctype,39L - -#define SN_setct_BatchAdminReqData "setct-BatchAdminReqData" -#define NID_setct_BatchAdminReqData 558 -#define OBJ_setct_BatchAdminReqData OBJ_set_ctype,40L - -#define SN_setct_BatchAdminResData "setct-BatchAdminResData" -#define NID_setct_BatchAdminResData 559 -#define OBJ_setct_BatchAdminResData OBJ_set_ctype,41L - -#define SN_setct_CardCInitResTBS "setct-CardCInitResTBS" -#define NID_setct_CardCInitResTBS 560 -#define OBJ_setct_CardCInitResTBS OBJ_set_ctype,42L - -#define SN_setct_MeAqCInitResTBS "setct-MeAqCInitResTBS" -#define NID_setct_MeAqCInitResTBS 561 -#define OBJ_setct_MeAqCInitResTBS OBJ_set_ctype,43L - -#define SN_setct_RegFormResTBS "setct-RegFormResTBS" -#define NID_setct_RegFormResTBS 562 -#define OBJ_setct_RegFormResTBS OBJ_set_ctype,44L - -#define SN_setct_CertReqData "setct-CertReqData" -#define NID_setct_CertReqData 563 -#define OBJ_setct_CertReqData OBJ_set_ctype,45L - -#define SN_setct_CertReqTBS "setct-CertReqTBS" -#define NID_setct_CertReqTBS 564 -#define OBJ_setct_CertReqTBS OBJ_set_ctype,46L - -#define SN_setct_CertResData "setct-CertResData" -#define NID_setct_CertResData 565 -#define OBJ_setct_CertResData OBJ_set_ctype,47L - -#define SN_setct_CertInqReqTBS "setct-CertInqReqTBS" -#define NID_setct_CertInqReqTBS 566 -#define OBJ_setct_CertInqReqTBS OBJ_set_ctype,48L - -#define SN_setct_ErrorTBS "setct-ErrorTBS" -#define NID_setct_ErrorTBS 567 -#define OBJ_setct_ErrorTBS OBJ_set_ctype,49L - -#define SN_setct_PIDualSignedTBE "setct-PIDualSignedTBE" -#define NID_setct_PIDualSignedTBE 568 -#define OBJ_setct_PIDualSignedTBE OBJ_set_ctype,50L - -#define SN_setct_PIUnsignedTBE "setct-PIUnsignedTBE" -#define NID_setct_PIUnsignedTBE 569 -#define OBJ_setct_PIUnsignedTBE OBJ_set_ctype,51L - -#define SN_setct_AuthReqTBE "setct-AuthReqTBE" -#define NID_setct_AuthReqTBE 570 -#define OBJ_setct_AuthReqTBE OBJ_set_ctype,52L - -#define SN_setct_AuthResTBE "setct-AuthResTBE" -#define NID_setct_AuthResTBE 571 -#define OBJ_setct_AuthResTBE OBJ_set_ctype,53L - -#define SN_setct_AuthResTBEX "setct-AuthResTBEX" -#define NID_setct_AuthResTBEX 572 -#define OBJ_setct_AuthResTBEX OBJ_set_ctype,54L - -#define SN_setct_AuthTokenTBE "setct-AuthTokenTBE" -#define NID_setct_AuthTokenTBE 573 -#define OBJ_setct_AuthTokenTBE OBJ_set_ctype,55L - -#define SN_setct_CapTokenTBE "setct-CapTokenTBE" -#define NID_setct_CapTokenTBE 574 -#define OBJ_setct_CapTokenTBE OBJ_set_ctype,56L - -#define SN_setct_CapTokenTBEX "setct-CapTokenTBEX" -#define NID_setct_CapTokenTBEX 575 -#define OBJ_setct_CapTokenTBEX OBJ_set_ctype,57L - -#define SN_setct_AcqCardCodeMsgTBE "setct-AcqCardCodeMsgTBE" -#define NID_setct_AcqCardCodeMsgTBE 576 -#define OBJ_setct_AcqCardCodeMsgTBE OBJ_set_ctype,58L - -#define SN_setct_AuthRevReqTBE "setct-AuthRevReqTBE" -#define NID_setct_AuthRevReqTBE 577 -#define OBJ_setct_AuthRevReqTBE OBJ_set_ctype,59L - -#define SN_setct_AuthRevResTBE "setct-AuthRevResTBE" -#define NID_setct_AuthRevResTBE 578 -#define OBJ_setct_AuthRevResTBE OBJ_set_ctype,60L - -#define SN_setct_AuthRevResTBEB "setct-AuthRevResTBEB" -#define NID_setct_AuthRevResTBEB 579 -#define OBJ_setct_AuthRevResTBEB OBJ_set_ctype,61L - -#define SN_setct_CapReqTBE "setct-CapReqTBE" -#define NID_setct_CapReqTBE 580 -#define OBJ_setct_CapReqTBE OBJ_set_ctype,62L - -#define SN_setct_CapReqTBEX "setct-CapReqTBEX" -#define NID_setct_CapReqTBEX 581 -#define OBJ_setct_CapReqTBEX OBJ_set_ctype,63L - -#define SN_setct_CapResTBE "setct-CapResTBE" -#define NID_setct_CapResTBE 582 -#define OBJ_setct_CapResTBE OBJ_set_ctype,64L - -#define SN_setct_CapRevReqTBE "setct-CapRevReqTBE" -#define NID_setct_CapRevReqTBE 583 -#define OBJ_setct_CapRevReqTBE OBJ_set_ctype,65L - -#define SN_setct_CapRevReqTBEX "setct-CapRevReqTBEX" -#define NID_setct_CapRevReqTBEX 584 -#define OBJ_setct_CapRevReqTBEX OBJ_set_ctype,66L - -#define SN_setct_CapRevResTBE "setct-CapRevResTBE" -#define NID_setct_CapRevResTBE 585 -#define OBJ_setct_CapRevResTBE OBJ_set_ctype,67L - -#define SN_setct_CredReqTBE "setct-CredReqTBE" -#define NID_setct_CredReqTBE 586 -#define OBJ_setct_CredReqTBE OBJ_set_ctype,68L - -#define SN_setct_CredReqTBEX "setct-CredReqTBEX" -#define NID_setct_CredReqTBEX 587 -#define OBJ_setct_CredReqTBEX OBJ_set_ctype,69L - -#define SN_setct_CredResTBE "setct-CredResTBE" -#define NID_setct_CredResTBE 588 -#define OBJ_setct_CredResTBE OBJ_set_ctype,70L - -#define SN_setct_CredRevReqTBE "setct-CredRevReqTBE" -#define NID_setct_CredRevReqTBE 589 -#define OBJ_setct_CredRevReqTBE OBJ_set_ctype,71L - -#define SN_setct_CredRevReqTBEX "setct-CredRevReqTBEX" -#define NID_setct_CredRevReqTBEX 590 -#define OBJ_setct_CredRevReqTBEX OBJ_set_ctype,72L - -#define SN_setct_CredRevResTBE "setct-CredRevResTBE" -#define NID_setct_CredRevResTBE 591 -#define OBJ_setct_CredRevResTBE OBJ_set_ctype,73L - -#define SN_setct_BatchAdminReqTBE "setct-BatchAdminReqTBE" -#define NID_setct_BatchAdminReqTBE 592 -#define OBJ_setct_BatchAdminReqTBE OBJ_set_ctype,74L - -#define SN_setct_BatchAdminResTBE "setct-BatchAdminResTBE" -#define NID_setct_BatchAdminResTBE 593 -#define OBJ_setct_BatchAdminResTBE OBJ_set_ctype,75L - -#define SN_setct_RegFormReqTBE "setct-RegFormReqTBE" -#define NID_setct_RegFormReqTBE 594 -#define OBJ_setct_RegFormReqTBE OBJ_set_ctype,76L - -#define SN_setct_CertReqTBE "setct-CertReqTBE" -#define NID_setct_CertReqTBE 595 -#define OBJ_setct_CertReqTBE OBJ_set_ctype,77L - -#define SN_setct_CertReqTBEX "setct-CertReqTBEX" -#define NID_setct_CertReqTBEX 596 -#define OBJ_setct_CertReqTBEX OBJ_set_ctype,78L - -#define SN_setct_CertResTBE "setct-CertResTBE" -#define NID_setct_CertResTBE 597 -#define OBJ_setct_CertResTBE OBJ_set_ctype,79L - -#define SN_setct_CRLNotificationTBS "setct-CRLNotificationTBS" -#define NID_setct_CRLNotificationTBS 598 -#define OBJ_setct_CRLNotificationTBS OBJ_set_ctype,80L - -#define SN_setct_CRLNotificationResTBS "setct-CRLNotificationResTBS" -#define NID_setct_CRLNotificationResTBS 599 -#define OBJ_setct_CRLNotificationResTBS OBJ_set_ctype,81L - -#define SN_setct_BCIDistributionTBS "setct-BCIDistributionTBS" -#define NID_setct_BCIDistributionTBS 600 -#define OBJ_setct_BCIDistributionTBS OBJ_set_ctype,82L - -#define SN_setext_genCrypt "setext-genCrypt" -#define LN_setext_genCrypt "generic cryptogram" -#define NID_setext_genCrypt 601 -#define OBJ_setext_genCrypt OBJ_set_msgExt,1L - -#define SN_setext_miAuth "setext-miAuth" -#define LN_setext_miAuth "merchant initiated auth" -#define NID_setext_miAuth 602 -#define OBJ_setext_miAuth OBJ_set_msgExt,3L - -#define SN_setext_pinSecure "setext-pinSecure" -#define NID_setext_pinSecure 603 -#define OBJ_setext_pinSecure OBJ_set_msgExt,4L - -#define SN_setext_pinAny "setext-pinAny" -#define NID_setext_pinAny 604 -#define OBJ_setext_pinAny OBJ_set_msgExt,5L - -#define SN_setext_track2 "setext-track2" -#define NID_setext_track2 605 -#define OBJ_setext_track2 OBJ_set_msgExt,7L - -#define SN_setext_cv "setext-cv" -#define LN_setext_cv "additional verification" -#define NID_setext_cv 606 -#define OBJ_setext_cv OBJ_set_msgExt,8L - -#define SN_set_policy_root "set-policy-root" -#define NID_set_policy_root 607 -#define OBJ_set_policy_root OBJ_set_policy,0L - -#define SN_setCext_hashedRoot "setCext-hashedRoot" -#define NID_setCext_hashedRoot 608 -#define OBJ_setCext_hashedRoot OBJ_set_certExt,0L - -#define SN_setCext_certType "setCext-certType" -#define NID_setCext_certType 609 -#define OBJ_setCext_certType OBJ_set_certExt,1L - -#define SN_setCext_merchData "setCext-merchData" -#define NID_setCext_merchData 610 -#define OBJ_setCext_merchData OBJ_set_certExt,2L - -#define SN_setCext_cCertRequired "setCext-cCertRequired" -#define NID_setCext_cCertRequired 611 -#define OBJ_setCext_cCertRequired OBJ_set_certExt,3L - -#define SN_setCext_tunneling "setCext-tunneling" -#define NID_setCext_tunneling 612 -#define OBJ_setCext_tunneling OBJ_set_certExt,4L - -#define SN_setCext_setExt "setCext-setExt" -#define NID_setCext_setExt 613 -#define OBJ_setCext_setExt OBJ_set_certExt,5L - -#define SN_setCext_setQualf "setCext-setQualf" -#define NID_setCext_setQualf 614 -#define OBJ_setCext_setQualf OBJ_set_certExt,6L - -#define SN_setCext_PGWYcapabilities "setCext-PGWYcapabilities" -#define NID_setCext_PGWYcapabilities 615 -#define OBJ_setCext_PGWYcapabilities OBJ_set_certExt,7L - -#define SN_setCext_TokenIdentifier "setCext-TokenIdentifier" -#define NID_setCext_TokenIdentifier 616 -#define OBJ_setCext_TokenIdentifier OBJ_set_certExt,8L - -#define SN_setCext_Track2Data "setCext-Track2Data" -#define NID_setCext_Track2Data 617 -#define OBJ_setCext_Track2Data OBJ_set_certExt,9L - -#define SN_setCext_TokenType "setCext-TokenType" -#define NID_setCext_TokenType 618 -#define OBJ_setCext_TokenType OBJ_set_certExt,10L - -#define SN_setCext_IssuerCapabilities "setCext-IssuerCapabilities" -#define NID_setCext_IssuerCapabilities 619 -#define OBJ_setCext_IssuerCapabilities OBJ_set_certExt,11L - -#define SN_setAttr_Cert "setAttr-Cert" -#define NID_setAttr_Cert 620 -#define OBJ_setAttr_Cert OBJ_set_attr,0L - -#define SN_setAttr_PGWYcap "setAttr-PGWYcap" -#define LN_setAttr_PGWYcap "payment gateway capabilities" -#define NID_setAttr_PGWYcap 621 -#define OBJ_setAttr_PGWYcap OBJ_set_attr,1L - -#define SN_setAttr_TokenType "setAttr-TokenType" -#define NID_setAttr_TokenType 622 -#define OBJ_setAttr_TokenType OBJ_set_attr,2L - -#define SN_setAttr_IssCap "setAttr-IssCap" -#define LN_setAttr_IssCap "issuer capabilities" -#define NID_setAttr_IssCap 623 -#define OBJ_setAttr_IssCap OBJ_set_attr,3L - -#define SN_set_rootKeyThumb "set-rootKeyThumb" -#define NID_set_rootKeyThumb 624 -#define OBJ_set_rootKeyThumb OBJ_setAttr_Cert,0L - -#define SN_set_addPolicy "set-addPolicy" -#define NID_set_addPolicy 625 -#define OBJ_set_addPolicy OBJ_setAttr_Cert,1L - -#define SN_setAttr_Token_EMV "setAttr-Token-EMV" -#define NID_setAttr_Token_EMV 626 -#define OBJ_setAttr_Token_EMV OBJ_setAttr_TokenType,1L - -#define SN_setAttr_Token_B0Prime "setAttr-Token-B0Prime" -#define NID_setAttr_Token_B0Prime 627 -#define OBJ_setAttr_Token_B0Prime OBJ_setAttr_TokenType,2L - -#define SN_setAttr_IssCap_CVM "setAttr-IssCap-CVM" -#define NID_setAttr_IssCap_CVM 628 -#define OBJ_setAttr_IssCap_CVM OBJ_setAttr_IssCap,3L - -#define SN_setAttr_IssCap_T2 "setAttr-IssCap-T2" -#define NID_setAttr_IssCap_T2 629 -#define OBJ_setAttr_IssCap_T2 OBJ_setAttr_IssCap,4L - -#define SN_setAttr_IssCap_Sig "setAttr-IssCap-Sig" -#define NID_setAttr_IssCap_Sig 630 -#define OBJ_setAttr_IssCap_Sig OBJ_setAttr_IssCap,5L - -#define SN_setAttr_GenCryptgrm "setAttr-GenCryptgrm" -#define LN_setAttr_GenCryptgrm "generate cryptogram" -#define NID_setAttr_GenCryptgrm 631 -#define OBJ_setAttr_GenCryptgrm OBJ_setAttr_IssCap_CVM,1L - -#define SN_setAttr_T2Enc "setAttr-T2Enc" -#define LN_setAttr_T2Enc "encrypted track 2" -#define NID_setAttr_T2Enc 632 -#define OBJ_setAttr_T2Enc OBJ_setAttr_IssCap_T2,1L - -#define SN_setAttr_T2cleartxt "setAttr-T2cleartxt" -#define LN_setAttr_T2cleartxt "cleartext track 2" -#define NID_setAttr_T2cleartxt 633 -#define OBJ_setAttr_T2cleartxt OBJ_setAttr_IssCap_T2,2L - -#define SN_setAttr_TokICCsig "setAttr-TokICCsig" -#define LN_setAttr_TokICCsig "ICC or token signature" -#define NID_setAttr_TokICCsig 634 -#define OBJ_setAttr_TokICCsig OBJ_setAttr_IssCap_Sig,1L - -#define SN_setAttr_SecDevSig "setAttr-SecDevSig" -#define LN_setAttr_SecDevSig "secure device signature" -#define NID_setAttr_SecDevSig 635 -#define OBJ_setAttr_SecDevSig OBJ_setAttr_IssCap_Sig,2L - -#define SN_set_brand_IATA_ATA "set-brand-IATA-ATA" -#define NID_set_brand_IATA_ATA 636 -#define OBJ_set_brand_IATA_ATA OBJ_set_brand,1L - -#define SN_set_brand_Diners "set-brand-Diners" -#define NID_set_brand_Diners 637 -#define OBJ_set_brand_Diners OBJ_set_brand,30L - -#define SN_set_brand_AmericanExpress "set-brand-AmericanExpress" -#define NID_set_brand_AmericanExpress 638 -#define OBJ_set_brand_AmericanExpress OBJ_set_brand,34L - -#define SN_set_brand_JCB "set-brand-JCB" -#define NID_set_brand_JCB 639 -#define OBJ_set_brand_JCB OBJ_set_brand,35L - -#define SN_set_brand_Visa "set-brand-Visa" -#define NID_set_brand_Visa 640 -#define OBJ_set_brand_Visa OBJ_set_brand,4L - -#define SN_set_brand_MasterCard "set-brand-MasterCard" -#define NID_set_brand_MasterCard 641 -#define OBJ_set_brand_MasterCard OBJ_set_brand,5L - -#define SN_set_brand_Novus "set-brand-Novus" -#define NID_set_brand_Novus 642 -#define OBJ_set_brand_Novus OBJ_set_brand,6011L - -#define SN_des_cdmf "DES-CDMF" -#define LN_des_cdmf "des-cdmf" -#define NID_des_cdmf 643 -#define OBJ_des_cdmf OBJ_rsadsi,3L,10L - -#define SN_rsaOAEPEncryptionSET "rsaOAEPEncryptionSET" -#define NID_rsaOAEPEncryptionSET 644 -#define OBJ_rsaOAEPEncryptionSET OBJ_rsadsi,1L,1L,6L - -#define SN_ipsec3 "Oakley-EC2N-3" -#define LN_ipsec3 "ipsec3" -#define NID_ipsec3 749 - -#define SN_ipsec4 "Oakley-EC2N-4" -#define LN_ipsec4 "ipsec4" -#define NID_ipsec4 750 - -#define SN_whirlpool "whirlpool" -#define NID_whirlpool 804 -#define OBJ_whirlpool OBJ_iso,0L,10118L,3L,0L,55L - -#define SN_cryptopro "cryptopro" -#define NID_cryptopro 805 -#define OBJ_cryptopro OBJ_member_body,643L,2L,2L - -#define SN_cryptocom "cryptocom" -#define NID_cryptocom 806 -#define OBJ_cryptocom OBJ_member_body,643L,2L,9L - -#define SN_id_tc26 "id-tc26" -#define NID_id_tc26 974 -#define OBJ_id_tc26 OBJ_member_body,643L,7L,1L - -#define SN_id_GostR3411_94_with_GostR3410_2001 "id-GostR3411-94-with-GostR3410-2001" -#define LN_id_GostR3411_94_with_GostR3410_2001 "GOST R 34.11-94 with GOST R 34.10-2001" -#define NID_id_GostR3411_94_with_GostR3410_2001 807 -#define OBJ_id_GostR3411_94_with_GostR3410_2001 OBJ_cryptopro,3L - -#define SN_id_GostR3411_94_with_GostR3410_94 "id-GostR3411-94-with-GostR3410-94" -#define LN_id_GostR3411_94_with_GostR3410_94 "GOST R 34.11-94 with GOST R 34.10-94" -#define NID_id_GostR3411_94_with_GostR3410_94 808 -#define OBJ_id_GostR3411_94_with_GostR3410_94 OBJ_cryptopro,4L - -#define SN_id_GostR3411_94 "md_gost94" -#define LN_id_GostR3411_94 "GOST R 34.11-94" -#define NID_id_GostR3411_94 809 -#define OBJ_id_GostR3411_94 OBJ_cryptopro,9L - -#define SN_id_HMACGostR3411_94 "id-HMACGostR3411-94" -#define LN_id_HMACGostR3411_94 "HMAC GOST 34.11-94" -#define NID_id_HMACGostR3411_94 810 -#define OBJ_id_HMACGostR3411_94 OBJ_cryptopro,10L - -#define SN_id_GostR3410_2001 "gost2001" -#define LN_id_GostR3410_2001 "GOST R 34.10-2001" -#define NID_id_GostR3410_2001 811 -#define OBJ_id_GostR3410_2001 OBJ_cryptopro,19L - -#define SN_id_GostR3410_94 "gost94" -#define LN_id_GostR3410_94 "GOST R 34.10-94" -#define NID_id_GostR3410_94 812 -#define OBJ_id_GostR3410_94 OBJ_cryptopro,20L - -#define SN_id_Gost28147_89 "gost89" -#define LN_id_Gost28147_89 "GOST 28147-89" -#define NID_id_Gost28147_89 813 -#define OBJ_id_Gost28147_89 OBJ_cryptopro,21L - -#define SN_gost89_cnt "gost89-cnt" -#define NID_gost89_cnt 814 - -#define SN_gost89_cnt_12 "gost89-cnt-12" -#define NID_gost89_cnt_12 975 - -#define SN_gost89_cbc "gost89-cbc" -#define NID_gost89_cbc 1009 - -#define SN_gost89_ecb "gost89-ecb" -#define NID_gost89_ecb 1010 - -#define SN_gost89_ctr "gost89-ctr" -#define NID_gost89_ctr 1011 - -#define SN_id_Gost28147_89_MAC "gost-mac" -#define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC" -#define NID_id_Gost28147_89_MAC 815 -#define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L - -#define SN_gost_mac_12 "gost-mac-12" -#define NID_gost_mac_12 976 - -#define SN_id_GostR3411_94_prf "prf-gostr3411-94" -#define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF" -#define NID_id_GostR3411_94_prf 816 -#define OBJ_id_GostR3411_94_prf OBJ_cryptopro,23L - -#define SN_id_GostR3410_2001DH "id-GostR3410-2001DH" -#define LN_id_GostR3410_2001DH "GOST R 34.10-2001 DH" -#define NID_id_GostR3410_2001DH 817 -#define OBJ_id_GostR3410_2001DH OBJ_cryptopro,98L - -#define SN_id_GostR3410_94DH "id-GostR3410-94DH" -#define LN_id_GostR3410_94DH "GOST R 34.10-94 DH" -#define NID_id_GostR3410_94DH 818 -#define OBJ_id_GostR3410_94DH OBJ_cryptopro,99L - -#define SN_id_Gost28147_89_CryptoPro_KeyMeshing "id-Gost28147-89-CryptoPro-KeyMeshing" -#define NID_id_Gost28147_89_CryptoPro_KeyMeshing 819 -#define OBJ_id_Gost28147_89_CryptoPro_KeyMeshing OBJ_cryptopro,14L,1L - -#define SN_id_Gost28147_89_None_KeyMeshing "id-Gost28147-89-None-KeyMeshing" -#define NID_id_Gost28147_89_None_KeyMeshing 820 -#define OBJ_id_Gost28147_89_None_KeyMeshing OBJ_cryptopro,14L,0L - -#define SN_id_GostR3411_94_TestParamSet "id-GostR3411-94-TestParamSet" -#define NID_id_GostR3411_94_TestParamSet 821 -#define OBJ_id_GostR3411_94_TestParamSet OBJ_cryptopro,30L,0L - -#define SN_id_GostR3411_94_CryptoProParamSet "id-GostR3411-94-CryptoProParamSet" -#define NID_id_GostR3411_94_CryptoProParamSet 822 -#define OBJ_id_GostR3411_94_CryptoProParamSet OBJ_cryptopro,30L,1L - -#define SN_id_Gost28147_89_TestParamSet "id-Gost28147-89-TestParamSet" -#define NID_id_Gost28147_89_TestParamSet 823 -#define OBJ_id_Gost28147_89_TestParamSet OBJ_cryptopro,31L,0L - -#define SN_id_Gost28147_89_CryptoPro_A_ParamSet "id-Gost28147-89-CryptoPro-A-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_A_ParamSet 824 -#define OBJ_id_Gost28147_89_CryptoPro_A_ParamSet OBJ_cryptopro,31L,1L - -#define SN_id_Gost28147_89_CryptoPro_B_ParamSet "id-Gost28147-89-CryptoPro-B-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_B_ParamSet 825 -#define OBJ_id_Gost28147_89_CryptoPro_B_ParamSet OBJ_cryptopro,31L,2L - -#define SN_id_Gost28147_89_CryptoPro_C_ParamSet "id-Gost28147-89-CryptoPro-C-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_C_ParamSet 826 -#define OBJ_id_Gost28147_89_CryptoPro_C_ParamSet OBJ_cryptopro,31L,3L - -#define SN_id_Gost28147_89_CryptoPro_D_ParamSet "id-Gost28147-89-CryptoPro-D-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_D_ParamSet 827 -#define OBJ_id_Gost28147_89_CryptoPro_D_ParamSet OBJ_cryptopro,31L,4L - -#define SN_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-1-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet 828 -#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_1_ParamSet OBJ_cryptopro,31L,5L - -#define SN_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet "id-Gost28147-89-CryptoPro-Oscar-1-0-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet 829 -#define OBJ_id_Gost28147_89_CryptoPro_Oscar_1_0_ParamSet OBJ_cryptopro,31L,6L - -#define SN_id_Gost28147_89_CryptoPro_RIC_1_ParamSet "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" -#define NID_id_Gost28147_89_CryptoPro_RIC_1_ParamSet 830 -#define OBJ_id_Gost28147_89_CryptoPro_RIC_1_ParamSet OBJ_cryptopro,31L,7L - -#define SN_id_GostR3410_94_TestParamSet "id-GostR3410-94-TestParamSet" -#define NID_id_GostR3410_94_TestParamSet 831 -#define OBJ_id_GostR3410_94_TestParamSet OBJ_cryptopro,32L,0L - -#define SN_id_GostR3410_94_CryptoPro_A_ParamSet "id-GostR3410-94-CryptoPro-A-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_A_ParamSet 832 -#define OBJ_id_GostR3410_94_CryptoPro_A_ParamSet OBJ_cryptopro,32L,2L - -#define SN_id_GostR3410_94_CryptoPro_B_ParamSet "id-GostR3410-94-CryptoPro-B-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_B_ParamSet 833 -#define OBJ_id_GostR3410_94_CryptoPro_B_ParamSet OBJ_cryptopro,32L,3L - -#define SN_id_GostR3410_94_CryptoPro_C_ParamSet "id-GostR3410-94-CryptoPro-C-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_C_ParamSet 834 -#define OBJ_id_GostR3410_94_CryptoPro_C_ParamSet OBJ_cryptopro,32L,4L - -#define SN_id_GostR3410_94_CryptoPro_D_ParamSet "id-GostR3410-94-CryptoPro-D-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_D_ParamSet 835 -#define OBJ_id_GostR3410_94_CryptoPro_D_ParamSet OBJ_cryptopro,32L,5L - -#define SN_id_GostR3410_94_CryptoPro_XchA_ParamSet "id-GostR3410-94-CryptoPro-XchA-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchA_ParamSet 836 -#define OBJ_id_GostR3410_94_CryptoPro_XchA_ParamSet OBJ_cryptopro,33L,1L - -#define SN_id_GostR3410_94_CryptoPro_XchB_ParamSet "id-GostR3410-94-CryptoPro-XchB-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchB_ParamSet 837 -#define OBJ_id_GostR3410_94_CryptoPro_XchB_ParamSet OBJ_cryptopro,33L,2L - -#define SN_id_GostR3410_94_CryptoPro_XchC_ParamSet "id-GostR3410-94-CryptoPro-XchC-ParamSet" -#define NID_id_GostR3410_94_CryptoPro_XchC_ParamSet 838 -#define OBJ_id_GostR3410_94_CryptoPro_XchC_ParamSet OBJ_cryptopro,33L,3L - -#define SN_id_GostR3410_2001_TestParamSet "id-GostR3410-2001-TestParamSet" -#define NID_id_GostR3410_2001_TestParamSet 839 -#define OBJ_id_GostR3410_2001_TestParamSet OBJ_cryptopro,35L,0L - -#define SN_id_GostR3410_2001_CryptoPro_A_ParamSet "id-GostR3410-2001-CryptoPro-A-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_A_ParamSet 840 -#define OBJ_id_GostR3410_2001_CryptoPro_A_ParamSet OBJ_cryptopro,35L,1L - -#define SN_id_GostR3410_2001_CryptoPro_B_ParamSet "id-GostR3410-2001-CryptoPro-B-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_B_ParamSet 841 -#define OBJ_id_GostR3410_2001_CryptoPro_B_ParamSet OBJ_cryptopro,35L,2L - -#define SN_id_GostR3410_2001_CryptoPro_C_ParamSet "id-GostR3410-2001-CryptoPro-C-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_C_ParamSet 842 -#define OBJ_id_GostR3410_2001_CryptoPro_C_ParamSet OBJ_cryptopro,35L,3L - -#define SN_id_GostR3410_2001_CryptoPro_XchA_ParamSet "id-GostR3410-2001-CryptoPro-XchA-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet 843 -#define OBJ_id_GostR3410_2001_CryptoPro_XchA_ParamSet OBJ_cryptopro,36L,0L - -#define SN_id_GostR3410_2001_CryptoPro_XchB_ParamSet "id-GostR3410-2001-CryptoPro-XchB-ParamSet" -#define NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet 844 -#define OBJ_id_GostR3410_2001_CryptoPro_XchB_ParamSet OBJ_cryptopro,36L,1L - -#define SN_id_GostR3410_94_a "id-GostR3410-94-a" -#define NID_id_GostR3410_94_a 845 -#define OBJ_id_GostR3410_94_a OBJ_id_GostR3410_94,1L - -#define SN_id_GostR3410_94_aBis "id-GostR3410-94-aBis" -#define NID_id_GostR3410_94_aBis 846 -#define OBJ_id_GostR3410_94_aBis OBJ_id_GostR3410_94,2L - -#define SN_id_GostR3410_94_b "id-GostR3410-94-b" -#define NID_id_GostR3410_94_b 847 -#define OBJ_id_GostR3410_94_b OBJ_id_GostR3410_94,3L - -#define SN_id_GostR3410_94_bBis "id-GostR3410-94-bBis" -#define NID_id_GostR3410_94_bBis 848 -#define OBJ_id_GostR3410_94_bBis OBJ_id_GostR3410_94,4L - -#define SN_id_Gost28147_89_cc "id-Gost28147-89-cc" -#define LN_id_Gost28147_89_cc "GOST 28147-89 Cryptocom ParamSet" -#define NID_id_Gost28147_89_cc 849 -#define OBJ_id_Gost28147_89_cc OBJ_cryptocom,1L,6L,1L - -#define SN_id_GostR3410_94_cc "gost94cc" -#define LN_id_GostR3410_94_cc "GOST 34.10-94 Cryptocom" -#define NID_id_GostR3410_94_cc 850 -#define OBJ_id_GostR3410_94_cc OBJ_cryptocom,1L,5L,3L - -#define SN_id_GostR3410_2001_cc "gost2001cc" -#define LN_id_GostR3410_2001_cc "GOST 34.10-2001 Cryptocom" -#define NID_id_GostR3410_2001_cc 851 -#define OBJ_id_GostR3410_2001_cc OBJ_cryptocom,1L,5L,4L - -#define SN_id_GostR3411_94_with_GostR3410_94_cc "id-GostR3411-94-with-GostR3410-94-cc" -#define LN_id_GostR3411_94_with_GostR3410_94_cc "GOST R 34.11-94 with GOST R 34.10-94 Cryptocom" -#define NID_id_GostR3411_94_with_GostR3410_94_cc 852 -#define OBJ_id_GostR3411_94_with_GostR3410_94_cc OBJ_cryptocom,1L,3L,3L - -#define SN_id_GostR3411_94_with_GostR3410_2001_cc "id-GostR3411-94-with-GostR3410-2001-cc" -#define LN_id_GostR3411_94_with_GostR3410_2001_cc "GOST R 34.11-94 with GOST R 34.10-2001 Cryptocom" -#define NID_id_GostR3411_94_with_GostR3410_2001_cc 853 -#define OBJ_id_GostR3411_94_with_GostR3410_2001_cc OBJ_cryptocom,1L,3L,4L - -#define SN_id_GostR3410_2001_ParamSet_cc "id-GostR3410-2001-ParamSet-cc" -#define LN_id_GostR3410_2001_ParamSet_cc "GOST R 3410-2001 Parameter Set Cryptocom" -#define NID_id_GostR3410_2001_ParamSet_cc 854 -#define OBJ_id_GostR3410_2001_ParamSet_cc OBJ_cryptocom,1L,8L,1L - -#define SN_id_tc26_algorithms "id-tc26-algorithms" -#define NID_id_tc26_algorithms 977 -#define OBJ_id_tc26_algorithms OBJ_id_tc26,1L - -#define SN_id_tc26_sign "id-tc26-sign" -#define NID_id_tc26_sign 978 -#define OBJ_id_tc26_sign OBJ_id_tc26_algorithms,1L - -#define SN_id_GostR3410_2012_256 "gost2012_256" -#define LN_id_GostR3410_2012_256 "GOST R 34.10-2012 with 256 bit modulus" -#define NID_id_GostR3410_2012_256 979 -#define OBJ_id_GostR3410_2012_256 OBJ_id_tc26_sign,1L - -#define SN_id_GostR3410_2012_512 "gost2012_512" -#define LN_id_GostR3410_2012_512 "GOST R 34.10-2012 with 512 bit modulus" -#define NID_id_GostR3410_2012_512 980 -#define OBJ_id_GostR3410_2012_512 OBJ_id_tc26_sign,2L - -#define SN_id_tc26_digest "id-tc26-digest" -#define NID_id_tc26_digest 981 -#define OBJ_id_tc26_digest OBJ_id_tc26_algorithms,2L - -#define SN_id_GostR3411_2012_256 "md_gost12_256" -#define LN_id_GostR3411_2012_256 "GOST R 34.11-2012 with 256 bit hash" -#define NID_id_GostR3411_2012_256 982 -#define OBJ_id_GostR3411_2012_256 OBJ_id_tc26_digest,2L - -#define SN_id_GostR3411_2012_512 "md_gost12_512" -#define LN_id_GostR3411_2012_512 "GOST R 34.11-2012 with 512 bit hash" -#define NID_id_GostR3411_2012_512 983 -#define OBJ_id_GostR3411_2012_512 OBJ_id_tc26_digest,3L - -#define SN_id_tc26_signwithdigest "id-tc26-signwithdigest" -#define NID_id_tc26_signwithdigest 984 -#define OBJ_id_tc26_signwithdigest OBJ_id_tc26_algorithms,3L - -#define SN_id_tc26_signwithdigest_gost3410_2012_256 "id-tc26-signwithdigest-gost3410-2012-256" -#define LN_id_tc26_signwithdigest_gost3410_2012_256 "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)" -#define NID_id_tc26_signwithdigest_gost3410_2012_256 985 -#define OBJ_id_tc26_signwithdigest_gost3410_2012_256 OBJ_id_tc26_signwithdigest,2L - -#define SN_id_tc26_signwithdigest_gost3410_2012_512 "id-tc26-signwithdigest-gost3410-2012-512" -#define LN_id_tc26_signwithdigest_gost3410_2012_512 "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)" -#define NID_id_tc26_signwithdigest_gost3410_2012_512 986 -#define OBJ_id_tc26_signwithdigest_gost3410_2012_512 OBJ_id_tc26_signwithdigest,3L - -#define SN_id_tc26_mac "id-tc26-mac" -#define NID_id_tc26_mac 987 -#define OBJ_id_tc26_mac OBJ_id_tc26_algorithms,4L - -#define SN_id_tc26_hmac_gost_3411_2012_256 "id-tc26-hmac-gost-3411-2012-256" -#define LN_id_tc26_hmac_gost_3411_2012_256 "HMAC GOST 34.11-2012 256 bit" -#define NID_id_tc26_hmac_gost_3411_2012_256 988 -#define OBJ_id_tc26_hmac_gost_3411_2012_256 OBJ_id_tc26_mac,1L - -#define SN_id_tc26_hmac_gost_3411_2012_512 "id-tc26-hmac-gost-3411-2012-512" -#define LN_id_tc26_hmac_gost_3411_2012_512 "HMAC GOST 34.11-2012 512 bit" -#define NID_id_tc26_hmac_gost_3411_2012_512 989 -#define OBJ_id_tc26_hmac_gost_3411_2012_512 OBJ_id_tc26_mac,2L - -#define SN_id_tc26_cipher "id-tc26-cipher" -#define NID_id_tc26_cipher 990 -#define OBJ_id_tc26_cipher OBJ_id_tc26_algorithms,5L - -#define SN_id_tc26_cipher_gostr3412_2015_magma "id-tc26-cipher-gostr3412-2015-magma" -#define NID_id_tc26_cipher_gostr3412_2015_magma 1173 -#define OBJ_id_tc26_cipher_gostr3412_2015_magma OBJ_id_tc26_cipher,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_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_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_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 -#define OBJ_id_tc26_agreement OBJ_id_tc26_algorithms,6L - -#define SN_id_tc26_agreement_gost_3410_2012_256 "id-tc26-agreement-gost-3410-2012-256" -#define NID_id_tc26_agreement_gost_3410_2012_256 992 -#define OBJ_id_tc26_agreement_gost_3410_2012_256 OBJ_id_tc26_agreement,1L - -#define SN_id_tc26_agreement_gost_3410_2012_512 "id-tc26-agreement-gost-3410-2012-512" -#define NID_id_tc26_agreement_gost_3410_2012_512 993 -#define OBJ_id_tc26_agreement_gost_3410_2012_512 OBJ_id_tc26_agreement,2L - -#define SN_id_tc26_wrap "id-tc26-wrap" -#define NID_id_tc26_wrap 1179 -#define OBJ_id_tc26_wrap OBJ_id_tc26_algorithms,7L - -#define SN_id_tc26_wrap_gostr3412_2015_magma "id-tc26-wrap-gostr3412-2015-magma" -#define NID_id_tc26_wrap_gostr3412_2015_magma 1180 -#define OBJ_id_tc26_wrap_gostr3412_2015_magma OBJ_id_tc26_wrap,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_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 -#define OBJ_id_tc26_constants OBJ_id_tc26,2L - -#define SN_id_tc26_sign_constants "id-tc26-sign-constants" -#define NID_id_tc26_sign_constants 995 -#define OBJ_id_tc26_sign_constants OBJ_id_tc26_constants,1L - -#define SN_id_tc26_gost_3410_2012_256_constants "id-tc26-gost-3410-2012-256-constants" -#define NID_id_tc26_gost_3410_2012_256_constants 1147 -#define OBJ_id_tc26_gost_3410_2012_256_constants OBJ_id_tc26_sign_constants,1L - -#define SN_id_tc26_gost_3410_2012_256_paramSetA "id-tc26-gost-3410-2012-256-paramSetA" -#define LN_id_tc26_gost_3410_2012_256_paramSetA "GOST R 34.10-2012 (256 bit) ParamSet A" -#define NID_id_tc26_gost_3410_2012_256_paramSetA 1148 -#define OBJ_id_tc26_gost_3410_2012_256_paramSetA OBJ_id_tc26_gost_3410_2012_256_constants,1L - -#define SN_id_tc26_gost_3410_2012_256_paramSetB "id-tc26-gost-3410-2012-256-paramSetB" -#define LN_id_tc26_gost_3410_2012_256_paramSetB "GOST R 34.10-2012 (256 bit) ParamSet B" -#define NID_id_tc26_gost_3410_2012_256_paramSetB 1184 -#define OBJ_id_tc26_gost_3410_2012_256_paramSetB OBJ_id_tc26_gost_3410_2012_256_constants,2L - -#define SN_id_tc26_gost_3410_2012_256_paramSetC "id-tc26-gost-3410-2012-256-paramSetC" -#define LN_id_tc26_gost_3410_2012_256_paramSetC "GOST R 34.10-2012 (256 bit) ParamSet C" -#define NID_id_tc26_gost_3410_2012_256_paramSetC 1185 -#define OBJ_id_tc26_gost_3410_2012_256_paramSetC OBJ_id_tc26_gost_3410_2012_256_constants,3L - -#define SN_id_tc26_gost_3410_2012_256_paramSetD "id-tc26-gost-3410-2012-256-paramSetD" -#define LN_id_tc26_gost_3410_2012_256_paramSetD "GOST R 34.10-2012 (256 bit) ParamSet D" -#define NID_id_tc26_gost_3410_2012_256_paramSetD 1186 -#define OBJ_id_tc26_gost_3410_2012_256_paramSetD OBJ_id_tc26_gost_3410_2012_256_constants,4L - -#define SN_id_tc26_gost_3410_2012_512_constants "id-tc26-gost-3410-2012-512-constants" -#define NID_id_tc26_gost_3410_2012_512_constants 996 -#define OBJ_id_tc26_gost_3410_2012_512_constants OBJ_id_tc26_sign_constants,2L - -#define SN_id_tc26_gost_3410_2012_512_paramSetTest "id-tc26-gost-3410-2012-512-paramSetTest" -#define LN_id_tc26_gost_3410_2012_512_paramSetTest "GOST R 34.10-2012 (512 bit) testing parameter set" -#define NID_id_tc26_gost_3410_2012_512_paramSetTest 997 -#define OBJ_id_tc26_gost_3410_2012_512_paramSetTest OBJ_id_tc26_gost_3410_2012_512_constants,0L - -#define SN_id_tc26_gost_3410_2012_512_paramSetA "id-tc26-gost-3410-2012-512-paramSetA" -#define LN_id_tc26_gost_3410_2012_512_paramSetA "GOST R 34.10-2012 (512 bit) ParamSet A" -#define NID_id_tc26_gost_3410_2012_512_paramSetA 998 -#define OBJ_id_tc26_gost_3410_2012_512_paramSetA OBJ_id_tc26_gost_3410_2012_512_constants,1L - -#define SN_id_tc26_gost_3410_2012_512_paramSetB "id-tc26-gost-3410-2012-512-paramSetB" -#define LN_id_tc26_gost_3410_2012_512_paramSetB "GOST R 34.10-2012 (512 bit) ParamSet B" -#define NID_id_tc26_gost_3410_2012_512_paramSetB 999 -#define OBJ_id_tc26_gost_3410_2012_512_paramSetB OBJ_id_tc26_gost_3410_2012_512_constants,2L - -#define SN_id_tc26_gost_3410_2012_512_paramSetC "id-tc26-gost-3410-2012-512-paramSetC" -#define LN_id_tc26_gost_3410_2012_512_paramSetC "GOST R 34.10-2012 (512 bit) ParamSet C" -#define NID_id_tc26_gost_3410_2012_512_paramSetC 1149 -#define OBJ_id_tc26_gost_3410_2012_512_paramSetC OBJ_id_tc26_gost_3410_2012_512_constants,3L - -#define SN_id_tc26_digest_constants "id-tc26-digest-constants" -#define NID_id_tc26_digest_constants 1000 -#define OBJ_id_tc26_digest_constants OBJ_id_tc26_constants,2L - -#define SN_id_tc26_cipher_constants "id-tc26-cipher-constants" -#define NID_id_tc26_cipher_constants 1001 -#define OBJ_id_tc26_cipher_constants OBJ_id_tc26_constants,5L - -#define SN_id_tc26_gost_28147_constants "id-tc26-gost-28147-constants" -#define NID_id_tc26_gost_28147_constants 1002 -#define OBJ_id_tc26_gost_28147_constants OBJ_id_tc26_cipher_constants,1L - -#define SN_id_tc26_gost_28147_param_Z "id-tc26-gost-28147-param-Z" -#define LN_id_tc26_gost_28147_param_Z "GOST 28147-89 TC26 parameter set" -#define NID_id_tc26_gost_28147_param_Z 1003 -#define OBJ_id_tc26_gost_28147_param_Z OBJ_id_tc26_gost_28147_constants,1L - -#define SN_INN "INN" -#define LN_INN "INN" -#define NID_INN 1004 -#define OBJ_INN OBJ_member_body,643L,3L,131L,1L,1L - -#define SN_OGRN "OGRN" -#define LN_OGRN "OGRN" -#define NID_OGRN 1005 -#define OBJ_OGRN OBJ_member_body,643L,100L,1L - -#define SN_SNILS "SNILS" -#define LN_SNILS "SNILS" -#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 -#define OBJ_subjectSignTool OBJ_member_body,643L,100L,111L - -#define SN_issuerSignTool "issuerSignTool" -#define LN_issuerSignTool "Signing Tool of Issuer" -#define NID_issuerSignTool 1008 -#define OBJ_issuerSignTool OBJ_member_body,643L,100L,112L - -#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_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_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_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_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_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 - -#define SN_magma_ctr "magma-ctr" -#define NID_magma_ctr 1188 - -#define SN_magma_ofb "magma-ofb" -#define NID_magma_ofb 1189 - -#define SN_magma_cbc "magma-cbc" -#define NID_magma_cbc 1190 - -#define SN_magma_cfb "magma-cfb" -#define NID_magma_cfb 1191 - -#define SN_magma_mac "magma-mac" -#define NID_magma_mac 1192 - -#define SN_camellia_128_cbc "CAMELLIA-128-CBC" -#define LN_camellia_128_cbc "camellia-128-cbc" -#define NID_camellia_128_cbc 751 -#define OBJ_camellia_128_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,2L - -#define SN_camellia_192_cbc "CAMELLIA-192-CBC" -#define LN_camellia_192_cbc "camellia-192-cbc" -#define NID_camellia_192_cbc 752 -#define OBJ_camellia_192_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,3L - -#define SN_camellia_256_cbc "CAMELLIA-256-CBC" -#define LN_camellia_256_cbc "camellia-256-cbc" -#define NID_camellia_256_cbc 753 -#define OBJ_camellia_256_cbc 1L,2L,392L,200011L,61L,1L,1L,1L,4L - -#define SN_id_camellia128_wrap "id-camellia128-wrap" -#define NID_id_camellia128_wrap 907 -#define OBJ_id_camellia128_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,2L - -#define SN_id_camellia192_wrap "id-camellia192-wrap" -#define NID_id_camellia192_wrap 908 -#define OBJ_id_camellia192_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,3L - -#define SN_id_camellia256_wrap "id-camellia256-wrap" -#define NID_id_camellia256_wrap 909 -#define OBJ_id_camellia256_wrap 1L,2L,392L,200011L,61L,1L,1L,3L,4L - -#define OBJ_ntt_ds 0L,3L,4401L,5L - -#define OBJ_camellia OBJ_ntt_ds,3L,1L,9L - -#define SN_camellia_128_ecb "CAMELLIA-128-ECB" -#define LN_camellia_128_ecb "camellia-128-ecb" -#define NID_camellia_128_ecb 754 -#define OBJ_camellia_128_ecb OBJ_camellia,1L - -#define SN_camellia_128_ofb128 "CAMELLIA-128-OFB" -#define LN_camellia_128_ofb128 "camellia-128-ofb" -#define NID_camellia_128_ofb128 766 -#define OBJ_camellia_128_ofb128 OBJ_camellia,3L - -#define SN_camellia_128_cfb128 "CAMELLIA-128-CFB" -#define LN_camellia_128_cfb128 "camellia-128-cfb" -#define NID_camellia_128_cfb128 757 -#define OBJ_camellia_128_cfb128 OBJ_camellia,4L - -#define SN_camellia_128_gcm "CAMELLIA-128-GCM" -#define LN_camellia_128_gcm "camellia-128-gcm" -#define NID_camellia_128_gcm 961 -#define OBJ_camellia_128_gcm OBJ_camellia,6L - -#define SN_camellia_128_ccm "CAMELLIA-128-CCM" -#define LN_camellia_128_ccm "camellia-128-ccm" -#define NID_camellia_128_ccm 962 -#define OBJ_camellia_128_ccm OBJ_camellia,7L - -#define SN_camellia_128_ctr "CAMELLIA-128-CTR" -#define LN_camellia_128_ctr "camellia-128-ctr" -#define NID_camellia_128_ctr 963 -#define OBJ_camellia_128_ctr OBJ_camellia,9L - -#define SN_camellia_128_cmac "CAMELLIA-128-CMAC" -#define LN_camellia_128_cmac "camellia-128-cmac" -#define NID_camellia_128_cmac 964 -#define OBJ_camellia_128_cmac OBJ_camellia,10L - -#define SN_camellia_192_ecb "CAMELLIA-192-ECB" -#define LN_camellia_192_ecb "camellia-192-ecb" -#define NID_camellia_192_ecb 755 -#define OBJ_camellia_192_ecb OBJ_camellia,21L - -#define SN_camellia_192_ofb128 "CAMELLIA-192-OFB" -#define LN_camellia_192_ofb128 "camellia-192-ofb" -#define NID_camellia_192_ofb128 767 -#define OBJ_camellia_192_ofb128 OBJ_camellia,23L - -#define SN_camellia_192_cfb128 "CAMELLIA-192-CFB" -#define LN_camellia_192_cfb128 "camellia-192-cfb" -#define NID_camellia_192_cfb128 758 -#define OBJ_camellia_192_cfb128 OBJ_camellia,24L - -#define SN_camellia_192_gcm "CAMELLIA-192-GCM" -#define LN_camellia_192_gcm "camellia-192-gcm" -#define NID_camellia_192_gcm 965 -#define OBJ_camellia_192_gcm OBJ_camellia,26L - -#define SN_camellia_192_ccm "CAMELLIA-192-CCM" -#define LN_camellia_192_ccm "camellia-192-ccm" -#define NID_camellia_192_ccm 966 -#define OBJ_camellia_192_ccm OBJ_camellia,27L - -#define SN_camellia_192_ctr "CAMELLIA-192-CTR" -#define LN_camellia_192_ctr "camellia-192-ctr" -#define NID_camellia_192_ctr 967 -#define OBJ_camellia_192_ctr OBJ_camellia,29L - -#define SN_camellia_192_cmac "CAMELLIA-192-CMAC" -#define LN_camellia_192_cmac "camellia-192-cmac" -#define NID_camellia_192_cmac 968 -#define OBJ_camellia_192_cmac OBJ_camellia,30L - -#define SN_camellia_256_ecb "CAMELLIA-256-ECB" -#define LN_camellia_256_ecb "camellia-256-ecb" -#define NID_camellia_256_ecb 756 -#define OBJ_camellia_256_ecb OBJ_camellia,41L - -#define SN_camellia_256_ofb128 "CAMELLIA-256-OFB" -#define LN_camellia_256_ofb128 "camellia-256-ofb" -#define NID_camellia_256_ofb128 768 -#define OBJ_camellia_256_ofb128 OBJ_camellia,43L - -#define SN_camellia_256_cfb128 "CAMELLIA-256-CFB" -#define LN_camellia_256_cfb128 "camellia-256-cfb" -#define NID_camellia_256_cfb128 759 -#define OBJ_camellia_256_cfb128 OBJ_camellia,44L - -#define SN_camellia_256_gcm "CAMELLIA-256-GCM" -#define LN_camellia_256_gcm "camellia-256-gcm" -#define NID_camellia_256_gcm 969 -#define OBJ_camellia_256_gcm OBJ_camellia,46L - -#define SN_camellia_256_ccm "CAMELLIA-256-CCM" -#define LN_camellia_256_ccm "camellia-256-ccm" -#define NID_camellia_256_ccm 970 -#define OBJ_camellia_256_ccm OBJ_camellia,47L - -#define SN_camellia_256_ctr "CAMELLIA-256-CTR" -#define LN_camellia_256_ctr "camellia-256-ctr" -#define NID_camellia_256_ctr 971 -#define OBJ_camellia_256_ctr OBJ_camellia,49L - -#define SN_camellia_256_cmac "CAMELLIA-256-CMAC" -#define LN_camellia_256_cmac "camellia-256-cmac" -#define NID_camellia_256_cmac 972 -#define OBJ_camellia_256_cmac OBJ_camellia,50L - -#define SN_camellia_128_cfb1 "CAMELLIA-128-CFB1" -#define LN_camellia_128_cfb1 "camellia-128-cfb1" -#define NID_camellia_128_cfb1 760 - -#define SN_camellia_192_cfb1 "CAMELLIA-192-CFB1" -#define LN_camellia_192_cfb1 "camellia-192-cfb1" -#define NID_camellia_192_cfb1 761 - -#define SN_camellia_256_cfb1 "CAMELLIA-256-CFB1" -#define LN_camellia_256_cfb1 "camellia-256-cfb1" -#define NID_camellia_256_cfb1 762 - -#define SN_camellia_128_cfb8 "CAMELLIA-128-CFB8" -#define LN_camellia_128_cfb8 "camellia-128-cfb8" -#define NID_camellia_128_cfb8 763 - -#define SN_camellia_192_cfb8 "CAMELLIA-192-CFB8" -#define LN_camellia_192_cfb8 "camellia-192-cfb8" -#define NID_camellia_192_cfb8 764 - -#define SN_camellia_256_cfb8 "CAMELLIA-256-CFB8" -#define LN_camellia_256_cfb8 "camellia-256-cfb8" -#define NID_camellia_256_cfb8 765 - -#define OBJ_aria 1L,2L,410L,200046L,1L,1L - -#define SN_aria_128_ecb "ARIA-128-ECB" -#define LN_aria_128_ecb "aria-128-ecb" -#define NID_aria_128_ecb 1065 -#define OBJ_aria_128_ecb OBJ_aria,1L - -#define SN_aria_128_cbc "ARIA-128-CBC" -#define LN_aria_128_cbc "aria-128-cbc" -#define NID_aria_128_cbc 1066 -#define OBJ_aria_128_cbc OBJ_aria,2L - -#define SN_aria_128_cfb128 "ARIA-128-CFB" -#define LN_aria_128_cfb128 "aria-128-cfb" -#define NID_aria_128_cfb128 1067 -#define OBJ_aria_128_cfb128 OBJ_aria,3L - -#define SN_aria_128_ofb128 "ARIA-128-OFB" -#define LN_aria_128_ofb128 "aria-128-ofb" -#define NID_aria_128_ofb128 1068 -#define OBJ_aria_128_ofb128 OBJ_aria,4L - -#define SN_aria_128_ctr "ARIA-128-CTR" -#define LN_aria_128_ctr "aria-128-ctr" -#define NID_aria_128_ctr 1069 -#define OBJ_aria_128_ctr OBJ_aria,5L - -#define SN_aria_192_ecb "ARIA-192-ECB" -#define LN_aria_192_ecb "aria-192-ecb" -#define NID_aria_192_ecb 1070 -#define OBJ_aria_192_ecb OBJ_aria,6L - -#define SN_aria_192_cbc "ARIA-192-CBC" -#define LN_aria_192_cbc "aria-192-cbc" -#define NID_aria_192_cbc 1071 -#define OBJ_aria_192_cbc OBJ_aria,7L - -#define SN_aria_192_cfb128 "ARIA-192-CFB" -#define LN_aria_192_cfb128 "aria-192-cfb" -#define NID_aria_192_cfb128 1072 -#define OBJ_aria_192_cfb128 OBJ_aria,8L - -#define SN_aria_192_ofb128 "ARIA-192-OFB" -#define LN_aria_192_ofb128 "aria-192-ofb" -#define NID_aria_192_ofb128 1073 -#define OBJ_aria_192_ofb128 OBJ_aria,9L - -#define SN_aria_192_ctr "ARIA-192-CTR" -#define LN_aria_192_ctr "aria-192-ctr" -#define NID_aria_192_ctr 1074 -#define OBJ_aria_192_ctr OBJ_aria,10L - -#define SN_aria_256_ecb "ARIA-256-ECB" -#define LN_aria_256_ecb "aria-256-ecb" -#define NID_aria_256_ecb 1075 -#define OBJ_aria_256_ecb OBJ_aria,11L - -#define SN_aria_256_cbc "ARIA-256-CBC" -#define LN_aria_256_cbc "aria-256-cbc" -#define NID_aria_256_cbc 1076 -#define OBJ_aria_256_cbc OBJ_aria,12L - -#define SN_aria_256_cfb128 "ARIA-256-CFB" -#define LN_aria_256_cfb128 "aria-256-cfb" -#define NID_aria_256_cfb128 1077 -#define OBJ_aria_256_cfb128 OBJ_aria,13L - -#define SN_aria_256_ofb128 "ARIA-256-OFB" -#define LN_aria_256_ofb128 "aria-256-ofb" -#define NID_aria_256_ofb128 1078 -#define OBJ_aria_256_ofb128 OBJ_aria,14L - -#define SN_aria_256_ctr "ARIA-256-CTR" -#define LN_aria_256_ctr "aria-256-ctr" -#define NID_aria_256_ctr 1079 -#define OBJ_aria_256_ctr OBJ_aria,15L - -#define SN_aria_128_cfb1 "ARIA-128-CFB1" -#define LN_aria_128_cfb1 "aria-128-cfb1" -#define NID_aria_128_cfb1 1080 - -#define SN_aria_192_cfb1 "ARIA-192-CFB1" -#define LN_aria_192_cfb1 "aria-192-cfb1" -#define NID_aria_192_cfb1 1081 - -#define SN_aria_256_cfb1 "ARIA-256-CFB1" -#define LN_aria_256_cfb1 "aria-256-cfb1" -#define NID_aria_256_cfb1 1082 - -#define SN_aria_128_cfb8 "ARIA-128-CFB8" -#define LN_aria_128_cfb8 "aria-128-cfb8" -#define NID_aria_128_cfb8 1083 - -#define SN_aria_192_cfb8 "ARIA-192-CFB8" -#define LN_aria_192_cfb8 "aria-192-cfb8" -#define NID_aria_192_cfb8 1084 - -#define SN_aria_256_cfb8 "ARIA-256-CFB8" -#define LN_aria_256_cfb8 "aria-256-cfb8" -#define NID_aria_256_cfb8 1085 - -#define SN_aria_128_ccm "ARIA-128-CCM" -#define LN_aria_128_ccm "aria-128-ccm" -#define NID_aria_128_ccm 1120 -#define OBJ_aria_128_ccm OBJ_aria,37L - -#define SN_aria_192_ccm "ARIA-192-CCM" -#define LN_aria_192_ccm "aria-192-ccm" -#define NID_aria_192_ccm 1121 -#define OBJ_aria_192_ccm OBJ_aria,38L - -#define SN_aria_256_ccm "ARIA-256-CCM" -#define LN_aria_256_ccm "aria-256-ccm" -#define NID_aria_256_ccm 1122 -#define OBJ_aria_256_ccm OBJ_aria,39L - -#define SN_aria_128_gcm "ARIA-128-GCM" -#define LN_aria_128_gcm "aria-128-gcm" -#define NID_aria_128_gcm 1123 -#define OBJ_aria_128_gcm OBJ_aria,34L - -#define SN_aria_192_gcm "ARIA-192-GCM" -#define LN_aria_192_gcm "aria-192-gcm" -#define NID_aria_192_gcm 1124 -#define OBJ_aria_192_gcm OBJ_aria,35L - -#define SN_aria_256_gcm "ARIA-256-GCM" -#define LN_aria_256_gcm "aria-256-gcm" -#define NID_aria_256_gcm 1125 -#define OBJ_aria_256_gcm OBJ_aria,36L - -#define SN_kisa "KISA" -#define LN_kisa "kisa" -#define NID_kisa 773 -#define OBJ_kisa OBJ_member_body,410L,200004L - -#define SN_seed_ecb "SEED-ECB" -#define LN_seed_ecb "seed-ecb" -#define NID_seed_ecb 776 -#define OBJ_seed_ecb OBJ_kisa,1L,3L - -#define SN_seed_cbc "SEED-CBC" -#define LN_seed_cbc "seed-cbc" -#define NID_seed_cbc 777 -#define OBJ_seed_cbc OBJ_kisa,1L,4L - -#define SN_seed_cfb128 "SEED-CFB" -#define LN_seed_cfb128 "seed-cfb" -#define NID_seed_cfb128 779 -#define OBJ_seed_cfb128 OBJ_kisa,1L,5L - -#define SN_seed_ofb128 "SEED-OFB" -#define LN_seed_ofb128 "seed-ofb" -#define NID_seed_ofb128 778 -#define OBJ_seed_ofb128 OBJ_kisa,1L,6L - -#define SN_sm4_ecb "SM4-ECB" -#define LN_sm4_ecb "sm4-ecb" -#define NID_sm4_ecb 1133 -#define OBJ_sm4_ecb OBJ_sm_scheme,104L,1L - -#define SN_sm4_cbc "SM4-CBC" -#define LN_sm4_cbc "sm4-cbc" -#define NID_sm4_cbc 1134 -#define OBJ_sm4_cbc OBJ_sm_scheme,104L,2L - -#define SN_sm4_ofb128 "SM4-OFB" -#define LN_sm4_ofb128 "sm4-ofb" -#define NID_sm4_ofb128 1135 -#define OBJ_sm4_ofb128 OBJ_sm_scheme,104L,3L - -#define SN_sm4_cfb128 "SM4-CFB" -#define LN_sm4_cfb128 "sm4-cfb" -#define NID_sm4_cfb128 1137 -#define OBJ_sm4_cfb128 OBJ_sm_scheme,104L,4L - -#define SN_sm4_cfb1 "SM4-CFB1" -#define LN_sm4_cfb1 "sm4-cfb1" -#define NID_sm4_cfb1 1136 -#define OBJ_sm4_cfb1 OBJ_sm_scheme,104L,5L - -#define SN_sm4_cfb8 "SM4-CFB8" -#define LN_sm4_cfb8 "sm4-cfb8" -#define NID_sm4_cfb8 1138 -#define OBJ_sm4_cfb8 OBJ_sm_scheme,104L,6L - -#define SN_sm4_ctr "SM4-CTR" -#define LN_sm4_ctr "sm4-ctr" -#define NID_sm4_ctr 1139 -#define OBJ_sm4_ctr OBJ_sm_scheme,104L,7L - -#define SN_sm4_gcm "SM4-GCM" -#define LN_sm4_gcm "sm4-gcm" -#define NID_sm4_gcm 1248 -#define OBJ_sm4_gcm OBJ_sm_scheme,104L,8L - -#define SN_sm4_ccm "SM4-CCM" -#define LN_sm4_ccm "sm4-ccm" -#define NID_sm4_ccm 1249 -#define OBJ_sm4_ccm OBJ_sm_scheme,104L,9L - -#define SN_sm4_xts "SM4-XTS" -#define LN_sm4_xts "sm4-xts" -#define NID_sm4_xts 1290 -#define OBJ_sm4_xts OBJ_sm_scheme,104L,10L - -#define SN_hmac "HMAC" -#define LN_hmac "hmac" -#define NID_hmac 855 - -#define SN_cmac "CMAC" -#define LN_cmac "cmac" -#define NID_cmac 894 - -#define SN_rc4_hmac_md5 "RC4-HMAC-MD5" -#define LN_rc4_hmac_md5 "rc4-hmac-md5" -#define NID_rc4_hmac_md5 915 - -#define SN_aes_128_cbc_hmac_sha1 "AES-128-CBC-HMAC-SHA1" -#define LN_aes_128_cbc_hmac_sha1 "aes-128-cbc-hmac-sha1" -#define NID_aes_128_cbc_hmac_sha1 916 - -#define SN_aes_192_cbc_hmac_sha1 "AES-192-CBC-HMAC-SHA1" -#define LN_aes_192_cbc_hmac_sha1 "aes-192-cbc-hmac-sha1" -#define NID_aes_192_cbc_hmac_sha1 917 - -#define SN_aes_256_cbc_hmac_sha1 "AES-256-CBC-HMAC-SHA1" -#define LN_aes_256_cbc_hmac_sha1 "aes-256-cbc-hmac-sha1" -#define NID_aes_256_cbc_hmac_sha1 918 - -#define SN_aes_128_cbc_hmac_sha256 "AES-128-CBC-HMAC-SHA256" -#define LN_aes_128_cbc_hmac_sha256 "aes-128-cbc-hmac-sha256" -#define NID_aes_128_cbc_hmac_sha256 948 - -#define SN_aes_192_cbc_hmac_sha256 "AES-192-CBC-HMAC-SHA256" -#define LN_aes_192_cbc_hmac_sha256 "aes-192-cbc-hmac-sha256" -#define NID_aes_192_cbc_hmac_sha256 949 - -#define SN_aes_256_cbc_hmac_sha256 "AES-256-CBC-HMAC-SHA256" -#define LN_aes_256_cbc_hmac_sha256 "aes-256-cbc-hmac-sha256" -#define NID_aes_256_cbc_hmac_sha256 950 - -#define SN_chacha20_poly1305 "ChaCha20-Poly1305" -#define LN_chacha20_poly1305 "chacha20-poly1305" -#define NID_chacha20_poly1305 1018 - -#define SN_chacha20 "ChaCha20" -#define LN_chacha20 "chacha20" -#define NID_chacha20 1019 - -#define SN_dhpublicnumber "dhpublicnumber" -#define LN_dhpublicnumber "X9.42 DH" -#define NID_dhpublicnumber 920 -#define OBJ_dhpublicnumber OBJ_ISO_US,10046L,2L,1L - -#define SN_brainpoolP160r1 "brainpoolP160r1" -#define NID_brainpoolP160r1 921 -#define OBJ_brainpoolP160r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,1L - -#define SN_brainpoolP160t1 "brainpoolP160t1" -#define NID_brainpoolP160t1 922 -#define OBJ_brainpoolP160t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,2L - -#define SN_brainpoolP192r1 "brainpoolP192r1" -#define NID_brainpoolP192r1 923 -#define OBJ_brainpoolP192r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,3L - -#define SN_brainpoolP192t1 "brainpoolP192t1" -#define NID_brainpoolP192t1 924 -#define OBJ_brainpoolP192t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,4L - -#define SN_brainpoolP224r1 "brainpoolP224r1" -#define NID_brainpoolP224r1 925 -#define OBJ_brainpoolP224r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,5L - -#define SN_brainpoolP224t1 "brainpoolP224t1" -#define NID_brainpoolP224t1 926 -#define OBJ_brainpoolP224t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,6L - -#define SN_brainpoolP256r1 "brainpoolP256r1" -#define NID_brainpoolP256r1 927 -#define OBJ_brainpoolP256r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,7L - -#define SN_brainpoolP256r1tls13 "brainpoolP256r1tls13" -#define NID_brainpoolP256r1tls13 1285 - -#define SN_brainpoolP256t1 "brainpoolP256t1" -#define NID_brainpoolP256t1 928 -#define OBJ_brainpoolP256t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,8L - -#define SN_brainpoolP320r1 "brainpoolP320r1" -#define NID_brainpoolP320r1 929 -#define OBJ_brainpoolP320r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,9L - -#define SN_brainpoolP320t1 "brainpoolP320t1" -#define NID_brainpoolP320t1 930 -#define OBJ_brainpoolP320t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,10L - -#define SN_brainpoolP384r1 "brainpoolP384r1" -#define NID_brainpoolP384r1 931 -#define OBJ_brainpoolP384r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,11L - -#define SN_brainpoolP384r1tls13 "brainpoolP384r1tls13" -#define NID_brainpoolP384r1tls13 1286 - -#define SN_brainpoolP384t1 "brainpoolP384t1" -#define NID_brainpoolP384t1 932 -#define OBJ_brainpoolP384t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,12L - -#define SN_brainpoolP512r1 "brainpoolP512r1" -#define NID_brainpoolP512r1 933 -#define OBJ_brainpoolP512r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,13L - -#define SN_brainpoolP512r1tls13 "brainpoolP512r1tls13" -#define NID_brainpoolP512r1tls13 1287 - -#define SN_brainpoolP512t1 "brainpoolP512t1" -#define NID_brainpoolP512t1 934 -#define OBJ_brainpoolP512t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,14L - -#define OBJ_x9_63_scheme 1L,3L,133L,16L,840L,63L,0L - -#define OBJ_secg_scheme OBJ_certicom_arc,1L - -#define SN_dhSinglePass_stdDH_sha1kdf_scheme "dhSinglePass-stdDH-sha1kdf-scheme" -#define NID_dhSinglePass_stdDH_sha1kdf_scheme 936 -#define OBJ_dhSinglePass_stdDH_sha1kdf_scheme OBJ_x9_63_scheme,2L - -#define SN_dhSinglePass_stdDH_sha224kdf_scheme "dhSinglePass-stdDH-sha224kdf-scheme" -#define NID_dhSinglePass_stdDH_sha224kdf_scheme 937 -#define OBJ_dhSinglePass_stdDH_sha224kdf_scheme OBJ_secg_scheme,11L,0L - -#define SN_dhSinglePass_stdDH_sha256kdf_scheme "dhSinglePass-stdDH-sha256kdf-scheme" -#define NID_dhSinglePass_stdDH_sha256kdf_scheme 938 -#define OBJ_dhSinglePass_stdDH_sha256kdf_scheme OBJ_secg_scheme,11L,1L - -#define SN_dhSinglePass_stdDH_sha384kdf_scheme "dhSinglePass-stdDH-sha384kdf-scheme" -#define NID_dhSinglePass_stdDH_sha384kdf_scheme 939 -#define OBJ_dhSinglePass_stdDH_sha384kdf_scheme OBJ_secg_scheme,11L,2L - -#define SN_dhSinglePass_stdDH_sha512kdf_scheme "dhSinglePass-stdDH-sha512kdf-scheme" -#define NID_dhSinglePass_stdDH_sha512kdf_scheme 940 -#define OBJ_dhSinglePass_stdDH_sha512kdf_scheme OBJ_secg_scheme,11L,3L - -#define SN_dhSinglePass_cofactorDH_sha1kdf_scheme "dhSinglePass-cofactorDH-sha1kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha1kdf_scheme 941 -#define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme OBJ_x9_63_scheme,3L - -#define SN_dhSinglePass_cofactorDH_sha224kdf_scheme "dhSinglePass-cofactorDH-sha224kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha224kdf_scheme 942 -#define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme OBJ_secg_scheme,14L,0L - -#define SN_dhSinglePass_cofactorDH_sha256kdf_scheme "dhSinglePass-cofactorDH-sha256kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha256kdf_scheme 943 -#define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme OBJ_secg_scheme,14L,1L - -#define SN_dhSinglePass_cofactorDH_sha384kdf_scheme "dhSinglePass-cofactorDH-sha384kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha384kdf_scheme 944 -#define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme OBJ_secg_scheme,14L,2L - -#define SN_dhSinglePass_cofactorDH_sha512kdf_scheme "dhSinglePass-cofactorDH-sha512kdf-scheme" -#define NID_dhSinglePass_cofactorDH_sha512kdf_scheme 945 -#define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme OBJ_secg_scheme,14L,3L - -#define SN_dh_std_kdf "dh-std-kdf" -#define NID_dh_std_kdf 946 - -#define SN_dh_cofactor_kdf "dh-cofactor-kdf" -#define NID_dh_cofactor_kdf 947 - -#define SN_ct_precert_scts "ct_precert_scts" -#define LN_ct_precert_scts "CT Precertificate SCTs" -#define NID_ct_precert_scts 951 -#define OBJ_ct_precert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L - -#define SN_ct_precert_poison "ct_precert_poison" -#define LN_ct_precert_poison "CT Precertificate Poison" -#define NID_ct_precert_poison 952 -#define OBJ_ct_precert_poison 1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L - -#define SN_ct_precert_signer "ct_precert_signer" -#define LN_ct_precert_signer "CT Precertificate Signer" -#define NID_ct_precert_signer 953 -#define OBJ_ct_precert_signer 1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L - -#define SN_ct_cert_scts "ct_cert_scts" -#define LN_ct_cert_scts "CT Certificate SCTs" -#define NID_ct_cert_scts 954 -#define OBJ_ct_cert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L - -#define SN_jurisdictionLocalityName "jurisdictionL" -#define LN_jurisdictionLocalityName "jurisdictionLocalityName" -#define NID_jurisdictionLocalityName 955 -#define OBJ_jurisdictionLocalityName OBJ_ms_corp,60L,2L,1L,1L - -#define SN_jurisdictionStateOrProvinceName "jurisdictionST" -#define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName" -#define NID_jurisdictionStateOrProvinceName 956 -#define OBJ_jurisdictionStateOrProvinceName OBJ_ms_corp,60L,2L,1L,2L - -#define SN_jurisdictionCountryName "jurisdictionC" -#define LN_jurisdictionCountryName "jurisdictionCountryName" -#define NID_jurisdictionCountryName 957 -#define OBJ_jurisdictionCountryName OBJ_ms_corp,60L,2L,1L,3L - -#define SN_id_scrypt "id-scrypt" -#define LN_id_scrypt "scrypt" -#define NID_id_scrypt 973 -#define OBJ_id_scrypt 1L,3L,6L,1L,4L,1L,11591L,4L,11L - -#define SN_tls1_prf "TLS1-PRF" -#define LN_tls1_prf "tls1-prf" -#define NID_tls1_prf 1021 - -#define SN_hkdf "HKDF" -#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 - -#define SN_pkInitClientAuth "pkInitClientAuth" -#define LN_pkInitClientAuth "PKINIT Client Auth" -#define NID_pkInitClientAuth 1032 -#define OBJ_pkInitClientAuth OBJ_id_pkinit,4L - -#define SN_pkInitKDC "pkInitKDC" -#define LN_pkInitKDC "Signing KDC Response" -#define NID_pkInitKDC 1033 -#define OBJ_pkInitKDC OBJ_id_pkinit,5L - -#define SN_X25519 "X25519" -#define NID_X25519 1034 -#define OBJ_X25519 1L,3L,101L,110L - -#define SN_X448 "X448" -#define NID_X448 1035 -#define OBJ_X448 1L,3L,101L,111L - -#define SN_ED25519 "ED25519" -#define NID_ED25519 1087 -#define OBJ_ED25519 1L,3L,101L,112L - -#define SN_ED448 "ED448" -#define NID_ED448 1088 -#define OBJ_ED448 1L,3L,101L,113L - -#define SN_kx_rsa "KxRSA" -#define LN_kx_rsa "kx-rsa" -#define NID_kx_rsa 1037 - -#define SN_kx_ecdhe "KxECDHE" -#define LN_kx_ecdhe "kx-ecdhe" -#define NID_kx_ecdhe 1038 - -#define SN_kx_dhe "KxDHE" -#define LN_kx_dhe "kx-dhe" -#define NID_kx_dhe 1039 - -#define SN_kx_ecdhe_psk "KxECDHE-PSK" -#define LN_kx_ecdhe_psk "kx-ecdhe-psk" -#define NID_kx_ecdhe_psk 1040 - -#define SN_kx_dhe_psk "KxDHE-PSK" -#define LN_kx_dhe_psk "kx-dhe-psk" -#define NID_kx_dhe_psk 1041 - -#define SN_kx_rsa_psk "KxRSA_PSK" -#define LN_kx_rsa_psk "kx-rsa-psk" -#define NID_kx_rsa_psk 1042 - -#define SN_kx_psk "KxPSK" -#define LN_kx_psk "kx-psk" -#define NID_kx_psk 1043 - -#define SN_kx_srp "KxSRP" -#define LN_kx_srp "kx-srp" -#define NID_kx_srp 1044 - -#define SN_kx_gost "KxGOST" -#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 - -#define SN_auth_rsa "AuthRSA" -#define LN_auth_rsa "auth-rsa" -#define NID_auth_rsa 1046 - -#define SN_auth_ecdsa "AuthECDSA" -#define LN_auth_ecdsa "auth-ecdsa" -#define NID_auth_ecdsa 1047 - -#define SN_auth_psk "AuthPSK" -#define LN_auth_psk "auth-psk" -#define NID_auth_psk 1048 - -#define SN_auth_dss "AuthDSS" -#define LN_auth_dss "auth-dss" -#define NID_auth_dss 1049 - -#define SN_auth_gost01 "AuthGOST01" -#define LN_auth_gost01 "auth-gost01" -#define NID_auth_gost01 1050 - -#define SN_auth_gost12 "AuthGOST12" -#define LN_auth_gost12 "auth-gost12" -#define NID_auth_gost12 1051 - -#define SN_auth_srp "AuthSRP" -#define LN_auth_srp "auth-srp" -#define NID_auth_srp 1052 - -#define SN_auth_null "AuthNULL" -#define LN_auth_null "auth-null" -#define NID_auth_null 1053 - -#define SN_auth_any "AuthANY" -#define LN_auth_any "auth-any" -#define NID_auth_any 1064 - -#define SN_poly1305 "Poly1305" -#define LN_poly1305 "poly1305" -#define NID_poly1305 1061 - -#define SN_siphash "SipHash" -#define LN_siphash "siphash" -#define NID_siphash 1062 - -#define SN_ffdhe2048 "ffdhe2048" -#define NID_ffdhe2048 1126 - -#define SN_ffdhe3072 "ffdhe3072" -#define NID_ffdhe3072 1127 - -#define SN_ffdhe4096 "ffdhe4096" -#define NID_ffdhe4096 1128 - -#define SN_ffdhe6144 "ffdhe6144" -#define NID_ffdhe6144 1129 - -#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 - -#define SN_ua_pki "ua-pki" -#define NID_ua_pki 1151 -#define OBJ_ua_pki OBJ_ISO_UA,2L,1L,1L,1L - -#define SN_dstu28147 "dstu28147" -#define LN_dstu28147 "DSTU Gost 28147-2009" -#define NID_dstu28147 1152 -#define OBJ_dstu28147 OBJ_ua_pki,1L,1L,1L - -#define SN_dstu28147_ofb "dstu28147-ofb" -#define LN_dstu28147_ofb "DSTU Gost 28147-2009 OFB mode" -#define NID_dstu28147_ofb 1153 -#define OBJ_dstu28147_ofb OBJ_dstu28147,2L - -#define SN_dstu28147_cfb "dstu28147-cfb" -#define LN_dstu28147_cfb "DSTU Gost 28147-2009 CFB mode" -#define NID_dstu28147_cfb 1154 -#define OBJ_dstu28147_cfb OBJ_dstu28147,3L - -#define SN_dstu28147_wrap "dstu28147-wrap" -#define LN_dstu28147_wrap "DSTU Gost 28147-2009 key wrap" -#define NID_dstu28147_wrap 1155 -#define OBJ_dstu28147_wrap OBJ_dstu28147,5L - -#define SN_hmacWithDstu34311 "hmacWithDstu34311" -#define LN_hmacWithDstu34311 "HMAC DSTU Gost 34311-95" -#define NID_hmacWithDstu34311 1156 -#define OBJ_hmacWithDstu34311 OBJ_ua_pki,1L,1L,2L - -#define SN_dstu34311 "dstu34311" -#define LN_dstu34311 "DSTU Gost 34311-95" -#define NID_dstu34311 1157 -#define OBJ_dstu34311 OBJ_ua_pki,1L,2L,1L - -#define SN_dstu4145le "dstu4145le" -#define LN_dstu4145le "DSTU 4145-2002 little endian" -#define NID_dstu4145le 1158 -#define OBJ_dstu4145le OBJ_ua_pki,1L,3L,1L,1L - -#define SN_dstu4145be "dstu4145be" -#define LN_dstu4145be "DSTU 4145-2002 big endian" -#define NID_dstu4145be 1159 -#define OBJ_dstu4145be OBJ_dstu4145le,1L,1L - -#define SN_uacurve0 "uacurve0" -#define LN_uacurve0 "DSTU curve 0" -#define NID_uacurve0 1160 -#define OBJ_uacurve0 OBJ_dstu4145le,2L,0L - -#define SN_uacurve1 "uacurve1" -#define LN_uacurve1 "DSTU curve 1" -#define NID_uacurve1 1161 -#define OBJ_uacurve1 OBJ_dstu4145le,2L,1L - -#define SN_uacurve2 "uacurve2" -#define LN_uacurve2 "DSTU curve 2" -#define NID_uacurve2 1162 -#define OBJ_uacurve2 OBJ_dstu4145le,2L,2L - -#define SN_uacurve3 "uacurve3" -#define LN_uacurve3 "DSTU curve 3" -#define NID_uacurve3 1163 -#define OBJ_uacurve3 OBJ_dstu4145le,2L,3L - -#define SN_uacurve4 "uacurve4" -#define LN_uacurve4 "DSTU curve 4" -#define NID_uacurve4 1164 -#define OBJ_uacurve4 OBJ_dstu4145le,2L,4L - -#define SN_uacurve5 "uacurve5" -#define LN_uacurve5 "DSTU curve 5" -#define NID_uacurve5 1165 -#define OBJ_uacurve5 OBJ_dstu4145le,2L,5L - -#define SN_uacurve6 "uacurve6" -#define LN_uacurve6 "DSTU curve 6" -#define NID_uacurve6 1166 -#define OBJ_uacurve6 OBJ_dstu4145le,2L,6L - -#define SN_uacurve7 "uacurve7" -#define LN_uacurve7 "DSTU curve 7" -#define NID_uacurve7 1167 -#define OBJ_uacurve7 OBJ_dstu4145le,2L,7L - -#define SN_uacurve8 "uacurve8" -#define LN_uacurve8 "DSTU curve 8" -#define NID_uacurve8 1168 -#define OBJ_uacurve8 OBJ_dstu4145le,2L,8L - -#define SN_uacurve9 "uacurve9" -#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 - -#define SN_oracle "oracle-organization" -#define LN_oracle "Oracle organization" -#define NID_oracle 1282 -#define OBJ_oracle OBJ_joint_iso_itu_t,16L,840L,1L,113894L - -#define SN_oracle_jdk_trustedkeyusage "oracle-jdk-trustedkeyusage" -#define LN_oracle_jdk_trustedkeyusage "Trusted key usage (Oracle)" -#define NID_oracle_jdk_trustedkeyusage 1283 -#define OBJ_oracle_jdk_trustedkeyusage OBJ_oracle,746875L,1L,1L - -#define SN_brotli "brotli" -#define LN_brotli "Brotli compression" -#define NID_brotli 1288 - -#define SN_zstd "zstd" -#define LN_zstd "Zstandard compression" -#define NID_zstd 1289 - -#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 deleted file mode 100644 index 9ea91c27..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/objects.h +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_OBJECTS_H -# define OPENSSL_OBJECTS_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_OBJECTS_H -# endif - -# include -# include -# include -# include - -# define OBJ_NAME_TYPE_UNDEF 0x00 -# define OBJ_NAME_TYPE_MD_METH 0x01 -# 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_MAC_METH 0x05 -# define OBJ_NAME_TYPE_KDF_METH 0x06 -# define OBJ_NAME_TYPE_NUM 0x07 - -# define OBJ_NAME_ALIAS 0x8000 - -# define OBJ_BSEARCH_VALUE_ON_NOMATCH 0x01 -# define OBJ_BSEARCH_FIRST_VALUE_ON_MATCH 0x02 - - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct obj_name_st { - int type; - int alias; - const char *name; - const char *data; -} OBJ_NAME; - -# define OBJ_create_and_add_object(a,b,c) OBJ_create(a,b,c) - -int OBJ_NAME_init(void); -int OBJ_NAME_new_index(unsigned long (*hash_func) (const char *), - int (*cmp_func) (const char *, const char *), - void (*free_func) (const char *, int, const char *)); -const char *OBJ_NAME_get(const char *name, int type); -int OBJ_NAME_add(const char *name, int type, const char *data); -int OBJ_NAME_remove(const char *name, int type); -void OBJ_NAME_cleanup(int type); /* -1 for everything */ -void OBJ_NAME_do_all(int type, void (*fn) (const OBJ_NAME *, void *arg), - void *arg); -void OBJ_NAME_do_all_sorted(int type, - void (*fn) (const OBJ_NAME *, void *arg), - void *arg); - -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); -int OBJ_obj2nid(const ASN1_OBJECT *o); -ASN1_OBJECT *OBJ_txt2obj(const char *s, int no_name); -int OBJ_obj2txt(char *buf, int buf_len, const ASN1_OBJECT *a, int no_name); -int OBJ_txt2nid(const char *s); -int OBJ_ln2nid(const char *s); -int OBJ_sn2nid(const char *s); -int OBJ_cmp(const ASN1_OBJECT *a, const ASN1_OBJECT *b); -const void *OBJ_bsearch_(const void *key, const void *base, int num, int size, - int (*cmp) (const void *, const void *)); -const void *OBJ_bsearch_ex_(const void *key, const void *base, int num, - int size, - int (*cmp) (const void *, const void *), - int flags); - -# define _DECLARE_OBJ_BSEARCH_CMP_FN(scope, type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *, const void *); \ - static int nm##_cmp(type1 const *, type2 const *); \ - scope type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) - -# define DECLARE_OBJ_BSEARCH_CMP_FN(type1, type2, cmp) \ - _DECLARE_OBJ_BSEARCH_CMP_FN(static, type1, type2, cmp) -# define DECLARE_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ - type2 * OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) - -/*- - * Unsolved problem: if a type is actually a pointer type, like - * nid_triple is, then its impossible to get a const where you need - * it. Consider: - * - * typedef int nid_triple[3]; - * const void *a_; - * const nid_triple const *a = a_; - * - * The assignment discards a const because what you really want is: - * - * const int const * const *a = a_; - * - * But if you do that, you lose the fact that a is an array of 3 ints, - * which breaks comparison functions. - * - * Thus we end up having to cast, sadly, or unpack the - * declarations. Or, as I finally did in this case, declare nid_triple - * to be a struct, which it should have been in the first place. - * - * Ben, August 2008. - * - * Also, strictly speaking not all types need be const, but handling - * the non-constness means a lot of complication, and in practice - * comparison routines do always not touch their arguments. - */ - -# define IMPLEMENT_OBJ_BSEARCH_CMP_FN(type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ - { \ - type1 const *a = a_; \ - type2 const *b = b_; \ - return nm##_cmp(a,b); \ - } \ - static type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ - { \ - return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ - nm##_cmp_BSEARCH_CMP_FN); \ - } \ - extern void dummy_prototype(void) - -# define IMPLEMENT_OBJ_BSEARCH_GLOBAL_CMP_FN(type1, type2, nm) \ - static int nm##_cmp_BSEARCH_CMP_FN(const void *a_, const void *b_) \ - { \ - type1 const *a = a_; \ - type2 const *b = b_; \ - return nm##_cmp(a,b); \ - } \ - type2 *OBJ_bsearch_##nm(type1 *key, type2 const *base, int num) \ - { \ - return (type2 *)OBJ_bsearch_(key, base, num, sizeof(type2), \ - nm##_cmp_BSEARCH_CMP_FN); \ - } \ - extern void dummy_prototype(void) - -# define OBJ_bsearch(type1,key,type2,base,num,cmp) \ - ((type2 *)OBJ_bsearch_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ - num,sizeof(type2), \ - ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ - (void)CHECKED_PTR_OF(type2,cmp##_type_2), \ - cmp##_BSEARCH_CMP_FN))) - -# define OBJ_bsearch_ex(type1,key,type2,base,num,cmp,flags) \ - ((type2 *)OBJ_bsearch_ex_(CHECKED_PTR_OF(type1,key),CHECKED_PTR_OF(type2,base), \ - num,sizeof(type2), \ - ((void)CHECKED_PTR_OF(type1,cmp##_type_1), \ - (void)type_2=CHECKED_PTR_OF(type2,cmp##_type_2), \ - cmp##_BSEARCH_CMP_FN)),flags) - -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); -#ifndef OPENSSL_NO_DEPRECATED_1_1_0 -# define OBJ_cleanup() while(0) continue -#endif -int OBJ_create_objects(BIO *in); - -size_t OBJ_length(const ASN1_OBJECT *obj); -const unsigned char *OBJ_get0_data(const ASN1_OBJECT *obj); - -int OBJ_find_sigid_algs(int signid, int *pdig_nid, int *ppkey_nid); -int OBJ_find_sigid_by_algs(int *psignid, int dig_nid, int pkey_nid); -int OBJ_add_sigid(int signid, int dig_id, int pkey_id); -void OBJ_sigid_free(void); - - -# ifdef __cplusplus -} -# endif -#endif 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 deleted file mode 100644 index 585217f6..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/objectserr.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * 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_OBJECTSERR_H -# define OPENSSL_OBJECTSERR_H -# pragma once - -# include -# include -# include - - - -/* - * 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 deleted file mode 100644 index 142b1831..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsp.h +++ /dev/null @@ -1,483 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/ocsp.h.in - * - * 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_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; - -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 -# 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 - -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; - -# 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; - -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; - -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/ocsp.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsp.h.in deleted file mode 100644 index e2cc2716..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsp.h.in +++ /dev/null @@ -1,387 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 46a0523c..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ocsperr.h +++ /dev/null @@ -1,53 +0,0 @@ -/* - * 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_OCSPERR_H -# define OPENSSL_OCSPERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_OCSP - - -/* - * 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_MISSING_OCSPSIGNING_USAGE 103 -# define OCSP_R_NEXTUPDATE_BEFORE_THISUPDATE 124 -# define OCSP_R_NOT_BASIC_RESPONSE 104 -# define OCSP_R_NO_CERTIFICATES_IN_CHAIN 105 -# define OCSP_R_NO_RESPONSE_DATA 108 -# define OCSP_R_NO_REVOKED_TIME 109 -# define OCSP_R_NO_SIGNER_KEY 130 -# define OCSP_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 110 -# 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_SIGNATURE_FAILURE 117 -# define OCSP_R_SIGNER_CERTIFICATE_NOT_FOUND 118 -# define OCSP_R_STATUS_EXPIRED 125 -# define OCSP_R_STATUS_NOT_YET_VALID 126 -# define OCSP_R_STATUS_TOO_OLD 127 -# define OCSP_R_UNKNOWN_MESSAGE_DIGEST 119 -# define OCSP_R_UNKNOWN_NID 120 -# define OCSP_R_UNSUPPORTED_REQUESTORNAME_TYPE 129 - -# endif -#endif 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 deleted file mode 100644 index 1e83371f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslconf.h +++ /dev/null @@ -1,17 +0,0 @@ -/* - * 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_OPENSSLCONF_H -# define OPENSSL_OPENSSLCONF_H -# pragma once - -# include -# include - -#endif /* OPENSSL_OPENSSLCONF_H */ 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 deleted file mode 100644 index b38d64da..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/opensslv.h.in - * - * 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 3 -# define OPENSSL_VERSION_MINOR 2 -# define OPENSSL_VERSION_PATCH 1 - -/* - * 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 "" -/* 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.2.1" -# define OPENSSL_FULL_VERSION_STR "3.2.1" - -/* - * SECTION 3: ADDITIONAL METADATA - * - * These strings are defined separately to allow them to be parsable. - */ -# define OPENSSL_RELEASE_DATE "30 Jan 2024" - -/* - * SECTION 4: BACKWARD COMPATIBILITY - */ - -# define OPENSSL_VERSION_TEXT "OpenSSL 3.2.1 30 Jan 2024" - -/* 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/opensslv.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h.in deleted file mode 100644 index 3f47a2ac..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h.in +++ /dev/null @@ -1,113 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 82a58988..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ossl_typ.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright 2019 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -/* - * The original was renamed to - * - * This header file only exists for compatibility reasons with older - * applications which #include . - */ -# 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 deleted file mode 100644 index f29fdb29..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/param_build.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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 deleted file mode 100644 index d75eab07..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/params.h +++ /dev/null @@ -1,160 +0,0 @@ -/* - * 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 deleted file mode 100644 index 0446c770..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem.h +++ /dev/null @@ -1,542 +0,0 @@ -/* - * 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_PEM_H -# define OPENSSL_PEM_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_PEM_H -# endif - -# include -# include -# include -# include -# include -# include -# ifndef OPENSSL_NO_STDIO -# include -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define PEM_BUFSIZE 1024 - -# define PEM_STRING_X509_OLD "X509 CERTIFICATE" -# define PEM_STRING_X509 "CERTIFICATE" -# define PEM_STRING_X509_TRUSTED "TRUSTED CERTIFICATE" -# define PEM_STRING_X509_REQ_OLD "NEW CERTIFICATE REQUEST" -# define PEM_STRING_X509_REQ "CERTIFICATE REQUEST" -# define PEM_STRING_X509_CRL "X509 CRL" -# define PEM_STRING_EVP_PKEY "ANY PRIVATE KEY" -# define PEM_STRING_PUBLIC "PUBLIC KEY" -# define PEM_STRING_RSA "RSA PRIVATE KEY" -# define PEM_STRING_RSA_PUBLIC "RSA PUBLIC KEY" -# define PEM_STRING_DSA "DSA PRIVATE KEY" -# define PEM_STRING_DSA_PUBLIC "DSA PUBLIC KEY" -# define PEM_STRING_PKCS7 "PKCS7" -# define PEM_STRING_PKCS7_SIGNED "PKCS #7 SIGNED DATA" -# define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY" -# define PEM_STRING_PKCS8INF "PRIVATE KEY" -# define PEM_STRING_DHPARAMS "DH PARAMETERS" -# define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS" -# define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS" -# define PEM_STRING_DSAPARAMS "DSA PARAMETERS" -# define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY" -# define PEM_STRING_ECPARAMETERS "EC PARAMETERS" -# define PEM_STRING_ECPRIVATEKEY "EC PRIVATE KEY" -# define PEM_STRING_PARAMETERS "PARAMETERS" -# define PEM_STRING_CMS "CMS" -# define PEM_STRING_SM2PARAMETERS "SM2 PARAMETERS" - -# define PEM_TYPE_ENCRYPTED 10 -# define PEM_TYPE_MIC_ONLY 20 -# define PEM_TYPE_MIC_CLEAR 30 -# define PEM_TYPE_CLEAR 40 - -/* - * These macros make the PEM_read/PEM_write functions easier to maintain and - * write. Now they are all implemented with either: IMPLEMENT_PEM_rw(...) or - * 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) /**/ -# 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) /**/ -# 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_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); \ - } - -# 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) \ - 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_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); \ - } - -# 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) \ - 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); \ - } - -# 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) - -# 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) - -# 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) \ - IMPLEMENT_PEM_read_fp(name, type, str, asn1) - -# define IMPLEMENT_PEM_rw(name, type, str, asn1) \ - IMPLEMENT_PEM_read(name, type, str, asn1) \ - IMPLEMENT_PEM_write(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) \ - IMPLEMENT_PEM_write_cb(name, type, str, asn1) - -/* 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_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_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_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_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_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_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) - -# 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_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_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_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, - pem_password_cb *callback, void *u); - -int PEM_read_bio(BIO *bp, char **name, char **header, - unsigned char **data, long *len); -# define PEM_FLAG_SECURE 0x1 -# define PEM_FLAG_EAY_COMPATIBLE 0x2 -# define PEM_FLAG_ONLY_B64 0x4 -int PEM_read_bio_ex(BIO *bp, char **name, char **header, - unsigned char **data, long *len, unsigned int flags); -int PEM_bytes_read_bio_secmem(unsigned char **pdata, long *plen, char **pnm, - const char *name, BIO *bp, pem_password_cb *cb, - void *u); -int PEM_write_bio(BIO *bp, const char *name, const char *hdr, - const unsigned char *data, long len); -int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm, - const char *name, BIO *bp, pem_password_cb *cb, - 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, - 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); -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 -int PEM_read(FILE *fp, char **name, char **header, - unsigned char **data, long *len); -int PEM_write(FILE *fp, const char *name, const char *hdr, - const unsigned char *data, long len); -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, - 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, 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, const char *str); - -# include - -DECLARE_PEM_rw(X509, X509) -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_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_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_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, - const unsigned char *kstr, int klen, - pem_password_cb *cb, void *u); - -/* 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 *, 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, 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, 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, const EVP_PKEY *x, int nid, - const char *kstr, int klen, - pem_password_cb *cb, void *u); -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, 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, const EVP_PKEY *x); - -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, 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); -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); -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 -} -# endif -#endif 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 deleted file mode 100644 index a8a5325b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem2.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright 1999-2018 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_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 deleted file mode 100644 index 18f6d9ef..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pemerr.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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_PEMERR_H -# define OPENSSL_PEMERR_H -# pragma once - -# include -# include -# include - - - -/* - * PEM reason codes. - */ -# define PEM_R_BAD_BASE64_DECODE 100 -# define PEM_R_BAD_DECRYPT 101 -# define PEM_R_BAD_END_LINE 102 -# define PEM_R_BAD_IV_CHARS 103 -# define PEM_R_BAD_MAGIC_NUMBER 116 -# define PEM_R_BAD_PASSWORD_READ 104 -# define PEM_R_BAD_VERSION_NUMBER 117 -# 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 -# define PEM_R_KEYBLOB_TOO_SHORT 123 -# define PEM_R_MISSING_DEK_IV 129 -# define PEM_R_NOT_DEK_INFO 105 -# define PEM_R_NOT_ENCRYPTED 106 -# define PEM_R_NOT_PROC_TYPE 107 -# define PEM_R_NO_START_LINE 108 -# define PEM_R_PROBLEMS_GETTING_PASSWORD 109 -# define PEM_R_PVK_DATA_TOO_SHORT 124 -# define PEM_R_PVK_TOO_SHORT 125 -# define PEM_R_READ_KEY 111 -# define PEM_R_SHORT_HEADER 112 -# define PEM_R_UNEXPECTED_DEK_IV 130 -# define PEM_R_UNSUPPORTED_CIPHER 113 -# define PEM_R_UNSUPPORTED_ENCRYPTION 114 -# define PEM_R_UNSUPPORTED_KEY_COMPONENTS 126 -# define PEM_R_UNSUPPORTED_PUBLIC_KEY_TYPE 110 - -#endif 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 deleted file mode 100644 index b08b0bc2..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h +++ /dev/null @@ -1,363 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/pkcs12.h.in - * - * 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 - */ - - - -#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 - -/* The macro is expected to be used only internally. Kept for backwards compatibility. */ -# 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; - -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; - -# 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_ex(const PKCS12_SAFEBAG *bag, OSSL_LIB_CTX *libctx, const char *propq); -X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); -X509_CRL *PKCS12_SAFEBAG_get1_crl_ex(const PKCS12_SAFEBAG *bag, OSSL_LIB_CTX *libctx, const char *propq); -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); -void PKCS12_SAFEBAG_set0_attrs(PKCS12_SAFEBAG *bag, STACK_OF(X509_ATTRIBUTE) *attrs); -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); -typedef int PKCS12_create_cb(PKCS12_SAFEBAG *bag, void *cbarg); -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 *PKCS12_create_ex2(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_create_cb *cb, void *cbarg); - -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/pkcs12.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h.in deleted file mode 100644 index 35759d4d..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h.in +++ /dev/null @@ -1,340 +0,0 @@ -/* - * {- 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_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 - -/* The macro is expected to be used only internally. Kept for backwards compatibility. */ -# 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_ex(const PKCS12_SAFEBAG *bag, OSSL_LIB_CTX *libctx, const char *propq); -X509 *PKCS12_SAFEBAG_get1_cert(const PKCS12_SAFEBAG *bag); -X509_CRL *PKCS12_SAFEBAG_get1_crl_ex(const PKCS12_SAFEBAG *bag, OSSL_LIB_CTX *libctx, const char *propq); -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); -void PKCS12_SAFEBAG_set0_attrs(PKCS12_SAFEBAG *bag, STACK_OF(X509_ATTRIBUTE) *attrs); -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); -typedef int PKCS12_create_cb(PKCS12_SAFEBAG *bag, void *cbarg); -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 *PKCS12_create_ex2(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_create_cb *cb, void *cbarg); - -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 deleted file mode 100644 index abce3736..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12err.h +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * 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 OPENSSL_PKCS12ERR_H -# define OPENSSL_PKCS12ERR_H -# pragma once - -# include -# include -# include - - - -/* - * PKCS12 reason codes. - */ -# define PKCS12_R_CALLBACK_FAILED 115 -# define PKCS12_R_CANT_PACK_STRUCTURE 100 -# define PKCS12_R_CONTENT_TYPE_NOT_DATA 121 -# define PKCS12_R_DECODE_ERROR 101 -# define PKCS12_R_ENCODE_ERROR 102 -# define PKCS12_R_ENCRYPT_ERROR 103 -# 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 -# define PKCS12_R_MAC_GENERATION_ERROR 109 -# define PKCS12_R_MAC_SETUP_ERROR 110 -# 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_CIPHERFINAL_ERROR 116 -# define PKCS12_R_UNKNOWN_DIGEST_ALGORITHM 118 -# define PKCS12_R_UNSUPPORTED_PKCS12_MODE 119 - -#endif 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 deleted file mode 100644 index dc46c511..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h +++ /dev/null @@ -1,430 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/pkcs7.h.in - * - * 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_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; /* confusing name, actually used for signing */ - ASN1_OCTET_STRING *enc_digest; /* confusing name, actually signature */ - 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))) - - -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; -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))) - - - -typedef struct pkcs7_signed_st { - ASN1_INTEGER *version; /* version 1 */ - STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ /* name should be 'certificates' */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ /* name should be 'crls' */ - 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 ] */ /* name should be 'certificates' */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ /* name should be 'crls' */ - 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; /* field name 'signed' would clash with C keyword */ - /* 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; -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 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 *cert); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *crl); -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 *signer); - -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/pkcs7.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h.in deleted file mode 100644 index 11a636e1..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h.in +++ /dev/null @@ -1,359 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * 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 - */ - -{- -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; /* confusing name, actually used for signing */ - ASN1_OCTET_STRING *enc_digest; /* confusing name, actually signature */ - 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 ] */ /* name should be 'certificates' */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ /* name should be 'crls' */ - 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 ] */ /* name should be 'certificates' */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ /* name should be 'crls' */ - 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; /* field name 'signed' would clash with C keyword */ - /* 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 *cert); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *crl); -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 *signer); - -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 deleted file mode 100644 index ceb1a501..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7err.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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_PKCS7ERR_H -# define OPENSSL_PKCS7ERR_H -# pragma once - -# include -# include -# include - - - -/* - * PKCS7 reason codes. - */ -# define PKCS7_R_CERTIFICATE_VERIFY_ERROR 117 -# define PKCS7_R_CIPHER_HAS_NO_OBJECT_IDENTIFIER 144 -# define PKCS7_R_CIPHER_NOT_INITIALIZED 116 -# define PKCS7_R_CONTENT_AND_DATA_PRESENT 118 -# define PKCS7_R_CTRL_ERROR 152 -# define PKCS7_R_DECRYPT_ERROR 119 -# define PKCS7_R_DIGEST_FAILURE 101 -# define PKCS7_R_ENCRYPTION_CTRL_FAILURE 149 -# define PKCS7_R_ENCRYPTION_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 150 -# define PKCS7_R_ERROR_ADDING_RECIPIENT 120 -# define PKCS7_R_ERROR_SETTING_CIPHER 121 -# define PKCS7_R_INVALID_NULL_POINTER 143 -# define PKCS7_R_INVALID_SIGNED_DATA_TYPE 155 -# define PKCS7_R_NO_CONTENT 122 -# define PKCS7_R_NO_DEFAULT_DIGEST 151 -# define PKCS7_R_NO_MATCHING_DIGEST_TYPE_FOUND 154 -# define PKCS7_R_NO_RECIPIENT_MATCHES_CERTIFICATE 115 -# define PKCS7_R_NO_SIGNATURES_ON_DATA 123 -# define PKCS7_R_NO_SIGNERS 142 -# define PKCS7_R_OPERATION_NOT_SUPPORTED_ON_THIS_TYPE 104 -# define PKCS7_R_PKCS7_ADD_SIGNATURE_ERROR 124 -# define PKCS7_R_PKCS7_ADD_SIGNER_ERROR 153 -# define PKCS7_R_PKCS7_DATASIGN 145 -# define PKCS7_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 127 -# define PKCS7_R_SIGNATURE_FAILURE 105 -# define PKCS7_R_SIGNER_CERTIFICATE_NOT_FOUND 128 -# define PKCS7_R_SIGNING_CTRL_FAILURE 147 -# define PKCS7_R_SIGNING_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 148 -# define PKCS7_R_SMIME_TEXT_ERROR 129 -# define PKCS7_R_UNABLE_TO_FIND_CERTIFICATE 106 -# define PKCS7_R_UNABLE_TO_FIND_MEM_BIO 107 -# define PKCS7_R_UNABLE_TO_FIND_MESSAGE_DIGEST 108 -# define PKCS7_R_UNKNOWN_DIGEST_TYPE 109 -# define PKCS7_R_UNKNOWN_OPERATION 110 -# define PKCS7_R_UNSUPPORTED_CIPHER_TYPE 111 -# define PKCS7_R_UNSUPPORTED_CONTENT_TYPE 112 -# define PKCS7_R_WRONG_CONTENT_TYPE 113 -# define PKCS7_R_WRONG_PKCS7_TYPE 114 - -#endif 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 deleted file mode 100644 index 76d01e1e..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/prov_ssl.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2021-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_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 - -/* SSL/TLS uses a 2 byte unsigned version number */ -# 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 - -/* QUIC uses a 4 byte unsigned version number */ -# define OSSL_QUIC1_VERSION 0x0000001 - -# 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 deleted file mode 100644 index d9ef5681..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/proverr.h +++ /dev/null @@ -1,153 +0,0 @@ -/* - * 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_AEAD 231 -# 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_KDF 232 -# define PROV_R_INVALID_KEY 158 -# define PROV_R_INVALID_KEY_LENGTH 105 -# define PROV_R_INVALID_MAC 151 -# define PROV_R_INVALID_MEMORY_SIZE 235 -# 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_THREAD_POOL_SIZE 234 -# 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 deleted file mode 100644 index 24ec0827..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/provider.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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_PROVIDER_H -# define OPENSSL_PROVIDER_H -# pragma once - -# include - -# ifdef __cplusplus -extern "C" { -# endif - -/* Set and Get a library context search path */ -int OSSL_PROVIDER_set_default_search_path(OSSL_LIB_CTX *, const char *path); -const char *OSSL_PROVIDER_get0_default_search_path(OSSL_LIB_CTX *libctx); - -/* Load and unload a provider */ -OSSL_PROVIDER *OSSL_PROVIDER_load(OSSL_LIB_CTX *, const char *name); -OSSL_PROVIDER *OSSL_PROVIDER_load_ex(OSSL_LIB_CTX *, const char *name, - OSSL_PARAM *params); -OSSL_PROVIDER *OSSL_PROVIDER_try_load(OSSL_LIB_CTX *, const char *name, - int retain_fallbacks); -OSSL_PROVIDER *OSSL_PROVIDER_try_load_ex(OSSL_LIB_CTX *, const char *name, - OSSL_PARAM *params, - 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/quic.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/quic.h deleted file mode 100644 index 74a6345d..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/quic.h +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 OPENSSL_QUIC_H -# define OPENSSL_QUIC_H -# pragma once - -# include -# include - -# ifndef OPENSSL_NO_QUIC - -# ifdef __cplusplus -extern "C" { -# endif - -/* - * Method used for non-thread-assisted QUIC client operation. - */ -__owur const SSL_METHOD *OSSL_QUIC_client_method(void); -/* - * Method used for thread-assisted QUIC client operation. - */ -__owur const SSL_METHOD *OSSL_QUIC_client_thread_method(void); - -# ifdef __cplusplus -} -# endif - -# endif /* OPENSSL_NO_QUIC */ -#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 deleted file mode 100644 index 1fa1129e..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rand.h +++ /dev/null @@ -1,125 +0,0 @@ -/* - * 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_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 - -#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); - void (*cleanup) (void); - int (*add) (const void *buf, int num, double randomness); - int (*pseudorand) (unsigned char *buf, int num); - int (*status) (void); -}; - -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 - -OSSL_DEPRECATEDIN_3_0 RAND_METHOD *RAND_OpenSSL(void); -# endif /* OPENSSL_NO_DEPRECATED_3_0 */ - -# 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); - -/* - * 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 */ -# endif -void RAND_add(const void *buf, int num, double randomness); -int RAND_load_file(const char *file, long max_bytes); -int RAND_write_file(const char *file); -const char *RAND_file_name(char *file, size_t num); -int RAND_status(void); - -# ifndef OPENSSL_NO_EGD -int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes); -int RAND_egd(const char *path); -int RAND_egd_bytes(const char *path, int bytes); -# endif - -int RAND_poll(void); - -# if defined(_WIN32) && (defined(BASETYPES) || defined(_WINDEF_H)) -/* application has to include in order to use these */ -# 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 - -#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 deleted file mode 100644 index 04880374..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/randerr.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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_RANDERR_H -# define OPENSSL_RANDERR_H -# pragma once - -# include -# include -# include - - - -/* - * RAND reason codes. - */ -# define RAND_R_ADDITIONAL_INPUT_TOO_LONG 102 -# define RAND_R_ALREADY_INSTANTIATED 103 -# define RAND_R_ARGUMENT_OUT_OF_RANGE 105 -# define RAND_R_CANNOT_OPEN_FILE 121 -# define RAND_R_DRBG_ALREADY_INITIALIZED 129 -# define RAND_R_DRBG_NOT_INITIALISED 104 -# define RAND_R_ENTROPY_INPUT_TOO_LONG 106 -# define RAND_R_ENTROPY_OUT_OF_RANGE 124 -# define RAND_R_ERROR_ENTROPY_POOL_WAS_IGNORED 127 -# define RAND_R_ERROR_INITIALISING_DRBG 107 -# define RAND_R_ERROR_INSTANTIATING_DRBG 108 -# define RAND_R_ERROR_RETRIEVING_ADDITIONAL_INPUT 109 -# define RAND_R_ERROR_RETRIEVING_ENTROPY 110 -# define RAND_R_ERROR_RETRIEVING_NONCE 111 -# define RAND_R_FAILED_TO_CREATE_LOCK 126 -# 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_INVALID_PROPERTY_QUERY 137 -# define RAND_R_IN_ERROR_STATE 114 -# define RAND_R_NOT_A_REGULAR_FILE 122 -# define RAND_R_NOT_INSTANTIATED 115 -# define RAND_R_NO_DRBG_IMPLEMENTATION_SELECTED 128 -# define RAND_R_PARENT_LOCKING_NOT_ENABLED 130 -# define RAND_R_PARENT_STRENGTH_TOO_WEAK 131 -# define RAND_R_PERSONALISATION_STRING_TOO_LONG 116 -# define RAND_R_PREDICTION_RESISTANCE_NOT_SUPPORTED 133 -# define RAND_R_PRNG_NOT_SEEDED 100 -# define RAND_R_RANDOM_POOL_OVERFLOW 125 -# define RAND_R_RANDOM_POOL_UNDERFLOW 134 -# define RAND_R_REQUEST_TOO_LARGE_FOR_DRBG 117 -# define RAND_R_RESEED_ERROR 118 -# 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 - -#endif 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 deleted file mode 100644 index ff633fd8..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc2.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# 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 - -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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 600b2885..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc4.h +++ /dev/null @@ -1,47 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index de833523..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rc5.h +++ /dev/null @@ -1,79 +0,0 @@ -/* - * Copyright 1995-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_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 -extern "C" { -# endif - -# define RC5_32_BLOCK 8 -# define RC5_32_KEY_LENGTH 16/* This is a default, max is 255 */ - -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define RC5_ENCRYPT 1 -# define RC5_DECRYPT 0 - -# 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 - -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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 900ee317..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ripemd.h +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright 1995-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_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 - -# define RIPEMD160_DIGEST_LENGTH 20 - -# ifdef __cplusplus -extern "C" { -# endif -# if !defined(OPENSSL_NO_DEPRECATED_3_0) - -# define RIPEMD160_LONG unsigned int - -# define RIPEMD160_CBLOCK 64 -# define RIPEMD160_LBLOCK (RIPEMD160_CBLOCK/4) - -typedef struct RIPEMD160state_st { - RIPEMD160_LONG A, B, C, D, E; - RIPEMD160_LONG Nl, Nh; - 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 167427d3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsa.h +++ /dev/null @@ -1,615 +0,0 @@ -/* - * 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_RSA_H -# define OPENSSL_RSA_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_RSA_H -# endif - -# include - -# include -# include -# include -# include -# ifndef OPENSSL_NO_DEPRECATED_1_1_0 -# include -# endif -# include -# include -# ifndef OPENSSL_NO_STDIO -# include -# endif - -# ifdef __cplusplus -extern "C" { -# endif - -# ifndef OPENSSL_RSA_MAX_MODULUS_BITS -# define OPENSSL_RSA_MAX_MODULUS_BITS 16384 -# 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_DEFAULT_PRIME_NUM 2 - -# 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 - -/* - * new with 0.9.6j and 0.9.7b; the built-in - * RSA implementation now uses blinding by - * default (ignoring RSA_FLAG_BLINDING), - * but other engines might not need it - */ -# 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 -/* deprecated name for the flag*/ -/* - * new with 0.9.7h; the built-in RSA - * implementation now uses constant time - * modular exponentiation for secret exponents - * by default. This flag causes the - * 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 - -/*- - * 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 - -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 - -/* 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 - -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); - -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); - -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) - -# define EVP_PKEY_CTRL_RSA_KEYGEN_BITS (EVP_PKEY_ALG_CTRL + 3) -# define EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP (EVP_PKEY_ALG_CTRL + 4) -# define EVP_PKEY_CTRL_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 5) - -# define EVP_PKEY_CTRL_GET_RSA_PADDING (EVP_PKEY_ALG_CTRL + 6) -# define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7) -# define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8) - -# define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 9) -# define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 10) - -# define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 11) -# define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12) - -# define EVP_PKEY_CTRL_RSA_KEYGEN_PRIMES (EVP_PKEY_ALG_CTRL + 13) - -# define EVP_PKEY_CTRL_RSA_IMPLICIT_REJECTION (EVP_PKEY_ALG_CTRL + 14) - -# define RSA_PKCS1_PADDING 1 -# 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_WITH_TLS_PADDING 7 - -/* internal RSA_ only */ -# define RSA_PKCS1_NO_IMPLICIT_REJECT_PADDING 8 - -# 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) - -# 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); - -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[]); -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 */ -# 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 */ -# 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 */ -OSSL_DEPRECATEDIN_3_0 int RSA_generate_multi_prime_key(RSA *rsa, int bits, - int primes, 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); - -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 */ -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 */ -OSSL_DEPRECATEDIN_3_0 int RSA_up_ref(RSA *r); -OSSL_DEPRECATEDIN_3_0 int RSA_flags(const RSA *r); - -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 */ -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); - -struct rsa_pss_params_st { - X509_ALGOR *hashAlgorithm; - X509_ALGOR *maskGenAlgorithm; - ASN1_INTEGER *saltLength; - ASN1_INTEGER *trailerField; - /* Decoded hash algorithm from maskGenAlgorithm */ - X509_ALGOR *maskHash; -}; - -DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS) -DECLARE_ASN1_DUP_FUNCTION(RSA_PSS_PARAMS) - -typedef struct rsa_oaep_params_st { - X509_ALGOR *hashFunc; - X509_ALGOR *maskGenFunc; - X509_ALGOR *pSourceFunc; - /* Decoded hash algorithm from maskGenFunc */ - X509_ALGOR *maskHash; -} RSA_OAEP_PARAMS; - -DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS) - -# 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 - -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 - */ -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); -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); - -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); -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); -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) \ - CRYPTO_get_ex_new_index(CRYPTO_EX_INDEX_RSA, l, p, newf, dupf, freef) -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); - -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 - * 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 RSA_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 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 - -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)); -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)); -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)); -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)); -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)); -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, - const BIGNUM *p, - 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)); -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)); -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)); -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)); -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 -} -# 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 deleted file mode 100644 index c58463c7..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsaerr.h +++ /dev/null @@ -1,107 +0,0 @@ -/* - * 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_RSAERR_H -# define OPENSSL_RSAERR_H -# pragma once - -# include -# include -# include - - - -/* - * RSA reason codes. - */ -# define RSA_R_ALGORITHM_MISMATCH 100 -# define RSA_R_BAD_E_VALUE 101 -# define RSA_R_BAD_FIXED_HEADER_DECRYPT 102 -# define RSA_R_BAD_PAD_BYTE_COUNT 103 -# define RSA_R_BAD_SIGNATURE 104 -# define RSA_R_BLOCK_TYPE_IS_NOT_01 106 -# define RSA_R_BLOCK_TYPE_IS_NOT_02 107 -# define RSA_R_DATA_GREATER_THAN_MOD_LEN 108 -# define RSA_R_DATA_TOO_LARGE 109 -# define RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 110 -# define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132 -# define RSA_R_DATA_TOO_SMALL 111 -# define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122 -# define RSA_R_DIGEST_DOES_NOT_MATCH 158 -# define RSA_R_DIGEST_NOT_ALLOWED 145 -# define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112 -# define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124 -# define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125 -# define RSA_R_D_E_NOT_CONGRUENT_TO_1 123 -# define RSA_R_FIRST_OCTET_INVALID 133 -# define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144 -# 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_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 -# define RSA_R_MP_R_NOT_PRIME 170 -# define RSA_R_NO_PUBLIC_EXPONENT 140 -# define RSA_R_NULL_BEFORE_BLOCK_MISSING 113 -# define RSA_R_N_DOES_NOT_EQUAL_PRODUCT_OF_PRIMES 172 -# define RSA_R_N_DOES_NOT_EQUAL_P_Q 127 -# 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 -# define RSA_R_SSLV3_ROLLBACK_ATTACK 115 -# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116 -# define RSA_R_UNKNOWN_ALGORITHM_TYPE 117 -# define RSA_R_UNKNOWN_DIGEST 166 -# define RSA_R_UNKNOWN_MASK_DIGEST 151 -# define RSA_R_UNKNOWN_PADDING_TYPE 118 -# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 162 -# define RSA_R_UNSUPPORTED_LABEL_SOURCE 163 -# define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153 -# define RSA_R_UNSUPPORTED_MASK_PARAMETER 154 -# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155 -# define RSA_R_VALUE_MISSING 147 -# define RSA_R_WRONG_SIGNATURE_LENGTH 119 - -#endif 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 deleted file mode 100644 index 0499700b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/safestack.h +++ /dev/null @@ -1,297 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/safestack.h.in - * - * 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 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. - */ -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) -/* - * 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; -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))) - -#endif - -# ifdef __cplusplus -} -# endif -#endif 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 deleted file mode 100644 index 6b366079..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/safestack.h.in +++ /dev/null @@ -1,227 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index edb218ae..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/seed.h +++ /dev/null @@ -1,113 +0,0 @@ -/* - * Copyright 2007-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 - */ - -/* - * Copyright (c) 2007 KISA(Korea Information Security Agency). All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Neither the name of author nor the names of its contributors may - * be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - */ - -#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 - -# ifdef __cplusplus -extern "C" { -# endif - -# 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 - - -typedef struct seed_key_st { -# ifdef SEED_LONG - unsigned long data[32]; -# else - unsigned int data[32]; -# 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); -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); -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); -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); -# endif - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index 337a3190..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/self_test.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * 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 deleted file mode 100644 index 163a7d58..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sha.h +++ /dev/null @@ -1,139 +0,0 @@ -/* - * 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_SHA_H -# define OPENSSL_SHA_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_SHA_H -# endif - -# include -# include - -# ifdef __cplusplus -extern "C" { -# 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_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; - SHA_LONG Nl, Nh; - SHA_LONG data[SHA_LBLOCK]; - unsigned int num; -} SHA_CTX; - -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 - -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. */ - -typedef struct SHA256state_st { - SHA_LONG h[8]; - SHA_LONG Nl, Nh; - SHA_LONG data[SHA_LBLOCK]; - unsigned int num, md_len; -} SHA256_CTX; - -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); -unsigned char *SHA256(const unsigned char *d, size_t n, unsigned char *md); - -# define SHA256_192_DIGEST_LENGTH 24 -# 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 - * for further details. - */ -/* - * SHA-512 treats input data as a - * 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 -# elif defined(__arch64__) -# define SHA_LONG64 unsigned long -# else -# define SHA_LONG64 unsigned long long -# endif - -typedef struct SHA512state_st { - SHA_LONG64 h[8]; - SHA_LONG64 Nl, Nh; - union { - SHA_LONG64 d[SHA_LBLOCK]; - unsigned char p[SHA512_CBLOCK]; - } u; - unsigned int num, md_len; -} SHA512_CTX; - -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); -unsigned char *SHA512(const unsigned char *d, size_t n, unsigned char *md); - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index a48766c6..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h +++ /dev/null @@ -1,285 +0,0 @@ -/* - * 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 Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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. - */ - - - -#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; -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))) - - - -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; -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); - -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; -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))) - - - -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/srp.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h.in deleted file mode 100644 index dfbe845b..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srp.h.in +++ /dev/null @@ -1,214 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 2c2c3344..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srtp.h +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2011-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the License. You can obtain a copy - * in the file LICENSE in the source distribution or at - * https://www.openssl.org/source/license.html - */ - -/* - * DTLS code by Eric Rescorla - * - * Copyright (C) 2006, Network Resonance, Inc. Copyright (C) 2011, RTFM, Inc. - */ - -#ifndef OPENSSL_SRTP_H -# define OPENSSL_SRTP_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_D1_SRTP_H -# endif - -# include - -#ifdef __cplusplus -extern "C" { -#endif - -# define SRTP_AES128_CM_SHA1_80 0x0001 -# define SRTP_AES128_CM_SHA1_32 0x0002 -# define SRTP_AES128_F8_SHA1_80 0x0003 -# define SRTP_AES128_F8_SHA1_32 0x0004 -# define SRTP_NULL_SHA1_80 0x0005 -# define SRTP_NULL_SHA1_32 0x0006 - -/* AEAD SRTP protection profiles from RFC 7714 */ -# define SRTP_AEAD_AES_128_GCM 0x0007 -# define SRTP_AEAD_AES_256_GCM 0x0008 - -/* DOUBLE AEAD SRTP protection profiles from RFC 8723 */ -# define SRTP_DOUBLE_AEAD_AES_128_GCM_AEAD_AES_128_GCM 0x0009 -# define SRTP_DOUBLE_AEAD_AES_256_GCM_AEAD_AES_256_GCM 0x000A - -/* ARIA SRTP protection profiles from RFC 8269 */ -# define SRTP_ARIA_128_CTR_HMAC_SHA1_80 0x000B -# define SRTP_ARIA_128_CTR_HMAC_SHA1_32 0x000C -# define SRTP_ARIA_256_CTR_HMAC_SHA1_80 0x000D -# define SRTP_ARIA_256_CTR_HMAC_SHA1_32 0x000E -# define SRTP_AEAD_ARIA_128_GCM 0x000F -# define SRTP_AEAD_ARIA_256_GCM 0x0010 - -# ifndef OPENSSL_NO_SRTP - -__owur int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles); -__owur int SSL_set_tlsext_use_srtp(SSL *ssl, const char *profiles); - -__owur STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl); -__owur SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s); - -# endif - -#ifdef __cplusplus -} -#endif - -#endif 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 deleted file mode 100644 index 2b43485f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h +++ /dev/null @@ -1,2765 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/ssl.h.in - * - * Copyright 1995-2023 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 - */ - - - -#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 -# 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; -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))) - - - -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 0x00001 -/* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x00002 -/* Some extensions may be allowed in DTLS but we don't implement them for it */ -#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 -/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x00008 -/* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 -/* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x00020 -/* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x00040 -#define SSL_EXT_CLIENT_HELLO 0x00080 -/* Really means TLS1.2 or below */ -#define SSL_EXT_TLS1_2_SERVER_HELLO 0x00100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x00200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x00400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x00800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x01000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x02000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x04000 -#define SSL_EXT_TLS1_3_CERTIFICATE_COMPRESSION 0x08000 -/* When sending a raw public key in a certificate message */ -#define SSL_EXT_TLS1_3_RAW_PUBLIC_KEY 0x10000 - -/* 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) -/* - * Disable RFC8879 certificate compression - * SSL_OP_NO_TX_CERTIFICATE_COMPRESSION: don't send compressed certificates, - * and ignore the extension when received. - * SSL_OP_NO_RX_CERTIFICATE_COMPRESSION: don't send the extension, and - * subsequently indicating that receiving is not supported - */ -# define SSL_OP_NO_TX_CERTIFICATE_COMPRESSION SSL_OP_BIT(32) -# define SSL_OP_NO_RX_CERTIFICATE_COMPRESSION SSL_OP_BIT(33) - /* Enable KTLS TX zerocopy on Linux */ -# define SSL_OP_ENABLE_KTLS_TX_ZEROCOPY_SENDFILE SSL_OP_BIT(34) - -/* - * 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 -/* Cert pkey valid for raw public key use */ -# define CERT_PKEY_RPK 0x1000 - -# 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 */ -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * These need to be after the above set of includes due to a compiler bug - * in VisualStudio 2015 - */ -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))) -# 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_COMP_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_COMP_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_COMP_CERT, - TLS_ST_SW_KEY_EXCH, - TLS_ST_SW_CERT_REQ, - TLS_ST_SW_SRVR_DONE, - TLS_ST_SR_CERT, - TLS_ST_SR_COMP_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_GET_IANA_GROUPS 135 -# 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_get0_iana_groups(s, plst) \ - SSL_ctrl(s,SSL_CTRL_GET_IANA_GROUPS,0,(uint16_t **)(plst)) -# 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_get0_group_name(SSL *s); -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); -SSL_SESSION *d2i_SSL_SESSION_ex(SSL_SESSION **a, const unsigned char **pp, - long length, OSSL_LIB_CTX *libctx, - const char *propq); - -# 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); -int SSL_is_tls(const SSL *s); -int SSL_is_quic(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_get_extension_order(SSL *s, uint16_t *exts, - size_t *num_exts); -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); -__owur int SSL_get_handshake_rtt(const SSL *s, uint64_t *rtt); - -/* 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); - -/* QUIC support */ -int SSL_handle_events(SSL *s); -__owur int SSL_get_event_timeout(SSL *s, struct timeval *tv, int *is_infinite); -__owur int SSL_get_rpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc); -__owur int SSL_get_wpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc); -__owur int SSL_net_read_desired(SSL *s); -__owur int SSL_net_write_desired(SSL *s); -__owur int SSL_set_blocking_mode(SSL *s, int blocking); -__owur int SSL_get_blocking_mode(SSL *s); -__owur int SSL_set1_initial_peer_addr(SSL *s, const BIO_ADDR *peer_addr); -__owur SSL *SSL_get0_connection(SSL *s); -__owur int SSL_is_connection(SSL *s); - -#define SSL_STREAM_TYPE_NONE 0 -#define SSL_STREAM_TYPE_READ (1U << 0) -#define SSL_STREAM_TYPE_WRITE (1U << 1) -#define SSL_STREAM_TYPE_BIDI (SSL_STREAM_TYPE_READ | SSL_STREAM_TYPE_WRITE) -__owur int SSL_get_stream_type(SSL *s); - -__owur uint64_t SSL_get_stream_id(SSL *s); -__owur int SSL_is_stream_local(SSL *s); - -#define SSL_DEFAULT_STREAM_MODE_NONE 0 -#define SSL_DEFAULT_STREAM_MODE_AUTO_BIDI 1 -#define SSL_DEFAULT_STREAM_MODE_AUTO_UNI 2 -__owur int SSL_set_default_stream_mode(SSL *s, uint32_t mode); - -#define SSL_STREAM_FLAG_UNI (1U << 0) -#define SSL_STREAM_FLAG_NO_BLOCK (1U << 1) -#define SSL_STREAM_FLAG_ADVANCE (1U << 2) -__owur SSL *SSL_new_stream(SSL *s, uint64_t flags); - -#define SSL_INCOMING_STREAM_POLICY_AUTO 0 -#define SSL_INCOMING_STREAM_POLICY_ACCEPT 1 -#define SSL_INCOMING_STREAM_POLICY_REJECT 2 -__owur int SSL_set_incoming_stream_policy(SSL *s, int policy, uint64_t aec); - -#define SSL_ACCEPT_STREAM_NO_BLOCK (1U << 0) -__owur SSL *SSL_accept_stream(SSL *s, uint64_t flags); -__owur size_t SSL_get_accept_stream_queue_len(SSL *s); - -# ifndef OPENSSL_NO_QUIC -__owur int SSL_inject_net_dgram(SSL *s, const unsigned char *buf, - size_t buf_len, - const BIO_ADDR *peer, - const BIO_ADDR *local); -# endif - -typedef struct ssl_shutdown_ex_args_st { - uint64_t quic_error_code; - const char *quic_reason; -} SSL_SHUTDOWN_EX_ARGS; - -#define SSL_SHUTDOWN_FLAG_RAPID (1U << 0) -#define SSL_SHUTDOWN_FLAG_NO_STREAM_FLUSH (1U << 1) -#define SSL_SHUTDOWN_FLAG_NO_BLOCK (1U << 2) -#define SSL_SHUTDOWN_FLAG_WAIT_PEER (1U << 3) - -__owur int SSL_shutdown_ex(SSL *ssl, uint64_t flags, - const SSL_SHUTDOWN_EX_ARGS *args, - size_t args_len); - -__owur int SSL_stream_conclude(SSL *ssl, uint64_t flags); - -typedef struct ssl_stream_reset_args_st { - uint64_t quic_error_code; -} SSL_STREAM_RESET_ARGS; - -__owur int SSL_stream_reset(SSL *ssl, - const SSL_STREAM_RESET_ARGS *args, - size_t args_len); - -#define SSL_STREAM_STATE_NONE 0 -#define SSL_STREAM_STATE_OK 1 -#define SSL_STREAM_STATE_WRONG_DIR 2 -#define SSL_STREAM_STATE_FINISHED 3 -#define SSL_STREAM_STATE_RESET_LOCAL 4 -#define SSL_STREAM_STATE_RESET_REMOTE 5 -#define SSL_STREAM_STATE_CONN_CLOSED 6 -__owur int SSL_get_stream_read_state(SSL *ssl); -__owur int SSL_get_stream_write_state(SSL *ssl); - -__owur int SSL_get_stream_read_error_code(SSL *ssl, uint64_t *app_error_code); -__owur int SSL_get_stream_write_error_code(SSL *ssl, uint64_t *app_error_code); - -#define SSL_CONN_CLOSE_FLAG_LOCAL (1U << 0) -#define SSL_CONN_CLOSE_FLAG_TRANSPORT (1U << 1) - -typedef struct ssl_conn_close_info_st { - uint64_t error_code, frame_type; - const char *reason; - size_t reason_len; - uint32_t flags; -} SSL_CONN_CLOSE_INFO; - -__owur int SSL_get_conn_close_info(SSL *ssl, - SSL_CONN_CLOSE_INFO *info, - size_t info_len); - -# 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); - -/* RFC8879 Certificate compression APIs */ - -int SSL_CTX_compress_certs(SSL_CTX *ctx, int alg); -int SSL_compress_certs(SSL *ssl, int alg); - -int SSL_CTX_set1_cert_comp_preference(SSL_CTX *ctx, int *algs, size_t len); -int SSL_set1_cert_comp_preference(SSL *ssl, int *algs, size_t len); - -int SSL_CTX_set1_compressed_cert(SSL_CTX *ctx, int algorithm, unsigned char *comp_data, - size_t comp_length, size_t orig_length); -int SSL_set1_compressed_cert(SSL *ssl, int algorithm, unsigned char *comp_data, - size_t comp_length, size_t orig_length); -size_t SSL_CTX_get1_compressed_cert(SSL_CTX *ctx, int alg, unsigned char **data, size_t *orig_len); -size_t SSL_get1_compressed_cert(SSL *ssl, int alg, unsigned char **data, size_t *orig_len); - -__owur int SSL_add_expected_rpk(SSL *s, EVP_PKEY *rpk); -__owur EVP_PKEY *SSL_get0_peer_rpk(const SSL *s); -__owur EVP_PKEY *SSL_SESSION_get0_peer_rpk(SSL_SESSION *s); -__owur int SSL_get_negotiated_client_cert_type(const SSL *s); -__owur int SSL_get_negotiated_server_cert_type(const SSL *s); - -__owur int SSL_set1_client_cert_type(SSL *s, const unsigned char *val, size_t len); -__owur int SSL_set1_server_cert_type(SSL *s, const unsigned char *val, size_t len); -__owur int SSL_CTX_set1_client_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len); -__owur int SSL_CTX_set1_server_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len); -__owur int SSL_get0_client_cert_type(const SSL *s, unsigned char **t, size_t *len); -__owur int SSL_get0_server_cert_type(const SSL *s, unsigned char **t, size_t *len); -__owur int SSL_CTX_get0_client_cert_type(const SSL_CTX *ctx, unsigned char **t, size_t *len); -__owur int SSL_CTX_get0_server_cert_type(const SSL_CTX *s, unsigned char **t, size_t *len); - -# ifdef __cplusplus -} -# endif -#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 deleted file mode 100644 index 9f91039f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h.in +++ /dev/null @@ -1,2693 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 1995-2023 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 -# 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 0x00001 -/* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x00002 -/* Some extensions may be allowed in DTLS but we don't implement them for it */ -#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 -/* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x00008 -/* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 -/* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x00020 -/* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x00040 -#define SSL_EXT_CLIENT_HELLO 0x00080 -/* Really means TLS1.2 or below */ -#define SSL_EXT_TLS1_2_SERVER_HELLO 0x00100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x00200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x00400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x00800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x01000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x02000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x04000 -#define SSL_EXT_TLS1_3_CERTIFICATE_COMPRESSION 0x08000 -/* When sending a raw public key in a certificate message */ -#define SSL_EXT_TLS1_3_RAW_PUBLIC_KEY 0x10000 - -/* 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) -/* - * Disable RFC8879 certificate compression - * SSL_OP_NO_TX_CERTIFICATE_COMPRESSION: don't send compressed certificates, - * and ignore the extension when received. - * SSL_OP_NO_RX_CERTIFICATE_COMPRESSION: don't send the extension, and - * subsequently indicating that receiving is not supported - */ -# define SSL_OP_NO_TX_CERTIFICATE_COMPRESSION SSL_OP_BIT(32) -# define SSL_OP_NO_RX_CERTIFICATE_COMPRESSION SSL_OP_BIT(33) - /* Enable KTLS TX zerocopy on Linux */ -# define SSL_OP_ENABLE_KTLS_TX_ZEROCOPY_SENDFILE SSL_OP_BIT(34) - -/* - * 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 -/* Cert pkey valid for raw public key use */ -# define CERT_PKEY_RPK 0x1000 - -# 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 */ -# include - -#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_COMP_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_COMP_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_COMP_CERT, - TLS_ST_SW_KEY_EXCH, - TLS_ST_SW_CERT_REQ, - TLS_ST_SW_SRVR_DONE, - TLS_ST_SR_CERT, - TLS_ST_SR_COMP_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_GET_IANA_GROUPS 135 -# 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_get0_iana_groups(s, plst) \ - SSL_ctrl(s,SSL_CTRL_GET_IANA_GROUPS,0,(uint16_t **)(plst)) -# 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_get0_group_name(SSL *s); -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); -SSL_SESSION *d2i_SSL_SESSION_ex(SSL_SESSION **a, const unsigned char **pp, - long length, OSSL_LIB_CTX *libctx, - const char *propq); - -# 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); -int SSL_is_tls(const SSL *s); -int SSL_is_quic(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_get_extension_order(SSL *s, uint16_t *exts, - size_t *num_exts); -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); -__owur int SSL_get_handshake_rtt(const SSL *s, uint64_t *rtt); - -/* 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); - -/* QUIC support */ -int SSL_handle_events(SSL *s); -__owur int SSL_get_event_timeout(SSL *s, struct timeval *tv, int *is_infinite); -__owur int SSL_get_rpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc); -__owur int SSL_get_wpoll_descriptor(SSL *s, BIO_POLL_DESCRIPTOR *desc); -__owur int SSL_net_read_desired(SSL *s); -__owur int SSL_net_write_desired(SSL *s); -__owur int SSL_set_blocking_mode(SSL *s, int blocking); -__owur int SSL_get_blocking_mode(SSL *s); -__owur int SSL_set1_initial_peer_addr(SSL *s, const BIO_ADDR *peer_addr); -__owur SSL *SSL_get0_connection(SSL *s); -__owur int SSL_is_connection(SSL *s); - -#define SSL_STREAM_TYPE_NONE 0 -#define SSL_STREAM_TYPE_READ (1U << 0) -#define SSL_STREAM_TYPE_WRITE (1U << 1) -#define SSL_STREAM_TYPE_BIDI (SSL_STREAM_TYPE_READ | SSL_STREAM_TYPE_WRITE) -__owur int SSL_get_stream_type(SSL *s); - -__owur uint64_t SSL_get_stream_id(SSL *s); -__owur int SSL_is_stream_local(SSL *s); - -#define SSL_DEFAULT_STREAM_MODE_NONE 0 -#define SSL_DEFAULT_STREAM_MODE_AUTO_BIDI 1 -#define SSL_DEFAULT_STREAM_MODE_AUTO_UNI 2 -__owur int SSL_set_default_stream_mode(SSL *s, uint32_t mode); - -#define SSL_STREAM_FLAG_UNI (1U << 0) -#define SSL_STREAM_FLAG_NO_BLOCK (1U << 1) -#define SSL_STREAM_FLAG_ADVANCE (1U << 2) -__owur SSL *SSL_new_stream(SSL *s, uint64_t flags); - -#define SSL_INCOMING_STREAM_POLICY_AUTO 0 -#define SSL_INCOMING_STREAM_POLICY_ACCEPT 1 -#define SSL_INCOMING_STREAM_POLICY_REJECT 2 -__owur int SSL_set_incoming_stream_policy(SSL *s, int policy, uint64_t aec); - -#define SSL_ACCEPT_STREAM_NO_BLOCK (1U << 0) -__owur SSL *SSL_accept_stream(SSL *s, uint64_t flags); -__owur size_t SSL_get_accept_stream_queue_len(SSL *s); - -# ifndef OPENSSL_NO_QUIC -__owur int SSL_inject_net_dgram(SSL *s, const unsigned char *buf, - size_t buf_len, - const BIO_ADDR *peer, - const BIO_ADDR *local); -# endif - -typedef struct ssl_shutdown_ex_args_st { - uint64_t quic_error_code; - const char *quic_reason; -} SSL_SHUTDOWN_EX_ARGS; - -#define SSL_SHUTDOWN_FLAG_RAPID (1U << 0) -#define SSL_SHUTDOWN_FLAG_NO_STREAM_FLUSH (1U << 1) -#define SSL_SHUTDOWN_FLAG_NO_BLOCK (1U << 2) -#define SSL_SHUTDOWN_FLAG_WAIT_PEER (1U << 3) - -__owur int SSL_shutdown_ex(SSL *ssl, uint64_t flags, - const SSL_SHUTDOWN_EX_ARGS *args, - size_t args_len); - -__owur int SSL_stream_conclude(SSL *ssl, uint64_t flags); - -typedef struct ssl_stream_reset_args_st { - uint64_t quic_error_code; -} SSL_STREAM_RESET_ARGS; - -__owur int SSL_stream_reset(SSL *ssl, - const SSL_STREAM_RESET_ARGS *args, - size_t args_len); - -#define SSL_STREAM_STATE_NONE 0 -#define SSL_STREAM_STATE_OK 1 -#define SSL_STREAM_STATE_WRONG_DIR 2 -#define SSL_STREAM_STATE_FINISHED 3 -#define SSL_STREAM_STATE_RESET_LOCAL 4 -#define SSL_STREAM_STATE_RESET_REMOTE 5 -#define SSL_STREAM_STATE_CONN_CLOSED 6 -__owur int SSL_get_stream_read_state(SSL *ssl); -__owur int SSL_get_stream_write_state(SSL *ssl); - -__owur int SSL_get_stream_read_error_code(SSL *ssl, uint64_t *app_error_code); -__owur int SSL_get_stream_write_error_code(SSL *ssl, uint64_t *app_error_code); - -#define SSL_CONN_CLOSE_FLAG_LOCAL (1U << 0) -#define SSL_CONN_CLOSE_FLAG_TRANSPORT (1U << 1) - -typedef struct ssl_conn_close_info_st { - uint64_t error_code, frame_type; - const char *reason; - size_t reason_len; - uint32_t flags; -} SSL_CONN_CLOSE_INFO; - -__owur int SSL_get_conn_close_info(SSL *ssl, - SSL_CONN_CLOSE_INFO *info, - size_t info_len); - -# 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); - -/* RFC8879 Certificate compression APIs */ - -int SSL_CTX_compress_certs(SSL_CTX *ctx, int alg); -int SSL_compress_certs(SSL *ssl, int alg); - -int SSL_CTX_set1_cert_comp_preference(SSL_CTX *ctx, int *algs, size_t len); -int SSL_set1_cert_comp_preference(SSL *ssl, int *algs, size_t len); - -int SSL_CTX_set1_compressed_cert(SSL_CTX *ctx, int algorithm, unsigned char *comp_data, - size_t comp_length, size_t orig_length); -int SSL_set1_compressed_cert(SSL *ssl, int algorithm, unsigned char *comp_data, - size_t comp_length, size_t orig_length); -size_t SSL_CTX_get1_compressed_cert(SSL_CTX *ctx, int alg, unsigned char **data, size_t *orig_len); -size_t SSL_get1_compressed_cert(SSL *ssl, int alg, unsigned char **data, size_t *orig_len); - -__owur int SSL_add_expected_rpk(SSL *s, EVP_PKEY *rpk); -__owur EVP_PKEY *SSL_get0_peer_rpk(const SSL *s); -__owur EVP_PKEY *SSL_SESSION_get0_peer_rpk(SSL_SESSION *s); -__owur int SSL_get_negotiated_client_cert_type(const SSL *s); -__owur int SSL_get_negotiated_server_cert_type(const SSL *s); - -__owur int SSL_set1_client_cert_type(SSL *s, const unsigned char *val, size_t len); -__owur int SSL_set1_server_cert_type(SSL *s, const unsigned char *val, size_t len); -__owur int SSL_CTX_set1_client_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len); -__owur int SSL_CTX_set1_server_cert_type(SSL_CTX *ctx, const unsigned char *val, size_t len); -__owur int SSL_get0_client_cert_type(const SSL *s, unsigned char **t, size_t *len); -__owur int SSL_get0_server_cert_type(const SSL *s, unsigned char **t, size_t *len); -__owur int SSL_CTX_get0_client_cert_type(const SSL_CTX *ctx, unsigned char **t, size_t *len); -__owur int SSL_CTX_get0_server_cert_type(const SSL_CTX *s, unsigned char **t, size_t *len); - -# 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 deleted file mode 100644 index 428ead05..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl2.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_SSL2_H -# define OPENSSL_SSL2_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_SSL2_H -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -# define SSL2_VERSION 0x0002 - -# define SSL2_MT_CLIENT_HELLO 1 - -#ifdef __cplusplus -} -#endif -#endif 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 deleted file mode 100644 index 4f076c6c..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl3.h +++ /dev/null @@ -1,357 +0,0 @@ -/* - * Copyright 1995-2023 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 - */ - -#ifndef OPENSSL_SSL3_H -# define OPENSSL_SSL3_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_SSL3_H -# endif - -# include -# include -# include -# include - -#ifdef __cplusplus -extern "C" { -#endif - -/* - * Signalling cipher suite value from RFC 5746 - * (TLS_EMPTY_RENEGOTIATION_INFO_SCSV) - */ -# define SSL3_CK_SCSV 0x030000FF - -/* - * Signalling cipher suite value from draft-ietf-tls-downgrade-scsv-00 - * (TLS_FALLBACK_SCSV) - */ -# define SSL3_CK_FALLBACK_SCSV 0x03005600 - -# define SSL3_CK_RSA_NULL_MD5 0x03000001 -# define SSL3_CK_RSA_NULL_SHA 0x03000002 -# define SSL3_CK_RSA_RC4_40_MD5 0x03000003 -# define SSL3_CK_RSA_RC4_128_MD5 0x03000004 -# define SSL3_CK_RSA_RC4_128_SHA 0x03000005 -# define SSL3_CK_RSA_RC2_40_MD5 0x03000006 -# define SSL3_CK_RSA_IDEA_128_SHA 0x03000007 -# define SSL3_CK_RSA_DES_40_CBC_SHA 0x03000008 -# define SSL3_CK_RSA_DES_64_CBC_SHA 0x03000009 -# define SSL3_CK_RSA_DES_192_CBC3_SHA 0x0300000A - -# define SSL3_CK_DH_DSS_DES_40_CBC_SHA 0x0300000B -# define SSL3_CK_DH_DSS_DES_64_CBC_SHA 0x0300000C -# define SSL3_CK_DH_DSS_DES_192_CBC3_SHA 0x0300000D -# define SSL3_CK_DH_RSA_DES_40_CBC_SHA 0x0300000E -# define SSL3_CK_DH_RSA_DES_64_CBC_SHA 0x0300000F -# define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010 - -# define SSL3_CK_DHE_DSS_DES_40_CBC_SHA 0x03000011 -# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA SSL3_CK_DHE_DSS_DES_40_CBC_SHA -# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA 0x03000012 -# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA SSL3_CK_DHE_DSS_DES_64_CBC_SHA -# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA 0x03000013 -# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA SSL3_CK_DHE_DSS_DES_192_CBC3_SHA -# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA 0x03000014 -# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA SSL3_CK_DHE_RSA_DES_40_CBC_SHA -# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA 0x03000015 -# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA SSL3_CK_DHE_RSA_DES_64_CBC_SHA -# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA 0x03000016 -# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA SSL3_CK_DHE_RSA_DES_192_CBC3_SHA - -# define SSL3_CK_ADH_RC4_40_MD5 0x03000017 -# define SSL3_CK_ADH_RC4_128_MD5 0x03000018 -# define SSL3_CK_ADH_DES_40_CBC_SHA 0x03000019 -# define SSL3_CK_ADH_DES_64_CBC_SHA 0x0300001A -# define SSL3_CK_ADH_DES_192_CBC_SHA 0x0300001B - -/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ -# define SSL3_RFC_RSA_NULL_MD5 "TLS_RSA_WITH_NULL_MD5" -# define SSL3_RFC_RSA_NULL_SHA "TLS_RSA_WITH_NULL_SHA" -# define SSL3_RFC_RSA_DES_192_CBC3_SHA "TLS_RSA_WITH_3DES_EDE_CBC_SHA" -# define SSL3_RFC_DHE_DSS_DES_192_CBC3_SHA "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA" -# define SSL3_RFC_DHE_RSA_DES_192_CBC3_SHA "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA" -# define SSL3_RFC_ADH_DES_192_CBC_SHA "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA" -# define SSL3_RFC_RSA_IDEA_128_SHA "TLS_RSA_WITH_IDEA_CBC_SHA" -# define SSL3_RFC_RSA_RC4_128_MD5 "TLS_RSA_WITH_RC4_128_MD5" -# define SSL3_RFC_RSA_RC4_128_SHA "TLS_RSA_WITH_RC4_128_SHA" -# define SSL3_RFC_ADH_RC4_128_MD5 "TLS_DH_anon_WITH_RC4_128_MD5" - -# define SSL3_TXT_RSA_NULL_MD5 "NULL-MD5" -# define SSL3_TXT_RSA_NULL_SHA "NULL-SHA" -# define SSL3_TXT_RSA_RC4_40_MD5 "EXP-RC4-MD5" -# define SSL3_TXT_RSA_RC4_128_MD5 "RC4-MD5" -# define SSL3_TXT_RSA_RC4_128_SHA "RC4-SHA" -# define SSL3_TXT_RSA_RC2_40_MD5 "EXP-RC2-CBC-MD5" -# define SSL3_TXT_RSA_IDEA_128_SHA "IDEA-CBC-SHA" -# define SSL3_TXT_RSA_DES_40_CBC_SHA "EXP-DES-CBC-SHA" -# define SSL3_TXT_RSA_DES_64_CBC_SHA "DES-CBC-SHA" -# define SSL3_TXT_RSA_DES_192_CBC3_SHA "DES-CBC3-SHA" - -# define SSL3_TXT_DH_DSS_DES_40_CBC_SHA "EXP-DH-DSS-DES-CBC-SHA" -# define SSL3_TXT_DH_DSS_DES_64_CBC_SHA "DH-DSS-DES-CBC-SHA" -# define SSL3_TXT_DH_DSS_DES_192_CBC3_SHA "DH-DSS-DES-CBC3-SHA" -# define SSL3_TXT_DH_RSA_DES_40_CBC_SHA "EXP-DH-RSA-DES-CBC-SHA" -# define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA" -# define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA" - -# define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA "EXP-DHE-DSS-DES-CBC-SHA" -# define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA "DHE-DSS-DES-CBC-SHA" -# define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA "DHE-DSS-DES-CBC3-SHA" -# define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA "EXP-DHE-RSA-DES-CBC-SHA" -# define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA "DHE-RSA-DES-CBC-SHA" -# define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA "DHE-RSA-DES-CBC3-SHA" - -/* - * This next block of six "EDH" labels is for backward compatibility with - * older versions of OpenSSL. New code should use the six "DHE" labels above - * instead: - */ -# define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA" -# define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA" -# define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA" -# define SSL3_TXT_EDH_RSA_DES_40_CBC_SHA "EXP-EDH-RSA-DES-CBC-SHA" -# define SSL3_TXT_EDH_RSA_DES_64_CBC_SHA "EDH-RSA-DES-CBC-SHA" -# define SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA "EDH-RSA-DES-CBC3-SHA" - -# define SSL3_TXT_ADH_RC4_40_MD5 "EXP-ADH-RC4-MD5" -# define SSL3_TXT_ADH_RC4_128_MD5 "ADH-RC4-MD5" -# define SSL3_TXT_ADH_DES_40_CBC_SHA "EXP-ADH-DES-CBC-SHA" -# define SSL3_TXT_ADH_DES_64_CBC_SHA "ADH-DES-CBC-SHA" -# define SSL3_TXT_ADH_DES_192_CBC_SHA "ADH-DES-CBC3-SHA" - -# define SSL3_SSL_SESSION_ID_LENGTH 32 -# define SSL3_MAX_SSL_SESSION_ID_LENGTH 32 - -# define SSL3_MASTER_SECRET_SIZE 48 -# define SSL3_RANDOM_SIZE 32 -# define SSL3_SESSION_ID_SIZE 32 -# define SSL3_RT_HEADER_LENGTH 5 - -# define SSL3_HM_HEADER_LENGTH 4 - -# ifndef SSL3_ALIGN_PAYLOAD - /* - * Some will argue that this increases memory footprint, but it's not - * actually true. Point is that malloc has to return at least 64-bit aligned - * pointers, meaning that allocating 5 bytes wastes 3 bytes in either case. - * Suggested pre-gaping simply moves these wasted bytes from the end of - * allocated region to its front, but makes data payload aligned, which - * improves performance:-) - */ -# define SSL3_ALIGN_PAYLOAD 8 -# else -# if (SSL3_ALIGN_PAYLOAD&(SSL3_ALIGN_PAYLOAD-1))!=0 -# error "insane SSL3_ALIGN_PAYLOAD" -# undef SSL3_ALIGN_PAYLOAD -# endif -# endif - -/* - * This is the maximum MAC (digest) size used by the SSL library. Currently - * maximum of 20 is used by SHA1, but we reserve for future extension for - * 512-bit hashes. - */ - -# define SSL3_RT_MAX_MD_SIZE 64 - -/* - * Maximum block size used in all ciphersuites. Currently 16 for AES. - */ - -# define SSL_RT_MAX_CIPHER_BLOCK_SIZE 16 - -# define SSL3_RT_MAX_EXTRA (16384) - -/* Maximum plaintext length: defined by SSL/TLS standards */ -# define SSL3_RT_MAX_PLAIN_LENGTH 16384 -/* Maximum compression overhead: defined by SSL/TLS standards */ -# define SSL3_RT_MAX_COMPRESSED_OVERHEAD 1024 - -/* - * The standards give a maximum encryption overhead of 1024 bytes. In - * practice the value is lower than this. The overhead is the maximum number - * of padding bytes (256) plus the mac size. - */ -# define SSL3_RT_MAX_ENCRYPTED_OVERHEAD (256 + SSL3_RT_MAX_MD_SIZE) -# define SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD 256 - -/* - * OpenSSL currently only uses a padding length of at most one block so the - * send overhead is smaller. - */ - -# define SSL3_RT_SEND_MAX_ENCRYPTED_OVERHEAD \ - (SSL_RT_MAX_CIPHER_BLOCK_SIZE + SSL3_RT_MAX_MD_SIZE) - -/* If compression isn't used don't include the compression overhead */ - -# ifdef OPENSSL_NO_COMP -# define SSL3_RT_MAX_COMPRESSED_LENGTH SSL3_RT_MAX_PLAIN_LENGTH -# else -# define SSL3_RT_MAX_COMPRESSED_LENGTH \ - (SSL3_RT_MAX_PLAIN_LENGTH+SSL3_RT_MAX_COMPRESSED_OVERHEAD) -# endif -# define SSL3_RT_MAX_ENCRYPTED_LENGTH \ - (SSL3_RT_MAX_ENCRYPTED_OVERHEAD+SSL3_RT_MAX_COMPRESSED_LENGTH) -# define SSL3_RT_MAX_TLS13_ENCRYPTED_LENGTH \ - (SSL3_RT_MAX_PLAIN_LENGTH + SSL3_RT_MAX_TLS13_ENCRYPTED_OVERHEAD) -# define SSL3_RT_MAX_PACKET_SIZE \ - (SSL3_RT_MAX_ENCRYPTED_LENGTH+SSL3_RT_HEADER_LENGTH) - -# define SSL3_MD_CLIENT_FINISHED_CONST "\x43\x4C\x4E\x54" -# define SSL3_MD_SERVER_FINISHED_CONST "\x53\x52\x56\x52" - -/* SSL3_VERSION is defined in prov_ssl.h */ -# define SSL3_VERSION_MAJOR 0x03 -# define SSL3_VERSION_MINOR 0x00 - -# define SSL3_RT_CHANGE_CIPHER_SPEC 20 -# define SSL3_RT_ALERT 21 -# define SSL3_RT_HANDSHAKE 22 -# define SSL3_RT_APPLICATION_DATA 23 - -/* Pseudo content types to indicate additional parameters */ -# define TLS1_RT_CRYPTO 0x1000 -# define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1) -# define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2) -# define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3) -# define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4) - -# define TLS1_RT_CRYPTO_READ 0x0000 -# define TLS1_RT_CRYPTO_WRITE 0x0100 -# define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5) -# define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6) -# define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7) -# define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8) - -/* Pseudo content types for SSL/TLS header info */ -# define SSL3_RT_HEADER 0x100 -# define SSL3_RT_INNER_CONTENT_TYPE 0x101 - -/* Pseudo content types for QUIC */ -# define SSL3_RT_QUIC_DATAGRAM 0x200 -# define SSL3_RT_QUIC_PACKET 0x201 -# define SSL3_RT_QUIC_FRAME_FULL 0x202 -# define SSL3_RT_QUIC_FRAME_HEADER 0x203 -# define SSL3_RT_QUIC_FRAME_PADDING 0x204 - -# define SSL3_AL_WARNING 1 -# define SSL3_AL_FATAL 2 - -# define SSL3_AD_CLOSE_NOTIFY 0 -# define SSL3_AD_UNEXPECTED_MESSAGE 10/* fatal */ -# define SSL3_AD_BAD_RECORD_MAC 20/* fatal */ -# define SSL3_AD_DECOMPRESSION_FAILURE 30/* fatal */ -# define SSL3_AD_HANDSHAKE_FAILURE 40/* fatal */ -# define SSL3_AD_NO_CERTIFICATE 41 -# define SSL3_AD_BAD_CERTIFICATE 42 -# define SSL3_AD_UNSUPPORTED_CERTIFICATE 43 -# define SSL3_AD_CERTIFICATE_REVOKED 44 -# define SSL3_AD_CERTIFICATE_EXPIRED 45 -# define SSL3_AD_CERTIFICATE_UNKNOWN 46 -# define SSL3_AD_ILLEGAL_PARAMETER 47/* fatal */ - -# define TLS1_HB_REQUEST 1 -# define TLS1_HB_RESPONSE 2 - - -# define SSL3_CT_RSA_SIGN 1 -# define SSL3_CT_DSS_SIGN 2 -# define SSL3_CT_RSA_FIXED_DH 3 -# define SSL3_CT_DSS_FIXED_DH 4 -# define SSL3_CT_RSA_EPHEMERAL_DH 5 -# define SSL3_CT_DSS_EPHEMERAL_DH 6 -# define SSL3_CT_FORTEZZA_DMS 20 -/* - * 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 12 - -# if defined(TLS_CT_NUMBER) -# if TLS_CT_NUMBER != SSL3_CT_NUMBER -# error "SSL/TLS CT_NUMBER values do not match" -# endif -# endif - -/* No longer used as of OpenSSL 1.1.1 */ -# define SSL3_FLAGS_NO_RENEGOTIATE_CIPHERS 0x0001 - -/* Removed from OpenSSL 1.1.0 */ -# define TLS1_FLAGS_TLS_PADDING_BUG 0x0 - -# define TLS1_FLAGS_SKIP_CERT_VERIFY 0x0010 - -/* Set if we encrypt then mac instead of usual mac then encrypt */ -# define TLS1_FLAGS_ENCRYPT_THEN_MAC_READ 0x0100 -# define TLS1_FLAGS_ENCRYPT_THEN_MAC TLS1_FLAGS_ENCRYPT_THEN_MAC_READ - -/* Set if extended master secret extension received from peer */ -# define TLS1_FLAGS_RECEIVED_EXTMS 0x0200 - -# define TLS1_FLAGS_ENCRYPT_THEN_MAC_WRITE 0x0400 - -# define TLS1_FLAGS_STATELESS 0x0800 - -/* Set if extended master secret extension required on renegotiation */ -# define TLS1_FLAGS_REQUIRED_EXTMS 0x1000 - -/* 0x2000 is reserved for TLS1_FLAGS_QUIC (internal) */ - -# define SSL3_MT_HELLO_REQUEST 0 -# define SSL3_MT_CLIENT_HELLO 1 -# define SSL3_MT_SERVER_HELLO 2 -# define SSL3_MT_NEWSESSION_TICKET 4 -# define SSL3_MT_END_OF_EARLY_DATA 5 -# define SSL3_MT_ENCRYPTED_EXTENSIONS 8 -# define SSL3_MT_CERTIFICATE 11 -# define SSL3_MT_SERVER_KEY_EXCHANGE 12 -# define SSL3_MT_CERTIFICATE_REQUEST 13 -# define SSL3_MT_SERVER_DONE 14 -# define SSL3_MT_CERTIFICATE_VERIFY 15 -# define SSL3_MT_CLIENT_KEY_EXCHANGE 16 -# define SSL3_MT_FINISHED 20 -# define SSL3_MT_CERTIFICATE_URL 21 -# define SSL3_MT_CERTIFICATE_STATUS 22 -# define SSL3_MT_SUPPLEMENTAL_DATA 23 -# define SSL3_MT_KEY_UPDATE 24 -# define SSL3_MT_COMPRESSED_CERTIFICATE 25 -# ifndef OPENSSL_NO_NEXTPROTONEG -# define SSL3_MT_NEXT_PROTO 67 -# endif -# define SSL3_MT_MESSAGE_HASH 254 -# define DTLS1_MT_HELLO_VERIFY_REQUEST 3 - -/* Dummy message type for handling CCS like a normal handshake message */ -# define SSL3_MT_CHANGE_CIPHER_SPEC 0x0101 - -# define SSL3_MT_CCS 1 - -/* These are used when changing over to a new cipher */ -# define SSL3_CC_READ 0x001 -# define SSL3_CC_WRITE 0x002 -# define SSL3_CC_CLIENT 0x010 -# define SSL3_CC_SERVER 0x020 -# define SSL3_CC_EARLY 0x040 -# define SSL3_CC_HANDSHAKE 0x080 -# define SSL3_CC_APPLICATION 0x100 -# define SSL3_CHANGE_CIPHER_CLIENT_WRITE (SSL3_CC_CLIENT|SSL3_CC_WRITE) -# define SSL3_CHANGE_CIPHER_SERVER_READ (SSL3_CC_SERVER|SSL3_CC_READ) -# define SSL3_CHANGE_CIPHER_CLIENT_READ (SSL3_CC_CLIENT|SSL3_CC_READ) -# define SSL3_CHANGE_CIPHER_SERVER_WRITE (SSL3_CC_SERVER|SSL3_CC_WRITE) - -#ifdef __cplusplus -} -#endif -#endif 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 deleted file mode 100644 index e1eb9a56..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr.h +++ /dev/null @@ -1,368 +0,0 @@ -/* - * 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_SSLERR_H -# define OPENSSL_SSLERR_H -# pragma once - -# include -# include -# include - - - -/* - * SSL reason codes. - */ -# 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_2_NEEDED_IN_SUITEB_MODE 158 -# define SSL_R_BAD_CERTIFICATE 348 -# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103 -# define SSL_R_BAD_CIPHER 186 -# define SSL_R_BAD_COMPRESSION_ALGORITHM 326 -# define SSL_R_BAD_DATA 390 -# define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106 -# define SSL_R_BAD_DECOMPRESSION 107 -# define SSL_R_BAD_DH_VALUE 102 -# define SSL_R_BAD_DIGEST_LENGTH 111 -# define SSL_R_BAD_EARLY_DATA 233 -# define SSL_R_BAD_ECC_CERT 304 -# define SSL_R_BAD_ECPOINT 306 -# define SSL_R_BAD_EXTENSION 110 -# define SSL_R_BAD_HANDSHAKE_LENGTH 332 -# define SSL_R_BAD_HANDSHAKE_STATE 236 -# define SSL_R_BAD_HELLO_REQUEST 105 -# define SSL_R_BAD_HRR_VERSION 263 -# define SSL_R_BAD_KEY_SHARE 108 -# define SSL_R_BAD_KEY_UPDATE 122 -# define SSL_R_BAD_LEGACY_VERSION 292 -# define SSL_R_BAD_LENGTH 271 -# define SSL_R_BAD_PACKET 240 -# define SSL_R_BAD_PACKET_LENGTH 115 -# define SSL_R_BAD_PROTOCOL_VERSION_NUMBER 116 -# define SSL_R_BAD_PSK 219 -# define SSL_R_BAD_PSK_IDENTITY 114 -# define SSL_R_BAD_RECORD_TYPE 443 -# define SSL_R_BAD_RSA_ENCRYPT 119 -# define SSL_R_BAD_SIGNATURE 123 -# define SSL_R_BAD_SRP_A_LENGTH 347 -# define SSL_R_BAD_SRP_PARAMETERS 371 -# define SSL_R_BAD_SRTP_MKI_VALUE 352 -# define SSL_R_BAD_SRTP_PROTECTION_PROFILE_LIST 353 -# define SSL_R_BAD_SSL_FILETYPE 124 -# define SSL_R_BAD_VALUE 384 -# define SSL_R_BAD_WRITE_RETRY 127 -# define SSL_R_BINDER_DOES_NOT_VERIFY 253 -# define SSL_R_BIO_NOT_SET 128 -# define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129 -# 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 -# define SSL_R_CCS_RECEIVED_EARLY 133 -# define SSL_R_CERTIFICATE_VERIFY_FAILED 134 -# define SSL_R_CERT_CB_ERROR 377 -# 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_CLIENTHELLO_TLSEXT 226 -# define SSL_R_COMPRESSED_LENGTH_TOO_LONG 140 -# define SSL_R_COMPRESSION_DISABLED 343 -# define SSL_R_COMPRESSION_FAILURE 141 -# define SSL_R_COMPRESSION_ID_NOT_WITHIN_PRIVATE_RANGE 307 -# define SSL_R_COMPRESSION_LIBRARY_ERROR 142 -# define SSL_R_CONNECTION_TYPE_NOT_SET 144 -# define SSL_R_CONN_USE_ONLY 356 -# 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 -# define SSL_R_DANE_NOT_ENABLED 175 -# define SSL_R_DANE_TLSA_BAD_CERTIFICATE 180 -# define SSL_R_DANE_TLSA_BAD_CERTIFICATE_USAGE 184 -# define SSL_R_DANE_TLSA_BAD_DATA_LENGTH 189 -# define SSL_R_DANE_TLSA_BAD_DIGEST_LENGTH 192 -# define SSL_R_DANE_TLSA_BAD_MATCHING_TYPE 200 -# define SSL_R_DANE_TLSA_BAD_PUBLIC_KEY 201 -# define SSL_R_DANE_TLSA_BAD_SELECTOR 202 -# define SSL_R_DANE_TLSA_NULL_DATA 203 -# define SSL_R_DATA_BETWEEN_CCS_AND_FINISHED 145 -# define SSL_R_DATA_LENGTH_TOO_LONG 146 -# define SSL_R_DECRYPTION_FAILED 147 -# define SSL_R_DECRYPTION_FAILED_OR_BAD_RECORD_MAC 281 -# define SSL_R_DH_KEY_TOO_SMALL 394 -# define SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG 148 -# define SSL_R_DIGEST_CHECK_FAILED 149 -# define SSL_R_DTLS_MESSAGE_TOO_BIG 334 -# define SSL_R_DUPLICATE_COMPRESSION_ID 309 -# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318 -# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374 -# define SSL_R_EE_KEY_TOO_SMALL 399 -# define SSL_R_EMPTY_RAW_PUBLIC_KEY 349 -# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354 -# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150 -# define SSL_R_ERROR_IN_RECEIVED_CIPHER_LIST 151 -# define SSL_R_ERROR_SETTING_TLSA_BASE_DOMAIN 204 -# define SSL_R_EXCEEDS_MAX_FRAGMENT_SIZE 194 -# define SSL_R_EXCESSIVE_MESSAGE_SIZE 152 -# define SSL_R_EXTENSION_NOT_RECEIVED 279 -# define SSL_R_EXTRA_DATA_IN_MESSAGE 153 -# define SSL_R_EXT_LENGTH_MISMATCH 163 -# define SSL_R_FAILED_TO_GET_PARAMETER 316 -# define SSL_R_FAILED_TO_INIT_ASYNC 405 -# define SSL_R_FRAGMENTED_CLIENT_HELLO 401 -# define SSL_R_GOT_A_FIN_BEFORE_A_CCS 154 -# define SSL_R_HTTPS_PROXY_REQUEST 155 -# define SSL_R_HTTP_REQUEST 156 -# define SSL_R_ILLEGAL_POINT_COMPRESSION 162 -# define SSL_R_ILLEGAL_SUITEB_DIGEST 380 -# define SSL_R_INAPPROPRIATE_FALLBACK 373 -# define SSL_R_INCONSISTENT_COMPRESSION 340 -# define SSL_R_INCONSISTENT_EARLY_DATA_ALPN 222 -# define SSL_R_INCONSISTENT_EARLY_DATA_SNI 231 -# define SSL_R_INCONSISTENT_EXTMS 104 -# define SSL_R_INSUFFICIENT_SECURITY 241 -# define SSL_R_INVALID_ALERT 205 -# define SSL_R_INVALID_CCS_MESSAGE 260 -# define SSL_R_INVALID_CERTIFICATE_OR_ALG 238 -# define SSL_R_INVALID_COMMAND 280 -# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341 -# define SSL_R_INVALID_CONFIG 283 -# define SSL_R_INVALID_CONFIGURATION_NAME 113 -# define SSL_R_INVALID_CONTEXT 282 -# define SSL_R_INVALID_CT_VALIDATION_TYPE 212 -# define SSL_R_INVALID_KEY_UPDATE_TYPE 120 -# define SSL_R_INVALID_MAX_EARLY_DATA 174 -# define SSL_R_INVALID_NULL_CMD_NAME 385 -# define SSL_R_INVALID_RAW_PUBLIC_KEY 350 -# define SSL_R_INVALID_RECORD 317 -# define SSL_R_INVALID_SEQUENCE_NUMBER 402 -# define SSL_R_INVALID_SERVERINFO_DATA 388 -# define SSL_R_INVALID_SESSION_ID 999 -# 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 -# define SSL_R_LIBRARY_BUG 274 -# define SSL_R_LIBRARY_HAS_NO_CIPHERS 161 -# define SSL_R_MAXIMUM_ENCRYPTED_PKTS_REACHED 395 -# define SSL_R_MISSING_DSA_SIGNING_CERT 165 -# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381 -# define SSL_R_MISSING_FATAL 256 -# define SSL_R_MISSING_PARAMETERS 290 -# define SSL_R_MISSING_PSK_KEX_MODES_EXTENSION 310 -# define SSL_R_MISSING_RSA_CERTIFICATE 168 -# define SSL_R_MISSING_RSA_ENCRYPTING_CERT 169 -# define SSL_R_MISSING_RSA_SIGNING_CERT 170 -# define SSL_R_MISSING_SIGALGS_EXTENSION 112 -# define SSL_R_MISSING_SIGNING_CERT 221 -# define SSL_R_MISSING_SRP_PARAM 358 -# define SSL_R_MISSING_SUPPORTED_GROUPS_EXTENSION 209 -# define SSL_R_MISSING_TMP_DH_KEY 171 -# define SSL_R_MISSING_TMP_ECDH_KEY 311 -# define SSL_R_MIXED_HANDSHAKE_AND_NON_HANDSHAKE_DATA 293 -# define SSL_R_NOT_ON_RECORD_BOUNDARY 182 -# define SSL_R_NOT_REPLACING_CERTIFICATE 289 -# define SSL_R_NOT_SERVER 284 -# define SSL_R_NO_APPLICATION_PROTOCOL 235 -# define SSL_R_NO_CERTIFICATES_RETURNED 176 -# define SSL_R_NO_CERTIFICATE_ASSIGNED 177 -# define SSL_R_NO_CERTIFICATE_SET 179 -# define SSL_R_NO_CHANGE_FOLLOWING_HRR 214 -# define SSL_R_NO_CIPHERS_AVAILABLE 181 -# define SSL_R_NO_CIPHERS_SPECIFIED 183 -# define SSL_R_NO_CIPHER_MATCH 185 -# define SSL_R_NO_CLIENT_CERT_METHOD 331 -# define SSL_R_NO_COMPRESSION_SPECIFIED 187 -# define SSL_R_NO_COOKIE_CALLBACK_SET 287 -# define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330 -# define SSL_R_NO_METHOD_SPECIFIED 188 -# define SSL_R_NO_PEM_EXTENSIONS 389 -# define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190 -# define SSL_R_NO_PROTOCOLS_AVAILABLE 191 -# define SSL_R_NO_RENEGOTIATION 339 -# define SSL_R_NO_REQUIRED_DIGEST 324 -# define SSL_R_NO_SHARED_CIPHER 193 -# 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_STREAM 355 -# 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_RECORD_LAYER 322 -# 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 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 -# define SSL_R_PACKET_LENGTH_TOO_LONG 198 -# define SSL_R_PARSE_TLSEXT 227 -# define SSL_R_PATH_TOO_LONG 270 -# define SSL_R_PEER_DID_NOT_RETURN_A_CERTIFICATE 199 -# define SSL_R_PEM_NAME_BAD_PREFIX 391 -# define SSL_R_PEM_NAME_TOO_SHORT 392 -# define SSL_R_PIPELINE_FAILURE 406 -# define SSL_R_POST_HANDSHAKE_AUTH_ENCODING_ERR 278 -# define SSL_R_PRIVATE_KEY_MISMATCH 288 -# define SSL_R_PROTOCOL_IS_SHUTDOWN 207 -# define SSL_R_PSK_IDENTITY_NOT_FOUND 223 -# define SSL_R_PSK_NO_CLIENT_CB 224 -# define SSL_R_PSK_NO_SERVER_CB 225 -# define SSL_R_QUIC_HANDSHAKE_LAYER_ERROR 393 -# define SSL_R_QUIC_NETWORK_ERROR 387 -# define SSL_R_QUIC_PROTOCOL_ERROR 382 -# define SSL_R_READ_BIO_NOT_SET 211 -# define SSL_R_READ_TIMEOUT_EXPIRED 312 -# define SSL_R_RECORDS_NOT_RELEASED 321 -# define SSL_R_RECORD_LAYER_FAILURE 313 -# define SSL_R_RECORD_LENGTH_MISMATCH 213 -# define SSL_R_RECORD_TOO_SMALL 298 -# define SSL_R_REMOTE_PEER_ADDRESS_NOT_SET 346 -# define SSL_R_RENEGOTIATE_EXT_TOO_LONG 335 -# define SSL_R_RENEGOTIATION_ENCODING_ERR 336 -# define SSL_R_RENEGOTIATION_MISMATCH 337 -# define SSL_R_REQUEST_PENDING 285 -# define SSL_R_REQUEST_SENT 286 -# define SSL_R_REQUIRED_CIPHER_MISSING 215 -# define SSL_R_REQUIRED_COMPRESSION_ALGORITHM_MISSING 342 -# define SSL_R_SCSV_RECEIVED_WHEN_RENEGOTIATING 345 -# define SSL_R_SCT_VERIFICATION_FAILED 208 -# define SSL_R_SEQUENCE_CTR_WRAPPED 327 -# define SSL_R_SERVERHELLO_TLSEXT 275 -# define SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED 277 -# define SSL_R_SHUTDOWN_WHILE_IN_INIT 407 -# define SSL_R_SIGNATURE_ALGORITHMS_ERROR 360 -# define SSL_R_SIGNATURE_FOR_NON_SIGNING_CERTIFICATE 220 -# define SSL_R_SRP_A_CALC 361 -# define SSL_R_SRTP_COULD_NOT_ALLOCATE_PROFILES 362 -# define SSL_R_SRTP_PROTECTION_PROFILE_LIST_TOO_LONG 363 -# define SSL_R_SRTP_UNKNOWN_PROTECTION_PROFILE 364 -# define SSL_R_SSL3_EXT_INVALID_MAX_FRAGMENT_LENGTH 232 -# define SSL_R_SSL3_EXT_INVALID_SERVERNAME 319 -# define SSL_R_SSL3_EXT_INVALID_SERVERNAME_TYPE 320 -# define SSL_R_SSL3_SESSION_ID_TOO_LONG 300 -# define SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042 -# define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044 -# define SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046 -# define SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030 -# define SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040 -# define SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047 -# define SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041 -# define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010 -# define SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043 -# define SSL_R_SSL_COMMAND_SECTION_EMPTY 117 -# define SSL_R_SSL_COMMAND_SECTION_NOT_FOUND 125 -# define SSL_R_SSL_CTX_HAS_NO_DEFAULT_SSL_VERSION 228 -# define SSL_R_SSL_HANDSHAKE_FAILURE 229 -# define SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS 230 -# define SSL_R_SSL_NEGATIVE_LENGTH 372 -# define SSL_R_SSL_SECTION_EMPTY 126 -# define SSL_R_SSL_SECTION_NOT_FOUND 136 -# define SSL_R_SSL_SESSION_ID_CALLBACK_FAILED 301 -# define SSL_R_SSL_SESSION_ID_CONFLICT 302 -# define SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG 273 -# define SSL_R_SSL_SESSION_ID_HAS_BAD_LENGTH 303 -# define SSL_R_SSL_SESSION_ID_TOO_LONG 408 -# define SSL_R_SSL_SESSION_VERSION_MISMATCH 210 -# define SSL_R_STILL_IN_INIT 121 -# define SSL_R_STREAM_COUNT_LIMITED 411 -# define SSL_R_STREAM_FINISHED 365 -# define SSL_R_STREAM_RECV_ONLY 366 -# define SSL_R_STREAM_RESET 375 -# define SSL_R_STREAM_SEND_ONLY 379 -# define SSL_R_TLSV13_ALERT_CERTIFICATE_REQUIRED 1116 -# define SSL_R_TLSV13_ALERT_MISSING_EXTENSION 1109 -# define SSL_R_TLSV1_ALERT_ACCESS_DENIED 1049 -# define SSL_R_TLSV1_ALERT_DECODE_ERROR 1050 -# define SSL_R_TLSV1_ALERT_DECRYPTION_FAILED 1021 -# define SSL_R_TLSV1_ALERT_DECRYPT_ERROR 1051 -# define SSL_R_TLSV1_ALERT_EXPORT_RESTRICTION 1060 -# define SSL_R_TLSV1_ALERT_INAPPROPRIATE_FALLBACK 1086 -# define SSL_R_TLSV1_ALERT_INSUFFICIENT_SECURITY 1071 -# define SSL_R_TLSV1_ALERT_INTERNAL_ERROR 1080 -# define SSL_R_TLSV1_ALERT_NO_RENEGOTIATION 1100 -# define SSL_R_TLSV1_ALERT_PROTOCOL_VERSION 1070 -# define SSL_R_TLSV1_ALERT_RECORD_OVERFLOW 1022 -# define SSL_R_TLSV1_ALERT_UNKNOWN_CA 1048 -# define SSL_R_TLSV1_ALERT_USER_CANCELLED 1090 -# define SSL_R_TLSV1_BAD_CERTIFICATE_HASH_VALUE 1114 -# define SSL_R_TLSV1_BAD_CERTIFICATE_STATUS_RESPONSE 1113 -# 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_ILLEGAL_EXPORTER_LABEL 367 -# define SSL_R_TLS_INVALID_ECPOINTFORMAT_LIST 157 -# define SSL_R_TOO_MANY_KEY_UPDATES 132 -# define SSL_R_TOO_MANY_WARN_ALERTS 409 -# define SSL_R_TOO_MUCH_EARLY_DATA 164 -# define SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS 314 -# define SSL_R_UNABLE_TO_FIND_PUBLIC_KEY_PARAMETERS 239 -# define SSL_R_UNABLE_TO_LOAD_SSL3_MD5_ROUTINES 242 -# 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 -# define SSL_R_UNKNOWN_ALERT_TYPE 246 -# define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247 -# define SSL_R_UNKNOWN_CIPHER_RETURNED 248 -# define SSL_R_UNKNOWN_CIPHER_TYPE 249 -# define SSL_R_UNKNOWN_CMD_NAME 386 -# define SSL_R_UNKNOWN_COMMAND 139 -# define SSL_R_UNKNOWN_DIGEST 368 -# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250 -# define SSL_R_UNKNOWN_MANDATORY_PARAMETER 323 -# define SSL_R_UNKNOWN_PKEY_TYPE 251 -# define SSL_R_UNKNOWN_PROTOCOL 252 -# define SSL_R_UNKNOWN_SSL_VERSION 254 -# define SSL_R_UNKNOWN_STATE 255 -# define SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED 338 -# define SSL_R_UNSOLICITED_EXTENSION 217 -# define SSL_R_UNSUPPORTED_COMPRESSION_ALGORITHM 257 -# define SSL_R_UNSUPPORTED_ELLIPTIC_CURVE 315 -# define SSL_R_UNSUPPORTED_PROTOCOL 258 -# define SSL_R_UNSUPPORTED_SSL_VERSION 259 -# define SSL_R_UNSUPPORTED_STATUS_TYPE 329 -# define SSL_R_USE_SRTP_NOT_NEGOTIATED 369 -# define SSL_R_VERSION_TOO_HIGH 166 -# define SSL_R_VERSION_TOO_LOW 396 -# define SSL_R_WRONG_CERTIFICATE_TYPE 383 -# define SSL_R_WRONG_CIPHER_RETURNED 261 -# define SSL_R_WRONG_CURVE 378 -# define SSL_R_WRONG_RPK_TYPE 351 -# define SSL_R_WRONG_SIGNATURE_LENGTH 264 -# define SSL_R_WRONG_SIGNATURE_SIZE 265 -# define SSL_R_WRONG_SIGNATURE_TYPE 370 -# define SSL_R_WRONG_SSL_VERSION 266 -# define SSL_R_WRONG_VERSION_NUMBER 267 -# define SSL_R_X509_LIB 268 -# define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269 - -#endif 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 deleted file mode 100644 index ccf6d3b3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr_legacy.h +++ /dev/null @@ -1,468 +0,0 @@ -/* - * 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 deleted file mode 100644 index f0c5c547..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/stack.h +++ /dev/null @@ -1,90 +0,0 @@ -/* - * 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_STACK_H -# define OPENSSL_STACK_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_STACK_H -# endif - -#ifdef __cplusplus -extern "C" { -#endif - -typedef struct stack_st OPENSSL_STACK; /* Use STACK_OF(...) instead */ - -typedef int (*OPENSSL_sk_compfunc)(const void *, const void *); -typedef void (*OPENSSL_sk_freefunc)(void *); -typedef void *(*OPENSSL_sk_copyfunc)(const void *); - -int OPENSSL_sk_num(const OPENSSL_STACK *); -void *OPENSSL_sk_value(const OPENSSL_STACK *, int); - -void *OPENSSL_sk_set(OPENSSL_STACK *st, int i, const void *data); - -OPENSSL_STACK *OPENSSL_sk_new(OPENSSL_sk_compfunc cmp); -OPENSSL_STACK *OPENSSL_sk_new_null(void); -OPENSSL_STACK *OPENSSL_sk_new_reserve(OPENSSL_sk_compfunc c, int n); -int OPENSSL_sk_reserve(OPENSSL_STACK *st, int n); -void OPENSSL_sk_free(OPENSSL_STACK *); -void OPENSSL_sk_pop_free(OPENSSL_STACK *st, void (*func) (void *)); -OPENSSL_STACK *OPENSSL_sk_deep_copy(const OPENSSL_STACK *, - OPENSSL_sk_copyfunc c, - OPENSSL_sk_freefunc f); -int OPENSSL_sk_insert(OPENSSL_STACK *sk, const void *data, int where); -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); -void *OPENSSL_sk_pop(OPENSSL_STACK *st); -void OPENSSL_sk_zero(OPENSSL_STACK *st); -OPENSSL_sk_compfunc OPENSSL_sk_set_cmp_func(OPENSSL_STACK *sk, - OPENSSL_sk_compfunc cmp); -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); - -# ifndef OPENSSL_NO_DEPRECATED_1_1_0 -# define _STACK OPENSSL_STACK -# define sk_num OPENSSL_sk_num -# define sk_value OPENSSL_sk_value -# define sk_set OPENSSL_sk_set -# define sk_new OPENSSL_sk_new -# define sk_new_null OPENSSL_sk_new_null -# define sk_free OPENSSL_sk_free -# define sk_pop_free OPENSSL_sk_pop_free -# define sk_deep_copy OPENSSL_sk_deep_copy -# define sk_insert OPENSSL_sk_insert -# define sk_delete OPENSSL_sk_delete -# define sk_delete_ptr OPENSSL_sk_delete_ptr -# define sk_find OPENSSL_sk_find -# define sk_find_ex OPENSSL_sk_find_ex -# define sk_push OPENSSL_sk_push -# define sk_unshift OPENSSL_sk_unshift -# define sk_shift OPENSSL_sk_shift -# define sk_pop OPENSSL_sk_pop -# define sk_zero OPENSSL_sk_zero -# define sk_set_cmp_func OPENSSL_sk_set_cmp_func -# define sk_dup OPENSSL_sk_dup -# define sk_sort OPENSSL_sk_sort -# define sk_is_sorted OPENSSL_sk_is_sorted -# endif - -#ifdef __cplusplus -} -#endif - -#endif 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 deleted file mode 100644 index e6ea3cf8..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/store.h +++ /dev/null @@ -1,377 +0,0 @@ -/* - * Copyright 2016-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_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 - -# ifdef __cplusplus -extern "C" { -# endif - -/*- - * The main OSSL_STORE functions. - * ------------------------------ - * - * These allow applications to open a channel to a resource with supported - * data (keys, certs, crls, ...), read the data a piece at a time and decide - * what to do with it, and finally close. - */ - -typedef struct ossl_store_ctx_st OSSL_STORE_CTX; - -/* - * Typedef for the OSSL_STORE_INFO post processing callback. This can be used - * to massage the given OSSL_STORE_INFO, or to drop it entirely (by returning - * NULL). - */ -typedef OSSL_STORE_INFO *(*OSSL_STORE_post_process_info_fn)(OSSL_STORE_INFO *, - void *); - -/* - * Open a channel given a URI. 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. - */ -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 - * done, and depends on the underlying loader (use OSSL_STORE_get0_scheme to - * determine which loader is used), except for common commands (see below). - * Each command takes different arguments. - */ -# 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. - */ -/* int on = 0 or 1; STORE_ctrl(ctx, STORE_C_USE_SECMEM, &on); */ -# define OSSL_STORE_C_USE_SECMEM 1 -/* 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. - * Returns a OSSL_STORE_INFO pointer, from which OpenSSL typed data can be - * extracted with OSSL_STORE_INFO_get0_PKEY(), OSSL_STORE_INFO_get0_CERT(), ... - * NULL is returned on error, which may include that the data found at the URI - * can't be figured out for certain or is ambiguous. - */ -OSSL_STORE_INFO *OSSL_STORE_load(OSSL_STORE_CTX *ctx); - -/* - * Deletes the object in the store by URI. - * Returns 1 on success, 0 otherwise. - */ -int OSSL_STORE_delete(const char *uri, OSSL_LIB_CTX *libctx, const char *propq, - const UI_METHOD *ui_method, void *ui_data, - const OSSL_PARAM params[]); - -/* - * Check if end of data (end of file) is reached - * Returns 1 on end, 0 otherwise. - */ -int OSSL_STORE_eof(OSSL_STORE_CTX *ctx); - -/* - * Check if an error occurred - * Returns 1 if it did, 0 otherwise. - */ -int OSSL_STORE_error(OSSL_STORE_CTX *ctx); - -/* - * Close the channel - * Returns 1 on success, 0 on error. - */ -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 - * --------------------------------------------------------------- - */ - -/* - * Types of data that can be ossl_stored in a OSSL_STORE_INFO. - * OSSL_STORE_INFO_NAME is typically found when getting a listing of - * available "files" / "tokens" / what have you. - */ -# define OSSL_STORE_INFO_NAME 1 /* char * */ -# define OSSL_STORE_INFO_PARAMS 2 /* EVP_PKEY * */ -# 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 - * support having in them, as well as a generic constructor. - * - * 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); - -/* - * 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); -X509 *OSSL_STORE_INFO_get1_CERT(const OSSL_STORE_INFO *info); -X509_CRL *OSSL_STORE_INFO_get0_CRL(const OSSL_STORE_INFO *info); -X509_CRL *OSSL_STORE_INFO_get1_CRL(const OSSL_STORE_INFO *info); - -const char *OSSL_STORE_INFO_type_string(int type); - -/* - * Free the OSSL_STORE_INFO - */ -void OSSL_STORE_INFO_free(OSSL_STORE_INFO *info); - - -/*- - * Functions to construct a search URI from a base URI and search criteria - * ----------------------------------------------------------------------- - */ - -/* OSSL_STORE search types */ -# define OSSL_STORE_SEARCH_BY_NAME 1 /* subject in certs, issuer in CRLs */ -# define OSSL_STORE_SEARCH_BY_ISSUER_SERIAL 2 -# define OSSL_STORE_SEARCH_BY_KEY_FINGERPRINT 3 -# define OSSL_STORE_SEARCH_BY_ALIAS 4 - -/* To check what search types the scheme handler supports */ -int OSSL_STORE_supports_search(OSSL_STORE_CTX *ctx, int search_type); - -/* Search term constructors */ -/* - * The input is considered to be owned by the caller, and must therefore - * remain present throughout the lifetime of the returned OSSL_STORE_SEARCH - */ -OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_name(X509_NAME *name); -OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_issuer_serial(X509_NAME *name, - const ASN1_INTEGER - *serial); -OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_key_fingerprint(const EVP_MD *digest, - const unsigned char - *bytes, size_t len); -OSSL_STORE_SEARCH *OSSL_STORE_SEARCH_by_alias(const char *alias); - -/* Search term destructor */ -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(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 - *criterion, size_t *length); -const char *OSSL_STORE_SEARCH_get0_string(const OSSL_STORE_SEARCH *criterion); -const EVP_MD *OSSL_STORE_SEARCH_get0_digest(const OSSL_STORE_SEARCH *criterion); - -/* - * Add search criterion and expected return type (which can be unspecified) - * 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, 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. - * ------------------------------------------------------- - * - * The loader receives all the main components of an URI except for the - * scheme. - */ - -# 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_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); -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); -OSSL_DEPRECATEDIN_3_0 -int OSSL_STORE_LOADER_set_expect(OSSL_STORE_LOADER *loader, - OSSL_STORE_expect_fn expect_function); -OSSL_DEPRECATEDIN_3_0 -int OSSL_STORE_LOADER_set_find(OSSL_STORE_LOADER *loader, - OSSL_STORE_find_fn find_function); -OSSL_DEPRECATEDIN_3_0 -int OSSL_STORE_LOADER_set_load(OSSL_STORE_LOADER *loader, - OSSL_STORE_load_fn load_function); -OSSL_DEPRECATEDIN_3_0 -int OSSL_STORE_LOADER_set_eof(OSSL_STORE_LOADER *loader, - OSSL_STORE_eof_fn eof_function); -OSSL_DEPRECATEDIN_3_0 -int OSSL_STORE_LOADER_set_error(OSSL_STORE_LOADER *loader, - OSSL_STORE_error_fn error_function); -OSSL_DEPRECATEDIN_3_0 -int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, - OSSL_STORE_close_fn close_function); -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 - * ------------------------------- - */ -# 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 -} -# endif -#endif 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 deleted file mode 100644 index 00529c88..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/storeerr.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * 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_STOREERR_H -# define OPENSSL_STOREERR_H -# pragma once - -# include -# include -# include - - - -/* - * OSSL_STORE reason codes. - */ -# define OSSL_STORE_R_AMBIGUOUS_CONTENT_TYPE 107 -# define OSSL_STORE_R_BAD_PASSWORD_READ 115 -# define OSSL_STORE_R_ERROR_VERIFYING_PKCS12_MAC 113 -# define OSSL_STORE_R_FINGERPRINT_SIZE_DOES_NOT_MATCH_DIGEST 121 -# define OSSL_STORE_R_INVALID_SCHEME 106 -# define OSSL_STORE_R_IS_NOT_A 112 -# define OSSL_STORE_R_LOADER_INCOMPLETE 116 -# 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_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 -# define OSSL_STORE_R_UI_PROCESS_INTERRUPTED_OR_CANCELLED 109 -# define OSSL_STORE_R_UNREGISTERED_SCHEME 105 -# define OSSL_STORE_R_UNSUPPORTED_CONTENT_TYPE 110 -# define OSSL_STORE_R_UNSUPPORTED_OPERATION 118 -# define OSSL_STORE_R_UNSUPPORTED_SEARCH_TYPE 120 -# define OSSL_STORE_R_URI_AUTHORITY_UNSUPPORTED 111 - -#endif 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 deleted file mode 100644 index 816f8f99..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/symhacks.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 OPENSSL_SYMHACKS_H -# define OPENSSL_SYMHACKS_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_SYMHACKS_H -# endif - -# include - -/* Case insensitive linking causes problems.... */ -# if defined(OPENSSL_SYS_VMS) -# undef ERR_load_CRYPTO_strings -# define ERR_load_CRYPTO_strings ERR_load_CRYPTOlib_strings -# undef OCSP_crlID_new -# define OCSP_crlID_new OCSP_crlID2_new - -# undef d2i_ECPARAMETERS -# define d2i_ECPARAMETERS d2i_UC_ECPARAMETERS -# undef i2d_ECPARAMETERS -# define i2d_ECPARAMETERS i2d_UC_ECPARAMETERS -# undef d2i_ECPKPARAMETERS -# define d2i_ECPKPARAMETERS d2i_UC_ECPKPARAMETERS -# undef i2d_ECPKPARAMETERS -# define i2d_ECPKPARAMETERS i2d_UC_ECPKPARAMETERS - -# endif - -#endif /* ! defined HEADER_VMS_IDHACKS_H */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/thread.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/thread.h deleted file mode 100644 index 3926ce54..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/thread.h +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Copyright 1995-2023 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 - */ - -#ifndef OPENSSL_THREAD_H -# define OPENSSL_THREAD_H - -# define OSSL_THREAD_SUPPORT_FLAG_THREAD_POOL (1U<<0) -# define OSSL_THREAD_SUPPORT_FLAG_DEFAULT_SPAWN (1U<<1) - -# include - -# ifdef __cplusplus -extern "C" { -# endif - -uint32_t OSSL_get_thread_support_flags(void); -int OSSL_set_max_threads(OSSL_LIB_CTX *ctx, uint64_t max_threads); -uint64_t OSSL_get_max_threads(OSSL_LIB_CTX *ctx); - -# ifdef __cplusplus -} -# endif - -#endif /* OPENSSL_THREAD_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 deleted file mode 100644 index 7e3d1a72..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tls1.h +++ /dev/null @@ -1,1210 +0,0 @@ -/* - * Copyright 1995-2023 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 - */ - -#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" { -#endif - -/* Default security level if not overridden at config time */ -# ifndef OPENSSL_TLS_SECURITY_LEVEL -# define OPENSSL_TLS_SECURITY_LEVEL 2 -# endif - -/* 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 - -# define TLS1_VERSION_MAJOR 0x03 -# define TLS1_VERSION_MINOR 0x01 - -# define TLS1_1_VERSION_MAJOR 0x03 -# define TLS1_1_VERSION_MINOR 0x02 - -# define TLS1_2_VERSION_MAJOR 0x03 -# define TLS1_2_VERSION_MINOR 0x03 - -# define TLS1_get_version(s) \ - ((SSL_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_version(s) : 0) - -# define TLS1_get_client_version(s) \ - ((SSL_client_version(s) >> 8) == TLS1_VERSION_MAJOR ? SSL_client_version(s) : 0) - -# define TLS1_AD_DECRYPTION_FAILED 21 -# define TLS1_AD_RECORD_OVERFLOW 22 -# define TLS1_AD_UNKNOWN_CA 48/* fatal */ -# define TLS1_AD_ACCESS_DENIED 49/* fatal */ -# define TLS1_AD_DECODE_ERROR 50/* fatal */ -# define TLS1_AD_DECRYPT_ERROR 51 -# define TLS1_AD_EXPORT_RESTRICTION 60/* fatal */ -# define TLS1_AD_PROTOCOL_VERSION 70/* fatal */ -# define TLS1_AD_INSUFFICIENT_SECURITY 71/* fatal */ -# define TLS1_AD_INTERNAL_ERROR 80/* fatal */ -# define TLS1_AD_INAPPROPRIATE_FALLBACK 86/* fatal */ -# define TLS1_AD_USER_CANCELLED 90 -# define TLS1_AD_NO_RENEGOTIATION 100 -/* TLSv1.3 alerts */ -# define TLS13_AD_MISSING_EXTENSION 109 /* fatal */ -# define TLS13_AD_CERTIFICATE_REQUIRED 116 /* fatal */ -/* codes 110-114 are from RFC3546 */ -# define TLS1_AD_UNSUPPORTED_EXTENSION 110 -# define TLS1_AD_CERTIFICATE_UNOBTAINABLE 111 -# define TLS1_AD_UNRECOGNIZED_NAME 112 -# define TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE 113 -# define TLS1_AD_BAD_CERTIFICATE_HASH_VALUE 114 -# define TLS1_AD_UNKNOWN_PSK_IDENTITY 115/* fatal */ -# define TLS1_AD_NO_APPLICATION_PROTOCOL 120 /* fatal */ - -/* ExtensionType values from RFC3546 / RFC4366 / RFC6066 */ -# define TLSEXT_TYPE_server_name 0 -# define TLSEXT_TYPE_max_fragment_length 1 -# define TLSEXT_TYPE_client_certificate_url 2 -# define TLSEXT_TYPE_trusted_ca_keys 3 -# define TLSEXT_TYPE_truncated_hmac 4 -# define TLSEXT_TYPE_status_request 5 -/* ExtensionType values from RFC4681 */ -# define TLSEXT_TYPE_user_mapping 6 -/* ExtensionType values from RFC5878 */ -# define TLSEXT_TYPE_client_authz 7 -# define TLSEXT_TYPE_server_authz 8 -/* ExtensionType values from RFC6091 */ -# define TLSEXT_TYPE_cert_type 9 - -/* ExtensionType values from RFC4492 */ -/* - * Prior to TLSv1.3 the supported_groups extension was known as - * elliptic_curves - */ -# define TLSEXT_TYPE_supported_groups 10 -# define TLSEXT_TYPE_elliptic_curves TLSEXT_TYPE_supported_groups -# define TLSEXT_TYPE_ec_point_formats 11 - - -/* ExtensionType value from RFC5054 */ -# define TLSEXT_TYPE_srp 12 - -/* ExtensionType values from RFC5246 */ -# define TLSEXT_TYPE_signature_algorithms 13 - -/* ExtensionType value from RFC5764 */ -# define TLSEXT_TYPE_use_srtp 14 - -/* ExtensionType value from RFC7301 */ -# define TLSEXT_TYPE_application_layer_protocol_negotiation 16 - -/* - * Extension type for Certificate Transparency - * https://tools.ietf.org/html/rfc6962#section-3.3.1 - */ -# define TLSEXT_TYPE_signed_certificate_timestamp 18 - -/* - * Extension type for Raw Public Keys - * https://tools.ietf.org/html/rfc7250 - * https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml - */ -# define TLSEXT_TYPE_client_cert_type 19 -# define TLSEXT_TYPE_server_cert_type 20 - -/* - * ExtensionType value for TLS padding extension. - * http://tools.ietf.org/html/draft-agl-tls-padding - */ -# define TLSEXT_TYPE_padding 21 - -/* ExtensionType value from RFC7366 */ -# define TLSEXT_TYPE_encrypt_then_mac 22 - -/* ExtensionType value from RFC7627 */ -# define TLSEXT_TYPE_extended_master_secret 23 - -/* ExtensionType value from RFC8879 */ -# define TLSEXT_TYPE_compress_certificate 27 - -/* ExtensionType value from RFC4507 */ -# define TLSEXT_TYPE_session_ticket 35 - -/* As defined for TLS1.3 */ -# define TLSEXT_TYPE_psk 41 -# define TLSEXT_TYPE_early_data 42 -# define TLSEXT_TYPE_supported_versions 43 -# define TLSEXT_TYPE_cookie 44 -# define TLSEXT_TYPE_psk_kex_modes 45 -# define TLSEXT_TYPE_certificate_authorities 47 -# define TLSEXT_TYPE_post_handshake_auth 49 -# define TLSEXT_TYPE_signature_algorithms_cert 50 -# define TLSEXT_TYPE_key_share 51 -# define TLSEXT_TYPE_quic_transport_parameters 57 - -/* Temporary extension type */ -# define TLSEXT_TYPE_renegotiate 0xff01 - -# ifndef OPENSSL_NO_NEXTPROTONEG -/* This is not an IANA defined extension number */ -# define TLSEXT_TYPE_next_proto_neg 13172 -# endif - -/* NameType value from RFC3546 */ -# define TLSEXT_NAMETYPE_host_name 0 -/* status request value from RFC3546 */ -# define TLSEXT_STATUSTYPE_ocsp 1 - -/* ECPointFormat values from RFC4492 */ -# define TLSEXT_ECPOINTFORMAT_first 0 -# define TLSEXT_ECPOINTFORMAT_uncompressed 0 -# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime 1 -# define TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2 2 -# define TLSEXT_ECPOINTFORMAT_last 2 - -/* Signature and hash algorithms from RFC5246 */ -# define TLSEXT_signature_anonymous 0 -# define TLSEXT_signature_rsa 1 -# define TLSEXT_signature_dsa 2 -# define TLSEXT_signature_ecdsa 3 -# define TLSEXT_signature_gostr34102001 237 -# define TLSEXT_signature_gostr34102012_256 238 -# define TLSEXT_signature_gostr34102012_512 239 - -/* Total number of different signature algorithms */ -# define TLSEXT_signature_num 7 - -# define TLSEXT_hash_none 0 -# define TLSEXT_hash_md5 1 -# define TLSEXT_hash_sha1 2 -# define TLSEXT_hash_sha224 3 -# define TLSEXT_hash_sha256 4 -# define TLSEXT_hash_sha384 5 -# define TLSEXT_hash_sha512 6 -# define TLSEXT_hash_gostr3411 237 -# define TLSEXT_hash_gostr34112012_256 238 -# define TLSEXT_hash_gostr34112012_512 239 - -/* Total number of different digest algorithms */ - -# define TLSEXT_hash_num 10 - -/* Possible compression values from RFC8879 */ -/* Not defined in RFC8879, but used internally for no-compression */ -# define TLSEXT_comp_cert_none 0 -# define TLSEXT_comp_cert_zlib 1 -# define TLSEXT_comp_cert_brotli 2 -# define TLSEXT_comp_cert_zstd 3 -/* one more than the number of defined values - used as size of 0-terminated array */ -# define TLSEXT_comp_cert_limit 4 - -/* Flag set for unrecognised algorithms */ -# define TLSEXT_nid_unknown 0x1000000 - -/* ECC curves */ - -# define TLSEXT_curve_P_256 23 -# define TLSEXT_curve_P_384 24 - -/* OpenSSL value to disable maximum fragment length extension */ -# define TLSEXT_max_fragment_length_DISABLED 0 -/* Allowed values for max fragment length extension */ -# define TLSEXT_max_fragment_length_512 1 -# define TLSEXT_max_fragment_length_1024 2 -# define TLSEXT_max_fragment_length_2048 3 -# define TLSEXT_max_fragment_length_4096 4 - -/* - * TLS Certificate Type (for RFC7250) - * https://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml#tls-extensiontype-values-3 - */ -# define TLSEXT_cert_type_x509 0 -# define TLSEXT_cert_type_pgp 1 /* recognized, but not supported */ -# define TLSEXT_cert_type_rpk 2 -# define TLSEXT_cert_type_1609dot2 3 /* recognized, but not supported */ - -int SSL_CTX_set_tlsext_max_fragment_length(SSL_CTX *ctx, uint8_t mode); -int SSL_set_tlsext_max_fragment_length(SSL *ssl, uint8_t mode); - -# define TLSEXT_MAXLEN_host_name 255 - -__owur const char *SSL_get_servername(const SSL *s, const int type); -__owur int SSL_get_servername_type(const SSL *s); -/* - * SSL_export_keying_material exports a value derived from the master secret, - * as specified in RFC 5705. It writes |olen| bytes to |out| given a label and - * optional context. (Since a zero length context is allowed, the |use_context| - * flag controls whether a context is included.) It returns 1 on success and - * 0 or -1 otherwise. - */ -__owur int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen, - const char *label, size_t llen, - const unsigned char *context, - size_t contextlen, int use_context); - -/* - * SSL_export_keying_material_early exports a value derived from the - * early exporter master secret, as specified in - * https://tools.ietf.org/html/draft-ietf-tls-tls13-23. It writes - * |olen| bytes to |out| given a label and optional context. It - * returns 1 on success and 0 otherwise. - */ -__owur int SSL_export_keying_material_early(SSL *s, unsigned char *out, - size_t olen, const char *label, - size_t llen, - const unsigned char *context, - size_t contextlen); - -int SSL_get_peer_signature_type_nid(const SSL *s, int *pnid); -int SSL_get_signature_type_nid(const SSL *s, int *pnid); - -int SSL_get_sigalgs(SSL *s, int idx, - int *psign, int *phash, int *psignandhash, - unsigned char *rsig, unsigned char *rhash); - -int SSL_get_shared_sigalgs(SSL *s, int idx, - int *psign, int *phash, int *psignandhash, - unsigned char *rsig, unsigned char *rhash); - -__owur int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain); - -# define SSL_set_tlsext_host_name(s,name) \ - SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,\ - (void *)name) - -# define SSL_set_tlsext_debug_callback(ssl, cb) \ - SSL_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_CB,\ - (void (*)(void))cb) - -# define SSL_set_tlsext_debug_arg(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_DEBUG_ARG,0,arg) - -# define SSL_get_tlsext_status_type(ssl) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) - -# define SSL_set_tlsext_status_type(ssl, type) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) - -# define SSL_get_tlsext_status_exts(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_EXTS,0,arg) - -# define SSL_set_tlsext_status_exts(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_EXTS,0,arg) - -# define SSL_get_tlsext_status_ids(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_IDS,0,arg) - -# define SSL_set_tlsext_status_ids(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_IDS,0,arg) - -# define SSL_get_tlsext_status_ocsp_resp(ssl, arg) \ - SSL_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_OCSP_RESP,0,arg) - -# define SSL_set_tlsext_status_ocsp_resp(ssl, arg, arglen) \ - SSL_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_OCSP_RESP,arglen,arg) - -# define SSL_CTX_set_tlsext_servername_callback(ctx, cb) \ - SSL_CTX_callback_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_CB,\ - (void (*)(void))cb) - -# define SSL_TLSEXT_ERR_OK 0 -# define SSL_TLSEXT_ERR_ALERT_WARNING 1 -# define SSL_TLSEXT_ERR_ALERT_FATAL 2 -# define SSL_TLSEXT_ERR_NOACK 3 - -# define SSL_CTX_set_tlsext_servername_arg(ctx, arg) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0,arg) - -# define SSL_CTX_get_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_GET_TLSEXT_TICKET_KEYS,keylen,keys) -# define SSL_CTX_set_tlsext_ticket_keys(ctx, keys, keylen) \ - SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_TICKET_KEYS,keylen,keys) - -# define SSL_CTX_get_tlsext_status_cb(ssl, cb) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB,0,(void *)cb) -# define SSL_CTX_set_tlsext_status_cb(ssl, cb) \ - SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB,\ - (void (*)(void))cb) - -# define SSL_CTX_get_tlsext_status_arg(ssl, arg) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) -# define SSL_CTX_set_tlsext_status_arg(ssl, arg) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_CB_ARG,0,arg) - -# define SSL_CTX_set_tlsext_status_type(ssl, type) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_SET_TLSEXT_STATUS_REQ_TYPE,type,NULL) - -# define SSL_CTX_get_tlsext_status_type(ssl) \ - SSL_CTX_ctrl(ssl,SSL_CTRL_GET_TLSEXT_STATUS_REQ_TYPE,0,NULL) - -# 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) -# 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 -# define TLS1_CK_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008B -# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA 0x0300008C -# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA 0x0300008D -# define TLS1_CK_DHE_PSK_WITH_RC4_128_SHA 0x0300008E -# define TLS1_CK_DHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300008F -# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA 0x03000090 -# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA 0x03000091 -# define TLS1_CK_RSA_PSK_WITH_RC4_128_SHA 0x03000092 -# define TLS1_CK_RSA_PSK_WITH_3DES_EDE_CBC_SHA 0x03000093 -# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA 0x03000094 -# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA 0x03000095 - -/* PSK ciphersuites from 5487 */ -# define TLS1_CK_PSK_WITH_AES_128_GCM_SHA256 0x030000A8 -# define TLS1_CK_PSK_WITH_AES_256_GCM_SHA384 0x030000A9 -# define TLS1_CK_DHE_PSK_WITH_AES_128_GCM_SHA256 0x030000AA -# define TLS1_CK_DHE_PSK_WITH_AES_256_GCM_SHA384 0x030000AB -# define TLS1_CK_RSA_PSK_WITH_AES_128_GCM_SHA256 0x030000AC -# define TLS1_CK_RSA_PSK_WITH_AES_256_GCM_SHA384 0x030000AD -# define TLS1_CK_PSK_WITH_AES_128_CBC_SHA256 0x030000AE -# define TLS1_CK_PSK_WITH_AES_256_CBC_SHA384 0x030000AF -# define TLS1_CK_PSK_WITH_NULL_SHA256 0x030000B0 -# define TLS1_CK_PSK_WITH_NULL_SHA384 0x030000B1 -# define TLS1_CK_DHE_PSK_WITH_AES_128_CBC_SHA256 0x030000B2 -# define TLS1_CK_DHE_PSK_WITH_AES_256_CBC_SHA384 0x030000B3 -# define TLS1_CK_DHE_PSK_WITH_NULL_SHA256 0x030000B4 -# define TLS1_CK_DHE_PSK_WITH_NULL_SHA384 0x030000B5 -# define TLS1_CK_RSA_PSK_WITH_AES_128_CBC_SHA256 0x030000B6 -# define TLS1_CK_RSA_PSK_WITH_AES_256_CBC_SHA384 0x030000B7 -# define TLS1_CK_RSA_PSK_WITH_NULL_SHA256 0x030000B8 -# define TLS1_CK_RSA_PSK_WITH_NULL_SHA384 0x030000B9 - -/* NULL PSK ciphersuites from RFC4785 */ -# define TLS1_CK_PSK_WITH_NULL_SHA 0x0300002C -# define TLS1_CK_DHE_PSK_WITH_NULL_SHA 0x0300002D -# define TLS1_CK_RSA_PSK_WITH_NULL_SHA 0x0300002E - -/* AES ciphersuites from RFC3268 */ -# define TLS1_CK_RSA_WITH_AES_128_SHA 0x0300002F -# define TLS1_CK_DH_DSS_WITH_AES_128_SHA 0x03000030 -# define TLS1_CK_DH_RSA_WITH_AES_128_SHA 0x03000031 -# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA 0x03000032 -# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA 0x03000033 -# define TLS1_CK_ADH_WITH_AES_128_SHA 0x03000034 -# define TLS1_CK_RSA_WITH_AES_256_SHA 0x03000035 -# define TLS1_CK_DH_DSS_WITH_AES_256_SHA 0x03000036 -# define TLS1_CK_DH_RSA_WITH_AES_256_SHA 0x03000037 -# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA 0x03000038 -# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA 0x03000039 -# define TLS1_CK_ADH_WITH_AES_256_SHA 0x0300003A - -/* TLS v1.2 ciphersuites */ -# define TLS1_CK_RSA_WITH_NULL_SHA256 0x0300003B -# define TLS1_CK_RSA_WITH_AES_128_SHA256 0x0300003C -# define TLS1_CK_RSA_WITH_AES_256_SHA256 0x0300003D -# define TLS1_CK_DH_DSS_WITH_AES_128_SHA256 0x0300003E -# define TLS1_CK_DH_RSA_WITH_AES_128_SHA256 0x0300003F -# define TLS1_CK_DHE_DSS_WITH_AES_128_SHA256 0x03000040 - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000041 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000042 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000043 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA 0x03000044 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA 0x03000045 -# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA 0x03000046 - -/* TLS v1.2 ciphersuites */ -# define TLS1_CK_DHE_RSA_WITH_AES_128_SHA256 0x03000067 -# define TLS1_CK_DH_DSS_WITH_AES_256_SHA256 0x03000068 -# define TLS1_CK_DH_RSA_WITH_AES_256_SHA256 0x03000069 -# define TLS1_CK_DHE_DSS_WITH_AES_256_SHA256 0x0300006A -# define TLS1_CK_DHE_RSA_WITH_AES_256_SHA256 0x0300006B -# define TLS1_CK_ADH_WITH_AES_128_SHA256 0x0300006C -# define TLS1_CK_ADH_WITH_AES_256_SHA256 0x0300006D - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000084 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000085 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000086 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA 0x03000087 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA 0x03000088 -# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA 0x03000089 - -/* SEED ciphersuites from RFC4162 */ -# define TLS1_CK_RSA_WITH_SEED_SHA 0x03000096 -# define TLS1_CK_DH_DSS_WITH_SEED_SHA 0x03000097 -# define TLS1_CK_DH_RSA_WITH_SEED_SHA 0x03000098 -# define TLS1_CK_DHE_DSS_WITH_SEED_SHA 0x03000099 -# define TLS1_CK_DHE_RSA_WITH_SEED_SHA 0x0300009A -# define TLS1_CK_ADH_WITH_SEED_SHA 0x0300009B - -/* TLS v1.2 GCM ciphersuites from RFC5288 */ -# define TLS1_CK_RSA_WITH_AES_128_GCM_SHA256 0x0300009C -# define TLS1_CK_RSA_WITH_AES_256_GCM_SHA384 0x0300009D -# define TLS1_CK_DHE_RSA_WITH_AES_128_GCM_SHA256 0x0300009E -# define TLS1_CK_DHE_RSA_WITH_AES_256_GCM_SHA384 0x0300009F -# define TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256 0x030000A0 -# define TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384 0x030000A1 -# define TLS1_CK_DHE_DSS_WITH_AES_128_GCM_SHA256 0x030000A2 -# define TLS1_CK_DHE_DSS_WITH_AES_256_GCM_SHA384 0x030000A3 -# define TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256 0x030000A4 -# define TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384 0x030000A5 -# define TLS1_CK_ADH_WITH_AES_128_GCM_SHA256 0x030000A6 -# define TLS1_CK_ADH_WITH_AES_256_GCM_SHA384 0x030000A7 - -/* CCM ciphersuites from RFC6655 */ -# define TLS1_CK_RSA_WITH_AES_128_CCM 0x0300C09C -# define TLS1_CK_RSA_WITH_AES_256_CCM 0x0300C09D -# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM 0x0300C09E -# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM 0x0300C09F -# define TLS1_CK_RSA_WITH_AES_128_CCM_8 0x0300C0A0 -# define TLS1_CK_RSA_WITH_AES_256_CCM_8 0x0300C0A1 -# define TLS1_CK_DHE_RSA_WITH_AES_128_CCM_8 0x0300C0A2 -# define TLS1_CK_DHE_RSA_WITH_AES_256_CCM_8 0x0300C0A3 -# define TLS1_CK_PSK_WITH_AES_128_CCM 0x0300C0A4 -# define TLS1_CK_PSK_WITH_AES_256_CCM 0x0300C0A5 -# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM 0x0300C0A6 -# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM 0x0300C0A7 -# define TLS1_CK_PSK_WITH_AES_128_CCM_8 0x0300C0A8 -# define TLS1_CK_PSK_WITH_AES_256_CCM_8 0x0300C0A9 -# define TLS1_CK_DHE_PSK_WITH_AES_128_CCM_8 0x0300C0AA -# define TLS1_CK_DHE_PSK_WITH_AES_256_CCM_8 0x0300C0AB - -/* CCM ciphersuites from RFC7251 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM 0x0300C0AC -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM 0x0300C0AD -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CCM_8 0x0300C0AE -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CCM_8 0x0300C0AF - -/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ -# define TLS1_CK_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BA -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BB -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BC -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 0x030000BD -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x030000BE -# define TLS1_CK_ADH_WITH_CAMELLIA_128_CBC_SHA256 0x030000BF - -# define TLS1_CK_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C0 -# define TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C1 -# define TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C2 -# define TLS1_CK_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 0x030000C3 -# define TLS1_CK_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 0x030000C4 -# define TLS1_CK_ADH_WITH_CAMELLIA_256_CBC_SHA256 0x030000C5 - -/* ECC ciphersuites from RFC4492 */ -# define TLS1_CK_ECDH_ECDSA_WITH_NULL_SHA 0x0300C001 -# define TLS1_CK_ECDH_ECDSA_WITH_RC4_128_SHA 0x0300C002 -# define TLS1_CK_ECDH_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C003 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_CBC_SHA 0x0300C004 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_CBC_SHA 0x0300C005 - -# define TLS1_CK_ECDHE_ECDSA_WITH_NULL_SHA 0x0300C006 -# define TLS1_CK_ECDHE_ECDSA_WITH_RC4_128_SHA 0x0300C007 -# define TLS1_CK_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA 0x0300C008 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_CBC_SHA 0x0300C009 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_CBC_SHA 0x0300C00A - -# define TLS1_CK_ECDH_RSA_WITH_NULL_SHA 0x0300C00B -# define TLS1_CK_ECDH_RSA_WITH_RC4_128_SHA 0x0300C00C -# define TLS1_CK_ECDH_RSA_WITH_DES_192_CBC3_SHA 0x0300C00D -# define TLS1_CK_ECDH_RSA_WITH_AES_128_CBC_SHA 0x0300C00E -# define TLS1_CK_ECDH_RSA_WITH_AES_256_CBC_SHA 0x0300C00F - -# define TLS1_CK_ECDHE_RSA_WITH_NULL_SHA 0x0300C010 -# define TLS1_CK_ECDHE_RSA_WITH_RC4_128_SHA 0x0300C011 -# define TLS1_CK_ECDHE_RSA_WITH_DES_192_CBC3_SHA 0x0300C012 -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_CBC_SHA 0x0300C013 -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_CBC_SHA 0x0300C014 - -# define TLS1_CK_ECDH_anon_WITH_NULL_SHA 0x0300C015 -# define TLS1_CK_ECDH_anon_WITH_RC4_128_SHA 0x0300C016 -# define TLS1_CK_ECDH_anon_WITH_DES_192_CBC3_SHA 0x0300C017 -# define TLS1_CK_ECDH_anon_WITH_AES_128_CBC_SHA 0x0300C018 -# define TLS1_CK_ECDH_anon_WITH_AES_256_CBC_SHA 0x0300C019 - -/* SRP ciphersuites from RFC 5054 */ -# define TLS1_CK_SRP_SHA_WITH_3DES_EDE_CBC_SHA 0x0300C01A -# define TLS1_CK_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA 0x0300C01B -# define TLS1_CK_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA 0x0300C01C -# define TLS1_CK_SRP_SHA_WITH_AES_128_CBC_SHA 0x0300C01D -# define TLS1_CK_SRP_SHA_RSA_WITH_AES_128_CBC_SHA 0x0300C01E -# define TLS1_CK_SRP_SHA_DSS_WITH_AES_128_CBC_SHA 0x0300C01F -# define TLS1_CK_SRP_SHA_WITH_AES_256_CBC_SHA 0x0300C020 -# define TLS1_CK_SRP_SHA_RSA_WITH_AES_256_CBC_SHA 0x0300C021 -# define TLS1_CK_SRP_SHA_DSS_WITH_AES_256_CBC_SHA 0x0300C022 - -/* ECDH HMAC based ciphersuites from RFC5289 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_SHA256 0x0300C023 -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_SHA384 0x0300C024 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_SHA256 0x0300C025 -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_SHA384 0x0300C026 -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_SHA256 0x0300C027 -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_SHA384 0x0300C028 -# define TLS1_CK_ECDH_RSA_WITH_AES_128_SHA256 0x0300C029 -# define TLS1_CK_ECDH_RSA_WITH_AES_256_SHA384 0x0300C02A - -/* ECDH GCM based ciphersuites from RFC5289 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02B -# define TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02C -# define TLS1_CK_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 0x0300C02D -# define TLS1_CK_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 0x0300C02E -# define TLS1_CK_ECDHE_RSA_WITH_AES_128_GCM_SHA256 0x0300C02F -# define TLS1_CK_ECDHE_RSA_WITH_AES_256_GCM_SHA384 0x0300C030 -# define TLS1_CK_ECDH_RSA_WITH_AES_128_GCM_SHA256 0x0300C031 -# define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032 - -/* ECDHE PSK ciphersuites from RFC5489 */ -# define TLS1_CK_ECDHE_PSK_WITH_RC4_128_SHA 0x0300C033 -# define TLS1_CK_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA 0x0300C034 -# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA 0x0300C035 -# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA 0x0300C036 - -# define TLS1_CK_ECDHE_PSK_WITH_AES_128_CBC_SHA256 0x0300C037 -# define TLS1_CK_ECDHE_PSK_WITH_AES_256_CBC_SHA384 0x0300C038 - -/* NULL PSK ciphersuites from RFC4785 */ -# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA 0x0300C039 -# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA256 0x0300C03A -# define TLS1_CK_ECDHE_PSK_WITH_NULL_SHA384 0x0300C03B - -/* Camellia-CBC ciphersuites from RFC6367 */ -# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C072 -# define TLS1_CK_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C073 -# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C074 -# define TLS1_CK_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C075 -# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C076 -# define TLS1_CK_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C077 -# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 0x0300C078 -# define TLS1_CK_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 0x0300C079 - -# define TLS1_CK_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C094 -# define TLS1_CK_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C095 -# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C096 -# define TLS1_CK_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C097 -# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C098 -# define TLS1_CK_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C099 -# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 0x0300C09A -# define TLS1_CK_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 0x0300C09B - -/* draft-ietf-tls-chacha20-poly1305-03 */ -# define TLS1_CK_ECDHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCA8 -# define TLS1_CK_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 0x0300CCA9 -# define TLS1_CK_DHE_RSA_WITH_CHACHA20_POLY1305 0x0300CCAA -# define TLS1_CK_PSK_WITH_CHACHA20_POLY1305 0x0300CCAB -# define TLS1_CK_ECDHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAC -# define TLS1_CK_DHE_PSK_WITH_CHACHA20_POLY1305 0x0300CCAD -# define TLS1_CK_RSA_PSK_WITH_CHACHA20_POLY1305 0x0300CCAE - -/* TLS v1.3 ciphersuites */ -# define TLS1_3_CK_AES_128_GCM_SHA256 0x03001301 -# define TLS1_3_CK_AES_256_GCM_SHA384 0x03001302 -# define TLS1_3_CK_CHACHA20_POLY1305_SHA256 0x03001303 -# define TLS1_3_CK_AES_128_CCM_SHA256 0x03001304 -# define TLS1_3_CK_AES_128_CCM_8_SHA256 0x03001305 - -/* Aria ciphersuites from RFC6209 */ -# define TLS1_CK_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C050 -# define TLS1_CK_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C051 -# define TLS1_CK_DHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C052 -# define TLS1_CK_DHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C053 -# define TLS1_CK_DH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C054 -# define TLS1_CK_DH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C055 -# define TLS1_CK_DHE_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C056 -# define TLS1_CK_DHE_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C057 -# define TLS1_CK_DH_DSS_WITH_ARIA_128_GCM_SHA256 0x0300C058 -# define TLS1_CK_DH_DSS_WITH_ARIA_256_GCM_SHA384 0x0300C059 -# define TLS1_CK_DH_anon_WITH_ARIA_128_GCM_SHA256 0x0300C05A -# define TLS1_CK_DH_anon_WITH_ARIA_256_GCM_SHA384 0x0300C05B -# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05C -# define TLS1_CK_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05D -# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 0x0300C05E -# define TLS1_CK_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 0x0300C05F -# define TLS1_CK_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C060 -# define TLS1_CK_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C061 -# define TLS1_CK_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 0x0300C062 -# define TLS1_CK_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 0x0300C063 -# define TLS1_CK_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06A -# define TLS1_CK_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06B -# define TLS1_CK_DHE_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06C -# define TLS1_CK_DHE_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06D -# define TLS1_CK_RSA_PSK_WITH_ARIA_128_GCM_SHA256 0x0300C06E -# define TLS1_CK_RSA_PSK_WITH_ARIA_256_GCM_SHA384 0x0300C06F - -/* a bundle of RFC standard cipher names, generated from ssl3_ciphers[] */ -# define TLS1_RFC_RSA_WITH_AES_128_SHA "TLS_RSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA "TLS_DHE_DSS_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA "TLS_DHE_RSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ADH_WITH_AES_128_SHA "TLS_DH_anon_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_RSA_WITH_AES_256_SHA "TLS_RSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA "TLS_DHE_DSS_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA "TLS_DHE_RSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ADH_WITH_AES_256_SHA "TLS_DH_anon_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_RSA_WITH_NULL_SHA256 "TLS_RSA_WITH_NULL_SHA256" -# define TLS1_RFC_RSA_WITH_AES_128_SHA256 "TLS_RSA_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_RSA_WITH_AES_256_SHA256 "TLS_RSA_WITH_AES_256_CBC_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_AES_128_SHA256 "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_SHA256 "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_AES_256_SHA256 "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_SHA256 "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256" -# define TLS1_RFC_ADH_WITH_AES_128_SHA256 "TLS_DH_anon_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_ADH_WITH_AES_256_SHA256 "TLS_DH_anon_WITH_AES_256_CBC_SHA256" -# define TLS1_RFC_RSA_WITH_AES_128_GCM_SHA256 "TLS_RSA_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_RSA_WITH_AES_256_GCM_SHA384 "TLS_RSA_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_DHE_DSS_WITH_AES_128_GCM_SHA256 "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_AES_256_GCM_SHA384 "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_ADH_WITH_AES_128_GCM_SHA256 "TLS_DH_anon_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_ADH_WITH_AES_256_GCM_SHA384 "TLS_DH_anon_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_RSA_WITH_AES_128_CCM "TLS_RSA_WITH_AES_128_CCM" -# define TLS1_RFC_RSA_WITH_AES_256_CCM "TLS_RSA_WITH_AES_256_CCM" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM "TLS_DHE_RSA_WITH_AES_128_CCM" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM "TLS_DHE_RSA_WITH_AES_256_CCM" -# define TLS1_RFC_RSA_WITH_AES_128_CCM_8 "TLS_RSA_WITH_AES_128_CCM_8" -# define TLS1_RFC_RSA_WITH_AES_256_CCM_8 "TLS_RSA_WITH_AES_256_CCM_8" -# define TLS1_RFC_DHE_RSA_WITH_AES_128_CCM_8 "TLS_DHE_RSA_WITH_AES_128_CCM_8" -# define TLS1_RFC_DHE_RSA_WITH_AES_256_CCM_8 "TLS_DHE_RSA_WITH_AES_256_CCM_8" -# define TLS1_RFC_PSK_WITH_AES_128_CCM "TLS_PSK_WITH_AES_128_CCM" -# define TLS1_RFC_PSK_WITH_AES_256_CCM "TLS_PSK_WITH_AES_256_CCM" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM "TLS_DHE_PSK_WITH_AES_128_CCM" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM "TLS_DHE_PSK_WITH_AES_256_CCM" -# define TLS1_RFC_PSK_WITH_AES_128_CCM_8 "TLS_PSK_WITH_AES_128_CCM_8" -# define TLS1_RFC_PSK_WITH_AES_256_CCM_8 "TLS_PSK_WITH_AES_256_CCM_8" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_CCM_8 "TLS_PSK_DHE_WITH_AES_128_CCM_8" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_CCM_8 "TLS_PSK_DHE_WITH_AES_256_CCM_8" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM "TLS_ECDHE_ECDSA_WITH_AES_128_CCM" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM "TLS_ECDHE_ECDSA_WITH_AES_256_CCM" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CCM_8 "TLS_ECDHE_ECDSA_WITH_AES_256_CCM_8" -# define TLS1_3_RFC_AES_128_GCM_SHA256 "TLS_AES_128_GCM_SHA256" -# define TLS1_3_RFC_AES_256_GCM_SHA384 "TLS_AES_256_GCM_SHA384" -# define TLS1_3_RFC_CHACHA20_POLY1305_SHA256 "TLS_CHACHA20_POLY1305_SHA256" -# define TLS1_3_RFC_AES_128_CCM_SHA256 "TLS_AES_128_CCM_SHA256" -# define TLS1_3_RFC_AES_128_CCM_8_SHA256 "TLS_AES_128_CCM_8_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_NULL_SHA "TLS_ECDHE_ECDSA_WITH_NULL_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_NULL_SHA "TLS_ECDHE_RSA_WITH_NULL_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_DES_192_CBC3_SHA "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_CBC_SHA "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ECDH_anon_WITH_NULL_SHA "TLS_ECDH_anon_WITH_NULL_SHA" -# define TLS1_RFC_ECDH_anon_WITH_DES_192_CBC3_SHA "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_ECDH_anon_WITH_AES_128_CBC_SHA "TLS_ECDH_anon_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ECDH_anon_WITH_AES_256_CBC_SHA "TLS_ECDH_anon_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_PSK_WITH_NULL_SHA "TLS_PSK_WITH_NULL_SHA" -# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA "TLS_DHE_PSK_WITH_NULL_SHA" -# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA "TLS_RSA_PSK_WITH_NULL_SHA" -# define TLS1_RFC_PSK_WITH_3DES_EDE_CBC_SHA "TLS_PSK_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA "TLS_PSK_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA "TLS_PSK_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_DHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA "TLS_DHE_PSK_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA "TLS_DHE_PSK_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_RSA_PSK_WITH_3DES_EDE_CBC_SHA "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA "TLS_RSA_PSK_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA "TLS_RSA_PSK_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_PSK_WITH_AES_128_GCM_SHA256 "TLS_PSK_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_PSK_WITH_AES_256_GCM_SHA384 "TLS_PSK_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_GCM_SHA256 "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_GCM_SHA384 "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_AES_128_GCM_SHA256 "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_AES_256_GCM_SHA384 "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384" -# define TLS1_RFC_PSK_WITH_AES_128_CBC_SHA256 "TLS_PSK_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_PSK_WITH_AES_256_CBC_SHA384 "TLS_PSK_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_PSK_WITH_NULL_SHA256 "TLS_PSK_WITH_NULL_SHA256" -# define TLS1_RFC_PSK_WITH_NULL_SHA384 "TLS_PSK_WITH_NULL_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA256 "TLS_DHE_PSK_WITH_NULL_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_NULL_SHA384 "TLS_DHE_PSK_WITH_NULL_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_AES_128_CBC_SHA256 "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_AES_256_CBC_SHA384 "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA256 "TLS_RSA_PSK_WITH_NULL_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_NULL_SHA384 "TLS_RSA_PSK_WITH_NULL_SHA384" -# define TLS1_RFC_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "TLS_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_AES_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_AES_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA "TLS_ECDHE_PSK_WITH_NULL_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA256 "TLS_ECDHE_PSK_WITH_NULL_SHA256" -# define TLS1_RFC_ECDHE_PSK_WITH_NULL_SHA384 "TLS_ECDHE_PSK_WITH_NULL_SHA384" -# define TLS1_RFC_SRP_SHA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA" -# define TLS1_RFC_SRP_SHA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA" -# define TLS1_RFC_SRP_SHA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_CHACHA20_POLY1305 "TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_PSK_WITH_CHACHA20_POLY1305 "TLS_PSK_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_ECDHE_PSK_WITH_CHACHA20_POLY1305 "TLS_ECDHE_PSK_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_CHACHA20_POLY1305 "TLS_DHE_PSK_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_CHACHA20_POLY1305 "TLS_RSA_PSK_WITH_CHACHA20_POLY1305_SHA256" -# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256" -# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA256 "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256" -# define TLS1_RFC_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA" -# define TLS1_RFC_ADH_WITH_CAMELLIA_256_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA" -# define TLS1_RFC_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA" -# define TLS1_RFC_ADH_WITH_CAMELLIA_128_CBC_SHA "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_PSK_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_PSK_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "TLS_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256" -# define TLS1_RFC_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "TLS_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384" -# define TLS1_RFC_RSA_WITH_SEED_SHA "TLS_RSA_WITH_SEED_CBC_SHA" -# define TLS1_RFC_DHE_DSS_WITH_SEED_SHA "TLS_DHE_DSS_WITH_SEED_CBC_SHA" -# define TLS1_RFC_DHE_RSA_WITH_SEED_SHA "TLS_DHE_RSA_WITH_SEED_CBC_SHA" -# define TLS1_RFC_ADH_WITH_SEED_SHA "TLS_DH_anon_WITH_SEED_CBC_SHA" -# define TLS1_RFC_ECDHE_PSK_WITH_RC4_128_SHA "TLS_ECDHE_PSK_WITH_RC4_128_SHA" -# define TLS1_RFC_ECDH_anon_WITH_RC4_128_SHA "TLS_ECDH_anon_WITH_RC4_128_SHA" -# define TLS1_RFC_ECDHE_ECDSA_WITH_RC4_128_SHA "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA" -# define TLS1_RFC_ECDHE_RSA_WITH_RC4_128_SHA "TLS_ECDHE_RSA_WITH_RC4_128_SHA" -# define TLS1_RFC_PSK_WITH_RC4_128_SHA "TLS_PSK_WITH_RC4_128_SHA" -# define TLS1_RFC_RSA_PSK_WITH_RC4_128_SHA "TLS_RSA_PSK_WITH_RC4_128_SHA" -# define TLS1_RFC_DHE_PSK_WITH_RC4_128_SHA "TLS_DHE_PSK_WITH_RC4_128_SHA" -# define TLS1_RFC_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_DH_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_DH_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_DSS_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_DSS_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DH_DSS_WITH_ARIA_128_GCM_SHA256 "TLS_DH_DSS_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DH_DSS_WITH_ARIA_256_GCM_SHA384 "TLS_DH_DSS_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DH_anon_WITH_ARIA_128_GCM_SHA256 "TLS_DH_anon_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DH_anon_WITH_ARIA_256_GCM_SHA384 "TLS_DH_anon_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "TLS_ECDH_RSA_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "TLS_ECDH_RSA_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_PSK_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_PSK_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_DHE_PSK_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_DHE_PSK_WITH_ARIA_256_GCM_SHA384" -# define TLS1_RFC_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "TLS_RSA_PSK_WITH_ARIA_128_GCM_SHA256" -# define TLS1_RFC_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "TLS_RSA_PSK_WITH_ARIA_256_GCM_SHA384" - - -/* - * XXX Backward compatibility alert: Older versions of OpenSSL gave some DHE - * ciphers names with "EDH" instead of "DHE". Going forward, we should be - * using DHE everywhere, though we may indefinitely maintain aliases for - * users or configurations that used "EDH" - */ -# define TLS1_TXT_DHE_DSS_WITH_RC4_128_SHA "DHE-DSS-RC4-SHA" - -# define TLS1_TXT_PSK_WITH_NULL_SHA "PSK-NULL-SHA" -# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA "DHE-PSK-NULL-SHA" -# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA "RSA-PSK-NULL-SHA" - -/* AES ciphersuites from RFC3268 */ -# define TLS1_TXT_RSA_WITH_AES_128_SHA "AES128-SHA" -# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA "DH-DSS-AES128-SHA" -# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA "DH-RSA-AES128-SHA" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA "DHE-DSS-AES128-SHA" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA "DHE-RSA-AES128-SHA" -# define TLS1_TXT_ADH_WITH_AES_128_SHA "ADH-AES128-SHA" - -# define TLS1_TXT_RSA_WITH_AES_256_SHA "AES256-SHA" -# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA "DH-DSS-AES256-SHA" -# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA "DH-RSA-AES256-SHA" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA "DHE-DSS-AES256-SHA" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA "DHE-RSA-AES256-SHA" -# define TLS1_TXT_ADH_WITH_AES_256_SHA "ADH-AES256-SHA" - -/* ECC ciphersuites from RFC4492 */ -# define TLS1_TXT_ECDH_ECDSA_WITH_NULL_SHA "ECDH-ECDSA-NULL-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA "ECDH-ECDSA-RC4-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA "ECDH-ECDSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA "ECDH-ECDSA-AES128-SHA" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA "ECDH-ECDSA-AES256-SHA" - -# define TLS1_TXT_ECDHE_ECDSA_WITH_NULL_SHA "ECDHE-ECDSA-NULL-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA "ECDHE-ECDSA-RC4-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA "ECDHE-ECDSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA "ECDHE-ECDSA-AES128-SHA" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA "ECDHE-ECDSA-AES256-SHA" - -# define TLS1_TXT_ECDH_RSA_WITH_NULL_SHA "ECDH-RSA-NULL-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA "ECDH-RSA-RC4-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA "ECDH-RSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA "ECDH-RSA-AES128-SHA" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA "ECDH-RSA-AES256-SHA" - -# define TLS1_TXT_ECDHE_RSA_WITH_NULL_SHA "ECDHE-RSA-NULL-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA "ECDHE-RSA-RC4-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA "ECDHE-RSA-DES-CBC3-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA "ECDHE-RSA-AES128-SHA" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA "ECDHE-RSA-AES256-SHA" - -# define TLS1_TXT_ECDH_anon_WITH_NULL_SHA "AECDH-NULL-SHA" -# define TLS1_TXT_ECDH_anon_WITH_RC4_128_SHA "AECDH-RC4-SHA" -# define TLS1_TXT_ECDH_anon_WITH_DES_192_CBC3_SHA "AECDH-DES-CBC3-SHA" -# define TLS1_TXT_ECDH_anon_WITH_AES_128_CBC_SHA "AECDH-AES128-SHA" -# define TLS1_TXT_ECDH_anon_WITH_AES_256_CBC_SHA "AECDH-AES256-SHA" - -/* PSK ciphersuites from RFC 4279 */ -# define TLS1_TXT_PSK_WITH_RC4_128_SHA "PSK-RC4-SHA" -# define TLS1_TXT_PSK_WITH_3DES_EDE_CBC_SHA "PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA "PSK-AES128-CBC-SHA" -# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA "PSK-AES256-CBC-SHA" - -# define TLS1_TXT_DHE_PSK_WITH_RC4_128_SHA "DHE-PSK-RC4-SHA" -# define TLS1_TXT_DHE_PSK_WITH_3DES_EDE_CBC_SHA "DHE-PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA "DHE-PSK-AES128-CBC-SHA" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA "DHE-PSK-AES256-CBC-SHA" -# define TLS1_TXT_RSA_PSK_WITH_RC4_128_SHA "RSA-PSK-RC4-SHA" -# define TLS1_TXT_RSA_PSK_WITH_3DES_EDE_CBC_SHA "RSA-PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA "RSA-PSK-AES128-CBC-SHA" -# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA "RSA-PSK-AES256-CBC-SHA" - -/* PSK ciphersuites from RFC 5487 */ -# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" -# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" -# define TLS1_TXT_DHE_PSK_WITH_AES_128_GCM_SHA256 "DHE-PSK-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_GCM_SHA384 "DHE-PSK-AES256-GCM-SHA384" -# define TLS1_TXT_RSA_PSK_WITH_AES_128_GCM_SHA256 "RSA-PSK-AES128-GCM-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_AES_256_GCM_SHA384 "RSA-PSK-AES256-GCM-SHA384" - -# define TLS1_TXT_PSK_WITH_AES_128_CBC_SHA256 "PSK-AES128-CBC-SHA256" -# define TLS1_TXT_PSK_WITH_AES_256_CBC_SHA384 "PSK-AES256-CBC-SHA384" -# define TLS1_TXT_PSK_WITH_NULL_SHA256 "PSK-NULL-SHA256" -# define TLS1_TXT_PSK_WITH_NULL_SHA384 "PSK-NULL-SHA384" - -# define TLS1_TXT_DHE_PSK_WITH_AES_128_CBC_SHA256 "DHE-PSK-AES128-CBC-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_CBC_SHA384 "DHE-PSK-AES256-CBC-SHA384" -# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA256 "DHE-PSK-NULL-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_NULL_SHA384 "DHE-PSK-NULL-SHA384" - -# define TLS1_TXT_RSA_PSK_WITH_AES_128_CBC_SHA256 "RSA-PSK-AES128-CBC-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_AES_256_CBC_SHA384 "RSA-PSK-AES256-CBC-SHA384" -# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA256 "RSA-PSK-NULL-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_NULL_SHA384 "RSA-PSK-NULL-SHA384" - -/* SRP ciphersuite from RFC 5054 */ -# define TLS1_TXT_SRP_SHA_WITH_3DES_EDE_CBC_SHA "SRP-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA "SRP-RSA-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA "SRP-DSS-3DES-EDE-CBC-SHA" -# define TLS1_TXT_SRP_SHA_WITH_AES_128_CBC_SHA "SRP-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_128_CBC_SHA "SRP-RSA-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_128_CBC_SHA "SRP-DSS-AES-128-CBC-SHA" -# define TLS1_TXT_SRP_SHA_WITH_AES_256_CBC_SHA "SRP-AES-256-CBC-SHA" -# define TLS1_TXT_SRP_SHA_RSA_WITH_AES_256_CBC_SHA "SRP-RSA-AES-256-CBC-SHA" -# define TLS1_TXT_SRP_SHA_DSS_WITH_AES_256_CBC_SHA "SRP-DSS-AES-256-CBC-SHA" - -/* Camellia ciphersuites from RFC4132 */ -# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA "CAMELLIA128-SHA" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA "DH-DSS-CAMELLIA128-SHA" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA "DH-RSA-CAMELLIA128-SHA" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA "DHE-DSS-CAMELLIA128-SHA" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA "DHE-RSA-CAMELLIA128-SHA" -# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA "ADH-CAMELLIA128-SHA" - -# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA "CAMELLIA256-SHA" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA "DH-DSS-CAMELLIA256-SHA" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA "DH-RSA-CAMELLIA256-SHA" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA "DHE-DSS-CAMELLIA256-SHA" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA "DHE-RSA-CAMELLIA256-SHA" -# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA "ADH-CAMELLIA256-SHA" - -/* TLS 1.2 Camellia SHA-256 ciphersuites from RFC5932 */ -# define TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA256 "CAMELLIA128-SHA256" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DH-DSS-CAMELLIA128-SHA256" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DH-RSA-CAMELLIA128-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256 "DHE-DSS-CAMELLIA128-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "DHE-RSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ADH_WITH_CAMELLIA_128_CBC_SHA256 "ADH-CAMELLIA128-SHA256" - -# define TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA256 "CAMELLIA256-SHA256" -# define TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DH-DSS-CAMELLIA256-SHA256" -# define TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DH-RSA-CAMELLIA256-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256 "DHE-DSS-CAMELLIA256-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256 "DHE-RSA-CAMELLIA256-SHA256" -# define TLS1_TXT_ADH_WITH_CAMELLIA_256_CBC_SHA256 "ADH-CAMELLIA256-SHA256" - -# define TLS1_TXT_PSK_WITH_CAMELLIA_128_CBC_SHA256 "PSK-CAMELLIA128-SHA256" -# define TLS1_TXT_PSK_WITH_CAMELLIA_256_CBC_SHA384 "PSK-CAMELLIA256-SHA384" -# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "DHE-PSK-CAMELLIA128-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "DHE-PSK-CAMELLIA256-SHA384" -# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_128_CBC_SHA256 "RSA-PSK-CAMELLIA128-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_CAMELLIA_256_CBC_SHA384 "RSA-PSK-CAMELLIA256-SHA384" -# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-PSK-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDHE_PSK_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-PSK-CAMELLIA256-SHA384" - -/* SEED ciphersuites from RFC4162 */ -# define TLS1_TXT_RSA_WITH_SEED_SHA "SEED-SHA" -# define TLS1_TXT_DH_DSS_WITH_SEED_SHA "DH-DSS-SEED-SHA" -# define TLS1_TXT_DH_RSA_WITH_SEED_SHA "DH-RSA-SEED-SHA" -# define TLS1_TXT_DHE_DSS_WITH_SEED_SHA "DHE-DSS-SEED-SHA" -# define TLS1_TXT_DHE_RSA_WITH_SEED_SHA "DHE-RSA-SEED-SHA" -# define TLS1_TXT_ADH_WITH_SEED_SHA "ADH-SEED-SHA" - -/* TLS v1.2 ciphersuites */ -# define TLS1_TXT_RSA_WITH_NULL_SHA256 "NULL-SHA256" -# define TLS1_TXT_RSA_WITH_AES_128_SHA256 "AES128-SHA256" -# define TLS1_TXT_RSA_WITH_AES_256_SHA256 "AES256-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_128_SHA256 "DH-DSS-AES128-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_128_SHA256 "DH-RSA-AES128-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_SHA256 "DHE-DSS-AES128-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256 "DHE-RSA-AES128-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_256_SHA256 "DH-DSS-AES256-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_256_SHA256 "DH-RSA-AES256-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_SHA256 "DHE-DSS-AES256-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256 "DHE-RSA-AES256-SHA256" -# define TLS1_TXT_ADH_WITH_AES_128_SHA256 "ADH-AES128-SHA256" -# define TLS1_TXT_ADH_WITH_AES_256_SHA256 "ADH-AES256-SHA256" - -/* TLS v1.2 GCM ciphersuites from RFC5288 */ -# define TLS1_TXT_RSA_WITH_AES_128_GCM_SHA256 "AES128-GCM-SHA256" -# define TLS1_TXT_RSA_WITH_AES_256_GCM_SHA384 "AES256-GCM-SHA384" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256 "DHE-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384 "DHE-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256 "DH-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384 "DH-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_DHE_DSS_WITH_AES_128_GCM_SHA256 "DHE-DSS-AES128-GCM-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_AES_256_GCM_SHA384 "DHE-DSS-AES256-GCM-SHA384" -# define TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256 "DH-DSS-AES128-GCM-SHA256" -# define TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384 "DH-DSS-AES256-GCM-SHA384" -# define TLS1_TXT_ADH_WITH_AES_128_GCM_SHA256 "ADH-AES128-GCM-SHA256" -# define TLS1_TXT_ADH_WITH_AES_256_GCM_SHA384 "ADH-AES256-GCM-SHA384" - -/* CCM ciphersuites from RFC6655 */ -# define TLS1_TXT_RSA_WITH_AES_128_CCM "AES128-CCM" -# define TLS1_TXT_RSA_WITH_AES_256_CCM "AES256-CCM" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM "DHE-RSA-AES128-CCM" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM "DHE-RSA-AES256-CCM" - -# define TLS1_TXT_RSA_WITH_AES_128_CCM_8 "AES128-CCM8" -# define TLS1_TXT_RSA_WITH_AES_256_CCM_8 "AES256-CCM8" -# define TLS1_TXT_DHE_RSA_WITH_AES_128_CCM_8 "DHE-RSA-AES128-CCM8" -# define TLS1_TXT_DHE_RSA_WITH_AES_256_CCM_8 "DHE-RSA-AES256-CCM8" - -# define TLS1_TXT_PSK_WITH_AES_128_CCM "PSK-AES128-CCM" -# define TLS1_TXT_PSK_WITH_AES_256_CCM "PSK-AES256-CCM" -# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM "DHE-PSK-AES128-CCM" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM "DHE-PSK-AES256-CCM" - -# define TLS1_TXT_PSK_WITH_AES_128_CCM_8 "PSK-AES128-CCM8" -# define TLS1_TXT_PSK_WITH_AES_256_CCM_8 "PSK-AES256-CCM8" -# define TLS1_TXT_DHE_PSK_WITH_AES_128_CCM_8 "DHE-PSK-AES128-CCM8" -# define TLS1_TXT_DHE_PSK_WITH_AES_256_CCM_8 "DHE-PSK-AES256-CCM8" - -/* CCM ciphersuites from RFC7251 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM "ECDHE-ECDSA-AES128-CCM" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM "ECDHE-ECDSA-AES256-CCM" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CCM_8 "ECDHE-ECDSA-AES128-CCM8" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CCM_8 "ECDHE-ECDSA-AES256-CCM8" - -/* ECDH HMAC based ciphersuites from RFC5289 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_SHA256 "ECDHE-ECDSA-AES128-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_SHA384 "ECDHE-ECDSA-AES256-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_SHA256 "ECDH-ECDSA-AES128-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_SHA384 "ECDH-ECDSA-AES256-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256 "ECDHE-RSA-AES128-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384 "ECDHE-RSA-AES256-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_SHA256 "ECDH-RSA-AES128-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_SHA384 "ECDH-RSA-AES256-SHA384" - -/* ECDH GCM based ciphersuites from RFC5289 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 "ECDHE-ECDSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 "ECDHE-ECDSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_128_GCM_SHA256 "ECDH-ECDSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_AES_256_GCM_SHA384 "ECDH-ECDSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 "ECDHE-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 "ECDHE-RSA-AES256-GCM-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_AES_128_GCM_SHA256 "ECDH-RSA-AES128-GCM-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_AES_256_GCM_SHA384 "ECDH-RSA-AES256-GCM-SHA384" - -/* TLS v1.2 PSK GCM ciphersuites from RFC5487 */ -# define TLS1_TXT_PSK_WITH_AES_128_GCM_SHA256 "PSK-AES128-GCM-SHA256" -# define TLS1_TXT_PSK_WITH_AES_256_GCM_SHA384 "PSK-AES256-GCM-SHA384" - -/* ECDHE PSK ciphersuites from RFC 5489 */ -# define TLS1_TXT_ECDHE_PSK_WITH_RC4_128_SHA "ECDHE-PSK-RC4-SHA" -# define TLS1_TXT_ECDHE_PSK_WITH_3DES_EDE_CBC_SHA "ECDHE-PSK-3DES-EDE-CBC-SHA" -# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA "ECDHE-PSK-AES128-CBC-SHA" -# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA "ECDHE-PSK-AES256-CBC-SHA" - -# define TLS1_TXT_ECDHE_PSK_WITH_AES_128_CBC_SHA256 "ECDHE-PSK-AES128-CBC-SHA256" -# define TLS1_TXT_ECDHE_PSK_WITH_AES_256_CBC_SHA384 "ECDHE-PSK-AES256-CBC-SHA384" - -# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA "ECDHE-PSK-NULL-SHA" -# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA256 "ECDHE-PSK-NULL-SHA256" -# define TLS1_TXT_ECDHE_PSK_WITH_NULL_SHA384 "ECDHE-PSK-NULL-SHA384" - -/* Camellia-CBC ciphersuites from RFC6367 */ -# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-ECDSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-ECDSA-CAMELLIA256-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-ECDSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-ECDSA-CAMELLIA256-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDHE-RSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDHE-RSA-CAMELLIA256-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_128_CBC_SHA256 "ECDH-RSA-CAMELLIA128-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_CAMELLIA_256_CBC_SHA384 "ECDH-RSA-CAMELLIA256-SHA384" - -/* draft-ietf-tls-chacha20-poly1305-03 */ -# define TLS1_TXT_ECDHE_RSA_WITH_CHACHA20_POLY1305 "ECDHE-RSA-CHACHA20-POLY1305" -# define TLS1_TXT_ECDHE_ECDSA_WITH_CHACHA20_POLY1305 "ECDHE-ECDSA-CHACHA20-POLY1305" -# define TLS1_TXT_DHE_RSA_WITH_CHACHA20_POLY1305 "DHE-RSA-CHACHA20-POLY1305" -# define TLS1_TXT_PSK_WITH_CHACHA20_POLY1305 "PSK-CHACHA20-POLY1305" -# define TLS1_TXT_ECDHE_PSK_WITH_CHACHA20_POLY1305 "ECDHE-PSK-CHACHA20-POLY1305" -# define TLS1_TXT_DHE_PSK_WITH_CHACHA20_POLY1305 "DHE-PSK-CHACHA20-POLY1305" -# define TLS1_TXT_RSA_PSK_WITH_CHACHA20_POLY1305 "RSA-PSK-CHACHA20-POLY1305" - -/* Aria ciphersuites from RFC6209 */ -# define TLS1_TXT_RSA_WITH_ARIA_128_GCM_SHA256 "ARIA128-GCM-SHA256" -# define TLS1_TXT_RSA_WITH_ARIA_256_GCM_SHA384 "ARIA256-GCM-SHA384" -# define TLS1_TXT_DHE_RSA_WITH_ARIA_128_GCM_SHA256 "DHE-RSA-ARIA128-GCM-SHA256" -# define TLS1_TXT_DHE_RSA_WITH_ARIA_256_GCM_SHA384 "DHE-RSA-ARIA256-GCM-SHA384" -# define TLS1_TXT_DH_RSA_WITH_ARIA_128_GCM_SHA256 "DH-RSA-ARIA128-GCM-SHA256" -# define TLS1_TXT_DH_RSA_WITH_ARIA_256_GCM_SHA384 "DH-RSA-ARIA256-GCM-SHA384" -# define TLS1_TXT_DHE_DSS_WITH_ARIA_128_GCM_SHA256 "DHE-DSS-ARIA128-GCM-SHA256" -# define TLS1_TXT_DHE_DSS_WITH_ARIA_256_GCM_SHA384 "DHE-DSS-ARIA256-GCM-SHA384" -# define TLS1_TXT_DH_DSS_WITH_ARIA_128_GCM_SHA256 "DH-DSS-ARIA128-GCM-SHA256" -# define TLS1_TXT_DH_DSS_WITH_ARIA_256_GCM_SHA384 "DH-DSS-ARIA256-GCM-SHA384" -# define TLS1_TXT_DH_anon_WITH_ARIA_128_GCM_SHA256 "ADH-ARIA128-GCM-SHA256" -# define TLS1_TXT_DH_anon_WITH_ARIA_256_GCM_SHA384 "ADH-ARIA256-GCM-SHA384" -# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ECDSA-ARIA128-GCM-SHA256" -# define TLS1_TXT_ECDHE_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ECDSA-ARIA256-GCM-SHA384" -# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ECDSA-ARIA128-GCM-SHA256" -# define TLS1_TXT_ECDH_ECDSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ECDSA-ARIA256-GCM-SHA384" -# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_128_GCM_SHA256 "ECDHE-ARIA128-GCM-SHA256" -# define TLS1_TXT_ECDHE_RSA_WITH_ARIA_256_GCM_SHA384 "ECDHE-ARIA256-GCM-SHA384" -# define TLS1_TXT_ECDH_RSA_WITH_ARIA_128_GCM_SHA256 "ECDH-ARIA128-GCM-SHA256" -# define TLS1_TXT_ECDH_RSA_WITH_ARIA_256_GCM_SHA384 "ECDH-ARIA256-GCM-SHA384" -# define TLS1_TXT_PSK_WITH_ARIA_128_GCM_SHA256 "PSK-ARIA128-GCM-SHA256" -# define TLS1_TXT_PSK_WITH_ARIA_256_GCM_SHA384 "PSK-ARIA256-GCM-SHA384" -# define TLS1_TXT_DHE_PSK_WITH_ARIA_128_GCM_SHA256 "DHE-PSK-ARIA128-GCM-SHA256" -# define TLS1_TXT_DHE_PSK_WITH_ARIA_256_GCM_SHA384 "DHE-PSK-ARIA256-GCM-SHA384" -# define TLS1_TXT_RSA_PSK_WITH_ARIA_128_GCM_SHA256 "RSA-PSK-ARIA128-GCM-SHA256" -# define TLS1_TXT_RSA_PSK_WITH_ARIA_256_GCM_SHA384 "RSA-PSK-ARIA256-GCM-SHA384" - -# define TLS_CT_RSA_SIGN 1 -# define TLS_CT_DSS_SIGN 2 -# define TLS_CT_RSA_FIXED_DH 3 -# define TLS_CT_DSS_FIXED_DH 4 -# define TLS_CT_ECDSA_SIGN 64 -# define TLS_CT_RSA_FIXED_ECDH 65 -# define TLS_CT_ECDSA_FIXED_ECDH 66 -# define TLS_CT_GOST01_SIGN 22 -# 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 12 - -# if defined(SSL3_CT_NUMBER) -# if TLS_CT_NUMBER != SSL3_CT_NUMBER -# error "SSL/TLS CT_NUMBER values do not match" -# endif -# endif - -# define TLS1_FINISH_MAC_LENGTH 12 - -# define TLS_MD_MAX_CONST_SIZE 22 - -/* 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 { - unsigned short length; - void *data; -}; - -#ifdef __cplusplus -} -#endif -#endif 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 deleted file mode 100644 index 9a5b56ea..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/trace.h +++ /dev/null @@ -1,320 +0,0 @@ -/* - * 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_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)) - -#define OSSL_TRACE_STRING_MAX 80 -int OSSL_trace_string(BIO *out, int text, int full, - const unsigned char *data, size_t size); -#define OSSL_TRACE_STRING(category, text, full, data, len) \ - OSSL_TRACE_BEGIN(category) { \ - OSSL_trace_string(trc_out, text, full, data, len); \ - } OSSL_TRACE_END(category) - -# 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 deleted file mode 100644 index b09b646d..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ts.h +++ /dev/null @@ -1,505 +0,0 @@ -/* - * Copyright 2006-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_TS_H -# define OPENSSL_TS_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_TS_H -# endif - -# include - -# ifndef OPENSSL_NO_TS -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# include -# ifndef OPENSSL_NO_STDIO -# include -# endif -# ifdef __cplusplus -extern "C" { -# endif - -typedef struct TS_msg_imprint_st TS_MSG_IMPRINT; -typedef struct TS_req_st TS_REQ; -typedef struct TS_accuracy_st TS_ACCURACY; -typedef struct TS_tst_info_st TS_TST_INFO; - -/* Possible values for status. */ -# define TS_STATUS_GRANTED 0 -# define TS_STATUS_GRANTED_WITH_MODS 1 -# define TS_STATUS_REJECTION 2 -# define TS_STATUS_WAITING 3 -# define TS_STATUS_REVOCATION_WARNING 4 -# define TS_STATUS_REVOCATION_NOTIFICATION 5 - -/* Possible values for failure_info. */ -# define TS_INFO_BAD_ALG 0 -# define TS_INFO_BAD_REQUEST 2 -# define TS_INFO_BAD_DATA_FORMAT 5 -# define TS_INFO_TIME_NOT_AVAILABLE 14 -# define TS_INFO_UNACCEPTED_POLICY 15 -# define TS_INFO_UNACCEPTED_EXTENSION 16 -# define TS_INFO_ADD_INFO_NOT_AVAILABLE 17 -# define TS_INFO_SYSTEM_FAILURE 25 - - -typedef struct TS_status_info_st TS_STATUS_INFO; - -typedef struct TS_resp_st TS_RESP; - -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, const TS_REQ *a); -#endif -TS_REQ *d2i_TS_REQ_bio(BIO *fp, TS_REQ **a); -int i2d_TS_REQ_bio(BIO *fp, const TS_REQ *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, 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, const TS_MSG_IMPRINT *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, const TS_RESP *a); -#endif -TS_RESP *d2i_TS_RESP_bio(BIO *bio, TS_RESP **a); -int i2d_TS_RESP_bio(BIO *bio, const TS_RESP *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) - -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, 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, const TS_TST_INFO *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); - -int TS_STATUS_INFO_set_status(TS_STATUS_INFO *a, int i); -const ASN1_INTEGER *TS_STATUS_INFO_get0_status(const TS_STATUS_INFO *a); - -const STACK_OF(ASN1_UTF8STRING) * -TS_STATUS_INFO_get0_text(const TS_STATUS_INFO *a); - -const ASN1_BIT_STRING * -TS_STATUS_INFO_get0_failure_info(const TS_STATUS_INFO *a); - -int TS_REQ_set_msg_imprint(TS_REQ *a, TS_MSG_IMPRINT *msg_imprint); -TS_MSG_IMPRINT *TS_REQ_get_msg_imprint(TS_REQ *a); - -int TS_MSG_IMPRINT_set_algo(TS_MSG_IMPRINT *a, X509_ALGOR *alg); -X509_ALGOR *TS_MSG_IMPRINT_get_algo(TS_MSG_IMPRINT *a); - -int TS_MSG_IMPRINT_set_msg(TS_MSG_IMPRINT *a, unsigned char *d, int len); -ASN1_OCTET_STRING *TS_MSG_IMPRINT_get_msg(TS_MSG_IMPRINT *a); - -int TS_REQ_set_policy_id(TS_REQ *a, const ASN1_OBJECT *policy); -ASN1_OBJECT *TS_REQ_get_policy_id(TS_REQ *a); - -int TS_REQ_set_nonce(TS_REQ *a, const ASN1_INTEGER *nonce); -const ASN1_INTEGER *TS_REQ_get_nonce(const TS_REQ *a); - -int TS_REQ_set_cert_req(TS_REQ *a, int cert_req); -int TS_REQ_get_cert_req(const TS_REQ *a); - -STACK_OF(X509_EXTENSION) *TS_REQ_get_exts(TS_REQ *a); -void TS_REQ_ext_free(TS_REQ *a); -int TS_REQ_get_ext_count(TS_REQ *a); -int TS_REQ_get_ext_by_NID(TS_REQ *a, int nid, int lastpos); -int TS_REQ_get_ext_by_OBJ(TS_REQ *a, const ASN1_OBJECT *obj, int lastpos); -int TS_REQ_get_ext_by_critical(TS_REQ *a, int crit, int lastpos); -X509_EXTENSION *TS_REQ_get_ext(TS_REQ *a, int loc); -X509_EXTENSION *TS_REQ_delete_ext(TS_REQ *a, int loc); -int TS_REQ_add_ext(TS_REQ *a, X509_EXTENSION *ex, int loc); -void *TS_REQ_get_ext_d2i(TS_REQ *a, int nid, int *crit, int *idx); - -/* Function declarations for TS_REQ defined in ts/ts_req_print.c */ - -int TS_REQ_print_bio(BIO *bio, TS_REQ *a); - -/* Function declarations for TS_RESP defined in ts/ts_resp_utils.c */ - -int TS_RESP_set_status_info(TS_RESP *a, TS_STATUS_INFO *info); -TS_STATUS_INFO *TS_RESP_get_status_info(TS_RESP *a); - -/* Caller loses ownership of PKCS7 and TS_TST_INFO objects. */ -void TS_RESP_set_tst_info(TS_RESP *a, PKCS7 *p7, TS_TST_INFO *tst_info); -PKCS7 *TS_RESP_get_token(TS_RESP *a); -TS_TST_INFO *TS_RESP_get_tst_info(TS_RESP *a); - -int TS_TST_INFO_set_version(TS_TST_INFO *a, long version); -long TS_TST_INFO_get_version(const TS_TST_INFO *a); - -int TS_TST_INFO_set_policy_id(TS_TST_INFO *a, ASN1_OBJECT *policy_id); -ASN1_OBJECT *TS_TST_INFO_get_policy_id(TS_TST_INFO *a); - -int TS_TST_INFO_set_msg_imprint(TS_TST_INFO *a, TS_MSG_IMPRINT *msg_imprint); -TS_MSG_IMPRINT *TS_TST_INFO_get_msg_imprint(TS_TST_INFO *a); - -int TS_TST_INFO_set_serial(TS_TST_INFO *a, const ASN1_INTEGER *serial); -const ASN1_INTEGER *TS_TST_INFO_get_serial(const TS_TST_INFO *a); - -int TS_TST_INFO_set_time(TS_TST_INFO *a, const ASN1_GENERALIZEDTIME *gtime); -const ASN1_GENERALIZEDTIME *TS_TST_INFO_get_time(const TS_TST_INFO *a); - -int TS_TST_INFO_set_accuracy(TS_TST_INFO *a, TS_ACCURACY *accuracy); -TS_ACCURACY *TS_TST_INFO_get_accuracy(TS_TST_INFO *a); - -int TS_ACCURACY_set_seconds(TS_ACCURACY *a, const ASN1_INTEGER *seconds); -const ASN1_INTEGER *TS_ACCURACY_get_seconds(const TS_ACCURACY *a); - -int TS_ACCURACY_set_millis(TS_ACCURACY *a, const ASN1_INTEGER *millis); -const ASN1_INTEGER *TS_ACCURACY_get_millis(const TS_ACCURACY *a); - -int TS_ACCURACY_set_micros(TS_ACCURACY *a, const ASN1_INTEGER *micros); -const ASN1_INTEGER *TS_ACCURACY_get_micros(const TS_ACCURACY *a); - -int TS_TST_INFO_set_ordering(TS_TST_INFO *a, int ordering); -int TS_TST_INFO_get_ordering(const TS_TST_INFO *a); - -int TS_TST_INFO_set_nonce(TS_TST_INFO *a, const ASN1_INTEGER *nonce); -const ASN1_INTEGER *TS_TST_INFO_get_nonce(const TS_TST_INFO *a); - -int TS_TST_INFO_set_tsa(TS_TST_INFO *a, GENERAL_NAME *tsa); -GENERAL_NAME *TS_TST_INFO_get_tsa(TS_TST_INFO *a); - -STACK_OF(X509_EXTENSION) *TS_TST_INFO_get_exts(TS_TST_INFO *a); -void TS_TST_INFO_ext_free(TS_TST_INFO *a); -int TS_TST_INFO_get_ext_count(TS_TST_INFO *a); -int TS_TST_INFO_get_ext_by_NID(TS_TST_INFO *a, int nid, int lastpos); -int TS_TST_INFO_get_ext_by_OBJ(TS_TST_INFO *a, const ASN1_OBJECT *obj, - int lastpos); -int TS_TST_INFO_get_ext_by_critical(TS_TST_INFO *a, int crit, int lastpos); -X509_EXTENSION *TS_TST_INFO_get_ext(TS_TST_INFO *a, int loc); -X509_EXTENSION *TS_TST_INFO_delete_ext(TS_TST_INFO *a, int loc); -int TS_TST_INFO_add_ext(TS_TST_INFO *a, X509_EXTENSION *ex, int loc); -void *TS_TST_INFO_get_ext_d2i(TS_TST_INFO *a, int nid, int *crit, int *idx); - -/* - * Declarations related to response generation, defined in ts/ts_resp_sign.c. - */ - -/* Optional flags for response generation. */ - -/* Don't include the TSA name in response. */ -# define TS_TSA_NAME 0x01 - -/* Set ordering to true in response. */ -# define TS_ORDERING 0x02 - -/* - * Include the signer certificate and the other specified certificates in - * the ESS signing certificate attribute beside the PKCS7 signed data. - * Only the signer certificates is included by default. - */ -# define TS_ESS_CERT_ID_CHAIN 0x04 - -/* Forward declaration. */ -struct TS_resp_ctx; - -/* This must return a unique number less than 160 bits long. */ -typedef ASN1_INTEGER *(*TS_serial_cb) (struct TS_resp_ctx *, void *); - -/* - * This must return the seconds and microseconds since Jan 1, 1970 in the sec - * and usec variables allocated by the caller. Return non-zero for success - * and zero for failure. - */ -typedef int (*TS_time_cb) (struct TS_resp_ctx *, void *, long *sec, - long *usec); - -/* - * This must process the given extension. It can modify the TS_TST_INFO - * object of the context. Return values: !0 (processed), 0 (error, it must - * set the status info/failure info of the response). - */ -typedef int (*TS_extension_cb) (struct TS_resp_ctx *, X509_EXTENSION *, - void *); - -typedef struct TS_resp_ctx TS_RESP_CTX; - -/* 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. */ -int TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_signer_key(TS_RESP_CTX *ctx, EVP_PKEY *key); - -int TS_RESP_CTX_set_signer_digest(TS_RESP_CTX *ctx, - const EVP_MD *signer_digest); -int TS_RESP_CTX_set_ess_cert_id_digest(TS_RESP_CTX *ctx, const EVP_MD *md); - -/* This parameter must be set. */ -int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, const ASN1_OBJECT *def_policy); - -/* No additional certs are included in the response by default. */ -int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs); - -/* - * Adds a new acceptable policy, only the default policy is accepted by - * default. - */ -int TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, const ASN1_OBJECT *policy); - -/* - * Adds a new acceptable message digest. Note that no message digests are - * accepted by default. The md argument is shared with the caller. - */ -int TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md); - -/* Accuracy is not included by default. */ -int TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, - int secs, int millis, int micros); - -/* - * Clock precision digits, i.e. the number of decimal digits: '0' means sec, - * '3' msec, '6' usec, and so on. Default is 0. - */ -int TS_RESP_CTX_set_clock_precision_digits(TS_RESP_CTX *ctx, - unsigned clock_precision_digits); -/* At most we accept usec precision. */ -# define TS_MAX_CLOCK_PRECISION_DIGITS 6 - -/* Maximum status message length */ -# define TS_MAX_STATUS_LENGTH (1024 * 1024) - -/* No flags are set by default. */ -void TS_RESP_CTX_add_flags(TS_RESP_CTX *ctx, int flags); - -/* Default callback always returns a constant. */ -void TS_RESP_CTX_set_serial_cb(TS_RESP_CTX *ctx, TS_serial_cb cb, void *data); - -/* Default callback uses the gettimeofday() and gmtime() system calls. */ -void TS_RESP_CTX_set_time_cb(TS_RESP_CTX *ctx, TS_time_cb cb, void *data); - -/* - * Default callback rejects all extensions. The extension callback is called - * when the TS_TST_INFO object is already set up and not signed yet. - */ -/* FIXME: extension handling is not tested yet. */ -void TS_RESP_CTX_set_extension_cb(TS_RESP_CTX *ctx, - TS_extension_cb cb, void *data); - -/* The following methods can be used in the callbacks. */ -int TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, - int status, const char *text); - -/* Sets the status info only if it is still TS_STATUS_GRANTED. */ -int TS_RESP_CTX_set_status_info_cond(TS_RESP_CTX *ctx, - int status, const char *text); - -int TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure); - -/* The get methods below can be used in the extension callback. */ -TS_REQ *TS_RESP_CTX_get_request(TS_RESP_CTX *ctx); - -TS_TST_INFO *TS_RESP_CTX_get_tst_info(TS_RESP_CTX *ctx); - -/* - * Creates the signed TS_TST_INFO and puts it in TS_RESP. - * In case of errors it sets the status info properly. - * Returns NULL only in case of memory allocation/fatal error. - */ -TS_RESP *TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio); - -/* - * Declarations related to response verification, - * they are defined in ts/ts_resp_verify.c. - */ - -int TS_RESP_verify_signature(PKCS7 *token, STACK_OF(X509) *certs, - X509_STORE *store, X509 **signer_out); - -/* Context structure for the generic verify method. */ - -/* Verify the signer's certificate and the signature of the response. */ -# define TS_VFY_SIGNATURE (1u << 0) -/* Verify the version number of the response. */ -# define TS_VFY_VERSION (1u << 1) -/* Verify if the policy supplied by the user matches the policy of the TSA. */ -# define TS_VFY_POLICY (1u << 2) -/* - * Verify the message imprint provided by the user. This flag should not be - * specified with TS_VFY_DATA. - */ -# define TS_VFY_IMPRINT (1u << 3) -/* - * Verify the message imprint computed by the verify method from the user - * provided data and the MD algorithm of the response. This flag should not - * be specified with TS_VFY_IMPRINT. - */ -# define TS_VFY_DATA (1u << 4) -/* Verify the nonce value. */ -# define TS_VFY_NONCE (1u << 5) -/* Verify if the TSA name field matches the signer certificate. */ -# define TS_VFY_SIGNER (1u << 6) -/* Verify if the TSA name field equals to the user provided name. */ -# define TS_VFY_TSA_NAME (1u << 7) - -/* You can use the following convenience constants. */ -# define TS_VFY_ALL_IMPRINT (TS_VFY_SIGNATURE \ - | TS_VFY_VERSION \ - | TS_VFY_POLICY \ - | TS_VFY_IMPRINT \ - | TS_VFY_NONCE \ - | TS_VFY_SIGNER \ - | TS_VFY_TSA_NAME) -# define TS_VFY_ALL_DATA (TS_VFY_SIGNATURE \ - | TS_VFY_VERSION \ - | TS_VFY_POLICY \ - | TS_VFY_DATA \ - | TS_VFY_NONCE \ - | TS_VFY_SIGNER \ - | TS_VFY_TSA_NAME) - -typedef struct TS_verify_ctx TS_VERIFY_CTX; - -int TS_RESP_verify_response(TS_VERIFY_CTX *ctx, TS_RESP *response); -int TS_RESP_verify_token(TS_VERIFY_CTX *ctx, PKCS7 *token); - -/* - * Declarations related to response verification context, - */ -TS_VERIFY_CTX *TS_VERIFY_CTX_new(void); -void TS_VERIFY_CTX_init(TS_VERIFY_CTX *ctx); -void TS_VERIFY_CTX_free(TS_VERIFY_CTX *ctx); -void TS_VERIFY_CTX_cleanup(TS_VERIFY_CTX *ctx); -int TS_VERIFY_CTX_set_flags(TS_VERIFY_CTX *ctx, int f); -int TS_VERIFY_CTX_add_flags(TS_VERIFY_CTX *ctx, int f); -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); -# 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 - * it returns ctx. It initialises all the members as follows: - * flags = TS_VFY_ALL_IMPRINT & ~(TS_VFY_TSA_NAME | TS_VFY_SIGNATURE) - * certs = NULL - * store = NULL - * policy = policy from the request or NULL if absent (in this case - * TS_VFY_POLICY is cleared from flags as well) - * md_alg = MD algorithm from request - * imprint, imprint_len = imprint from request - * data = NULL - * nonce, nonce_len = nonce from the request or NULL if absent (in this case - * TS_VFY_NONCE is cleared from flags as well) - * tsa_name = NULL - * Important: after calling this method TS_VFY_SIGNATURE should be added! - */ -TS_VERIFY_CTX *TS_REQ_to_TS_VERIFY_CTX(TS_REQ *req, TS_VERIFY_CTX *ctx); - -/* Function declarations for TS_RESP defined in ts/ts_resp_print.c */ - -int TS_RESP_print_bio(BIO *bio, TS_RESP *a); -int TS_STATUS_INFO_print_bio(BIO *bio, TS_STATUS_INFO *a); -int TS_TST_INFO_print_bio(BIO *bio, TS_TST_INFO *a); - -/* Common utility functions defined in ts/ts_lib.c */ - -int TS_ASN1_INTEGER_print_bio(BIO *bio, const ASN1_INTEGER *num); -int TS_OBJ_print_bio(BIO *bio, const ASN1_OBJECT *obj); -int TS_ext_print_bio(BIO *bio, const STACK_OF(X509_EXTENSION) *extensions); -int TS_X509_ALGOR_print_bio(BIO *bio, const X509_ALGOR *alg); -int TS_MSG_IMPRINT_print_bio(BIO *bio, TS_MSG_IMPRINT *msg); - -/* - * Function declarations for handling configuration options, defined in - * ts/ts_conf.c - */ - -X509 *TS_CONF_load_cert(const char *file); -STACK_OF(X509) *TS_CONF_load_certs(const char *file); -EVP_PKEY *TS_CONF_load_key(const char *file, const char *pass); -const char *TS_CONF_get_tsa_section(CONF *conf, const char *section); -int TS_CONF_set_serial(CONF *conf, const char *section, TS_serial_cb cb, - TS_RESP_CTX *ctx); -#ifndef OPENSSL_NO_ENGINE -int TS_CONF_set_crypto_device(CONF *conf, const char *section, - const char *device); -int TS_CONF_set_default_engine(const char *name); -#endif -int TS_CONF_set_signer_cert(CONF *conf, const char *section, - const char *cert, TS_RESP_CTX *ctx); -int TS_CONF_set_certs(CONF *conf, const char *section, const char *certs, - TS_RESP_CTX *ctx); -int TS_CONF_set_signer_key(CONF *conf, const char *section, - const char *key, const char *pass, - TS_RESP_CTX *ctx); -int TS_CONF_set_signer_digest(CONF *conf, const char *section, - const char *md, TS_RESP_CTX *ctx); -int TS_CONF_set_def_policy(CONF *conf, const char *section, - const char *policy, TS_RESP_CTX *ctx); -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(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); -int TS_CONF_set_ess_cert_id_chain(CONF *conf, const char *section, - TS_RESP_CTX *ctx); -int TS_CONF_set_ess_cert_id_digest(CONF *conf, const char *section, - TS_RESP_CTX *ctx); - -# ifdef __cplusplus -} -# endif -# endif -#endif 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 deleted file mode 100644 index e1b943e4..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tserr.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * 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_TSERR_H -# define OPENSSL_TSERR_H -# pragma once - -# include -# include -# include - - -# ifndef OPENSSL_NO_TS - - -/* - * TS reason codes. - */ -# define TS_R_BAD_PKCS7_TYPE 132 -# define TS_R_BAD_TYPE 133 -# define TS_R_CANNOT_LOAD_CERT 137 -# define TS_R_CANNOT_LOAD_KEY 138 -# define TS_R_CERTIFICATE_VERIFY_ERROR 100 -# define TS_R_COULD_NOT_SET_ENGINE 127 -# define TS_R_COULD_NOT_SET_TIME 115 -# define TS_R_DETACHED_CONTENT 134 -# define TS_R_ESS_ADD_SIGNING_CERT_ERROR 116 -# define TS_R_ESS_ADD_SIGNING_CERT_V2_ERROR 139 -# define TS_R_ESS_SIGNING_CERTIFICATE_ERROR 101 -# define TS_R_INVALID_NULL_POINTER 102 -# define TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE 117 -# define TS_R_MESSAGE_IMPRINT_MISMATCH 103 -# define TS_R_NONCE_MISMATCH 104 -# define TS_R_NONCE_NOT_RETURNED 105 -# define TS_R_NO_CONTENT 106 -# define TS_R_NO_TIME_STAMP_TOKEN 107 -# define TS_R_PKCS7_ADD_SIGNATURE_ERROR 118 -# define TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR 119 -# define TS_R_PKCS7_TO_TS_TST_INFO_FAILED 129 -# define TS_R_POLICY_MISMATCH 108 -# define TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE 120 -# define TS_R_RESPONSE_SETUP_ERROR 121 -# define TS_R_SIGNATURE_FAILURE 109 -# define TS_R_THERE_MUST_BE_ONE_SIGNER 110 -# define TS_R_TIME_SYSCALL_ERROR 122 -# define TS_R_TOKEN_NOT_PRESENT 130 -# define TS_R_TOKEN_PRESENT 131 -# define TS_R_TSA_NAME_MISMATCH 111 -# define TS_R_TSA_UNTRUSTED 112 -# define TS_R_TST_INFO_SETUP_ERROR 123 -# define TS_R_TS_DATASIGN 124 -# define TS_R_UNACCEPTABLE_POLICY 125 -# define TS_R_UNSUPPORTED_MD_ALGORITHM 126 -# define TS_R_UNSUPPORTED_VERSION 113 -# define TS_R_VAR_BAD_VALUE 135 -# define TS_R_VAR_LOOKUP_FAILURE 136 -# define TS_R_WRONG_CONTENT_TYPE 114 - -# endif -#endif 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 deleted file mode 100644 index af169a30..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/txt_db.h +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_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 -# include -# include - -# define DB_ERROR_OK 0 -# define DB_ERROR_MALLOC 1 -# define DB_ERROR_INDEX_CLASH 2 -# define DB_ERROR_INDEX_OUT_OF_RANGE 3 -# define DB_ERROR_NO_INDEX 4 -# define DB_ERROR_INSERT_INDEX_CLASH 5 -# define DB_ERROR_WRONG_NUM_FIELDS 6 - -#ifdef __cplusplus -extern "C" { -#endif - -typedef OPENSSL_STRING *OPENSSL_PSTRING; -DEFINE_SPECIAL_STACK_OF(OPENSSL_PSTRING, OPENSSL_STRING) - -typedef struct txt_db_st { - int num_fields; - STACK_OF(OPENSSL_PSTRING) *data; - LHASH_OF(OPENSSL_STRING) **index; - int (**qual) (OPENSSL_STRING *); - long error; - long arg1; - long arg2; - OPENSSL_STRING *arg_row; -} TXT_DB; - -TXT_DB *TXT_DB_read(BIO *in, int num); -long TXT_DB_write(BIO *out, TXT_DB *db); -int TXT_DB_create_index(TXT_DB *db, int field, int (*qual) (OPENSSL_STRING *), - OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC cmp); -void TXT_DB_free(TXT_DB *db); -OPENSSL_STRING *TXT_DB_get_by_index(TXT_DB *db, int idx, - OPENSSL_STRING *value); -int TXT_DB_insert(TXT_DB *db, OPENSSL_STRING *value); - -#ifdef __cplusplus -} -#endif - -#endif 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 deleted file mode 100644 index c2802868..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/types.h +++ /dev/null @@ -1,239 +0,0 @@ -/* - * Copyright 2001-2021 The OpenSSL Project Authors. All Rights Reserved. - * - * Licensed under the Apache License 2.0 (the "License"). You may not use - * this file except in compliance with 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 deleted file mode 100644 index e64ec3b3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h +++ /dev/null @@ -1,407 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/ui.h.in - * - * 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 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; - -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 - * 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/ui.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h.in deleted file mode 100644 index eb9a580f..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ui.h.in +++ /dev/null @@ -1,384 +0,0 @@ -/* - * {- 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 deleted file mode 100644 index 473b04ed..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/uierr.h +++ /dev/null @@ -1,38 +0,0 @@ -/* - * 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_UIERR_H -# define OPENSSL_UIERR_H -# pragma once - -# include -# include -# include - - - -/* - * UI reason codes. - */ -# define UI_R_COMMON_OK_AND_CANCEL_CHARACTERS 104 -# define UI_R_INDEX_TOO_LARGE 102 -# define UI_R_INDEX_TOO_SMALL 103 -# define UI_R_NO_RESULT_BUFFER 105 -# define UI_R_PROCESSING_ERROR 107 -# define UI_R_RESULT_TOO_LARGE 100 -# define UI_R_RESULT_TOO_SMALL 101 -# define UI_R_SYSASSIGN_ERROR 109 -# define UI_R_SYSDASSGN_ERROR 110 -# define UI_R_SYSQIOW_ERROR 111 -# define UI_R_UNKNOWN_CONTROL_COMMAND 106 -# define UI_R_UNKNOWN_TTYGET_ERRNO_VALUE 108 -# define UI_R_USER_DATA_DUPLICATION_UNSUPPORTED 112 - -#endif 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 deleted file mode 100644 index 05ba4632..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/whrlpool.h +++ /dev/null @@ -1,62 +0,0 @@ -/* - * Copyright 2005-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_WHRLPOOL_H -# define OPENSSL_WHRLPOOL_H -# pragma once - -# include -# ifndef OPENSSL_NO_DEPRECATED_3_0 -# define HEADER_WHRLPOOL_H -# endif - -# 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 { - unsigned char c[WHIRLPOOL_DIGEST_LENGTH]; - /* double q is here to ensure 64-bit alignment */ - double q[WHIRLPOOL_DIGEST_LENGTH / sizeof(double)]; - } H; - unsigned char data[WHIRLPOOL_BBLOCK / 8]; - 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 - -# ifdef __cplusplus -} -# 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 deleted file mode 100644 index ac132633..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h +++ /dev/null @@ -1,1286 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/x509.h.in - * - * Copyright 1995-2023 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 - */ - - - -#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 */ -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 */ -# 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; - -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 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; -typedef struct x509_attributes_st 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; - -/* 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; -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))) - - -/* - * 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_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, - const char *propq); -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_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, - const char *propq); -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(const 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(const X509_REQ *req, EVP_PKEY *pkey); - -int X509_check_private_key(const X509 *cert, 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); -void OSSL_STACK_OF_X509_free(STACK_OF(X509) *certs); -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); - - -void X509_PUBKEY_set0_public_key(X509_PUBKEY *pub, - unsigned char *penc, int penclen); -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.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h.in deleted file mode 100644 index 72103913..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h.in +++ /dev/null @@ -1,1092 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * Copyright 1995-2023 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_ex_fp(FILE *fp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, - const char *propq); -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_ex_bio(BIO *bp, EVP_PKEY **a, OSSL_LIB_CTX *libctx, - const char *propq); -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(const 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(const X509_REQ *req, EVP_PKEY *pkey); - -int X509_check_private_key(const X509 *cert, 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); -void OSSL_STACK_OF_X509_free(STACK_OF(X509) *certs); -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); - - -void X509_PUBKEY_set0_public_key(X509_PUBKEY *pub, - unsigned char *penc, int penclen); -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 deleted file mode 100644 index d3dfff8c..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h +++ /dev/null @@ -1,901 +0,0 @@ -/* - * WARNING: do not edit! - * Generated by Makefile from include/openssl/x509_vfy.h.in - * - * 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_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 - -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); -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 -# define X509_V_ERR_RPK_UNTRUSTED 95 - -/* 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 *xs); -int X509_STORE_lock(X509_STORE *xs); -int X509_STORE_unlock(X509_STORE *xs); -int X509_STORE_up_ref(X509_STORE *xs); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *xs); -STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *xs); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *xs, - 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 *xs, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *xs, int purpose); -int X509_STORE_set_trust(X509_STORE *xs, int trust); -int X509_STORE_set1_param(X509_STORE *xs, const X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *xs); - -void X509_STORE_set_verify(X509_STORE *xs, 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 *xs); -void X509_STORE_set_verify_cb(X509_STORE *xs, - 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 *xs); -void X509_STORE_set_get_issuer(X509_STORE *xs, - X509_STORE_CTX_get_issuer_fn get_issuer); -X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *xs); -void X509_STORE_set_check_issued(X509_STORE *xs, - X509_STORE_CTX_check_issued_fn check_issued); -X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *s); -void X509_STORE_set_check_revocation(X509_STORE *xs, - X509_STORE_CTX_check_revocation_fn check_revocation); -X509_STORE_CTX_check_revocation_fn - X509_STORE_get_check_revocation(const X509_STORE *xs); -void X509_STORE_set_get_crl(X509_STORE *xs, - X509_STORE_CTX_get_crl_fn get_crl); -X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *xs); -void X509_STORE_set_check_crl(X509_STORE *xs, - X509_STORE_CTX_check_crl_fn check_crl); -X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *xs); -void X509_STORE_set_cert_crl(X509_STORE *xs, - X509_STORE_CTX_cert_crl_fn cert_crl); -X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *xs); -void X509_STORE_set_check_policy(X509_STORE *xs, - X509_STORE_CTX_check_policy_fn check_policy); -X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *s); -void X509_STORE_set_lookup_certs(X509_STORE *xs, - X509_STORE_CTX_lookup_certs_fn lookup_certs); -X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *s); -void X509_STORE_set_lookup_crls(X509_STORE *xs, - 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 *xs); -void X509_STORE_set_cleanup(X509_STORE *xs, - X509_STORE_CTX_cleanup_fn cleanup); -X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *xs); - -#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 *xs, int idx, void *data); -void *X509_STORE_get_ex_data(const X509_STORE *xs, 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); -int X509_STORE_CTX_init_rpk(X509_STORE_CTX *ctx, X509_STORE *trust_store, - EVP_PKEY* rpk); -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); -EVP_PKEY *X509_STORE_CTX_get0_rpk(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); -void X509_STORE_CTX_set_get_crl(X509_STORE_CTX *ctx, - X509_STORE_CTX_get_crl_fn get_crl); -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 *xs, 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 *xs, X509 *x); -int X509_STORE_add_crl(X509_STORE *xs, 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 *xs, const char *file); -int X509_STORE_load_path(X509_STORE *xs, const char *path); -int X509_STORE_load_store(X509_STORE *xs, const char *store); -int X509_STORE_load_locations(X509_STORE *s, const char *file, const char *dir); -int X509_STORE_set_default_paths(X509_STORE *xs); - -int X509_STORE_load_file_ex(X509_STORE *xs, const char *file, - OSSL_LIB_CTX *libctx, const char *propq); -int X509_STORE_load_store_ex(X509_STORE *xs, const char *store, - OSSL_LIB_CTX *libctx, const char *propq); -int X509_STORE_load_locations_ex(X509_STORE *xs, - const char *file, const char *dir, - OSSL_LIB_CTX *libctx, const char *propq); -int X509_STORE_set_default_paths_ex(X509_STORE *xs, - 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_rpk(X509_STORE_CTX *ctx, EVP_PKEY *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); -void X509_STORE_CTX_set_current_reasons(X509_STORE_CTX *ctx, - unsigned int current_reasons); - -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/x509_vfy.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h.in deleted file mode 100644 index 7a478d11..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h.in +++ /dev/null @@ -1,804 +0,0 @@ -/* - * {- join("\n * ", @autowarntext) -} - * - * 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 - */ - -{- -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 -# define X509_V_ERR_RPK_UNTRUSTED 95 - -/* 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 *xs); -int X509_STORE_lock(X509_STORE *xs); -int X509_STORE_unlock(X509_STORE *xs); -int X509_STORE_up_ref(X509_STORE *xs); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *xs); -STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *xs); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *xs, - 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 *xs, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *xs, int purpose); -int X509_STORE_set_trust(X509_STORE *xs, int trust); -int X509_STORE_set1_param(X509_STORE *xs, const X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *xs); - -void X509_STORE_set_verify(X509_STORE *xs, 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 *xs); -void X509_STORE_set_verify_cb(X509_STORE *xs, - 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 *xs); -void X509_STORE_set_get_issuer(X509_STORE *xs, - X509_STORE_CTX_get_issuer_fn get_issuer); -X509_STORE_CTX_get_issuer_fn X509_STORE_get_get_issuer(const X509_STORE *xs); -void X509_STORE_set_check_issued(X509_STORE *xs, - X509_STORE_CTX_check_issued_fn check_issued); -X509_STORE_CTX_check_issued_fn X509_STORE_get_check_issued(const X509_STORE *s); -void X509_STORE_set_check_revocation(X509_STORE *xs, - X509_STORE_CTX_check_revocation_fn check_revocation); -X509_STORE_CTX_check_revocation_fn - X509_STORE_get_check_revocation(const X509_STORE *xs); -void X509_STORE_set_get_crl(X509_STORE *xs, - X509_STORE_CTX_get_crl_fn get_crl); -X509_STORE_CTX_get_crl_fn X509_STORE_get_get_crl(const X509_STORE *xs); -void X509_STORE_set_check_crl(X509_STORE *xs, - X509_STORE_CTX_check_crl_fn check_crl); -X509_STORE_CTX_check_crl_fn X509_STORE_get_check_crl(const X509_STORE *xs); -void X509_STORE_set_cert_crl(X509_STORE *xs, - X509_STORE_CTX_cert_crl_fn cert_crl); -X509_STORE_CTX_cert_crl_fn X509_STORE_get_cert_crl(const X509_STORE *xs); -void X509_STORE_set_check_policy(X509_STORE *xs, - X509_STORE_CTX_check_policy_fn check_policy); -X509_STORE_CTX_check_policy_fn X509_STORE_get_check_policy(const X509_STORE *s); -void X509_STORE_set_lookup_certs(X509_STORE *xs, - X509_STORE_CTX_lookup_certs_fn lookup_certs); -X509_STORE_CTX_lookup_certs_fn X509_STORE_get_lookup_certs(const X509_STORE *s); -void X509_STORE_set_lookup_crls(X509_STORE *xs, - 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 *xs); -void X509_STORE_set_cleanup(X509_STORE *xs, - X509_STORE_CTX_cleanup_fn cleanup); -X509_STORE_CTX_cleanup_fn X509_STORE_get_cleanup(const X509_STORE *xs); - -#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 *xs, int idx, void *data); -void *X509_STORE_get_ex_data(const X509_STORE *xs, 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); -int X509_STORE_CTX_init_rpk(X509_STORE_CTX *ctx, X509_STORE *trust_store, - EVP_PKEY* rpk); -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); -EVP_PKEY *X509_STORE_CTX_get0_rpk(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); -void X509_STORE_CTX_set_get_crl(X509_STORE_CTX *ctx, - X509_STORE_CTX_get_crl_fn get_crl); -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 *xs, 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 *xs, X509 *x); -int X509_STORE_add_crl(X509_STORE *xs, 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 *xs, const char *file); -int X509_STORE_load_path(X509_STORE *xs, const char *path); -int X509_STORE_load_store(X509_STORE *xs, const char *store); -int X509_STORE_load_locations(X509_STORE *s, const char *file, const char *dir); -int X509_STORE_set_default_paths(X509_STORE *xs); - -int X509_STORE_load_file_ex(X509_STORE *xs, const char *file, - OSSL_LIB_CTX *libctx, const char *propq); -int X509_STORE_load_store_ex(X509_STORE *xs, const char *store, - OSSL_LIB_CTX *libctx, const char *propq); -int X509_STORE_load_locations_ex(X509_STORE *xs, - const char *file, const char *dir, - OSSL_LIB_CTX *libctx, const char *propq); -int X509_STORE_set_default_paths_ex(X509_STORE *xs, - 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_rpk(X509_STORE_CTX *ctx, EVP_PKEY *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); -void X509_STORE_CTX_set_current_reasons(X509_STORE_CTX *ctx, - unsigned int current_reasons); - -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 deleted file mode 100644 index 71b557a3..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509err.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * 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_X509ERR_H -# define OPENSSL_X509ERR_H -# pragma once - -# include -# include -# include - - - -/* - * X509 reason codes. - */ -# define X509_R_AKID_MISMATCH 110 -# define X509_R_BAD_SELECTOR 133 -# 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 -# define X509_R_KEY_TYPE_MISMATCH 115 -# define X509_R_KEY_VALUES_MISMATCH 116 -# define X509_R_LOADING_CERT_DIR 103 -# define X509_R_LOADING_DEFAULTS 104 -# define X509_R_METHOD_NOT_SUPPORTED 124 -# define X509_R_NAME_TOO_LONG 134 -# define X509_R_NEWER_CRL_NOT_NEWER 132 -# define X509_R_NO_CERTIFICATE_FOUND 135 -# define X509_R_NO_CERTIFICATE_OR_CRL_FOUND 136 -# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105 -# define X509_R_NO_CRL_FOUND 137 -# define X509_R_NO_CRL_NUMBER 130 -# define X509_R_PUBLIC_KEY_DECODE_ERROR 125 -# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126 -# define X509_R_SHOULD_RETRY 106 -# define X509_R_UNABLE_TO_FIND_PARAMETERS_IN_CHAIN 107 -# define X509_R_UNABLE_TO_GET_CERTS_PUBLIC_KEY 108 -# 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 -# define X509_R_WRONG_TYPE 122 - -#endif 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 deleted file mode 100644 index e64da7e0..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h +++ /dev/null @@ -1,1454 +0,0 @@ -/* - * 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 Apache License 2.0 (the "License"). You may not use - * this file except in compliance with the 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_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; - -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 -# 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; - -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; -typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES; - -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; - 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; -}; - -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))) - - -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; - -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; -} 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; - -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; - -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))) - - -typedef STACK_OF(POLICYINFO) CERTIFICATEPOLICIES; - -typedef struct POLICY_MAPPING_st { - ASN1_OBJECT *issuerDomainPolicy; - ASN1_OBJECT *subjectDomainPolicy; -} 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; - -typedef struct GENERAL_SUBTREE_st { - GENERAL_NAME *base; - ASN1_INTEGER *minimum; - ASN1_INTEGER *maximum; -} 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; - 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; - -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 -# 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_CODE_SIGN 10 - -# define X509_PURPOSE_MIN 1 -# define X509_PURPOSE_MAX 10 - -/* 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); -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 { - 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; - -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 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; - -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 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; - -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; - -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 */ - -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 - */ -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) -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( - 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/x509v3.h.in b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h.in deleted file mode 100644 index 56968037..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h.in +++ /dev/null @@ -1,1021 +0,0 @@ -/* - * {- 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_CODE_SIGN 10 - -# define X509_PURPOSE_MIN 1 -# define X509_PURPOSE_MAX 10 - -/* 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 deleted file mode 100644 index deede279..00000000 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3err.h +++ /dev/null @@ -1,96 +0,0 @@ -/* - * Generated by util/mkerr.pl DO NOT EDIT - * 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 OPENSSL_X509V3ERR_H -# define OPENSSL_X509V3ERR_H -# pragma once - -# include -# include -# include - - - -/* - * X509V3 reason codes. - */ -# define X509V3_R_BAD_IP_ADDRESS 118 -# define X509V3_R_BAD_OBJECT 119 -# define X509V3_R_BAD_OPTION 170 -# define X509V3_R_BAD_VALUE 171 -# define X509V3_R_BN_DEC2BN_ERROR 100 -# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101 -# 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 -# define X509V3_R_EXPECTED_A_SECTION_NAME 137 -# define X509V3_R_EXTENSION_EXISTS 145 -# define X509V3_R_EXTENSION_NAME_ERROR 115 -# define X509V3_R_EXTENSION_NOT_FOUND 102 -# define X509V3_R_EXTENSION_SETTING_NOT_SUPPORTED 103 -# define X509V3_R_EXTENSION_VALUE_ERROR 116 -# define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151 -# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152 -# 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_VALUE 109 -# define X509V3_R_INVALID_NUMBER 140 -# define X509V3_R_INVALID_NUMBERS 141 -# define X509V3_R_INVALID_OBJECT_IDENTIFIER 110 -# define X509V3_R_INVALID_OPTION 138 -# define X509V3_R_INVALID_POLICY_IDENTIFIER 134 -# define X509V3_R_INVALID_PROXY_POLICY_SETTING 153 -# define X509V3_R_INVALID_PURPOSE 146 -# define X509V3_R_INVALID_SAFI 164 -# define X509V3_R_INVALID_SECTION 135 -# define X509V3_R_INVALID_SYNTAX 143 -# 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 -# define X509V3_R_NO_POLICY_IDENTIFIER 139 -# define X509V3_R_NO_PROXY_CERT_POLICY_LANGUAGE_DEFINED 154 -# define X509V3_R_NO_PUBLIC_KEY 114 -# define X509V3_R_NO_SUBJECT_DETAILS 125 -# define X509V3_R_OPERATION_NOT_DEFINED 148 -# define X509V3_R_OTHERNAME_ERROR 147 -# define X509V3_R_POLICY_LANGUAGE_ALREADY_DEFINED 155 -# define X509V3_R_POLICY_PATH_LENGTH 156 -# define X509V3_R_POLICY_PATH_LENGTH_ALREADY_DEFINED 157 -# define X509V3_R_POLICY_WHEN_PROXY_LANGUAGE_REQUIRES_NO_POLICY 159 -# define X509V3_R_SECTION_NOT_FOUND 150 -# define X509V3_R_UNABLE_TO_GET_ISSUER_DETAILS 122 -# define X509V3_R_UNABLE_TO_GET_ISSUER_KEYID 123 -# define X509V3_R_UNKNOWN_BIT_STRING_ARGUMENT 111 -# define X509V3_R_UNKNOWN_EXTENSION 129 -# define X509V3_R_UNKNOWN_EXTENSION_NAME 130 -# define X509V3_R_UNKNOWN_OPTION 120 -# define X509V3_R_UNKNOWN_VALUE 172 -# define X509V3_R_UNSUPPORTED_OPTION 117 -# define X509V3_R_UNSUPPORTED_TYPE 167 -# define X509V3_R_USER_TOO_LONG 132 - -#endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/lib/libcrypto.a b/deps/openssl/android/armeabi-v7a/usr/local/lib/libcrypto.a deleted file mode 100644 index 139a04cfe144a0a769d23e76092eca54b12f5153..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6918166 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 z z@HWM#O5yMN;F+9n;-PhikA6R(@tESH@s&RKW`%3H+ZC?)$a_W7Q{(b{O87#h zzkWWgR(K}YYdgQC3ZJ0p_4~R>3Sa9(-=c6$ub=yLes?K)jqg>sZZGnjXxFz_ncl8% z?TiaO_OLbXphYkEyGpKZFZOfjXy#)-hYIfSc%JO6+sk8YL&Ej<(|ta8hYvo3cZE`OXY)*OKNOCoP53b1(E_tGB zdEZF5oegN83&8Ot`jNocR;3?I!h>aBZK*6}`64 zE`{rS>G~kL6KSKO*LdbRZUo8Ic($UKxi`bUgCR-;1R~@TK9*;6t43na)m#W`Hm|@uF&7Y`6}duk}tt^x#)aFm|pnY z%Y5wmCipC-xAT>2@!`wFjAGG8aBT_0S`V|Tv zqHwMMg$n<#sK3~jvhiOEymIxV#5jZ}E}$S5H~EykBB<5_*dMc^pA! z*=7h4e9AjH!gafAbYX+*cK3+Fb-R02;kw<4eTctqcf(nK!gafo@fG2^-8CqB-R|VO zA<;`6AXRoLdi~wxkisuzoyn8;Uc^Vw6KLRmnsDhGiT*K#>v5xu^NC(Rr^vXSa6O)x z$m3zc^>|pmn-H$wqsn&;!iz`|cJh6J@TmfluMV~~hse6i?Y~@xO$e}npH}8KeA!8! z1WWq@;DpzLvf7&Y2s?E6YH`g%Y*=s&wgtdps|uN3Q&(O~kdmR6shef%-cjxfcF#CB zio{-D>~~o4(yH3>(TP)idCLab(STRn&zv)7M%k>Q*+tivxtkYYOMp7;2{5{%e(~a} zx<<-64C1YO+0rVCQ#{OW1K1LwECn?zmoBfsP6Te8ns%rcz+ zYYtsLWrdU-9aMEU{0(Ert;eKNR{D8rD1DId@04Owo z`Na=_aRxBI<5b_zcZ0FItfPshXb>b(j1$u4$mIz9+d5Sg!Wi-gf<WKJZ7DtV#DR)hwTkkZ>LWg`>`7c;-f zpKK0_PilI}Z(+Kf?2Bj1r*{m5MTCI;r+Ba-<4$^RCAv(Gm*;`&U_USUGOuhO(~D=z zpN{li^20o+k#QQyCmY-HFM@C{`ICA4CF4s!`Gb+zOMXYhP0>!w;YdEow&mZ0#9s1c zzRvxu2k{_h=l^a1Uh;QMap~nOP?AsMY+F7ZQ0XOq7wk%|r|TttZTa^gy_fvRHEt4V zXe6I_+47G=xR?CBEMM03ivqU%qe$!}zk%h4`5}Vj_wtb66^++Rep3%u;_31qKzc9v z>-lAo&Ofy|JO6`y?7yDn>t_Pe$j*PBkNw+NevA^qQU0lqu;p(7=9T}QEdOc5YiG;9 zACX@95A(}q-TrexYs>!%FfaLWHvCR4oMmY!&R9f)2(O*%0$P3_K(_oBeagR>>rKpM zllZms|C~?xAL5r%(tnZtsn4_Je+dk|^8X0S4}-sUw)`ak2#aVUgm>}FxB^a3^84f8 zmQV3s@^?~Yg_HSa?p1pIyTm8|onLTMv~fa`pND^2{(PVOZ>Guu*F?%GXXpP5KKXx& zC%=R_J;|r{0Ji*oKJxRZvcSoAP4_B2|2aPL_wi)ViAsJLOlj97Hp?@&Ot{_B18KS-4wPVXl{*S7xaeCkgJ z%P*lsa8!O5;@_74M_^w0pLh`>;9}-C`D4r9izu)B7tD9l==@&{$d-SzPyRQv{K}+g z6SC!3`Q$&dB3=Fn5BW5v@yh>kmfz^IN&MRKDXmxj+gW}arzHE+doDZw^c{_OAR8&J zfs6&W-t`i{l3oCMZ|Nn!rP8HnV?vTo@6#kbS1;#xKJw*d-Rb1-_K_c}as{`!o~eJd z+TNDG#Yg`7;cmjy$*1>=Uil9%aMQQBo{>-Q4Q=_~MFjv0XDri+7pBSrw;SUF?TD6~ z_|p+jVY~beQDMW$ybJd#DPOK>KB$-e?W}*81yT7G5-+=2g6=tsacqtgUsK#Ve@I|M#S|B7 z$C&j)swi$x4J9sGbj=VC3;Ilks<@B8pf8P25 zZ2bPrpgAAW*g4{CSRQn3gkhRFt2@?*&TUfrTwi2ekG8JYOm95^dOBl_bdJHEsn=Jh zTssGy`q*7}PmbNS2LE5de-r*!S*;QSzA9+{o zOWqCplV@U|^6ogxDGO&g1#pHHoiP?Ub_C~<(V0$kh85{UXFHJ}@9Gq`<6JO0lZvkK z5}~l2%LJX~_Rc|(V_0*reIw4W??Cy``B!viV!Rv92g6x%gK>uGYxiE=O6PLz58;e4 zobCBK^8JP>pKGDZHPER9x?K$&r(@6bX|2$i${eOO)05W2r^od5Xa?r2N5aE6?|CrJ ztj{_Fx&Y|p>@w61ItvSDU-`?XazCwXoJA}=-^H242fi@{dAz{b>2>7sAoBVK^7-Z& z`nQOv!os8e4?Ck!q~@Mw>`w0GIZNhQbq^!Px8w&b*#9A}I#q;o&L~dg1==3$PiN2}Q7QU1l6xMW@pA$=_gS}p(4SFVlJcbU7PbB-SJSzE zJyAc;K|Sq-`g$(vZ8q9aZ}bTvoL`n~J8pYIz3n0G#yyKJo|SAjZJBOcp*BWsq#b7h zQ~v0@-*)a-I{sGN`q7`JwsyWft+iuy(A2GC=wnRYk>?&b@0aSvs*rOS_oVfi0cXRJ z;J5F~2sGb!th=-Q;Q8*J`X5pG;kq4lWJFmry>9Aw|7{(Aby}f|(Jg}ez(YvWj&ngt-fO6f2hXQ^*eB5* zh%eQ}7SQeI`isZ?vnr!xJH7#BF$-lf6J>+5{pznrA2OpAWoFK@+yAwx#&)mWTip8k zebZXsd}w;>`@eHqvChlrdkAen^7;E-Xc76^$0;m)2ePVw%XFK(! z=6-?vhP&eoce;P!Ecax6ch4+tN1Z-`euC#%TcOGXDu68zb!d7(V`-h=!uyI%PQ(a)c44l6h z+IAH8v15oMec~CNm!qsl=HvX;XK~JCJL)juADZ-TICEuWBjw>B{*(F4MV|Vj?E9kL z_CY^;!M2W7RKAYspV8kPrvC0s@>%YV!(98orti;8JuBqIZBua13z+(Py8E@x>rv$O zL*(^1@@m>S@9ojYQgEN2gM^)MdgwV*yF??<_Ymjlcl2lNHKTVG=6FZPe4`rT*S5b&n7Z5Sga)4FG;hk;cG`~Nx~ z?7uEQkoykB_ZzeMz5`sIq~jH#{_AeTIlTFS0q-36@MP&E@WZn~4%q>7Z;Y?+eU?+y|0%%Ef3*otYWgVfz2x zxUbRqr#RPL=tw7Ok2cl@TiIA7;EXRpK68=3E#@3~zTaTHyfq*9&2yY3bQUY|#J}%Y z%5IBz*3O~xU+8{59Q~%tnLQ)NI?ylT-hXT>{Ma|9(4(9g>r-8${8X5JF$cDG`ylC;BFH=SL2~x_Q8OMs zgR{>=gJ1qg-OH(b+Cvy~;{F$O?wn2a`zZRGPV_g&(BFKB{>Io9ZRE*M;Y@ANPJvt* zD@SndJYj=@5nY?9|1^fB`)z-dmde@4F!xrsoy1`m!YEA`;jQB^y2E+uE?wVkL&5Jr zXzhI_9_@ngEkm7`>AD5uG`glR>PF$Cm*X7c*PIQHtS;+x%YmLz&NqD;(NOykdg_Bu zh6bPVoN1(SP!1^$WuM~gcPaFIt{on^Q=B|g3&@{d&Jh?vtx##l41;FTnYWkIVTwpbp2jt10O!|mp>0jRD|N; z4$_a%;XD?i48D{+r-FFa5)Ir$`jInc3?&X+376nxjlcYP6ryNwM6Qi~^m#Fv4`h9> zXRsx4Rt(PaSOJoqLYlC%k>k6Y=a1^PXl*6iI<+^Yq- z@;~S$%N(@=n$$y0U z`UD%1FY};GnHTpu^%**u;NWqF4rSfT&BeE~vpK8fb}$J#$|)AxT$-%qP4U^ zXFvisb(*h2DXX+xup5dbsBmdZZy9~?=E8EfLZ5(qI7XbQb4(LbdP=gt7(Pk;1wUZ) z#2XTJrp|LXgx%b2_mI&uiHn}E82(9I(#1d@aOe@xb<_um3pscbY`Iy+&Pm+#aiG~{ z_$P6lEaY6EFHM;Cs0k`u_Nw~1;ge2(iILkc!AJV&nXpeFu_6+7W{Qsu|G^3RRQvOU zmPD-MTxRT+#Kmq`n|hnXCCT%qd@q$tXFc=~7fM+@2IQmlD(--=W(jRnoF2y~4!EQ?b zV@F?#?{)ZiCClgk?C^8)+qRH4F@_ZXrlUVkH;eMLIgfP5*Bm{s)};xr>q@{`&OW6$ z3Dc(kXvMLP{sP@B%F{)ww)$Pe9etrcXoX`=PyGO|XcYa*;ZqBMlzxKooc9%B%7Q)) zKZbrAhqF7z;XlK95r_9B(0?w0{@et5#)ygI|9=wbKb_EC#Ey>T^ScE4RS9}Nl|X-8 z0{v7NE>8cCC+MF|z!xXrj6oB}pW|p8{>23S|15z|QcRG~B=G0Uv^cr56Zqefpbtlq zI6mJ`;PZ`y<2x~d|Fa4F-8Q~KtCK| zVp?@VKPJ979${imbvm@5JAK&a3dXEj%Jk*edpAO(1g8(a#dSm_pUZ`YS(TKD0ly;w-<*JV8vIHrGuvfwy|xp2Qt;3|J%We!VLxP|{`J1- zeyx2h|F>%Y8sW*c;4FVVUX**4k(-fnsQ(1PL;Y(75B1kR6XN!GS$&onKJ%o^tTh4O zn1EY-t`-_*GY!4!M(7%Yt8ED_G`P|b(&J8hs%?quac6t4B_OFs^3a~o2p-yVPe2cL zE@?kedc|Lq{giv1l$pI^aH~(B;GsUh5M24oW^^E+SGflRdc}_j9_lkp2#CK&nIo?= zxYbjA;X^(3zB|;@u0d1>zN$~X6qH`^1|!$nEoX46XQ$vi?lS$-wPL5CZ!qn8#o(4+ z=d98Ww*Tn!3i0`AStk27S}#ZKGT#K`9vwJJ?F^w1(K_M6sHZD$cNYT zFp-a*Q`~3uv3QkKRJos!ZPiodDxQ)3lzY9DnW?Ra+w*a*p||#L6`aRwfs~oGNtt|X zf4f6))l)X3b}6Wyif@#H(r=aRj(}eA&4N>|?Qfk1xBbnwSKCO^tfALqM@VfF+NZ_P z+wt%|gIl|G3eI-DTguG7AZ6OY;=2T=-1kYD*>eVezrl6Ti#`KHn3!$9=D% zx9zp#iM7u!gg!i82Lum~*D$%+qFie?Z8!O3bp!bzDU*-IM+r_ocAU{ZsrK9{blRWQ zo{HBQK7S--X7y55KDtZ$x$;q5Z9;vtF8A5~|3M{2-X>+`|8?2caX|SiuID@XTRpc1 zd}K4fMxXLgT+gFW&nJa|xYhI71paz{h5TPKeC&NxZ@}j%*?vWG<)iok!Nc|rf__Y) zo>d07=U27hYG+>?&kKU9T*Wg1{kLStgn(Z03k0V=_WaWO2jcep$_hW?4Js75?LQwf z__750R>8Gh^xtFBex>bFe4F3x?6yeC%(@J2?e>`9%3n6~u^pAa;(9(Qy}p^ydZm$dWdZFV#`7bf_6QoSsUQcTczSPjG-SoJOmwj2u^|&amV;A|`aYp;0@=?0x zfRExU1t%Y^OGx{t^3lG2N5Dt%cELkFdVH0S>ajWCqqvTfA)m(#|0XFj>ya|)?Rla7 zN977xv_}eRPsN{=g3{}GtNmQ*6}SD+jwgM>hx*v@M8`wrulM5Rpkq@0iVqi@eC+WJ z$30)$e^;`66t~Y!cARf8{OxsQq2Q{g-oq^tT=i6Znc-vg+!*jteL4a@if=Z2>J>!Z zWpJyfjxDs$jfP(P5%HT0uKk&~(r~x-PvXlBeW#Q|-1ftp4ZZds(yuW1ONP%%gWG;` zi^1*lZ;iqA`bhq(3|=l}x}eD|n?tG%j#r8KG|}Mpt7x6UhvlgY_ekVlY4C-HzRKWg zThglz+}&pA&ocBK2Isq6P5+hc8mB^$+jgm~xZAet0z>~++oe@$pE_*lc&@TST>H7= zN@wMg&&9&HQ*x!(@nlbc>-l>iz~{)eX3FOi3Iz23)AZjd`sw+i`hQ*UEbPvt_)~r} z|6ZDF1KRUwuIwjn&!ZND+w*9f!R>jZ_9q{E9?iuz6LEVU={QWh+LO3n9ao9l^Jtsl zW6z@(4Q~6nUCUAX6b0y-LF8}yxn1LNiqU6>7>o3FygFoX``o8%d62%=@G*<0`FXNf ziV%w~exPC2oU1Qiz;)){>KcrkgS&X(3o^Qiv#Xju>elZv%PKlHa~3RgD>Ys|f4*O_ zk;|OfWxa})Pc+M&ak($7_ElI>v9OAyG}Eu57_9x~lquO$G{x8m;ndyy+KPT5vz9fh zKeCuJdoT7gf^TYC)wBl7#$nCDrE8j6rz~r_v2oqX*2RC^v}Uy~a>yCM)T3xcMyJVu z7Fd*d#GHg2(z`|B9H;o%%Wn$9VH}UUAdK58!x~7W4{YE zTAQ)u1-;%ftNhA&Ny^w|1CK9DC`0Ac9tomr9(3~*^9I`b_p`7we=x^;CcmRtSkn&qvnO{?;I zxX24p=zI5?Q;O?AuE3=lYB&mvFt;XeRoAWDLE^At{ZXk<4a?wz(4Lg-9sV;3C z$O4hF*dn!e^Y-I9vG^DSyQH(J0|Ljp#Kj@CT}xN4#?p{##e}6I3o6wtUS-yfG)qJV zs<`7*SQFB(O6#`stZQAoD{!pPkFXodFitJ3 zHEC9vH0w+H6(#+$k^^2vvUG7stQL9P#UZgjzc^&u?`?6&#e+FdsWjEU(_{19{G-Bt zx!uSEe~l6`uqjH}qOHQlphD4=K8oMt)vpie!}@EmpIA1a(;M%c;JklkJIiHT@3~Gx z|=Y4c2|Kx=BFO&PrjO4<`$pN#)d{zD1v?-N1&wg1zoA1A+hk{7Jc43y7z&Y}Ey z3GF{9^7VPob1Sv~^~vF{s-jY&f1@I(L(v>B-sC1k-tFf=UY?Sex9Fk$3JtSudxgJ znb`g_@gK?`4gM4nUO%uFgG&c}mj9J*k>5TOmE+{^y~vZ;(6*>YyE1s7cndnMEq-g)&F`3rY@oU z>Qj8h2A}1BwY~z^p<>+e+bi-_4&`%5)%uEG3E`A4!;G?xnniv#kNASxO<}Ih7pH%h z)YtD8O0V*D`%4M-J0SY+6+-IIAyMnA{yzdn`8rOc=u(}$EZnVtv>W975AAnI>bC?3R`plDA4@p@_ssAV?IMuv=a8uNwf#3?{0wEYX0s4%lW~}A z=El_L+J2W_lF6r@{!7+OOJ&;UXRvPC-KowsTnWw8!M z`}%LrT=LDbEqAYfdgjuy^p^GOpK+hY3bJgjQ#abBcH-P44@V_y8c)C@<90jO5?Lb|B z3G`KuK-Ycf5066EN0EOXdM-u&1?V{eIeGsC{pY9Bm)c=Vt`*Y-TlTqiwYb(%fv2pi z=lZ5w-zm-Yol=llhIN(FSdTE;qJ4*J&r#=NcSYU5!J0*ElkJ1t7h$cKedD7oKgN0| z+MheIz83p{(&}0$kozf^IqN7aFTi?PeCdC2v4$VZRU zPh{;R?61ne-n!1s(c5QrA4~gnq?~;c#(@mRfPJSIuf6r_nDxx;x|h0^nc6|u0K$3Y zj!h2dcMpz-$lbaR?PC9M+h*Ld^?0oH{OFaj!PoQaBxTW`eEW*mv;t~dpk5_FB? z#QOl7aA_$@dhJk9Zjp7_OhjEP3!WewNY`6;2Q>Cg+_cS8Kkfsx;tDWWT14Ros#$sluqmSmk*TRK{=EJtRij#h;ip9fp+6%~$#E4}UOs zXz{l5f75v{`aYu;tTHk{xO?omm0WMZ>mh4J3~`G^WE=b{6lCoE(H2TQ<;6DX`_hL( z9etaywnw2&B#BEmq2s=lwH7$1&#txL>I4o5F9W|UC!xV09RzyxJxO@&=T zOW)JDwH8u1u6C^j`|K6BcEZDsUS3pyqxOdf9RC6?Vk7pORQ~KM^lR>qTRY)Xj*mQu zD-+4%)=1#Ox@BhV1l7mC%N-GLh@uyqJ|pvZ@o_vgk85F)Yi|K}eH}YDIXw%w(%<87 zzI7~3>4yGSlYQ1pbOFSJ+pZg==7-OT3?JA8D0 zTMN_BuZHV}$>)MT4!;gGariHByy9>^l*Qo_68Qgf0zD2_ET4xH=ub`H&xeyZeQ-}5 zi$9Wpe>4HVGl4&QLY&-13HX}{?YbcWuSsZcdjkEH3HozRQ=FckNTBC}qjB`lC(xgf zfcGTe--mrhm^DZ`vCX71ImeUNY)yIwaZYYVLF9Tya89npwJ!O{XAW1ZPU;e$EM;ah zr5y6l3Lf&G8_JW_}Jb`Pk#$E(FR)=Y?(z_$Yp#;Gv$K2Df@XCb;sK z%_1M8jDpB_NjcQ>S;3XhSlNC~a&52Tdkr6J&jSY6`OSom7+j{OI7GiOQ6D`<+);&X zCgSh%MfaN#T=mrBhxcVJsh)~kA2OX+O+xjVAb&gF<^uknE5^fszv9gSy`FpeOr!cJ z-YWEzYscG-2G?_3WiV%Zb*$jFJzp$d&7DYUpZEFAlIxM;T9^7Zp7_V zn~s6R?bDOmhxo7po4nsDarq4D_AWGX<@1z7nhkEp)i#5xZiG4vK1#|qqudMt9rvvM z#C4p}7#I2om93XD(++z4>TO8w(365?qd;#SIWy}|?S-f)j5|r&c$>JA~ zZa({f=B!WQ%xt{f^fPhYJ5R@oQ)kWW+@wkC#bWKubvp^!wSccu3*_-r#f#p%25(W# zq|gEzGUW`~!qn}UInc%AZ)duO!JsM$wxPixX?+UC9P31 z5xYPk2eX8tF#UJ&jVl{(TAQB*?dNV67?jS{E^a3$Y&&L{nM@Z7H?e!w>ei+yS6=tN z3o)g3>54q>{%2SR9uMnUZ>+S0}kXwSTY3-zya}$oUpJl>a!eIQe}9k=lHg{|)7LVNaa=9dc3Uex?lmdA|_KUzA|~ zoZO7;LLHkz`5#EI|3bO3%1Px6a(>GU<$nh4jB9^2_%hjh8E%L2x1w@f`*(?aJxMdD zdlLRb`ELS?lg~M)O!oaew?p}F2$tnellt_=Qut)Bk8jyS`Be%1Z>I?Aul*+{^uIp2 zd9&?jmki~PPq2TF$k+QyRCOtAKj*d*%lh5<-)ecqo}qD(GWe%SLixNuC5e~`C7*I~ z)7zSI<%{_*F6~x8a?&zs{sZa%9xeR-kqRn6uB7!8{wg{SF|a90IjJAcZ4TLf z3H9Ub-zn|iD_k?k`IScNYx_Tj%AsslIV2BfZPE{@}@`kmWXdr7UQ z8Tj139p;5^7CP{3Jr`C}TgJ_^L!%0F{3^{HKg_d%4K`N{YM(zDbAE76AC6MlqZQTB z?jg<5ZghmBut!xmpN}#Qz9;2k*Sfh?QDI(Qma%;iUki$D%?-hvJj_{YABk-%Y zQ9o}jgE?dEgAwcZo4{W7SUYrVABowjLmyvcK1ZYAbsP8x!pM4oAJM;Yia8F zM-VscD;vffVjn;})-B9?Pn`YuBiP6JTYZQ<*7>LJe!MH~X&7Jd{1X{R(a$SntXbA+ zM+~&j7sVL!^Gh+k_151aP9okpSM?!&X&>f@^CCw_HjeG{|(G*d>#K-5B=6g zv>ESt(O12FIUf;i-r0w^&RzIyGbVM~{v4KpeE+HK^T)HT==U8scW|z|`MRvfxrm3B zWH~f%<-EU69GjObFYj(%bN2OP($TH2oIaM1D{uM?))6* z5MztJ@qwuO)w81AKff4rEKkLG4_?2;;_=_Z{JrKO|N6kIpesM;A0Mbca%|@%uuFfo zL#(>VI(L%o^>*>|4Ov%@3+E>Kc&KIi*J zAXfD3XvKkPs-Q1jg*-kj##9ePlz#(+iF9Wd+`~E`$9Z-vY&g}aifh>=#Nz= z#G~V%=P-^vHDp%)d?3d0*X44KX!{Z4lCR-i-03h@BAx|{VkLH9jQflA z(Uwm?idf4<$NzK}|IqQl`MK?z(U#A=9MUlEsER7w7+b%X z9)0MQGor(fJUx0>C&t*mGosz!czR6T=OKr&YWE?&>&s~$i@AD8w6p7e##kS-efym3 z;Y)FS*@^g$uOkj~#o3H|8r?eaOC2MBjycZTZ^v~P`zM{$arLM>=iL8uj1>qR`TX@y zP1@8qr00X3>BWb-HjLRt+b|YxJ7U0gJ$=J2#-V-+<5(}^Q~G$%UN*;fk8%G0D0iHC zU3^Q>As+Oj=^NZN1osrReWzx3@4+#AZM|#+>H(AajDzxB3v*{Oe^^`yZXQ^#SS_rB2_(I;8(@S(PjQc5pP} zb=d7q)ca9c_5P*kw~SwVG5F)0uJZAtRgeDT!5`beV_V++o2#S4N7H3n=+}?|uSQ(Q zX8UWI>tB6O`+KCm@jma}&@*!%uzeezn#ubdwD)lDhCi9PZ^Jz^`!0)IKjt;E_j?bI zJbHUQ_#@WmhB6lm82zp&LGPl3Tj-+1`)Ql(_Y30Xb|=bwFJO~AI^>}t`BFk*#S*?d zmo+5Zdr}vda&6B5x}f7dp(U=@tk)oY?P z(bahAICWZ`%co7h#K*;)!)ef7Z18G->FRZ>S|Q*@$Xvpg!%Nq#ZC!nf)jYI^?t8m) zrGMZ2!sC~u-~V*Fu-~e_p`Cx&ml)#LJ69P zT@$&RG)OPy%9kgF{d_K zXjX^^I~||GEC!YIS59sLSGkR#Pnr0I=zu4!`FOM_;giF@3e&bmf;EeJTFD!%OG9vr;-gqpHBp`+OA57Rm2So8zUR_u)8O zH;eMLTk)X?io6d;!JfL;`(%vO&3x{CDaPlwwQxE5XK8Q1yehOe4*w*MdmPT#uW|V4 z34BgSz<-dS53f6M{KqBm;d&@>^q)=O&-DZ1=sC|c4u3I$K535p2NUG}T>{RLElzII z9Qmsf?7(mDaeOXM;QwesyCx>+IVb`Da0357Prx5b;Pd4KdJGS-?Rq&u|2IHC!uYau zVw*{A!?}bt9&*1r0&uS4M1$)Y&AEye*E0D`HT24pe4tuBWu?S#ix$_BjeKzE@@ayU zh)>I-g?X~XFE)6Cp||+51iUQ)?=rZ(`aC9hXrCQ|hxU2W@X@iHkZrH!|5ojf8|L&mnakDbEO>O3leZ^f6GVZl8?59Eb0uOGo{RIp_EmB zwcR4YRe!}-3QqoZ?tH7kRTiPm2A?5iX0|`rIo&-%L;iM7Zm+>-N}1U!Qda$SSDzGA zf5m?h&_j$%2P9W|#SaNiee9fZef}VB^%*7=Lw$4(sqz=L`8nxIuX3xUp!AAoq!8*; zV{oevUl=nff4_zPAh_~Zd}cr|oB4I0lwR?ADTMmaw~~ptog=T`n2BHJN!;%IDzwUL$xYw;`YxHKGLpz2b`mr#`m-@IHr$ zxV2Ba!LyFS|7;XI)RWImOrf6J3?Dl_cxvAtChG?BK~g3ki%$@odd@QR^#-49a2-!b zKgZyUq^$biAlo^~Re#0p_%>H)n6*ebk4Ip{7ES*pHInlkL1cn@n-}N`8;cI+y9>v zT=~nUe>a2;<*)eOfWA$(Uy@wu6@Nu=>SO!=L4(`=Uky4Y)#q%#nSZyV{1v}I=*j;| zp=B11W7V=REA+}o@rDFGIl)yQ%;9ipS-?keeP2X<^c-P@_JGe=&nDU!@KO9e!NYd( z0~(X+qcU_{)pjY~Y53Uw`Iy14@+{piK9sqn{1?f-U4kor#d{1N%l|opTmA%adc}7NPJQfo zt^8=W3v>hdASu&s79S?K+PPA;ha38dC@WqiIOSd~Wo8qk%=`9h46gl@^w%1Er<94? z=b*g?xA&#LNWdf1XCfaE_e#`+BXPQ8{B@|WFKH6z5NENvWROR zA)StY#I-LGSAB?|MnF=tDKYX6gJ%q`Me?D}dR<_dNpWpwgNO6DUe~N# z)*UN!odNy1vb`t3FO=;A0j|eMud}L8ozP{WHOl?b_Iolsp4sqKbT7?mD+aDe>xbi0Stif%67$)r^AKM=?2Dkk|&qva$&Sc$c z=rbaVS(m}>^N3yt$;V!&qJAUa7=JkbQGMV}f5xKr9xdtkvQ zj?qF&1F+c1F{W?HbQx{tx)yX^L{+)|`fC<9%$h&zT6kR|_)EWWRwNoqLRb|iyMOOL zBeh_^CPYsW?j|Hki3^}RsxiKQ+Ax@_k)D1t&<}lJsikXMokJjg;LGRS0`Y^Qa}LB0 ziiIF2{rCyCO-b?-#2)wwF8jTOF^O)(MI>#;VJ&va%Z=0tiuhcH={(4HQ^W@65nsp# z+q!A5S;RU3uzvUjGs~Sw*>bB{yt9rV^Z%$$u$e*---Hh@(+jry)U7B+BlRCzlT`)?Nka$?^pa*@jU~v zU!#7U{9d`3=cFR#Q+6o76IfjP^}c2Y_S+P;|3U1Glb;>wYjsIw${&LNP<~rN`w*4F6ulMne8Ggd{UzE`PZ6ZG>6}ef3|4{zsg#K48gfD@=O`-fv3H|So$j?Z9Zk~?+ zQ2xh&kt7^{4^{v~())kERoedBup_SjRdZlPYV(=9_vVlk%6}CY<)axz3BFJ+brzw8 z`U<~-LY(}~B7d(Cvi&?IL-{{LWy-hjCRn9h9(KOS4U@#2t`6Y^0OIuDA@$3H^GD?? z%lDvioc_%dJw-+YQhz?PYJJ+0=^F|1cb(+-H~1|7tMwK5n*{kClRSmWp?sdwT3_)N zU{q1hGZbAamxsdL3P>)^$=i?Pi(;1aDf>`qc7(Jq$oUhPIoc!j!#F~!zq0)Q63(Aa zX@9v0Wc$bCU+Zi8SK;7=vdO!5IDexEz5_0i4Q&+Gr?2J3Q#1KglP@L2QJ6M;nx`4K zuVt5<3sfY_AN-yJtH=3RX5e=MT{n+~4_s7U@Ud)%&jsGGaNYH)x8g_Hi~0Yd-(=SL zLl*l@cH-3**E_!(|4?u%^qBtN>H8REqAlyhmnH|lPmJCD`aaUP@vhPIXIzgM40q$d zeJ1@IOMMs9@Ru0eePs2C-M_o396mf1@Z}i-zp$a*M>nLlFkZpy@NLm`e-k}M4?msR zUs2)fVBco^m&Dk}z#s7u_y8K8I`|n%e1Q${^+JCmU%XS}rE=@>_%s?m=&SwGr-l#A zU-EA7#igfTevKo-cAO4>$*XZ3=izu>h2vU}<9lWI(c7;;+<~<7S;5@c$q&!T>^}rw zz^CX(gf{PkACCGAWg++F^vKD5IQBDfj=YNU&(ou@J!JCaihmk8?~CPUy_znc{PAPQ zruQMg_pY)BJrDR!g4e`~JrDH3zlpY^9}w;#Z(VjmwBS|v=WS25&mW5aU#82q1AqRp zikBX^@6I7-byob_$iF`6nyc@th)(&J6QcLN2K=JG8};C=sbN_1Nb}4&OQQtW_&k!S$r2?%8vm9r>%Xqf?$u4V#QLl80W98aDLaJIk*hc6CkN zKOZ^vME!}7kAC)WYS67%(_z7@&~frr&2{rmh(=7lYGNJrTM9eOL!EiYPQ3I}^ce-s z%kZ;1>u$uZK-u^Cv$nqiTd-ZZUmdGG1Yaf6=)NOk+IgAT+WyO9wSDl(>lhkM?<%YQ zc6(X%rZK5e`)T7*Qy+Rj?Yu1wJbl{!vNX>D-~T%IA9H=#^>z5u(a(^5oqT(KeyoMfSFNsqF4CqoNr@tD_mi z%A?!RKX-4xxtaFcGUn{)wRx%NlzC(KjGUAjGPweDV~-tMK)wHIaP<5WlD-5Q>aDy% zUj}^c|c$DZ|5<_lJV`JEL@-S+g?@} zhsR%A=%+o_t$C2m$5VlyspHQv+RHo5`4@fz*DI~pOm3-kw|lP7Z^RW=tXVSMc;j6?fA;jN=Ux$+_#)zgx1#B`$i3`q z#EN~+Y0t6?_11l%Z`45P!geR|8z`OD?=KIJkJ>wIM}K_&5PiHRpwW77Urz(5-iBaU|1J)=OfCE=_3vu1{$14X8PXvgVyBy1 z*^^o{?Ce~TGgjpT!yi25p{mcF{@Lmw>0NMw0*(54egEJ7{iTAh*Kj$J^_>gbI6*L{ zSJ*~G_fQ|U;h=2@>a(pneXrm!*h5F9BOPPU`bvuQhvt1zD#XeE`pz;N%tM5(R z_s|kM4k#>1^h?yx0bcdSe4$to@`$-5lAyeJZRn#IK>sdjP;qq*y| zs4&g(Dd5WE4%ez6*jf^A%aoE!K;RSHgENWp1T4&sqETc}}jpDDk`8?>|6p z%6xU+WA??xD;eeZ6!cW`mvG3-OuP@*7iDK$9FvbaJx6GD_r91LBOLz%t^}8WKIK+` z@<@a3K%UOeh$w)cbN1Ak5>b?sUBevz0$!*=KK5(9-*cj)FU7exF22c4j$RgDGt94b z_?ZSN6w~?DjtkgqM}JlUFr_%3u1g)gojp*fkT!Nx^a4jeS~v6gSchlw+gdo?;p22O zpC`ou`4Rd*$H_4LJC0)<&YP<^yeEMV-=)UUuTP+VIzjG-66oo}8OQ(L1iAb+6i5G1 z0)0}P6t0IE$LFyGeXdTxd1D*L=j8y{#6Zp?aXxEek{jW~oe^~n8?R0N9P}E1c%Ac^c5m zX8u`6=@nlog-}o4-!g^zvYv^U_d zxL@m`pufuP4d@l`Gjgpy%8zpO+C)sqOMJ2Py2*B3p_P%_`++MBuGcbc7w(aI}C353+(!d>PXDm$Kq9nkG;;0 zGWbI|P@ zQf8)ofb^9HSAB@vw*k#UL;MUw-)8WU2JbL<>C-gcS%44k!?itDf8yE~)h0@>ea^}y zz4mhvo9D0nNBbdt0IWUdN(JK9o-GEq_S|N0YtKCfxAv?8UncUm_SE|#;?|yee?r{a zv)S;m_SEY&>Bo9e?zh*_t1aD*xtCw>=CQ9{wv2Pxm$%+#=Cb=wAd6i{q<)Z7-}FNugRR-?;EHCM#27aTwt>0tC~c^rsl;r!gHoc&7a_y zA!_7ZGfb;XVl$ajmS$YFJoL*DgTy#tIKK=0XaJ_S>12Uw3Bj1WlSSL_&B@}oxbaGx z@m-5G<9un2y?6nV;a|z3F9r5+$So$1_koWDj@kG zxpB3|+rL2lIQa|Z6Go2^Qa()?%Kr>1$H~|C zBz00>Gs?1QD*$3y3!+@j3E46Pi2Qo#Sd`DNfT8@dgyX+M>e+iS>OfgG9ZhI| z9Vb*H)%eUkAMk5nDE}jJQZw7)~-ZZ#CSo@3ol~P}` zQ2w{EBd-0`;-iw2ij>bGA(a1J3`%kGCko*rsjpcmpYiSE*#%g^Xe-~m50KCDk4iRo`89@WLQ zb#K*2qFG-qKzK3`ht$p+4P#2RGltYXv$~fo zLAbHD zdHz?$hAPa}t-^d!ou^9qt!_?eVeTpBy7%kba1is`8S_T@WDu)`ywta$6Y(^f2WJoO zfxVh5ks}rm?Lk}o@vpMoi0QNawtt(|eFto^7B(Ty`LO#3MGF{b=P>5k!`ESQ1?Jp# z4Eg>8V^S6S=U^T@>G03XO{{MMV|8eIFWBxYv8s7UX=uel%)7t0%40Ef0^zP_Zd}r#HK7}|>{|@?xA3k|t{4vM- zUu2GV@8M&Z*F2IjS0?`$bK~utWyaW|t~@rq@H=V6_IE#)z5g9terV4JeGINs zw?AA~z2d6G(4)Ih9n2)p5gZbun!G8g<6c^AZ z;Z@9$|9SeX?L$w?)?JXw&VUcYYnxI-=be9ARM&|4_TL>GZTV5zsQr%|Ikw=9@!9UJ zWoNDU;EB$8ont=^bLVIKbFdf3A*AbspBLpf<9ytM@vDAV_VAc@MFZ+%?31_^ zuF5TejP)|+6~zbh@ojJef&M4^aeS6TRv+ReT?YLt?nFGF(;jx``jWE#&x1zvYdtqP zU!KPygX2J7t)sWk>W00Y&kiw;xxWjJ$I;v0dJH6cEy<64#$O>C;&kGbXlpy{j(g!) zf4gI8A4}==i#Z?vMD&N$7G7%{PxzoACgCCY1wG!oA@z7~x}Bf!w{osOayRzrvFn2^ z)dsXH`^d}a=cLbJ`6}%*xE^n=i0+)wAzHW$$}|m76l|?o-O{wC zb$Qd;sHJi3+Q zRZMa^rcBFBY;J9BS^JKQE^74Lr`)u9 z^-U|A)~;T+W@!^Y!d%q4diBbs&5g@fU9@uLM{c+H~=d^F*C^{fW5K_G&nEhwppLW&J{aV=mHUw{ z;7`C4@nF>Jz}nXD23{s}htie}0T0@5nP9v@gO2^i)}gKV&WEXuvZ;k_{!_-1dJ)p_v3u9w!R-q z&zr{LuhiU*q9d?RnVBQ&Z0dJ`e|VLMqNT7yobLx>8zPm`6OHrz;9LglbK=ew(E4>_ z@N^oJ;(S7W>DpVky1DZRbt{}c1zg$P=HwQ9E!=q_JL7ymDxG}_J|22*`ME&_T>1YK z_@|Kb~~-^5LXF>Pm6GAMbX@vC#i*m9*)%icfI# zd<$8c;(S8Rbo2!~YpqI$%L{e|C69~GlXmp-LbQZF6ChFava>@ePQtV~E?UvY*BYmr z`P|3Fnvmbt!c&g_xw@IpPe#8Qp5H1I*iGZ`YrrQC?@ZvscYSg6-$|g)CCGhW0{xHC zZ{zr1pTOse1e`r8j?b|Kx$j88&q?6(?gTq66iYwY~>d zf6HI*gG2smhme1b@aLSxf$-=37!&EOJ(UmjywsDp->j60+fiEYJBYjcYoSy75T79! zvxlTi+|CK^6g+J27X%O6+ZE932>w_=ulP>EDc8;ke#YQdpFIJ8+03tV9P0C2K(BWg zFAA>oioYaysLwA9ZuL13@R!Z#pcIt9;)eoym3t(hS9}oc!W8OLW$>Av#Qo~?MtB@~ zUNeQqaiQR$p6Y9%^m@E<0lngQH||oXXS>0z-Sj?D`TN=h--%G4`-G3utK7{A`snjg zsLzfBeRc-?Ri9k}f5p{DBGjiRpjSQduFIuRpS=d>i$P5X4gPKgksmR*rMK}PE;ICV zalK%o+^j44pM?oH=O!?bewHt~-;D;JZEzch!OGoX=(C2N*Dt1!|4dw`6rbaZ?sski zt|YX-oo|fGnoI0I79S-z<<6BdGdr$cZg3ql_4r;X`}ADX{;9a~B!Au`X=;!Hait~H zEV%Mlc`F51{)*di+w$)adh*Y|!~wQB;IDmUYrtRehYTOf|4D<}^S4KE)n7LAK6t9X z;^DY`t?YPKa-~;X$7i<7UKi{*Y}>2jt?HwFRL5K8uQ(poTndkuzVjhoFS;?SG4$3B zwSuc$tx_kr%2j-3K(Fo12K0*83m)2Gp~1CJsto4TNBcIn?RjDGVcdzN`rqU?^Y@0T zzv5N0pZZ)SWo8qk%=?yk1|KeE(%bu%YQa^mRv9G)m8=2lQR2} z#jX7b~^th;fgl*Arv3wR8xoSf~+FrH4^0`9_A^#4+ zspor@7`YxF`l!gI#_d)65I@n-tNz68+pRjGAzo?d>kV$-0xdMSeH+tkaC?8Q?Ir(F zhJS~l&lp^bq^JEa6u|0F9J^go+bX@b$I2zWj{lv$n)B5muH)pM0JqmL?o$3bK4@Dw zN7mY3&m-d2{@VYETl;Slxx}sgpE0<#|8USTk>1*Wg2Ao*^?sQ2sx#~BeJt?|0Z9)T zKI0Wc{*1xx^V%VUpJ(VNh*8MjUcZdzh5s_>9e?UIl)=E9x0Ojiz`SYx4TG=?o zJGd0SI+DVHrLi5L2f~-Q0P& zmHH12*wZIAxX8NJ8|#W=vjm}4j8f9Y0(YNl=PqV{abMvLagmMIEdNN8Z$zSZkFR})=h{j zO1EI^c=c8R#K$Ekgp|+wkx)MGH{;~bC5Xg( zB%3J9Cf<+4$uE~rZ`S@5s2IxsS(5!lzJ8ZgnW22l{fm`fC-R3&|7H7m-xbQ|9Q3&M z`|pi~?*U2j)2JWU{(8CDvh6=9M*dm|kCTtN$1dsn!zB5uP&rP1o5=5jeoSmXzZQq> zXB?k6`Paw^J&cu23hmE$sd4gi@8Mm~pxQ2vjB#mRqB}2A}1BwY~xuCiI^@BEMP)DW4|Q`ig%A7@Mf$42mxGiu~OQNUrA4{BkI+WlQ=Q z`;cySgtX&eJYr}@QR>El#4Et5~)f5~t9vj4rLw$_0&F1|!)2ObBe&loKW9eB5PqFVib`8-nB zoZ#n5Y{$*{yV=o&XG#<`Ih?(qIPn;dFlTn2!oR{W?t7t+BD_L>)vT;5p~_6tVGrXh&(Q@h(*Q#p>c_YtP7|B;&ta67zUAUn(x- z?IiGUB)74`BT;9Ss554rxCOJk;Hh3Spb6N8Mx2 z@flO!!Z|*5T1{P@JIe=tj%(aEs*>doeg_omX@I^b*1sdxzj1JJT&G_8HzI!068QBj zeboDcWa-~Ht`O^~hyIP@#J_Re{~Z5D>)S~Glm2`g4f(zTQaA+6~0YtVH4t=8^#=he;s^IM{VD^;p|;s z*)aMLarpGWr*PDEmKU7WKA%32n-I6@8-wAuhWt0!cO-qR2C~ z&h(f=@J)n2Ou;XQ{zC2WU$a=piP7_&>CuNOQq`M&cWQL_RruOXLX4nEcaD1SFQ8v} z>hw+J*sj9%RhSA)z3{&o|FQm-v)+au45f4Rv)O> z;S2N|{L?RwatW0N!ro`EgadNCZdJ!Y2cpE;9#)jUfwO~_?2lO0#h7N*vds)RM z3?0rtkA6k3o)I1HJ=w=^qWrG(;zP|NqMh%g3L*>YS1OHa%SB3KL5aWq4jrz{W z9_|F~BO5-vt3F+hI6|JstMHBMgOAf<#4PG${3Xya#?WQ(U7YkM4?i%ZV($a<9;tqC z@`{`5Zob*YW7=|As(k+}_%k-cXYml~?uJ}^bKZ%VMB67Lwxn(8FaFj-Ga+9q9|rcG9p&H+=Zen2PANIq>^a*-Ddzk7J?US*~8E z^EV~`0x#SM)ovXey_WjF#}@qNRQjl$w!QZ(`i-5nf6255AE3OoC{zF6uA2QZ zeeFYcb+d2a8s*A7cJD=Bqutq`egk`6i*5Sk9`$}}?%edgbp;=9*T15IZ|Q;)V&XBu zk5>Dx`U&=^uPDa)Mj7kdWBfStbl)`bm}25PwS!;dxRe_kdCdsrx&39bKkvJj6wm4H z`D-40PpbPUd?TGr5Cm*)}ffpkd3kw|;!*-}bp?}{%=|Vds z@f#>zcpUWJGSn|TeyVRsr~34l4^(b{eE$DfQQkuCJ)-*4sn6Sg(ob45-VZ4prBzRPx#>6E?`!zAeu1uU0{g0KZz(-1 z#rXwpfoaOj3>{rV{I49J@G642V>rHL#t+Z+Lo!E-^9y{%(aXy@&}d)$xZ_{I9RvJy zg5Ji2vhQ=_`~vTCeE6lOI9=`9B_GAG%k@VgiSrBmBX=A}ISAx?(|5jo` zwK_W#{Qunf2WG1s{{pW3naBAB-t6cL{jHe3&|bxR9epYOEr*|}WJP(L|KHageX0K+ zE5^ly@@w6XD&ngfaWSF3==jS*bxMfbugRY=h%ese=*N}d^y}r=7p7^TkHf!(;~0nI zaK++ScPADfoxq>(vf}u+B=E^4;MoNJ{9Y2rKb64efrR$*yL23%Jqi5l67bI_@R^rD z&z>14mpvg4=l9n*d}{*zV+r^t670D%LH{yzh&Z|blED986ZjK#WxC0KK9#TmBB6lYQaPPIwFPqYlNQj+y}y6>8Z~Y zsmm-YW#V?!)%ybC7YhwDwFB{5gWo4*;?oVT*D>ODe)le+3ETUm;9+}TH2g0${QDB{ zBMG?mpQtl@_!5CB)JMPXh5A_k2_AQ;9%ZGV^om>mi5X6k|5+#mw2#$ik>H^|Il+~` zvRW3<%VvHavC=EvA_dB|`m`I|`j_l9xYcu);Gv#R3a)Zh&z^u@??X8kK-wkbuujz~>s=`VZm#pG%?L)E_RiTeIO~`~PDG zpXph;-x`ePOl;S?e9`?bGr0BVYfHfIGx%kO&kloI{?8cP^0zUMEFXN=aEW?m4gamU z-Z6#xd(@w&`V2u#$d4PNXO>n*eu0$9f40GOOw;3{W0v-LJuZr84WBuN&jN#wH@J?g z%3u3LPH2?B;?0JS<$s64Eq}f4DF4fat|Q>D_-4b$@_)$SbEVAe3sP48S=sKAT=iFc zhv2lc<^QC?RTqI=M*foxV2`iGhY5}9Q!m@YC0BhEuM(X4Tp?v<6Qs=RDdz`hvh>P> z`>KUNwMGI&L`QIUU z$iG8y^0DJjx!@__G88#P?L*wYg;4#8+oyg#zliHGC8K)7-##@jG`LV;1G z8~u2!{pZSl;@18x2DkR#W^il&XAExbZ~dIC{U<;k6Xja_HyGU7U+-H;Z|%R$(2w;j z-LKv!klv1a##6)kEis@=OHnkV);79A)GS`Pdc_V%hEFQdr&`4{zQ?l{yCJ-uR@{x zA3{!?`~}jX?L83XQI<{LN98#A2ju2P@5d=W&aX&gw}j_UPJkD!FqA|2a}(re&hiy^ zuyII~&-=Ep{nsb-|62K^*I)auOX&a4$qlJ(KfgwW^63{v6~p#tMSd;z*%Y>ac|!Yj z$+(q5Z8Qf05MJER^4s(Ei-nzDAo=q4d1DWCV@q5QMO{u~=^8mM1Qb%Ood9B?>d!8%^>tiRzr;{}%Mf3& zLF#L!^>sVRFA=dXTv9odPm^kW#lHcJP1N%YMVER+{%!>%S954izc4LZ(%VWup}XB7 z?YGfzVqjC0+NJ)1pn~eJ#NR^wIQvH#Pf;%Q+5U0(*ZSK2C8!+AX3ZA)M4yrKh-~=1 zBdiabh%q!9 z^X-@T`HDUGgoC(4k9UywJ*meL>*z4dTBWf@IOmyV8*8BxysfUd-EniE-8{%a!MsQC zrB2Gv&U;p#*k8qYrpQei?#g=1q$>a$p7lh>-=C=8@Ib%8vx??rLLTB-U|xEv=Urp* zPn)QoZl3?sjA2yKePs2J?%&-swENKFVcl=f9KFmWA6WTI3CyHxLkwd zb2X0BJj5Zn3Nc&KE(XckQw!${=jijCIdD-~_pjfX?*8TY=tm|Fy&ZlV^D0JedJ}W@>nqAPeJy?Vq1Vqt zJd%rMcGu5|p6~jrcXxMfSahfxJ{4cb9PKfg^uM0@;fe=8=;n-%-2N(bCq5bRhRQKd z{N{AD`}`9SduZ&?$*x?1@+>Kzl$|kYM6_jIBet)Mb~R$o_@!t=WBRmB^zC>VbHAPL zh*NYsbp27;8T-d#o;m$T9!W34+czm9$l%=s#$-Z-{^$BV~~ z$E^3{+1)>dPsh(Np8W*p-wa?petPUWQ|`0%ar^Kirx#)avCrZ9vw1f9yNe@*^XtdJ zXv+^{4n6sQD40th#%j9zq-f_s@d?s#ykyQi#_L8Iujw<9NVmQ)x4su+Oi0IT!oKl- z+=m|s&KLNRV4UfLuZZ)JsK7a#y6JP#!c1jUS2Lv|I(IbvK{_zTG>?o9hx{_|{RsI@ zgs%ko^$kXRw$THt(}6f$tWytPf@b)54MYy~cXhfL2kzX`Iz4D>d3kpCm=V#fm{+u* zsyv(Lo5OWeua$SUPT*Ie5}Da#M!C#4ODfIm+?DPGe<9FjJg>!_q zDY|~n;q|k;`|#D#;X{juV5}aBYv(ZdQIu_&II3*Z`w!jqLUh8%9xprTuE%>%j2?ga zbn9)IQJ^y4qjnS12NbFMt{ zlk>Ajd*@t!Ew0D*CL-k zdS~U@(N9!fIr_XQOGl5Na$w_*%3C*n34AXE-wVO_Lh!vX&v(%12~)<69yew4#=oq5 z@5awpZiRlQ44wwsX`r13+G&nQ_7&{1n5~ccv$89L6a_;y%Zw~s_A3V0;(Yp4^&bIc-Wp(#dp3}Cua%tN=mFyF* zeJJ|d-Z_JhWX27j^2(eOkNkMkpj&=2KEiPY{`6oRw-b(JR`ktG;Xkvn^SWq7*Ua)+ zg?@wcc1x#a5c=-t**z{XmCy$k#zQ1c^`KFiAkMMF2{WbOY zBl~&HjPmskzULbB@2hby!h4W<^m)WWo8#|8j^6&a-LKX93FmlG z3ZHfP{AQE=&PW_%R8a~aE#(m{PctN6N+`H*5=+w?96A=)OUG7_xD<;F>agZe^5@hm{orb$Pl>{jjt1F}}(+ z7kpiOL(=W=4+4#g>-F95?fw40{rgKk{uZCubiTwwKww#0I+{))t3x}QEP-L&+pF8EVRq5x-hK<3_yrC$J`q#?I zf)Mpb{{-m$%QjO8%J`6PW1MAj$C^-o}*bOS^<`bUxXL6HwGpmVkqL2*maoeY~;iK3G9DV%ND_u03$=8_S+NC`h$K2J&oFSJNaOHmn`c#>j&F{_??0f+K zW%-$Cg}F@UI((#7k6d4rt#r{U#vW{R{0plas|M#geG0fT{3Pg8(OBKg&v_=0HhL<- zDUJ_EfZ|l?>@X@1>bOK89pMQiNZ)mO7I4+`M905?Yqb;6-%@6lP=oG3o_4RI41nTH z$6tHBKOafq=cpENTPqzE`oH4$IekiT?oXTJrSxkYeYI{D<>{i?YJS&Ej=pewZG|}B zrbUjvU}vR&ufy%EE8RmqGldN))j0Z6oV(MeKL~krj-xO16U9CKc)RJ!!yJ7no^tp( zCG>Bg|3uMwB{&XaOfQV04CqUHVHB-GKZ(QdNWi-j_&kw-e>wsGRRaIz3Hmc;Nt~Y9 z1pHqTP&s?oX`fLr#&qn9j8NmRL@YK z2}Z8vQ)_UwEg{v1{N?kXqf{EjRbJNZjiU1ddOa?RD}9a7v%S{WLHQ7uX%~)inW49% z(jeqpqI_)j(}eAjZz5hv(?~P zWsdwA!9#uYIU&^N6~kwi;bVP_W*dAj#y2MFGszd-@1X>|0plc7NKc>LINbW;Sh>B1 z-rD~a!Nd0AJ-ka{dw&toYd<^?&?}Djxh{qF=NvgE;#pVnKf?tN^{Em()MtX>qho?$ zH{cjWqok6`)o~#sxXM-Bj;nKwK-GcmI^W=PrL6pUoo1@{S^herc!S{NWBD&LxaGf6 zaOJOKYfHdi@ixQ9^51B1)tS(ff-8S*XOG}&AI0|w9_s(1!7cv-f-8URqXz^2iXSn2 ztp4S&7Zc@L{u2aO{#i$bwYddX{S~htKp&-lD1lFx;iK1F*4brnd%aVB)N`6{ARi=U>S^)tK4GEI z4L9_>k5XLkXK3fkg@)M#Df2$$3WF;j(%b8Jwa|q293^;YPkUZpY53O|KD-af$hO|M zkUw#y)AK;@HW`!RRDZ?QKD2|5EflH8RQZS+k?N^@6u(9a z`|O#h1x`^0)U1tp?9ZnVF6Cc$L9*jeYX5xY|MW(JFd; zRUgImIFOIpg!>i=0r7cCjJ!?CA^$rB5BYZpPCm1w%&c6>Dd2Jo;1KP%#O*v%)t|V1 zF3{sk+}^j>8~%3X7(Fhex4vA>hTh)yYI{jPT4?^o-@DCBSN zLyUJDea7HJly}E7Zb<$^-fTqtS#j<1HmL)@oau`t#!>SvjY}6dwS~@F@&T~OQIB!P zZ0ImBZES6lkYZM5;X9&Py}Kw_6{rS2$3Mq0*9dH#(nGxSOtPS-hs{ z#sm|~l9tBL%=hW&Jq?#%cm4I(EOsu1Yn!BcK4zEc?B<|bUpiJ?v)Cf8ES`53|6?DI zt2jEBZ%&-w9DLiH;~aiaERE5Hj_A6_(zUHqFL5;ZZJXkY(^;Hu&tZ1|n223%Q>G$V z*RubPh+RKT^F4TJ%F3Yl=|RQ&WZ2Aux1vPMUNg8e%b%DOuyglU$E&aRkIE{n{~qih zmQ@1Dcbw@9dVOYd*v@jc{C{BR2y*B9Hp>{v*`?;spEY^G?afyg8YmS){==yVf&{h$X_V(b5fV`ITnTT zlY9~v2;m~BuURNR$tQ7_$nTMgl+UlTq5Q4D(1eolcZU#mV4qE){7+yfv8*LRxov_6 zGGvZK`5ZGt`59nw^6M(F1Id2J=XNNcr&*l*ZE_QD`#*=YP(Jy`$U*TR9;^eoS>nZjMA?5QqD3pIEDpS6F zC&emld})L9VV~uHNz0`9pP;~UiT+YQtAwsrLB4Fd_jhsn*UQ6}wcl7&3ibb8g8XWE zsBBO{3G!b@{W$ptL_Yg06YV!1|DpUZ0%H@kpP}edv&iQ>9GghXr1@XU{ewpfzhgOA z#w4w$yVk()#K5K~O_ch&hMMkF{dM~m)Q@X_`9x1qCj!}inndfXU4Di7p={RNEH?xh z-ZUVQ4ZlN&_34v%$@EMC65%?~^$7;!AzBuYvm{?%;uwly!L)$C5sYf7c!Q zA7m2z58B})K)(aD^|-zUVH}`d`Z0zve-PiHJ%|m|Nngc#=5{YZjEAMOeH;g$&TfcE;Zv6)QugCx0_-~)Nu8i}3KyzCei80^b?sV-;Dnfzr+muRmLLL5KixY=~AG>HKSj;eV_wTzjTibFvihSprc*cjwA4=fqxu) zYUbg1UxnjdkK=zO`oR_OF}NIlj%Ciz(c8esw4q&IhJPmFJ0VUC{doLwBEKwRwRo&> zjE*2SP&@pqJYG0Xy*N)jM*I3>k_8qX6P~*-5Tm9QeHk%`x3jO) zhlx7Cx2U#oo_nkZW16EgesrCKk3;v(LX4UmeAp8CVGL`OF)R}k8z+Y`aUc4$A1iTQ z!lv|x!?kMXy_N9Ug%4f|_A7_4XT{m6_g;2(G!^?6upRhM?ANnK6#5PQuxRHDY{{|Y z=Zkhjmxuj9k8fy~ z{`mZ%`<&F%07d=|>cH^BAK*F|Ww{@zi$6-I@o0?C$pq|PNgAX&{;1E1^Pzy_g^M!t z!yjCLT^y*GHu9&$r=e`wurW2)I7bLLK~TSENXNvJdT!;8etb@P;Uof@|Ht0jz*kva z`NB_5P-8?yiHeHlfLJ3U1_&A|tp^Ai6(t3%w6#q_5)Cy#B*8{yZlf@rI5K^qGBdRG zBOudBsGVWv;#}=GZTz?$obmSJXj?khnFh7fDBKn+DzRGL|9|hb&RJ)l=i#Ft^UgcJ z*}va8dq4kY?X}kae7^QtJ8MdD)HWycFlmcES-YCj;`Hyt=7ja2>nhxPjDmVtZL0y) z@qzoX9Lqj4Ens79I#|C9e*iv(PpZU-7LNAkFu>w$H@wY7A^i`*$L{yy+TL*|e|Zp+ zV@Cb%*(ry+J_X#{V&rg>1$=Pl9|UiUQHYZ)Za4Yw4=PfFes9skHhHzAP#3Yio*vI_&=6FpR`{J*L=qD|9k=;j_)}7 zh6Fy>B+#?PEgPrLXA}7I+89UQl|avTTygY+34Gp3 z;6q!?Q_bp;9^_|G-duxZ*KFuJF0N%d&y%`;?crR@WbtyLAs=4*G?Yn#I8@69r6GQC z7LB5eq(gjB0^VeBt_9MtS`y@=a~q*9!NYQ`6+A50dcn!(5=k?%<+A*bwcaX(C)X}o z{#wtJt288?AoQXBTK}Q`l|oNGQzXr(Isv!!Z0S`8^0ECSWB6DLxOoP*@7LEEe43;g z^+=lhRcAsw3_e}bjCLmAFDKyp6Yyb>$3VH(R!G+d6Ti%pxc^CpUhi3WLe~a|?ZOuY z3}L(IyJe*pGG~)$=@qXwa%VV>{%?`Ntv-tdSN@viCc#5}>H~T?jC4)1(ktF73D%F* zXSKntK3#%``m7aP`KzAY0lgeX>jHYkH%cPZXRE=jKDxF!)aTKFzv{DHaHW?+=S+w+ zs=wk-N+Q(fd4pSh_$`=0`TL_NdP#8QulVkOUJj#|1A4_@lSHV`0fX!MO3J`HJQqlB z`@h}a#*Wj)hTe|Twgh}_0=~)Mc04|AaI4R5gJ14dcK@##e5S!Q$$CCt4-gNNH0#;o zb{@8C$nAXiF~djORNGN`sSetXirabEu6bT8JX!x~!@pkA%Aen+7@B;P?T3oD3Qj(j zf0x12l4jH`Y2~li0G+p0f5kTneaOGp;Au%S+AeA3ul1tyyz*E4NudwN88yj3!8$_ZzcgaOJP3lI|;P|JT02Jlb!`e~vOiTq0?% z&6c6*kkJM|PST82F6r&ly|yWFtrODM@DG7F*ZOEseTd6vS$C>M2#DMJmQI7)r^RlA zpDSq_kq_^O^~u)iPh6h>YbBG?>pWoPl3vGePe8AAy)(ddya?>-fqb+-jFA&un{De~ z=O5y>{@V<_t^Z91xAm|3kdLkZG8{7yxAkw=uG{+8`xesM`q%pn;p!zaYJF#j<71%a3*!n07Dj*IkkBb0@Dz zkNqYQU*gym=>Bq3nJdua2cTNy`Z0pPu3mGbIR+UTVD%b_aEYx-jmpg8* zs>71>rOR)rYwK8(b-vL%w!#efSY} zcR9k+bXiAk)}O} zA&G_Nom^;+LU4uvMmV3YIvOPhT-{^1I}Qp@i{K0i}F zzwU(cXQblGUo8XrNad%Wxw!K8pW~Ib{-T8P*NXf~&nEjHmVbUi`PEjSUUIVh z?2=*mCnfa1wIcr}$*)l;|AK`6S1UKh^^%eD`L!vOUo7PZo4kOvbT0Jdp}G7D{|bq? z`rj_{?fk=U9HD&r41)>Dx2nqTopfw73%&yjSYMjmdSP(WhR zGHA^AOq%v*{C`oYJ<6p++OJ6e1)IE3BKda)8B~8I-k8vTE2RAUg^=Y>#ZYg)OlimoNZx=~j@^=EQD>N(kcRR+$8DqFC($xf`Bte@lcZ^1fBu32tDyA2eV zDbGHdx{KTe~~>{3(hsgSQEPK3&qi!gIL3UdePUu%KE6s9u=f}~hpn0$J$ zHhs@Yv(QGe2HmYy#~wY<^%d;7Lz*tPR{iX4Ur3GF`^X5aUq%~pt?H{XKDkD{9p`X! zwupQ-V!bo-?JVv86!lSESdZK*&He zPh;IP=6BhjgyV#J*!VX7n3wPRGV9u}3HNT`~>>@6~&|Wc442O@`ce0VjvzO10Io=XoxT>tl%3qilQ5^Zjg4 z_M#a?8MyAf7jsmaWx+L(_0IHx`EyXWvTnV&$gNukZ`Xg=@9lnHgRptwTKb$!KkxU0 zFWaOW*IUXein_jxdm-{a&F)dsh5Do3J#yXWd|K51@Y#3zlD zEJc_*(np~$uUWW0l=VoNagVZN^B>OcJ0EqATeG3}EL^LeLGv72J@`Ff za{1X_hl;rm%<;JXoq+3L39g4Hf`2LM<)pq3))Z}^J&3!OL?wG$PL38GEFQLv#}DIp zaCo%n?cx)7{N=$YcTGAE_&deN<2rEM#J6z2@E-Pz`K9y))|b1c!#-#T{p~GWe~78A zlCwX-ejL*w!=eG>I`Bku3K z9RqEaWFI%Q-Da_E;T&N8=Id9x9A1y)+Ls3QomAQ0HL(5g^u~?{&LnBlX(4so+!f)Qf2q4t}NpW?6uYZ-l6GupWtk6(4ourv~xakwsNkl0~i|~BY!`K z&<2NNG0#p1{Hgx{^5^DP+9q9#w!8*ydNta%25o#5`puPnXmcI65yoa-0PnmIK2!5K z(+2xpig<}ViL^YzWKnsf%^sI#Q}K!a==w$N?Z(Wc=DJyPqHFPo2dt=ZReQ&ZWsx%( zX>V>^+1wG)=w#{gn^)K!PyBmvY>3hrwKueOFwxq)+;MT+sW|?QN#~49rx{__R$rN` zv#=fXOlWiQ+olWqLz3LzHr>&dBka%GKf`)ay^j?C*7(g@-n4SX(x!Czl#1!or&dg@ znv}k%?UohzU$UaL15s-S4lZ8SN^D6(dvjBI#q#vZ%BssQtGuk~!gOP6!}43ww>Ph( z%&8a(&Ox2#xkOKWrcid8Eco9RXCl8zNCS{qv$mM*`f zwe|L87h~t0&owu8q?=~kTs7n7%BCroUV7=Yrs)+^rZ!J+te8NvYc05#QWI5$j&I62F)jyK{$js7qE>nom2q zxvR13^Pqmo@yX%J=g-lm*0#p=Rh;ZVRi?~Zb=UU5PX}I;^WPnx9IgbP1ijsN zrB+WMjdsmlzpF2Kh<%2kS&EfJvDmYu5x9Z2A{E?%V4-f_P@?zZJ-*fbZI7y15T)S(QXB>SY z?&-%VSvG#$(HG+1bohB$I!$bG`1yL6jk$l0Ui-2j5;uT84*w*^MI1gY0cW?4qaTyN z|D*)`eS28+=g$-jaZK8vIhjXOqG8+DPaD z!Nch(&qoZO8cB!v;sjjvC%x@g8AGpSA!OV4a-m^l+jpkHTP3aK()GY?f@`@H?-ZQ+ zeAMt+XYh|1e5=8)FnF(|Rj!_TR1zvz@$CUU#JjLVVx?F7Nx`XSM$(MbR)GCsg2DB^ ziS$;_;leP~Q*8)TuCgi%=;bidH5*E=cv=#no>c)Ky(83TMdhP-wc%sitqAH2F zUU2fUc&DM)KF@5c4ZX#?1*iUYz8Wo)6!BR`?gWF+HuyY)R~o$4;BySl{ofeK-{R{N z@a+b#_F3IOzDc`4K00Oza199qajVY(gWG;`Q1Gyyyf3)6m*lMz}*V+=mm;EMzPdg`Wtzv8WikDaghe8-@A>XolE;G=lA;bUG$M(YiJm1pVx zcNo0J;P_7Dg328)=X5_JtsljQ;X2O1`nlRC-M`&m$nu{l^vYkeWCU0Kiq{zawx2f{ z{2C=j+-h*!uhts8+R$$@IPX=$Kt1(Z!*fFJ?jJ0kmW-^2d6H(NWhZ`}!52%KxV)d~DJ8T@)lGwPMJ>VJV8hu0Uy z?e${5&@$R7Y2`Cnj-QuU^;G<2!C79*XJ5caujTs#K8n9@_|!_8QFuMlwhXUFitBYJ z)JLy7TCN2mV*>PM&~hn0NpSM{xF>P{dYvM!wC1#%H?(eu+kR{DGRdU+=(rv&xay;L zT5!r;C}~DoSH$i8kL~C7{-nk5vGaMW;Hr-tX7_tkeH0J-bAy}+`?KO*a-Mo-B+Y2O zq>0=4e5>HRZ&@U1MrlctUi%KA3WIAM60-AvE$=*`56i3d8J1UdP)H1IwTAu%Ni$lPfIn*RPe_`P)(`c$(crI1 znz;52LiT>!;$uL^5YnsdMu_WLe&TwqV1E5RLfq=J$?&)Ij~d)wfBOyoDKeI@GXa0e z;P!r?MDo#=G^I=sk2W}7DP=>s!R=f9DuWNtQs>4s`HwKT)-CZegSQwysso`;gJV5d zHgp^OLs>NUegEI1T;q(~-*vfE6wAf7(E9}2E==n+tX488z0Sq9K1r|dAbJA&*>b!y z!1Z2M$F=egukVV7*I>oB-k!)k-ueyH;X>1{vUWaw=_RQ*YB`=Q=H5V!p> zgJTBbqkYo->-Qz%dHvAP+kW`0!N(asB~nQ8nPBijv(TfrImZ4!v~6St?s1i~uDo*T z@`l!6+bh2w(<@FAnt`?N*h_=mHHlcO!(U~_*ezw;D20J|P5q^)6P!?JeM_E;#yEyoJXn+tkJ0fp}FbSqfY`DIEp zfIbGxXRkJmp0%G+O=kp+ZOj@byT)9&5KENm=wTNPzAQ_5Ge=D{dHITt=E+xGf5XM? z9Sx1QW@Q%`OXvFGipCDqgSXU{dSIP!)4D0#Kd!N%qwcUYF(+59xV>&^d)>-a%a_Cc z+v`|Oj;_~db!O=ZvclY2tb#r%rq>1!mTPH6t!l%#Xm*@`hc?>2fnv?GRS}k{z+T%- z3%QDKUfyK-U6LWU<%_ziU}gE`aWTf-N{qU1pe1(FMr5?-F5G(TH?jT3rewcG+i%#b z=&L<@wTTAhMxo4oXV0CI%T^ZnL!^iWWKkwdk)Ifre;765_;C4a0{SrjXK|ibCZMa5 z7ku@C^L~i0=t|^RuiZ(u$K68rti&3H@{??jH;H_`52AeDr-bs~0K>TQ>vKYt3YIvO z{}TYjG67w;+&I+>PWdO`7s`JfSe*Q|1QGPP${*$4hv@NZNW{q>6#2bENcp@U3+3N{ z%yIHZ%6*Wo^AR@L_c3~0i~Mo&*Xz;^>6nzyRYIZs3m_*>{J4L>}?_>G-?l+WApVM*mueQVb+^-6R z@>>89%P4`w+bIyC+|)l;H-++-V^WHfubVBu&yyyE@|Plioc!Gv`b=GtpX!{6Unsu@ z=Sc!K`9T`KCm+q`S9lIG$H`xOk*C-#gp_|4exdyK1o=HjDSvr_{EA71@;N1k^54Ux z%<}8=ug`_{LGykHb&%E8Yu? z@^zj-(uGcu|AYb(la@i_4O0Ie&HYaqnM>Q0=2PrBC{HYGzbeUJ6P!@}HUG27A6NbX zDZkDiEdTlVX?`t#H~L>7!m;i;%}aP(GEhhM(J=odQ!6T_RHn0`BAZIb+s;p&Qsv2y z-gbVs%%#*Q!$15V)jnTe{LO9W2i!hi`L^>J*sXPy8mu%L>Vdsk*B58?Em;CP`Fp(G z9U8Xs?k&-Vjc3drsz-q6>Q{( zy1tY-NO|=rkBdVCw$!}=W#D;lQ;I!!e&5?4$L;C$!Cl|#`z379-n%6Q z+o@vMPz{4U+;L(jNZUZ{&t>f3$v0~==dkDd&#EzZN zr3CwQO@nQ>+QELG`oTW)JC{apJ_EbjZ5OZmr=74h{M?uR;up{T)9i!W=6&xMrAp_KS2;&3hTx-1YxkrtgO+>+UyZ^?e0$YG7lw2R3Wx zd@$?9SE0`<#pl4j^>o;`mTmhtX*)P-tc+{F4D_SDeo67!_Z1bL^N$0tXJ&r#@jTAR z^61B&WP`A=eC~5CRey-z)kP;>bMNQMt4fZ;USO$`y|WIvy`@~6czfGXS^MWS?Ah=g zg|7%V;K5?v-{FR(P`s&~*=ski3mxbFYbtb^~;c3Z~3+Ua^b@-w&n82eVS z96hkr)N*m`6XTr7IplVXl{34#7T~^e{bQ+ULkq^>A=sn-A;#%*@UhT$3euPt??pW< zMf^&t8qYT+q4x&-Aae=hu<;BIKOKb{T?g?t$Xtw!H&eUaYTib;35H zZvpC>hQ9*(O3-84=F*SD4`C|h>{;Dh;%%bSXtO{^GdjaO;pT14&Df7W0SAXnJx;NwH=p#SD7)QU&3(zGmg!jC>kFtU9OKi}4AI11Q zZ^H@p0O``;xZsel@jF`Er_{Br%)rdcCK=wy}7w5 zx~_Wq#S3d@O^KY{ERG^~wBU~U}?d2GOiv`yJ+~i znJn+&4~=+mWbq~#Q`RmLmbAwtuf+kc3Sg~*kuP|StR8;u$cIu74lBjBa3iZnL{z0( zlOUVxYWl8&?O+zwUZY&&mr{KMJRGm5kAyxGy`1y$Jubsb$sMShM{FL&W1DP^v~I9>X^znJ~>=j@!e;U^GN8CT0Pq^%g$TeIk z_ZHM+ZcHJ0x#M3*PpUW@PQOoFuAV(N-26E{e9KrE;`U9u-O-;_NDL%y-?UpDym33wOUF^+y=0*+>hrGGJj z|I-Qh{RwzS0)A(LTwd4X^#5@JpOaB~@oCH1#6Yxh8^!a=6|BtkvS~>J#;Mzoat?7Gn8KG8#Um|Hn zs|~Jm9-%J5xhC~INi$k2Y0hUBUoSZItdKOLGJ{+G`VKbauQNu-UwLv(t)|I3ZTL@- zG$UJY7T3I?T%C_YxwfA94p>8tBv{^Q3L;)?aOFuz<&u87&@if!H1UfJZu#3;z0J^D z8_Pk1rwyO|k`BvzK=81+hgp9oO0W1jNl@+#Q?3ULZuRLAJS^{4!Ii(V>J8}SFnTngSA2&g zLVa}2VpuA_qn6!fZ$>M91Q5? zFnT|rS9}=eZH7>vNd`|l3ja6L;8xF!;Gv$?f`@wQwm!p_>eD=kq4PmH#zz+#<2^SG+5MKD@3eeRn`V zUyj#Fto#*!KycQlwQcJS_$dEJ13rpx59k-l@s5CA@n;1O;`TaX`{!uX3j_7!J*tMZ;M$Jb_7eoxdRBar;bZm8B=D(D;G@@M= ziCg}vFZJYiWevk5K|L)#TyQPdVmTgZ=y@Ndc$wgoi*H-mFhNqh|H)+0+_jSQvkYD> zY2vdDzR2MAezMKra}2%qfAUeDJiXD-+wo}ozvZv}mV7M#oraI4-*0eBKN9&FLVd;< z-0D+laI1fl!7Y7j0&e?>z2Dnz=q-PHy|(w;C0>2EkDE;44jFB5`!=cE;P$OfmBF=- z5vnox2uU;2{#68hM;W|D(!}k3W~agJTY_$b>oPyXF1tS+`!s{qpO{`RYTa49LxEi4 zI{#R?#C5z2d6r(wGe%C(X2aH}wgquppW4rf+xpyO_}Kc~X>ePg+7HRc)~C)_#BF`v zgkuKcwm#boZtHWa!P73M{2g(pJF|*B?;DFVE5WW}jNKah$gJ0HU4aGg&0GlI-VxE+ zquaMGyU?13BM=Nz0NL2%5O#9EJ|&Dn5Z5q+$c$6VQ5?&x-@%QjJ*$%gI)2g`~^ zI2vtSmb2=Jx79G+Gt0Qv8G0m}aj;2`(*8n>UYH}!-XgCF%#L?(yIUv56$PUr(lT;K zyXEc8(iqJxuz+Y-)~s97CGU5aEoaW8LewlUp>S=NrN@Y?Yiwz5ytS@*dBc)ceD##Q z^T5-Y7)!1v$?U*8+)^;_6vpKJB_ZY1L5*PQMtwEifc*Z)xdjD+&k`- z@&|#%$?q0H`o0NdE`;)51sW&6TjisE7%2Y~{6hJB?-M6q_oK7-X5b80kIT)K zE&r)8@=r;Sf0Ilol@w}1D8Dp8{-DUOm%J=Lr-ZQl-%Z7rf4#`x#mX@ul>Zd+$JKw0 zd~(|^`6-`WGL-)yKSp^Q-=UnIONs z)Mu=f{2FO~J>~+-IQbRhJcY`kd_MbVe#M)BfkpOv1ClOuiu@-OkeIX#8vhmgkEZ<@ z|34+SM8LuYwD+RonICNOLY3qn44A9_O1u{Nmx2h5Scc(_d9p;c1S3O@D=X@s)uNyj!>!wHCJ@UOm=`Lf7>u z{)Pzqg6aN9{a8;~jdkM*X+)7ZnL>v-&o_cX9qJl2Kvm0jaALrbtv-rZ9(Lyh6!;d8W8hVGO$0t0_(y<0?ePrv*TX(}OO^ot81PqQ-#xAs9*_O>@S_f>hRW`1 zur_~u|3~lrD)!X7CK{?A-}TX@U;X#rSI_S8Q}eDT^2*VISlod#ZYGsL!Bu``P?TcHOjA-Wk0wbYnEG3 zM+fEyd-TjnxjlN`x$y+7?JjZq^1Ng054f)OJBL2j=jz_=VUydlh;84CHt0p0^g=h> zgYh-qM*P;}mtB)>_bhs9v|sbydv<2125Y5zQT9Qs!|g?Rdl{1tW0VWuRF256VMMs* zy$0)_WiOgJDYy2y_cYi>Kvs|RA@t)No3G3aZ3ealeFUrV-@YqSu5Hs8 zf16AFeumr=YU>aGo7)rW&(_o(d{x#sW8L&bool#WS?3z8S)RD%D0JQoyNEybbgqAJ zE&Ad1RC^oyI;h^Y?>>wDnJe?iEir02`DzeutHlD%#L+kDtQ^u>L*FpOrHnbXz=KPo9l}*QX2m zG%QKExvvN7-a|gn!RtF4e4h4v>M>5gfUzFZW@Rn`?JJ%Z7t;cs8H|ULlFSpd(HVPc zblcs6XP`RaMzUg4GEyT2Ntp1Uv?3}OvFZl~5?SQKqYW9}(Gz2v^q zKg;x$oD7?zub1?-%s%{{Z`@1ly`Z1iYgN+TZ)waw=%d@Z#!LIkd;~q+-fpMj8VG&z z_JO0$_$AI)9A~uqAYI&EZ`jlGuzQ-8yubKG&Yu{g&~5C*#n9o&pI_DYw%AB)`|~UN zXghHb`8%3BaPTw|&{XZ#}`n(5v>Op-d zYXI|$%4I!_jn3ZNfPKt*vBzUM=J^wgGBd6~U)v1(v=fi>=~=W@yWr|R*tcz%hJN&o zt1?56LZ9-YXy{J-=HbWt8uC-#oQn>(|EimFp5Zm`IP6(=JnW)QfPGX6t{Erd`d13u zrlJkHCmrnR^7f?bJ~4k!x)ZTC9rsCn4*Si?o^)ux_&w=PLSDBg-3nhH?5C_3?qkXQ z*02}Ij<4b8_qz4-+xx}mZ0o`JEOC3E`aS6eQ@&jXa37_6()|*9Tsqqsj62GGQhaE+^f!>h5T}R%ke&vd&|`yZ}ygh%?kIHQ<-jGx%UrE|0VFeJ>nq4wXv~T z!R>SzG5iw8)>CHhQ_qk4%3XuDxEgIzgSNQ}ZFD7UndbJv{>WX+y={-*$BueX2KHJN zJD1#EcI+2C&pqvU-TmOMC&AO~-B}!MIEb;P?REh6N`C+0XxrTwtK{2-&rTngatyfr zX-DDl%US=r{c5*dmKk~)w2xfw>%RfATt3YATQC;fIgDYp!z?++IeyDsnJ2d3nr-m` zjLR(;TP_dA9?y-FJQ2$0e!@%FZh{bq#?D?9F3Wzx6% zbo;8dwu{?VEpbHtVCB-=-O;M{=8M5-$9;Em{sc!W=zc;VB14~P(63yG@o)NVOoaJK8(c=>sPBJw5>W?y0Cqc`2821ubHr( z!||c@9?~hU^{a76r})vvI(|kbWYF{a&M73*^Xc$}9LuYyJRg=k70v@Xu8+Aq|H=1< ztYu}X?Vj5ovQxGw{MUae$Egg@BMf6lQaZKq+n3wTZ~{)Zk`SSae+m0TR^Svb1PnX* zXZMGceHZh$JoGv^T99|JVX;SKQMg%SY3fOA|5%jWt+D!~(&8pq#H}wnDjUBso^Qb( zkfp`@z$CW`B$=@9DR!Q<+?4Ri9*bg#;4uYV>u`7e(XsFe;ILMj+1iaiQbG zudDgtN643o&dGwVpX2BS*Dmsb634FpBK|t)i=qix`mSt>a`Cn$2%m8LbGXhkHBO%# zuGvm^{6DOR+5H#@#O;Imd#>JctL@yJ1=^1~{y99$(DA|Deh{WQ`a*oKYv0`JJU53( z-ne}*pK*NbD!-hdIGf8y9DR;|j+*7owTt4L9DO0q^KtuTE_d{~c2qu%4wnzG3QAlY zjSCQ5CmektPQqf-4>jX;j()rz=EcRP|LBR?jy~6~6lYuz5X&m|5XWkem4Q<{Y9KU zg9-Xvn?S!Pq5hNhW91AJCwE^$xjsn1yAtHCO3?ofjH5WY|B}Gxs|om33H<*k0slk- zJ|;n*rUbc_=s%~L{eOE+e!wI<78Eq6k;zhdu(UPVuNQJ?54LfZ| zEUq&f`B)p2GRaFEO`Q#s3_df9Mo}gKUz~uqCE(o&cuxYp-QXXUG^5=H*Lws)oF^H= z`WbMjw-vMXvrll=gIQ8>R5r(!Pg4CW4Q*~L|Fn^Ng`^p2dxiRIyM*n_`GkS`XI#qv z)kr$TZ%V-167aPN_@)HB*Wj}x%}C2deQbZW`j0mBwUQ?NY=iTKDnnR5i#_aY0kzHv zX?c|%>|CgqSnE^q7QrcZj-(m&NIKMKtKiCC4zv5gDSyQu4d_+wcEOci@y7)Z_1S6g zYDqKNZ}7PW$2)izLjBd&B-9_@&sB?PivoH%%)X~kdd2G{5$e-saH~&;;GsU9f-8U3b9F#3hi)Hd(kQ*+-I56P*<^65 z&jW&o`t%5{{8b;d0aAJ)%f5F}dd0U(BGhMC%5x+>L75}QHy9U)TbsoS!BwtisT5r0 zDxNWX>^!Nq(d0i{i4oT(@K>AZkpJRkee00v$`B3>N-ju+n)8H3Lno*ae zmH%uxUMsQkSA3n|p`JYkxBPnrSN>W~oj;Yo;yVlknEjZh;(%>%(PW~2G64F~AEyLsl=`CI+xb~C( zEytq`J?mNVwBXeL8c8!E4Fhp||4`*&hhHmcM%u4QuVbCK&NHeHF@}2gpX*n07-|1f z`j_NHOF*x9o8Xjd@6);rUM*=x8zs&AaGf&#wTqtQqj~e_sgFkNY>kZy7Y1Lm( zJu3yjIeTx)boN2LHIE8TCt= za=D;I!+<1+FH{imfdqV{(SMPl*ZC*pulI+_UNYR8M^^HKtz{RaPxq+MjnYxOKMxRqOOa64YA4Q~0{{_|NQ zx5?03T>As-q0Z22{fGUhQfR{dW7|dVK}cFJ^qj9WO{h$8%59J|qY09xT$M$rTyV;@ zxTeWxiO?{z{lSilTA>NcwMg)=T-x`Pp6_`Xw2hQr@g{%T%~y6@bQs)@i**KXlr*Cf zNf)79DT9wTI9~N-gVqn}?bpC6Lq9xAox8^-z4hgwk|Q)r0WuPxmM zA17%Wk)C}_&sqJ6PZDBnFQwP#1uK{IdjH=e`IKJ!;?4lqKCwT*wcm_}ehkV->m?K5 z+TJ=3E4|(a>U^lU-rqhR@X`A^FEuCkApuGxCZA>{LYy`@>){)6Z0qx8!5C#Et@=DJ z$2A7OMbeDwC9U-TQ;u5r1W~9Hbzd;=ZEdjIu?lA{@iBhZGYZmaND1sH@NN3 zBf*z}{B3{M`xD}$J&F6*`+VZIKkGb6e4L?w6vqt2C-|iMKVWeCK0)6Pklx;>t(Hn5 zev#qxq`~cdc;P;hzoUJ4b+O>Dy%VqTAwf?ROP2>uRs80iZa-detCDltAzNe?Y|E=k z{hE$em_2##TxFi@V?`-gp2NCVQNmx_v&vx@#5h$^YUuUr`BOOzgTf9MvmGwCthKIf zZf(AmOI6#W8*69HxpwX%xA$w~s+HjuxyBKSs=(S`vg+oWn^$Hta|>s#!_5bluWD`0 zL!E09?5LaTM(9_;mbxm1u%iRpx)n>Cu&B1Kp}8GvYU@6~vLW^yR@Ek+n=)f+!a1zh zopas7X;_Kt_yz@rPm{(KP0e*HI$D}nx`n@nfU3#)_Lhc~%}tKL)@a9y4(y-(`ISpM zI+~YT|2SIA>}ut3w_xRhMa4_oTij;4bFQwfnY*Cw=H`w@0OB3T?9UWpmcKjXP(m zVoCEYOP6D7>DyMJm70Bb@|A@Beghn<#c!{ZS#4R9Z7RF0+c0li*$fX!vcW!?uW}? z8_}E^3%v1Cm(jCF6i@+uqlx5_p&LR z|7s@t90yJLxdtqh|C5CBujXJu(C2V}R9OCjgz{&k;k%4{u38P{znIYfhI6nWbowa! zAJ+f(68c~N6rZJDa))J0}|iyUyGlJ2dyl>s*}vqbog4S_HBE#^V?2{}t&!q5Q`=*&uYe|J=Bl&8YS~307WA)XvYmV22 z{~4FeV7wJYhl;&li1%(84!iS{VbeYW{sm6y`v7+A^shsI4+mi1{4VVO58dy!me`2w z?$^aVQ<2UfrvIH$u#FyoT{kiK5WwD< zeOl4P>;DY$H;*cMq4$}wRbL+!z0jM=%%FYqRj_qF_5Wez#qsUd_qu{ zezzy6>|=~$`Wo5tq0A6gg?U881Bj8Wo$`{w0^|-&^a1j0_P$!OO8g}v@ zL0()7*T0*JHuR=u%@{!5*B{Bu;QrE^KazQ(yr`sf@DX3%J*eNo`!h4feo%bd0O|<$ zg{RVY(x9|Q5A6TFFD2Oz^tgkUQAg@SJ*`gk$>GYoH>XboUkStgE7ruiXMK-5C1)qj zI_^PPi)61;>OV`>pJ*JmOp#soO=emwVd2f*Vnr*cMs07toXV4QQJx9JUw>pCVtZPBTufcug&l4Yl_j=PeePG zqCHPSyADS`KN;U@syXfO*r!zxONguyj`uNlErF7JKp+8;!YxMPN zkf+A<=_`4Rwmyh4IJRim-lyRIP^BuGsrx!nF+hxU-Lq-i!Ali=I9s)Av)H_xq32XUQn|G&vyuu5A7+;Ws1b-hV@vOnNauPmvL_%V7N+HxM+^jfs-H5i{)_Z?bO?8oOZ_Mg|$ zf2^M>)*X~ykNZ&gW~6T(w|Du(2Kc^XS?W=yxf%2YV6b0^UPVj?V3zyU8bmdjR$p%3o*pU!8F(mZ@T%Yyysr7T^)I#lWX;dou6?D42=J3dUG zkA?i87wYlJzIRcN@7$O|pDK3u3Glf$(T#cNPM@GUcDgW+;l0%kJ!aWhetWF>Snu$o zGx1D+|GMKv^(;Vm2o&4|&d)qrG6R*KM#xJq%?mj11ca()kfwJ$U ze11GOlo3jeb&iPhZ}gTQ3%EA=vB2w-){CFZ&)9Ykc+kJoR`|O6iOdTa%iGW%Z_8Z{dEX2y3ajp*?nlt%lWY!zq3q zWVtgZL_2PWem_3G=*?GfKh;v4xuf8DXCCBxD>g&_^OvCHv8SeQ3{n+_U?42{V zljVXBzM;YY?S018103lq@?HXN8g7yY6d{bLUL$!zo&Udz7g z<}$0t&)jvh&_CO|#lt2ZM4#dP6n%l}{6gJJ#zd!{SQVW*wkW!-{I9ytKI8Z1-2da* zm+gHzwfMc)d0hexezEgMUU}r6o%1ek7|XN_%wI2aJTcb~fZ>{edBxB1oifjo7WX;m z>-4*OhP#(}O~w)Dw1FSS`#`I?wi>r)?!#ttV_j3rtoNnmA$%gihH1MeD);46jHEL{F-n0~77Mmk% z4AOju-ykF_WmyA0Ve8&EBv{7p=nZY{t6G`GE8&o6BDQN;+1vr~>5dgE((T+vB$|kG z`N-AFZ*OQ_+LVT~uGXcEX}b9G->LDLm-!3y=H(ssBK_}+LRYc^NtFAv*G`0B`qPJ6Jd zw75Dod@Rn7h+cf@`#<>M?jQa0zy3@0N#)3fcW5ru@IUZ3)t2+1_Rtv*jxH^Z=t!yfrko!C=VfZ*ZS@BO{uvyABON29YnaFT-)a@w=b6L%QA)Eo4;}wtN$OGcf%LEcG7_gZ z39XI;V!FOi+lE-b&?z<#*h_-dFs>d^yC`fr-*Bm&!^hSx$`*+wg1@jl#ILWOAcG&z zQ{jpjVcG}O_Hw*>9GA%E%|kW_aiP)|B%)?*s8$k9YWjUX)ERp zKes}=#Y3eJ4o}r+U4GyBld1;YpyY8jmenKb(bR|ON+syh^`^CbPpSf+3Yqv0c-i@N zA%3({&zsutZnQ`p8y?3*bSyrtzT_s-aQ1~Q3iuRdSH}DAKPoWJr_~aiOu5w?o{Hm* z!TZXIpB>|TS1m@Lu)eFbAAZK^DIc6YYxh6f(Vvw?TpyLAIGbUxZY6`hyG)z+3koNuhnPEYw@3>q!hJ-N(hbs>}qoRLaq=$Lmz>AIVFeQMWYn1nNJAAYs= z!OeG)j`MYOqm!HCulX3q`MSE&(dXpm)92(WKHbq5;-3FFCCkPW9epA0>2u>tGmLfg zh4@BHVX5eRCCl2KaBw{!UiZUr2=sCI z81%O|d|m>5HyFp!e>g$z^9g(g6ZjlT;4>@%zY^mpPM^~f=6ZEW4sGqA7_;ZGj({oA!zCQtfHvwOnAopVl<(ihz|IbX|^Mi!)mL%x| z{-+x2qwSz$sPIvN?P8_Dt0m2d_r?sgy`1Zl?mr`G;#V4+FRB=bU*(hTzh2VB+4nTG zNP@PPGZaMJDrwqYTD((m^10g3uQ&KL2IosN2IY_Hbzzgl%3pDPHdT5zjf1u)pjW(C zaO!idq#0>_E1&b^+zyFVuHw%MPCoYDVNh`Lxm?nW_DPz2EIty)3@R7jTU{sj(qoUgwkUzue$+3_i)=%7dr%c{$XxTIfSP>jhUm)!x0y(6ikYZ!>b|8+}$AKDHjZ z3?Ga47(TUzPrt!GZtz_O=VFL#!1!Wdy;*&R8{GE8k%DV^wZGw=wF}xVijNNHwZG{a zYo%9QpXI}TSZVaJ{i@pF3%v^NU!R}I$KvXfh`5e%W*8}X3(6(9>Z#>Q3r;>aNSaZF z!L`i^l?hJUa(maOI*^a8=fy%F>Z8w9p+5Bi{rz&>B(c&fuJaP*+VS2N@Zo&`Lx+!? zZyNSz#a9a+>fa@JsQ+5QRUfU-?tuPoIbIjgE51?iQ2(t4xBW!tpHR z9th~QJ`V=;ibtqlhEPwnaZ$NDJXxgAXIejs>%2!kwp{ZJ{~Lt|qniwF=e-t#Yab*1 zT7!R*fCM|wOjQu^4nuG80|u`&^nBiAp#GooN%vo4@J}1O-r!cB)dpW^=(`QBV}z&q zK7oO9E#6~rJMOj$uI-}j-YdAai{g(4^xE#*1A4_D7d-3_PX>Ix>(!3>13rpBZ}`~$ zP$v1pc}8g{*Os?d=)>|Z5$tMrQN{1cY9C6KH0Noyci@!!=v^HI@% zT_9KSje>{zC(Sc28+v=+Xy>0Ap<#5u(A)8=^8@AD@vHYm#I-HR!rte6MtCxsDdi)* z9jE%PpLnIAxATDQC*8tF+gEKw6<;6FYk$}n&@29c;MB)nk97V~xt|ugtpOj! zw;Mj%=UF^^U!;ANxVZ9d-KhQ_YmT-eJMGR@~lq*?I`?yJ&;O z5Z-qwo=%t_M*3{o`)bv*Oz^NB%LQk<(C$-1g(QgEdYhSmYhUHORHsZ3kCC+2=l>(+ zN(-*~C~ozs7aB%7k5QingR5@JU&~uBG|FG`7Qw^vb_lL~v>$f{d=&38eCj35Xp^ML ze~H00N&X+x1H{85O+78H?G?`RN%$n;L%EHHf5zZSL&(mQZM*jf9=7{d!NYdf{-gBuLicDu zuekOT>S^2kS)nJcWheBS!Eco`qkRUq{b97hZ;~`4+g^4YO)~V=hF<#y^_gpM+rC#C z+_qz@!L_}#e)QC0Noaj4el+@9{D09SGMwV-t!BrpPml?cM(!}k3POrf& z{eZ#k^T_@L+}@8_`ZCC4pj`VNuS#&%r+sgu_hYP2i}O1*gVsN7R2goPSnFT$Ho+;^ zzVBKscqq5a@Ue2k`>RWYF1)`|+}>Z=_eJ*p%08Fb`zt$sUov{~eS*&0yN#X}e>tH4 zk*l338VKkW9~7MRW5@5lfX`2b&;Edq;_n+i^Msa>-j9*LEw8@sBCcbK^!7Q|(%b%T z$Aum5%gI1Ot;FPS>r-WE|Izx?@uK}lah-FN{&*>8z3^9h#dU0k^{HcA`J5qq+5$d` zuQvMI`dnvldwp4N@Fqz!+G_9>2H$RQJKsKOa4id=mkh2t6DkqB2<6c_Bc$^lait+% z&OZd=!+p~IS4o<8+{xA)cS3|?XA^?ecf z*z4LpLtkm=D~tUB>FxC{f?u)5wmYJ^bE<3V=%r~DR`zmD@Z33d*UtSUot;(a>gGb+ zEg`lr+$l|EZsQEgFZ_k;J$RWb#Oa8NCv;UcS3uJxUF*^%S=c$8qK`VKjGPhuz_+fs zGn##U-JC^>>*Q#`tm~_t(sfJj=xA;y0iA%+{T~P=YFc`GG`XX>vm+{S$AyYm-rm6~ zfSha>aLx$8*B zN``Mbt8aFNHCr=0nZG_9)lxhE>gyNPwXJ}^tf^>n-+C==w>H1j(hwBNA|!j{$DylQzPS8%smeSEKpbzf+i-MW0m=jpdhd?&;yD;t)@ za}3=IW*x*euUxqTUj63OUA18T4Yj_vtyqb|hrN>{Vny3+I!37FEh|^R4WD#M*H5#E z=hnEajh#;-_%yq-dF2Ws*fM+Sl01)h;R<`Lu`JFeax4GC8VjulNa&aDi&;VFJ1^fi zo*4)ngVr~iuL3s`q5H~J%a<=*ev6iORa@Q4=9@i9P3^UFF>_p3clGsG&aZPG;oKmy zs%n8^O(+V6mKj8rNufc3W6OQc*#Th6Km&>SwR5juxNu&bbEw$fEDV}k>TX8=XwGYF z9qa{oQ}ZpxbsjmbM0PmSlje45nSneG=XJ0ZaZ{25<}CPR?IP3$Gl9^>PTOG2w80ic zI~#|_GB{LR4t=I#pLF4IC#*VFG{RPdV<*OOUS9Q~?b!u7oaZ`}-FvW`H*5CXd2Ay( zv5WJn2mg1M(dnK0n{p|W?r+L;Cf(nZN+$6KH+asgp8D1!knchdfOnzy@8(Dkmpa%? zn^kDJ3t`nqeH!+7c>$Njyzna=5evwoOdeJ4U|25cQY!!)F8^A&PHVO>|K|V@%P4`w zCF6afRx(V%AusKE?=)KIcpo1p|5=e+BXk;t@^8e6IQfe|>~qvhM#|^?Tqu75gvZGr zF83j-r?APs&(!1VkU38N<04=4Q~n7t^8XZ>2j%8h^-q%jCkf?GU*vOWewP2F82LLA%0E&%wBCm%$^XlQ@>hxc5>^fZ<)4gS z*!~^B;_9D{Wf<5$Z4h=@h|g}sGFikYGMD&RpZ_TT6#PQ@Uq(NVlfO|2pZ9FC|DpUp zLjE}UyF`8onIlmCsrZHRUrUf*&(4BipJ{j;%KveK{N3^ppw9x7KMKE4eh2i6D}SrV z*ZxD<459oL$Q)Px5(-4n{5<5U_E7%cCCFcUl=2@>ke`l`&*!>O{>%jV4~YC4oVOt? z|78jCt3>{Q_@@oWV`N!cGmVazQ{iiuuBIr6ae^faB&Q2Kr zy3y1woM)i?^Y9Dhe<`8=wQ;gUIN+n~e^~x|kw32dyQ+MaO{`o5%0C~!P<}f)K1uAm z2^>aEBl#ai4@rK1Z|#buvzLK#mEaKl7D+1n$urlzK@A3 zf6GTa#eN}V`7gvTEdO68$bVeqcS?SZG`}8yGeQ1hc}Z{kKQGCeU+3k?s1VkP(kb5x zUMvuv@KN?(>rdmKOaI9dNaA(LAL5!%@wZWV#88a9uwU}G1P!D5EAf8hkE{P~DZicn zcuCg$TK?zIe?r;hy;xoXZkKtOI?j&CPhW&HrlzyuNWKWCOrIg-^`&2!JMYR=QLaXc zqW_WY*VIA7K{Gfq4$MT8L3wCR3Vwr*?|b)h`g$pWpN8LM~k}>od#q($Ez4{1#(YC@T2I|ZC8B7O01>t{V zB78?|!+XiHdq!mXpz3=3Hf$c@eQ5N+Z;bjFq#r~2Qb6@PKZCvP(TqK7=-V$d^TXE-|1#6ycZq)ZK(n9)$C%d2x~bD|;D>LBZB=|0+T|M5$JMBp8r08K zsHZE@Mswkd%D2xT-_n;lT9~AGG zkNy)`UbY?EjctbU4xc)#bFb^>!}-&jLw|ZDeM8sMk5?($=Opyk;qV`n?@y2O4Sg8V zXXIIF?@y0?^+MVwml9V4_2t@N>@q=D&zy<2 zD}x`Pl*`kP`OoT(%jIFqul3>PZ1MF&KRGlMc@0GhQ4c#WS)X_Gr$-&JfN8@AcRl5NY8_g00_N1wxW1i*>)hEGi|1fWj={Wo zE@U0Qfph5~=7odsw>E@1Y5?;S{oH+PJbW3yn0jIMB;0GQ;T%@7?YI$L3;q^<*WQ7T zwuSJ6_AdOi9UA59D}sNv%Q5%#BF~ASD~8{-^Wk@G{3Sj==O_AKQ~EUKpdRpIUH9YK zc^7=K-EsV=`>uE-_2#|sxd=ad_m*)xY9*p;F>c{q7q+R~hsQdi&&hr}yna=0qQP2*g z&OzSMnCpFB>aM=vW*J{__3s_p@d;cz=nF3O-l0V`alYW-@7ei+bN;Pke8D|4wv%;D zKW^#^ZUA*U2tD<_Hs_0)Y%C`?WUvRy+X7?EU5gh9mq|V>iN15|@ zrjE+mZ;cjDojx5Oj22f`R^ba&=WoFq8MyEZCB9N6`VDhp%$IF(dUjaHVPHvLY=!>8 z(2sC?mLD)K^Fr`w8li9J1+-ya2;cFQ=AHd7A7RZa+wplnJ>{~=6_cl?%Ue1++S)&I z$tC#Kxf0veO}=Htid$Nn+gGew+1NZ8OHeL>_qx``mWHLvFKKPPec8qM==?dX5lJ`A zxVdV^&6Q14F1_^9X-(5Brc7;~-dHiCa>n$Vr!ARQ(cIWPt!e7COQ&9_)sOkXg`ztb zL`ADVRCLbpvCgJN-w|}NBUF#*DT1S^j5=caQ|B0}xE7AHa6-IHc|TaS!moyL;4>@q z3$|KlRTlH`2A1IgcDU*h+l!9u7YsC6M_2!B{er#hIOX2M&&2V5!Q5KL>JhsN{en3M zTE#n1Hk`~drsJz}Qwvq^*(( z!M&pn>cRT-ngH4+q2)sb>S1K{@N-8#lzMO&>uY57h=_GdKDv%;v2Xi&$m|4*!)%E2$;JK>=aXx(;~&nJo>iPrF0K`g z^T~CUW5KVy`Qd#Wrrg&TkGno1Bym2u{su+0KDpdD1U>g{%inR@GvT}4RK%|fKDahU zlHWG0uP)c7LKEkc>$8qtKD>ZV`}Y(lH-`%g7Ztm&susbTRHwguK)@+ov;1MlCx_cy z#qR5`?d+Sn1 z&#!oeq1g0)Jxd=tQ4CJBI2y+&FQgrPAx@%V zXNx-xScBkciD?sJ@d<+SdQSXPa?E=x2BlZL+QZIP>Z6iowAkR*#?{@Q;+*mqvZ!7X z%3tv&Nhm%00Yi(Avid0ACOBjlr zD<8!l6`Xu#Nt)5Kk|v+&2Hz=Z^0D|nL(g`ZFUR{0y~Pg-PPwxs&1e{o8A7@E#^FLJ zcY>iOf37WLC^z&LuN0he=Xg^0zu4f~XLzFC;ByVV_HnIeJ%#t#E@(X~o|XjVUa27B z3WHx|aOD%)TI+ox`PhD|{W;V}`*WyIy~tAfJLFjVv(hWxD(5NJ_FL`G%IEimu0vww zqqz3xQ2#EWS3YtWtqu4n-W|~2EXO)7RIcJ1<$S3BR)c3G&1g{4p`Kws*DPT_SNwn^ zv|L)B+W%Eg#c}iLLa3)57wpe`k#o;5QkZ&sG}R41S%0h&LMC>Qg2( z;kZ+pus_ray|%B4SR@H;U&X_5Iv^*)ajLkE$FM)NNIsRT#afPv>mnH6xV*G^!mI|DfyIM@r;pcpCeQU<)ha~EwA!X{3gRk?^OvMsa!0trPul= zZs!^0qxy)r>~ogtqj*{pO8=-FhvPzVtxw9e^UO@iM?52GMop3?zS!U!6Yw5`+xd2% z!K)?B=zziJ8hjGuF;K3(?$1oX?R}A@Z%Lr21B~{RVOSHg%*_ z3UPaVnQ3r)eZks27f5gCne_&@_jT&aK+KCfohiFBm*sY4+@g)k4Dt+Qvx^V1d8`kF zd{VAWlU|;2d}19I#5g6$3Z;=Q-4dvmg2VeI;79Uh*bFU3jY1~_;UbL~ z_W_RNC>#-l3o#DM$}HF@p!==4B5)NL*iawA??7kWksJ@WVjjEa0hcYw^?>p`g71M} z-#p)#?mOodD_1ohjRAjN4?HR}{%j8MD{%A570c8?i0zPBx+5F;yUIzl@^@!VZ}LOz z*v$O1%5b1ri+pR$e>kK4*y_dph+dhX2Of(RKPRa;GyXv170c-L0`+^87W}a5R||e5 z4{yN_Ykz0K@6Gs~?LPkgKd{<=a+tSeHlTXx((Jv`Xrbe?7|RsO@0Wts2%Scu zd_I%M$?ukndA($$d{(92bEy22Atz3LiRi6#!lqzdTnRGA$sZK?nxFEynj@6IJ)!>7 zBL4x2ljMIRq5h)}`5g7EbOg%B+T#NGe7=Y)Kl>$v>hF(ySvAdgVM6)q$9XEvPx&X| z7nc8f3FUuD?{boe3bnU<$nbEzD6^6Mop%YPPr zq5P*3%I_u%(05CIjY9cPCX`eLX=jxnL{v!$UyE$1Q%=1z9Ka@|K>bUanzQAYE z_i2>RDLItSXELxT82>Mce0`1ui3_28R&$*El5$Vq>mxV*#v&cc|JQ`_mzVmCcAXuO zQ2vh+%D-LY>w6HEe;j_H{LkQ`$nqPrTpUGFmkfOMRp~(dk(NQ@SD+BnmLt<`BnZPFxH9EDc_wU{|N;o*80=b-jn8J{kVu|0J|p8g@b-+~sYgpr5yw#;Yuh^Vkg042XXWThiDJWoxTo9ySCAl7Z~eB>n2B?dw_)^8cyvw=(H1G1{p_?!Itmi!*uj*LZ8slvb zkI8s!#rI&p^hx93vox8gVE%0v`^WHqJwe^{DOTZu1mlt@7RC9;LKMr|99SzNrZ5$x#e8YC@)t)4sTBa6KLxN%h^Ce7)lRe@%W8SWuLl;&1{8IO{Czw@;Av8M&MkFweA&=rdgOS(@jPf0zK;$a{rr+0T*3G4LAaUk8IR!IT)rpF^9sBRJc##$ zhbBgk@Llr#%NFAO(r>%>ZnM!wK6X%b_@=+cd#7c1|1^X5P_uX+wH)u>p5Wf|t*FdB z(&67Tp7;myo@rFh_n6D^ZG-IgSMXl$t9TcevZ`**edfxs(T>Su`OSsN4kJE#VzlFs zd;b|}ykAR<-=Wa-2)?1=zVRSso^yF`ade}2FMbs7sJ7tUW|nI{f!~xk6Yq-hTN6{J z|6KSD0CA4)1SV*P56w0&lRvI zo;5!-r!0E78aS?5s-D6-;al-NkiB?^JI+6HWC!yHK#QeHmCDc<%V!SjoAJL1|98R< z-FIf}Hyn21+XbkXuRH3uf7!)oj|Q~MVzkd9v=iI!JFfjk@vbc2nI+Fx@V;v{x=q@% z_I@p^1EK!I@TV61W9)I?19Cc` zUHEQ0`3^!Zz60^dl#`=%&*8D2vWncH`{19-k2Is`ulyzg{Huy>qV=XMp5KD8;MaUV zxba+`la2Y%&5J=nuCd=66i=`vuRT{h!Zfr&G?bd>4V~9MXgGt~|#X`pRd= zkl!NkrQIKQcBftzqfW42L4e)`A)N2SIW=6(g>xY1JR4x!f?(HI%z$4Ogp&%+5>ER1 zTl(>Nbp0-MBFpOm^-@J1CSzgzxK41?h{V zM<9>5PUZKExx3Duv9)W^QxtL=N1;}ecTSYtbSU3o^4 zvxCS^dhhpKsAAvyb$$r?iH?6bim9IA=!Jd5oZLLFdX9B`^0=ttqNMkAAHhJJalg=b zO6R*szV1wxJSrx=uX`2BWXyZK&X<9`*;DfpZexfLn)ye5VI!zp-q3jSn@{=Nnw-)eyhK(AOLKEe2m;@T~@ahrve-{!W8G zY4D2-{(`~ZW$=9lf49L88vH#5pM-icuwFTr@`tMpZu!{vd@P?XL%-1Q=@mTmlL5g) zKhfvNm0rlAn*(~q^?f1gzsShdwIcDw1|N}v#MPIWo#t<9bJAOXYZIQt?Zwt@245&? zMnjU;dTEyWPiTit0llsmHVdxwir*zT^|5x~xXM7>>hq9?-TOJVpY9M``O9gvGoV+w zj|TLL?-o4N=P85RcBwM>C6Z<|Nz$R+CJP?wStB^djY}oXs8Z4)AC(*OsTO+bKU>m_ z8VtU~;7cVP@?S1^$p31?$Lgsp$wz+5bWpkBV{z4Ae`IQC9Xj|VKyvraN$9|U~7HoH9lpWCUqwD%U?3oyE%*Yonn)>jyKOWY!+uazC z{+@#}9BAnq;4MVm$_|f;_ubGd5Sa7r4m=?4u=s~y^Rup0D||OXVDsR4(TfUdsrJ^E z-v0Gn6y&&wW~jXw-0n#j8|UaR8VK+3MFZ|gIZN`m318701y)qB{h<^qDB>R&_k`f* zUqDDAZ0~Au&7s2MO%)5+g;X(1L#3Mv`u!A(8$$07C;V2=RtC$OCTxh<-80ZW>(UQg zF|&W5rS;l)m&UgCRqNL{caZlLSf;=8M%~-5(16{%1%1qI0Hr#-dqdtd+hRdJg8j`B?az^ky6V`q17OSoAd%$@R>KladDz>W0k-SYzpkL=^=ecf~q z$^52!@gw^{^^tu%$e*&s9&&0ZMrSrZKK6jK;oK~RDW7+VL;1W$Pm+I!$RCjM8in$C z&ml?vBw5^Sm4cMd^-(DQSqM*(@0fz#uC>T2lz&S~`}zB($1ZfLn z3-upK(SMRCx`BmF2=)Ia$`i{O8YcIN{7r&WKASX@e^pBTH;JHQ*{?CB{)2K$+t!~@ zD1UlN{qGX_H;eun39P5lc`5aONaQyQCF{>V8_NH*$QO4NYS7A}ek4YGLdz@s$0_nF z`O7{6?_)AhKJUV7c^yB_L4`Ju}YCTzh-u2h=icc2#>LNZE-t5(OHgt03hlQ<%I{S{Qb6_B@{3VEss1%m!D=bb`k#Y;EwA-|9OXmV zFP1X`S`u+;jm0D0UOQ~)1kqO$~NPo$$X2|3%NQ?W!JJ zQH_0w%F2fO3ZG%i+kv)uz3ADa;^)=)JQ|-XRGV|(wXap;S**&auI04cBhTS^qYm)u zL8 zw$EYx;r4EF{xl7Hn!zS~CXhUuVef+TPb|WIYE{^i%IEtr!_({YvnW@k&+g@)Bh34& zj1k-KJtukzZQ9s@c5a5Pu;#-varyp0K8J5AeD+SqhkRShn1=C&zNmI!`>CIdCX5r& zQRtiT9PMw!AA9G7^zeK4EFyK9a%!~hKKR3Zi=sR4$9{;^QSCQ8F*-B~T4ES`W4}ee zsI%C)@DH{J?g_5rbCMjNlb#m@jT?W|{`&0aUKua)dirN3X$SYrBy@bvJu``Y%<^Mx z9mgb|%v8=Ne=NyR7vGNeW}?3G ziri~^QOBq76X&oSTYMhs{u1$fGjHu1J!R<3y0Xf7SjWLmK0leU|Mz4ds7{ap1JF6URM_Iw}v2-Kxg{^cnvw zc-8iEKp%;396+7X|J`$>2d-padfYt^eI#3keWc2^y@LIo_Akp~56K97M`fmCuc)}a zhAV6vRnDg#xVEig8{xN9*G909n;R&PexY)GyG(KI(wME7hjFj&xpTQ6r+dD5`;oEH zp~t4US12|=hv&(6q3+~$wj0}g`w<^Tz3%V#<;a`ko7P$VQ2Rh#20wvA&hsLN{f9Cr zi)G0VKE1>8)3VBo^W>DWx@&g9FDYAPDILep!#6F2-LUsvwoLZ^496t*d^l`bxCVL* z{@x5p?g$u z4Q-EkqVL4ADYX@4pF9&wRJZ?Y^;I1Q{W$O_o{=wu?`PoqXnQ;h{)*ct%&j9Z_j|pu z*W~mg&>1(B8V_Kvy%9X$Pdg5yt=Ok2??|TNnr7E#e7@edEoqLRK7+tVFc+~ekk@I5 ziI2jzKX-L1ECW8Vy(8BbPQ|nK>|5`78hdtO{Pul(F*r;9qI{yBDX%a~${`8mWkOeD=)fP#O4OjCA7y?KVhV zHu|~@C#?6YMHe@Z;<^5oF;OG@YSYu1=*~f`3H>`Mel0SLb(TFJoQ`n-@5qEQL!P^^ zZi{)k^$yo|DLiLkuUP05@+8Lk;6HKwf9u(4>;K|+HaOnC7F-7?U;1BEfir|rcl6h( ze9ZmuO~t;1{Yo*uyS-L*t?Jf>+gtN|b9OVXmF~k>bsqZsW2o<5)R)&!T3%&f+=|~bSqR^WAOrJ|YyT1P z17178Ct|y5*+KYw%PQ%+1?xt?PH_3P(l=3_zQF4eG|1D&^9xUpX26E)D;4y1$cO*Qf7|K66q zmbLxSzzx0a3iAt(Jq5XI`g+#)M!k-kd!nMNy*p}aU){343w-fYdG|nPOIOqh`Tm_N zN9i8M=p49VraN2PvSFtCr5w*Z^t83N&BQnSX7Z_#-e_I4Cb}l#wwYuOH8zCmH7v1q z3j3+%h3{mQN*DUEmJ9iXvG|ml|2x0)mI~XyRR1isy-M}FH>%yF=_L~i_sPbK>-sSP(#{a4$&ohDvm;OHbkt|! zwI8sa`aFD%uV>BD@n@O$k8iOsrPq3}b2p*Y6{owis*p7EMz@*}V zn51t%aL8*9b05bpDXenHIH*;dYyzWu;w#_YErmJ03Tj(>P}&u1p>?an=L z?cVNg>;(CrIzBK)5T14Q%D>g>+EQqez6tR|$3K7fP<`u@j(;9kF|*;!W${cP-#>}@ zhj$rq^Bgxe?YAP_xDEO~$G@0}ySDyY4jHpcj<)X@*R;j-9J9*I+kRVR?4+EeJ>TEy^u$w260|@5*wr_W zYd+(oz1{IWIkaQ`tuoc~TaHg2S3aAZo=fyJ_@>2KF|G;j1#kD7-zpiyj(;&dvy=9S z|B~}({JJf{&6!Al%<;+Nn$I|C@AzgnKAatsX+Q09eDZiq;P{+tPhI*;n13@-9v>2l zD;%FZZVP7d^}#T3FMy1}rwKug<5Nt34(wTG-bSr9472)SaD#oq>G}2;*(<3t9REBX z6CjZ-_^N@=xzFi&eoUr%zT)~t9*+qep9}1%OTX&;A&=*j!u5+ht}x?l!CSUI=Yx=& zF?fR%c*@mlrkoW<*@9i4d>)^D&KSHxihRTIxv-FdoMj8%mX1O2nH|&X+U|>vPacm6 zkjO@J?5RudK>x}ZT>Ilk9G_zP1Mugvh>!I6FpBzU$QFDJ!lVD-{C}>J#B0~pj(;AH z36RJZd?mu?EOhkqEm@q-7VIYJ;pvW^E3x8`HS@dXp5o~9^SIl09+^RrQ&ztaEGwRGN`xe!t^ijC=ZgKT`TVj=mWG zbB8x7SsZ`L;lCfBYvM5wUj{oT(Z4$dpPqs*L%SvMVS6Uwc=j$4 z|Lc@`y$kK0#0SqOC*pt;@n2v-PU6G$X%c=}irfcM^jwpo&qXOX$Mqz+e8({fufTYl zgnvIp|BWenelVpS`Q4f%{+~#(+x;o{H7WSY6uc{?Uc5h%q|aAU?D?J)`dKOb52o1X zPcRN7$-OxRzb3_Q97&S+a7B@XqAxCE*^?7sPA^{FxVprjdDdiD_wsz1Nw(*_Wc z3)K>z8sO6eXMJy#G$UKDjRwC+(#l`&AmjvB{)#UVJmkMT;G=ps27DC1I)xAG$e{Y1 z=TD;!iB%uPdj${m(e<73nIUvH2YeL2Errh=f-4`rQrZ;oQG81ZpW%RyUYR@)@KOB1 z6h1owKAc|}cKRq%`zSslcxazJ2LG6(89gCst*>T1DGBAT_)`J>d*%F@fL`%Y!Kshh zoX~!Qe_YZwqCTq)P%dfeWASRi$=~+7r3U|mq#0R195nclq{+vQ54L?Ry=|{QG<+U4 ze3U04wHx_=($McU^tT(l9CQq%|0ADt$4Lgi!{F5h|6_yC5S;dGHn`qLq&+RpbtVJl ze#$4^QNI~M{7(!%VCc1vFnieGcN%*Ajf#9eZSehu{xb%D-Qb%I&inQZ9Ai^2_E)~X@XPk=MA6w6nu%n)yD`m3(on)@=>|uZ~a`z z-8VaJy(US9>c3siCrhmQD?U|l^8bRQ8Pys5iw4gb{7VMcdZ}El+ZePzs$9hzeYR^y zE4R(ycS)L2ufeU{4T7uOZ^`-1602Orbu0?&yV>x+Thfe%B~5xOcdOtk_d9Z~-((1?~yd4{RY3+;NzhO1N9kpslo&G=`fHTKP_G*G@<_LKcW8BLQlE38vYj< z{62$glKgp%qrvK9an*1~3_e-Xq1-xyTe-Ou zT>X%I()6+Tu;KHkl4kU%!3QPHXpf}He^AnltpEI(!K)=5)@!-Jw;KAD2H$4zA%p9f zL1@_Ee=cc8I}EOUfzXJ-|3cD?_8HvrxAWj%8hV}AST7w*n4Q*+IVnr}ha}CY%iv!% zxcWc+R%w{6{Mj!oKGpECetVI@|C^*4HA|ZM*nYj);KPz;q-oNB&EStpnz-7W&=UrK zSkjDs(|T1IKDJ&n1m`^UbxAWCFKOy?v%xD3Zr4}VZgw88G4ysGFBd$#{?c}#+z%VM z%3sGfy{?%iG&;U1Zsp!;_}F&bXz&I}D}U8vNx)z6<$_aB%l~SFTmEeU|MTR$Lt@om z@m|Bn^1s>Omj7*ntNz-q+TWGG;+qT~%YSRYM^2*$C82y2e^e5*!xjY*KOt$=N3))k zM961UaPs+v5+mLxY2~BWYx@OPK8n9Cc-SubttH|+g@%znf1&*KI<5+I49Z{e$%2Rc z`H~%j^6_VQMkwH;_!7g%t`Aol{1GKa+!pYEx8&)1UiDO5@2`Y<4h4Kv#2tbwAI0x7 z`dB?5G`Q81_xTyr4ssejDhcJU_-;vrdOl(Bk9n5v_@v;7J{DIJ)&DgCEPWd=#j7Qs`e@%LG|k|4JikbA z2o0kVNvm9)n|BMYaut6<@X$Wb7~GDl zqk=1c?K3Y3uKX2$(eSbMKWK0}-`Vlpjt}Eee+HH7&+_BE%2iy)d8Kcbj7h>r=@qy4 zXSD5DM8|*HN9#m<5)TN(AM;6foGNLRtM@FlU#ncj)!)cx#PC@f@EMl#ql= zPs2F_@%Q+oJJuU~k-?W3{9=PwNSb_>7<`h!FEjWwgQvCo2MoRPB>&$t_)5d)ckS-m z@weUXS6KU}_=A$Lz1nc1^P_Ed;yNGcIHUAB_H7VGit9Ww9N?mcpxzGTulEi@xq6Qv zl&f=IDEB+Ud01lA=V>|L6X4It`Mv=Ev7FofNIjnwJZJ1lT(3hr0(`R2Zwm191m79p zYR}OCpCR=6+>_Qz+oeVZam9Zs^!m+g#h({kBgNHj6_P=Gof09|F`Rh6!6zB|^#<3Z z@>lzZ?W^_=+gI%$wy)ZM*vPf^58GGmAGWXBKWtyMf7rfi|FC`4{$YL9{$YL7?En9| zeM0|N`-J|VW}n~oxTNEcfE5|K~* z1W7Zx+TeD+9x}LHr|mSj_HjZ_7~Ia+<&eifx!U)6USn{(PP^LRZzZ9GUW1>lAmU+z zPc`@sgKM8+wvLn3$F9@%8+yA=s}>`Y-mcU1y%yqgjojM|eZ9f?;V}l%+jZI=gWGjl zl+DvG@=15BGWf*?Uv6-1Yi4gSxLv2|H}#=7IeuXD-$9)D@Ut-3z za!*7)ANEOiyxQQ+2KRdatzO+KUy*5QjW-6u7iL;J+FP$}a-WOgXI>hX_{~)c0l!6x z+dU{I!2Tw-0Ml+;8}MAUesyhpjt|;g=eDSEo3?ayuEI7jMJn+dH}Z)b2oRmT1a1bT zjAh3lr-SI^zKqk3Puld8FkjexFsA?t_^i62sk^hyZZ)**^2?VtEnm1|;rp8wEp6cT zMBK6E(u+T^c#%6f`c_0vM_QS6k&pS9jcs6-_6@x~*ruou>|EQ|2aF@@+V&>@X|A|9^P2{G zn&2j$)aQo|*4@+!Yj@+LUW->;wY+gz6M8(hWYe>??Q40aa+xmVKm4hb9*p|Ue}EVFQ=MxOh^Shz2j_z*rvwq~Fs&~a_cKx;?he9#da z-|y!YkHzeHEq!ZzAve9iV#8b6S4dh($&*SL|aEJ)zaB_eP@4Io}YQ+c-*wA zCC+Q_fL8F6LQxx<)~#>vyP=66iE|%ub5#+V!hVrBg3QucK}UwfqDdnQN*2KCg>+F2 z2z~ACinz3~ggb{_L!2Jvu()O2SwSyp^IeA?%7%)~NsF=1y6V?zhH-GVmixM1VVCIY zX$iMpql<7hn$=opYSy-ORWu7d2%{w88`iqGFW%sew!|udW)F%gs;%$FJ-5$ZTmu<1 z2MSRV(it63EiI%mURWg>&5=)Sn>EL66<6zyv)yq4H1iw$we}CVJ>=%#xM5bUJI;1T z4`XY&wpq1qgSpxHZRY08bMQRNW;QVF7w3*HdydW4w7?+pIclUWZJ#gw$R^pWPtPmQ#)*OfHt0eh%37yi*X_5RBP(DfisK{42l+WvG<)`>N z$0o~vKm;yT!4ik{pNH~E@(+sq8YxHlAT5$V2}Vh(zuupyWTpwB{8LaqN&Yms(Lw$U zl+XJIVg0|CB0qv%8SK3Uo`>?ENRgj=2dQx%!ADL$T{)D0AsjcU{^LcyUdIcYBKgx% zKB@k_B46*9vi@&MkpEY3iX{2XQqc|-EOA)>?I@olf6qm}z$Ph2`ESO5SpV{r{g*6#pA9 z^7THHQzk*5_on#YkjOtM{fG7Ey}VHV$*53L`}4grhGY3Z_Y$N{awIlkP;M4k|34l1 zq5Qci^4yjvHoWy$jA4(6YJ0SVi}HA|9?-BUzu~o3;I9rBZl>_ zN$GzNiTtgeO?(Xf?}C*6m&^Gg8>A%be-{2j`JaWHr1oFQ!5ZOpAH~N|{w9=9YX6-% zU*s7nN%>RoAIkq=%KXzPgiFPLg-ua^ydq`(*|gA?(0PRN&rXp4S@5R_F}E*-<1i-+ zgdrcr$D;b9a8msT7x^Mfq$K5^i~q3xUq|62`P0Vvg43kDMxp$#0!Wg-N95c7cV2@0 z!Ib(h7x{Ztu*9MKn^Nk3P~>lwa;*Q`@gLUzOJJB(|9V;X9jpGIOR4|xVlUX%|NI2` zFQxRqW|5!sY~o{B{})sG-;)XQFG!Hzm@@wii~NRIvQLEam!-@<`rucyl&Agqu6Ahu z|DDqQFNl1l7dA!x?|-JWf3qk)$;jvL7RpcY*D}fN|Dwp(_o&k3zk>3#NlpnQ-XQWH z5`(e+{7o#B|CboQll-q@f@gHB@qZi2C&{1oUSHn&-<$;bf15J?Rh1}zBxU?tnINCP z1BLa!6#bm_pXk+%kJTc-GDdtt&oz!x%GXGFm8WdyHo zB-8S0|Bs}|UoH-*zpJV|EwASrQsnPl<|*|3OxAxP{7OOd})2$riLiM71KA5D?J?{ZI}awvZZ{}CJ0*IpW(R# zluxq%a*?n8L-|Whd6j>2iu}Pdy@U-aNa9fb^(pdm@*{eUl%xC);9twDeC%}@Lufs_!#zl9L7GDgJwUo=#;?~x_{e#>=QSPJ<)W}%Fkg>xX*s{&F7QHXu+Ou z`F(}`KE+ko^Q~}?GP^G^_j!{&$u@JZOzgury%GDY&B1>K_D<71)u7uBk%hhCqV3I# z{9f19*gI`tQFI9R4mqQ3#{VY#7wyem&3(B~bM@Ko_&`qKevgH=QoZ08vX`ORyX}Ab zz1v2n6z~03Eql}HUWWI*HNWp*GxpN9dlwD|dl@!k&-CiE?7o9uX2`Q_vf+8!F?gO9 z9l}`4$GHmX5%O#~!|)9BD$;Wt_KQ3H*gSWgW_V&xalsAU1fMqJO)qf zyNtb;i|RfIKR$rHI@v~hCM-TUguUMB6C?2H>XZFG=hT(hF!oyyZC6nKQ$cyR@A|3O zb5P0`?A<9oR3N{hP`=xH-IOobyECEur-Je)1^SOWhW-;SE|ibG7r9SktUvY(4(p$@ zK8`)5Zyjseq&8@iF$=Mm_-SsR(3W@jJ$svL;Xeg?cKUjSe0O2r%G2PtxCXk@?@?~{ z?6iF63195nS&eZcO<#^1+^4$?;~bWsn;s_LOQ>&tpUOeU*Y9iE@;>2v3HAfUt6p<3 z)?hBFdKqH}_lx!8$SD{{3dc9#ZVd8caDE?J%4Zpr-(H8kQZd=o4PsApj^iH3xQ0D1 zhcLEbU9w{k{cyy;VzxOq=HUG2Fg^~-xHpLYl!G6!T=NNqd6-f$7l^N5-_Ki7M(2#7 z=NG!Y>qoGU@2#vm_-}k)?$G^+tIb}$h`yv4ZRwN4Sk%CKDi6L zkdLw3?}My)gP122qYaq0WAMnB!aeIbFJMr2`_@MdxkI`qeGBxBSZ}dK^OdO^=B`hoD^993n~ z#!m|8AN&}Ky-&-wpN&15)o*l<)oQbstJ;&}x!-@>w>#~_@vRy7o^iQH)bDqV(A7ebFB9%rQ_ULs?X>59@qK(Yv`jxnA^GTxEJe=LHJU*Upx#2 zANKz9o9q|=R8%={YoYJGG+MMr{5Q89Iw?AIuqlJRQ?uAFyWH)U{VMiK$NI?aPfh#b z8|!Y*TBZ+5-}QY&_Ll`d3}2_8ej}=!Uk5wkeq0sSJ=1Y7&BbS+j~)cgX!Z>F#w7Ss zzEAAO-m~00dj#X$t8OoP&)3Rbfb!2%5AdjS>!C^Da|YVa^QnZK>m$EMJ(jYtndjks z!M7LpqUZk27(cc{{~i0CeLNleCij4+E*#sKhP~JA&kkXac`pNgf%a~ItrlaC@kOv* z?$F_z{?_fsowOgZ*fHL7o8yG8F$dkg;&~q(5&NB5RyltjWS^R?n2)7-)d8^~G29nL zy?hze3uCXOqYjLTd3zo}JD*xsF`vG(>m3s=x3)g;!+X#C0c;F=ufzD%2z%72zq5UD znO*g?vr851TgdYVQ8e#qp(ibEMp+%uZA#hPYcPg3rj^ax@HE)4cpqr)wGEzC6_dwa zequ#5aoU?IrsI;OU~l&$kC%P#@J(ggetk-G=(ROjv_U!A;sp5Zm~Dp_M|U2;KJTw! zZGRAJ`&ZG%kG(lMbYyJg#>hk9zhPYEyer3He8*bgEn}mJw~UR}HDmvG)}Mnq^f*LQaO)h@;izksbI|u`H;s{w=W?4q-s9uL7~jr-T#k>^5OaKdn`=KmCKiod{{_dq zbH#SHFGT1A-tUt3xA#6wU!fmv#JcQx%p2-^^fip5-p_Hpv=QsL)cli>4{~a7-24(#@7xno(?m;X@J7Ayt=@%p3h_&VYSj#8r zI64M8V9k0z#@HdOSvweG%{q-S)~tIAu8n-3&7FWUptbzqXPePa>NcWmh>u{cuo1jM z96toqZNz%`+kySa3v0-_jacK-b{~63aoKA0p^aGcy8L;?`MCo}=Cc0qP0S~LeWA9* zHD%)bNBUQe969~)O^>m0smm#j?+*VLFJpF&tKM-ua8~# zCR}TmRS&K>8#Z)uWSoReH!Z@vfiZu&s~_&q*>>a_dLznAdHsZSYcWQbO&VOmweFPH zv;G{{4qR(bxmnI946eXvAsq#wi>p?r1CG91uH zm?O_UW#Kli>)GEnVjR*nS2fm(&B*@+=5OY4ZuQsCr*D4&*C9%m!+7w5Tf6a|kEfCG znRUTfn8&FX?YST8vr_uyt#8TSZ)JPxJ(tm}>u2$G^{88O4#F3e7+fA079!M&Z)e!lVLQf zL|@fwzsYDr8KZC?iRRw0tAApVbWF~Ll1E0XP3i$f+v_~`6 zYrMvK4LUz-@~A8G&_SzMKb8MH#*Ck5-xBMP!yI%PY*8qm_x!xw=wp+M@+UhU^r;;D z>;Uv%0RKImY0y%Z^SAP7-DMb`D<(%LEC2G3WYJIPm%NYR$C@10Ykqz2>xF()v`&A$ zNBl4$In*0xu$#@)XxS1~W-Dc6IW2i_~To_s|xFP)Hjc%t)+0SI9-1S(s@wt z%bZ$XIS<&5J!mgmN6a>O|)h8 zdhW5z8GWOt44wH(R6lQzTW=R$XZw3J#n;D>2lE#O*rFh03(oxS)fU3FeL)DHrNmE+ z1p)I&K^RwX7GX(P7%&eN1dNRZK^_%~F^m%h;q-#DD8fDOf-tS%EGpXNjg4Z%1@;7K zPP{hEuqO%W-`Ts+DCZZRM#tOUQG2VtbSLkSuJ3Q3+1j(ZrFEdEZzkW$jr_Z#t2^7f z+Gg^VxCpPU^|bL_$le~jM?Q0PPaj^g^kg&LYl!#+cuTY@>gj81?~9aK$tXk?aa<=*QyRJ{r#P5xx2vD9 z(K@91I{4fQrovwex>Snyy;4ff4QD!)?gcf9*Ysd7uLN2&U$eg3P*rTSs1^(fWe zrSdCPzvC^p)OLQO=t{NA@un-)&To|5Qv31o_P;mE4@#ALyxXHxe*b^-ms0CnYP-Er zbfvcM@un-)es7fAH)?z-)h=(8zmzKXc(+@r{7SW7sr*W%D^>3C_N!9)l}dNK=gU&% zmP%Kue#g5#j<<&RcmC%+E&QFKRR1g0ex>@s8%1}#{i;-crP{Alex=ftD))GgYo+ol)&Gunecvem zD^+f(^*!EnrTWVoCAU<+I^J}p`swkOTPnX&{i@XVJ>GIl)$e%I9dAD^m0ziLE|p)Y zbfwBIwS7zFcf9FJt#7IQvQ+(!$!}qITVGFSTlKWrHFM|I*3{O|sJ@_gO%IN%db$P> zbq(NT=Grb|{2F&#bx(J7UtRtD`E~Q#&aZCmYUy56eI2%&z_ta|v**vMnN?dotz%%I zxBnd%UfANf&sx*dv!<)Pzh`}4Ydg1QxNxASr>nK2rL+6OuCD9W&csK{uW4@`sBT-Z zx_-gxy0+Q#=FOYaHn(PWZTsBTngw+W=B}QzYEDgiYx|tG+Bx%Thf7CGiNOsHNm{;cZHl;1Pv?uv0M$4{wVG9mispZ=ubq=q;RvKss^ zCq2Rz9vUXpEFFJV&1W*3%Rf8ja~1cDyL)_Q!}uvROHul%A3XijpZL8`ZzCHHQH0Zzt`S?FYENWV8foTZ)2^~P`*y}$e$)1(0v1}VZ!pp@n;%$;fBO;eWSa4|)E*SC2odIp$B@CVa8-OI7!rcK4)gFXZ%I9qaewe^FT# z@?fX(rToc)O+}i4cHlQw8FD-XeiQc$_-eju-~^~Gl3%YV_rw63m z)kWnp1^th-PYUgBORH`AV7^URzt@G<+P6|1)M8TwQ=eqn`T%47T%SbD2ho$;IrC!B z%&whpOOUxmuqv=(pzR+N%zZ~K(T~Pu_Y^u(1D~IrivPV*wh?LQR@pHAtjc>bcbC(G zl?@Xj8oLHr{00_78xINN3+eM+>-MGSo5l3D>U8akE~8tS+HjO1n2qXkHoiA^555 zMOE4HQ<_)iy%fqdpvZ$NhyLC$A=%F--sL_0VCd=3I)9=b`-RUa(gk&NBlNfo+(fD< z?iinWKdzI9ns@v13H>>9SJ=)ZO$r~!1I*>oOGlFOvUq_k41W&#jKOn4a5|mR-~ziS z8%c!?_%M7lWAH7K_cQmc!(#deVe^dH9anvw#j;WOR5w64UdG^?h5y$b{{(u+=R~2( zN9!DYF;0qX(bM6uCHy>NaP6~89G~!Ma`-$5%G?*-yiDC|((@0WE{~!=!oZMmUr+b+ zZvI4aisN5Q|8X>7CR*%?anx@hJ_QqGqKjkP^-DR+y04?hSuSyclk0@I^JgXdfP3IQ zkK0n&=wy59(jRjElgD+O`)9`|k88mOM}MiF`f)+dvUrg#4DSG+jKR?yE6^0+d* z2J~fSH+a0q5r?e%ns|Kb5`XXX!P~zY1O$-sbeoe6^$4Ep48^`CvtfAY8%#5+@<|2;j8 zcE>5!_dIjvle;lQW(+=AD8B3X7t`Y%9<)n-cfmo!G3&mDZ2%<4I(^yW^9`V*(_y(Hwi~(s#Rh<#F}5iyWUkZVP4$cJK5# z-L779V>0#gQyiZ>9upvujpo}^m*(Cm8G|dIU%7TKre~q7`-*ZQt7po|XF&|=c=dOV zPaao-&w{=z`ly~pTcC%AY{BlM9&K>^->D?=HSGhAe;!wYpMhUlG^nTX^*Mp8`wDWL ztiLJSIRQTd-@r&v~EollR1AYR?m#|L5_T!0}mVPhI-cPMU#zDEan`IuG^5GUU#zDEaW=ZN;G8G(9DOlUFu2#qr-c{EGP8CbH3$_SB{CarDJFGqYwLs|Bxe^egqWAkLcgjAqn0`VZ=9 zL7X+~3e6bn=yeoS)W=yf-)YWIoqh82pyIrSEQ^};H14O@I($_Tey79RVtj+7Cc1fc zb&TViHZJ^!!#iSJ*ZI#m{F)+swZpq&T=!1;g_GMI<0^NzqwkIJVM(nY%X;+{;a56* zAjbDdihJ#pMc2i+%3a{-Raz7cO1J3|kz1F;2Q{!Bv7Ux!%#|+spFHMyu_qOCNH6Rg5z;8|B+k3+{6C#ki->x3AJ~ zarDKwr_Z;$(qHcAi*Zk%_Xnk)?&yngPoMV_r7v^z#ki->`;XE;;X_zZ zCEGh;^vhH5%_;a0=7A*sT$v={pH9IW zQt<8+xv!?!e`X3FxJjZuT`6{MO2KbP!Cx#-=KoNNpZ_?;Po|~Ne?A50H}aG0d~*u^ z4=HxIBBdYQm(m}Zo@b$5PLA@|ak?kbdmWy? zj#FH1^A^Z|3_h=6vLuL)D2RB5q|XGt%ixnF9nx1D-14s%{1ounC}~C)N&3_PUm`g9 ze_PUw+6)ep$DvD7A^%>%L;kvQBmc)^F8S}}5V!i*2o3SwhFP`fFAEg$-W;tf(Tl#t!^gH)Ipi@YAAg3uaRgUB zicb-70(&|R?n3IAJymTfREx`hL5$UKJydmITY}}Oc>n} z@K=1Z;cxYPFyN#5=>?itBSntgqD*H$`0_{#{iP zah1XU(crrGrTWQLl2P<lQ6a{cqC~#6s@oFN;?S4dvQ()HH+dGJF~g z{-nVh4gNiYHyix>2JbcaKO6jJgZCKx4uh+Y5ZYmIopTB8Huw)D&FBS#KW%W_40nNc z_@Tk|cRb?HSX|QTCz_?}v9Nt-2m$&0NQn{G8Qiv`uCGY{V?%H4Z}FvukHu}fSX|d* zA%7hwh+99j?P77;E*8Jb=wtB*Q}9PqaBWjw*H}K~LQlM3(l#P)+so2#u!NFkJAT68 zO3!w*c(u^bKD!OQ?Jxgg@ES?0pS&vP+V1KnieDu8u&hPYga_@Shrd z(BMBa_!ddiZlea@DrxFt>6L`_8qyQQ)@~NBGJNbfW9#*t;nQL0pEtPj4DCPF(A#!V z`-k-PhTiJaU~p^aB?h;49yIvRCC%tAgWGy-O~LmV`~^uf8kIElw|00j1=saI>Hk$| z7|p;r1997q)eiNzwS%>fwZlb*-rAwd;J=VGBkgOU{ckh$|HIG^8+@<9wN1(Amj-{v z(ErNd`waeX2Djt6+K|~(Q|wbNW!W$6uR`Mmr~ltBX-1WjX1}($wWqc7N}*@H{->lF zbr{^*-`d&Q|7Jt~?~-O@?W{H=zKI6}%C-FO^034Im!ugzYH+nJA#Ee_xlw2s+3QW! zjkvY*O9Uj?>&O4CAmZiV%Rv4w`=mQI3a;a-X6f~&j;o4y7(R9$*^q({8hpPpL9ExC z)W`Ot-_#$JrRqOjXNrG~pP!Ms0!B021 zt=BGt+kX0_!Iv05c75AuaJ#;3Gq_#f_8Q!-ZwC!-*SA{?Zr8C78vGeaGgALyyV!M+ z#WxswP14Sf=!xM&J6l{yNdHYe3Fs|eEi|EDSvx;#_*`V@?fBMZ@ZE-fz~FWsv39fb zg|(ZVFO(rT<)iq`DSUOEIe$uG)kpDB!NYp#I!gImDRkqd-IR~wc3ttB&@!qPdgXJKf5%2p^qKRUgImK5fXSE6}G^`1A()C~oIj ztIr()AN8kA0UyP;2u^)|EixHB81T_C^r3){;yY9LJYjIV4tdJpb{#Tabf7-38+|4l z{O=52EorsCW@-OW`zs#KgCCcS84@eK;&vX~qf8JtNSb=u-;b=GcHY0p(A%fEDh<9{ z(v0kQb=cslC*@jt%l}zJzeLicx9d+k&)RvR+0ff{Z=2w1=RcS84vE!nitBhqx&I+F zj0Po5{D`C(-C^(uc^WoLLgns|^DPpqT*Ze459QkNt<3O$)X-bGYFm}7bGG_`%2iy) z$x!a7;cw;cH@Nj@oeNa1ki~sL4fJ=b z(4JF;UhSZ3HT~U6J0tzwiuCG}#BVe7`v^!FHu#MSBHm%}n+?9( z;OcA4-XplyON%@qxYkSYCj)xzFZ%nG(krgNPqALMAH8VwvHfU&z+dGaOwmWb13>=v z`g&5Ky(mC>9qR}!G5GV6X4Gi#=M1j%0{Pf^r^C=|UnF#w z;My*Hzm8$p9rMovD85y2^0)n0$8+U#lJL=aK-)`kJI-4^T6g6$LHKB!Dj&s58Rt(B z9#mb&bLv0F;Nf~$>pNa(RIcKa1ScQG$iLp;%9D6w3VyS}v42?{h9s?aP`lkBxay<0 z9k<6BK3fAmYPSaiK8imoIO}EkJY#S>Z|)Ub^*mY5bzD_F6}RK0>ds2rankmSYOx6Q zvF$k3;MzunY6Mq(-Yw^K601In=L9GJH;L|qmKxlS+qU1S%}ClT^eR`M$I$+$aux3t z`cSTprNrNC^tmnIkG&3E7!q9hE3WG?@~Jd@9uRuswq6ekuKMe|ru|y^E3W;K_hBr5 z+b(v!-C*R#z5vYH)2_n@4gJIv{YQm{QH7-Gn=*tuWRk({{kmxeKT*<*bQ~t1@djTa zY2p(MzS7`o8$ulhKV8y{HW>U&gAW<}tp?v>@UsoR)!^qDe5b+BH~1cd&oKBi2G_nr zXs^NNNSe_>gU>U#j&-!p0)y)~N&H;~pN4Y=;tPG!9d-O9eu=@C82a}be5Jv)&oaA0 zXvk-op`T>%6$YPX@Z;qVR~Y^shJTtrtTgmPhCa<7^j-)_w;K8nOPbM6gQxk!DntK_ zq5n<&VYT67{h`y~zYTxrGW^s0K}qNj8*!rJlx=t7+J~1*0j1abjT-`7=aJz6*ZXgK z0{luj-xuIl$+@);_0cxY89yhk_jx)3{11fBrU2LbR67G)Z8sX=Hwhn&)DF6y3+?uZ z5QcWs`wyYrbPYNz<&?i(*MxS{Yl+Zq+K!>!w7o*RX?uls)AkDOrtKBlP1`H9o3>X) z##c=1rR}BHYl>@o>HDmTYkLg_e6+o`2DsWsubY&Qu1)p2MsZzx>2-?Yx~5qo*ENdk zoZTDX+F$g!HKo^eh%~Po=jpdfANr5Bd+0yfj-mf(I}VEgm8;xZ7=n!5LdqqaizERq+g}c>-Z4Tt6y3BkdOM6 z)t|VI55q_^sQx-W?D24n>-exQz;%2G$15El!tqMShj6^o@gW?q)c?crO2-FLC)P8~ zo@%$yK5DnnK5Dn&puTFi&^~In&^~In&^~In&^~In&^~In&^~In&^~Ina6C`5oBCVm zSHH8HUtgu!EzRH5o}s^~Jwty}KMeg%{V?=5^~2EL)DJ^{Q$Gy-P5m(RH}%8N-_#F7 ze^WmU{Z0KaTtB4QGi^TA`L5Ldu6#oKr}5GD3jO~#<@1~RgYpmkAx%&9pHNTrpRm5_ zKOukhpU~gbe?os#{|Ws~{U`J{^`Fq+)PF*MQ~wG5P5meIH}#*;-_)L=zopqTt-aLF zp*_{kp*_{kp*_{kp*_{kp*_{kp*_{kp*_{kp*_{kp*_{kp*_{kp*_{kp*_{k;rc(# z&T0MYcXlqEU;eXpPV;BAf9TI@|InY+&qIG!KM(y`{XFz%_4Cl5)z3qJRzDB@S^Yfp zXZ7>YpViMpe^x&a?W}$t`m_3Zcs-lu=fAt3;Qd+KH?+UDZ)ksQ-_ZWrzM=iKegCW7 zPYBm1uL>|(V*cinQ6j|pdjWBKKYz&3+xxfbU!)&z`0O?G_J02B23KDuGy~-s$mevQ zbjOtjxA*hA4E|O_KWOl?4Zhjn_J00WgWLPJ`uiI7nPK>-v540ge1;g2xV@j>VQ_mt zf7sv)3?Kd7pM2hB@I8ipp~1&z{R!#q{d~ReMEt#mzRu7uHMrh)BE7wzztzyMF!WCu z{0f8X1F7V*(%@C){)D*pIU>^x{$WFZk-=9Pe7V8x{qP}!cN+S;46b7>vmY{ekD=%H zc^IgtjsZNclFmT9pMZoV2DiVj^%`8~G8TEr;P!csg9g{%C`n&GhDWc@M}5*CFJ9bq z*~M2it!W>qY3l9kysl-Sz3JNa8=@HRZtp9?NV|SjS7)mw?P(pTWyzlY{;sBWmqoTs zU7f312R3*Z`j`}Ixj8=^%YXj4Ffi#tEZKfY3=FmABbl4wRg2Rl37r< zeM4_gUjc}HTGsY-H+8NJGeBJo_OGo~RI1QF&;o|e9K9`lEo+-rt?%q=YwCwhI=c(h zN`PoNQgOGKwe3t4XuGBzigkAuz|-VN=psk0s*nKVOx7^Pg{Fi z)9SvSwX`wBGvB%`?6G*)6}a)z`b?U`6AIm6pBsR-)VG|-d4 zt7o92z0Zp<1hJ**(5~t!T6DWw`}!Bt*=Awi>h8JT6&Pq))zx08j3spqauizj4>~{H z2IfoPrW8lXrI6%ot4gdj44xpzlIFEerd6Gek}K_3AV~a>4ZgaoWlev6j2mcb?{3Y5 zzPFIBW%cULZjKk|C!O6GI+9!;H8Ue;)4&bAsbuk>c{D2LVTOrT*N;#IB{jy`KpiGb7KcUVv~>1e z-`S6$hFlBz`9Z^H#Mbqvv$}f*+Gkz*fh%TWv4L`h=3Lt{(Ap9EQ(OD0^=mw5*SXDd z1WN)K3k}}cy(Tn4@B03ZrUHV*70vpA)%6J+*a#_Ew69}s^F42_5cm)D0JA+~+^jqO@=_SIcVNE9QZ?YWZhd>-4NX10^gOJkoMM)Qyc22EYiR^uC%;(W zu;^D7To~u;?Yc$0V2)j?7qcJwNeh;jZMCk1GA?4O1m3IMgaUU>SS!qePHw8zv4cZN zACzi$`tSn7rDaj7xL<<0GZ}M~%EiX8;W>TBVX8Zg(%#zEfxf=FrFEdEuW2n7n|d+P z-rbf^e^$P>GoOPsKo4g5HLgkGjIgh)>PBa6vn?ho%&wk77^Vs#wyndYx;J9R>uHTR z25`+ht2LU1P6$gPzG1D43s(JDL$VdDaI#cbjUj%~<7gG+D8qGS5op(~MFjcvXeby; zvjrS%T8dt`=mUv^2;ix0v*s?~u@1)#v*x&Ctvk+kM;t&>??`Y2i96Q1<7{`t0VMMs z363Cf$69xs?T$ErWS%3z5hU(d>yESC5r?)}^X582cdWw^gzi}DjyESC5eE>?afI$zha(8xvDO`Dd&IV%IFIjpXiUe%9p}1Z9gbk)ju?02JJ!16Y=49_=LvMJ*|UH_%NkeC9qVvJId`me$Jy>^?@HMl2ESQ))0_Cc z`{J*~MGC@CaYjsTU&ML2I8~UC+b%Kq705qY`H)Xoei-G6g>+lwX3`Ro z^a;eQXN81_wAIksJOtSn3rJUV|k9 zG)j{F^*))s*Gzt){6i?8B>zdd38=k<@=r>T|8XdkB)@zNrRDEe`?F&CgD9UQKU(Wc z)EoQ5Rg3C>1dWm;zlM#4@T`yGV_5&!K$j%HzS|cWH1gjJD760-DgAG}5GuVY5XxVk z(*JhK%~tJawExKo^6T)UK~nwsy?%yJUU+^X$|u$T$prbQfS=Y!^*WT||C36rKi_{# zlD{`W{;3J_cc5@m{i{X(vHbt9P(De1)JyB-f4iXl`Fl%P|Ho76KSKydP{szzvf*!1 z>R%)B?f7#B3WoBlQ|kX>iS>U=O8x8QroQd}Z%L5VHp4{g=p(WVZh2gI_4WGsXX^h#`JYDlB>4wL{xedL^7(sxD8D1c{?CehrB9RJnqvPaH~11d&QLy|ZBl-UPfS_= zzEGn4H>Iq9_a?}npCJGHFkX`VUljSrT7P^O<&*3m-QeqQ`#+z52cP7ZMNg032E4}_zG>!?Zs|^>Vj6cmHf1ePu{rQ|nSpNp_PqP1{lYK#@7dFn; znr8eS6i%}La(U=L{fzS8gMa0x_#G+ruNL`L6k32;i|NZz6Ck@7Q+x@1u2svcd_6x8<&)a4;!iw<%BTHS;$O?F{r&)jljLtY+n3)PD5m9o zE_kARlKk8zPmweB`(T3nKLh_H`5VrY^2{_Llz%_UC&?fDv@f((%Ci1k3u}3;|6OB} zdkD*Y6d$#`0<|cg zB!AOpPoZ)szZw5pUhxm7$R8?E{#7aRwFv_?B4|_wEvG%{I7DhFMllmdn(2Mp8SF@Z~d=3LH;*V>OUm%hdrD4sQN4L-%{!y zebG}a5yDR(?!~{BSO4o6o9zG7WI`L3@)~J*J#R(%B>!KMAiocVw7klHUyA%aB7ctx zl32?td~u5WO(MTp2wDFD{A+oYe_@LKH_h<{kL7>UQ|!M_~ZnDfZv{4qtxj zG3vh|#r~D|ivFhm-<%+y?;|9Q|C{8c4*i~o=a#pho_`GGll*_vu&1!=M_y8f_Wyp$ z`e)igU;bG0|94Z?Kg0L?^6KZG!090VL;3fi@~pp(Q%Jh7LF7N8fW)L_(D*U@exYff zOTVeFtGl&;a|(EUAEx*JCsfO z;UzrcJ701gN4+1ze^~y)+M3$hxz%x~iBr|pKJAb5>grt1oZ9*IKGi(#mW!8Ok}1nu zq%8VIqAfQyL$HLLi*wkcq%1mo)8A}+`K0L3;cRs0%h_lU!|Irx zJ2a&%dTDg*y=U%Uws0GDqrAg6eQVn*sMG#s87JeFYz8vQwqrjvSEt;VsBV2!>G)#m ztr}XDd!!TpQ_4=fcJ%an&wOl5)K`5%)cAw4ig~v~=Flb4ot=oUMch;t^;MjF?-$QU z+=3Vk=Y0~o43Zthv5wl!V z*-6(fEQ=a9&dMFS2LDabxPRM)TTi3e3a2wJ<<^mo`Y}D4{UqwV2=!!}JnrhvcFKzV zLmRxD&1`=KwpJUctzBIq7xy@K>_t89&qNbPvsK%lllFJAoP7&rp*=R?cilUult+D| z*`Y6byFa?^U{l$)16O9yzFBGC>~_jN2-&ZS{SQFTDPyC)=4{k>Wj5MTopoEAZN_!p zj#ogF%~FTcp~I=$Q72dbVds;lx^xb@J_jAiuQ~Icrw=&4Io;)99IYaMjYq)){Sc*ufQLWy5`1cPwLLo~lDNY(@UG7iHX69yP+>Ha(q*?ra{DJM>)kG}_Mb93EGA z-aIBcltUdlY`f7Qti;ig+YvO)3;_Bo2 zQ-M6#W_wuvXyfqNuqkyu);OH0$2dG0<1l=P^}>JZID8IxW`*utq)DGN9}Jh+CP&kM zVTt-%`I%~&Qz`~maQudTn^hO4b!<{!VLJei>q|cju|>dij9iQ~=znW3tn~e=WZ0y@ygE;iu=A@I5$KXJ2|JZejI-}Ph=aSJIiO}_$Zkh&qsmj96AX3 zzmNYfWB$i?@pn7`z4CPVxi*J>MxPDG%p;FS-#dJh%uS13+f)~s3paOQt#ixt=n&@j+Kxrhf_z)} z`ENw#9yjk~uy(-QrZml%d+77ze+%ZB0n}IX*an)1zWWl!*6pKMTVQ>Di1Rh;Zs(1| zH!a+Ty1O;xk!%JwDBt$#1@yf!n5V~LeNlGj>99H40d2rFUgXv|u5J}k-BzsQM&Jua zGN-w<)D@YE`O_g|qR7JK8OO)X_)naRIS=1=s_VnfUYyTrP=;$kJaaVhu}swW%TsPY z^I@z3Z%5m8qJ8mO>`T8you<6WuhDMByxa*p-#Z~%SMeW58uwJMpAH%9Txdn(M>SEaoxjR0%oF6LQ<0!}%)U#G0|jOu~opSiv~Z+w#q5|5a#z zmS!0SeLQSl~v{*i6ZZ7 zUxv?7Hrsy~zPWWpZUM%DzUmXXe)iWfqpr_H+wY%{J9G~E@0YPY_&I5@j;pv~%ET!r zM(c88Jw4Y4ij&WpIQ`UU&QK;=aQjEyr=d4b|G&^rZSu0S`zf${;o6?EDf5#* z%`I?pPkrme^UKbtrQA>c)XT+BMpeV`&lb>e%|&~SqJ4jP?R()Cm1g#LEXkA&8G)bFC z+JrQPAgC!+tt+l&Dbii}6L;}vi@0{(xRza9f}-1XS+_2T-Ce+-yldZ;-5)Fk+E0p7^b#k<3$-0U%vJM zp086{%1uti-1=?{k)A0>kLoEWOPpeCdK_{A`3X2iX^x$8HK|w>o$bY`eo~IwM#|B6 zmvS@?rW`$=rkwXGgV*z0f(jd;F`G{Th}%?m%qm4Z!0@H=F+#*bLmUOi2Mj&Lr3e{*3&11z5UnB?dV?H zNxQNTjE`dnx@i-I&i29NJ6rdi`{4YA3+YqA!TS0JPS&q?WmgUUihFMN73(z7nA9JS zw7tC|PDy{+bSg*rtMAM8$KziYoyr-{pQwHlE$?{pG<~9SCrYP$$MYvzj)~I!vi19A zx6_I8n`k*EN;h6TOgMen`i}nI?v6rDUG2h!^utHPoWh&>*7nkMb#KoAc|8LZnY*qB z*y^?oogIbV^@aZWhQ*8P7k8XpXzyuTzqW9d+bW_^w|HLdy!nNiu7QER4ZnBJIW$m# z`@FTiy=!|qH}r1oZ|}tJOy>;r_V%=QwRNvQr>Eztb#rO_`aoyO1Nd zEn2joV_|LG{LY2#wM*)kEL^i-^@7^Y_Ra+z^A{|d9}n~N{Kc;9gO@~Q*S(?a^;2f> z3tjy!s0pc!QwvQ~PAlA8e#fNSD<-#2nNet(8a@2P=`!A<&RJh)d(t+7(kytG$_MZ>hLr z^6gV{`=-pOT|s(3^8F_sXZ>CR9l0sa*VcI?wEReW$wl)Gm6cu&7(iq_r&8|e#xhEv|7qOELazOs}J!) zsq#%_u}Y6hxgL=`S}y3cU$6!W6CYcj&2b%i^$GhIWJ15v<`es0mzX~S?FykS257qs zEp!+>4DIAq32~wlRWjv6S#+PlCM#zGZBx(tgRSA%m)}CwR=}zRvu(2`K({o2H4CP7 z2z@&QI}+O?-))lbNXj{j@;xH?iWE-Qwbp`bZ!Za*EqkRDTJ?uLW(j8L8UmPpSFL$b zhE}0F(z0)td`DXLy^^m;vJY4Gg8}`g$jw9bN7?CjQ+BrO^#M%xQq;UC`{hD+BxP@; zeA^`70Z8`84<0=x=SIx%Ap>zdoS>uBQr5?W&yeGjjE6FIL*oBcl_mt8<@i@x2RA^h>*fdnO(hhX2Xug()CrXfk&gC1BeA}E}>G9ExjyiWo6@((<<-C-Co`?WkzM=)QHCvM-jgM z1-;NJkDh%cl$wvE1DQm;AITY<+b?0Q$APGn-l0-ah=^NFq`4@;(H7xqm`{Q`l)i&w z`pYz$I#)Db@)jV9PA3*QgKPVKgY)4w-H?fJ8L-sK=p;=sFzVb0*H|Cg9Q8!456eg`J~`(kV`4ncqa zEgGGF$o5I_R-ykx=AYn(4e_Cc@18r6OqnzIK}lcBd`jt&oabEy(u{7TfhA{fEpH?9 zIX+EHu>qz}cB|z+DpdJsS_%DWRG&G6w+h8f=3h#WLVI%HTA$j?XgYl`Q#)3}*4IN!sF<_pZfl>Vbk-x_n_FR&m7YdcxV?fFem(j!wob*d_}iSP|7{k-KObS+A# zf%zo35?sji?Hc9hERE!&H)}BV8@XL2xY~a@^G|TiP)_t^(N!9ao{2-y|1BowfV+fOC)NpPDnA6;gn9R3O0 zp%h1A-pt1|7A;6J!Ml;Vy)8Ml>wIoDSyKAG`OC5!zhS)a9WTm!oq z@78GSf12?t;S5bS2FMmX&eaAe~0W4!v8UY&yO?sbY<`v%)p<@;QyWs{@=`?FJ#!~ zzv=!GD%a&1`ka&@wK-JdYk9CF7ocgSaFId@V_FPVoxHyA_TUU(0wh?kTQy z@_Lf(2?tdjz-wU!w^1Yw;SvQLg(W z46i6*<73dc`*j4!QSB7@oENsKJLNto$#K_+8>Ff5q<++_&?C9v{_zkH<&xeTL5i5{9?m z;NLL#0ST*~TF!%ltDcI}Ln}L9&w}8}NA;N{xbjhaj^Xow$byGGz2Lwf_g3G5{}&Bd zE@AMuc-A;MOX$%r{>1Q6dS8DXmwf$gzj)B_X^=4Vf570{&LP+0${+N0T*|`d2v6|& zmf^4Z`+T&&10ON;^@h)H^L?Sh=xN7ut#^NX%d*3G_5O?6&Dz=CPi;H7-Pm7)Xm4NA z2>Dtrv^R?@3FyD95s%*DN9|^eM8V${yJvG<+=oR)bsqU4kqBX%g4_vhr7a!0@sBhYW7{ZxLMitG#X%T=^@$ z&G51OcNu(-gyHG^5#xrPcj>sQay4Enc~!3BO9hAh|3Sj=)Sk*m^RE&b<)e6q;65KM zpYqXo!Q-QNjp1{jgyE?^;BW7ztwN*x&zHFBqk1adBkADtpoHNKNm%*ld}g!Y%17}V z1qUCi=UpBjmAk{^qxgv7^MHimjY?ScQF_%`^-+AU&_f?PFVcDjZtu%lkHGEx^YRS2 zt%Cb;4IVxTS{PKCcxd9elJ-0onF!?XUgDuitv%)-_EZZ4gEhG`ay$h9Rb>GaNFLt2=3eAM!|hMZ1w2>NaEW( zdc|)O9Obg@ZI{7EB@AzmghBs3gO5oVdVbd6Pe~YhTKrUs!-0=&hx!}=+}Z)}so;D& zXgl=nQ0viadFusNdc|$KwRX_=G0-P-)-vyG*yWhw?()zW(TK+2P z_xFvS6RBVOtEH{qHp9o(Z>Pa+{c4>eS;J@#M_Ru?BV*Hu63>SdM_FF=yiUu$HV7H{233gmAHD!U-|fY>T{w`ul#-bEdDLR zz^7OKz8!4aLRQsN_3-%|sXbNyVPUBJRe!a|F;tIs9;NpV;3^X=x`YpKJ72oa;C8;W z)!=r%beF;Hc)Qo&)e>fpz{AZP+xAUc~2DkH~y9{pcoBIrI z=S5E&T-!4Ao+ZYGK6YNzZ1ANZ6nCA$?YwBW!IvvB`Og^qJcF0#T?BHQ46bJ!0JrlW zoUH%{+|GZB2DkH>l?K-~gZy0vxATW#gWLQ5K7-r)yS|u)K5bwuuBzMxfOjfLevQGk zts;4;!R`IJ+2Hnm+F@{ef4t4$_P+Lr!F5c7+?Nb)?_ZVDsi42Tf6X%ZCNL1!VDQZf zlE1>>_I}Z7a6A5QH~6OvpD}~m_mfqV91--q$;^TPSCcWiZF&SZC+7vQ{RklK{a4&K)wl!UDgLU?C~O<*19)8ngJ z+6M;djP8NjmY(j_6pk)gb`c%4PJ1o1tiEQTb3;q#pq_>86eex>jClCwAZHx04QSp# z=iq=%aEF}JLEGzTw+2%PB4E$ChW_g*y*q`A z@j^*zy-*sPFO=Zy=cV8{Yv@8}CeLG&id3pDoY38}X5;#H9NWG@G%lf6RVJK)^_wuY zQ#y+rRW%Rw0Q<_07y-+MQ>COf(eaa}X%mv#V)bp3j--rm#Mwtiz@bnYeZZC-hC3!S>&L9x_5 z0)QtNkmOj`xvqU(UvzQvc^6%J=?XAtr@blwd3i`0LDHhQS0SFX0PPnkG_iCFmVT1L z;t|pg|F|z`&xq!&?;Yrzcfm!M&D}82)_#SRjvlhEZJ@m?wpd5!>WyoiA-M0itlrq& z!yTcew|#(2N+s=Hzt#$ap|jG^akJ8pZ{xrk8iE|lqB(3;R8W$pz;Pj7E%q`qa14PlzE;3!)I@O!In;Yj##=vY0SE3-~&puXPRw$)W{JNLNytuM7A( zpRaWeVZ!-LNLM1{>jJ*c=WCq{GhrPQ(v=ALx`40q`C8|$aRVmH*Ucl0G^s_7g?z2& z>jJ*c=W88b^%a1du)oUd-_T0{d2~y0sJYBVJC94j`m=5fK0zURREXp;AjXSvC>@Z; zsTiC^p~L03&%DUw=f^t(U`6`3Zg;(lY5osU6y>ZCB7HY;Ie{VhTZFDseD!?!w4Z)Z zzW%79av&d%XukYY2@J{KE&`{hVDWwVCsF=T`K#sSg*Fn%KbHP|`47;0hmiccGUWO4 z@1y)7`As6u7W{{+e$lK)Jg{CH>W%l}43{phq8pBpOwjZ%JXhpL7z|0U6>s089Si~Ow;NB=*G{{8Z|Wysg}g-S1MO3HtE zhW*DxzU}`f2ju@bl`~ZSCb=nfA<;O${C80PQ2iei`TD*U<;QzxEsyH;TFM-fze@y- z*ZwPrE+l`Kyd<{ue_BBPAJdI9B>z5<-(bp)pujQuDas#`KNgUWd!=9gvJCkLM9|7u zk_-6qU&?6zm2wu?pyY@BXVSkf|0cRAgvzh`RTU+_dcOP{DSxQ^TSUIrGvuE^|GxY; zXOw>nl?$%O*W}{MUzB10VUcg^|4d@z%YQFnq4Hy&8n`Cs#aCZG>L*nGy&_-pqx@&l zzc2sRjQNl5vsD>Ob^%}hA7{*es^9GBt^Lmq$ft7>g5@ueUE#*-f7rt;RQ_6#Z|(mk z;^&wD#fz}R>&O2mWBh3ilz(nO{#Ifbs{h&vmj9EKA37E3-@3s-`OhH&zx-b( zAS7S+P8-kuyD5K2{*FNT@jII@e>({e$#0VKE4`KtvaGwAGKb`k2IMcGjLJ{jC7s6= zl;14!8>}!2`||&W=tA=M1?-P0i7)@HgoVn#MdUY)BOk+jNPdO<7^(Tu{}cB46d8{S*W8 zuOs0h`Aa8gzpE*8NdCcq{N(}pbmmM@ext}AumApeM*ppR3kf4<+ixSqefwWYSg8Eh ziToxoF%D(5u7@I_@)t$E=7;^yr+;7mS2FtVgCf63d93s0e<`E?ZV8khy7=-pW%S>2 zAsny&UYF5-cL(IZJs|(J8Rf4O`Kqtlz%M`M`Jwu&o}m6;r2ODnQ~~1e59t3+N>hEb zUp-1dNdBw|%KskGh2&Rbupp;$(0(qae_#GzlJJoHS|L<=@PdOZ>+Yev(+mpU8#l|0$7QF8T|blJak+{Gs|E zF1j2;ru=x;@#Vjl0FY2MrriF?F4{Vd{FRhHB)_oS<=6KIDF6HD-ch4kNYuFJSj@hh0gzjHI%|9z6b-m!_VKEJnSwEx}byDYZ-w-e;+ z|Bq6C#3tpQ5&8PPjwWh;jek3%{+cdu6k}){>r7fy9?ztR#@!c=FGp z{Gs+!bD_&`<*y~km;bYj@^8he2Q8fXKa=~9Lz8Rw$w}CTG@oKQsXt%;KFMDp&oN4`<=6Pj1cdCj zRqUtdG{An>(!b_c`+bAt`?A4%uz)Mg>!lw<@4updKmR#&q|U+xh1k``p+doh-E~oY zJ*O;aSTNs_v`+rWc`MG(l_eG_i@p}y6|&V~&pCBP4iuvkiPD~-jk7o@iO)MHj$3D9 zxi6iSspr4a{_=NImXR7dj}_-pZkZgRYPSv1xuI14ssnsBWmW2o>|y$}8fTtY&>6oK z716!){IU{fgergGoq3*f*W}{81(HYkkMAOR-nr3L6Xg#ckW2cqODyK%GF6n+^!Hye zXam24XCl>5`Ls>9qO5v`j-HKS&LXNrGHA#lAKWbZU&SGJhE1HGPu93RK7t2%hlCFO z4i4Bh4ki46?GQ}+j6_SksZ^mya)!li+yMMLj$@nWRTgOxTbQ11GyxYnd*TMB_XZxx z8#+q@-+G76lK3$5F`d`Q51kotDf6KTi8!sBYnV@hYdZYU*$^KjJZH{~Q2P%sAFM(s zb@@mpye6ra=}YksF#bA2>4Ke%%f!*7wla=i-_!1m6g|ProLVLMkI6^-DRIOngoAwu zf0FPMOnXp!9>}2o3ezX`UQcnj_tO9I=8TLYKyoS*-?q!`o^kDm_(tAZ<5W&{d*xYN z^#UKw3(}&{1DD$&BT6$-{^;9q*t_QSF38s`{gnjtGL2&BmnB!*BW`^fh5+Rc+_rYL z4{+NW)t>lP#ooi4qyWHmi~@AI!D-qOyUhl-`fNA2)#o0ATYcP8$>8@UW(g**r@W$L zO$*jhny*Q`&pvp$sQu^ySpwfU@G@|uVI8)=^flC`L^ zR9n`RLZ_b2wQcR!v}7$UHJX5$zO3Q3r5+49y5^KumGZh#UKz>@KzWI$Th@t1lWqxS z$(qW+d9`tc|AK*;)UHBzpS?14e2&ts^P;?G1u)wNL0`lr;A|U4a)JI2m%o+Lt@HC^ z3;l`R{~<t3!)!Cbv zN$_bOlKeh-g8;itUIbNth5w!cq4F2e*vV~m9`B=pS)1n9@}Er#`LdBkzhT}hiO?JK z2R}canHw4kv2#zzF6zSWs?W^x>lQ3n#K{wXX5KEpzd)}dE_A(=te$>mE}PBI#dr=b zi|R?=tuyi5{F>ysd5oTc@yuLBM_^4WM)%@5n2J|5M$gL!E?&0tRxaiPzt zdbiP5=k#<`wW%!n>h)8Lhq~y$C93#oSy{C5mJ=vW|F;m`7WyB`MPH@vQdN^fd1uT< z`emeNf!Y!1#_|SVSU;9mNJHtPFWdyo$`bl@5@?WpK za*|(;=kmF`pC{XBdtF!-EuuBzBV%Nj#NG*C;#UQ|4qTjIusij|trca_O(d&-EWhPX zUESWd^F^}R3-8J8JaBPd?3Snc&D~A5oBbl*9g%)75Wh?F(W1q9+Hx+`Mu~RQ=wI9DpZfugDO;CQ zUqgQc{y<^qlESe=mz0$a_p41^eI{d$=5=NGI@zj>>d&=%Z6_!%{YE-csEF!^au{12 zf0Pa7*>ZYu$&6#7emZwzXb!aprLO+r)O8jO~(oUru&{ z4PD=}<2GzUit(5nRTK~DxZFnd2YKU<#mTrjlj_)vtMOQ;Z7bdX{*LOcjQicMqD|ZJ zZ#Wm#Uq5O2K^-%=Tr`IKs@kL-i)qZDu>#{*L}N?Y-FdQcp8D-wWM6FqR<9u%LxyQA zEf5X#{4wPV(G^91f2_k8n(h;2G@jXeR+VdC(yyTx`gPl+XeI8?GeDrh6pyr9;y)=1UPa--z0~`?@;&qjhcVyiG{_bt%0=>Fewt=%#PcktVwa=$--s zMV;%{cCYV@+5;pJ**)bZr()^%OGujHrTcG5Q}20*cDhGz-~S=0#!Elji^GW4(KwoN z)Xq~5^L6X|x7qUO5|hYOK92i=qxSJF5{~XWz=ksnHXU6HLz@(O#sJD|a4a zPf1wsfuK9+VJOEGxoI>bO?8pqmnU~6sy80jm_&#a{P4~ZPG#W!h;K*XR^a0C8!#Md zDS3;~(!2+>wJWBaR(mtazNO-h$+u6LoZB{KM(v8J(Zi2?|B1&N>80gTBD+uWtP1Dp zNM#|FV+KSIonMmtG>>72I;fNz^F2Tsrxu&1oK|E#CVi&j)+u*Py}dHGdCH7pGpq9G z57_P~Ym?+#>GBntrkqwlzB?w}USVq;v;#uBJ3yNoP7DJbX+F5pOk6I|Kc#dce)(Rlm?kdI2&VqhJA&fu#5 zfAfPyDLo#<%cA8mf7QqF_n(ePCRJR{JT;>*=`B0cH7BzOK{~ggWF+~Mx)_4g!0ZcF&F$c(dP`V?feGjUrK)?^M8BH zNBb#&d~{BXYha85IfH9^!+FJ#!4ZSIiQ8eFi_kUQj}lx7E@M8WIMVac0ws(6x3E1E zTVZ$+KhuR8!eHJQN?4QMaN^ub6`AhAXlmqU2=wv*%srl57)Gp-^x1Xf{ zrs>~oqa6Mb)0g7^$T()xX@_&XqsaWoYLfF&(ZpQvLrh3DYP2#b(GyNjq13GSiphNY9&gqV&(P zos;&X_+yM;q|w;_7UOobb4lltXV+A&k{sBtx-!n41hD@}2!Dv^?b=E0Ur%K4IWB|G zB_C027YOVK3~nyXE}}AA$@u?_+OtvpLM?aSs8M(&a20a zC8W>V4E+8KeU8h($^1e7c#aLp{ih5*|8EA4XPpqA4ibF4IVq?BMaZ4QcrtD%uJ;qH zbwypMJ5>T$>-zf&l3$SUbPt~+IQaBQ7@oE-pHG9(_S<>|+V8ZTXqH+DXgg7SsRST5)Gw3|C9~6dS3ZhceQbLxN&x9Nd6iyg{J7u2DZS#hzOHv9e7#G; z(EkR5YY_Z9G(vv4gu&n9YG?4V?NI9%xE+72eKs5ZT@nWUfWg&1z&9CuNWy9dO;Vm} z2gTJsO21SRw7)C8;@c!0a;@EV7~I-zm%*)`BZ8}3iN@oG%2oV6k6!f|66R%p6y>2R}#>7X~d(qxY_~b z${L65(}DI=zaG^NzTLEbz~9=TN^}Em$N3tAf7IyTVDL=_SN^^}MWONaX%t-P-y!iP zk6!U+!J((^*Bu78?Mh&t|9n6r zd|;<_t@csemh0m}3$I$j%18A%RdD5__$E9w*5b3aMc0O(+0QgU-!uYpG`soPscqi zmnP|Nsah_@D=9ym((5l1wAPoM(kpJqPuu=$g&z9Y_Fw7P@HxqLeAD&=dVAk52)*hf zQT}ZjVbw=*?HAzFry%(i5~j7(aTt)w1%8~+z^jok@TmrGF!%`uZ!-9a247|HQw-i^ zaBWk71`R$_!tk~jT>B27?FK(f!tiz&+`fI?ZE#D!$KdlM3~!&o?Kr&O;Px%zL4(`3 zf7%XVPaUH`T4CtlCSiEh20zkzS#J0=89u+MdO6?dv%~0UG^VsH<$t7n29HqxEdF{Q zoand0dOrfamKCb#eFS)gDeEH=25$SyeuLX_>?MQSaZJa5@Ui`61;ycj+i|Sb;I?jW zH26%Hm9L`)x8oT7_`(kS?YLBBaNA#27~GCmx^F)C*zxKvLvP0`-Jc!wcD#Dp(A)9K zo_lG>t71OUf4K|tb)~^=zqaRF+J3#w(A$1JYH)4y5b%h>buI_Iyc}0oU+;E7zBU+q zmBH<|5$@2@<#a~q@1&EF?+SlB2lV=v1lHA#Jg7NoLkba7N+7k%T!|(}R&m6(3&} zFqG&vj$WZ;D>TGqUie%*o6QwE#e4#}SeSnrp3l}#PZ~}3ad}YZ@TrGAOi!yYe3)MP zpgc1!Xg2gP8dcV<>rEYKC&~7NxrrWUhpeyeI6K$8(U8r7cjF#TX9|@X?7|yYocHeL zmUAy`ZaVK0oM&0vvfew3EvwhWt=Wz{YQ(ITFSN-v8OVS(Vt2`)0}D6yck*F~a+I4X z5i(d}4x4e>kH^QmrMKOXn21{E&Uf>~(4C+KrRR@pbTG^~{>{tkiX?}?84J@9f_x|( z4ub2LS8@;>4u2z-Nob zu~q>uAs^+`xpTGP-=^R3L-Myv`k?sg`SKs2{J@GzAb!K?F0fVNkWZu~@@Hqr*ZFw8 zzx?kdEL8qRfaEm4iZKzfa`1A`>~-|9JZM%m3kw z@${~+ZL*o9~Akv{hds- zzWg6%*k7Nkt5mS~zWjg7u>X#L{MQHMf1a>V`Stl--@B+9zWiZI09K@b>-LHKtpdXS zST*gJ|2e`!@|h{6*=Ku-DvThz|E6n5e%F~Ueb9N_|7K9wmyeB9Lh@HiL3c}j^#s;v z^m)o0l0PQ$o57qM%0H9-efjUp=>Jn_T!$O4|Gzt<|JTaPB-{SZAb!650a89x{%Vo0 z>$F)Jy7=YqB_LG(R*}C&`Z3B6llb!AkRe~sff{f8IXOfAep$F->mMrl^4n?P50(Em zxgk_j9_vt6>)uav!Sc^`RM!4b$(R3dM*WY7{PF7lyBYPrH6S1F5q_z9 zKSr5D^1I}v?LNtf_K#KYe)$(?)c>%^AFuxBXViajjuUL#AKnZ5@?Xj*|2-mq$gzp9 ze*1qhqx^j$e~08m`SJeQmwyMOb2leEPR;kH~MaAcfT&>c58q2vavq zxthr?T2MksRryMM38jbh-!1xYm;BHlzXxdkYGH6XrGvzm--L$^a^uNAEkk}YItw`~ z|E(1FxdGS^AE6|l;|B8A?Ve5YdL7HFXKSUVn zU+G+~DB30R?^Qs2(88(zr(}E$yA*fruC%cv?9*N-<)?0xa($A&6_sn8>aS2^M)@10 z{KLW+_HU+t&9CLZiS9qXZ1CP&g)7lZJA~fr5eG<4^V6Q33+5leITrI5EvcJdfSdT9 zoUP`E&>~AOM(-f2V-L3HX#YXolM;J$Q8MqzIVStP0V~KJe`V1fFvB*a>3()p_A1@u z&7L#yW7=;__N1b{GShoQK1us^>E38$7vB3*<&nKdZdsk|e@EY$*6*PG^Jct!?6dSv z1h?aD^uLwLz55EZ4_4cByMNt`+4RhbC0r>PL$p=HrayE0aFV=uA1&2^(`gSr zlCf==_SxEULh;@i#}u!eN%Dujfqg@#-F?IPjR&y@7-;CZlJ}Q{Eef>%oWCC$(XhVR zdp_o9kH%!LOxl<6Zkqp&3{OgA57Sg+PkFQu@*#7K_5~awyC6&h7}+zr`_@OxcOs7c z)JCa{Nx7#}T{vAgol?9P<-C4&@!qFskHH&gpEu+wkR7!An?%Nt>?Nu7zKQIhG%pYj z)H}6j>?3(MO*h!5?#4dSo~M7^yHNAd{*tsmY3crwqtwQ1d*rrQ>2yoVF^$`lwlmVZ z3O3bthWN|Z-na8$OBwAym+YyjZ4KpwZLlYtmdWjj>1>02GOaAoQ|BJ}+H0Z_de6oA zfIZ3kXjXIGk4`RaKcJ;P^HsV9l(ap@K1y_C4@!5u zi2uUlsodBzlWqZ3;PHUS$NskHJIEJt+roae4m*ST4RGyC+C~nxV9!Xm2PvhSew6Ip zSd{jUJ#4{al=evNsvNrH&RoR@hN;iqIVtKV8^pNa`pYYd|7Sn#VLMP(v1pXG zH=yZu)wZZ&@j#i|>z0OXDubgZot_2lojKaOb=sCw9*LqwJIIbUeXL|Z+|qXVBJGKb z{TI;&p(ojxc({E&(caN6fjfJ~vafuO_NJxpfhy0_SVHd&Cn5jzv*YMEQCJ5rj<>bOg4)5leKke_y4qe4;M|{q0YL9 z&y2GA54bk$Y=U-0Hvy`vip2#=w{?ZO#s0-qzaK=MJQ7v-btQWNC;Pc#%<%W&wfp|w zKf|5br28UwQ`@>f_nHq3l}9V-{nEaiSuQ#O`LWkCX#GB8 z_wA+e+3h=AZucGj+ntB#zJIVKN8@Ck_CPI{Jy7#Brt`gMHtEZ}4~c(}>J)wI73xz% z)DEwr@u*1mX2_?$Jc9OfYt*o4EPpcR8zw!`2GFmNmvp55bTa9Tdy(6#71vwxf~=e=g3*BI5)opk>h;`@*5D@DT4C$-)%e|Y8G{P$kI_PCwT zwbNYqo4K1lm(QO)CVN~*Per{v7ZDrp|7LU(`s*u~QhD>aFOB8%^k4p^vDXdZr+gZg zTwUxxgXr4bTy6hJv@bd38@pk2>614+uyp_1qC;IDYuq_@!$&Fpv87Sj+h`yAcaZ$z zA<{+meNXS9i@JKj%n@OeAD$jP+eTv~*|7d*nhRo1liZW0U(rV8rh68)NQ&p^n48*t zm`UG=Y@TvNpK{(KR78(VDMyb$DJQQEV~qM(%1uti((87SB(F|ls_Aja1@Jqbbtl>g zg=@U{*g#$+j^qzfzJN6fo@tl$1AJ42d#=aJ$-FU66daIYbUtQgy);^0u!z`;e{r=$b=W0aDxdiG2yye zj$q~PdMcC?tuZHDV@|xroB|qiDrn3pp)se1#+)J=bE;@elxgqnT(hRTy*t*&08S+X zIIRre6f=O+%>Yh412_#0;FL7Ll1OUM?m@kFO|)+9nmVn-4Q)LGJ)P^LOD3HMsvHNQ2RF=gqwV0=(+-@J@vnY;{JQ4j6P@q=rsyU* zzaQ7azvE{+Tn+>1xdgmZe@+iJh|g1K6eH=oBD`~0B^bZZvU|q!?)$khyT?5J_7U$b zp*-+1`!?ZGjmiq2Gw_Um&cG}peMIu{H`7g1-TwIAc@dELlF(_N0H)u%XuE76Y?d^Z z$3l8c-p(f;7|9;qDSZE7}k)1o3 z77ZEuB;So88RlRK$S9XV;xR`XI?rLmNQld}RPt3JA34~nSuoz)rEzNW$|k0at8o+7=t6*xkMXFG78^2*zjG!1^Qs%JZFgYd?w zd&}rRkiyNbfKYkIg{akcukH7 zC$3x<dzp{_7CefsV0u}&NX)q&L`djthf}DnSH9=odK8_3)Z0tfq8sSOesT&Vsm~OlHr5;IWZt ztC+tm^fWyFitWEJM!2m=EObW1hnT-Clp?yNLi;kCAi-mX6bPLKLFWgOp0eYzb6pxBKXewv7UGjLXGG|D{e9+7s~!R_bml_?*VnX|n#XvGJ;;0# zJSLz(-kjl}_-C0<^6QA!`(H7i1Xp_cJ(_NfMU6&#OcT!Y*HLj22QKG&Nq%h^mgHO5 zunBH+h0c69h74uTeBk>EWxAC4oNTkl;n0~6Ut~V`ipjYf#b3&N5?s^aht78RFT(BF z4%$!8WIp&xDeV?>y)TGC9w#LhI`g5(cB5an#p%6jD)UcpO+Sw4?U^1msd|~IWU>DP z3gw~%=ldREFLJ#nc$|R(p)((5v7TqdWUA*F^GWcSfcczhqa6M`^GWa~q4;O!li)UE z=xm35+#k=1$#mTQJLZ$%F#!eg<_rhL8)zK0XFF)W_!9H+e+_iG@{#{5Abm5y{VTzh z&!@Q_6I|uKh3d_oF+%GVVi!8wVF8zSZcM{$DfUhdBzR0ffzTNauW-LOCni%p7crj% zj|rGha-ULs2Gf_~NDrOWKxeX(OZo+3>S&pf24nwOwtp!Og3#Fu|Hkym_^gcnf$=38 zjs4w>zd4TEKt96H^J(`5rZ2@ol@FY;@Chz&a^JMvLT4{r!1P5+7KcM;FVr&q@|ea3 zLT4|W%=C6NayfF0pKr5s_@`XnrV{-32*KRbcNbE-3gO*E7{dQI^_LL-?-}?=2A@sT zZ$f-Nl0pBv3_Uw&Tnh2Ih3pW*{~!Y|qkbBq|6GPXc-9KhaP(Btf>klgQN==re>{DutvD>Ll*j*N2sQ3n0LWa# zKc1n_^BMfVkb$3;VYlNl+SLKVk2kyD)lwYpLB^B&NKtUTuVRnYPDjdDoi_nrWAK86 zfv+`qy}`Q-UNktySam#{Qv`cvU#uYcr%D)m#J-op~mIgmwt0a$PKWFQ@d>4A|-XPU#izkaWmhCt-L42FJHF>V_ns z{Pl@qv*5~K@f!vA?Xcb8)(*phEB}JT?-F16D}ImQKL6bY@0Bn-ef|J_pTRWL{v^^+Z zF9G!54=PB$)+6xC46Z@oRv(oMds_RF54@nr_ zeG>Nd*LJ0H)n0pqUgavj*YL4+d&=OOBnc01MJ zb{x>(8kGO#E_+1ZeXvvhitBw6{I3^UczEuHQ$Fo38ZGtsDBdWzujl0kw|eUHH0W;- z-tcsW?~hfgW=q zbz39=T*H702Dkj}IAHl$xfa)U3jUuEp6~_@|LY8{wgtV#?=kdN&)pgLQwFzks|;?- zW%d6?(I9Y zs}=*6OBn6S;x&SUztyMK;92GRwBg@s=xzV9^=tcut>2FsKBI<@mL1Sz2ER$d@SZmK z9~)eQ6SYHDJE<2&xNqL9Ov#@jVc6}rVcxE)p}cJxA>Y<}2+x`)fDh*R%jmfs&hoK% zfm7Xm!P>#LE8BjS3cd1|Xgq(=`-0*t4F7Ekl7G3uZ!x&-r=KzSc0>OfgYPi-tp?Zj z>Fc>mXnZ|wf3)+lYQw+J@SkIF+g~ib>I~9ZLa+LqE^)Q9>Z5p*q@#WQiG<;)J(Z8@ z(JVB|M{#Rs%jZ;~2met00=MH{h0vD~E=`INEidq6ga)3L3%ISX2B85y#n5Ycfma%Q zm7&)@4yeoECrKFIput~n@GS;^gTc2Oe5S#782n6w?>2ai!S@*4{tB?q;PVXqeuK|9 z_(6l~oEK09*#!>vS>l3x)!$u#FEx0Dgn_@!;ME3SZg4FN=(FnUJVW1P_#A0{U1<0W z8b1Gjt1s=#FoDji{d!bW0mrya9y?oKz)u!j#{s1;2(F&uS$wq3`Ft9Mfvqpd)#r<0 zNmu?lj_>jCg2bQk@T(+l+cWs9JbmA${5K1|&i@tPD)?3@pyIa)zT3lh2tMZFBZ61R zV5fXW1+Vq+hXh~c;rj$1^6;kw-{IlU3clCFUlIJEhrd?zF6147>WT3iuF1pC7QD~H z7Yn}K!_O0Z)Wa_oT-Woc+%~~0%bk41dj;1sHx&P{;H@70rv=~Q;lqOO^62Qbc_8}5$x`or`!5Kt?OogXNz%WDC0+41 z2=2H4vjz9t|6IZS_P<1Moe$&eBY{|AlgI@wU7wN54Q}U4HyV73gy9WK7x*c&NU!rtHGBTx%RB8r3N1}^mcwbMeb9OyWG%g{{?=Y!RrmZotJ9A2K@>{ zkM(bG!0qpD+YJ6LN5WU_*Pyq*gFJ2MFEjM+cqx1b-?w3d9O2Wlpw^v0Mc+8%^LTvy z-r2H_zHsku;m_l7xXEG8rQ-8h+^6+)^h!_nYC5u4%U zx!}Bu&Rx#w^KizBJ*}pvw;j5*_pYb!?#*!}kdE)o`%6$cr^+0zLdUw$2~;Vz%&&iA zyGsb2X+;8Hu=w;UPj(28vA9Si*%k(8Lt#IGmH~WSP6sW~i7~X0DQ>7} znQi@REpIf7aSv^Z3zQyQ$S7THJ!@SJVFQhr?y9z)ZfdHX7-y~`-?xIMTTR>;5aQ9+ z-G6oW24&LOMQ1D}=Rn1c{K}1;{nxbg_Q@t6?yRU-qu#d8K4`zbyJNn8iWJ!`qp1ha zk<#k++I&Kb`gKjTzq2!v)13J1Cra_pfb!$iFSnQySlf(BQaaL zis($IjqB+IzJdPk_JPh0uO2{)L+LE+P8TbIQD`QGA}qf{OZGu`KvisNt=yKrjjMaQ z+p%Ry%N2SwRdSx8n6Z6zG>_Dy1MSGaW*z$}BCfU0t1p1@VPbdKW8||L%OnIymIELOu`9t!zi~Lrh zMEUXFLfezp|0@~tZ^K|kt|0x##hfe+!~Z`S@(+sqeL@WRC)2+#|MR4LsQmX)yN0{b zdGXaR|1bfe^6$k56XaU?>iQqv&-n6xLRd(C69!9ik2x>C`tpB7DIxi_Z+2O>N=}sj zH2U}D|6YduX9;2I9TesFvwBJ#?F`j5TT*+KO^#O z{m&#?zx;2=D1W28#2c^tCufv@j||+l{AUE@-rC>%M|Kc>WLPi+@< zG|q;~UyjKdxkl&3SCrMdIg~$C{$_azZOe}-sW1Oa8TGGcBW<(7DD2DMkx~CcB7cYE zNBJ=&@#QyW$bU@A-zE9g^X0!SLw-%s<*?;nOpq`CCsO}3jHO(YbUa;0tcjXm<2ai( zWdBt~N3qM)Kc)nlU+e#C8S)1)SteJM{4SQ{*Z5a5(6x?PLl@@pI$Ux&&+ zc!5wD`O5?H7iZXi>!~ik{$8%~RDX@n&#?a>3QTU4uWtN;Ni@Hfe->3f>RP0;H{2iR{^ul|}=p2b0pCj=Coh@*H_RoKw_N$k@^KnK|J@P*( zXEY4aIUmonj=+-hiH7J_M$fWUUEe-;Nd=X!jqI}e8|8F92KN6?_O6F)l!^Yg(tq$Q zsAW^rXF=Kgu<3G=4?YDt55U`7@}KM6NrNgk+68NoN)?U#hDokEQbj=xmd>m6tvH4LUbQ+ozvznDi~H zShiF3Ydtn;lW2e7M|C}tn^HW~(ilDa=X53tF#6A|wO9l1K;oP)O=E|o1 zqn^b!M0TJvVP=C)_0zT~Z80L-q#TVmDd*qoy&*oeE(RINHYq1l%NWx!SpolPE;;UC4$b^@0U#%6l%fW!M!MFQTcQZ(u}g|o_M^? z-JtA<_r&8hlvG4IIewR-bh@vi?ppcC6OV&u4^v8>)E<$oG0!5=U~q)njZ0wPyvey$ zcH_Lp-y`(H6fV_2 zH>4T9f0)e#@1gOy-7E~Jib_Y%~1Z&R61xYvgE z48(b{cF(|~2+cDedSMZ8p*;idCpx=lAh$Kb4swx7N984C`<&T>j_Zu*@w-RPtXdqV zxVq3@g4L{la+lEd`ClwI!IcO6(4K+4Y)^TRCmL?kb5tAl{t8=MOXRnHhZEm4W|fhW@8!;IlL24rS24HG>`xKp{J{WZ+L{;NQxS+n9k5 zW$^ju44j@zf_h>N_VMvbb~@LZ^22HW!?y=^Ep(Mj<~gpu`yjDT-)t0_o-5_Yq@~S&vKmFEHuF1YUo!=SmkP;UnRK8RlHSjUv8hlZTlY-T={Ds z({`@>72j<5*m7+*xa}{udHf|B4NE}zD}I**RG+s=e1}J`_%6XwUfW+r4Q};$P;lih z(P)nZe0?7B=vD4sk6!V8g8TX$Fu2kJIw-j6qiy#k!Bro{%c-1je*Nm&G~l+prwYCD zce$f@EsgS59KRvJDZT2d&vQzzc&*XL+P`RUJ6^3ac#$Q!%c&Cf^)Cpn`bae1GePxH zT>G8U>x@~)8Kqa;_D8FKqcDU%R{vIm+xy*h245y&cv}p<+~5@wE+hUlm55!n!R=F? zmJ9Tn7o-h_-aZXA8N5=$@KzZ-c{)h%nQ)?^A2jr*7<`Mt<>w_vwi|q=q1Pbv$9!gn z0JdDfXDOlh_Z|(n# z!L9x0P<}Y@vG&(~1l-zR_pkzP?LTDr%ycaIy362p{Eyaku50hR#xA-~zcJ-?;0{{N zZ&dk%GP4@qyl|zZ`tes{<9z;wFA(T7QTIuMvgdDu_{A%~j7^DlY5YnzES!_5H1yuq zesO}=xbmTvw^UzH#|>-w5yEFmRxaKI``>5r*C?jg-kai5_3&YUd6ir$@rw1mSDWvv zN@xQT=^Kh3`j{?xL7l~wglEuNt|2OX@Q1Q>_V@Sp2U-YhgHN5Tz1-_^&PE^UZ0KE2 zXY!UBgss|*v{c?T49#0lr}@si;G)asZWw55zamYNG!cCMMTfht9q7uUa0kRHk(Q>T zbM?lxE(;wUdsPd4J=4E&{rc|pYcmwx*hh^+zI)P^Dwt_e@@3P-&F5Wo>7^_9+o1J_ z{hY}(ApYjZenKQ+`RGQ4lGWz5mwZS=pI$7%_ZJPg(5ECF^Xih1Na_{>r3<0;2-1au z3lO9W1?MA37Yf!PSVvai4{Y$kP8~&o{gOWLppob+^xRK>C2qG2Zgb1iNiuB3;Cm?q zY*LK4K+%h9)MLkU@x$fU`$$%P%mu)+s088{WRTbU%`C!EPQ6!D3*9+%vkA%HD(RPt zub!{}Y|0;!zdaxy_b*@m04Wuc|Fj4!s$lVb`Ms1sB)?K7RIQS47WsI)?90EGu#kMc z|LvCi>iP0VC?O=jPvlpCIXTG3TWMeZ2^r;oO7e*r!GfJH|Fs$AA3VX)Ydu3g<^#U` z?u`0BAoBHj&vA2Q)iC^yjQZay@@s_{^6^&Nm;W=815tkeX(GOGQ=AuH{qny+nSm8! z3Ktj+$bTIr`SLOU56NFC@;f}fzWhrw3o_(CDDw4p5-A4TTEpcX zm7(}sWU`O@i*=xdQ~#eSfUvLse#t+`)X7EVEAk!69I{^l%969~2hS*)U-iExLw>7t z=snCOxoCbx1~TL~i~Lq0ME&7c5Y4ahuO{8tI z$?#8+CA6Jnc;uJv60_JZ`S*FuRevQ!{|MQCmz3Y$KTfAinqSNRHj6R6e$ z)WCaJKR?zOHq;ej=hhFps0+L6uYHYSbzqHQE_V|Z;nlA(G(1bz7*d+@p70vOq1;Vn z<-fr-hLe`NHHKuD)z{~Kd)64{mjCM47?KRsS21gip{)HZ{yNqeZjRgem=jA1qm8_+eRNNPV+p zjUnlHbdBNBHHI{Hl(<*B7O{kp4;)=%$QI#u2}jo$#%ly~N7oppddkr?hRz&wcut@E zdQ&M@I?^?U*VBVRj^DaC2Kp}N=o&+3kE3f0ogI#@F?4n~(lv&7_o{u6Aj@< z*BCncREe>4O@!J`-)ZQY2*vU42M%i=^!Ihd>v16m+`j)&+XJ_2&6K|{7w@&;e7Q9a zE|FU_c%6jdDIdtS@AC>m`!cwrYYd$oU>{va0%V1Q zx!oRJW9Y_*GsGtF1|_Whae>6I6JPtI;+qABotH`&-gblAHEy>FuKXn$4NE}zD}I** zlwQ}e?eORo-z7Nov1`Oe4Q};$P;lih(W7e&#Sll=7&=2Viaq@Cw$ z-WEf@+~E4#1J=;l-z@aL3|xM;;#_+F1+ICKp!Y}M$x~9YrXIM?0YJYB7jnSmXGxBC z@zvpWjoYBX?Hac&2DfY6wi|q=gslg;SnGFmjbYmUy2j$Sd5z(QU+o%0*)~78#!%CK z-D?at99?60L~9JSp0G4AUSnw15pHOab%el!wuLs;piGex_8hmq-2duk+6^}_dv{950}5$qxbXU*$Y_FqdU6B&>5sv>@th| z-^MkDZ>0BBq57Zb8pD~CKUDt{U1NA1P4+_aC%VS)YRVsye{_wZYj~rk{T*Fnm^>>~ zi(QVcF?9XUzLSJ$j;=9u4W!k1yhiot8pG25^GjG`SYLNUYYb~^-KxWh?_=0(9>|Ma zpGDf!+3jO^;Nmjg*H8EIE9R0t-lAiYb%t0+H0t)$+cq>QI@C&GS|56d?&;V@Azssk zJp@U_w$M63>_e#Xzz=j|v_@?xS3HC;bQq$&>RKli4{f4(@4#fgLwb2qy5C{B;{`t8k?1>Z!h0TKk2dVD_q^ymOnSS$0#D>}6evDI zy6gUdKML$=h`ryiuiOjofxh3|fqmPCshqUO8}zvQ$MpXc{aYH+w<>b_S79$ky9b@G zQ$#vAepSTJ?Ww4H#DNd^YFze=+e&zFf4i)`1WCpSY@l`UB!{Q74Ms_RVq3RAAn4s1 zG`Gj0qnCXNDp=W5cES`R?$9&(8rfML~^g9`o><4W3(^jk7%Dg&=+~H zN>^uy&!~v5oJso@`uU5LzoMde?~Lium79<*`yl#tQ=oNxbPvVPcH8Km?MYLzt;@-- zx_4jU*r7{4_qy~RfR+#H;^k}a+xa5xFZjZHa@0ri+$X0Oqnl2ox<{MRx`vz=jm@9p z@QJ)7(wM+fPY-xf7-H?VrU@ z@l5}BaP3|V6;|iQeJHrUCXcq~D>O}w9;SW&K-&l!aviw%v}O(4EJ|j6AOme`k3ia< zkC{I4crzvGJM*oe3+)j|+Z4L(^S=Kmw)2}zdlB0BN*g5>mGu8Kc#+e#*no(1WXMd( zaeD^R#)ZN)uxFs|52$@{4zXw!em4gB<$4T1)``YwcFLnjG2EQt_Tv&NyV(km3!k!u zTlb*fl?*r@#pWre6|wi=Et5V|aqE;jrrutO)rG}o)Z+Ia{Q>VNh`Owlj?1>uy5t=T zlRX^4GRt8ucqID|evla1{RjJm@$zy6{87{;hV~!)5b16AALO=3_4b&{aBXk-&Gu=(EfwiaN4d7vqorro2=rxXWOXkWsmT#re6u-x)yA2-F_K88to6+emjWbI36 z9+o7-6s9l5ksR8Wu#D+T_a$`n1$Zg<0^6aG!Vvi>< znzIdls)Vt|$Kts6!hw%{4_EJC#&x|BpeDh6{woCc`L7Zj{FNu5Ed5na(344GS1Tdl zb`4R{;C9WC>H~Uv*HildUmSCfqJrUL$7b#6etFeyetFTJ;jjkKmbbvDv$L%)TdvcE z2Hr{ugOBO}NbfVimk13!9`?uwZr9vdds?|x&#bk0Zwl~7c`dH?RQpgeJC&>UQC!Oc z`>PJfptb^zH7V+f5&-@d1CH9f>}GOeSlj#Yrg<)?X3L*xV7^$A{V%|b2-J~fLl8k4Q}m> zm#9i_*9LAjc*@QOw|2%p?8-;m9^zF}c<5utNwYzid$ZTl-b>r$o%_yZ=eC@?a+Qmj zbvy0yq7N_qc!>}1Er#vc`26&q?$s1dvNNcRDZ%H2o%CW^uVPz0pC7MjV}=*vP!yvf zzqV}Y@1&QM8QbPLUL_mkafyRl*;OlXj#+WyH3xC(e35jW_cy_@_P8ZcQ?13dtr0ad6#f2GR>f*31DYEUp2R| zjqCCJ;5s(d;xL=sm8#If2jcK9i6s*GHMg&ZtW0A)E_1u%mF|RBVglN$uX}x`Na*Y$ z>$R=ZXwop;UU=HgN_NIG+M@}r>+R@_(!1qxn?Ub7{5m$;?~XRh`$cxlqkZvy^*iQ$ zJCFAPrLIC=L0q5{G$D~;F3y1a4lw`zQH&|l0gqjTasP1n`_kFt`J%$T6aden0^$$J zO<`2x7<*C93W@9e3u}==@^=YchxqFG`u9`*ko=e6tynuWQM)o?(B?AC#ZspUkNLXGDH8gc#?S|6>{TzeCDjD|sOwZ()7; zkQ1_hk@&(*abA4&<^Pm2hswV%ARljUefgJV$j4dLa5p+HzWVa<`$ktoao_jxvYj4~cx+{_yr(^K1Xdez1^l-{FC` zp5^Pm;{h$4`VUe7VPF3)dAJ#5>g1yG6}g`>hxG50pA2mK#dC<}SN#Vv!iYucdu@tFL(-t{MZ`GJ!m0lSX@3q)u1j#U3OLQD zNiAe}VA5R`j*61M!Ans6mGJj7?jQT5`~?w+^3S4w&9CMEF6H+`FzZ2ih^-Jkz@{#c zpZ4pkU$CSQJGV~GMP1lk&3=7#i#U1WYw32F2iPKOmz)W#Yuj`!-I!Sq6-{6*9ktym z-52fX`nl3GfnV+VxzO4w`pslS*HksV)bj9jT4%L~)_k29?KfSa?b-E#U(kHj&PW)uo&s!ee^Yd4}>eD_Y=d@B=t}5_8Z>4LmUdiX^ z{N7`BKED8G${xG(<#Wq!ik^ykp%czl#+teNXGHgo-4K0g?1r*0jpc{%3V7QvtU>V@m`BtDb9F~;yWn+{=BT4zR<<_R%&+E~s-))^q{2_A)`}UEHm#=+b2gSLZ2!lSIw{%?_*6Z>5y%ois z;I*(n|vx4x~l0_!i$I=<@Y%4L(Hm5RAFaxR_r^x^f2 zPtw{rU1JHk#Yy4yin{J^<}teNPu4fm+Cg8xR$6Zgdej%M6{Pc&uRo=DFV@b@EE~E6 z@*rzQd35C$X&vF_$ym>abFq^(pGe18f%>3%EoM90=%4LRZD;~(2}|3TzgD!0+V}I+ zww|N5rM9i0b$v6+rvG#qonZ_t(PuE9dim!Z2iBWLWWSX2$9w zy$AYh`BIq<6Y=e%q&~li()sqy;x|z`&7bN2j;|r?K*4n_S>XKK8YGKx#-p7@bbUh0 zd47#+2R05GMJRjZ;pmyd!se`D9w~SlKu=!ZJl#3h9DG0zP!VW~Y2mjuF8I z;RnmXClsd&GKWZ?mV8qF+7;p3Hi=sawLc2zg+X!K8 z<={|Ce=|YZYx_!j?GOz}p|ykVU1ce~lj@JE^gBB1Q;IwK(oyy)N(ikHtYbc<^ef2r zc8ws{9r0MieB=Rx!dy4x!-due*0Ft(U%!<8jVw389S3&}tr6V8cEejJ=Z3|9J@ZL$ zf!PbK5&S*oldJ{Qc3R1N5?uM5O!W4Q;$}@CKeR^hZ`p400+VRC?~s2C^G|TYhWOZD z`&`Pc%qPKB&xrXXxbo>Idb^f!k0y{GS_}9yZp!ka#n2)cS_}9-mYdYOW?9C#yl_`g z{LmT2ioWT0k~pAEC(+(QLmNu{7>(@(YWk8E zZ=kg|qnKRU_`X-0G&QMB2V+_iY+q>7!RD z=~2WuC{N;ihoqq_3F7wsWtLohXGQv1$^>!A@X@jmnj|=VjQIXb1MmMB=woE@`5tz@ zbaN!ls3d91wf48=nkY1kmP?wxP?s6}5rcCK)zB;n^1n(!#2p#9mNC@F@@X=BR3Ej2 zj+85eM(v>ZS|fL!;j_iy*4I!;$X{(s%yp}X$=~8d$)Nh^h&V!U)kksL-t7DAlF-x6 zT6Y4ui2SD*!0Kc1lF-ne*5^;_SM?ktbZURqQ*qUSd_G|0s{M&upSg;WTQ>A-48FkN z9R@EOywl(d4Zhppw!L)=uI19Yd0KESm*USDKDJy(4Q|`{%K`tXa{P6PmA~Sz89tW3 z`a;oei-d-eKHCtt<>HGX2I7l-()~6GuI1HJI-g4QQM??`zh6!)7F_8S=Y28*8oeD7 z@Jl4kXt%*98eEf<%W*{es}NV&w!EZQ8A~OD@=-dgC+YQi887s_pR#stHn_F3_8X+P zc7D{*TRWdLxV3X5@-vW+wX?Q!;#yYHZ7}rK&QBX$Z9w`%2A@bk!byYMex}w<&-ox4 z7pOE(M15U&Zcjuqxpv*^jrVQnphw`U)-92NoO2m5xM8_@FCsD0pU!wZL)jA2n6*9x2(7CB8tA1(dpyu|g-Q;Xr?f0i=YKmRsS(v3} z?58L)!nz92t8d`BJrqMObVCeVT*t<$O?|!9)BO>v+X^jW*3?stytkrpAzZzF9d@7H zyt-r6`qdrCg9Gl*o7gIS(_W{DI47Fc{8MyM^hMp++8WyACva4By!v-k{Li>3{{OS7 zFXt5EuO^hGQ@njp^(pD@V(?FqB4+z^o-FexB?Ro;`nTuGzb4=j=6?|9iIoGoMj7yS z2tElh%UP7;28ln0K`KrD({g@|#2QhS4V#glSlNO|hdzRnfbs2VDF3&hRGNI<%W!eP zHVLe**Zj&plusYLH2LZySdomA z5c84@reo(i)FqUEK;$1)K@w|zg)7LMX1`ZOKt%{C|GoIv{3`!t zV3a={|2AxqPj81Uh%{*#H2yQOpGTA587e4&TuSpP%sKtUz@{oRN&bf5M9B6&Un-6tuSz{oN4_5o^V3Ig?p38Yc#lAT=+pi;_7R*h z^QxKd^uT=to2j^jvWo|}-d_Drd%eBC#F}3@tS6Rt{#*1>f;zi;;K$Ty*4(RL4K?qR zRKGtD9qyI2_vnxI7JQZN9TLH3Y0Uoa?VX?BCg&>fIpdmq@fu_BU+NlD?kmC{s%u=i z5BA?N5x!zv4{$;*Iu(t6Vh?3k#zcLc_yoW0(+l_U7;T|m*BMLJ^9$CVsz2 zfTK=l3pw}%=JvgH5q$!&2Hc`(r}qbp_7}(dHSd~Xi+#(=hldrS*%NXXo%jy?&AP<~ zd&e!>_vEtN&Zln6@BDA5i_hhAJKumUzKc3Mds#FOzJShV7#Hiioj;(i6SxTee+wX& z{(ta8#Q6v2MyGP{3+q}|K2w5U+NaQ7_AVQAX5XbzU-z=;FfMb{8*N&hSM6%oDLgHH zXKK@4w4J^0E%&v--}0%O%Y6$`rVg};?O0Ee$1H=k3ChNOoYU9)JoklPVqT}UevWBZQZX~=zRdo&|TZM`q6cQp4V1I>Y)>5fem*d-xTV_ zbpVyN485syif`NwIx^wVuEEhk`ZZD}*Epm+JaELi zeeR;@70S$){2tsTYO{dhgZ1!g@&m*4m~YdJe% zgO=C5uV~qnne7babLC|F`O(?4W7GU|wcSVczT7?F_ayoi*wgt#>h=9V9_>{6n#!0b z_UQVf-RNg3@ExUXxGo~~{32}iXXDtHc^^`&yR#n^^(@;W>*RPYdKQZtqAwh~|5>Sf zzrG^%8Sx=&#s2keQ?7c@;9XbkI zwdKo)i@EwKcz&#>UW`39yN<_g`RFj)kF_Oupo*#kY*iJ)dlrtvHt>1X1{q3Yh|g0t z=-8@Q`0Qfe?(;whk8-qrUF)W{^&L^i+D%vTt>Bf8R~7dt zEWhd-`bG|vu9|!HQD|4C4CM}#F07X3(W<`8oIT+`tM6eLT%Nk-S%5 zER}ZD(r-hb-2z068 zUsttGV*hJKQr|PeQ*@@kr*Ye?%fs!m3{J^figdtii#C8onn(#gM%rtPH(aqpseMUD3$9r6d z5RL-=WZJrt9njnQhPrkD@((*cwY}0u-LqNZ1M1qX$WB{VlJ5fiTS_4^QQEqa-@*Ab zpHc7gS3BCYp#H4SsH=DIpkGVgy&draUH$qbp6kO=4z#XZ39feVzJm!aEL@c4Gm86E z$W_mlWInL>DNOKcK75N;9p2;kB)GQmlCx)mYc8%sX?-!b=n2GWKBKr7fu8b09W?rF z*840bxM2f6@&eL;^vTN`T=n!mjU~)GmaRJcKh8e#LIJ1T zbtfcgzNB|KyU7czYE~#$!bea2vZJrXuXA{oFRA^y>^c3Cqp!tzHqDoGx})b?q1sR| zcGI($JNl9y#_>3ZUm724;sS?H(!)6Z6WEh|Y8bfQMH>DI5T@b3ok4$j20d#ejSrhe z8vgYR{@XI}f63r;YX<$VWzhd=2K^so;OA%H*iRv~T;nq6|0RQd5Db)NpTEnX=Zly$ z`b8NyzhR`&e<%az3xza#`pTu@Q!~o@Tn3+o;PdmiJ|*5~xxjbsGbGKZBx&L>c^u{& zd`^reK1rmXYw$Kh&oNQMR!Pt|YqElfJ0(ruEQ{|Docx<4&8S<_#H~Kh7~GE94F;bl zX+|YUlg}?oni21<7(zX#df54pSv^%Z^0B^~ONE~8akiuxl_X7iYyas6pD1ZY%Oy=d zwikWG;95t7G)?|j3k{<+k|zEEgLg@q{H^cictdaXY&N*Hf5qTsN!y6_yutv3B+Yua zxYn22AE#YVeYBk@t~O!076>gPwK?&H1}{sRIQt?ES}v8V?m`(H?QHG8 zR``&9u?j`pY4B?eu1V^1r5+$2Bx&knakUTmUuWp89jq^=wi7MyFG!xU;m>xixVC5V zf1l7WS|MrWqitfP;A%I;tsN|%PN64%tqVdA39kGvlVfeS%3pEYZ(J|5jGmD+`A;(V zK}jqB#d3T|V&$)RkKp8E`M+fF8zjwWs-%^_p3>`G`755)pOiEBs9qr-TVKkPEY=7g z>aTS|sKem4-R?H{jgn^6BWd;<+Lj142p-y}(cnuY&8R48d>5!1ca#rt`&6iWhz~P- zw2Z{<(^IqIKhn^zFt~kcXfwF=_1t1`>+9KN@Jl4kXt%*98eEgqlh+p_7i_tR4-s4= zrN2;skiJ21t#_r@>%!_!{(4<^OFpI7HgPn-wVi1{Ltj{XpU^Dy#BF_THMp&>y#}}S z^^U=9eW`Cc`P=&H5Camo_0?r?TVK`(*VfldhJK>xz~~)=PcryoDLm!ce$4nN%GSWn zXSZ1wG;~LIx8A)Pi-{Un%QmwjK;q>XE+6W+sJm{Mn|`>l7#>Wcx2j#!bM5-oEgh{` zx)jcp7U%v%?dz%_I%*P{wtD^DcegT;Y^LmV4P17mtmkssHSV3{&Ufppl&|%{b;Wlw zQXP5KQnik}&Nh&Af)LyW6 zuL)KZtybXfmbJK$B3I1*y?6gNS!OiCw`sf|stqqoCwcFn>T}X9#^A$95evtya!gU3 z2-rpIar#{OH&kbj?}HV-6AAJxD_lW#QCBH_Y{LRRmCV!;70xwECqI}-NhVs9hA%CR^>aYAg8S)$C0=MO7 zmk`ST)eQM=1ljLilo`t3l_9?*4}3dBQMR9w$*=bNU%f07r~Pm2LwwbY*|Xj0f%_1j z(U*acU&cRwn_xBQv}2-QgRy2mX!Y;yhCg4Y@$W6e53T}#wr%3mR)G&A{RVYU?Oynv zb#8xQeq~f{XV=2=;cbX3+qci({-H(t+7?EKH^0~WjaGhV_|9$k*S(Zc2dTchc8}>E z@!kD*>}?FY!=DwtjG^x?=^n&5=lpliKIqrb{NWu# z_MKTZ6u!(@Mt_WwZki>{o{btAd{qW1ypJujO51GtNLEZHZz z6R+Ib=ywOb+J;95H^W}^i&lSU?-NRTzrJJlaPpP)IHCIltebduFSfm^_%ec!%~UmOz6o6^>`?2DI1JNM?JdHXJn4(&fby6;u`X2Q<& zb9}wfu%EVmJKyl|@%-qoUJqH5A!jn=T$3x_)q~F(jk)5Dq|JZ4{2BVPlAeB^Tz~X+ zS%b3&{-rIb$J<~p^#P>~{vB&amS9Kb!9TkuZm(IhrsebSJFgo6-GcLzeYD{(4!>IN zZGAoJz8P)cgZqAX$8~NkQ?w1|V@eveBkM=~L;nqar_v5%zw3DK?L~gyZMzmL_3s`E zA9q|INAbzxIO_cbcu#@7C*!{a-JSpYsgHlH8Q0tQ-TC7F>jy_WAIJ?l^*Pw_u6LWi zw(64Tp6?fi?O$~E?D8uHN3T3EEV^eH{AtM_|C#n#aB)&@`pu#*tEYU*2EQpM3d5&7 z17Fgv_A8o-kaHJ#501XD4RRI^jxMC1Dcj9n#C7eHn<%dr<=75CapJm`EbENxeX=a* zhvA3r{aT%`DSX4}*Q$DYU+@2cYc41A3)20mJK5gA&&f>j6-Iwux ziagpZ=2xKKJ-ev*ij!B4c5VN(J?u4w*AUji zU*0>5zWJPwG8*$yyk6`l-zt>*KKcUXjhXT~XmCBd@#s6Cdjsk3;{Tt79%J|H;~2{) z{6^iW*U?XKjAkCL)tg4&1Do+$!EL-xO27`*>XVG!C0=g#EzS1_08iT@~^Y8;Aj1A1IsjCOJ^Mg5>? z-Z9vh;|1F2yxzja&dzfSV;(+(>*DY5@B5(!(DQMgApkJ9#h)x|Ze0JQ?d~tYjSae|*coo5` z2wp|-qOI7^jqJx>3rgtYhjuR8mh0YVZHBR|o;*(9vKY2mgfVC#Y*p@i_x>-ZwCmjd zr=U~Y$&Y_+FJg=l=(pV%aUsWu%h1lu7%_!o1lu&*@+idY>+dX2et0>?lqbd%Pvy}b zzK6b_;|Xq^=M~$gxW4~}!O^KFk+&EPdzd!IODwd(g0nYugl9eai0I(^i{<}yP=)B5c>2heOBz> zqenMhyJ*pZ8?U?(pSZ4^F%x$IckyGE`#`jM^QMmVcY6Te61XHy>$=t0vrAX>xb41< z)(tIdqK)l$v|$k%cg`<|?e-+|GcdNSzdd4B$CsZZ%(opYeCC|FRjP*VK~Mg;<;;~> zHqBl8oTu$5_#(|Y_#NdAN5#$UE$5#hzU6F*3|yS-@W?HZ*gt{^*u@k z2-?1g4<0@%=c`r5k-)}ft?QkMF8$nmMA_j5M*HNgkh29TVG|9rgq9{gve{gNte zF3K!duH^1Wuj5TlZh|wvhP1gTpLKS|U7!Sa?IV4g(Eh`sf!5MY3LE+3`>Cm;i~ixhTKk^pp?Gpiw>NI6euk zd@4@Q_v>NYZxTqGi^9pe{%aBABz)D`d14H>>sOA_=A!Vtotvb3_Bj6XfiC72MO@!H zXS|d3x+6*2+?8&}=VHSlNv5rj{@ac|xxNx=^0!`D{>&#FeJ%cqYqxkZmZ0sQhlMD? z_59tAPc8206MHKCN=ILd-{|nmlq`;a(czcJ$2L(g{g~qKcl5uYhgET*${XIFn&jvw zSJCMKUJ+$9#+MLC~4<XaquQa(!GvxAK zE{#5)fqy?k&(Rt5^npm@e{BYze?@W1tP3o+#dVyg5BC*9!-y~W80f>@?33=dBx&OIs-JD}>m|)-vB7UJ z_*#SCXmGucBY%r`8G0SN2sIddiKH2oBuzdyNt%)NY{YLixY{Jd=L-$(`HM*FNLdz~ z_O$qN!D-K1B+Y2Lq{-jfvuyB5l4i8R;I_BiV(_JsW@PR2%Ld;iY09t&o=}Q?fH)3bE~8o;hU!mq1-J7*Sa8Km%;yw z&+2|3&A^{A_=gPr0l`E44+=mPl`}qlbi^ zxV4X77ok3n2z{u}4#AaP+q7OsO0W2%My{=|XAExbbK2mxTt#EgUlAG`QJ=B_)IQY5 z;`KtK`m1cMPt{-XlF-v`ACWX8+fV+g!DmZa`Tv?6H%YAg6)y`O^4GqIxTZ<^Tc_Nr(vxmh}(9)L2#9;<5Y*>Dp&C>0lntm8qh0luP@uqcL#h_zefW;ia#xQ zSl)vMx8vP&0sl+oxJP0wm*PhS5Ba}laBH_-!9%;fA-M8ayB!bc)jn?q^opMrocdV1 z4Z<-4ajk0}mkh3LjJO8sxmXVn50W(Xw0KeQ@V>4=aLTp!Z&M9kku;+wp>#sFZtMh z$=b)ZtFq9C`fDA9`fJ&hUZ3z)Po-CUxzWeAt4@P!*$Evm_)JMN>XkIhW$}{+x8*u5 zxaz6b#Tmg>PsQH}=vDs+@)(p}aXSv$ay1A&^|aTEritsAOuilbK?w1^9(K6ekkE01 z+w#6CcvxPwkLs`G4ehf?@`v_OTO-#T^~yd-HxyCqHjlMG%oxP8mlVDO)(@@mm(2R;{T7%2(GZJBvWaUI7) zdcD4spVDi+HU|9dy_)5(^&QeHpQQnxwQ{^Az*SFyWBv6w)c+wlq2m|l4BPfUUCtA? zwy7B0w*M}J+xGvG!EO8RHMnj6+Rsp~ZU2opW*~0c|8j$u9EJaBGq`R4yA5vJzdm1+ z{}qN$uc5d1CtRPMf%NwNu-V{t{CddXvwc?on@o3=DWLIwN|@Uk@1;~bJ6j!3`rlG% zar+&uo8ldn%mh`(;`Y{#)orWX-0WmJwL9ZBQNmt1qK7+Nwk(Yl9yVz(d|y2LGn(}6 zv~)f_Fb{liYNyTq)aHIu6iXRS|F#pZT}_gZ1V0;GppS3OQWf2>@~B>QzVM%(f*vhSPfOis!~tPuf(hh zA=ZtZ{8m$;A%m&vt^~KIZy$wgfVJW`h%$Vty~w6*T<;X~wmrvQQQQ*m<` zo4Hj9?7VWv(d;PYukXwm?YAtw_U2n}UE(IGuiKr>Gv_)0zgwoc2Ta?y{{-nAzCRUG@-@mJ^HrR;L58OodIKq9`u$W-lr<5=gM#C~ z!11~A+cBS6!~FkUurg1YP?Q^uX2GsP%yJgxSnoeS4lqsr5}|uqVvR!iTacevSqUUw zD)RTrG3C>gq5MxGbDI2LP5{-g09%KsZ+Y4+bC9cq8&|G$wxt^B>0;{-yp zkDUCmNQd(81(qiNQIWq@@@o{9{~nx3li&D0pJRt)Wcm4g70T!NH2Dqk5V%J2YZS_V z7$?%?A4-u=Z>v!LEMRH!w~G8Go-`qpKMm*7TLIivqO$<7+#RUgH_lx0ItR{tk2G<$@Y<)4WEQ2y_t@GL*r zRE48;{_sE*n&ek_2QsIXf3LWF+4A#}4CVii4Eb9)SRnK#|8R!<-SSXx<@1sZ<&PHo zhvjdS3xBE8BKgt$ig16!wDNaN^%T>EkoISj)ciXB{W1DE+TXrAV3sW+e-{r-AT5K& z|BM9Fq5dN|*dg?%|Le${rvIT7{aK}<{@)b)NjK|c@~0y5r5lTJ)mwqjA!C~UZIVA6 z|5U!_=b8;^`X5ix|4L-i{A&MOGvs6bybDKFki?o_;hQt$H&7Tt#r^v6hqv^aU*#_p z`-SzlS6-_1SASO{V_NyQhrY_nNXgDEo|w!n?!-J)+<)nQV*7Q?iEysF&Qb2p;KQ{zdfl8>u9I-l{ybzrrCqS0 zo6pI)?ZJG?9TTxOf~-$aGZ#B;Z#qH%j-P1eviE;LvFW;Bkyk5@REf%B0w?Y31^P?-E{TwAdL=l5gnhD5(`UjMuIdwtNRoNZhgp;Hcgs0+(u^}_KE z{JS*@Y@Hv+ykypw^3gf*-Q;EFu9p#O>T+D+l=^=vNiMqbh`bAFpQ{aEVrha7>X~m6%3u9phseO5q~qh7 z#D?{2@0&4e`W(LZs7R zUlbnH2RueD9&yRY$McU3!uDAs7oQ)wxpN$I-xNC0wPt^-WCJKSte zCpWbXbGOIwNp2jqU2}= z@u|gmK5cFtpCOW&0ZjYg*A3-cpW2W%C+-r*hi_?WL&4Zt&yI5Re`lT88zk^YlK9vl5-gu_b zU!Q?Ln1NrGfse|N`)3(?@+S5|<9%@e#|)|?eXIDMO@ofZ7Xg>oeD0LC1p0JYT>BOB z;WMy?p9TNv${cZ7(v&;H;F=8eA0#J2{q_2$FROh|Qxf{nKB@!pi7E{7a!Hd9>rR8( zlk~F`M6C7<`Og*_;+i(u+}sDXIdNMqix(x6+Ch6jEw9=^aa&(=jKGqlSuT#zVIY5b z9q3M3eJoxt8C9P#a;)}IeH1UrdD?-`_ZqDIt(~nso0J&wR7sQ1JcBDA)kjaM%~c=8 zm8a5!oeT3NR(i!33r@M#S8ch$e@W7ew7znn$0Z&IwGVN7_o8)8T=O!M>Pg&=^3B4L zxYjkH6$ZDXTbsePP6%x=_&7;3>N2?X>Dq1ZiITPv^7!-sqjn~4 z?Xy7`5x4ev$l%sKM-6W6bJF0}K9j(gf&5iR9_u#^;?_QE4ZXEbr@<$ZfrPyVx9vQt z^&ShKXz3h72QTBu5tBIloGx5xJ95O?orBg=eS*GzU3=B09`vL+_qH1`qtKv{db# zzQ=~L_dZOCM^E~W8!>NjI*OTR`W*RY6#E#7_m6WWN^4=($0*fdDApjuX~_EqIj^8C z)2^ax&Wywp$oK%wNW6b$Bz`|L5|5u58NNR7B>L%j`TPw!qk>+vCSD=$m~RSB%4Ho> zE<%b}_};4=Q&cB(d{uNh66ea_tb`JW`L6&@tSsj>>XsXYiU5-kvnbk^HVFO|2v3vW zCFfU4tWhZcd1OwL?;JXiNyi(?Xa63`{~g#rP5v7q(DvnoLixXi{Au#H$fK>=kMjA{ zAIe`3EKUAt;0zr;iho1-cj8Q%{GJr~d|MF8=UOvq^7Z{sV=UPxLiuwt%3qXkL|V@* zKgY{Z{t_=BaihRA_B@c$M{J)(ce`$(* zzP$+La}5rP3a{TYB472VY=%&NbB6p*kzaASeEE5g6w1FmL%z&oR zDE}M4Sk$om^nGGz_EG#Bmj4x;Ay$qld}5@$Dyj%R2{GTAg!0)Y(&TRy`E8P4qfkEi zrODqQ@_QsB<&VXGDE}E?lpl2S(Q%P~0OxGb{EGcIB+}$hmyYYC5K=zh_Go^+E@we7 z<=bahX4x$Y*?Umpq-D^U_oYmS`X3TtsiRJQRK6m2Aak1jCApzjJ*hwM;WfYFeZbP> z7s(W%Kl$uu)8sd$$WPnXq6PUWe>(ncSRwNH{=^2-GH9GfJ!{&Z@xNSqCM|@tAC>&l zT;ePZlKaefKkuUoc%dH!wNzcPRI z_WwD*vb}SD%l2(J-j3r3=i5B|Zv6tjCF}RM) z7aiWi*!M%sq@OVV9;|Y&=9p<_`7CF}SpBE2z-y)t9`VF4GdfjF? zkm$P2Je?Khpkw=Sd@HU5qcq=&KX)Bu*h_k;X}%R#-~vqZt>|_v(y#Wkb&D|;gHPf^ z!TMqNUB@TEJ?ekcd@DYKQ`Wb_wMSr|c6@4kz!Ar zoM zJ7}(T4ln6p9ItlxrSY*QxCgObYl<MF}|Kb z|M?7kKAeGHlYt+}z#q(zdsha1cLsg}`2X?6@b4>N3b#Jf`(5FCqhR~;AlE|Q*bB#RJ zIn=*w=&v&L&5~BR`rNZbaFwh0a>K{UU2E_rNi*t@wDQ*xXp7*=U-3@C!*cC5xaBXf z^M$cKCf3dtS9_{HFrN!0iB%uPwT`IIJfUG^?fi=d=Y1*z>8($PwVTCPdUB^f+rQem zBDm_Kc$?s%K5A#;^M!`dR!M7lLpv*f#k+()07U{1xcu~?h;OLU$pmK=YyU<2MuXzb+TOz%^TWdD-+E)--VQ_nw(q?e$1G2^7 z=GEnY+D8WJx?sy?+s{%Xm$=riz-}EW;#qvujv*gyhqhdn|9BBVpBGy%dR-8=^|Hax z+j@D(;I>|l8r;^)NrT&Zu|7DqUY1C~sgJD}^@}HNeRK31Ch>_Pi%}1b8Hn3OV6Pj%+elVoG|Q}Y(EzC22p;>|P7uTYe7#yU5hgMpBxiHp5-66Hi( z%9%8A10Ku6fDC`}7Zk75<_xnlp^wBJo>Kk7B$66yr6C|Y}ibIgn4%8ng zg_CswvguTJpiOdx{2X`#agTTW)r6O&6Z%qcQo50tp7$EWw7=C8WlaR}py2oyaD1-( z%>jLw|5BVMRu1TjGLTdRpM;o2(Y{;9jmy#br^)Yp?DF3Pq`CTdH z=i9MRelO&t$sZ5C4ElWOk811x?~ysp{x6IC>5`G+A94*sg)@U~pY5I?poA++b zD6z^{_%q0yrhiFZ$ub9p z-=8ng611OCHbs@>Q_69v2da_f3)D2X6bJA5;}3n>|Ee$0+!?ckdf>i5P3A$bOy#07 zzBHt)m(l2bCMuWu7&`Bm2!9Ov&~Uv9UB>_nux>@-w?O|MrHzIs{zLR#=+0y91>plb z?O5ped0!IvY4r8t(+Kl}=dQ|>sIQcZo>l)5&8PB7^Y7RroyT@fjkAjiue^Kz(0%W$ zFYf!{9mB9UdmZ*@9}d5Y5&Pafl5_jgM}x|JZ)5-Z)9}OTE99sAKzwkH!I$EU$Ul2F z+E*D89dtfLVvF9v(d@Px%7^jYb58e=a^LF@Mmt+zpYK42H=ql3!j08zuBFj-Lv*-t zLUiHeUy3fIzeeL1y2cehzUVU(a`h+bx9!^V1blqpqqjUMSG}_4r^COXA(E`0E_ds9CP?DRbbde!|$6Uv9X@d~gP7}rL5z3?7GlN^`fbK~tEwnHCdC@nG?d!?a zew~*BY&Qu1u3bS62D^i=qaG)~-)8~*eY!6w_pyFnFN}pQqtUL$?EfyxMV+3+xe9Dp zih8c@%y(XmHPh~4`_F^^^w1~xN@f?jn0nF?=kaM*X0Exi2xV9Zf3$MnyZ687{C|!^ zw_fO`HaJ!&YWeGj-~UF zu3ozVUKp}3cOy=fc^<(%lY~AX9f=>pV$kS&{tg%#JYUYO9C1k{cEXT7y#HX-qxFxE zd90x@J3nFqNaDSqzxDUrO?o!69>hPxA^xQLa^!b}z8ky{-XuLjc>m(j>fdLer`VFUj?LCVDVU)Q8cI^<9(?LJddw{0#xg-Pc$-rr+G(OE4_}C2mmooSRPUSx=gZ@Jq^!EcFWxo1o zpTd5If#00uanl{^dE(~QGb*{WelJ3M)vym{;5RUfH+k6YIjFJ-sm=JU&eAJQ$fqQH zsE_@&F;#HogVQcdmst5IK3j05m&5qmn9?g=mIUQmkC~+g*Rh9C#o*R%YXlGFwh11} z?J#`QCWO?U)W?3yVZX{i+bTMwS& z2Itzb8cs_>_6hCI zz||h1{v(7w)W1P+`nXvAwH@)>rxe9e>UBqakmO~wLDIzSd$~gfx9#er!K?0GlFwcI zqS(5wW8?Y__u21qj$rl1b$4{E%Alw{nJ`_wwzXy5<_-NY4yj}@2E(Rf3#CtAwYL2> zd|0f}Z)3~4HLIwH`zFe7zcQbGdGoSs7c5@2cKzzR+~N)HL+q{BF1c>i@@sEhZnoY@ z_SA^t55836?hR3pXZ^a{TJLCI7f9H=jxqx9qZ`{hTAlD{+Pd`}t~(psdAtx%62-jh05zpi!N8Z}(?w@i^QTcWsj zHf?n@4ZDkA;R(d|-Obn)0u95}Jq^k4(p=!ct#aUYI&oW^xP=Yek_LVg6SSi0-AcAh zn=Y5he>ysdi#YA+r!>;DzA!k6%eX2O01&g+HVMl7NeQ-Z;OV}8^3M-=g!xY+Ke2K^ z*IDO*ErRo&jz!UaQ2V#%fTiibRr2Zcg&bD(ZN$Ea|1|k$M81Brp?tnR4dt^xO_N_F zh@j6O{;0ZdCB}QPH2Kq|V}DsXY0BqQO(_2Zz|!Pzm3r5H8e}en_MZndO};uGReUyg zPtATll)o8Rn*7-!i1x7|l+W=cO@1Z#X3O$(JPGB$3;R(1O#IuhR0NeQh_qBo9M=ON z7G97WB!7S34B91sASRkD@7hCL2N|^dO88xzPqW|N;F~+`$1Xwh z$JY-8hqB3gx^xI?N2-zb%@Xs6=gu%63QV%()Bab#8O)qLcb@-f@MC;4SVoO}D7&Z( zzs_7#!n;<^HO-pq+B`nGa24KB7C&CNmGfJV|5?{K&Uc-VE1c-QAnGe_dvFiRwPPaQ z(@w|@I&smAhxYK>0^eP}RT#|MxLrN+F8s*$^5H+kJJeph4?Tu=qpySJjl$?DLvsFI zb_KVRcsJ08XQg^P=j_;(CoSLU@;!3$UY9&!@A%sT-w6{d4eeZZY;3YtbMkGW_Py!5 z_y5H{yman6vnr2wss(&o806;FzEv24cfN!7pD7HQ(pM-<(RaV*UGMBl-o3-+W6-Wn zyz6fJH_R0s9NkmFyI*~0ORN#!5he_a?s*b(NJ)$T9r)j=x?8<-4V}xjquhMg`$@!Y zu+@az#dqB{fV@wR>0Gvnd9Ew>@!P~x(4#+j+aT|DP;%&l8~R|~!^^r39%QtRiT%~d`Y9d7$d`EVENy#0mp;cIfmyXIZ>#JILQA!l%O z>P9zr+P^bzyS?03jEW~729I{0&kZ|qBhuv4Hm=-v6t7idyT1;35qRNUdSjtsN*m_W z^4u|`xrR5s4WP}9#ryct`&sr*%pc}A2Y!cW8{^-(bI!SMZ)4d$_eZ&FzR?3c+n^`c zM=uVJE^K=tI(#w8(o7xx&99RVewp>lc8TGzUwc0Zd+S=`Yzq~%wX%P0ybIsa@C{%w z+Up{G$5@E=%kKbR?)N)@T~l4J)yRFH@YfC7b{TV?q5m$lVSdAVR_SOvUe7$I*OPuX zbo~bMS^oYy>Hm8p^PYV$hwpqje2>YaJOz|%5U#_)``%p??QG~QA11G}4@CPW6mkQ; z4sL*r@eTXb-a_ZH_K%eNVDlX}!Stra20s*I^K&m z#Orv$;QsUFkPpwa_4obP>-W8l?~-gEAG@L4$2Rgge2Z+GhQ0%BwhQSsA1e2u4}g6e zrm&6iyJ^n_$+tj$H&xsB4n@73A01ph>V|!s)31DPLqEa1PvoN$-S`%{ZUAj;qUj^i z#`g1DXv#5sKU5l) z;djwD^E)o)=I^KddCj`AeY= z@AB>PEsWPJq&to9Z>+`ibdx^%8K>_JId+ z=0AoyB|qky5H*}=LHQ1&FTp($Zx7x5K`&^uJs(G#_yMl%{KRM{zxRIUljSoU>z#hM z-g?j$-vEuS^}+A+gVAU4JoUgBTF>v@{04mbmZW`hO@_XU%6+hpUw2}W?_=JEo#JtR z5!Yehx82D34-^~9ef+-5`x$(TK6rd4#uV7&$%~>_sFU8ubmBYtaa?cvj;uO_G3YL| z;eP9F0s4b_=-P|&a9sHg+U*-Ci}vHx_igICD97*IAU$_mY%%RX`{OiT>|fQMJ^yib zHp}!!tI;M=M{ayWIaC*ng;R#|9t?H258s{H?>1gs?rVJa?7_*Gm;1i=&RLAF#r-9m zf5WYD5w1m&cl&hEj%;hkVZ*k$$d8!UBg@o-Iwi*XWdG;-8SrDe7ky95`^tS!B0g=_ z5Gh3yzG079ri!y;vi^&%H$vN?P3!u7weGYQ^ za&H#&(a^69--+Cmij1?=m3sSo27bdIKJWY}oRUeN2FBy5kU58n4;jQ01N zXI62Y4*#7V_3OsEs{2i}!_&CeR6m0=-p^o)8~4!P({7y?Cij=P?v|@P**~`p_2W{@ z0LC+pOZP&@hC!$sj7Jl4WBVNkI|p?x+jc?cGJKP%Z@by&$@g<_$vg|pekmOPxHby= z-(LYA>_>Lc-%Hk?c%dI&yr0jZy*DEtZGr#HK6)a`hv#^=M~~i{< z%8wPOWAsVtr-8ALZ4%cx$1&a)t{!#$KJCjn)?&<=LS1M>_Oo$c4*UEg`trZR7~G$( zPnv6(V=wFUb+j?ZSDqy}?$Yl4@!EEAa=%DBYhS?oL$^K+`W0Raad{z+vb$&oJbodon??(68DW3HAZ0?zdB~N0 zioY+P5bxWBa@U_NVd-@E9~qc@`Uyf*65&)~dk3&(K{9h(*HJbOU|Ub)Zr z7V@9(9ol&{?WVfAzGn*h9?&{pH0V>tv{mL||I>-TRsTeU$+nXi*He~k5wny9?MWfpVJ7xuD17L?1fzFLD^;WJ=DE| zv9lXE`!j2^&)`{)ea+VplMerx*94xMr(nEw?TT&VUtN9u`Mw|Fxwqz?yTCQAhT^$* z2>j^=!*^^D+J6ClPkw!?A3mic?lijPB_~JDD z)ECoSo`R$iBOuqizC%W#s6Kx=W z%{RJnAA1^O>67r=(>5LPy#ubFeelWSy~y_lFb42mBxw)+I!^8(l6xrL4{!y$M!^VeY!{*>@T{Cw|&yyiNuE}~zrxi-yZ5l z?up%4+Ky|m9c^CkH9F8=u>JF%ntbq|-PTdIx&hGHYu5Ld*Wp^db|1>}lCuY|FP=xey7R*_&SUIx=ZhKVF&4S=xYqPqt>Ta8 z5O;n^#(6xKxbt{_m74z}avtMk>Uq2?a{05?X2W|QcOGpxHUI6BAAMo!`8(yjv=8e$ z{Oab7s~n6^83B_=o3m^D^c+(>Nt>liDMX3lKx@Blw{vP&y)Ap5yoEHqBs%n zG!S#lg3j(bReH+Bf9AFNd?4rFFfREIgKIY4c8B|Ny{WZzjfXfVa+Sl|*WrsPJX!hG zH2K;rS=O~~jBy9Gu4}n%t^c0ezU~g6!F@b+XZh9He}BdI$yR(XZ;S43U#DNb*S4;U z?rzyqb%?X;@IALx&s804Xx+F;PqeIQU&r*uRu*E_#@2f_!{K(59(T0g-D=aTFqOG= zW?rq)Je*1l^*0kS2FJAkR-fZx?k^$p_e$_@ZXLN=GAb#jtj5d;ES>(`w_bJ?&|W%UWbm0 zu3h)HJhJC#|JfKU7?@^YJ7^Z{5dvX5fSdT^=RY$C9b-q`>{SRyh7=K)Nm9cLJ zNf{+yU14ceGoVhC`JCjft@FCX;eGM&<#DAV58E*ADP3@FX7Tx*xg{emi5Kq6?;SA# z2&cHgt{zQl!^_A=!6{0fO%;wIuY zu%w-qNS-$4)N3%m%U^}Mdn80q?=3>R+|$PUX!2^+%`C~YTj8~08U|e%+c54q)VGa@Q9<=5A@aC(&iA{@962hQ5~kC9`j~agu4bn zg71gG-y0JjmDEIt%o}f6cfHBEv^fWNI=S@Ps10dz4t~Yar&mSVoP%aZZ@r!qIca-H zUghY;F(Dz1K7^{uMYCc={ckS?k~d!4t`7xvtHVdf^sas5=o_fQyiT^pvFopeDs5fF z_c?v&)leJK);}EW=r5`vo(lc*#{1P>^PoE7>T!BZ@7li{rLBMXMaMrWSDX=vwDk`^ z>*)Cjs5TVh(LXu&Nk`w1047y1?MmUzj^27_>lx}ZJ~@!o8b@D?^K{y}h_^cWq@7!a zg{Wi?U3#ITuf=(?P~~Op$fFsKo~@`h6ij{T*^;B5q=!{;p=#Gef9e89|Gp|ZJt$Op z-Foy3j-EYYZNO`U8gQqhuf<7Ni0|Z*Y@LptBSmc}xEa6I_HoFIUyFX#&Pmei_e;R_{>TdXV_ff}oHw3F)kp7F!7z>fTOdor%ixoSe;j(I;df-v zb52_teLh3~_h#q`-IUq}rKRVp=`^l`B`$&nwN1 zkUPrs^N%1u!^04uG#>H4zv=jtVo2%#Cy-I5|I}xL&pP|RFQ!-f-|DWTq#twlqo5j* zQQkky(C76Ge02tXCIiQ}IOw1BlX^e!eupRhVVjiXIN~(>d^Cgq`5D*6aL|u3{i?eU z2Jf{Q^i3k4b2#{sM}yjxb2u!n{5VJCIweNDRno-q_96~ipCSJpLJ{(RT5$4dj=4n9 zUV~q6@Mk2g{E^Lt0}?BL#h(+L{BMvnqn8YRqrtU@C;bwGFE;cy8GNO|f5G4z3~u%B z5M1@wEL$X@`YWz>R{HnLiOzst@h-u`@~Yj4TYc1S%3rd_??ys>4hezMt6a6S(kuRA zhCaOpxB9#h@R!4g*9(L4_eaUR?ogkTLZI}j&l$l(`xK?Yg!a+7ZpvTfjud+3uXw%S zO0RMo0(!;qF5HDspZNy2_Q5-C7nHw0!ees4U-9OEUga(c=oQ!Jn^2!MLQni=WsZ2S z!EZ76*9|_|;DgXFF_6#YKIwj!8r+t5x!_@WR|p>3pL4z$lwQkK3FsBaw+0u&@@_G> z)n{wK-{+3v_fMfd4+Zopw@YxPSA2(&Yx}EigWLY7YBJ^9=Ap!6aCEdA#TAEmFCvs&VAQ@mF1dX=sOJkEe6;AEwsZULa*i0EZXmBxfI_O&}(^j z3$FBv+kVp8!S<83y&VkrtK35Yf5r7%f$FbvdjfjJj|xsZSbg3!_{GW`v0qE3w*8F6 za}$Hg^+)*FF1Xr3@rHn2^%)<~E3V%rLOo{-J#pK9Y=8KxDipEyd!%1!aP5~u{nrXj zsQ(th$;Vz_&j=p!Igr6e`wjB3{rRhg|F21!(HVpPy1{KftYbA#SA>TAZM(AlvwfaY zJA~y`J7~GMZw_y;*#h(6GD}Ni&))Y4WkpYs(F8??1I(NWWBQ7+F3` z46bR?+vmQD&=CJ=wg(+o!uFteR(sf;q0gg&Ydy+g)Gdjy-k%QWRqoz^UUA#rY`woE z^r3xT4*1Jq^!0$h;@W;xf0g@MK(F{4f>W;5=d{6XJ8S?QL#U_T52##E6-6bX5A8Nd zaHUs$^!`EV6`yY8T0P4Kx9v)w`;@=x)10A?KKCiT%3T`JE3R>9x0j4Q_CDcFgIhgM z3a)Zh&(nci#m@xvs>eG4z2f${(%Q}5&)E8%WX4~6KhtDztN(n#L;cHwYdxy|ivxPq zvpJwwe5v4}oht^n`rG>%d*Ahvp`WbEAYLJ9_LG_>G+uBm*9BtVlHgh{#per7Jy%Pb z(PD$!{<+iO)}9Xuu5#rtUXw=UD*i}7&-bJZJA4$6kBZxV&$b8cuc*JZ=XBviT*nAP zYAfPa|CK@?>R%B&)PGGtukTEC+);YPHwZoDTKzi>ZuPhIqGJI@KB#O1P}E&9?(~uG`#l<=oQ!gB($6DAFSO* znCsmvG!xiU-3!? ze|x>(DKv~aB(41EXw9(2M{)a9yi@Q{|3?gN`R@{3`FG3lZi!WY#WfE3KO^+SE&qdp zEC0{S@ga$ozv4ZDhx}hMxaI$K!Il4?%kircD}Tj%1rPbZX>iN`wBXABD{_2BV&$)R zB>h3ie}us;|9Zid|KAAT2EmoT;(Fg3@}Fw>-z7X4%?|j#F6Wv8{)*fC-m3O*_^&nm zmk0d+RnF;smg=u~#qhEG*BadNZxDWJpMubh7hL%(-Y9rzpVwVXffWP9) z4Iit2#o*Tdq5fKrq5g_bGJMucnvsr=EY}8uH%VIUqjsJzxY|c?y+0uz%YUiR6Tips zA7OCqg9)krq_^W&N$6D{IgCB8R3F8)zLfsG;Kwl4M{)nAxUI(8~TzTDtf8hp3G?S1%*2A^T*-!%9vgO8U= zrQA6N*EP6^UuE#EhJK#GpEkIC9yAkb?BpA>1Du7EX-eU$nI=Pc%4F(iCCy}Rl$(vz z-+G!xrjt=U9qQU;%ghp+Zrw+};UcCJVQST?)$1|;s%9}yH{qyyQj!sqNWko(j+Tv8 z`LpI88PQxUGjp#;L+5ncxOsIgH92szNTXExM5%ZoQNxy*W&6hf$nktLD zl5G~#^`S)!jjY2-^!BwacWjDSMdahw4~?dEv~KB`mXs!SRZ{^|RjL+;>20$5X~6f# zTPxK_G8G(8BGV$QX}xXp9r2=`zR6<}9Tr917*E%8&AWZms*Ri1ts`hyC#4SN`Gqve zC2~ir%n>wpOU`bFgk*YQHWy1}+JwJGA~(6uXKro7BCIW#>zB>Qyak2DDbKWRjI@$#UQe*KV0MV_r0A z%QXC~nKrYD$r6>b5zU$@xpOt;$Y4EO7PX1bMcXSiSYGt;et zJH!3@1#$g~xbD~g%y3NoFANwilsj{}JMVt={>Kb;KT+~~gXw=>8#c&I*bDY13S<~| ztHSGo1!PgViYhsf;W!4qgZmEh%*t=?)tD*F|8Pcrz0VBk!{ggg{xtdeobzU^sZWIY zTacevIiNe)=z)?LjQ7tVjqg1hgkJZ#3(K$1p)aF+HiYuKQF&?dM^5p%j!Fi~ABumq zr^PQe?$2n#~EVfn8GJY za`U-YaLON!|FHa5A#tj?Q2w7I|L2f5P5x1lul@im|E2g3<-aeZ{A)&m7@@!M zdtyfU8_F)b+eelu%AbV)Q2tIRpH}{*@)Agz5m~svvfA(n0AgheB7IGB z%D)NrO_TqK$bX0@O$g=F4~rjujFiu@ER_EgE_{}MrqF40ROEk- zCr!{pjc=Cg7u8S|?rQLdmsFu%mW93vM&zaAte)$V{D&2gSmkQWJwY^WNf+3cwdO=f z+X#aa3-xc7{5pOq3$>pfUxxgwld=L5H^@u*6~dVI=Pixqm*PdIFn)%z$zmi23xr;| zkD-o>@E_*qo&~dJmEz!cDDa0q?SJDv3uerjJ=>ig_?`vF7gG}-$}TEnc+2s*bH{3| zqmT0McnC3yvf~dCqe<=f3S!)X?)YcK$WpbhG1uFwVC}7rPn7#Gz8vhtI@mQ?mI0kEEaxYoGj@)TXc86YWzkmwL(dm~1qOK0ZI%lct z(59``UXi>ikFwkPS>x8ONeTLT`QL#!Ui0$wEjhR5F3Zj`bIr4g$STKW^X2JJp4ypf znL9YrFdODpiiRljZprSerhF^`5Ku^H_lWu*ab- z`~cS>*N??@hilQVZOZkQxrRB{q%ULbc)u1u_lKCUe{j?}>NM6uEid|w`Q=3q&95wZ zkhf&JdeH`G%jfoJ>BT-3ER$c0GTGbVhj*}Ses2d`_w^`?vl-S|?nGTvC#;ej?+4zA zdeptaJ5g`BA%2}$+V6=EM16W4Az%HI=mX!q->>aA418HGmTB^D<#wK{T-?k0pYTuF zS_WPFkLBPs>emd-VV~_h>ZO2s8HDu^bq!Ijzs`NN*(dtFwYmQW>uC|z5yjps`v)N& zxSi`^XRe`4JNx>xI+lhu-K3KmJ7X>hj^kGaubE<(lZiVZ(Yp(s1?Z-@9nojaR_tYwxg@c!GB@8FvEV|KLvM`(xK|Gf`w^oQs->ahR7W?XBPg|@Tet`SRbmx1nM!#^XcWmd?EqFaO2G=hh^<6!* z|JVNe66PO+Yq|G5omW@T$8s&}r!LFA@*Rv1*k9iDnOgV7v8ek8e-(8<=B_8lVBa0A zC4V1usGz@Kz8~QKb@WZWg~;9C^xWAuzYSwtH}<1%gYB{A#cW z3;L4n_sV+SXlHfM-QTN>+y6S+BdT$iKjywp?{R&@Tj*1ru4p%0SJdCX_`a3&Jy_em zf_tyz`r-Xea$egO?(yo2u>B9%Z=w&sW>Iu%7;I4o8}2>wok(hHzvuj}`Fm$w($tJ|yiU3ckIt`bAN2XXv);>F;$6p~bN6}C>{SKSiR(MM_Dn$f zox-Dg&gP?2KPvpeo?{pn+6wuHANZT-zG80t!w>Aw%^UXaim%nZyYy>qkLTtU-);U{ z`|srDwLev!cjxcr=C$nshJ6$!FTnmlABg(e|0Fk$vMN~T*V~3`&5w7s>A~8*p}p|# zlI~@0EabUMp}WhEb$;70)?zN+!OiI3hrt%z`QpQu=89j1?WT~%wz2NQ2R_d>R)BqY zufeucfW5j4kI$!#yj;KDd?(iUt*|}Cb;SN8se?}3SCIEp7v)~@bYu1pg8Um73a8IFOZEn)23d&JW|kN%H*-8J#%+2!oNeZH|SUun<{ zXB>art7)F@6C6{y#{Dnjx?PIv_ZD2oH{*J~31j7wePx65 zPc+WhzNeXe#>-rHJh%VG(dDM8x$-=W)u$fL4Zq=v(NR+iu2ZFd0lGCu!@kPvo%$7L ze0onK@=uP2JzTdGVc%jCV&k-ub;La>KaxZ+`y^SPz|hWw2h+S07}Z z&P9FxW4_+)ck@xyGxy5qg`MNQ0eB5B{K|Z1vqDr=$GuX=y~EMJ;97mXkgOG6K^^bP zkNN7e`7sYafOh%B!sygxs4MgrJMRVU*ag^cXD`O|AgvumIH&x1ZLyxp zsM}|;uKTWq(JQ#mIJNiPv&(nEW-OoX;nK!7v(xQ!vWs{L?Yo$(f0)+_`)nTDapc|m z7scyxS3kEDrm#PFU{G|=-U-p+D^Op@vDW?fV9y)s%S~5E-Q1b0yJ3pdO;ki1#`@{# zFVVg)a@WjWuANTzybEvr824MS&osKfPR%;`=sS7e!h4m-?Xlz6S*~7V+TY)mQT`_} zPSZZUt{tyBg!`N+Zal|*U-PU8TjWIbSE1bYx+i@P$Fd^yyD++E+h~jz(4Vx`Yg2nU zCA1&Xa$g+M=jx;7MeO4;;k@Y7=PrttkHuQ<;OU;3j-w88=XsqX)EQ;zIq-MSx!R|c zu>Z#M*yG^S)Nyb$7x&!mK8ty}faM@V^Kh>jeJ(DIgg!X8udQp@^~LUuyvN4=Z4VE7 zWx}B{aON*#&l|>kPV)E2(vGlCkH@%IkYL!CC$Uemhfp(kG!KssHiKso@$Y>C`x)_> zeW-s9<9OJEzHRKs%b)o>>_>uR)&dgOyh&)@i5hDfbDkm5mtxu0GZNw$55E>Rg8RU-hHM z4P=jq(NidoJbPdR7o%K^+1LK#C!&4${#egr{AbEMX7f*uc)E^LpQ zFXR`t(}B`ydkp!hp8drtC!`Dc4YV8srTb}@H{_RPm!DTUt;hcAZJ>6^;x|zHh3%>4 zc)_|g8`rn5DK*ZRK4;F%=`)+Amaf=v$9nwUwtj5~qO~13xbp6`#BOWZ)Vij$eqCwf z?53-(ntj!p$)(k6Th`rCf|u|n^k$_QS52EfZDy<)pYZreA#j`&&HsX?Lt&f5+O^ zP3t#rT-{1<-1m2^U%z&BTTA=8_pe=h@7-6T7re7|bw_E8EH+$Zk+h^T2YkKSI)>&(2&YC-OvX(>p@!ZF-#ogBT=H4@6LPV@V2>5-D zp%MR@UP~ZcyIWUK$J*Vqae4)55T52w)>`jdtJiv;1X2#749oeWGTiFmAeLp+sox=< zN6`8u_L4)Yv0lMONX&Aamh?)-Dnr*G*PQ@R4)QEXN1*wq1LK1z!*TxjvQ5{02_CO| zY(%~%DVMI-j&}zxI2}Wo2a~1MsUMyVT&S{v=%-fTD(rme+9R~DF-O`S39|n{{u#68 z|Eu4`?gPF~ai8mgtFKV6a-tXOW~$ISyEUJmtj7*IU5|Y+=#~rJNXCoL->`DTCAI6@ zk9yRvaQ`yamEW*3*%smNU!!WS4L&M-+HlN3-a0oP_od|Boj)h@y@e4IKoW3gz3SYI ztw=L8;a}J1ar4Qbchz1Bvd=)Fk^08FO*mayXU%d$wt>vlj(%196>-DmDg1W`?HXT( zbL<&03HsOW89@#&3O z4i&&eX=~_nO{F{@jx;1-Fh7B1lRM7 z)7H@cE5}D1!9W9Zx$u8EJ_#m2`Dda_GfTYs3dTk@2ldj6W@li;dO z6XN|4SNff-Y++EFe6nVGaQ+Rv%lDx*=+>8rfo;45m!VVoeS zWpKW)NP$MdzW@JP&$IV))>*qPUf$n0^RD0ToVE6UJ-2n;x3!+Fay)%DPb&URM_-Ne z+-$$qQ4)r2j{Z%`UJ)0PSrx}T_>`ls#+euUmcWM{{prlE3bAhqta0>bRM8T^WB)3A ziKDN^Jv~<;Rfe}a`f9xFa9*uchQnQZy}1&^Q73+^(=aT=`74Gm&B3SU;BU#n$K!+& zlmFK__%-O~G5XJ8T*UA_IdUG&v1cep&M7%^zL8@OACkuG*_%UuXO8@C4A_{QTC{Hr ze_M{;@8{^9o`XM=Bj_MDW1-qj~E|3?lEb6lXW0Xus` ztqb%uU~xCiAcyo^JF7vjr$}#ctpn2A*|<&^NpJCb!AWmt*W(Sn#Y=|%Oi44ECTYsI zc!S{dm3F118I>eWUkQ4TLP+UDd}a>4&dj8LhtM!8OFG2o3C{9fENMnflBWF@SKBD( zorbZO2frwhM9F?zY~n z92FV*0JV6V9+;T*`F3+``?JNhUxjv_D!jyPJ(LX|vy*x+&(Ujf+pm@wdTn>=U25=V zNozkrwhN0S)_$V6wl(D}6BJEK1rclAlKxtQTYKJO zaBKf{2Dkme;&%L6yez!bYjN!l952g_d`oZb={0gJ{-nWI7&*8&cOfh_%80omvc|*jy=fup{c|-9sK?Lf(-Y4Dv0!b5JZE)44^7Tngx6r73#cwroto(Zf zS2;RA_XlzmAIOpOcp&GEa{NRfNAV%SS*|sbX0+SjS{6dT5M1q)!(@*nw7iP%4d~w_ z$NK_$#qGSbR)ruwUK)sY-e7R7S#u$@=TyN%dw74rKsh)1r2Dt?iM`%aA62BcxSc20 z89BX1zQy|l5AED2cxY$8k#m!gKWOlq4Zh3Zw-|hP4t~6uPwYH!ZVtZ8;8woQhb-4Z zqj#Oqvs@Op^Q6_g(a1l?$g%UM?T7tBAJ(VNt6_cWysGqVDe2SspY4DQ_zRTbZ z2H$P)+YP?Y;O{rMCRq<0FUJU=G8NbJRI}tO4mKCo1^88R+#lff+Lu`>N9BilReq>f z%NFYWfavR&SmpQ0@y-C(^R%Atl>XB~S1$%A{w2Z70sfDIcLewog6sK01NK}s2^UMI(dOlwGxOdx*ubBq7<4fg{-j1)0hTe{^M+|Pq*W(7a#XmyRMyJ& z8@-IoyBi_Ld|`9b{L5PAE?VpyHy)Y;N8_}P>qhAt(Li*x=G-M>{nd(gk7 zTIwk?BRH^+OexT!rpxBfnTI9SZOg>d=E_yw?K3X8^orB4@_OlYc2Ki-WBQP`wK-R} zcQ5ToU4eQ(nq~xZNUiO@y77RXG&95V-DjqqMmvR>%3NNG$A(@-CkZ(#Gh^(g=Y-5Q z%doQP)^=f-Re0Rg29=y_%Duvqnu-$_p4!`-)5|p~EcNDT=3O+=%$Ajbi_f&ytP9R+ zm!7TxvKieG8_}H7L(B?vX;b)AD_cLC>~t$Yj8fcfIzy_QaAy63{m^;d%%Ey_n^L}; z+m@pe(~SoaCz^gbVxufxc$ssM>6~Z2Ru`J;;&SPlZo1N3b^wQ(@WEN>P!quK=1_Bn zo61>+WmnHw+6b?j%VwP6d~5!`{cKJ>oa-#A!_IR(_WELF9xhud!pCt$46j8iLb>87 zI~b8AUFuV~emW5UsR4b+e;@dXl>@pixtJ`9!7L8Tsl}-m`f)HkreCkeHCFMV{!!qM z>0c*Hes&2X^&f^`sDA>Cis@Irhg7k|q5dPlAJgAF-7~BcKI%tPSLxrKQ~$S0y)6=c zjY9qOks8y#Q}j0pBlVBMFD(Bza`Zng`a^x;@mF&6kC&SUZD;Bq6Vd=ONBk!M3#{=WcStp3ZQU+)`P{@39b>gW5dnEq!(|5a8w z(xHAne~Rhv68*OQc^?|;FXXg;892ki%Kw`j{o5nuKML|f{eKF67B#H@1)_g9jW8iB z|J!r)?-u=f-^==+h+nAxww(Sq8#u#bK1%;X{Ws_IztU-*#kN21>qGs23M^KBZRmrI z|F?rb*8a_+zZLlmEI*%Bh58p@QjF)iGDl(a@B6A|1&w~pI*^_u<^G!=lru+9*)@gZ*oNcE)*zM|Idj2 z@iGpy0>bit4*;>U5=h)7`fd5AATKQcO*ko0f4GlT3C9O=^;qL>*cY>ZyeR4j_(S_w zfj?&dZn58vpJ@^MKY)6Q>0c-M-ToS5L#Y4#IsK1H^=@bg@3W=R}mrqrX2hCNyW7aBkkuUQE2~TdGp^m&)6mW8io4*F=zf; zEDr%~|L2q(>R+ET{vHzjc0USj2=(8VGyb|n|8CR|1Iy1TA=JMI7^_&Od!&3Q%7D;y zjVZ1PiJwDEo62&m(c-gxs>k#ncBxSR&!zu_E4J%-vP3vMXn#G__$A>F?Vl_UmzB;- z^JUdEW7(Mt)3xvpjs(_Y>?tT*a>Zs{dbrvHUXJkn&-xJjCCjfW)L_ z(0C4%Yue}d|4vn4LBpr;zsvj)6f@}({_R1ZJkr_5t48u(Kr2HU!w3uHQoB%K@)Ix;I9wA{}jGNC&Jec zeV5XQlll_v5&wD}SVl!Zm3Yrq;Y$>A%WU-Pz9}e!wtX4>;U&mW-=OR#D5Llb^}cS< z_2BD;K43FHub2jY@BTvjVLyEUe(*u>FZ53J3HlE;nZMBYc)y?U$LD>5+Pq^&cweGe zdXDSt4U;90b%8#f`Zetlzov?zF5th*`tAJ6<`>2!!>_^@RfR85j1Bmu;ggDuJ*cNq z@aMPt2=5PcI(!9|pr-`CfF1Cu(|IX=?}2}x_uqN$wdW_pwm+#K%3s5;P|OeIacEoW zrLWHy;Un}V`25=kpMS0JDWrb?Xaj$(@IzFBucaG5<$Y^8zeSTdhL456o@3zKvmSmi zCvEvTd>X+=)G&F_#dFBw56*rv>T6I8ttTM_A9M>XT4wM6i{+;O zQ|~*}mK)=wZtp^0&KFru_%x(1wO4QX^5$XmjnJp-F=(^mV0p(W^!o&Vm;=WpJD!DK zHQ$c4XvZ3~<1t(CjfQO_@MF2>z~-NzOi!bIUA@4k-VKO>)jg_=)`?>gsE# zLthT>vyOg0cgY<7lpDMB;phD&mEo6Z5P9qeT zdn4d;?=bk@8wsD8hi`uMj$}g}`UdNeZSrE_aQMqS4C80SmOFoQ#rJ-N`hEdzao2Ay z`QE@ClN)<~Gyi*AJ~FxSPWZ)o3)=2kjGedDOuhDJXyZ?RYI5Vi-%oDb@{P%jJ#eq^ zBxFALy~&NV?-8WwOP4nLHaISAgCY1>{lXcr;kXeScEiu*11Bc%Z^(S_XK~2+&N>c# z5`HShuQuE5hnSa0=jz$}N88wgw)=jHPXxW6li6+!=$C9$JQH8!`RH#}{AQtjn9p`C z!>``vJ6alP?;5lx{D2<08D)>z-v6upXX3eE-HY%=>202zj-66^9-tk*&8I+zo;%of zdlz1Swm2VcG9PU-4{gLTblzsPnHxX*=X&4R72{_v+DzuWm(V^hV~jt5I_Ej+qZR#} zdb9F906%urtv)F+56<3{jurMz@3XuW^MJ2g?XSKLIS+meyB3GnH6ZL!pI zSwl_lv6Fj}>z{>R&*w1LZ<&w`kA83A^3K~o_=#Tlnrni8+&eEyhUs&z_cHjHL;KPO z&a*FFc^+)%7=LsC`egi9;w&Tb5?-6zfbm!nf?J4$_e(a&Ep`fp&qDN?UkUgg!iLfI z0O=!wo>J4;6H2U)`$pbdtnJHuiZvi#_p!8ET2I+z{brSsKPUs^2~QjME9Sh4)ou)& zilu(KbiHkp)hD)fWv03PU%Cdj-_x>Pec6lj@;17*8%3WtCN00y!Hd}r8F1@qZ_Fp# z`1>Z@TUS^FPh!ofC$WG2@xRUkx$Z-G#Pjyl9MHentq=i{z`q&$@S73D`F7O@*RPQLio^NV(+AgA zkUSA~TAyY8lHcp-r^r!~xOSJLn9s7m!G&L~TUFzU776WSXMcEA=rdzJ%UCrrpJn5m z9QP-ZeYDT%<*4()wWp+GKFhxE>N&gWR6AdF7pfVq@)*Z_mVMUA8IzKsx?K2$lat{o z0TMBvWv96EW>>i?=U<$h46l?EUgi3EB<8d1+fGh3{d+MMYusBfFL|d?5c65~3i4w< z%f9O5hgaENSj=bH8Lr;4t8Tr1r|-O&$K*ZE&Nq31_}9Gx1Y$nR&H;U`TixMV+#HW2 z-_83~A0D^=F`s3ZxOR~jHy|DmhI3pO%;Ih>!4bYF}`0zub!@Lhb2{%bk*bM0S@{-T_A zd3O%(t?<66xJE_;%yEI`usG|DfqRlq^GWxw=T*{MTx}%%OhaEMY0_J~UU1Uebt&>n z-|cy}c*)SumNcVjlBRr%>x{~^uNNBnlBBs8`XYlXJ@JbTt}`m_oMUh;3-wyOEHsp} zz|c2Kn)YxG)Sxz#{!#@IpDStN3k|L^iT{bgI}E+*BGhB>w@aFl)_yx;ak@SuH zLm+PDcr-~^F1`#31M$m45XY>~xdylW(Bj%3LOZoxh}(K7i_APbsds*kUW?oQu*lFi z8TnTjT$ymu#UhOA}UuEQQeXfS(lA!%pDu}q-;EN63WAJwvywBk8H27A7+jg|| zY|C|b4*ht+wY;jLP7+#P#Y>W4x!$E9;&}$Q~7KglVWZxP5onVDKYS>db!1Inv-whF<4JLTW$hk2drjhQ8C_>kNLa!FvsUoxwL5 z{8)nz7#wTO(y-m&Q&KcZb{hO7gYPnUgTZ$je7V8*8GMDoHOYFIg9Ah^s7%Gj3f?TS z;`+pAU4Wk`#~LZU$_eE+3SlT;uPs9P7YKd7#42B}b#?~0j*UG5e!U#){Hb!@CwN&Z zMDe=>?+EaZ3*HytpAvj~fPYT#p#azVv_4JdfL81Cc;TaO3p-wB8r+VTs|;?(%SMCS z@uKrK<=gS{xS_Y>HyYgb^WVjH$!SKu)+hC9T`_yM zR3dSEzq8!nI=7R4z~I_viSIGEy?#*NPn2)x;d2Y*^7Wv7+yUZ?B-_u;ZQyQ;x^Xu$ z&#hRL_|v-im+Z6T&ICA0l2NWdiAOmsV5cZ`-IKE zvTZhS!E%2O*BC!ehjNNsWJq0}}>bN22COoQlv*gC9rdcdl$( zZu-fAoQ!1sxUx6>!F-7r&lc?bzZaJvt|^vX?Yxm-GGIy8bl$8!GBQ^<6%A{9(&{DG zfXg>{yuVa5bjVtn8Er7r`XRT?${O)^aRlP)K%9W6*P8aFYgfbL(DL>+xJ6pso>Mz6 zCzxj)M$2TP&1k%X4nGc8EQ{A%t;Bg9;ctlOD_p_d=E*iQKV!}~zjYUDf4z?g%NrhZZ4R-r=+US&#iz8LS^hEjh5GSb`KW$O!Vu0m6ukn z|9ND@^!JGVCSjz0-hYMqPs?fl2H*?_D?jOC`gcak&wI{L{~0JJiyF>fdcX7-jWB__ zY?uM&nErjDe~%Ee{1fpD^l2Ux891CYzm z>i)C8P(SY(W96?u(epG3E6dMSB%%I&V2|($pWF@{bzq-RtnUEpIA9Xe4;eX z$7(;z&r?!Z{`Z49rvFjVZ`aLHVyOSU0Em^DX+p;|e^8=u1nQrHU#PzY%rX5MwZm z^uLKGTLfK?;EytXJ^mIFG5tfLzlXvRSbx*;3-wP!KOu>IriH^~v79)*!UGdToZ}(f z1%Oy+f4w|J+-Z23RQ(EH2j-alt*3a3Rw1PQd`_qQdR>A&mr?ygqTj9;q$uTQn&HPe z`UgdSGYf}6{cplg`Bnel03(T>Cy;cZalDUr$gxHuF0H>B6kaiGWE~YP$=S+p`$D-7^=a&Ld1SdoPdLvfJ&mK4yzAFUwcWXKm9x#wbT!$?av$?AAPQ_m?*R8v87N zbxkeWrGR!Bfp$5}wF~!6zJNO4i#mT1>6gUz;Xglr-%{9fxwDD;Q0q|VN4b5{&tRXY z?m=fA_G2&bm#~lZLAM9>7|Mz0rOE$^H5)N(Vx#l{c*47w+2|B82)`r(U&mI^sPsX;okSxh%s#YaPHWE z>A&yih+${ltGE2a<`+@-dl%Na`sV)nLDVUIo8W!+wii*a{eNEG$1>@DR_&wQZ(1`k z^lx$=W;XULJnAP&2(%d`a}6 z-%)3Ox<}gYJuaokN2Bjfn*KEU>@%=~wD89;9kw0BFNNO&yRU`g?@?D@uijGWpMtii z9jcG=J8GRDiRmcVwxL4N>7>3FFpjXd`9HmnlS$aO9QrsZv#)=nWqXJCI5`#NX+=4; z{AKiW%;SAi&|lcztcSAe7w9LT!?|V~G5(%HduksUMEm9PO?7>bZR>a~Uy`24a2UqJNav5^ zDD<~U{eExxuQ488!5mjRzC7&r?9)%oBsX8Z4Brd;FqaQw{QL^zhjm_pZ-kG+&iAML z>%Cu&R?K;RKmSqbetyn%ub}V#i|fCXdpzc&z7j(J z0 zyf(H0=aGsKT*6}rRtB8YD+12#6`@#h>f7)DX$C}kBB_?oN3;;*2QB_XtjP8{t7mJ z((V5*)MI0O>teGno-*9rEFBBi>n<>^6RefUym2!ZRP6JwEsvc%bAb~DA-uVoC-e__ z`a|~jaI5ew@_gPeg7b9%=MbePsPKF69}+t4%d|UuM@dZIo9Q{G0oai6x_4=T--=pn z%6Dp>@Os9|piusq;4cX_f^z&`|4M%kPi7nYS*O&wNO8a$Q$9^fQFbvDNAQMxecO9Wic?u^`8qWlV!U~uxVM{Wj+_gPr@@<^}QxP39rY)hY`u4`$%{a^wm$AvDX9_ zK-Tww8=I~qqzSxHg%RqOM=y=v}V7C#JZz*9i_kDaBnsz|nwvMtgFKYn%TBgRwR_CB;<^ zftb&O1}8^eOn|19ga{vW_Gh?9{eR5o!5h%0YRy&VL&C7m$qBDMu@AuMePb%t^+h=< zxVQ3YmP`EF)pK@L>gFcoT;t?txaErZJn+6Eva4BCmkWRDVh-gqX-dmVk&50zoL!+Did8Q$e^dV;SEy*QkJn$Ym1 zBsL?~xmWWTb3btmKNAy04F4p?M-2Ze=qI>UYF@g&ySyhy{$JpH5tGvg(_=V>T@;_1 zgP)CgJ0@pq4*i}Sd-z?im>fLgkK*siskbw8wU7PmVpK z(63_hf1E=b*qLj2l{9fasMqkgB#2u%dkt>sb!{~1FIORm z8*t1(+}i0;U!P~{0b+DF7g(Pb*Xwb%*V#hDXso13Z}IVhll~k@Gpds`=`CI_IO*Ra zX-3COn)DVg2~PUAN}AC$Nt52<4T7^B7fG6t;;f%53_erR#I3J|*@9E=97EqIY3j9j zlaX_!q1XOHdlnm9OEg*7+Jj*xBaBW z(A)NHHMovh?I$Nop7uTMCyJ|WELWS6(3X?cORhjBNc_dL2`=U)v(2xAX9N zkx6=s_vhe`mhFDQ@MA_ptMkGe^>l>Lji0t63#UP=1Gk zh(}188n6k9e9jA{QdONwGBzPz~J_}z184vBcX-fR)m64p>0)`??Gr=f2 zdH$uBU%tS3rdYW~-BPr7z)3~h z3gLG?J;a}d&Y-B$gL$}cWy<^o#l2pz(`FtnVCmdNi#=efB;Uma*(>K#b#Y~w5o+&C#`#y$W<4?RO@f$ z3Io0=oGXm~qYg3F{Q(?e;97y-0hUV$y>f7Ims|`zg?t-uxl$2$y-jRn1)3z~;8+j! zK30$4kHmrapHxDLL;m*yCsvkxjUE@D7vvdA6@HDV%Le+ii0R*2@>F`?PyM6t3-wP$$BF50mQLB~#iakCe(ouc>EAxZv-Alk z^^d_X)L(+0nEtJz{~_VmDAa!(=wkYtrh1Nb!btr`;1}wrPm`GbMWSet@M{$6r;oar z{z1{-B#hM0)ik00JfA27qA1iC9_RT)DW2#R*BkvuM)Y5pQ~wViqW*a~^T*2U#NdYA+De6=NRtxQTiY1?*Mx6O)c z{^dfb^dhFJ|2Km_rhljCuQ&SHB~+f`N9XA87Q%B?vBY8dC*@ zLsHJqHmH8Z{t<~-{na;kiXP#o{apQ`{91oEAU~#m7cX`Ybo~3Hj9-th2XjpSCV5D@ zP6(-=b6KeW*&O{l<;2m0^Meh_uNa@##`KS$?kV(nI`y-SlwZrwcP=bHZL^_?7dr?$ ze3br^mOEm*PinJ$!>!o!j4BwO zTugSn;QShV-T4eqTG?M*w;TMYz{f=izfq%-9rVLMjK`DZn7$TXy0Qj)iM_9dVzInq z@?pvKQ}8|c7vPU$s8E_!*;rAa)IjA=5pZ9Wb9Icn$(d8W__!@z&*B9%1E~`1L_gFMJUu$p72ifHgDk(M$M5+@yKuQc-xTK~!Q_vZ zeE3$NExIq<+D88v;Wy@o;1A;^*ya7K6tMT7{!b2vuZ)q-Hk>53vA@!`R_y&&oBbYe zuYa&M8OC?gw$aDIs8K)s#J926`_tEUG)^uRzJJOCM}M+-ShC@M_%~V5+1Yqk&6tZW z?mVUOYromQ2-mi+xy@gO4os5= zgy|?Zbydx`;rta$nF-GiHekxE2)G2O2s+0pD5r8gtayJ(Fucc+Q%6eA`&Jw5drsmq z)moCuG#^;DtXb{frKJbyW9t-=N1$uE`Ais|aNAd2)7_D*Xj_Meqt~zH_v{^M`e3wD zOI5vUz5Sv05C>*dAO08Iv)X`C>N&WZCDwh1eh=VP;U2(wQY&&<;MN*17R(I_q?xxo zpqq)~9>HE=Z1;zb{FwU^bS?Ho$_~*V=$^=J!sFys+O{aPZAfT!+|Z7_5lo-uX}=N#Cn;DNtIze|5Uere;b=^b#o*6uM%3-JsVh;U`}@Qd(X9dE4DF$hq81Hfw|lO zS{=A|^0n+`EJK9--gCEz{Jxv0!r97a#`ZFP7ZaV``$(G^zU)MVvzpI~eRp}OlY9VH)T?Ofn<$Y_12$d!Ork3mLy+C zeyzdX_yzV)PJT5##TEQ1oyjz;b#`j6%6g$ zA+}d?x|74FpFZgPaKDq2;hMkE;e1+I9b$VNKj`TBbg?=VO#N%_`y9Pmp=gqDk7MPR zb$lM5F(ygLADI73kgjg^BzYP2AHy%s!QTw|G5UYQIEvv@bM!)dl>Qw#dcTu{vnFGD zKbK?Ax*YsnIdX2y!Jo>p=dW_)-w!!Qn$@OzaLk~#b1m&`54nHs`CMbpXE_@5I)d*4 zEUrC7>5=V1Nn)i}yg_j4<#SmLjglbFX9yaaB%$&ZUmyvUuee^XP|n#3nmClB^IRxL z=Pj-UR@*4%RFOsb=NP$4L!8g6HK_f>-=ZMmMUp0duECcX+^(VPHu#?y`W}PZcGP(> zEN`#ShvmInaHZEXM_)j%_$H&*w&ON~TYI(#^5rny%N5!)7|^TUM+H}U#UB%#^=a)H zGPvzm(+qCy)c&dUAY^H~t6s%tNUC49d57 zo#1MZ=G7be8AvN$5}bP9CTT{tpO+1;k z+PT-@)=qt3Kzcjx6$8C;m_8>7?W`99&gXNL7_rK!0gh8>8kC;6z3b8Wfw=OLsZltI zk4dFu-w7tJa}~1}8+!Zfro-TMl4i8d;Pz^;*Wi30t6`HQsF&|_H4I3C_!I>ZZ#THk zjf8d@{A5Wp+GTJ)Gz$ae+j*uz2o%>gZVqrA*T)Oawdb~7nhb8+`X z8{D>w)&uq0cF}%I+_uX;BgeMOSkN($-nL80;I>_KPZ;T^cvkn{YUpjdbQ|2Z%fkk* zXcxcAan-8jEp1D$U)zaKjJ2=qUcIX8ro^tocZ)E)NENKLPoMu)FSR#IMY+JTb0xmR zsNZP}^0>6NCHFIpsg7)|yjg{r=JL^^`Ocyzu`A3iWw<*0&^~Q=API@CK=y0Hv$d