From d02751ee080cdbf7fc066477ad623e27e38f8be5 Mon Sep 17 00:00:00 2001 From: Cory McWilliams Date: Sat, 25 Nov 2023 17:30:55 +0000 Subject: [PATCH] Android OpenSSL => 3.2.0. git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4643 ed5197a5-7fde-0310-b194-c3ffbd925b24 --- .../usr/local/include/crypto/aes_platform.h | 33 +- .../arm64-v8a/usr/local/include/crypto/asn1.h | 12 +- .../usr/local/include/crypto/bioerr.h | 2 +- .../arm64-v8a/usr/local/include/crypto/bn.h | 9 + .../usr/local/include/crypto/cmserr.h | 2 +- .../usr/local/include/crypto/context.h | 6 + .../usr/local/include/crypto/decoder.h | 12 +- .../usr/local/include/crypto/dherr.h | 2 +- .../arm64-v8a/usr/local/include/crypto/dsa.h | 4 +- .../arm64-v8a/usr/local/include/crypto/ec.h | 8 +- .../arm64-v8a/usr/local/include/crypto/ecx.h | 34 +- .../usr/local/include/crypto/encoder.h | 2 +- .../arm64-v8a/usr/local/include/crypto/evp.h | 28 +- .../usr/local/include/crypto/evperr.h | 2 +- .../usr/local/include/crypto/md32_common.h | 96 +- .../usr/local/include/crypto/modes.h | 12 + .../usr/local/include/crypto/pkcs12err.h | 2 +- .../usr/local/include/crypto/punycode.h | 4 +- .../arm64-v8a/usr/local/include/crypto/rand.h | 11 + .../usr/local/include/crypto/riscv_arch.h | 7 +- .../arm64-v8a/usr/local/include/crypto/rsa.h | 8 +- .../arm64-v8a/usr/local/include/crypto/sha.h | 3 +- .../usr/local/include/crypto/sm4_platform.h | 40 +- .../usr/local/include/crypto/store.h | 2 +- .../arm64-v8a/usr/local/include/crypto/x509.h | 8 +- .../usr/local/include/crypto/x509err.h | 2 +- .../usr/local/include/internal/asn1.h | 2 + .../usr/local/include/internal/bio.h | 10 + .../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 | 2 + .../usr/local/include/internal/cryptlib.h | 93 +- .../usr/local/include/internal/der.h | 76 +- .../include/internal/deterministic_nonce.h | 24 + .../usr/local/include/internal/e_os.h | 58 +- .../usr/local/include/internal/endian.h | 4 +- .../usr/local/include/internal/event_queue.h | 163 +++ .../usr/local/include/internal/ffc.h | 11 +- .../usr/local/include/internal/hpke_util.h | 100 ++ .../usr/local/include/internal/ktls.h | 26 +- .../usr/local/include/internal/list.h | 169 ++++ .../usr/local/include/internal/namemap.h | 2 +- .../usr/local/include/internal/numbers.h | 27 +- .../usr/local/include/internal/packet.h | 4 +- .../usr/local/include/internal/packet_quic.h | 150 +++ .../local/include/internal/param_build_set.h | 7 +- .../usr/local/include/internal/param_names.h | 376 +++++++ .../local/include/internal/param_names.h.in | 18 + .../usr/local/include/internal/params.h | 38 + .../local/include/internal/priority_queue.h | 88 ++ .../usr/local/include/internal/property.h | 2 +- .../usr/local/include/internal/provider.h | 4 +- .../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 | 191 +++- .../usr/local/include/internal/ring_buf.h | 277 +++++ .../usr/local/include/internal/safe_math.h | 443 ++++++++ .../usr/local/include/internal/sockets.h | 33 +- .../usr/local/include/internal/ssl.h | 24 + .../usr/local/include/internal/ssl3_cbc.h | 40 + .../usr/local/include/internal/statem.h | 171 ++++ .../usr/local/include/internal/thread.h | 39 + .../usr/local/include/internal/thread_arch.h | 127 +++ .../usr/local/include/internal/time.h | 242 +++++ .../usr/local/include/internal/tlsgroups.h | 10 + .../usr/local/include/internal/tsan_assist.h | 137 +-- .../usr/local/include/internal/uint_set.h | 63 ++ .../usr/local/include/openssl/asn1.h | 6 +- .../usr/local/include/openssl/asn1.h.in | 6 +- .../usr/local/include/openssl/async.h | 10 +- .../arm64-v8a/usr/local/include/openssl/bio.h | 143 ++- .../usr/local/include/openssl/bio.h.in | 143 ++- .../usr/local/include/openssl/bioerr.h | 9 +- .../arm64-v8a/usr/local/include/openssl/bn.h | 6 + .../arm64-v8a/usr/local/include/openssl/cmp.h | 42 +- .../usr/local/include/openssl/cmp.h.in | 42 +- .../usr/local/include/openssl/cmperr.h | 4 + .../arm64-v8a/usr/local/include/openssl/cms.h | 35 +- .../usr/local/include/openssl/cms.h.in | 35 +- .../usr/local/include/openssl/cmserr.h | 1 + .../usr/local/include/openssl/comp.h | 9 +- .../usr/local/include/openssl/comperr.h | 7 + .../usr/local/include/openssl/conf.h | 2 +- .../usr/local/include/openssl/conf.h.in | 2 +- .../usr/local/include/openssl/configuration.h | 41 +- .../local/include/openssl/configuration.h.in | 6 + .../usr/local/include/openssl/core.h | 5 +- .../usr/local/include/openssl/core_dispatch.h | 24 + .../usr/local/include/openssl/core_names.h | 950 ++++++++---------- .../usr/local/include/openssl/core_names.h.in | 119 +++ .../usr/local/include/openssl/crmf.h | 10 +- .../usr/local/include/openssl/crmf.h.in | 10 +- .../usr/local/include/openssl/crypto.h | 5 +- .../usr/local/include/openssl/crypto.h.in | 5 +- .../arm64-v8a/usr/local/include/openssl/ct.h | 2 +- .../usr/local/include/openssl/ct.h.in | 2 +- .../arm64-v8a/usr/local/include/openssl/dh.h | 6 +- .../usr/local/include/openssl/dherr.h | 4 +- .../arm64-v8a/usr/local/include/openssl/dsa.h | 2 +- .../usr/local/include/openssl/e_os2.h | 4 +- .../usr/local/include/openssl/e_ostime.h | 30 + .../arm64-v8a/usr/local/include/openssl/ec.h | 22 +- .../arm64-v8a/usr/local/include/openssl/err.h | 9 +- .../usr/local/include/openssl/err.h.in | 9 +- .../arm64-v8a/usr/local/include/openssl/evp.h | 36 +- .../usr/local/include/openssl/evperr.h | 5 +- .../usr/local/include/openssl/hpke.h | 169 ++++ .../usr/local/include/openssl/http.h | 6 +- .../usr/local/include/openssl/lhash.h | 2 +- .../usr/local/include/openssl/lhash.h.in | 2 +- .../usr/local/include/openssl/macros.h | 3 +- .../usr/local/include/openssl/obj_mac.h | 349 ++++++- .../usr/local/include/openssl/opensslv.h | 12 +- .../arm64-v8a/usr/local/include/openssl/pem.h | 3 +- .../usr/local/include/openssl/pkcs12.h | 12 +- .../usr/local/include/openssl/pkcs12.h.in | 12 +- .../usr/local/include/openssl/pkcs12err.h | 3 +- .../usr/local/include/openssl/pkcs7.h | 16 +- .../usr/local/include/openssl/pkcs7.h.in | 16 +- .../usr/local/include/openssl/prov_ssl.h | 6 +- .../usr/local/include/openssl/proverr.h | 4 + .../usr/local/include/openssl/provider.h | 10 +- .../usr/local/include/openssl/quic.h | 37 + .../usr/local/include/openssl/rand.h | 2 +- .../arm64-v8a/usr/local/include/openssl/rsa.h | 7 +- .../arm64-v8a/usr/local/include/openssl/sha.h | 3 +- .../usr/local/include/openssl/srtp.h | 28 +- .../arm64-v8a/usr/local/include/openssl/ssl.h | 195 +++- .../usr/local/include/openssl/ssl.h.in | 195 +++- .../usr/local/include/openssl/ssl3.h | 12 +- .../usr/local/include/openssl/sslerr.h | 26 +- .../usr/local/include/openssl/store.h | 12 +- .../usr/local/include/openssl/thread.h | 31 + .../usr/local/include/openssl/tls1.h | 34 +- .../usr/local/include/openssl/trace.h | 10 +- .../arm64-v8a/usr/local/include/openssl/ts.h | 2 +- .../usr/local/include/openssl/types.h | 2 +- .../usr/local/include/openssl/x509.h | 15 +- .../usr/local/include/openssl/x509.h.in | 15 +- .../usr/local/include/openssl/x509_vfy.h | 119 +-- .../usr/local/include/openssl/x509_vfy.h.in | 119 +-- .../usr/local/include/openssl/x509err.h | 2 +- .../usr/local/include/openssl/x509v3.h | 3 +- .../usr/local/include/openssl/x509v3.h.in | 3 +- .../usr/local/include/openssl/x509v3err.h | 5 +- .../arm64-v8a/usr/local/lib/libcrypto.a | Bin 10068218 -> 10406072 bytes .../android/arm64-v8a/usr/local/lib/libssl.a | Bin 1261944 -> 1370834 bytes .../usr/local/include/crypto/aes_platform.h | 33 +- .../usr/local/include/crypto/asn1.h | 12 +- .../usr/local/include/crypto/bioerr.h | 2 +- .../armeabi-v7a/usr/local/include/crypto/bn.h | 9 + .../usr/local/include/crypto/cmserr.h | 2 +- .../usr/local/include/crypto/context.h | 6 + .../usr/local/include/crypto/decoder.h | 12 +- .../usr/local/include/crypto/dherr.h | 2 +- .../usr/local/include/crypto/dsa.h | 4 +- .../armeabi-v7a/usr/local/include/crypto/ec.h | 8 +- .../usr/local/include/crypto/ecx.h | 34 +- .../usr/local/include/crypto/encoder.h | 2 +- .../usr/local/include/crypto/evp.h | 28 +- .../usr/local/include/crypto/evperr.h | 2 +- .../usr/local/include/crypto/md32_common.h | 96 +- .../usr/local/include/crypto/modes.h | 12 + .../usr/local/include/crypto/pkcs12err.h | 2 +- .../usr/local/include/crypto/punycode.h | 4 +- .../usr/local/include/crypto/rand.h | 11 + .../usr/local/include/crypto/riscv_arch.h | 7 +- .../usr/local/include/crypto/rsa.h | 8 +- .../usr/local/include/crypto/sha.h | 3 +- .../usr/local/include/crypto/sm4_platform.h | 40 +- .../usr/local/include/crypto/store.h | 2 +- .../usr/local/include/crypto/x509.h | 8 +- .../usr/local/include/crypto/x509err.h | 2 +- .../usr/local/include/internal/asn1.h | 2 + .../usr/local/include/internal/bio.h | 10 + .../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 | 2 + .../usr/local/include/internal/cryptlib.h | 93 +- .../usr/local/include/internal/der.h | 76 +- .../include/internal/deterministic_nonce.h | 24 + .../usr/local/include/internal/e_os.h | 58 +- .../usr/local/include/internal/endian.h | 4 +- .../usr/local/include/internal/event_queue.h | 163 +++ .../usr/local/include/internal/ffc.h | 11 +- .../usr/local/include/internal/hpke_util.h | 100 ++ .../usr/local/include/internal/ktls.h | 26 +- .../usr/local/include/internal/list.h | 169 ++++ .../usr/local/include/internal/namemap.h | 2 +- .../usr/local/include/internal/numbers.h | 27 +- .../usr/local/include/internal/packet.h | 4 +- .../usr/local/include/internal/packet_quic.h | 150 +++ .../local/include/internal/param_build_set.h | 7 +- .../usr/local/include/internal/param_names.h | 376 +++++++ .../local/include/internal/param_names.h.in | 18 + .../usr/local/include/internal/params.h | 38 + .../local/include/internal/priority_queue.h | 88 ++ .../usr/local/include/internal/property.h | 2 +- .../usr/local/include/internal/provider.h | 4 +- .../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 | 191 +++- .../usr/local/include/internal/ring_buf.h | 277 +++++ .../usr/local/include/internal/safe_math.h | 443 ++++++++ .../usr/local/include/internal/sockets.h | 33 +- .../usr/local/include/internal/ssl.h | 24 + .../usr/local/include/internal/ssl3_cbc.h | 40 + .../usr/local/include/internal/statem.h | 171 ++++ .../usr/local/include/internal/thread.h | 39 + .../usr/local/include/internal/thread_arch.h | 127 +++ .../usr/local/include/internal/time.h | 242 +++++ .../usr/local/include/internal/tlsgroups.h | 10 + .../usr/local/include/internal/tsan_assist.h | 137 +-- .../usr/local/include/internal/uint_set.h | 63 ++ .../usr/local/include/openssl/asn1.h | 6 +- .../usr/local/include/openssl/asn1.h.in | 6 +- .../usr/local/include/openssl/async.h | 10 +- .../usr/local/include/openssl/bio.h | 143 ++- .../usr/local/include/openssl/bio.h.in | 143 ++- .../usr/local/include/openssl/bioerr.h | 9 +- .../usr/local/include/openssl/bn.h | 6 + .../usr/local/include/openssl/cmp.h | 42 +- .../usr/local/include/openssl/cmp.h.in | 42 +- .../usr/local/include/openssl/cmperr.h | 4 + .../usr/local/include/openssl/cms.h | 35 +- .../usr/local/include/openssl/cms.h.in | 35 +- .../usr/local/include/openssl/cmserr.h | 1 + .../usr/local/include/openssl/comp.h | 9 +- .../usr/local/include/openssl/comperr.h | 7 + .../usr/local/include/openssl/conf.h | 2 +- .../usr/local/include/openssl/conf.h.in | 2 +- .../usr/local/include/openssl/configuration.h | 41 +- .../local/include/openssl/configuration.h.in | 6 + .../usr/local/include/openssl/core.h | 5 +- .../usr/local/include/openssl/core_dispatch.h | 24 + .../usr/local/include/openssl/core_names.h | 950 ++++++++---------- .../usr/local/include/openssl/core_names.h.in | 119 +++ .../usr/local/include/openssl/crmf.h | 10 +- .../usr/local/include/openssl/crmf.h.in | 10 +- .../usr/local/include/openssl/crypto.h | 5 +- .../usr/local/include/openssl/crypto.h.in | 5 +- .../usr/local/include/openssl/ct.h | 2 +- .../usr/local/include/openssl/ct.h.in | 2 +- .../usr/local/include/openssl/dh.h | 6 +- .../usr/local/include/openssl/dherr.h | 4 +- .../usr/local/include/openssl/dsa.h | 2 +- .../usr/local/include/openssl/e_os2.h | 4 +- .../usr/local/include/openssl/e_ostime.h | 30 + .../usr/local/include/openssl/ec.h | 22 +- .../usr/local/include/openssl/err.h | 9 +- .../usr/local/include/openssl/err.h.in | 9 +- .../usr/local/include/openssl/evp.h | 36 +- .../usr/local/include/openssl/evperr.h | 5 +- .../usr/local/include/openssl/hpke.h | 169 ++++ .../usr/local/include/openssl/http.h | 6 +- .../usr/local/include/openssl/lhash.h | 2 +- .../usr/local/include/openssl/lhash.h.in | 2 +- .../usr/local/include/openssl/macros.h | 3 +- .../usr/local/include/openssl/obj_mac.h | 349 ++++++- .../usr/local/include/openssl/opensslv.h | 12 +- .../usr/local/include/openssl/pem.h | 3 +- .../usr/local/include/openssl/pkcs12.h | 12 +- .../usr/local/include/openssl/pkcs12.h.in | 12 +- .../usr/local/include/openssl/pkcs12err.h | 3 +- .../usr/local/include/openssl/pkcs7.h | 16 +- .../usr/local/include/openssl/pkcs7.h.in | 16 +- .../usr/local/include/openssl/prov_ssl.h | 6 +- .../usr/local/include/openssl/proverr.h | 4 + .../usr/local/include/openssl/provider.h | 10 +- .../usr/local/include/openssl/quic.h | 37 + .../usr/local/include/openssl/rand.h | 2 +- .../usr/local/include/openssl/rsa.h | 7 +- .../usr/local/include/openssl/sha.h | 3 +- .../usr/local/include/openssl/srtp.h | 28 +- .../usr/local/include/openssl/ssl.h | 195 +++- .../usr/local/include/openssl/ssl.h.in | 195 +++- .../usr/local/include/openssl/ssl3.h | 12 +- .../usr/local/include/openssl/sslerr.h | 26 +- .../usr/local/include/openssl/store.h | 12 +- .../usr/local/include/openssl/thread.h | 31 + .../usr/local/include/openssl/tls1.h | 34 +- .../usr/local/include/openssl/trace.h | 10 +- .../usr/local/include/openssl/ts.h | 2 +- .../usr/local/include/openssl/types.h | 2 +- .../usr/local/include/openssl/x509.h | 15 +- .../usr/local/include/openssl/x509.h.in | 15 +- .../usr/local/include/openssl/x509_vfy.h | 119 +-- .../usr/local/include/openssl/x509_vfy.h.in | 119 +-- .../usr/local/include/openssl/x509err.h | 2 +- .../usr/local/include/openssl/x509v3.h | 3 +- .../usr/local/include/openssl/x509v3.h.in | 3 +- .../usr/local/include/openssl/x509v3err.h | 5 +- .../usr/local/include/crypto/aes_platform.h | 33 +- .../x86/usr/local/include/crypto/asn1.h | 12 +- .../x86/usr/local/include/crypto/bioerr.h | 2 +- .../android/x86/usr/local/include/crypto/bn.h | 9 + .../x86/usr/local/include/crypto/cmserr.h | 2 +- .../x86/usr/local/include/crypto/context.h | 6 + .../x86/usr/local/include/crypto/decoder.h | 12 +- .../x86/usr/local/include/crypto/dherr.h | 2 +- .../x86/usr/local/include/crypto/dsa.h | 4 +- .../android/x86/usr/local/include/crypto/ec.h | 8 +- .../x86/usr/local/include/crypto/ecx.h | 34 +- .../x86/usr/local/include/crypto/encoder.h | 2 +- .../x86/usr/local/include/crypto/evp.h | 28 +- .../x86/usr/local/include/crypto/evperr.h | 2 +- .../usr/local/include/crypto/md32_common.h | 96 +- .../x86/usr/local/include/crypto/modes.h | 12 + .../x86/usr/local/include/crypto/pkcs12err.h | 2 +- .../x86/usr/local/include/crypto/punycode.h | 4 +- .../x86/usr/local/include/crypto/rand.h | 11 + .../x86/usr/local/include/crypto/riscv_arch.h | 7 +- .../x86/usr/local/include/crypto/rsa.h | 8 +- .../x86/usr/local/include/crypto/sha.h | 3 +- .../usr/local/include/crypto/sm4_platform.h | 40 +- .../x86/usr/local/include/crypto/store.h | 2 +- .../x86/usr/local/include/crypto/x509.h | 8 +- .../x86/usr/local/include/crypto/x509err.h | 2 +- .../x86/usr/local/include/internal/asn1.h | 2 + .../x86/usr/local/include/internal/bio.h | 10 + .../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 | 2 + .../x86/usr/local/include/internal/cryptlib.h | 93 +- .../x86/usr/local/include/internal/der.h | 76 +- .../include/internal/deterministic_nonce.h | 24 + .../x86/usr/local/include/internal/e_os.h | 58 +- .../x86/usr/local/include/internal/endian.h | 4 +- .../usr/local/include/internal/event_queue.h | 163 +++ .../x86/usr/local/include/internal/ffc.h | 11 +- .../usr/local/include/internal/hpke_util.h | 100 ++ .../x86/usr/local/include/internal/ktls.h | 26 +- .../x86/usr/local/include/internal/list.h | 169 ++++ .../x86/usr/local/include/internal/namemap.h | 2 +- .../x86/usr/local/include/internal/numbers.h | 27 +- .../x86/usr/local/include/internal/packet.h | 4 +- .../usr/local/include/internal/packet_quic.h | 150 +++ .../local/include/internal/param_build_set.h | 7 +- .../usr/local/include/internal/param_names.h | 376 +++++++ .../local/include/internal/param_names.h.in | 18 + .../x86/usr/local/include/internal/params.h | 38 + .../local/include/internal/priority_queue.h | 88 ++ .../x86/usr/local/include/internal/property.h | 2 +- .../x86/usr/local/include/internal/provider.h | 4 +- .../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 | 191 +++- .../x86/usr/local/include/internal/ring_buf.h | 277 +++++ .../usr/local/include/internal/safe_math.h | 443 ++++++++ .../x86/usr/local/include/internal/sockets.h | 33 +- .../x86/usr/local/include/internal/ssl.h | 24 + .../x86/usr/local/include/internal/ssl3_cbc.h | 40 + .../x86/usr/local/include/internal/statem.h | 171 ++++ .../x86/usr/local/include/internal/thread.h | 39 + .../usr/local/include/internal/thread_arch.h | 127 +++ .../x86/usr/local/include/internal/time.h | 242 +++++ .../usr/local/include/internal/tlsgroups.h | 10 + .../usr/local/include/internal/tsan_assist.h | 137 +-- .../x86/usr/local/include/internal/uint_set.h | 63 ++ .../x86/usr/local/include/openssl/asn1.h | 6 +- .../x86/usr/local/include/openssl/asn1.h.in | 6 +- .../x86/usr/local/include/openssl/async.h | 10 +- .../x86/usr/local/include/openssl/bio.h | 143 ++- .../x86/usr/local/include/openssl/bio.h.in | 143 ++- .../x86/usr/local/include/openssl/bioerr.h | 9 +- .../x86/usr/local/include/openssl/bn.h | 6 + .../x86/usr/local/include/openssl/cmp.h | 42 +- .../x86/usr/local/include/openssl/cmp.h.in | 42 +- .../x86/usr/local/include/openssl/cmperr.h | 4 + .../x86/usr/local/include/openssl/cms.h | 35 +- .../x86/usr/local/include/openssl/cms.h.in | 35 +- .../x86/usr/local/include/openssl/cmserr.h | 1 + .../x86/usr/local/include/openssl/comp.h | 9 +- .../x86/usr/local/include/openssl/comperr.h | 7 + .../x86/usr/local/include/openssl/conf.h | 2 +- .../x86/usr/local/include/openssl/conf.h.in | 2 +- .../usr/local/include/openssl/configuration.h | 41 +- .../local/include/openssl/configuration.h.in | 6 + .../x86/usr/local/include/openssl/core.h | 5 +- .../usr/local/include/openssl/core_dispatch.h | 24 + .../usr/local/include/openssl/core_names.h | 950 ++++++++---------- .../usr/local/include/openssl/core_names.h.in | 119 +++ .../x86/usr/local/include/openssl/crmf.h | 10 +- .../x86/usr/local/include/openssl/crmf.h.in | 10 +- .../x86/usr/local/include/openssl/crypto.h | 5 +- .../x86/usr/local/include/openssl/crypto.h.in | 5 +- .../x86/usr/local/include/openssl/ct.h | 2 +- .../x86/usr/local/include/openssl/ct.h.in | 2 +- .../x86/usr/local/include/openssl/dh.h | 6 +- .../x86/usr/local/include/openssl/dherr.h | 4 +- .../x86/usr/local/include/openssl/dsa.h | 2 +- .../x86/usr/local/include/openssl/e_os2.h | 4 +- .../x86/usr/local/include/openssl/e_ostime.h | 30 + .../x86/usr/local/include/openssl/ec.h | 22 +- .../x86/usr/local/include/openssl/err.h | 9 +- .../x86/usr/local/include/openssl/err.h.in | 9 +- .../x86/usr/local/include/openssl/evp.h | 36 +- .../x86/usr/local/include/openssl/evperr.h | 5 +- .../x86/usr/local/include/openssl/hpke.h | 169 ++++ .../x86/usr/local/include/openssl/http.h | 6 +- .../x86/usr/local/include/openssl/lhash.h | 2 +- .../x86/usr/local/include/openssl/lhash.h.in | 2 +- .../x86/usr/local/include/openssl/macros.h | 3 +- .../x86/usr/local/include/openssl/obj_mac.h | 349 ++++++- .../x86/usr/local/include/openssl/opensslv.h | 12 +- .../x86/usr/local/include/openssl/pem.h | 3 +- .../x86/usr/local/include/openssl/pkcs12.h | 12 +- .../x86/usr/local/include/openssl/pkcs12.h.in | 12 +- .../x86/usr/local/include/openssl/pkcs12err.h | 3 +- .../x86/usr/local/include/openssl/pkcs7.h | 16 +- .../x86/usr/local/include/openssl/pkcs7.h.in | 16 +- .../x86/usr/local/include/openssl/prov_ssl.h | 6 +- .../x86/usr/local/include/openssl/proverr.h | 4 + .../x86/usr/local/include/openssl/provider.h | 10 +- .../x86/usr/local/include/openssl/quic.h | 37 + .../x86/usr/local/include/openssl/rand.h | 2 +- .../x86/usr/local/include/openssl/rsa.h | 7 +- .../x86/usr/local/include/openssl/sha.h | 3 +- .../x86/usr/local/include/openssl/srtp.h | 28 +- .../x86/usr/local/include/openssl/ssl.h | 195 +++- .../x86/usr/local/include/openssl/ssl.h.in | 195 +++- .../x86/usr/local/include/openssl/ssl3.h | 12 +- .../x86/usr/local/include/openssl/sslerr.h | 26 +- .../x86/usr/local/include/openssl/store.h | 12 +- .../x86/usr/local/include/openssl/thread.h | 31 + .../x86/usr/local/include/openssl/tls1.h | 34 +- .../x86/usr/local/include/openssl/trace.h | 10 +- .../x86/usr/local/include/openssl/ts.h | 2 +- .../x86/usr/local/include/openssl/types.h | 2 +- .../x86/usr/local/include/openssl/x509.h | 15 +- .../x86/usr/local/include/openssl/x509.h.in | 15 +- .../x86/usr/local/include/openssl/x509_vfy.h | 119 +-- .../usr/local/include/openssl/x509_vfy.h.in | 119 +-- .../x86/usr/local/include/openssl/x509err.h | 2 +- .../x86/usr/local/include/openssl/x509v3.h | 3 +- .../x86/usr/local/include/openssl/x509v3.h.in | 3 +- .../x86/usr/local/include/openssl/x509v3err.h | 5 +- .../usr/local/include/crypto/aes_platform.h | 33 +- .../x86_64/usr/local/include/crypto/asn1.h | 12 +- .../x86_64/usr/local/include/crypto/bioerr.h | 2 +- .../x86_64/usr/local/include/crypto/bn.h | 9 + .../x86_64/usr/local/include/crypto/cmserr.h | 2 +- .../x86_64/usr/local/include/crypto/context.h | 6 + .../x86_64/usr/local/include/crypto/decoder.h | 12 +- .../x86_64/usr/local/include/crypto/dherr.h | 2 +- .../x86_64/usr/local/include/crypto/dsa.h | 4 +- .../x86_64/usr/local/include/crypto/ec.h | 8 +- .../x86_64/usr/local/include/crypto/ecx.h | 34 +- .../x86_64/usr/local/include/crypto/encoder.h | 2 +- .../x86_64/usr/local/include/crypto/evp.h | 28 +- .../x86_64/usr/local/include/crypto/evperr.h | 2 +- .../usr/local/include/crypto/md32_common.h | 96 +- .../x86_64/usr/local/include/crypto/modes.h | 12 + .../usr/local/include/crypto/pkcs12err.h | 2 +- .../usr/local/include/crypto/punycode.h | 4 +- .../x86_64/usr/local/include/crypto/rand.h | 11 + .../usr/local/include/crypto/riscv_arch.h | 7 +- .../x86_64/usr/local/include/crypto/rsa.h | 8 +- .../x86_64/usr/local/include/crypto/sha.h | 3 +- .../usr/local/include/crypto/sm4_platform.h | 40 +- .../x86_64/usr/local/include/crypto/store.h | 2 +- .../x86_64/usr/local/include/crypto/x509.h | 8 +- .../x86_64/usr/local/include/crypto/x509err.h | 2 +- .../x86_64/usr/local/include/internal/asn1.h | 2 + .../x86_64/usr/local/include/internal/bio.h | 10 + .../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 | 2 + .../usr/local/include/internal/cryptlib.h | 93 +- .../x86_64/usr/local/include/internal/der.h | 76 +- .../include/internal/deterministic_nonce.h | 24 + .../x86_64/usr/local/include/internal/e_os.h | 58 +- .../usr/local/include/internal/endian.h | 4 +- .../usr/local/include/internal/event_queue.h | 163 +++ .../x86_64/usr/local/include/internal/ffc.h | 11 +- .../usr/local/include/internal/hpke_util.h | 100 ++ .../x86_64/usr/local/include/internal/ktls.h | 26 +- .../x86_64/usr/local/include/internal/list.h | 169 ++++ .../usr/local/include/internal/namemap.h | 2 +- .../usr/local/include/internal/numbers.h | 27 +- .../usr/local/include/internal/packet.h | 4 +- .../usr/local/include/internal/packet_quic.h | 150 +++ .../local/include/internal/param_build_set.h | 7 +- .../usr/local/include/internal/param_names.h | 376 +++++++ .../local/include/internal/param_names.h.in | 18 + .../usr/local/include/internal/params.h | 38 + .../local/include/internal/priority_queue.h | 88 ++ .../usr/local/include/internal/property.h | 2 +- .../usr/local/include/internal/provider.h | 4 +- .../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 | 191 +++- .../usr/local/include/internal/ring_buf.h | 277 +++++ .../usr/local/include/internal/safe_math.h | 443 ++++++++ .../usr/local/include/internal/sockets.h | 33 +- .../x86_64/usr/local/include/internal/ssl.h | 24 + .../usr/local/include/internal/ssl3_cbc.h | 40 + .../usr/local/include/internal/statem.h | 171 ++++ .../usr/local/include/internal/thread.h | 39 + .../usr/local/include/internal/thread_arch.h | 127 +++ .../x86_64/usr/local/include/internal/time.h | 242 +++++ .../usr/local/include/internal/tlsgroups.h | 10 + .../usr/local/include/internal/tsan_assist.h | 137 +-- .../usr/local/include/internal/uint_set.h | 63 ++ .../x86_64/usr/local/include/openssl/asn1.h | 6 +- .../usr/local/include/openssl/asn1.h.in | 6 +- .../x86_64/usr/local/include/openssl/async.h | 10 +- .../x86_64/usr/local/include/openssl/bio.h | 143 ++- .../x86_64/usr/local/include/openssl/bio.h.in | 143 ++- .../x86_64/usr/local/include/openssl/bioerr.h | 9 +- .../x86_64/usr/local/include/openssl/bn.h | 6 + .../x86_64/usr/local/include/openssl/cmp.h | 42 +- .../x86_64/usr/local/include/openssl/cmp.h.in | 42 +- .../x86_64/usr/local/include/openssl/cmperr.h | 4 + .../x86_64/usr/local/include/openssl/cms.h | 35 +- .../x86_64/usr/local/include/openssl/cms.h.in | 35 +- .../x86_64/usr/local/include/openssl/cmserr.h | 1 + .../x86_64/usr/local/include/openssl/comp.h | 9 +- .../usr/local/include/openssl/comperr.h | 7 + .../x86_64/usr/local/include/openssl/conf.h | 2 +- .../usr/local/include/openssl/conf.h.in | 2 +- .../usr/local/include/openssl/configuration.h | 41 +- .../local/include/openssl/configuration.h.in | 6 + .../x86_64/usr/local/include/openssl/core.h | 5 +- .../usr/local/include/openssl/core_dispatch.h | 24 + .../usr/local/include/openssl/core_names.h | 950 ++++++++---------- .../usr/local/include/openssl/core_names.h.in | 119 +++ .../x86_64/usr/local/include/openssl/crmf.h | 10 +- .../usr/local/include/openssl/crmf.h.in | 10 +- .../x86_64/usr/local/include/openssl/crypto.h | 5 +- .../usr/local/include/openssl/crypto.h.in | 5 +- .../x86_64/usr/local/include/openssl/ct.h | 2 +- .../x86_64/usr/local/include/openssl/ct.h.in | 2 +- .../x86_64/usr/local/include/openssl/dh.h | 6 +- .../x86_64/usr/local/include/openssl/dherr.h | 4 +- .../x86_64/usr/local/include/openssl/dsa.h | 2 +- .../x86_64/usr/local/include/openssl/e_os2.h | 4 +- .../usr/local/include/openssl/e_ostime.h | 30 + .../x86_64/usr/local/include/openssl/ec.h | 22 +- .../x86_64/usr/local/include/openssl/err.h | 9 +- .../x86_64/usr/local/include/openssl/err.h.in | 9 +- .../x86_64/usr/local/include/openssl/evp.h | 36 +- .../x86_64/usr/local/include/openssl/evperr.h | 5 +- .../x86_64/usr/local/include/openssl/hpke.h | 169 ++++ .../x86_64/usr/local/include/openssl/http.h | 6 +- .../x86_64/usr/local/include/openssl/lhash.h | 2 +- .../usr/local/include/openssl/lhash.h.in | 2 +- .../x86_64/usr/local/include/openssl/macros.h | 3 +- .../usr/local/include/openssl/obj_mac.h | 349 ++++++- .../usr/local/include/openssl/opensslv.h | 12 +- .../x86_64/usr/local/include/openssl/pem.h | 3 +- .../x86_64/usr/local/include/openssl/pkcs12.h | 12 +- .../usr/local/include/openssl/pkcs12.h.in | 12 +- .../usr/local/include/openssl/pkcs12err.h | 3 +- .../x86_64/usr/local/include/openssl/pkcs7.h | 16 +- .../usr/local/include/openssl/pkcs7.h.in | 16 +- .../usr/local/include/openssl/prov_ssl.h | 6 +- .../usr/local/include/openssl/proverr.h | 4 + .../usr/local/include/openssl/provider.h | 10 +- .../x86_64/usr/local/include/openssl/quic.h | 37 + .../x86_64/usr/local/include/openssl/rand.h | 2 +- .../x86_64/usr/local/include/openssl/rsa.h | 7 +- .../x86_64/usr/local/include/openssl/sha.h | 3 +- .../x86_64/usr/local/include/openssl/srtp.h | 28 +- .../x86_64/usr/local/include/openssl/ssl.h | 195 +++- .../x86_64/usr/local/include/openssl/ssl.h.in | 195 +++- .../x86_64/usr/local/include/openssl/ssl3.h | 12 +- .../x86_64/usr/local/include/openssl/sslerr.h | 26 +- .../x86_64/usr/local/include/openssl/store.h | 12 +- .../x86_64/usr/local/include/openssl/thread.h | 31 + .../x86_64/usr/local/include/openssl/tls1.h | 34 +- .../x86_64/usr/local/include/openssl/trace.h | 10 +- .../x86_64/usr/local/include/openssl/ts.h | 2 +- .../x86_64/usr/local/include/openssl/types.h | 2 +- .../x86_64/usr/local/include/openssl/x509.h | 15 +- .../usr/local/include/openssl/x509.h.in | 15 +- .../usr/local/include/openssl/x509_vfy.h | 119 +-- .../usr/local/include/openssl/x509_vfy.h.in | 119 +-- .../usr/local/include/openssl/x509err.h | 2 +- .../x86_64/usr/local/include/openssl/x509v3.h | 3 +- .../usr/local/include/openssl/x509v3.h.in | 3 +- .../usr/local/include/openssl/x509v3err.h | 5 +- .../android/x86_64/usr/local/lib/libcrypto.a | Bin 9504344 -> 9840926 bytes .../android/x86_64/usr/local/lib/libssl.a | Bin 1230184 -> 1337266 bytes tools/ssl-android | 2 +- 693 files changed, 54409 insertions(+), 5021 deletions(-) create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/bio_addr.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/bio_tfo.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/common.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/deterministic_nonce.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/event_queue.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/hpke_util.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/list.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/packet_quic.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/param_names.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/param_names.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/params.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/priority_queue.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_ackm.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_cc.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_cfq.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_channel.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_demux.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_error.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_fc.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_fifd.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_reactor.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_rx.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_tx.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_util.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_rx_depack.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_sf_list.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_ssl.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_statm.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_stream.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_stream_map.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_thread_assist.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_tls.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_tserver.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_txp.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_txpim.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_types.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_vlint.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_wire.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_wire_pkt.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/recordmethod.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/ring_buf.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/safe_math.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/ssl.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/ssl3_cbc.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/statem.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/thread.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/thread_arch.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/time.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/internal/uint_set.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_names.h.in create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_ostime.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/hpke.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/quic.h create mode 100644 deps/openssl/android/arm64-v8a/usr/local/include/openssl/thread.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio_addr.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio_tfo.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/common.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/deterministic_nonce.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/event_queue.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/hpke_util.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/list.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet_quic.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_names.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_names.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/params.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/priority_queue.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_ackm.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_cc.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_cfq.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_channel.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_demux.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_error.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_fc.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_fifd.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_reactor.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_rx.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_tx.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_util.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_rx_depack.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_sf_list.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_ssl.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_statm.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_stream.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_stream_map.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_thread_assist.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_tls.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_tserver.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_txp.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_txpim.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_types.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_vlint.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_wire.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_wire_pkt.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/recordmethod.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/ring_buf.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/safe_math.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/ssl.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/ssl3_cbc.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/statem.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread_arch.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/time.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/internal/uint_set.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_names.h.in create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_ostime.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/hpke.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/quic.h create mode 100644 deps/openssl/android/armeabi-v7a/usr/local/include/openssl/thread.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/bio_addr.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/bio_tfo.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/common.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/deterministic_nonce.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/event_queue.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/hpke_util.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/list.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/packet_quic.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/param_names.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/param_names.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/internal/params.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/priority_queue.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_ackm.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_cc.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_cfq.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_channel.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_demux.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_error.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_fc.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_fifd.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_reactor.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_record_rx.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_record_tx.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_record_util.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_rx_depack.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_sf_list.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_ssl.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_statm.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_stream.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_stream_map.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_thread_assist.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_tls.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_tserver.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_txp.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_txpim.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_types.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_vlint.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_wire.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/quic_wire_pkt.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/recordmethod.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/ring_buf.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/safe_math.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/ssl.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/ssl3_cbc.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/statem.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/thread.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/thread_arch.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/time.h create mode 100644 deps/openssl/android/x86/usr/local/include/internal/uint_set.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/core_names.h.in create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/e_ostime.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/hpke.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/quic.h create mode 100644 deps/openssl/android/x86/usr/local/include/openssl/thread.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/bio_addr.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/bio_tfo.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/common.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/deterministic_nonce.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/event_queue.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/hpke_util.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/list.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/packet_quic.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/param_names.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/param_names.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/params.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/priority_queue.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_ackm.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_cc.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_cfq.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_channel.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_demux.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_error.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_fc.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_fifd.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_reactor.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_record_rx.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_record_tx.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_record_util.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_rx_depack.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_sf_list.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_ssl.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_statm.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_stream.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_stream_map.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_thread_assist.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_tls.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_tserver.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_txp.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_txpim.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_types.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_vlint.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_wire.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/quic_wire_pkt.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/recordmethod.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/ring_buf.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/safe_math.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/ssl.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/ssl3_cbc.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/statem.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/thread.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/thread_arch.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/time.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/internal/uint_set.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h.in create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/e_ostime.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/hpke.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/quic.h create mode 100644 deps/openssl/android/x86_64/usr/local/include/openssl/thread.h 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 index 87c35255..e641450b 100644 --- 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 @@ -90,7 +90,7 @@ 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__)) +# if (defined(__arm__) || defined(__arm) || defined(__aarch64__) || defined(_M_ARM64)) # include "arm_arch.h" # if __ARM_MAX_ARCH__>=7 # if defined(BSAES_ASM) @@ -106,7 +106,7 @@ void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); # 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__) +# 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 @@ -114,36 +114,36 @@ void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); # 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__) +# 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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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); @@ -434,7 +434,6 @@ void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out, # elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 64 /* RISC-V 64 support */ # include "riscv_arch.h" -# define RV64I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) int rv64i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); @@ -447,8 +446,6 @@ void rv64i_zknd_decrypt(const unsigned char *in, unsigned char *out, # elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 32 /* RISC-V 32 support */ # include "riscv_arch.h" -# define RV32I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) -# define RV32I_ZBKB_ZKND_ZKNE_CAPABLE (RV32I_ZKND_ZKNE_CAPABLE && RISCV_HAS_ZBKB()) int rv32i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1.h index ec76ae6f..36af1d76 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/asn1.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -142,8 +142,12 @@ 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); +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/bioerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bioerr.h index a0c06099..e38b981a 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bioerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bioerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn.h index 00544d9d..33f979ce 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/bn.h @@ -116,4 +116,13 @@ 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/cmserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmserr.h index 1de2f9c7..a7fcf11f 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmserr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/cmserr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 8ad16834..7369a730 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/context.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/context.h @@ -24,6 +24,9 @@ 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 *); @@ -40,3 +43,6 @@ 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/decoder.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/decoder.h index 6b5ee56a..a0d5de65 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/decoder.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/decoder.h @@ -1,5 +1,5 @@ /* - * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -25,16 +25,16 @@ void *ossl_decoder_from_algorithm(int id, const OSSL_ALGORITHM *algodef, 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_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, - EVP_PKEY **pkey, const char *keytype, - OSSL_LIB_CTX *libctx, - const char *propquery); - int ossl_decoder_get_number(const OSSL_DECODER *encoder); int ossl_decoder_store_cache_flush(OSSL_LIB_CTX *libctx); int ossl_decoder_store_remove_all_provided(const OSSL_PROVIDER *prov); +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/dherr.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dherr.h index bb24d131..519327f7 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dherr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dherr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 260c30fa..85d92a18 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsa.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/dsa.h @@ -26,7 +26,9 @@ 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 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[]); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ec.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ec.h index 62163b31..da85a7bd 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ec.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ec.h @@ -95,6 +95,12 @@ 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/ecx.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecx.h index 48b95fa5..f35b875f 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecx.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/ecx.h @@ -1,5 +1,5 @@ /* - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -15,7 +15,7 @@ # include -# ifndef OPENSSL_NO_EC +# ifndef OPENSSL_NO_ECX # include # include @@ -72,7 +72,6 @@ struct ecx_key_st { size_t keylen; ECX_KEY_TYPE type; CRYPTO_REF_COUNT references; - CRYPTO_RWLOCK *lock; }; size_t ossl_ecx_key_length(ECX_KEY_TYPE type); @@ -83,6 +82,9 @@ 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]); @@ -94,27 +96,33 @@ ossl_ed25519_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[32], const uint8_t private_key[32], const char *propq); int -ossl_ed25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len, +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 *message, size_t message_len, +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 char *propq); +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, +ossl_ed448_verify(OSSL_LIB_CTX *ctx, + const uint8_t *message, size_t message_len, const uint8_t signature[114], const uint8_t public_key[57], - const uint8_t *context, size_t context_len, const char *propq); + 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], @@ -146,5 +154,5 @@ ECX_KEY *ossl_evp_pkey_get1_X25519(EVP_PKEY *pkey); ECX_KEY *ossl_evp_pkey_get1_X448(EVP_PKEY *pkey); ECX_KEY *ossl_evp_pkey_get1_ED25519(EVP_PKEY *pkey); ECX_KEY *ossl_evp_pkey_get1_ED448(EVP_PKEY *pkey); -# endif /* OPENSSL_NO_EC */ +# endif /* 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 index 5c53bbea..6240438d 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/encoder.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/encoder.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evp.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evp.h index a0fff7fd..34cea2f9 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evp.h @@ -16,11 +16,21 @@ # 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) @@ -203,7 +213,6 @@ struct evp_mac_st { const char *description; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_mac_newctx_fn *newctx; OSSL_FUNC_mac_dupctx_fn *dupctx; @@ -225,7 +234,6 @@ struct evp_kdf_st { char *type_name; const char *description; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_kdf_newctx_fn *newctx; OSSL_FUNC_kdf_dupctx_fn *dupctx; @@ -270,7 +278,6 @@ struct evp_md_st { const char *description; OSSL_PROVIDER *prov; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_digest_newctx_fn *newctx; OSSL_FUNC_digest_init_fn *dinit; OSSL_FUNC_digest_update_fn *dupdate; @@ -326,7 +333,6 @@ struct evp_cipher_st { const char *description; OSSL_PROVIDER *prov; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_cipher_newctx_fn *newctx; OSSL_FUNC_cipher_encrypt_init_fn *einit; OSSL_FUNC_cipher_decrypt_init_fn *dinit; @@ -646,7 +652,9 @@ union legacy_pkey_st { # endif # ifndef OPENSSL_NO_EC struct ec_key_st *ec; /* ECC */ +# ifndef OPENSSL_NO_ECX ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ +# endif # endif }; @@ -784,7 +792,7 @@ void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, OP_CACHE_ELEM *evp_keymgmt_util_find_operation_cache(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, int selection); -int evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk, int locking); +int evp_keymgmt_util_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); @@ -813,7 +821,7 @@ int evp_keymgmt_set_params(const EVP_KEYMGMT *keymgmt, void *evp_keymgmt_gen_init(const EVP_KEYMGMT *keymgmt, int selection, const OSSL_PARAM params[]); int evp_keymgmt_gen_set_template(const EVP_KEYMGMT *keymgmt, void *genctx, - void *template); + 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, @@ -892,10 +900,6 @@ EVP_MD_CTX *evp_md_ctx_new_ex(EVP_PKEY *pkey, const ASN1_OCTET_STRING *id, int evp_pkey_name2type(const char *name); const char *evp_pkey_type2name(int type); -int evp_pkey_ctx_set1_id_prov(EVP_PKEY_CTX *ctx, const void *id, int len); -int evp_pkey_ctx_get1_id_prov(EVP_PKEY_CTX *ctx, void *id); -int evp_pkey_ctx_get1_id_len_prov(EVP_PKEY_CTX *ctx, size_t *id_len); - int evp_pkey_ctx_use_cached_data(EVP_PKEY_CTX *ctx); # endif /* !defined(FIPS_MODULE) */ @@ -959,4 +963,8 @@ 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 index d90ba83f..4a001107 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evperr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/evperr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/md32_common.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/md32_common.h index 966e2684..46214f32 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/md32_common.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/md32_common.h @@ -63,37 +63,41 @@ * #define HASH_BLOCK_DATA_ORDER md5_block_data_order */ -#include +#ifndef OSSL_CRYPTO_MD32_COMMON_H +# define OSSL_CRYPTO_MD32_COMMON_H +# pragma once -#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) -# error "DATA_ORDER must be defined!" -#endif +# include -#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 +# if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) +# error "DATA_ORDER 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_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_BLOCK_DATA_ORDER -# error "HASH_BLOCK_DATA_ORDER 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 -#define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n)))) +# 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 && \ @@ -117,31 +121,31 @@ # endif #endif -#if defined(DATA_ORDER_IS_BIG_ENDIAN) +# if defined(DATA_ORDER_IS_BIG_ENDIAN) -# define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \ +# 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), \ +# 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) +# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) -# define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++))) ), \ +# 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), \ +# 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 +# endif /* * Time for some action :-) @@ -226,30 +230,30 @@ int HASH_FINAL(unsigned char *md, HASH_CTX *c) memset(p + n, 0, HASH_CBLOCK - 8 - n); p += HASH_CBLOCK - 8; -#if defined(DATA_ORDER_IS_BIG_ENDIAN) +# 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) +# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) (void)HOST_l2c(c->Nl, p); (void)HOST_l2c(c->Nh, p); -#endif +# 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 +# ifndef HASH_MAKE_STRING +# error "HASH_MAKE_STRING must be defined!" +# else HASH_MAKE_STRING(c, md); -#endif +# endif return 1; } -#ifndef MD32_REG_T -# if defined(__alpha) || defined(__sparcv9) || defined(__mips) -# define MD32_REG_T long +# 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, @@ -266,13 +270,15 @@ int HASH_FINAL(unsigned char *md, HASH_CTX *c) * Well, to be honest it should say that this *prevents* * performance degradation. */ -# else +# 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 +# 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 index 573e1197..d03ca83d 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/modes.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/modes.h @@ -138,6 +138,12 @@ struct gcm128_context { #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. @@ -149,6 +155,12 @@ struct xts128_context { 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]; 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 index 662f412e..114971c6 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs12err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/pkcs12err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 4c6e49f5..2e1c85c1 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/punycode.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/punycode.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -22,6 +22,4 @@ int ossl_punycode_decode ( int ossl_a2ulabel(const char *in, char *out, size_t outlen); -int ossl_a2ucompare(const char *a, const char *u); - #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand.h index 215b3b7a..d375c2f9 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rand.h @@ -140,4 +140,15 @@ 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/riscv_arch.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/riscv_arch.h index 89a40bea..95185841 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -56,4 +56,9 @@ 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 index 949873d0..8eddc168 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsa.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/rsa.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -34,8 +34,6 @@ int ossl_rsa_pss_params_30_copy(RSA_PSS_PARAMS_30 *to, int ossl_rsa_pss_params_30_is_unrestricted(const RSA_PSS_PARAMS_30 *rsa_pss_params); int ossl_rsa_pss_params_30_set_hashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, int hashalg_nid); -int ossl_rsa_pss_params_30_set_maskgenalg(RSA_PSS_PARAMS_30 *rsa_pss_params, - int maskgenalg_nid); int ossl_rsa_pss_params_30_set_maskgenhashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, int maskgenhashalg_nid); int ossl_rsa_pss_params_30_set_saltlen(RSA_PSS_PARAMS_30 *rsa_pss_params, @@ -83,6 +81,10 @@ 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, diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sha.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sha.h index 64305d17..99bcf0ff 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sha.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/sha.h @@ -1,5 +1,5 @@ /* - * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -14,6 +14,7 @@ # 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); 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 index 6cc1dfa5..cc4f5142 100644 --- 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 @@ -12,7 +12,7 @@ # pragma once # if defined(OPENSSL_CPUID_OBJ) -# if defined(__aarch64__) +# if defined(__aarch64__) || defined (_M_ARM64) # include "arm_arch.h" extern unsigned int OPENSSL_arm_midr; static inline int vpsm4_capable(void) @@ -21,8 +21,14 @@ static inline int vpsm4_capable(void) (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 @@ -53,7 +59,7 @@ void HWSM4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, const unsigned char ivec[16]); # endif /* HWSM4_CAPABLE */ -#ifdef VPSM4_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, @@ -69,7 +75,37 @@ void vpsm4_ecb_encrypt(const unsigned char *in, unsigned char *out, 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/store.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/store.h index 5645fc92..9b7be71a 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/store.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/store.h @@ -1,5 +1,5 @@ /* - * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509.h b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509.h index 631150b7..5765b9f7 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509.h @@ -278,6 +278,8 @@ struct x509_store_ctx_st { /* X509_STORE_CTX */ SSL_DANE *dane; /* signed via bare TA public key, rather than CA certificate */ int bare_ta_signed; + /* Raw Public Key */ + EVP_PKEY *rpk; OSSL_LIB_CTX *libctx; char *propq; @@ -309,7 +311,7 @@ struct x509_object_st { }; int ossl_a2i_ipadd(unsigned char *ipout, const char *ipasc); -int ossl_x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int ossl_x509_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); @@ -334,7 +336,8 @@ int ossl_x509_PUBKEY_get0_libctx(OSSL_LIB_CTX **plibctx, const char **ppropq, 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); + 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); @@ -364,6 +367,7 @@ 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); 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 index 0a67975b..c7c7d25e 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/crypto/x509err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 3143e340..36dbe0fc 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/asn1.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/asn1.h @@ -11,6 +11,8 @@ # 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 index 547a73d0..9481f4c9 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio.h @@ -27,6 +27,8 @@ struct bio_method_st { 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); @@ -41,16 +43,20 @@ int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); # 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) \ @@ -63,6 +69,8 @@ int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); 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) @@ -70,6 +78,8 @@ int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); 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); 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 new file mode 100644 index 00000000..a6449b7e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio_addr.h @@ -0,0 +1,29 @@ +/* + * 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 new file mode 100644 index 00000000..64c0d4c3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/bio_tfo.h @@ -0,0 +1,151 @@ +/* + * 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 new file mode 100644 index 00000000..15666f11 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/common.h @@ -0,0 +1,217 @@ +/* + * 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 index 3ad86fc7..c48c29d5 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/comp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/comp.h @@ -10,3 +10,5 @@ #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/cryptlib.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/cryptlib.h index ac50eb3b..64851fd8 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/cryptlib.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/cryptlib.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,9 +11,6 @@ # define OSSL_INTERNAL_CRYPTLIB_H # pragma once -# include -# include - # ifdef OPENSSL_USE_APPLINK # define BIO_FLAGS_UPLINK_INTERNAL 0x8000 # include "ms/uplink.h" @@ -21,39 +18,13 @@ # define BIO_FLAGS_UPLINK_INTERNAL 0 # endif +# include "internal/common.h" + # include # include # include # include # include -# include "internal/nelem.h" - -#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 - -/* - * Use this inside a union with the field that needs to be aligned to a - * reasonable boundary for the platform. The most pessimistic alignment - * of the listed types will be used by the compiler. - */ -# define OSSL_UNION_ALIGN \ - double align; \ - ossl_uintmax_t align_int; \ - void *align_ptr typedef struct ex_callback_st EX_CALLBACK; DEFINE_STACK_OF(EX_CALLBACK) @@ -61,30 +32,6 @@ DEFINE_STACK_OF(EX_CALLBACK) typedef struct mem_st MEM; DEFINE_LHASH_OF_EX(MEM); -# 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) - void OPENSSL_cpuid_setup(void); #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(__x86_64__) || \ @@ -168,7 +115,9 @@ typedef struct ossl_ex_data_global_st { # define OSSL_LIB_CTX_PROVIDER_CONF_INDEX 16 # define OSSL_LIB_CTX_BIO_CORE_INDEX 17 # define OSSL_LIB_CTX_CHILD_PROVIDER_INDEX 18 -# define OSSL_LIB_CTX_MAX_INDEXES 19 +# 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); @@ -211,34 +160,4 @@ char *ossl_buf2hexstr_sep(const unsigned char *buf, long buflen, char sep); unsigned char *ossl_hexstr2buf_sep(const char *str, long *buflen, const char sep); -static ossl_inline int ossl_ends_with_dirsep(const char *path) -{ - if (*path != '\0') - path += strlen(path) - 1; -# if defined __VMS - if (*path == ']' || *path == '>' || *path == ':') - return 1; -# elif defined _WIN32 - if (*path == '\\') - return 1; -# endif - return *path == '/'; -} - -static ossl_inline int ossl_is_absolute_path(const char *path) -{ -# if defined __VMS - if (strchr(path, ':') != NULL - || ((path[0] == '[' || path[0] == '<') - && path[1] != '.' && path[1] != '-' - && path[1] != ']' && path[1] != '>')) - return 1; -# elif defined _WIN32 - if (path[0] == '\\' - || (path[0] != '\0' && path[1] == ':')) - return 1; -# endif - return path[0] == '/'; -} - #endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/der.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/der.h index f23fabc2..8d6db8f0 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/der.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/der.h @@ -7,8 +7,12 @@ * https://www.openssl.org/source/license.html */ -#include -#include "internal/packet.h" +#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. @@ -22,42 +26,42 @@ * 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 +# 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 +# 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 +# define DER_C_UNIVERSAL 0x00 +# define DER_C_APPLICATION 0x40 +# define DER_C_CONTEXT 0x80 +# define DER_C_PRIVATE 0xC0 /* * Run-time constructors. @@ -67,7 +71,7 @@ */ /* This can be used for all items that don't have a context */ -#define DER_NO_CONTEXT -1 +# define DER_NO_CONTEXT -1 int ossl_DER_w_precompiled(WPACKET *pkt, int tag, const unsigned char *precompiled, @@ -86,3 +90,5 @@ int ossl_DER_w_octet_string_uint32(WPACKET *pkt, int tag, uint32_t value); */ 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 new file mode 100644 index 00000000..5f0313fe --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/deterministic_nonce.h @@ -0,0 +1,24 @@ +/* + * 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/e_os.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/e_os.h index 7fdc3899..d1ed62e8 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -143,7 +143,7 @@ static __inline unsigned int _strlen31(const char *str) # undef stdin # undef stdout # undef stderr -FILE *__iob_func(); +FILE *__iob_func(void); # define stdin (&__iob_func()[0]) # define stdout (&__iob_func()[1]) # define stderr (&__iob_func()[2]) @@ -249,7 +249,7 @@ FILE *__iob_func(); /***********************************************/ # if defined(OPENSSL_SYS_WINDOWS) -# if (_MSC_VER >= 1310) && !defined(_WIN32_WCE) +# if defined(_MSC_VER) && (_MSC_VER >= 1310) && !defined(_WIN32_WCE) # define open _open # define fdopen _fdopen # define close _close @@ -286,54 +286,6 @@ struct servent *getservbyname(const char *name, const char *proto); # endif /* end vxworks */ -/* system-specific variants defining ossl_sleep() */ -#if defined(OPENSSL_SYS_UNIX) || defined(__DJGPP__) -# include -static ossl_inline void ossl_sleep(unsigned long millis) -{ -# ifdef OPENSSL_SYS_VXWORKS - struct timespec ts; - ts.tv_sec = (long int) (millis / 1000); - ts.tv_nsec = (long int) (millis % 1000) * 1000000ul; - nanosleep(&ts, NULL); -# elif defined(__TANDEM) -# if !defined(_REENTRANT) -# include - /* HPNS does not support usleep for non threaded apps */ - PROCESS_DELAY_(millis * 1000); -# elif defined(_SPT_MODEL_) -# include -# include - usleep(millis * 1000); -# else - usleep(millis * 1000); -# endif -# else - usleep(millis * 1000); -# endif -} -#elif defined(_WIN32) -# include -static ossl_inline void ossl_sleep(unsigned long millis) -{ - Sleep(millis); -} -#else -/* Fallback to a busy wait */ -static ossl_inline void ossl_sleep(unsigned long millis) -{ - struct timeval start, now; - unsigned long elapsedms; - - gettimeofday(&start, NULL); - do { - gettimeofday(&now, NULL); - elapsedms = (((now.tv_sec - start.tv_sec) * 1000000) - + now.tv_usec - start.tv_usec) / 1000; - } while (elapsedms < millis); -} -#endif /* defined OPENSSL_SYS_UNIX */ - /* ----------------------------- HP NonStop -------------------------------- */ /* Required to support platform variant without getpid() and pid_t. */ # if defined(__TANDEM) && defined(_GUARDIAN_TARGET) @@ -343,12 +295,12 @@ static ossl_inline void ossl_sleep(unsigned long millis) # define gethostbyname(name) gethostbyname((char*)name) # define ioctlsocket(a,b,c) ioctl(a,b,c) # ifdef NO_GETPID -inline int nssgetpid(); +inline int nssgetpid(void); # ifndef NSSGETPID_MACRO # define NSSGETPID_MACRO # include # include - inline int nssgetpid() + inline int nssgetpid(void) { short phandle[10]={0}; union pseudo_pid { 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 index 8b34e03e..7d5a73b1 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/endian.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/endian.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,7 +12,7 @@ # pragma once /* - * IS_LITTLE_ENDIAN and IS_BIG_ENDIAN can be used to detect the endiannes + * 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. * 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 new file mode 100644 index 00000000..bda1ee6a --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/event_queue.h @@ -0,0 +1,163 @@ +/* + * 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 index c4f09087..edd8381e 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/ffc.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/ffc.h @@ -58,8 +58,11 @@ # define FFC_CHECK_INVALID_Q_VALUE 0x00020 # define FFC_CHECK_INVALID_J_VALUE 0x00040 -# define FFC_CHECK_BAD_LN_PAIR 0x00080 -# define FFC_CHECK_INVALID_SEED_SIZE 0x00100 +/* + * 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 @@ -68,6 +71,8 @@ # 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 @@ -132,7 +137,7 @@ void ossl_ffc_params_set_h(FFC_PARAMS *params, int index); void ossl_ffc_params_set_flags(FFC_PARAMS *params, unsigned int flags); void ossl_ffc_params_enable_flags(FFC_PARAMS *params, unsigned int flags, int enable); -int ossl_ffc_set_digest(FFC_PARAMS *params, const char *alg, const char *props); +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, 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 new file mode 100644 index 00000000..e1da5e05 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/hpke_util.h @@ -0,0 +1,100 @@ +/* + * 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 index 95492fd0..af27a325 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/ktls.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/ktls.h @@ -1,5 +1,5 @@ /* - * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -40,6 +40,11 @@ # 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; @@ -209,6 +214,13 @@ static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off, # 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 @@ -288,6 +300,18 @@ static ossl_inline int ktls_start(int fd, ktls_crypto_info_t *crypto_info, 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. 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 new file mode 100644 index 00000000..fdd356c4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/list.h @@ -0,0 +1,169 @@ +/* + * 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 index fd36883f..6c42a9cd 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/namemap.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/namemap.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/numbers.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/numbers.h index 4f4d3306..47fb1677 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/numbers.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/numbers.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -61,6 +61,31 @@ # 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; 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 index ed761720..7abc6b8b 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/packet.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/packet.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -691,6 +691,8 @@ struct wpacket_st { */ #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 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 new file mode 100644 index 00000000..5173b467 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/packet_quic.h @@ -0,0 +1,150 @@ +/* + * 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 index 126211b7..3518f008 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -39,6 +39,11 @@ 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); 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 new file mode 100644 index 00000000..e721d071 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/param_names.h @@ -0,0 +1,376 @@ +/* + * 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 new file mode 100644 index 00000000..f34db219 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/param_names.h.in @@ -0,0 +1,18 @@ +/* + * {- 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 new file mode 100644 index 00000000..3fbd0cf9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/params.h @@ -0,0 +1,38 @@ +/* + * 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/priority_queue.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/priority_queue.h new file mode 100644 index 00000000..5be03bf1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/priority_queue.h @@ -0,0 +1,88 @@ +/* + * 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 index d09274d0..3adff499 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/property.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/property.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 18937f84..ab41d643 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/provider.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/provider.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -32,7 +32,7 @@ OSSL_PROVIDER *ossl_provider_find(OSSL_LIB_CTX *libctx, const char *name, int noconfig); OSSL_PROVIDER *ossl_provider_new(OSSL_LIB_CTX *libctx, const char *name, OSSL_provider_init_fn *init_function, - int noconfig); + OSSL_PARAM *params, int noconfig); int ossl_provider_up_ref(OSSL_PROVIDER *prov); void ossl_provider_free(OSSL_PROVIDER *prov); 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 new file mode 100644 index 00000000..03fc6088 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_ackm.h @@ -0,0 +1,297 @@ +/* + * 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 new file mode 100644 index 00000000..60c710b0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_cc.h @@ -0,0 +1,219 @@ +/* + * 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 new file mode 100644 index 00000000..22c436dc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_cfq.h @@ -0,0 +1,154 @@ +/* + * 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 new file mode 100644 index 00000000..f46db063 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_channel.h @@ -0,0 +1,429 @@ +/* + * 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 new file mode 100644 index 00000000..444249e7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_demux.h @@ -0,0 +1,364 @@ +/* + * 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 new file mode 100644 index 00000000..ae195a5f --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_error.h @@ -0,0 +1,56 @@ +/* + * 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 new file mode 100644 index 00000000..49b448a3 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_fc.h @@ -0,0 +1,277 @@ +/* + * 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 new file mode 100644 index 00000000..a260ec44 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_fifd.h @@ -0,0 +1,80 @@ +/* + * 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 new file mode 100644 index 00000000..57bb551e --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_reactor.h @@ -0,0 +1,188 @@ +/* + * 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 new file mode 100644 index 00000000..e26fd356 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_rx.h @@ -0,0 +1,569 @@ +/* + * 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 new file mode 100644 index 00000000..f3b798fe --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_tx.h @@ -0,0 +1,383 @@ +/* + * 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 new file mode 100644 index 00000000..97e630d9 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_record_util.h @@ -0,0 +1,116 @@ +/* + * 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 new file mode 100644 index 00000000..c90964a7 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_rx_depack.h @@ -0,0 +1,21 @@ +/* + * 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 new file mode 100644 index 00000000..8ed1dcb1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_sf_list.h @@ -0,0 +1,151 @@ +/* + * 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 new file mode 100644 index 00000000..52d4527c --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_ssl.h @@ -0,0 +1,132 @@ +/* + * 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 new file mode 100644 index 00000000..5b33551b --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_statm.h @@ -0,0 +1,40 @@ +/* + * 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 new file mode 100644 index 00000000..0da8febd --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_stream.h @@ -0,0 +1,429 @@ +/* +* 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 new file mode 100644 index 00000000..ae749061 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_stream_map.h @@ -0,0 +1,878 @@ +/* +* 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 new file mode 100644 index 00000000..592c2ffa --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_thread_assist.h @@ -0,0 +1,102 @@ +/* + * 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 new file mode 100644 index 00000000..0e4a9d33 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_tls.h @@ -0,0 +1,106 @@ +/* + * 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 new file mode 100644 index 00000000..4f358dd4 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_tserver.h @@ -0,0 +1,220 @@ +/* + * 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 new file mode 100644 index 00000000..ae508f23 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_txp.h @@ -0,0 +1,209 @@ +/* + * 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 new file mode 100644 index 00000000..ed6e3875 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_txpim.h @@ -0,0 +1,133 @@ +/* + * 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 new file mode 100644 index 00000000..d42164ba --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_types.h @@ -0,0 +1,116 @@ +/* + * 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 new file mode 100644 index 00000000..d4b70b22 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_vlint.h @@ -0,0 +1,127 @@ +/* +* 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 new file mode 100644 index 00000000..cd01feb0 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_wire.h @@ -0,0 +1,784 @@ +/* +* 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 new file mode 100644 index 00000000..18a483fc --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/quic_wire_pkt.h @@ -0,0 +1,629 @@ +/* + * 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 new file mode 100644 index 00000000..53bd4ca6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/recordmethod.h @@ -0,0 +1,339 @@ +/* + * 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 index 3392d3b4..4c9ab266 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/refcount.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/refcount.h @@ -12,6 +12,7 @@ # include # include +# include # if defined(OPENSSL_THREADS) && !defined(OPENSSL_DEV_NO_ATOMICS) # if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ @@ -25,12 +26,13 @@ # define HAVE_ATOMICS 1 -typedef _Atomic int CRYPTO_REF_COUNT; +typedef struct { + _Atomic int val; +} CRYPTO_REF_COUNT; -static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, - ossl_unused void *lock) +static inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1; + *ret = atomic_fetch_add_explicit(&refcnt->val, 1, memory_order_relaxed) + 1; return 1; } @@ -44,50 +46,70 @@ static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, * to mutable members doesn't have to be serialized anymore, which would * otherwise imply an acquire fence. Hence conditional acquire fence... */ -static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, - ossl_unused void *lock) +static inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1; + *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 int CRYPTO_REF_COUNT; +typedef struct { + int val; +} CRYPTO_REF_COUNT; -static __inline__ int CRYPTO_UP_REF(int *val, int *ret, ossl_unused void *lock) +static __inline__ int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = __atomic_fetch_add(val, 1, __ATOMIC_RELAXED) + 1; + *ret = __atomic_fetch_add(&refcnt->val, 1, __ATOMIC_RELAXED) + 1; return 1; } -static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, - ossl_unused void *lock) +static __inline__ int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = __atomic_fetch_sub(val, 1, __ATOMIC_RELAXED) - 1; + *ret = __atomic_fetch_sub(&refcnt->val, 1, __ATOMIC_RELAXED) - 1; if (*ret == 0) __atomic_thread_fence(__ATOMIC_ACQUIRE); return 1; } -# elif defined(__ICL) && defined(_WIN32) -# define HAVE_ATOMICS 1 -typedef volatile int CRYPTO_REF_COUNT; -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline__ int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd((void *)val, 1) + 1; + *ret = __atomic_load_n(&refcnt->val, __ATOMIC_RELAXED); return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, - ossl_unused void *lock) +# 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 *)val, -1) - 1; + *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; } @@ -95,7 +117,9 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, # define HAVE_ATOMICS 1 -typedef volatile int CRYPTO_REF_COUNT; +typedef struct { + volatile int val; +} CRYPTO_REF_COUNT; # if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64) # include @@ -103,21 +127,26 @@ typedef volatile int CRYPTO_REF_COUNT; # define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH # endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd_nf(val, 1) + 1; + *ret = _InterlockedExchangeAdd_nf(&refcnt->val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd_nf(val, -1) - 1; + *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) @@ -131,19 +160,24 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, # endif # endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd(val, 1) + 1; + *ret = _InterlockedExchangeAdd(&refcnt->val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd(val, -1) - 1; + *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 @@ -156,13 +190,92 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, */ # ifndef HAVE_ATOMICS -typedef int CRYPTO_REF_COUNT; +typedef struct { + int val; +# ifdef OPENSSL_THREADS + CRYPTO_RWLOCK *lock; +# endif +} CRYPTO_REF_COUNT; -# define CRYPTO_UP_REF(val, ret, lock) CRYPTO_atomic_add(val, 1, ret, lock) -# define CRYPTO_DOWN_REF(val, ret, lock) CRYPTO_atomic_add(val, -1, ret, lock) +# 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) @@ -173,6 +286,6 @@ typedef int CRYPTO_REF_COUNT; # define REF_PRINT_EX(text, count, object) \ OSSL_TRACE3(REF_COUNT, "%p:%4d:%s\n", (object), (count), (text)); # define REF_PRINT_COUNT(text, object) \ - REF_PRINT_EX(text, object->references, (void *)object) + 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 new file mode 100644 index 00000000..436f1ca1 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/ring_buf.h @@ -0,0 +1,277 @@ +/* + * 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 new file mode 100644 index 00000000..be37e6ab --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/safe_math.h @@ -0,0 +1,443 @@ +/* + * 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/sockets.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sockets.h index 1f5fefcc..2550c56b 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/sockets.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/sockets.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -61,7 +61,25 @@ struct servent *PASCAL getservbyname(const char *, const char *); # 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 @@ -71,6 +89,9 @@ struct servent *PASCAL getservbyname(const char *, const char *); # 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 @@ -95,6 +116,13 @@ struct servent *PASCAL getservbyname(const char *, const char *); # include # endif +# ifdef OPENSSL_SYS_UNIX +# ifndef OPENSSL_SYS_TANDEM +# include +# endif +# include +# endif + # ifndef VMS # include # else @@ -136,12 +164,15 @@ struct servent *PASCAL getservbyname(const char *, const char *); # 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__) 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 new file mode 100644 index 00000000..8a0c7974 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/ssl.h @@ -0,0 +1,24 @@ +/* + * 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 new file mode 100644 index 00000000..4fb5da19 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/ssl3_cbc.h @@ -0,0 +1,40 @@ +/* + * 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/statem.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/statem.h new file mode 100644 index 00000000..136e6523 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/statem.h @@ -0,0 +1,171 @@ +/* + * 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/thread.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread.h new file mode 100644 index 00000000..8c5bad77 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread.h @@ -0,0 +1,39 @@ +/* + * 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 new file mode 100644 index 00000000..1bfc0ebb --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/thread_arch.h @@ -0,0 +1,127 @@ +/* + * 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/time.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/time.h new file mode 100644 index 00000000..14d724ab --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/time.h @@ -0,0 +1,242 @@ +/* + * 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 index 8a35ced1..73fb53bc 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/tlsgroups.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/tlsgroups.h @@ -41,6 +41,16 @@ # 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/tsan_assist.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/tsan_assist.h index 17205d10..a840df0b 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/internal/tsan_assist.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/tsan_assist.h @@ -47,33 +47,37 @@ * can use TSAN_QUALIFIER in cast specifically when it has to count. */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ +#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 +# include -# if defined(ATOMIC_POINTER_LOCK_FREE) \ +# 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 +# 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) +# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) -# if defined(__GCC_ATOMIC_POINTER_LOCK_FREE) \ +# 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 +# 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 \ +# 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))) /* @@ -87,62 +91,63 @@ * 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) \ +# 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)) \ +# 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) __iso_volatile_load32(ptr) -# define tsan_store(ptr, val) __iso_volatile_store32((ptr), (val)) +# define tsan_load(ptr) (*(ptr)) +# define tsan_store(ptr, val) (*(ptr) = (val)) # endif -# else +# 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)) -# 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)) +# 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 - -#define tsan_counter(ptr) tsan_add((ptr), 1) -#define tsan_decr(ptr) tsan_add((ptr), -1) - diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/internal/uint_set.h b/deps/openssl/android/arm64-v8a/usr/local/include/internal/uint_set.h new file mode 100644 index 00000000..dcb29b33 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/internal/uint_set.h @@ -0,0 +1,63 @@ +/* + * 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/openssl/asn1.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h index 85ae8d58..09712345 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/asn1.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/asn1.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -158,7 +158,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR) -# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +# 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 @@ -999,6 +999,8 @@ 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); 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 index d478bc96..798b2211 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -135,7 +135,7 @@ extern "C" { -} -# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +# 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 @@ -832,6 +832,8 @@ 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); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h index bc27d5db..826ffb99 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/async.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -80,6 +80,14 @@ int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); 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); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h index e16cf622..ea584def 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bio.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/bio.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -67,6 +67,8 @@ extern "C" { # 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 @@ -171,6 +173,30 @@ extern "C" { # 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) @@ -208,7 +234,7 @@ extern "C" { # define BIO_FLAGS_NONCLEAR_RST 0x400 # define BIO_FLAGS_IN_EOF 0x800 -/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ +/* 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; @@ -256,12 +282,14 @@ void BIO_clear_flags(BIO *b, int flags); # 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_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 @@ -362,6 +390,34 @@ struct bio_dgram_sctp_prinfo { }; # 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 */ @@ -428,10 +484,17 @@ struct bio_dgram_sctp_prinfo { # 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_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() */ @@ -452,7 +515,11 @@ struct bio_dgram_sctp_prinfo { # 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, \ @@ -469,6 +536,7 @@ struct bio_dgram_sctp_prinfo { (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 @@ -596,8 +664,30 @@ int BIO_ctrl_reset_read_request(BIO *b); (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)) @@ -640,10 +730,18 @@ 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); @@ -667,6 +765,9 @@ 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 @@ -686,6 +787,7 @@ 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); @@ -704,6 +806,7 @@ int BIO_dgram_sctp_msg_waiting(BIO *b); # ifndef OPENSSL_NO_SOCK int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); +int BIO_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); @@ -726,6 +829,8 @@ int BIO_hex_string(BIO *out, int indent, int width, const void *data, # 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 *); @@ -788,6 +893,7 @@ int BIO_sock_info(int sock, # 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); @@ -805,6 +911,11 @@ 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 @@ -856,18 +967,30 @@ 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 (*gets) (BIO *, char *, int)); + 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 *)); 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 index c521e41e..418d1197 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -68,6 +68,8 @@ extern "C" { # 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 @@ -172,6 +174,30 @@ extern "C" { # 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) @@ -209,7 +235,7 @@ extern "C" { # define BIO_FLAGS_NONCLEAR_RST 0x400 # define BIO_FLAGS_IN_EOF 0x800 -/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ +/* 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; @@ -257,12 +283,14 @@ void BIO_clear_flags(BIO *b, int flags); # 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_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 @@ -339,6 +367,34 @@ struct bio_dgram_sctp_prinfo { }; # 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 */ @@ -405,10 +461,17 @@ struct bio_dgram_sctp_prinfo { # 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_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() */ @@ -429,7 +492,11 @@ struct bio_dgram_sctp_prinfo { # 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, \ @@ -446,6 +513,7 @@ struct bio_dgram_sctp_prinfo { (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 @@ -573,8 +641,30 @@ int BIO_ctrl_reset_read_request(BIO *b); (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)) @@ -617,10 +707,18 @@ 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); @@ -644,6 +742,9 @@ 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 @@ -663,6 +764,7 @@ 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); @@ -681,6 +783,7 @@ int BIO_dgram_sctp_msg_waiting(BIO *b); # ifndef OPENSSL_NO_SOCK int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); +int BIO_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); @@ -703,6 +806,8 @@ int BIO_hex_string(BIO *out, int indent, int width, const void *data, # 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 *); @@ -765,6 +870,7 @@ int BIO_sock_info(int sock, # 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); @@ -782,6 +888,11 @@ 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 @@ -833,18 +944,30 @@ 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 (*gets) (BIO *, char *, int)); + 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 *)); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h index 787b30af..e4fdb649 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bioerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -37,14 +37,18 @@ # 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 @@ -53,6 +57,7 @@ # 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 @@ -61,5 +66,7 @@ # 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/bn.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h index 27b127a5..ea706dca 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/bn.h @@ -241,12 +241,18 @@ 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); 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 index 49825570..60beffd5 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmp.h @@ -35,7 +35,9 @@ extern "C" { # endif -# define OSSL_CMP_PVNO 2 +# 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 { @@ -137,7 +139,6 @@ extern "C" { # 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) @@ -203,8 +204,8 @@ typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; # 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 @@ -378,18 +379,35 @@ 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_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 @@ -420,9 +438,11 @@ 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); @@ -432,7 +452,9 @@ void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); 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: */ @@ -454,6 +476,7 @@ int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, 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); @@ -477,6 +500,7 @@ 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); @@ -517,8 +541,10 @@ 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; @@ -590,6 +616,12 @@ int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, 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 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 index fb5ae671..5bd8beb5 100644 --- 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 @@ -36,7 +36,9 @@ use OpenSSL::stackhash qw(generate_stack_macros); extern "C" { # endif -# define OSSL_CMP_PVNO 2 +# 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 { @@ -138,7 +140,6 @@ extern "C" { # 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) @@ -204,8 +205,8 @@ typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; # 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 @@ -259,18 +260,35 @@ 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_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 @@ -301,9 +319,11 @@ 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); @@ -313,7 +333,9 @@ void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); 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: */ @@ -335,6 +357,7 @@ int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, 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); @@ -358,6 +381,7 @@ 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); @@ -398,8 +422,10 @@ 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; @@ -471,6 +497,12 @@ int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, 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 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 index 49fd5e39..57a6effb 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmperr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmperr.h @@ -59,8 +59,11 @@ # 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 @@ -94,6 +97,7 @@ # 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h index 3b453e6a..fe86a5c7 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cms.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/cms.h.in * - * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -31,8 +31,10 @@ 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; @@ -147,6 +149,8 @@ SKM_DEFINE_STACK_OF_INTERNAL(CMS_RevocationInfoChoice, CMS_RevocationInfoChoice, #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) @@ -217,13 +221,16 @@ 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 *ctx, + unsigned int flags, OSSL_LIB_CTX *libctx, const char *propq); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, @@ -233,27 +240,26 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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 *ctx, + 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 *ctx, + OSSL_LIB_CTX *libctx, const char *propq); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, @@ -272,7 +278,7 @@ CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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); @@ -291,12 +297,16 @@ int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); CMS_ContentInfo * -CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, +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 *ctx, + 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); @@ -385,6 +395,11 @@ 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, @@ -441,7 +456,7 @@ CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( unsigned char *id, int idlen, int allorfirst, STACK_OF(GENERAL_NAMES) *receiptList, STACK_OF(GENERAL_NAMES) *receiptsTo, - OSSL_LIB_CTX *ctx); + OSSL_LIB_CTX *libctx); int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, 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 index da20ddf2..23966770 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -32,8 +32,10 @@ use OpenSSL::stackhash qw(generate_stack_macros); 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; @@ -49,6 +51,8 @@ typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; .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) @@ -119,13 +123,16 @@ 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 *ctx, + unsigned int flags, OSSL_LIB_CTX *libctx, const char *propq); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, @@ -135,27 +142,26 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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 *ctx, + 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 *ctx, + OSSL_LIB_CTX *libctx, const char *propq); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, @@ -174,7 +180,7 @@ CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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); @@ -193,12 +199,16 @@ int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); CMS_ContentInfo * -CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, +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 *ctx, + 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); @@ -287,6 +297,11 @@ 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, @@ -343,7 +358,7 @@ CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( unsigned char *id, int idlen, int allorfirst, STACK_OF(GENERAL_NAMES) *receiptList, STACK_OF(GENERAL_NAMES) *receiptsTo, - OSSL_LIB_CTX *ctx); + OSSL_LIB_CTX *libctx); int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h index f2d7708f..887035b1 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/cmserr.h @@ -86,6 +86,7 @@ # 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h index 06ff5810..f81ba0f3 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comp.h @@ -40,15 +40,20 @@ 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 -# ifdef ZLIB const BIO_METHOD *BIO_f_zlib(void); -# endif +const BIO_METHOD *BIO_f_brotli(void); +const BIO_METHOD *BIO_f_zstd(void); # endif diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h index 01dd3e6b..1948d37f 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/comperr.h @@ -23,9 +23,16 @@ /* * 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 index e8fcf315..61bb0087 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/conf.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/conf.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 044b3eb5..56632870 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 974ead19..05803154 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/configuration.h @@ -27,7 +27,7 @@ extern "C" { * OpenSSL was configured with the following options: */ -# define OPENSSL_CONFIGURED_API 30100 +# define OPENSSL_CONFIGURED_API 30200 # ifndef OPENSSL_RAND_SEED_OS # define OPENSSL_RAND_SEED_OS # endif @@ -46,6 +46,12 @@ extern "C" { # ifndef OPENSSL_NO_ASYNC # define OPENSSL_NO_ASYNC # 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 @@ -58,6 +64,9 @@ extern "C" { # 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_DEVCRYPTOENG # define OPENSSL_NO_DEVCRYPTOENG # endif @@ -127,6 +136,9 @@ extern "C" { # 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 @@ -145,6 +157,12 @@ extern "C" { # 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 @@ -160,6 +178,21 @@ extern "C" { # 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 @@ -181,6 +214,12 @@ extern "C" { # 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 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 index b84dc1df..86077d0a 100644 --- 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 @@ -62,6 +62,12 @@ extern "C" { # 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 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 index 9683ac70..18c19918 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -42,6 +42,9 @@ struct ossl_dispatch_st { void (*function)(void); }; +# define OSSL_DISPATCH_END \ + { 0, NULL } + /* * Other items, essentially an int<->pointer map element. * 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 index 61d75a38..9b03f20c 100644 --- 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 @@ -661,6 +661,14 @@ OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types, 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 @@ -832,16 +840,24 @@ OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_settable_ctx_params, # 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)) @@ -937,6 +953,8 @@ OSSL_CORE_MAKE_FUNC(int, decoder_export_object, #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, @@ -952,6 +970,12 @@ 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 } 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 index 0a6ec1bb..ffffe90f 100644 --- 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 @@ -1,4 +1,7 @@ /* + * 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 @@ -7,6 +10,7 @@ * https://www.openssl.org/source/license.html */ + #ifndef OPENSSL_CORE_NAMES_H # define OPENSSL_CORE_NAMES_H # pragma once @@ -15,544 +19,454 @@ extern "C" { # endif -/* Well known parameter names that core passes to providers */ -#define OSSL_PROV_PARAM_CORE_VERSION "openssl-version" /* utf8_ptr */ -#define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name" /* utf8_ptr */ -#define OSSL_PROV_PARAM_CORE_MODULE_FILENAME "module-filename" /* utf8_ptr */ - -/* Well known parameter names that Providers can define */ -#define OSSL_PROV_PARAM_NAME "name" /* utf8_ptr */ -#define OSSL_PROV_PARAM_VERSION "version" /* utf8_ptr */ -#define OSSL_PROV_PARAM_BUILDINFO "buildinfo" /* utf8_ptr */ -#define OSSL_PROV_PARAM_STATUS "status" /* uint */ -#define OSSL_PROV_PARAM_SECURITY_CHECKS "security-checks" /* uint */ -#define OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" /* uint */ -#define OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" /* uint */ - -/* Self test callback parameters */ -#define OSSL_PROV_PARAM_SELF_TEST_PHASE "st-phase" /* utf8_string */ -#define OSSL_PROV_PARAM_SELF_TEST_TYPE "st-type" /* utf8_string */ -#define OSSL_PROV_PARAM_SELF_TEST_DESC "st-desc" /* utf8_string */ - -/*- - * Provider-native object abstractions - * - * These are used when a provider wants to pass object data or an object - * reference back to libcrypto. This is only useful for provider functions - * that take a callback to which an OSSL_PARAM array with these parameters - * can be passed. - * - * This set of parameter names is explained in detail in provider-object(7) - * (doc/man7/provider-object.pod) - */ -#define OSSL_OBJECT_PARAM_TYPE "type" /* INTEGER */ -#define OSSL_OBJECT_PARAM_DATA_TYPE "data-type" /* UTF8_STRING */ -#define OSSL_OBJECT_PARAM_DATA_STRUCTURE "data-structure" /* UTF8_STRING */ -#define OSSL_OBJECT_PARAM_REFERENCE "reference" /* OCTET_STRING */ -#define OSSL_OBJECT_PARAM_DATA "data" /* OCTET_STRING or UTF8_STRING */ -#define OSSL_OBJECT_PARAM_DESC "desc" /* UTF8_STRING */ - -/* - * Algorithm parameters - * If "engine" or "properties" are specified, they should always be paired - * with the algorithm type. - * Note these are common names that are shared by many types (such as kdf, mac, - * and pkey) e.g: see OSSL_MAC_PARAM_DIGEST below. - */ -#define OSSL_ALG_PARAM_DIGEST "digest" /* utf8_string */ -#define OSSL_ALG_PARAM_CIPHER "cipher" /* utf8_string */ -#define OSSL_ALG_PARAM_ENGINE "engine" /* utf8_string */ -#define OSSL_ALG_PARAM_MAC "mac" /* utf8_string */ -#define OSSL_ALG_PARAM_PROPERTIES "properties"/* utf8_string */ - -/* cipher parameters */ -#define OSSL_CIPHER_PARAM_PADDING "padding" /* uint */ -#define OSSL_CIPHER_PARAM_USE_BITS "use-bits" /* uint */ -#define OSSL_CIPHER_PARAM_TLS_VERSION "tls-version" /* uint */ -#define OSSL_CIPHER_PARAM_TLS_MAC "tls-mac" /* octet_ptr */ -#define OSSL_CIPHER_PARAM_TLS_MAC_SIZE "tls-mac-size" /* size_t */ -#define OSSL_CIPHER_PARAM_MODE "mode" /* uint */ -#define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize" /* size_t */ -#define OSSL_CIPHER_PARAM_AEAD "aead" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_CTS "cts" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_KEYLEN "keylen" /* size_t */ -#define OSSL_CIPHER_PARAM_IVLEN "ivlen" /* size_t */ -#define OSSL_CIPHER_PARAM_IV "iv" /* octet_string OR octet_ptr */ -#define OSSL_CIPHER_PARAM_UPDATED_IV "updated-iv" /* octet_string OR octet_ptr */ -#define OSSL_CIPHER_PARAM_NUM "num" /* uint */ -#define OSSL_CIPHER_PARAM_ROUNDS "rounds" /* uint */ -#define OSSL_CIPHER_PARAM_AEAD_TAG "tag" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD "tlsaad" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD "tlsaadpad" /* size_t */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN "tlsivgen" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV "tlsivinv" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN -#define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" /* size_t */ -#define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey" /* octet_string */ -#define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" /* octet_string */ -#define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" /* size_t */ -#define OSSL_CIPHER_PARAM_SPEED "speed" /* uint */ -#define OSSL_CIPHER_PARAM_CTS_MODE "cts_mode" /* utf8_string */ -/* For passing the AlgorithmIdentifier parameter in DER form */ -#define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS "alg_id_param" /* octet_string */ - -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT \ - "tls1multi_maxsndfrag" /* uint */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE \ - "tls1multi_maxbufsz" /* size_t */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE \ - "tls1multi_interleave" /* uint */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD \ - "tls1multi_aad" /* octet_string */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN \ - "tls1multi_aadpacklen" /* uint */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC \ - "tls1multi_enc" /* octet_string */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN \ - "tls1multi_encin" /* octet_string */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN \ - "tls1multi_enclen" /* size_t */ - /* OSSL_CIPHER_PARAM_CTS_MODE Values */ -#define OSSL_CIPHER_CTS_MODE_CS1 "CS1" -#define OSSL_CIPHER_CTS_MODE_CS2 "CS2" -#define OSSL_CIPHER_CTS_MODE_CS3 "CS3" +# define OSSL_CIPHER_CTS_MODE_CS1 "CS1" +# define OSSL_CIPHER_CTS_MODE_CS2 "CS2" +# define OSSL_CIPHER_CTS_MODE_CS3 "CS3" -/* digest parameters */ -#define OSSL_DIGEST_PARAM_XOFLEN "xoflen" /* size_t */ -#define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms" /* octet string */ -#define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type" /* uint */ -#define OSSL_DIGEST_PARAM_MICALG "micalg" /* utf8 string */ -#define OSSL_DIGEST_PARAM_BLOCK_SIZE "blocksize" /* size_t */ -#define OSSL_DIGEST_PARAM_SIZE "size" /* size_t */ -#define OSSL_DIGEST_PARAM_XOF "xof" /* int, 0 or 1 */ -#define OSSL_DIGEST_PARAM_ALGID_ABSENT "algid-absent" /* int, 0 or 1 */ +/* Known 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_384 "SHA2-384" -#define OSSL_DIGEST_NAME_SHA2_512 "SHA2-512" -#define OSSL_DIGEST_NAME_SHA2_512_224 "SHA2-512/224" -#define OSSL_DIGEST_NAME_SHA2_512_256 "SHA2-512/256" -#define OSSL_DIGEST_NAME_MD2 "MD2" -#define OSSL_DIGEST_NAME_MD4 "MD4" -#define OSSL_DIGEST_NAME_MDC2 "MDC2" -#define OSSL_DIGEST_NAME_RIPEMD160 "RIPEMD160" -#define OSSL_DIGEST_NAME_SHA3_224 "SHA3-224" -#define OSSL_DIGEST_NAME_SHA3_256 "SHA3-256" -#define OSSL_DIGEST_NAME_SHA3_384 "SHA3-384" -#define OSSL_DIGEST_NAME_SHA3_512 "SHA3-512" -#define OSSL_DIGEST_NAME_KECCAK_KMAC128 "KECCAK-KMAC-128" -#define OSSL_DIGEST_NAME_KECCAK_KMAC256 "KECCAK-KMAC-256" -#define OSSL_DIGEST_NAME_SM3 "SM3" - -/* MAC parameters */ -#define OSSL_MAC_PARAM_KEY "key" /* octet string */ -#define OSSL_MAC_PARAM_IV "iv" /* octet string */ -#define OSSL_MAC_PARAM_CUSTOM "custom" /* utf8 string */ -#define OSSL_MAC_PARAM_SALT "salt" /* octet string */ -#define OSSL_MAC_PARAM_XOF "xof" /* int, 0 or 1 */ -#define OSSL_MAC_PARAM_DIGEST_NOINIT "digest-noinit" /* int, 0 or 1 */ -#define OSSL_MAC_PARAM_DIGEST_ONESHOT "digest-oneshot" /* int, 0 or 1 */ -#define OSSL_MAC_PARAM_C_ROUNDS "c-rounds" /* unsigned int */ -#define OSSL_MAC_PARAM_D_ROUNDS "d-rounds" /* unsigned int */ - -/* - * If "engine" or "properties" are specified, they should always be paired - * with "cipher" or "digest". - */ -#define OSSL_MAC_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ -#define OSSL_MAC_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ -#define OSSL_MAC_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ -#define OSSL_MAC_PARAM_SIZE "size" /* size_t */ -#define OSSL_MAC_PARAM_BLOCK_SIZE "block-size" /* size_t */ -#define OSSL_MAC_PARAM_TLS_DATA_SIZE "tls-data-size" /* size_t */ +# 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" - -/* KDF / PRF parameters */ -#define OSSL_KDF_PARAM_SECRET "secret" /* octet string */ -#define OSSL_KDF_PARAM_KEY "key" /* octet string */ -#define OSSL_KDF_PARAM_SALT "salt" /* octet string */ -#define OSSL_KDF_PARAM_PASSWORD "pass" /* octet string */ -#define OSSL_KDF_PARAM_PREFIX "prefix" /* octet string */ -#define OSSL_KDF_PARAM_LABEL "label" /* octet string */ -#define OSSL_KDF_PARAM_DATA "data" /* octet string */ -#define OSSL_KDF_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ -#define OSSL_KDF_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ -#define OSSL_KDF_PARAM_MAC OSSL_ALG_PARAM_MAC /* utf8 string */ -#define OSSL_KDF_PARAM_MAC_SIZE "maclen" /* size_t */ -#define OSSL_KDF_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ -#define OSSL_KDF_PARAM_ITER "iter" /* unsigned int */ -#define OSSL_KDF_PARAM_MODE "mode" /* utf8 string or int */ -#define OSSL_KDF_PARAM_PKCS5 "pkcs5" /* int */ -#define OSSL_KDF_PARAM_UKM "ukm" /* octet string */ -#define OSSL_KDF_PARAM_CEK_ALG "cekalg" /* utf8 string */ -#define OSSL_KDF_PARAM_SCRYPT_N "n" /* uint64_t */ -#define OSSL_KDF_PARAM_SCRYPT_R "r" /* uint32_t */ -#define OSSL_KDF_PARAM_SCRYPT_P "p" /* uint32_t */ -#define OSSL_KDF_PARAM_SCRYPT_MAXMEM "maxmem_bytes" /* uint64_t */ -#define OSSL_KDF_PARAM_INFO "info" /* octet string */ -#define OSSL_KDF_PARAM_SEED "seed" /* octet string */ -#define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash" /* octet string */ -#define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id" /* octet string */ -#define OSSL_KDF_PARAM_SSHKDF_TYPE "type" /* int */ -#define OSSL_KDF_PARAM_SIZE "size" /* size_t */ -#define OSSL_KDF_PARAM_CONSTANT "constant" /* octet string */ -#define OSSL_KDF_PARAM_PKCS12_ID "id" /* int */ -#define OSSL_KDF_PARAM_KBKDF_USE_L "use-l" /* int */ -#define OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR "use-separator" /* int */ -#define OSSL_KDF_PARAM_KBKDF_R "r" /* int */ -#define OSSL_KDF_PARAM_X942_ACVPINFO "acvp-info" -#define OSSL_KDF_PARAM_X942_PARTYUINFO "partyu-info" -#define OSSL_KDF_PARAM_X942_PARTYVINFO "partyv-info" -#define OSSL_KDF_PARAM_X942_SUPP_PUBINFO "supp-pubinfo" -#define OSSL_KDF_PARAM_X942_SUPP_PRIVINFO "supp-privinfo" -#define OSSL_KDF_PARAM_X942_USE_KEYBITS "use-keybits" +# 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" - -/* Known RAND names */ -#define OSSL_RAND_PARAM_STATE "state" -#define OSSL_RAND_PARAM_STRENGTH "strength" -#define OSSL_RAND_PARAM_MAX_REQUEST "max_request" -#define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy" -#define OSSL_RAND_PARAM_TEST_NONCE "test_nonce" -#define OSSL_RAND_PARAM_GENERATE "generate" - -/* RAND/DRBG names */ -#define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests" -#define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval" -#define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen" -#define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen" -#define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen" -#define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen" -#define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen" -#define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen" -#define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter" -#define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time" -#define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -#define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -#define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -#define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC -#define OSSL_DRBG_PARAM_USE_DF "use_derivation_function" - -/* DRBG call back parameters */ -#define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required" -#define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance" -#define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length" -#define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length" -#define OSSL_DRBG_PARAM_RANDOM_DATA "random_data" -#define OSSL_DRBG_PARAM_SIZE "size" - -/* PKEY parameters */ -/* Common PKEY parameters */ -#define OSSL_PKEY_PARAM_BITS "bits" /* integer */ -#define OSSL_PKEY_PARAM_MAX_SIZE "max-size" /* integer */ -#define OSSL_PKEY_PARAM_SECURITY_BITS "security-bits" /* integer */ -#define OSSL_PKEY_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -#define OSSL_PKEY_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ -#define OSSL_PKEY_PARAM_ENGINE OSSL_ALG_PARAM_ENGINE /* utf8 string */ -#define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -#define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" /* utf8 string */ -#define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest" /* utf8 string */ -#define OSSL_PKEY_PARAM_PAD_MODE "pad-mode" -#define OSSL_PKEY_PARAM_DIGEST_SIZE "digest-size" -#define OSSL_PKEY_PARAM_MASKGENFUNC "mgf" -#define OSSL_PKEY_PARAM_MGF1_DIGEST "mgf1-digest" -#define OSSL_PKEY_PARAM_MGF1_PROPERTIES "mgf1-properties" -#define OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY "encoded-pub-key" -#define OSSL_PKEY_PARAM_GROUP_NAME "group" -#define OSSL_PKEY_PARAM_DIST_ID "distid" -#define OSSL_PKEY_PARAM_PUB_KEY "pub" -#define OSSL_PKEY_PARAM_PRIV_KEY "priv" - -/* Diffie-Hellman/DSA Parameters */ -#define OSSL_PKEY_PARAM_FFC_P "p" -#define OSSL_PKEY_PARAM_FFC_G "g" -#define OSSL_PKEY_PARAM_FFC_Q "q" -#define OSSL_PKEY_PARAM_FFC_GINDEX "gindex" -#define OSSL_PKEY_PARAM_FFC_PCOUNTER "pcounter" -#define OSSL_PKEY_PARAM_FFC_SEED "seed" -#define OSSL_PKEY_PARAM_FFC_COFACTOR "j" -#define OSSL_PKEY_PARAM_FFC_H "hindex" -#define OSSL_PKEY_PARAM_FFC_VALIDATE_PQ "validate-pq" -#define OSSL_PKEY_PARAM_FFC_VALIDATE_G "validate-g" -#define OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY "validate-legacy" - -/* Diffie-Hellman params */ -#define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator" -#define OSSL_PKEY_PARAM_DH_PRIV_LEN "priv_len" - -/* Elliptic Curve Domain Parameters */ -#define OSSL_PKEY_PARAM_EC_PUB_X "qx" -#define OSSL_PKEY_PARAM_EC_PUB_Y "qy" - -/* Elliptic Curve Explicit Domain Parameters */ -#define OSSL_PKEY_PARAM_EC_FIELD_TYPE "field-type" -#define OSSL_PKEY_PARAM_EC_P "p" -#define OSSL_PKEY_PARAM_EC_A "a" -#define OSSL_PKEY_PARAM_EC_B "b" -#define OSSL_PKEY_PARAM_EC_GENERATOR "generator" -#define OSSL_PKEY_PARAM_EC_ORDER "order" -#define OSSL_PKEY_PARAM_EC_COFACTOR "cofactor" -#define OSSL_PKEY_PARAM_EC_SEED "seed" -#define OSSL_PKEY_PARAM_EC_CHAR2_M "m" -#define OSSL_PKEY_PARAM_EC_CHAR2_TYPE "basis-type" -#define OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS "tp" -#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K1 "k1" -#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K2 "k2" -#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K3 "k3" -#define OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS "decoded-from-explicit" - -/* Elliptic Curve Key Parameters */ -#define OSSL_PKEY_PARAM_USE_COFACTOR_FLAG "use-cofactor-flag" -#define OSSL_PKEY_PARAM_USE_COFACTOR_ECDH \ - OSSL_PKEY_PARAM_USE_COFACTOR_FLAG - -/* RSA Keys */ -/* - * n, e, d are the usual public and private key components - * - * rsa-num is the number of factors, including p and q - * rsa-factor is used for each factor: p, q, r_i (i = 3, ...) - * rsa-exponent is used for each exponent: dP, dQ, d_i (i = 3, ...) - * rsa-coefficient is used for each coefficient: qInv, t_i (i = 3, ...) - * - * The number of rsa-factor items must be equal to the number of rsa-exponent - * items, and the number of rsa-coefficients must be one less. - * (the base i for the coefficients is 2, not 1, at least as implied by - * RFC 8017) - */ -#define OSSL_PKEY_PARAM_RSA_N "n" -#define OSSL_PKEY_PARAM_RSA_E "e" -#define OSSL_PKEY_PARAM_RSA_D "d" -#define OSSL_PKEY_PARAM_RSA_FACTOR "rsa-factor" -#define OSSL_PKEY_PARAM_RSA_EXPONENT "rsa-exponent" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient" -#define OSSL_PKEY_PARAM_RSA_FACTOR1 OSSL_PKEY_PARAM_RSA_FACTOR"1" -#define OSSL_PKEY_PARAM_RSA_FACTOR2 OSSL_PKEY_PARAM_RSA_FACTOR"2" -#define OSSL_PKEY_PARAM_RSA_FACTOR3 OSSL_PKEY_PARAM_RSA_FACTOR"3" -#define OSSL_PKEY_PARAM_RSA_FACTOR4 OSSL_PKEY_PARAM_RSA_FACTOR"4" -#define OSSL_PKEY_PARAM_RSA_FACTOR5 OSSL_PKEY_PARAM_RSA_FACTOR"5" -#define OSSL_PKEY_PARAM_RSA_FACTOR6 OSSL_PKEY_PARAM_RSA_FACTOR"6" -#define OSSL_PKEY_PARAM_RSA_FACTOR7 OSSL_PKEY_PARAM_RSA_FACTOR"7" -#define OSSL_PKEY_PARAM_RSA_FACTOR8 OSSL_PKEY_PARAM_RSA_FACTOR"8" -#define OSSL_PKEY_PARAM_RSA_FACTOR9 OSSL_PKEY_PARAM_RSA_FACTOR"9" -#define OSSL_PKEY_PARAM_RSA_FACTOR10 OSSL_PKEY_PARAM_RSA_FACTOR"10" -#define OSSL_PKEY_PARAM_RSA_EXPONENT1 OSSL_PKEY_PARAM_RSA_EXPONENT"1" -#define OSSL_PKEY_PARAM_RSA_EXPONENT2 OSSL_PKEY_PARAM_RSA_EXPONENT"2" -#define OSSL_PKEY_PARAM_RSA_EXPONENT3 OSSL_PKEY_PARAM_RSA_EXPONENT"3" -#define OSSL_PKEY_PARAM_RSA_EXPONENT4 OSSL_PKEY_PARAM_RSA_EXPONENT"4" -#define OSSL_PKEY_PARAM_RSA_EXPONENT5 OSSL_PKEY_PARAM_RSA_EXPONENT"5" -#define OSSL_PKEY_PARAM_RSA_EXPONENT6 OSSL_PKEY_PARAM_RSA_EXPONENT"6" -#define OSSL_PKEY_PARAM_RSA_EXPONENT7 OSSL_PKEY_PARAM_RSA_EXPONENT"7" -#define OSSL_PKEY_PARAM_RSA_EXPONENT8 OSSL_PKEY_PARAM_RSA_EXPONENT"8" -#define OSSL_PKEY_PARAM_RSA_EXPONENT9 OSSL_PKEY_PARAM_RSA_EXPONENT"9" -#define OSSL_PKEY_PARAM_RSA_EXPONENT10 OSSL_PKEY_PARAM_RSA_EXPONENT"10" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 OSSL_PKEY_PARAM_RSA_COEFFICIENT"1" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT2 OSSL_PKEY_PARAM_RSA_COEFFICIENT"2" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT3 OSSL_PKEY_PARAM_RSA_COEFFICIENT"3" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT4 OSSL_PKEY_PARAM_RSA_COEFFICIENT"4" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT5 OSSL_PKEY_PARAM_RSA_COEFFICIENT"5" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT6 OSSL_PKEY_PARAM_RSA_COEFFICIENT"6" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT7 OSSL_PKEY_PARAM_RSA_COEFFICIENT"7" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT8 OSSL_PKEY_PARAM_RSA_COEFFICIENT"8" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT9 OSSL_PKEY_PARAM_RSA_COEFFICIENT"9" +# 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" +# define OSSL_PKEY_RSA_PAD_MODE_NONE "none" +# define OSSL_PKEY_RSA_PAD_MODE_PKCSV15 "pkcs1" +# define OSSL_PKEY_RSA_PAD_MODE_OAEP "oaep" +# define OSSL_PKEY_RSA_PAD_MODE_X931 "x931" +# define OSSL_PKEY_RSA_PAD_MODE_PSS "pss" /* RSA pss padding salt length */ -#define OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST "digest" -#define OSSL_PKEY_RSA_PSS_SALT_LEN_MAX "max" -#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO "auto" -#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX "auto-digestmax" - -/* Key generation parameters */ -#define OSSL_PKEY_PARAM_RSA_BITS OSSL_PKEY_PARAM_BITS -#define OSSL_PKEY_PARAM_RSA_PRIMES "primes" -#define OSSL_PKEY_PARAM_RSA_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_PKEY_PARAM_RSA_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES -#define OSSL_PKEY_PARAM_RSA_MASKGENFUNC OSSL_PKEY_PARAM_MASKGENFUNC -#define OSSL_PKEY_PARAM_RSA_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST -#define OSSL_PKEY_PARAM_RSA_PSS_SALTLEN "saltlen" - -/* Key generation parameters */ -#define OSSL_PKEY_PARAM_FFC_TYPE "type" -#define OSSL_PKEY_PARAM_FFC_PBITS "pbits" -#define OSSL_PKEY_PARAM_FFC_QBITS "qbits" -#define OSSL_PKEY_PARAM_FFC_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_PKEY_PARAM_FFC_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES - -#define OSSL_PKEY_PARAM_EC_ENCODING "encoding" /* utf8_string */ -#define OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT "point-format" -#define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check" -#define OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC "include-public" +# 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_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_POINT_CONVERSION_FORMAT_UNCOMPRESSED "uncompressed" +# define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_COMPRESSED "compressed" +# define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_HYBRID "hybrid" -#define OSSL_PKEY_EC_GROUP_CHECK_DEFAULT "default" -#define OSSL_PKEY_EC_GROUP_CHECK_NAMED "named" -#define OSSL_PKEY_EC_GROUP_CHECK_NAMED_NIST "named-nist" - -/* Key Exchange parameters */ -#define OSSL_EXCHANGE_PARAM_PAD "pad" /* uint */ -#define OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE "ecdh-cofactor-mode" /* int */ -#define OSSL_EXCHANGE_PARAM_KDF_TYPE "kdf-type" /* utf8_string */ -#define OSSL_EXCHANGE_PARAM_KDF_DIGEST "kdf-digest" /* utf8_string */ -#define OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS "kdf-digest-props" /* utf8_string */ -#define OSSL_EXCHANGE_PARAM_KDF_OUTLEN "kdf-outlen" /* size_t */ -/* The following parameter is an octet_string on set and an octet_ptr on get */ -#define OSSL_EXCHANGE_PARAM_KDF_UKM "kdf-ukm" - -/* Signature parameters */ -#define OSSL_SIGNATURE_PARAM_ALGORITHM_ID "algorithm-id" -#define OSSL_SIGNATURE_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE -#define OSSL_SIGNATURE_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_SIGNATURE_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES -#define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen" -#define OSSL_SIGNATURE_PARAM_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST -#define OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES \ - OSSL_PKEY_PARAM_MGF1_PROPERTIES -#define OSSL_SIGNATURE_PARAM_DIGEST_SIZE OSSL_PKEY_PARAM_DIGEST_SIZE - -/* Asym cipher parameters */ -#define OSSL_ASYM_CIPHER_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_ASYM_CIPHER_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES -#define OSSL_ASYM_CIPHER_PARAM_ENGINE OSSL_PKEY_PARAM_ENGINE -#define OSSL_ASYM_CIPHER_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE -#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST \ - OSSL_PKEY_PARAM_MGF1_DIGEST -#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS \ - OSSL_PKEY_PARAM_MGF1_PROPERTIES -#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST OSSL_ALG_PARAM_DIGEST -#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS "digest-props" -/* The following parameter is an octet_string on set and an octet_ptr on get */ -#define OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL "oaep-label" -#define OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION "tls-client-version" -#define OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION "tls-negotiated-version" - -/* - * Encoder / decoder parameters - */ -#define OSSL_ENCODER_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -#define OSSL_ENCODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -/* Currently PVK only, but reusable for others as needed */ -#define OSSL_ENCODER_PARAM_ENCRYPT_LEVEL "encrypt-level" -#define OSSL_ENCODER_PARAM_SAVE_PARAMETERS "save-parameters" /* integer */ - -#define OSSL_DECODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES - -/* Passphrase callback parameters */ -#define OSSL_PASSPHRASE_PARAM_INFO "info" - -/* Keygen callback parameters, from provider to libcrypto */ -#define OSSL_GEN_PARAM_POTENTIAL "potential" /* integer */ -#define OSSL_GEN_PARAM_ITERATION "iteration" /* integer */ - -/* ACVP Test parameters : These should not be used normally */ -#define OSSL_PKEY_PARAM_RSA_TEST_XP1 "xp1" -#define OSSL_PKEY_PARAM_RSA_TEST_XP2 "xp2" -#define OSSL_PKEY_PARAM_RSA_TEST_XP "xp" -#define OSSL_PKEY_PARAM_RSA_TEST_XQ1 "xq1" -#define OSSL_PKEY_PARAM_RSA_TEST_XQ2 "xq2" -#define OSSL_PKEY_PARAM_RSA_TEST_XQ "xq" -#define OSSL_PKEY_PARAM_RSA_TEST_P1 "p1" -#define OSSL_PKEY_PARAM_RSA_TEST_P2 "p2" -#define OSSL_PKEY_PARAM_RSA_TEST_Q1 "q1" -#define OSSL_PKEY_PARAM_RSA_TEST_Q2 "q2" -#define OSSL_SIGNATURE_PARAM_KAT "kat" - -/* KEM parameters */ -#define OSSL_KEM_PARAM_OPERATION "operation" +# 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" -/* Capabilities */ - -/* TLS-GROUP Capability */ -#define OSSL_CAPABILITY_TLS_GROUP_NAME "tls-group-name" -#define OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL "tls-group-name-internal" -#define OSSL_CAPABILITY_TLS_GROUP_ID "tls-group-id" -#define OSSL_CAPABILITY_TLS_GROUP_ALG "tls-group-alg" -#define OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS "tls-group-sec-bits" -#define OSSL_CAPABILITY_TLS_GROUP_IS_KEM "tls-group-is-kem" -#define OSSL_CAPABILITY_TLS_GROUP_MIN_TLS "tls-min-tls" -#define OSSL_CAPABILITY_TLS_GROUP_MAX_TLS "tls-max-tls" -#define OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS "tls-min-dtls" -#define OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS "tls-max-dtls" - -/*- - * storemgmt parameters - */ - -/* - * Used by storemgmt_ctx_set_params(): - * - * - OSSL_STORE_PARAM_EXPECT is an INTEGER, and the value is any of the - * OSSL_STORE_INFO numbers. This is used to set the expected type of - * object loaded. - * - * - OSSL_STORE_PARAM_SUBJECT, OSSL_STORE_PARAM_ISSUER, - * OSSL_STORE_PARAM_SERIAL, OSSL_STORE_PARAM_FINGERPRINT, - * OSSL_STORE_PARAM_DIGEST, OSSL_STORE_PARAM_ALIAS - * are used as search criteria. - * (OSSL_STORE_PARAM_DIGEST is used with OSSL_STORE_PARAM_FINGERPRINT) - */ -#define OSSL_STORE_PARAM_EXPECT "expect" /* INTEGER */ -#define OSSL_STORE_PARAM_SUBJECT "subject" /* DER blob => OCTET_STRING */ -#define OSSL_STORE_PARAM_ISSUER "name" /* DER blob => OCTET_STRING */ -#define OSSL_STORE_PARAM_SERIAL "serial" /* INTEGER */ -#define OSSL_STORE_PARAM_DIGEST "digest" /* UTF8_STRING */ -#define OSSL_STORE_PARAM_FINGERPRINT "fingerprint" /* OCTET_STRING */ -#define OSSL_STORE_PARAM_ALIAS "alias" /* UTF8_STRING */ - -/* You may want to pass properties for the provider implementation to use */ -#define OSSL_STORE_PARAM_PROPERTIES "properties" /* utf8_string */ -/* OSSL_DECODER input type if a decoder is used by the store */ -#define OSSL_STORE_PARAM_INPUT_TYPE "input-type" /* UTF8_STRING */ +/* 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 } 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 new file mode 100644 index 00000000..c14520fe --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/core_names.h.in @@ -0,0 +1,119 @@ +/* + * {- 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/crmf.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h index 71b747ed..1f901f35 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crmf.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/crmf.h.in * - * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. * Copyright Nokia 2007-2019 * Copyright Siemens AG 2015-2019 * @@ -43,8 +43,8 @@ extern "C" { # 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) @@ -198,12 +198,14 @@ int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, int rid, int acceptRAVerified, OSSL_LIB_CTX *libctx, const char *propq); OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); -const ASN1_INTEGER -*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +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 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 index 4d37ea6d..43411fa4 100644 --- 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 @@ -1,7 +1,7 @@ /*- * {- join("\n * ", @autowarntext) -} * - * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. * Copyright Nokia 2007-2019 * Copyright Siemens AG 2015-2019 * @@ -44,8 +44,8 @@ extern "C" { # 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) @@ -151,12 +151,14 @@ int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, int rid, int acceptRAVerified, OSSL_LIB_CTX *libctx, const char *propq); OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); -const ASN1_INTEGER -*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h index ab01aae8..55e00dcc 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/crypto.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/crypto.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -88,6 +88,7 @@ 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 @@ -552,6 +553,8 @@ 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 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 index fb0c7cbb..b2d691b9 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -89,6 +89,7 @@ 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 @@ -529,6 +530,8 @@ 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h index b6dd8c35..e6dd1192 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ct.h @@ -133,7 +133,7 @@ typedef enum { */ 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. 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 index 16086b33..3fc2aaa9 100644 --- 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 @@ -85,7 +85,7 @@ typedef enum { */ 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. diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h index 8bc17448..f1c0ed06 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dh.h @@ -144,7 +144,7 @@ DECLARE_ASN1_ITEM(DHparams) # define DH_GENERATOR_3 3 # define DH_GENERATOR_5 5 -/* DH_check error codes */ +/* 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. @@ -154,10 +154,10 @@ DECLARE_ASN1_ITEM(DHparams) # define DH_UNABLE_TO_CHECK_GENERATOR 0x04 # define DH_NOT_SUITABLE_GENERATOR 0x08 # define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_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 +# define DH_MODULUS_TOO_LARGE 0x100 /* +DH_check_pub_key */ /* DH_check_pub_key error codes */ # define DH_CHECK_PUBKEY_TOO_SMALL 0x01 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h index 5d2a762a..2997d7d4 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dherr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -40,6 +40,7 @@ # 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 @@ -50,6 +51,7 @@ # 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h index 160404cc..109878e6 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/dsa.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h index 32e142a9..e01f6275 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_os2.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -89,7 +89,7 @@ extern "C" { /* * DLL settings. This part is a bit tough, because it's up to the - * application implementor how he or she will link the application, so it + * application implementer how he or she will link the application, so it * requires some macro to be used. */ # ifdef OPENSSL_SYS_WINDOWS 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 new file mode 100644 index 00000000..8a7cc988 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/e_ostime.h @@ -0,0 +1,30 @@ +/* + * 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) +# include +# else +# include +# 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 index be9fb2f0..e1cbe982 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ec.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ec.h @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -460,6 +460,22 @@ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, 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 @@ -1111,7 +1127,7 @@ OSSL_DEPRECATEDIN_3_0 int EC_KEY_check_key(const EC_KEY *key); /** Indicates if an EC_KEY can be used for signing. * \param eckey the EC_KEY object - * \return 1 if can can sign and 0 otherwise. + * \return 1 if can sign and 0 otherwise. */ OSSL_DEPRECATEDIN_3_0 int EC_KEY_can_sign(const EC_KEY *eckey); @@ -1287,7 +1303,7 @@ OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *me OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_method(ENGINE *engine); /** The old name for ecdh_KDF_X9_63 - * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, + * 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 */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h index 2abf2483..b987e31f 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/err.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -496,6 +496,13 @@ 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 } 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 index 11dc2163..1ef09de0 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -485,6 +485,13 @@ 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 } diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h index d0fce0c5..ea7620d6 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evp.h @@ -35,6 +35,7 @@ # 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 */ @@ -228,7 +229,8 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, * if the following flag is set. */ # define EVP_MD_CTX_FLAG_FINALISE 0x0200 -/* NOTE: 0x0400 is reserved for internal usage */ +/* 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); @@ -308,6 +310,7 @@ OSSL_DEPRECATEDIN_3_0 int # 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 @@ -674,7 +677,7 @@ void BIO_set_md(BIO *, const EVP_MD *md); # 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, +__owur int EVP_Cipher(EVP_CIPHER_CTX *c, unsigned char *out, const unsigned char *in, unsigned int inl); @@ -752,7 +755,7 @@ 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, +__owur int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); @@ -760,16 +763,16 @@ __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, +__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, +__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, +__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, +__owur int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); @@ -777,17 +780,17 @@ __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, +__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, +__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, +__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); @@ -821,18 +824,18 @@ __owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, size_t siglen, const unsigned char *tbs, size_t tbslen); -int EVP_DigestSignInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, +__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, +__owur int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); -int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); +__owur int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); __owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen); -int EVP_DigestVerifyInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, +__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[]); @@ -1927,14 +1930,17 @@ 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); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h index a5053f6c..11f3faa4 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/evperr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -110,11 +110,14 @@ # 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 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 new file mode 100644 index 00000000..af637ac6 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/hpke.h @@ -0,0 +1,169 @@ +/* + * 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 index f7ab2142..a3cbf15f 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/http.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/http.h @@ -1,5 +1,5 @@ /* - * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -33,6 +33,8 @@ extern "C" { # 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) @@ -103,6 +105,8 @@ int OSSL_HTTP_parse_url(const char *url, int *pssl, char **puser, char **phost, 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h index f4155df1..8af9edd2 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/lhash.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index dc344a54..c9dbd1f3 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index a614cd66..e9ef9387 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/macros.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/macros.h @@ -158,7 +158,7 @@ /* * Define macros for deprecation and simulated removal purposes. * - * The macros OSSL_DEPRECATED_{major}_{minor} are always defined for + * 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. * @@ -169,6 +169,7 @@ * '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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h index 0e860276..e1b441b3 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/obj_mac.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/objects/objects.pl * - * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -886,6 +886,14 @@ #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 @@ -1002,10 +1010,22 @@ #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 @@ -1082,15 +1102,17 @@ #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 1L,3L,6L,1L,4L,1L,311L,17L,1L +#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 1L,3L,6L,1L,4L,1L,311L,17L,2L +#define OBJ_LocalKeySet OBJ_ms_corp,17L,2L #define OBJ_certTypes OBJ_pkcs9,22L @@ -1108,6 +1130,10 @@ #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 @@ -1217,6 +1243,10 @@ #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 @@ -1300,42 +1330,62 @@ #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 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L +#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 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L +#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 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L +#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 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L +#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 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L +#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 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L +#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 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L +#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 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L +#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" @@ -1503,6 +1553,18 @@ #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 @@ -1783,6 +1845,22 @@ #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 @@ -1815,6 +1893,18 @@ #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 @@ -2649,11 +2739,56 @@ #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 @@ -2669,6 +2804,86 @@ #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 @@ -3220,6 +3435,70 @@ #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 @@ -4952,6 +5231,21 @@ #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 @@ -5029,6 +5323,9 @@ #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 @@ -5045,6 +5342,9 @@ #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 @@ -5053,6 +5353,9 @@ #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 @@ -5130,17 +5433,17 @@ #define SN_jurisdictionLocalityName "jurisdictionL" #define LN_jurisdictionLocalityName "jurisdictionLocalityName" #define NID_jurisdictionLocalityName 955 -#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L +#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 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L +#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 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L +#define OBJ_jurisdictionCountryName OBJ_ms_corp,60L,2L,1L,3L #define SN_id_scrypt "id-scrypt" #define LN_id_scrypt "scrypt" @@ -5432,6 +5735,24 @@ #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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h index b87a4aa1..7f1ecf66 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/opensslv.h @@ -28,8 +28,8 @@ extern "C" { * These macros express version number MAJOR.MINOR.PATCH exactly */ # define OPENSSL_VERSION_MAJOR 3 -# define OPENSSL_VERSION_MINOR 1 -# define OPENSSL_VERSION_PATCH 4 +# define OPENSSL_VERSION_MINOR 2 +# define OPENSSL_VERSION_PATCH 0 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.1.4" -# define OPENSSL_FULL_VERSION_STR "3.1.4" +# define OPENSSL_VERSION_STR "3.2.0" +# define OPENSSL_FULL_VERSION_STR "3.2.0" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "24 Oct 2023" +# define OPENSSL_RELEASE_DATE "23 Nov 2023" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.1.4 24 Oct 2023" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.2.0 23 Nov 2023" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h index 000d9c89..0446c770 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pem.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -57,6 +57,7 @@ extern "C" { # 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h index 9e20fc1a..b08b0bc2 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/pkcs12.h.in * - * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -44,6 +44,7 @@ extern "C" { # 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... */ @@ -133,7 +134,9 @@ 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); @@ -221,6 +224,7 @@ ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, 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, @@ -308,6 +312,7 @@ 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); @@ -315,6 +320,11 @@ 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, 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 index cf956b41..35759d4d 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -45,6 +45,7 @@ extern "C" { # 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... */ @@ -110,7 +111,9 @@ 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); @@ -198,6 +201,7 @@ ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, 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, @@ -285,6 +289,7 @@ 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); @@ -292,6 +297,11 @@ 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, diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h index 933c8329..abce3736 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs12err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -21,6 +21,7 @@ /* * 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h index f824546c..dc46c511 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/pkcs7.h @@ -134,8 +134,8 @@ SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO, PKCS7_RECIP_INF typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -161,8 +161,8 @@ typedef struct pkcs7_enveloped_st { typedef struct pkcs7_signedandenveloped_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -203,7 +203,7 @@ typedef struct pkcs7_st { /* NID_pkcs7_data */ ASN1_OCTET_STRING *data; /* NID_pkcs7_signed */ - PKCS7_SIGNED *sign; + PKCS7_SIGNED *sign; /* field name 'signed' would clash with C keyword */ /* NID_pkcs7_enveloped */ PKCS7_ENVELOPE *enveloped; /* NID_pkcs7_signedAndEnveloped */ @@ -344,13 +344,13 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, const EVP_MD *dgst); int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); -int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_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 *x509); + X509 *signer); BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); 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 index a346bc74..11a636e1 100644 --- 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 @@ -87,8 +87,8 @@ typedef struct pkcs7_recip_info_st { typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -114,8 +114,8 @@ typedef struct pkcs7_enveloped_st { typedef struct pkcs7_signedandenveloped_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -156,7 +156,7 @@ typedef struct pkcs7_st { /* NID_pkcs7_data */ ASN1_OCTET_STRING *data; /* NID_pkcs7_signed */ - PKCS7_SIGNED *sign; + PKCS7_SIGNED *sign; /* field name 'signed' would clash with C keyword */ /* NID_pkcs7_enveloped */ PKCS7_ENVELOPE *enveloped; /* NID_pkcs7_signedAndEnveloped */ @@ -273,13 +273,13 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, const EVP_MD *dgst); int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); -int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_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 *x509); + X509 *signer); BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); 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 index d3e0896c..76d01e1e 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -19,6 +19,7 @@ extern "C" { # 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 @@ -28,6 +29,9 @@ extern "C" { # 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 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 index 5d5c16d9..d9ef5681 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/proverr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/proverr.h @@ -52,6 +52,7 @@ # 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 @@ -63,9 +64,11 @@ # 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 @@ -77,6 +80,7 @@ # 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 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 index dc86ff58..24ec0827 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/provider.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/provider.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,13 +17,19 @@ extern "C" { # endif -/* Set the default provider search path */ +/* 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, 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 new file mode 100644 index 00000000..74a6345d --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/quic.h @@ -0,0 +1,37 @@ +/* + * 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 index 90e0f0a0..1fa1129e 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rand.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h index d0c95992..167427d3 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/rsa.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -189,6 +189,8 @@ int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); # 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 @@ -198,6 +200,9 @@ int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); # 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) diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h index 6e65a040..163a7d58 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sha.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -81,6 +81,7 @@ OSSL_DEPRECATEDIN_3_0 void SHA256_Transform(SHA256_CTX *c, 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h index d64606e5..2c2c3344 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/srtp.h @@ -28,16 +28,28 @@ 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 +# 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 +# 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h index 942f20e6..2b43485f 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/ssl.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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. * @@ -24,6 +24,7 @@ # endif # include +# include # include # include # include @@ -281,28 +282,31 @@ typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, /* Extension context codes */ /* This extension is only allowed in TLS */ -#define SSL_EXT_TLS_ONLY 0x0001 +#define SSL_EXT_TLS_ONLY 0x00001 /* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x0002 +#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 0x0004 +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 /* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x0008 +#define SSL_EXT_SSL3_ALLOWED 0x00008 /* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 /* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x0020 +#define SSL_EXT_TLS1_3_ONLY 0x00020 /* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 -#define SSL_EXT_CLIENT_HELLO 0x0080 +#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 0x0100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 +#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 */ @@ -433,6 +437,17 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); * 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." @@ -577,6 +592,8 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); # 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 @@ -968,6 +985,7 @@ uint32_t SSL_get_recv_max_early_data(const SSL *s); # include /* This is mostly sslv3 with a few tweaks */ # include /* Datagram TLS */ # include /* Support for the use_srtp extension */ +# include #ifdef __cplusplus extern "C" { @@ -1069,6 +1087,7 @@ typedef enum { 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, @@ -1078,6 +1097,7 @@ typedef enum { 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, @@ -1088,10 +1108,12 @@ typedef enum { 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, @@ -1383,6 +1405,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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 @@ -1488,6 +1511,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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) \ @@ -1552,6 +1577,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +const char *SSL_get0_group_name(SSL *s); const char *SSL_group_to_name(SSL *s, int id); /* Backwards compatibility, original 1.1.0 names */ @@ -1786,6 +1812,9 @@ __owur int SSL_has_matching_session_id(const SSL *s, 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); @@ -1843,6 +1872,8 @@ __owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, 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); @@ -1935,6 +1966,8 @@ 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); @@ -1989,6 +2022,7 @@ __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 @@ -2297,6 +2331,105 @@ 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 @@ -2596,6 +2729,36 @@ void SSL_set_allow_early_data_cb(SSL *s, 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 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 index f03f52fb..9f91039f 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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. * @@ -25,6 +25,7 @@ use OpenSSL::stackhash qw(generate_stack_macros generate_const_stack_macros); # endif # include +# include # include # include # include @@ -258,28 +259,31 @@ typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, /* Extension context codes */ /* This extension is only allowed in TLS */ -#define SSL_EXT_TLS_ONLY 0x0001 +#define SSL_EXT_TLS_ONLY 0x00001 /* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x0002 +#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 0x0004 +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 /* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x0008 +#define SSL_EXT_SSL3_ALLOWED 0x00008 /* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 /* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x0020 +#define SSL_EXT_TLS1_3_ONLY 0x00020 /* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 -#define SSL_EXT_CLIENT_HELLO 0x0080 +#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 0x0100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 +#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 */ @@ -410,6 +414,17 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); * 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." @@ -554,6 +569,8 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); # 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 @@ -945,6 +962,7 @@ uint32_t SSL_get_recv_max_early_data(const SSL *s); # include /* This is mostly sslv3 with a few tweaks */ # include /* Datagram TLS */ # include /* Support for the use_srtp extension */ +# include #ifdef __cplusplus extern "C" { @@ -997,6 +1015,7 @@ typedef enum { 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, @@ -1006,6 +1025,7 @@ typedef enum { 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, @@ -1016,10 +1036,12 @@ typedef enum { 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, @@ -1311,6 +1333,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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 @@ -1416,6 +1439,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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) \ @@ -1480,6 +1505,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +const char *SSL_get0_group_name(SSL *s); const char *SSL_group_to_name(SSL *s, int id); /* Backwards compatibility, original 1.1.0 names */ @@ -1714,6 +1740,9 @@ __owur int SSL_has_matching_session_id(const SSL *s, 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); @@ -1771,6 +1800,8 @@ __owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, 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); @@ -1863,6 +1894,8 @@ 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); @@ -1917,6 +1950,7 @@ __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 @@ -2225,6 +2259,105 @@ 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 @@ -2524,6 +2657,36 @@ void SSL_set_allow_early_data_cb(SSL *s, 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h index 49bd51f2..4f076c6c 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ssl3.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -239,6 +239,13 @@ extern "C" { # 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 @@ -300,6 +307,8 @@ extern "C" { /* 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 @@ -317,6 +326,7 @@ extern "C" { # 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h index f1882558..e1eb9a56 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -25,8 +25,10 @@ # 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 @@ -82,6 +84,7 @@ # 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 @@ -110,6 +113,7 @@ # 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 @@ -119,6 +123,7 @@ # 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 @@ -144,6 +149,8 @@ # 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 @@ -156,6 +163,7 @@ # 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 @@ -196,9 +204,11 @@ # 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 @@ -221,10 +231,16 @@ # 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 @@ -234,6 +250,7 @@ # 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 @@ -273,6 +290,11 @@ # 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 @@ -316,6 +338,7 @@ # 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 @@ -333,6 +356,7 @@ # 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h index 3c1445e0..e6ea3cf8 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/store.h @@ -1,5 +1,5 @@ /* - * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -98,6 +98,14 @@ OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, */ 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. @@ -345,7 +353,7 @@ int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, OSSL_DEPRECATEDIN_3_0 const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); OSSL_DEPRECATEDIN_3_0 -const char * OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +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 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 new file mode 100644 index 00000000..3926ce54 --- /dev/null +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/thread.h @@ -0,0 +1,31 @@ +/* + * 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 index 793155e1..7e3d1a72 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tls1.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/tls1.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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. * @@ -28,7 +28,7 @@ extern "C" { /* Default security level if not overridden at config time */ # ifndef OPENSSL_TLS_SECURITY_LEVEL -# define OPENSSL_TLS_SECURITY_LEVEL 1 +# define OPENSSL_TLS_SECURITY_LEVEL 2 # endif /* TLS*_VERSION constants are defined in prov_ssl.h */ @@ -122,6 +122,14 @@ extern "C" { */ # 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 @@ -134,6 +142,9 @@ extern "C" { /* 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 @@ -147,6 +158,7 @@ extern "C" { # 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 @@ -195,6 +207,15 @@ extern "C" { # 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 @@ -211,6 +232,15 @@ extern "C" { # 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); 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 index 97e13857..9a5b56ea 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/trace.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/trace.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -305,6 +305,14 @@ void OSSL_trace_end(int category, BIO *channel); # 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h index 8ff67332..b09b646d 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/ts.h @@ -1,5 +1,5 @@ /* - * Copyright 2006-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 5f9d8c23..c2802868 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/types.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/types.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h index 483cb9d5..ac132633 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/x509.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -606,6 +606,8 @@ 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 @@ -654,6 +656,8 @@ 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) @@ -887,7 +891,7 @@ int X509_REQ_get_signature_nid(const X509_REQ *req); int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); -EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +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); @@ -953,13 +957,14 @@ X509_REVOKED_get0_extensions(const X509_REVOKED *r); X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); -int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); +int X509_REQ_check_private_key(const X509_REQ *req, EVP_PKEY *pkey); -int X509_check_private_key(const X509 *x509, const 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); @@ -1265,6 +1270,8 @@ 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); 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 index d4df2adc..72103913 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -412,6 +412,8 @@ 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 @@ -460,6 +462,8 @@ 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) @@ -693,7 +697,7 @@ int X509_REQ_get_signature_nid(const X509_REQ *req); int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); -EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +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); @@ -759,13 +763,14 @@ X509_REVOKED_get0_extensions(const X509_REVOKED *r); X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); -int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); +int X509_REQ_check_private_key(const X509_REQ *req, EVP_PKEY *pkey); -int X509_check_private_key(const X509 *x509, const 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); @@ -1071,6 +1076,8 @@ 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); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h index 29b0e147..d3dfff8c 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509_vfy.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/x509_vfy.h.in * - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -411,6 +411,7 @@ X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ # 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 @@ -491,71 +492,71 @@ int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); X509_STORE *X509_STORE_new(void); -void X509_STORE_free(X509_STORE *v); -int X509_STORE_lock(X509_STORE *ctx); -int X509_STORE_unlock(X509_STORE *ctx); -int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); -STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, +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 *ctx, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); -int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); +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 *ctx, X509_STORE_CTX_verify_fn verify); +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 *ctx); -void X509_STORE_set_verify_cb(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_issuer(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_issued(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_revocation(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_crl(X509_STORE *ctx, + 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 *ctx); -void X509_STORE_set_check_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cert_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_policy(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_certs(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_crls(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cleanup(X509_STORE *ctx, +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 *ctx); +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 *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); +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); @@ -565,11 +566,14 @@ 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, @@ -579,6 +583,8 @@ 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); @@ -600,7 +606,7 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); # define X509_STORE_get1_crl X509_STORE_CTX_get1_crls #endif -X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP *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); @@ -685,8 +691,8 @@ X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( const X509_LOOKUP_METHOD *method); -int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); -int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); +int X509_STORE_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, @@ -730,23 +736,21 @@ void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); -int X509_STORE_load_file(X509_STORE *ctx, const char *file); -int X509_STORE_load_path(X509_STORE *ctx, const char *path); -int X509_STORE_load_store(X509_STORE *ctx, const char *store); -int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, - const char *dir); -int X509_STORE_set_default_paths(X509_STORE *ctx); +int X509_STORE_load_file(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 *ctx, const char *file, +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 *ctx, const char *store, +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 *ctx, const char *file, - const char *dir, OSSL_LIB_CTX *libctx, - const char *propq); -int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, - const char *propq); +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) @@ -764,6 +768,7 @@ 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); @@ -773,6 +778,8 @@ int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, 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); 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 index 80f18bd7..7a478d11 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -314,6 +314,7 @@ X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ # 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 @@ -394,71 +395,71 @@ int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); X509_STORE *X509_STORE_new(void); -void X509_STORE_free(X509_STORE *v); -int X509_STORE_lock(X509_STORE *ctx); -int X509_STORE_unlock(X509_STORE *ctx); -int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); -STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, +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 *ctx, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); -int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); +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 *ctx, X509_STORE_CTX_verify_fn verify); +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 *ctx); -void X509_STORE_set_verify_cb(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_issuer(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_issued(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_revocation(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_crl(X509_STORE *ctx, + 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 *ctx); -void X509_STORE_set_check_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cert_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_policy(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_certs(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_crls(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cleanup(X509_STORE *ctx, +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 *ctx); +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 *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); +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); @@ -468,11 +469,14 @@ 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, @@ -482,6 +486,8 @@ 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); @@ -503,7 +509,7 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); # define X509_STORE_get1_crl X509_STORE_CTX_get1_crls #endif -X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP *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); @@ -588,8 +594,8 @@ X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( const X509_LOOKUP_METHOD *method); -int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); -int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); +int X509_STORE_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, @@ -633,23 +639,21 @@ void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); -int X509_STORE_load_file(X509_STORE *ctx, const char *file); -int X509_STORE_load_path(X509_STORE *ctx, const char *path); -int X509_STORE_load_store(X509_STORE *ctx, const char *store); -int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, - const char *dir); -int X509_STORE_set_default_paths(X509_STORE *ctx); +int X509_STORE_load_file(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 *ctx, const char *file, +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 *ctx, const char *store, +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 *ctx, const char *file, - const char *dir, OSSL_LIB_CTX *libctx, - const char *propq); -int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, - const char *propq); +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) @@ -667,6 +671,7 @@ 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); @@ -676,6 +681,8 @@ int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, 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); diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h index 34ead4b8..71b557a3 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h index 75016354..e64da7e0 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3.h @@ -742,9 +742,10 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE) # 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 9 +# define X509_PURPOSE_MAX 10 /* Flags for X509V3_EXT_print() */ 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 index e33c9d30..56968037 100644 --- 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 @@ -478,9 +478,10 @@ typedef struct x509_purpose_st { # 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 9 +# define X509_PURPOSE_MAX 10 /* Flags for X509V3_EXT_print() */ diff --git a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h index 1ae3a562..deede279 100644 --- a/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h +++ b/deps/openssl/android/arm64-v8a/usr/local/include/openssl/x509v3err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -23,6 +23,8 @@ */ # 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 @@ -86,6 +88,7 @@ # 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 diff --git a/deps/openssl/android/arm64-v8a/usr/local/lib/libcrypto.a b/deps/openssl/android/arm64-v8a/usr/local/lib/libcrypto.a index 50ba5b3d4efcb2fe348498b544cec03a85f99508..6509ea27f9879fb5e4b3ec51433b9665bf9f7b17 100644 GIT binary patch delta 1403087 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Ƒ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 z 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

?2%5WE*@^cnQbPLnta~!Z`RX^u?zu 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

^FV$fr%DU%9!19vV)gP!%5t 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 z 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

K6Ks1C(R?Gt2pmgX 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Ð_h?;-`?MaU&4DMOkCR^gSS|#E209bK>BVGJ-6V+-Xg099iR?G zv&Qph4f8?R#Q$Usi^NZ44%|KJzQm-PeI*%0yD{$6tH7~4@nv*hYSSzuRS6TMZ%OO- z#@O~|4RMBVeWk%C#a?RG))UFnL%=5nnw@Ap0HNOzDrbo;Jb)A4r1qJK?#lPJJ=l!T z$b&m=f~)fP-=ROHQID=(fVPsx`IzPngi?Jft|%v8S7itl;1Y$wy|y1bBZG5s!V6mA zh?0R8mrbfClk|+mmU`Oux!#%ApEZ3Qi;RXpak)o~^OjVUP`_~uQUJFBiOw;?tUzH!4?!Z zew`0%Ifhkn(GG^!dSfiSF=q~QXFvYrVCh36q^HEP#_h>rF!43JI<&Qp5v^xXcL`-pKMg2x&z*Q??=vF@7fz8~e zM97)_oxND;N8n}D&nnSzpIkpSci#Z`;tMb>Ai)i}TuFF=9cZpT$Uu^6$hCfPd(pis@boZ`z`4#E*{vjaOZ9xhP{ zZ-KhW*B0k44aB9NIapkxvJ~%x#I0vTr*6L!#9kEWPVC_(IP6=C~e49Yn zfF%P>J```yo;a@T0JO_BEaT%XI%d2KZSs+YsOPi~u&7IIh4SP4Y;d|Jg3E(+{+ZGW zQ&e!Bzg_R%vGM+_LOU>nMTWb2u$qujAQc^I@`;y06<_@Si|BR# z6A`c^NHxvq3~~6h74`cNRz{Hg8i1KX7Se?EX5w&@(Io)Vwao9lLMHCE31RDon+D0d zR((C(6fT#WwvNP4SJrK$sYo8rd0~kRHomH5r0EHqW+O(MI^idWegfF)(WWl)kg9{D zO$f#4n{R8Siak0Gjjqrb%x2d5Vy3JG*#!7veX5einoiq8mFha#v_XEN>Q(#*Ol5%D zBWVx#4bp#@2^aX|Q!o-Zti@h4X1_B#F#lI;FiRMWqp*^qz1FGl!B%MUzkHS&Bq(nEg21^;Q~k!g_lC@*~@ch1hQ>M$Dp(KScYZA z0^Ex;%-(Ry4P;FVa0M7GQA2Ulp{02qtAq6S0xi~ukdSlmh{s7!x)7IH7_)b%P~M^t zj88fYNUBA+KU}WKI*}Q&AO+dm422`_B9deh;o++yQc%S<}r$^8wUg>BroT8qaa@#J=s(upURJPwH`cO5(q+w#I4 z5^ffpC-*anKbLdj!X1)eOybIQ?wAgDNB|m~E7!`Q%SvA`x)ddJAkR&ZHG5MgV8m_Q zxrq{YuDJtuu36&Fg@fN-XmzX{yGpti-lP!pEopEjB{dOo?B)QJ<@sV|oICd@fEx;3 z?^mwtEoZB8^((T4Wpfk|rx?obF2uDe*tk~4Y z4w)T$@Sx}HtCx)7OugJBapay_Zo13t-|YtY;*P)OFd2Ci%5nI(LVyC857OI#EqvE{xmS*RASv4c^-vUNnuOLVz@ z{eT>FM7Tysh{2~ky(4pOUh<$_%s<1=u|TC4PZlbqCW|QA&?N zc!Is1wL*hLj(asK9pmi@7%HX&(jZB}bnPc#PxZ$F$-p(eFV?GDKLq#9r8TA;woShb zZ0wO3TU$N#pa9*J29lC5w@Ump+diM-&lY|O(V=o<8fNAT$(S_1gN)+~^sF+diR0w?Bwo;h^ATaIca=_#9^Y?O`yOd zjao>lX}fwtGL3`>iJzYyK}Egv2+~4nX`z!{*xHqFZaMSWVk~@T+6A+w@}-#QcSK=< z@HXb|YGsnkmOUj9yGvm!Shyau7~~fa;U0^lSU_3eWGK3(20RP{(utAXaWq8Sk>Dsce* zoJfTLj$1BoqO5FmNvO>RQlAR1Th0^n zt)su>QisTHSLp#kers`p;gKozM1QM|gm+j=Ij$!9TVb6667;h2&lUs_0evzP)zsshCb?IpO(f9yM z0lvP7{R-T@`h}>{h-wJA=07__c6_>6r}USwcEZPgUhHoh71aYv@b5#ztNOoe+UzIv zh+dhLel-*c2d(U1~eU#=~YMUM)G7&Xy;qso$ZCFUpl*J!f zS|9xt`K~DY2!?`xFFDTD-I*}qpqbFo7IMpK@z`!i5M9BGJDbZkib{V-5dbyv5%nrF zJSI^1K*NfCbbehsUbarU3~Kj(yG-uMZe&DyRk`|_Ckn;}cW{roS;%{{F!_f?LvfF^ z*eEFEU9)2FFMMit%^VBwJIB+&N~fZ@3k~m9Aeh{h*0NQ&o|i1qECOlD#B|Ekr8Ld1rv~pnfUCfB2 z(w7DKuz6j~>*Y^u4Ko|%PgIFv=0uzJ*R5I=Ztkm+53c&Cx4A?q_h-Wgm?PPy?JI&E zFTys3DoM`v3@~?LsjobbNn_}A`0ETbkI>OWz|tk(5lf+K-@K}K#Djp=*icn7(2NgX zo(C~);UIH7^Su(KFg(;`%A{}K{olX+MGb3s*T<{s@*uOfBl~qLI1=)rpX$PXe*ykG zo+Hg)x(^&XB4fmmffF)j&6uC@)a-&8?A%Lo{gF}T{c?8a4TR3>KF7v|ZL7vmUAs6| zp)^|OS{d{ITMf(n(dH;QYdj4u_5IUcbY@9gu$T6PIZK!hT|z$(U>rjs!rXeoJPDpW z!^ffq#x8f)RF#Z1=h?H^)I5*~Og8&_)35_0Ainunez+@eJR3gQ>?go<*P9T^Gi2(0&@fX2%;l` zAH?Z}Nse&YUt-Czm~EgOo7tXpbCCQfJBuU3*N&EAJFfMvJ(5P}?mM!m46~&m9gEDs zJ))JYV*U_cVT^L?8fQJLorSab|5H1OT8=vtE2Hd z1*A^pbm{cb{%YZZmW}Y!Xj$ucSi^q(y}Mc%h`S(C~ zx&0T%^R*;{YK7ifCem@MCz!`^{GlhyqvJao=D!2P2B<`ep;?E@-GRqm>cuK9_16j} zR5BgI`{~Ae@mk?iPz=!J@)9CtmL+hOEbh~GCT#}QQG{26AoFjBkq zFMlr}r)8H>BBFKY;k*E@hYE*8RQAuSuvC8ot>R|yB&fWgA3nn#!tgtO14AKW}J@H?V`LfQl&0a+>@+A5* zRNC8y6__9!+?GB@+N+0tU674zORtdj)&&3AxPte4!jC^Qu?dV#|tv) zaoIbw&F|}`rsBWA_aR%>=XwLO`?|YMXp!DA;YX}mI!TWLe}Des+NE1{f=Ws}ZYhYB zu7&pX2wq3nEv4+=yB={`ufjh6q~&p#eHP01-7{P#?2{^`MtYmNJTU+L*HR=q^7TBO z00joWS?nuA0E|w6pLG{^OG^2ce!5v|Odo0)NY$lnvGm#d@$?*Pvg|WyFCG(|TIS!D zZk>kfv7>Gy&1jFvQ_a(zS-+>vUX!f03y6v=6=27U+tOBCymb3AES}Y}z_#??q`lRc zpF6U8ES1tPNgqgGy$*r5Fch@()%IKn@I@_~+*XM7SwG|HgC0x2ZK>X(OZ=f;X*+M7 z%vV5+Q_GBP>DJD|Fe<2J{U1x;gYK$sizeI7hn~jopV5{-O4>WX(}xv3c48K4MJ-#` zmVQ^-`xO0KEt}ew-c8!u$SWNkSK4x<-=l!w)UtAGvg`$^ww<8eQOk;@^k7-rt}~1ucs1>4OW!Q*P2i8U!g54k={M;F?9Wlq+tN{cH66k@uI}KFl`Q3u z^Y_5lmbRhNFB2$#nKfBv9d)1QFBaXFz7)rJ76hoqe~|XD?#s+x-uQ0PX07Jm`RQ(K zGEPr2SkKC=r*nBH<5L{PE_uMEC z()nq;-{iJkXDx3B&%dxO-I_m$-(M1+an{;D5>aDn*@U+I*8aDNrw?iGfQ0YT)`!>I zYRdusT3?Cr54^W6{kF8%#evYmyByWKG+tRJ~N96T`OU+tSg^J3v zzCD5?NI6gO>$2Ofvp(M|yaQ}*OZQ<*`jq+!3d;l`tdV~2TV`OkEe*3rp_HhxOnAab zX@1!@4e(ltn=72Jq?98z@t6faH0gx*r766V#xnEFJc~04{?F@#7-=fhkAU)rKc_QO(YN8UMSB}M4Sh2wy08Rn~vT|nVy z@z%!J@6VdOf+kw>;_oDBkGxsbZI&S<7H-J$_VYW&zuEM*?AEXGBOf|vvKcGPU4@yB zmWSObz4xZr&7d2(-Crj>D=h%xu}=0*)aomt)>g{^Vn~}p`t^Vq^c&XEtFW&A?^J}D zo4o;FN-DO&QoStgB(T#jQDZ`*R6E-(IV^G74;Sg&+5WeO0P3wU`>_2h%^*$C0VdXO z$6-AkX47Gc*AifIUQfaDWG@Wfs*7|$d99bpJ($CGbEKoygmfq~dMycJjR%J4c+vQt{f0`f%YksZUjiHe-q0WUJ{R9aAuVmb~h`{Zs1ouuoA^ZNbk9soptZ# z1=~tIrC~KPl{%q_I?n<4^R5QwMfc-jUL^Ja7Tp-{%wC#IW{IodscmS+;hE=P?Xv9` z>}CJq3_zNmTps|7AKcFexB7XNIZ|o8RTi|r?%lK&Q^}N-xK|y5QVaPo687k%Fb_zSgr2 zkM$D>Th5=Ma1W{}uOh))`yj-K|2E;^V^acjFK^=hJM%b-%eUU}t&Rm{_LI;_YmR|l zS@Ww%r?xk);2UP)Ytn1TW%*#JjMe@fPo^FyS}NC)C~o#Ha1oBRMZvS#f3~RTkQyg< zkqP9=asY|meHv|@w9e1ngR>T;WND>RAvJp;1Sc#5lm^Ru6zWlePo}T4dzbbxcG9({ z;UDdIOj1Wq`xH(|j!y19Il=}di3;VH6$S;JN{bTwNjn>N&)J{j{z0TuGuyReIv3=0 zl2$#_F&*5w=-wF%Uj{B7(DCGoD1Q+6AEF`}4xti@Jt4&hBH*T0Fm8Azv?BvJ_PhQx zDkS^QN9;9JLL@ZTWBv>}tLy%c$Ad@f-aX$v7F zOH5Fgl^bOWt}RjvAW*mIu>uJGZ59UnO_K#b`w4UwQ4---pr#Uhgi>*4uV`q*Zb@(> zQy26IkxKCk_EiTl3<1Lidv{yG+Z8;gHs2CPtA-V^>BVr@{tL<*Kc zIB2Q$0HyiwtDqeF%W`xHDCtRSAoLq?%p-qe7Z;{qz`6$Um;-tbD*%hH!tI6lTAl#O z3)#cN2X}^Z4FmC{0rMn(zS;2%bq`9B>r6ESt*}&S2~mj(owp%N)kT?{t>8E>N`3|M zey%FPmHNj|#P}gbpBwdRGv+QF0hC%bb&?utR0x7Mp5n#^i}(oGf(cT z1D+69F^7tZ zs1aJ)++!MdLO#NzqL&~ZVG3)VB6nh_ObT4#MXPrK(@*qp5k2SFEU1OQlwd|os%{?@ z8WFcf-Rf+}*!mqV4|q-}xl6ErD!fq-AJK*%41e98k|39?ht7aFrA18hLc^u>j_ zNUeN2<_sZ>VWkkppD4Z*%b1^(%sMKW)utkpShane3KeWIe8*jw1StMetnQK*7bsb& z&A^zT&BXn`$qR#O4X-dl%6J8pjRUS!*r`zSKIFv2T`l%;(8MyMfk(DXM$8NeM6|RI zzM&7Z$P!> z{|luSd@^@qi684#I7} zTYpa~-GiAz(EKjqM(*+}sK9f35Ja?(;37)ez>`JuT2#K6gGBXmkD=ICuylBsroMvl zG*qWh!xE%mS0iF*{p*vV({!qnePqN0Wqa?FM4tsOJl9FiMipmtVET+QL(i~J*6~2ZAAm!Llq#}y|ubSl+;w&}z=<&J= zR;dO15M`&=(UNjxG-O_PFe&HU zVzDmG13KAYPn?e*0!54+;;A7LC8;fE=^lt2CJolOJMp-7hPocWDbTx0T62|2+Md=K zipOX5yH!&UB&<_Y4X?z+1SIwZC;HgXsd+rhgnKDE&gGPM5erdH6R%^kxfU9Dw8AmCn^$pp>?svYW8uq$H}c| z7YAE95hs5LxF>DKg5*< zq3HXT_3$Z)<&!*5WSh2gNx=W9t9$vx*NVGFA3grTa9mmYFmEw!CEXFnvW+$aGRw2g1<;Rl{fq%favmK)VW`mZ|=DW`QS-~ zpVTdMa$lH1jAh5@+S};QK-v+1a3F2|31fiFm<2)XyJGd|i#7YgJ)7 zmC8qAse^bFgn;8EcaZVAs$nv z2K&*a8fh|pok9+-=l=z(TToSq3`QNuTbbm?P|C7ge$8aI{{-i($2tYx!Gl?y9A$3DLQDUWR{^m zLo}f5&`=&IQYF4`E0J!sbdkPdA1nuH)CoUCH8! z2s=P_#rr$1w3Od3g3j;1xKbIvtF*L~-+i^%RN_4bsycXAPpcaLQNkK%F3yO-y~Jm5 z()RVo30-N}OMSHT$(aQAs-}+<{?yQrFA_ZH_JcMP1$=?cb?TrPkD|$gfg->$YN~B; zh;|mQS(j$HQuU_^E_C@twM*5~FA|K7H0cpIe$0C-$%P7grgbfPI9N+Byq_SkSq8vLp$TSpgx;1?~Z-2AGJJfbD^->X+X=b1hVGo z0t0k5Ykb&6-t6f%SeoveZ&V+o!`GbP6=l#gAI(CU-9Ea4&r(ky8ytZqdDu)qWSy?@ zF-rm6$kG>tvQR zdb*xC+~E4CoJ<|8sb|{!BviV{t?(z`kb!!ZsDJv8nt))C^K`9rw$jQI@!j@pt z9xE_w!14VPby5`U5bwZLx()pN*ZsI0xqAcSb8^dAjrs#BZPpm1 z^*X^?y5LIbu}k`@byODK*PvS^XW(LMK9+onz!%|-glqfoU^p-sRhZTuTfH`HvC(sf za=+KsN>`8wg-rtF>$xihaF|_X45Yg+>5QHgO3>=oBwAKO6}o@WT!VDbjYbrvwaHpb5Lt}vKDR5Gf9nF%tTmp{GghwW^I#7>7kNs~7;TgybQEzN3eN?2!BM>6 zP)Mb7!6AA6de}ngWDYeqVP{Y>RuqaE%mahQpONRwqhSaTO&$UC?20slwn9-#C_@L~ zFe7z*t#%&eiXJi_wyb#7rmUBXz5{&bqldifEQ{#f1O)5YL+HovdKk6!8-ZgLXVCsL|UsCT~mMYNjdFm`A7AEiYnqT{%8Lq8?C(TL3F_; zJ>;h;*2nWHIgI_l2tgy_F-~vw7G5)AXO0HB5% zp;_q@MEcVK=);{u(roiIBUC*_QPPgNb+-7EG*Hw$INji>L~LJ_1SIk5c{q}c0DyBh zZ4mv47yWG|3NPb>zW$kes|vBCNF{4opP;rnMwA9X zE%1?KgJ=FdQ6p@Kx<`q6ZXqm7J4G$UeJti2z46|-6&yE4sr8Z@Fx!c~4mlp=MY`{c zFmI)Vx@gnel`Rovi#xv*Q z`JkZ&GOV_BBk2{7?rN{1mqRdcPsnf~zkX~WTLXU&!51;e}d+35l5u9Pxys6n$?&J{-TL&N~t34>a$}LFR zkM+W>Wv!tis1%_ntZA%K3iU0TiMq?ev-Z5gB?8%6fpI4~2}e#@=h6N_zjc9a>I2h^ zuBzwcl=e~S3ZyhktOyKrMe624V%V9cr#$pP^>bugi8Y1aS5shu(vx&ER={4T_F)WU z5256+iZ5G<0^RB&7pSBF=At70uU)8c;d+b*(?VTD1+79(&ONu-C_U*q0c;E^lB@55r{R{XAZirz6wYN|_%+TGKq`Oy@KNb{@c`NpkzTUQ`ms^z;}K z-i_7fH%krb04z21LDEZZwDhgj22UlBM%m zmpYwF*C3}y#=^zS)j-+PNAkkifM}`d<3=|@cAfTot4ORx1^_@IhW|T(lxK|Wt44kx z5%lSdP!}p$Yctb{&tY#Jhe;j?>YngPGTRsHkeQ(x^&0ZeMq03}GHx#cc7yX!$U^Ff zT%&%?3rZ65kC-cFBK!Z;%Jq{r5_2VUlg?r3juB8Ks#)WPZpGun&0A2P;aF>1~;aNJGd*30fe%`^wIEzkI@M z)NfKkvPU=mW1bu`Xz@BMKl_S)FdxtQi$!vPbooaNq_a^jf+O3XW*OAM@(kL7b>sAL z20Hn|v%q5+(#5Q9rfZ4Ap$j6%t7}UqVlsw^Vrwo0X%=Ra`8QC7#eUm;JQdyN_JcbI z&2mEK@AM<#75Wff^btzP_IY{;<63POu@z8|lc(TCU!jB?-Hzv6ge>sIpnWim&i7o~mp=9NG3akAA*EA13UF;>1S+@xCbfm+6xTFgD(h?PH5+dbb0~m^WweH zA|64s4_sx59w@q=bOJkZZm0VchC|Qxpo&!^46vW$jw+?fyE*-WGP%&oU?#fD0yM#i z3z(au2GP?bSAc1`%ZS$nOOq;=Tm&`Xp{t?%AwsT5|M`Pb;twVD{qMG zIDMHr4ZIoZE&0QX!AU4KwBlPxH$5o*I3Q8XF>(%;LX3yugoCl=r5i{BUCnj3{H-1{ z%O=bXd-VcFg-YVwH0q`FX;*6?8Z&Ok(ub*Zv6~C6ej^aa06Ob?Fs}^tv=+3PsL=(OVDD^&nqIDyf?dw2Hb1uwwtm6pyOxZdQ#XK^17}C7{MQ_j5H? z9q(?%)qBno2TfJEksqI64E!TW$?f4f?)L4C1BtZ`!F2powwY=cV;vv+_ZdcQA=EVa zkD+SLJNU_NM;fNUj5_B#M_i}C3yD%0i^r)z|={a6JwNOaSz@1SXXorJ<~UAn@}&t-!|k2sXQK^tASJ zh#VM6=~4dus~r5Sy`;9PsR}n+P44h75lxmIOG6=m%Vs&k%>-lZiwaHlvqI4>)Y@;P zS{3!3Rkii|L8?}0SF@vP@NWRLz6q;Ei$ER#MlXys8KbueCW|QfHhUace861MhbFi$ z4G4P=R)NAY5ayG>c@_boI_hP&X9R2`;9zBt@mfdn9bjG0rk7rvnB6{;-|23wbucXo zvmTb)GdXgSnU?!^H&D-E)}hpRl$@&y!>t*T>o#S|u+XP*PxzB5(yF7d9er?IJq<^k zjY(ZG{eI#Ai*?qJXm}LovgP9tB>AiZ)Xrx1#R2FPgu7`&)0KPzTKOf!Ee1`(3Nrl@ zY?{QCLBq$mZWdQo&5OY!o3E^DA41Hmf%5^5QZN9QnXDF9I}o%GzIe#IoC!TtW?meP zz@}rc>&-tm1$Tu#p_|Y!Al|F0d5|?lf(_x=XzSB-?&CN!pc-NN42L~{da+vBXAF=P z(t_N9)%D#o@Gt+|76{QbGlb$-r2702YmB;%{C6ztOL1dhrF_@rQJwTF&g}EeeQ8jP z)j&5_B)6BZ=wWGCO`gW|RelG+dgWjFsAi;##D4_d)Am+u8xB8n{5(UN*JT}gmM%ufOE zR_4!Ljjl1uaC3&1oCgYVekB|6vy_xHL}3-O*3(Ge2El78Bm%>p4I_m2&rwRl3&^XQ zAy}J+ZNYJ%a6)jJgB;&EDwr<+$sRBgtvZan{)yIjDmji7`us$Uro#UJ)kJGA8u5&6 zK-JAe>r@YiK?9@cdbVd;)uGAO115(-n590Cs|ORTx-&??PRYjgWi$ZdtShhzIu z=`pKcsKcP>p+zU%`%8l(Y3ncX1G^vH2kBA%EaKOqdWSxE+4`G%I;@&ENvgvqc z<~`O6>MrT-s;F#$zhEqRE04Z;)jCQ&m3r;9_Ls8VDP^xUGjb%v$=^YVe8jwbrh|6-8#EFY^HYu4#yK^-vqp$ zdJNanQ2OO{YY!-CxW8!)qmXhZFG_mDx==lxD&Igp22=eT)?S!w@p(h{nLzwPX*nbO zZ{hBQ{eiP+&zsip?lJJP0Mz6TpN3NXn^yk;Fs|32H}WT#8hE86={zK@0ev)nJ46{w zg>PAdsX7lzu;G3f!Io57M>F#Uj9zU|HxTI#rL&dRaP=^{gP(aYzwEb1jixTcvDCVA);#*E3>%94QXKm~@ToPG zc7JLeubaDY#ma?qRSV{=k)LSS_fNb+kEZ$r0ENzKp^e4kv2o1qt0BM7tih7mfh>pN zVJ_=4>lq2&*{f4LysMHwx2|yr(4lCd%2;4u&oa$or_tE)D|-k)=>-buI$b-j_m>KR zhZppGps+GO3OtH};U)?G%+Kp*21>V`ioUY?xf;=a{1-(IaQ5bLMt&29cnh#ier%YZ zdJ}E=%IYuebEXQ!phNGi*Wf^)Wt(?jHrNq=oE=A)HSk}1njJ5?Jq_4X_k;ub!9BFe z_n|>#+K0;(j*3GcZN?dW}IXYWI+yASPmm)v_3(I_dlPuTZ9w21rA zZ17zU|VT z3FA-xYfoExAKH`mq3yU2?cjZA)g5WFDA)lG+9zxWIA~A1(=oEBES*-)G|Mvo@o(?@ z&|>aG8>f9h#1WC~k<;%JaAhYN_h&9}Jz7ecTofto!DTIg-xZtoZ>@Urcz-!; z)xQQzrN>@a%3oNJpjSUl*S?11!;_dH@38V&f59@Fq_Jw16YHv6VX8xJx|@MdP3HRxgoF-Ggw`@ii=czQyS@f8B=j zb$q6h&ykc3Y16qCQvpuU%M~txufpzrF6Zpr_jvLG1_b&2Z47ARpVCVJ1ZV4bIy4uz z!P_`g++?J^=Ot(0Lf{*NK45WQoePbXh2BLaP}NEcm;*KsIHRZ;h~&7#4JZyUwm-AN zV268vb?#ELmw}7Ls1H8?z#tIXDvb;Qux%(8L8X>kilh;Qvh**cS_?Nc^$Rrr4z_Khgb#t z3xuG?!ghsx~G+ad?y|(}au|x)bkb+Q>dC;Y1^oB`6IC)O#;Y8cMM6)(>S+@NEQ5Coq zD;eVfR|NtFBCE!zz(Ck!7zn?QAkDqMg8aRK0x)94!tPW(+K96#=SLwqnmE05wY$K7 zptuQK41}dLE|BA^UX>nQK<%xR(w3PFC8plOiBB?;^us%I<sPj!KEMk`l5miHtIFt>*U13u+hPn)(@1-;C zJkzc-t(s|tpcRb*$=nRmbtYAFun4B5FwHy%wChYuXIdW9fH8p&M?ouOS`0tsF)f9k zs+soAGF*vPFb!A~V8FCrm{!NM3Z|JygXX&&G~Ha#>X??ov~f(cFim%Cs9wgg$Qd1A zqR08eQvUEul{dI>;Dbyno4YbW4wrP)+e+;H58 zU1rF$@ML&HvG4rVS&n%@332%*HiORJ!XS6If;@5eF{I1L6Vfq-GV%-HKU`K!MuWTn zDRD*NmaXLD2L)onZ*hcC+N)UJ?o~`^w!X9Donb1RdTB=;D|{4t%kzQEvxs# zlic}x8PDetmsus-1~26*A0&HEf(vckbr^EPtq+2&;n?EujPg6B8`I}2Z*2zqWtiUE z8|>Sc>wf44dezgd;qB>s5BvjToVN=vW&of-Pb2`3XWMP7-shj_lzLT6YmCWCWelT} zx6x;pin@Bd^>d-}wB3uY-$tLjBckU}mnLgJmovf?SW5#_T)NZ5CaafZ=mxh1i@l|B zu5|tI1UPPQvKrMJ>2Q zZ2fL8>S^4yqNt{gB4?vpzuVbg*U?hMmwwgIreDo^SNA45q~0jn#hKw^}9VAfdBpz(YK2FZG$RUpadK* z3%)v*_Wo%NH)#YHWynL2l}fN-Ix3tn%-iG(w!l|tO~o$6?lJ640s4QzDvs{Qo(ok4~%dzEi(%kIIV-S^!?Un!y; zZl&8(9U`Q+oc;pu+ynP~?ul~hRj;rQ5?#6@@<3O1CHP zC$gp7sqogu9-&M`cz z(MFr@p`XMp9>!kNAW_B2oo2g){?Zoxto8O^CqB0UP}%dHD$;+BK0*34xy7oFtU%=U z&@1+k&Z3UD+>?R7tEmtrk=DqQgp{jH8lNjO%xwio;2VX$PYHKafr1E``3$^x>!Dhg zKMj-Fe-tEwxIqBw94dn+Nj+s=^lLJv*V@!9qm-=7TSuOUwUTh`l;w%b?Fw&sk{qi{ zfW0pfkX5!NgW;d-S?7~hkCkR^BY(OCGf}O)_ z4Ee?86#}mybu-Ksgt>YCci`n_%Z~eEcX}y)c@AurS`PmJKdslmWJP6V^Av_OzJIQiOGzHq3@Rzl0k% zVNaA|ghe$}6G>NB>W}thlW1Iwm7b0kE8$~s2rj_Xfd%utCfc+t^ zfrQPT>CG^Afc$Uy!x!D7i%sqdNN4;a^cRti=|!mcCwQ;(VjEZ;<1q+pSXi>$SN1bq zQPo$RY%b0{(071qP`yX*4Tk>l05y>riu=re_g5Sq3DkvrwwRTH0~pqzISe_;euQr& z*$6Zwa$pxVu32?0x#AvjyFvH-8!E>8>U^+>DwIfyvwU*eLcnm0JQua$(Aw?IZ~C z2|9ypASwoutO4lYA@2g}AuwQ_UDUUf_EJiH{FbBW6--EKg2ZdtY*WaRFxEU&8)H<4 zmu24$>gK|z49RL0O-P&3T}p9nRk?vyV6lqz#dU*#07jFulqTVIxyEwN7~L)1DIS#&jkK`4XmnLcT=jYG%_bVegjDRUt&SIM5G0jO|*5 zQK&HJ6p1i$1DKT#3Nm!zyuM*C18u2|f$j(L+JT-&@lE{!7a*`4n0@(fFg3wQzDu1F zl^gwCx{`@b)%@{z^lpX<5t$NoCztKG7bhG3(*QYHd)&!#viUAia*x61sC0HrY4FfY^Fu=VlfhDPV` z;gVYZOGzzqNt1soz}@`E<9$W7B>tDci6Zblyp#S*@TB_(PyR2#ljW=&$~9{G@z}@N z&Qih-Q-19YWT%g&YuxXImW15z*pM3STow=X54pjBNP?=2pV?Qg%1H{VopM#O!i{J! zJAI#Am7;ODDz~R%Rue)X;4=hI#-U&#_}tKu=WUs1EZ`Qzy28#A$P{87BUT5=lMC)` zpA|~3I!oe;``6+BZlU4WV~Ia|HLg+K?NVW{MmycU@#X&gCW+ai!PABThQTr9dL6lg z$J(+{7=}d^XklHCDp>N0qg(}?6#s3LtDrb|h+M69dYN3UhyDVxK*7ft`LRF-s+bN| zedn6AZ7ps;>FAtQJ6%U(b0+$?3drMfs;&E1d&%tdPQi2jOK>|~M}&?aV6V4lmEfIQ zGxErY+WwUs{V8nLVsIn9eb2B za_eMcx)4Hdr(Y1QBSc*cQfX%=$zT>e4a+Yq zr^KNBHzoYcPT}qJxpH`ciXavrVkQt!U1HD_Ph3W6H*z(GC6Uqal(F*KXkO#+mPlyA ziDk1G59Q^xJfOz^h}#r-0n3PSV%L&iFLoyJ&OMb+0zxiCizV<_6R>OK9-k=oL*W@F zdABh`DGN-^#MUMM$^f~`+dphpx_l~c-9(*cGsKf%#_osFceaewb!2u%VP^W_*^bOE zD9p+kiKaLRI9@**Y=Gfmm@}Cp6v4nT+&xO}js2DE?U38slo~9zx1A1XAfD?5FowvS zSXBvDaVN)Wls%sRUPXND(XPtuj!#eR$nH8FX3UB|Eo0pz7|m6uVsS5+rG6I9`O2;L zkxOc4WKl|5`xIQB@<4C@Fit6{4Bp495P@PK#$N$pQZo>WZnb^U?qW_Bs~^9wU@$IL zKQfvR2Ss{e$0Mq$_Pn9v%E8u22<20HeL z$|bPVH!Jf8qX~(s&CCpU_aP+~r+QmSnn&AkAW5w>sH-VAS7$K2t9;=f`%0Zdd0`R# zTQ~1W*LGZXw&MavWUYS{?dZ8!O84&WEp^2*Hv+y`MZF1=`-Zo80RpFlXq~oQo#=X^ zzlb9c0YsGlS)e<*f02Z>NyqJxr+t__r6ifIhzE8_qDt)a#d4L1O{}Pr*!kEv?ivTH z=%8P{WxIaLzV3~#dx$ZE_^G*PAIv{D@D%b7H!P)pW!kTUu`0ce`>9y|P`&|cs!V=r zxbP_Y1wSQykEx}GpG=QIWwv$~L?PsTY@TbwAxm+mr$HZgw-F$BQ7<4|H7en5+-Mjw zF|A=9Ky{j#mj5L7^O?I5_jniVUqjvltt8JMKKnRa(vN^IOJ!QfGuW{adP5TRIrlzUA z>G-p;2*+Pj1Ea9e=C7IA83+=GT};EgUMN1(vhxG5U1nOoDGf}S*6{cs1ZJ9Pb|7MW z0NRNM=OOoTaXN~9mSZq2lb>o3PTK51=^rqjT@X8v;+Wc|0jN=glFq|II35?;sr)V5 z18q^BlZA?Q=B(~qiC3o8xS{T{L6hL5`@9EK_CxZ4vsKQN#g0W?LHLEM<4fnE(5CN= zBE@zE;J`k|A{XfA$EGDAJ0MW8_{2B{@Y-0&(K5w1rg*_mH&e2oL%xeap_&hKkYA2h z&a@h)H8U*)Xa>~GF&PtqLZ)L|pUMaa?5~?K4^o+u&lF#0fr@}Lhh=DPrr4ZiT!c)f zFfIZepAAmO8B1X^&;%IT;2_*>e>1_Lc9xM5>YU;5M7#=M1dU74CA_)Fum}+@aNr?c z1uDWc7fKheMS2uwSS@M=p*;~g0t9KF3svJY9Y`GlKvzBTbKV7xJVg9L4uFH`bS+R8 z+%;6q@31&4l?_@4z?$uaXXk55sKmIf7p=yvM+j{v{{?;JVJj@9BU~=l7McL*e&LKxW|g zoj`=(_X=F=@%t$_gyDA}Mwm< zEfw4qvGy@m#U$8nI#5F0*zPpt z;w-PCQ5Hv9G|mPi>v)@URl!JGpDwiXL7Y4!TSw@s>L=NP)wJMX06+<&Va%R4DXzDA zE*$UJM$^Plx8anYxWb+Ghq{GO_bIjysm^VhD>Y29S*YySFjtD5iYIe#WOVaTLvK1f z)i$5X+!16ztYNBD0dvk#IMSH?q`^fhGPc8<$n={en|Mf)o(+Qh0EiW8mi~fK;#;c? zI%TP3U#7iHCzm-Gq&n0tOk;_r+xkl1pz2|u3!HQCJ%=cj#=B6!n%$#dRmklPNOo|zfHMy z;2$@`1_Lh`hdOj?k7-c6A;ai7O^LEY*^eN~4ICXzDRwf_`+n<#DSwC6=y^Ru=Gew~ z{0wJ_iTrtIk!B*C$_TrEmy zyTv97JQLiv0@{R4(uF01aP#V2-~oO3k_UxjRx=&nI}_&f$*bE?Io^g?xf*EXSlA6W zS{z;J)=npX+Q_eWYo}>k+p2W74dHUqP%&p*gykVMKksGqte@Mtpx5r|jnsAIP#5~~ z2#iFszIRl7&L)o>YV=gi>l{A53?3}cYl@c51OH)&b|h*(H122nLAyQ$S*=sn0my2i zt3ir_Cdih-e)Ou_rT{h6J6KF^E4l)CtwCpxL{KOd7xsdt)Td5;TslJ>=zBtYKj+k= zO5RMN{zlI=3pzK#VSrXhe<)ZYSyxv<>+A-w0j|U5j3rqK-&RSbqfkk2<$w{b;Sc*je{tkETtc14<>~fbuzfRa^09|&%ZUF=bBy%OX$+4# z*wyv)3?kD9O3@V^# zSEf;l(NSJ`co2Pw7fKsu(70Y~W!LqTk3sT4Ur6d>P) zDMsltY2&;UtKcBNNFbLimf5w1KK!go3(o~h^%CUkfGI*qoKE9xZ~ z1#M99bb>Li?CKIE{YxjLz;mTs%GS{b8Afn=^+~ux8to%jc#wZ2uxcJOi1vsWkIx&8 za2m8y`5gBvhT9V5a|J$2H43go*euwKZ9MO8mOk{7P2l~L4K5w>mV)5V!?6|SM70m_ z=OTlo=Kz|*!(IJqId5&l|6#}|nfd^pV2?@m3!aJ>DoHVPEbs&{4RUQmmf$Q*OL&M2NJ{@{CfQ3@m~B72Jl$ZR}Xj6&$Pq zcHNSD577ZAY}t83SY04zAOs?O3p3iuPP5XSZF{ z3XVDt$RLcd6#t(d7)bVbn5A^DqQ)qU6)$W;lS21||IlG09zr#QeFSf>aph?K=mOX` zJ^xgHqke&MQm2D@i4wMg!%qAhW7#Qx**WU-c%hP_O_~mQpTafk3J=MCdw~?uyPGzU zLbTxkAjy+iwJx&IoE+BqP0Z{iFCy%z>CS;PQoLqBO6;zkIGaTTb0AB>B6OTbm-U*>r9qz zD+x@#=Zg`ldpr8xCxM10XsXWb93H^1&N7rn$MQ&1l{Q=1IfisgTeKSr5-oLTi%yY_ zVKcLN#=VJe&&2GXQ?uTgKKuYm-fiG!#U80p_34y^JNAomH&mlOJ0?L#UeRKB>l6d- zI}QZ`V&NY0=}N4QD(@xV0wmZwoyn5U4t4URu;hm%ceEYr#hfEJ@G@B&_P z0yfKf^zp})&wX9UVuRPr!!E$_6Q8H-gi=_g{FyceBk5#4k`~`WW@GUGMfv8PV>U{_ z*b@L?;a#aP4Nwz7MXRG34+a&4F6p>QW-1MY1|17^5UIbxg?pR)XqTlKrNy1eQr9jl zqW1)siUCQ2&VJ7aN^YEm_2NBzvfSj2*F7H^Yl9KY| zy<^i19E*5t+k*NSImMG&&icUnx({%rN|huqCB1tLfiH0CE^$US)rQ_IA! zT#yo@Ogw`)XMvb_J6IlMuxrxDa1a2EEPERghA-?MTRPcAph~ETUQgZ8&O^3T(p7*; zFc6HZx*ebdoeP3mz272a<_xqC`HyFWS;)*$Xf?ls-DQDGAB}cLu>28vAlKI#yq&`b zMhqGn4WPK}0p!{5L10ZZ_VS7vtYSabC-(n7UM+lCSF=B5b31>^X4#+e@8d`8|7+d* z`-DH`#sPz|xjz|b^m0Yede{=1fq>8to{wDvRL3YY-!^&V9}ZGEjMhT};96Sc*JgeE z8$#C^;kz0!7$0Flpz7Ev4^yiG&Z;Jh59yw@&B%py?fagpw64Z%Lzjr+cP6X)r75zS4J2T=psiD^e|Nu_P1Uc zu+LuaF4Hq2RZR~wE!xuby_-yXjd?_?nr1LP*3uN%o*t`edWh+9mZl7?!Xr-Al%i7Q zdSxUahpq}SLDe*t1Hx=NP@!#R#v@ftxS#dPNCE?m99GbiR88?rPllDB3#(ZQDR_t7>f<9l>WMFzG_)9XKWho<5)x>t)8Kbh00F1mjg7}c7 z5*E%G%aMRW&seT%a^k?N(FAaZ&S5iFtC}=m1TBQE3tL(Y)bO0Grz`3gd%CxlBmmG}ZQqPsBNhrjm_f0*wtMt06jq?OxjbJRU4k8ESBdTqC@QDdIjS!DYG7WSak zs>$Jm4X){5w3SiTx2yWl>@U0H=(|UrHx6;GEuPcYTNzPQW^_it2w~_QHPI4H3x@@sr)0HDu&Xhg9rBj5=2W`P!G!K z|D4Vv6ra~9LF*J7@h`V{>zvK_@Q#|sMGb}#ZrpmfaY%?Xt1D>y+e>?p$L=8DLi~G} zmou{;Cvh-8$~nH!mplp{uj-jWX4&vlW>VGNih39fDw8=&QG#1 znqHnZ7gl+2*iCW4IESws;E1Q$FoknG04Cu$a^cW^H~{R0`LE=k^ArouJAe>|g(u}~ zOT$_|*9A7Bi;=Wr2~0Hq;Y3RZJcVuRX8)g8x1A!$8qbL-82ZNL4ROl^JShZpg%tC3YebZ1%S1WAB;5(d*MB?cf8Tm zfGv|=6(FaA|LuFp1-NqkjUDQ#Xz5ol8$I&#NS(Gq31)_J;8L8p4+Ww>0-5>?CIjwa zf(za1Phdkh6PuB1TJOk6i~)L8x7KiWfs-9YLIq#>v(s_6lh**FQz+@CEQZey>bW;AtDZd9qIZKk+Cr`m{bAGf5AVS%THBP)4oh}qf0Wdlfov#V7 zq0M`3QIs0v=T14F&jlVxYNQSa_4u!GLL^>$55u)*9xhMQPG{jtZslA!xA4cF_2%o0 zRKy5Gv0I_5klz4B>HIBt3UP);?C}YaxEHL027>9E7jUcRKy?!$ar%Yd+84alYiRrd zoNcAf!G&pTvx85f(p$5mTK`pEt>T8X=t$_o^F)A-?=Mr_kJ_C%k){8@yCvKw=ubFc)}e!M5-y`)DWR5g+z+s(5^MZhs8Znxr|$0(j! z$a)>e5X57^5^&MrcxU4=a5?c043itjBSzL$z~mfZT21mC@Eeah%{&!^isfkeQ=nAP zz_hgQpn_J z^Y7ZuN%Y$Zpc@~lwpG%eTai7fY>WkWv?pv@I{Kb%a8=8Dw&`jq6A+U)B+=f+u7Lj* zIk&r6z8M#z+${6$5#KE5*LF9{cSkwjE@qh6Pv0NnFZG6=MHVcd(&PF8lA{%pcD{Km zJoLOYF_=#GnqyR-p=*tBb|A3+_xZ}n!R_4#L;NY{LOufk#cH?ANgH{8FOvT7@bt_NEN~EeiYsuiZ-*d+ok`usR7|E6qqf^cz zfax4_zcfZeITedgiTqlSfy1KYS25Urc^2ikTnVS#cd+s54g~e&jAR^}%~_$5IQO4` z!{zTVm3x2Ypp#DFe)bwx-~!rGAkam2#gTN{ll>F~x?2D3V0Wg!Gd*+?XRWOen9>yV zhS?9{SZy`V^1YKofv9OeF`~vlEJoL(%Gwv|yyqYr%h3gK(xbKL<(j;X8?|qjnjIse zA_q~$p9?|(Z|3=~!$3;g)diXbEA&{1EyjMq_cNQGZmwUVOW?DXlU-F!CpY-tZfQ~N z2cKIOQ?re`#?n;nsj3v;@cSK~-8ghB=XaGSJ^7g}IV8_R6;*|;@vdH~ z&*}hJ$lvO^sG{BijlnYQ7?_qWRMGGZE;qOBaFHzTy22i2X>8cCFm(b%V=T{IT1%6?%yi_Rw%(5a!EU?CbivkJE!~l-EMM3P_<_!U3Ei9c{pg&7AN2L4 z@)KCQn#N&*II$6X(dd}&z7+CV1R&3fJ+Z*-ZN-586=w46i7&c4@y5iN7QHjYUrdnV zT|@r9(O6?$v|&*gnTrAc6KEC+=*6UqHg}VK!_A8nj<3Z({wu?BjsZM{lC3ER8i2{8 zCqO`RAOpfENZV(D7Zv2_arMf)iyj3CXyl?vUUCAm1KV$GST(&2`@wSGXm^R-ar$C+ zWQ0B^v(8#N5{uVIHQ11RZPR)3UV#7XIq{_}?}Y=D6pr<%As#ESEg$uAp%ebm*aLiR z(|Atn6yA^gvo!t`3#ZdER%vVoR>P^aSRZW6LgosReS!NrJiRwv?gItM#)lT5?rLp1 zll?~Ao^Xhq57kj6pX?r4<`^=bH4?c3i|b?EyKsHk&6MjX{u}64)GKi^UEuOqpj>J_ z(SoV{Uc|!ar7+aQH#T=4`~9Ci#Su!1MwS=uCr$hY^uGTgVp#F6j81;$cg6Srn zBq+5Nj&u#8)BudtalNuJd`=$+)Yk8?BREvz1hM+g*2^IZSeMsVyY{d8={ws^KZmFx z(WHALuz!`CI?-963f)Lt0*wh;G*6H zZS2Hwn0{aBmk9rtiy*ntd*)&!*I))UeFD!r&A;N7w&ou|{AbJYswYAcVWv_NgAHUk zHqOxVOhWY^fcRbhd?ps@KA2s_hd2Z8=iXb4`a0kOY};n6G#jIE4wd!B5DhgX&M|KH z=!Iq3`psCVFF_l|?OBI;Eohc!)soP}@oM2Ok!l8D@tr*%O78HnI6oX&JPpAMTN$Ad z%F%pgh64og2Zsh>i3aTd#vg%diEv?>8kXqpxj^~O635}4XkGt-@Ss#Vq>TrQE&ri9 zn8!9cyy|&>`Y|j~XWAow5dzE6U6uC=6`kLYEmFZ@7xymwfsgw5ubSe+6AjW?<$I>^ zlO3MuZn`9YZ{_5pyw@us)XjEwGWx!@i|Q{oaawH(B~;)w&pAY5^Y5tJ6ar1MoNU0#LtK-x=AIw?l#v|gox z1Af5PogR)Oo*C%Soi2A*#{$NC^gWS^;uDQh3LKd0wIOu*pHNDexNJr+c~66)oL?gH z&yL6_X#oZpzd=hhI7(jUyWJmP(W{K=eRSB87*Anu0QT&6OJXbqb$5c{O%n@xx$j0eF{9TPFX%KXSaq&i9T9NV3ap2hj%bmP!sK~}AF=#~F5U*e~mdmU8 z$!|H3hmY72dpQgq5=rLl-UF&!6BGaC=rCGUMmNSJ{>x#Ls;uhkq{M-)g4AVl;#NW0 zH97HAh(mP5P@vU43dab=xsg<|yNjmkTyCP(%ON@nVCCNg^{a^9ooX2_Y9`-yaKPv%g$ zUXgu|71$5GR9kO3IEuv%!$!XcFyB(GYT0`HLbPRkU{l8%IzX#du94`@JBg<8d=ppZ ztg5Vch%WaZp8hKmpIi@+V1}sv9xFbzlYFI-j%&7R0M_o`F#Gn;2Q2%~+)e-I$^_i* zrAqx4M5@*<43YLPGO6gZ_}~Cq|HUXTO6?s4r37n&bU!jb>26YArP6U4AG)3sqaTI?>q-X3R<)%36ICPDueZc|x_IX`Bkt5H zk4UN}oP1Rhekb8K9lzwU#?|P}8m^dzc(?R zeUAqC1C9DJeouO+Z)7;BCZEhv-N60VWO0S6tX}=y)i<~y)3MTBptl^;sQn}TyQr37 zsScsQQhm#q+c>^1yd?qao*N4dXD<=sgfq51=*HG!V&Z5jLo0G|S4~urdW&-(=XBg5 zV!Na3IxmP@&OlFm8`6CW*8tWng%|+0w(;~2@y}K5{~e3uzt+9G|K?OR?v^ESx6CW; zKTt-v&8{5nsQQejZGTtfAFFPS#c~YSRpt8}0AuGFsIH^ZuUz}mp@JkYI_Ki&H9QZs z2)whxFGWGTTl35Ni|VQA}<5?$#+{S&DaRMfZN6Yz_s0g9$|S92TmU*Q z<=8(VYMf>_h?{1uzuw;!I|SrqQ-bAKute!M#{|;qOQUcQQ#C*rkf$`8eM5uI`i*** zQd8a(6}o~ZkMHql9_mgcf?xE=atXhj7&n?dk@wIz3y_Gv6B5L8dWdDMkY6++ z%d`ExPTsyW0lcU(-PyALee6YkKzXk!jo+I}3&-@QjVF`LN{7l0*V2U-d+BrEbG9_4 zYc2cR2j{X{ke${}Z)xlFX2=~cq3qwTV$g8Fcitt5>qPVb9z1qQ$Sy8|?cwabfd_E6=*+HAw9fdcu#8FHBgf~8lg6Ek5{WA z+xK|cJA%API}UMb`9S*YuXP%Tlq*C^3z3qximrktwP)uyjB~%E+q4)U0mw2J3BQH- zw-tH{TLCb^9hhm`>bqeKbFt8bOT&F~>oz{ zxgOk@_HswsA`Fam2Ky)>Z<9rxL8k2d_&Y{(ulDcA4E^i9z@F6b;8^d0{^h@qPeLKb zK;L5YeiV8u>suY8Mp)JvRa7BSlFMn{)FZT}|9A@Ozsj7QZ)9kEc)#w@{ZGSb`k@ z9?rku%XL~Wv8xQ{@+*$I8|zUOzdJaUC*mf05bp2yMOxODd0UQs=b#pIk0j+yR1Hsm zv!$1+sl`QZ7cmc^TK?V3(zWRs&M*>)S8IO$2hQK0bMzCVj5>r0{*!KY-XCIV+OIC^ z2l5GXxa&w))dZH4dX|Y?hy4u1UZ(UQ?1C$SkY8?p&%-xt?wdw)81$e7H|{|O^dN6i zAMW2L_q}!^YDK$@fE<^Jej@@2K@n4o1`I%F0b=11(@Ym}G*ZaI_a_Pq`qlszv|c>c z`j=-zJ~(XMhHA*xd&BC{_H{1OYxRRvO}n5Ru}iIrsN4;02n3QP6cN{11*2^uFd}`2 z$fLWdnnpONUTb#fLA&~Ackg8!Q$!K zi!bz|#s|mhrtteM2hMfKCU0=K0_~Q+Sewqixq*zWv~~I!Kz@(TJC7K(CL^D z3uzuY4L_Ul%<`5OCcl?quIlD!Y2r>-_p)ZIWXYR|_6Xsyo6!38FKdP#!?ZB$&)k2O zI%sbEK>m|w$n6YNW=D-f%Lh6NSm4qV?rD{k0nc#IUkOG^o1p(wj}$f~afVfu>pd)7 zG9ipSsfye|zoj^E%zmE0IBcB*TqC~QyJOe+g4+xtvI+h0-^k_zYRenA)h^VyR;Oy7 z&`qkhs@85okzPUf_;G`3>qlst)^DTm4aINXpyJ~`$VHFx)^B4~YcT^^8G1mXlAcJO(Y1Gi6znYNF7>j%|-FldYKu9{qhI&5*)+(^LlrdP-8 z-=I(2&-|EA{a)36S3LIvUmo-20_5`K$czo;|8B=@g!cbq?Oouas=EI1Gl$zS++l=a zKxRNh925aT5fuh?Mnv;Urf6Ig3{U|DP0>eCyC@po*+zw!zNOe>c2SfHseHR*`W_9z zF0I-7UT&^{UKb}VbiT}(vDQGnhzg(r&l8zJK`M+2|E{Y*sk{p)?-CmDW4TSCyQvUp z7ST*ZGZ3+O1r*JAAy7m!!qdc>A^#r=u_dWI|v`C zRl8aZD!(ft4zttRF)gKdSZ;;ecdb?qeDJf$yF%cy?z6Ez?8n{@c(KaIeO#kRNU>d0 z__#+^(NMmo;3=&qcG7yntY41|U1%$**v|jwA$=&z9(k)WI%CC>m&ImUy0Hwd!?O;{ zUKK_EEYhk02-@!4N|7h+Zbkn-K$19Rtyt`;oMXkEU%JE9#mcyx}R1JX;&dR zyW*o0eDm!dC7f0g9hP5dN#OBVNk}TPT_=Q$VTGEDM zPT3b(J<>gd^UgS`Fs%Vf!xRr(x3K=0v267$FcZ`I7dRL0xi$d{M_HQyS$Uu}rcYcm z=0V!6t;UmfF{AMO9paE9p0~hQ|AIu5CvxRH&UnAHg|-wyWt18huGX?7J}JqbNPe`olQK?!P=|CRM_ zLK?B)Xgrff3)j_nQrZen;ng>TNFtEdZ<;t|fmm83-GuVAx5~`Nf+0;&t7(y^52;&L zqe5?^LKk=?Xtg%b%Gn+7BBTLy!dQZ&LE1`LH{lw$r@(<@j<) z9L_@8K10PZCDCe8y&(@9^sWrlQhYvI``u^^f2_b%7<4T+U{*KTrag~&kf?GV>1f8U zKwgv&h0!;lR#)Cc`8FL|w;HX-NZx{5NnWTCJhP2$nvxx^mKW|vY&c*!``O3Q$kx(O z{`{FCa90O0$0?f^pk;1%WBXG`uW~tKD*Zl8Py&s>5$Nk^;X3W1NPf>p!AWZ2Sdt*z z4$tc!kG=gzNp9%ByD6Wn?t}&@$h{6}H1R-j%FB;W&CidArfI54O1mWqc?BaKgct24 zq{S|@p7sizZ>v6HtG+V?mK!0p{t7-lkNKZAqtO55d^!(L;?ur(u0z!?VfRN9B=ITV zl!A^5XV!uK#F-~CGZAO5!xLkYbLMSuX1mOpZ7A#b+lHgWodMv^ayvhtE6pv4yQ$vb2x9zpE(?>NLo6$dl+%J58ZAm9Ih`1i~D!6cs7=h?gTzE ziwAbcV+P#!_O7GOc77ZBr~=*#mO1!ay8zQVnbXbiCrD|Oe6nTE#a?>RLfTiNaB48; zT06hL=GtevDCDVI%{fvM;gpXHX{DrdLw*!O6Ie3ZMiZEbC++!m;W&xHIq;DXnz?X)LMIGanu)&UmquZh0^hXBl4>(}Nd-yuTN@dYYK+UtS1(~5BH@Mv zn&)sVsfc&`)*6;w!uKQ&D%*jsxIKu2Sa=K7=n8w=uKU`4Re|Bw=>7)tPu6{1we?wn~;z^R`_aMzp@WBo60iCtbU<0)v-=PmEGif7CXB>w5@A3adePBkZ1)|_V9b=O0u-VPr;a5i64k|YE`cdG#_6=+ts~DzUscL@MAy5 zmG&yPt(%giGR|$!wrDR*tVUVoq1{4n7}{{!80x9s$cGOnVbZi|6EagKkGEuwPMeWg znEP;#kdoZe=*;4h`BHFsS4tk9KYwBFU!~7pQkqx1IDhHi#x0p6= z#%dFa>O6#G4=pZQQY=_T3psi7a~BRoV}RyaoAlGpU7nh|QGhi)t*+F3m406vm{Cx7;UiLh|^WqRfT)IXMe* zrQ}j`cuaO~cFs)tUW%dDOhn7sE-TJ1ETIgkhlCP@qti0;b29U?OY(&L!g)o~Ux-

@6nA&h-6{4T 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

KBMgDKGnL4z5{bl1Emf;tb8;N-|>W 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 X<_F%vEYIcsHLa_wigR5*i@-|;>w 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 z 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%0Ac{ezpya@H{ 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≤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 XC31q^x(A=BMKFbJL$w@B3AoX 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 Wt*;n?U1SLQgSmaxrERUKH2+_Ui33^y delta 1247978 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

9_|aF$Fo*c6qaFY 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 XbWGUjm~~=uvLKOfP!n;)Gz@^=ls=TJcU2 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

;YC0vLY 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

l&Vv~HPJ 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

@*dMUP9T!PpX-VwU`qd@ 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%0A9$OvOV< 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

(fNW1^~Fv z2y$P&H$pt|BsllL;n5uTJ*e)~S9BpN*mQA1ma;s?M4GckaH%~A5g1&BT+3YvHRaL| zhtA6t85=3(n*Jc_ahED^k`o~|z8XW<*XNpb<{9Dy*}nXZ(qB>GFXVIAoY3lLiW9Pk@jKQ%Kaca*u!qb0+>R6r$`fZh zPU9YVeKS1gcvEj_xH_JL-Q@?|sWuq|wxe%^cOibm#t8BH-tjTIbbxu-1dB!dEqO8G zKdYWxe6E2JAH`{u| zdQeo5ss&$QsDF9-xI;hB$vSl2($dcA`vIs_77@oD+xnlxV zge}k%49%iLG*{*CFsE3`zHA{clbYjr5W4&v~e4@4>xCS|1L zktR&*zYws*2V#qRSynKPN^bL)Ts;T#_Gk5TPl%RhB>(c83}o~}QHXGz;XpT}qr6x@ zFB4wql3;SbE`$=EC(O#PVEue4O#hUBl(vMm1tlW)eDt=hf4Aj{*41!WjC+@}vHxz% z6e%M>14$lquyWVj)lEd-W9uhs())1T++!=omk^3^E%>Psmf5K6HQmNPwKaVZy&oIG zrS%>pcdS%ZsC^ysDYu;C){szu?d)56h}%iQ!9FinaLRY!A&<90B6$W->Yt z4xW{syHTu9k!h{lY;7tT%DT8|=^O?tZKf<^Ff4DG3J|Zfl2^c6rFn79K^JS$1FY0~ zjP9gQ!#|J$YV6HiHZ*ekBtJvO!B-h0uIwP*iEGcqI7BO%eC@$IwQZEifV z30Bc?{}i_Gj^HG$?&Pm~ta_A;W@HV=sqxui7IE%NZa}ZpM^yJ+{c}*St-B=o=SOZi zp(D=I;u6dRTv_IWimsM~K>5K$$cYa-Fq82-AujtMrK^q5Nf);RFr^1d^VN4n114Ic z|m75qm7Vc#$=js zk<3gDS_=U+iD^D|48Dz63hk6hgMx;Qz(ex(9Vrm~gX1Qe{gDsY{vCv*^!Gis9;2nl zm3B;u;|_lJ0BZ*9jiu{gnJ-bDvOVso$$JRv+%I0%;0C3KxOuOw@96q2nq$)L_b(X= zz=glq3V&ewjga(z#TIDH0*07;JCwC;`M#D$Has)@CCFA zTbpISWItrK#Ol%`vP|Q)Uv1Xz^>3@T%?TI5g^}h>b4=E&@}l@TC>US4K@2J8@D)t3 zrSDt`Li#k3Y4Ueq$kJ&_+eLwDUi&pChkTP>lc$$GzeV;eigIy>gRqPa)_R_6pO%54 znmp-DxNQVeq*e0()mJp<#vl`*~pvdD;}g=Iaf(ntcByWUB9izyc%(W zH9<5#ZHo|ZnR7!$OAoAPugn-`=p=1s@s4ORVZe+Fk{-DhHA^D97p5UEymxQc{?%B- zZq|98Ly+ek$F$;OSoO(|Mxknpi#v@Q@jH=PW7`C`{b-GC#kI>iN*f{KXA$tLp`Se@ zxHI>;D15?J(DUaAB^ll6!WjG@hT~{e9@d9(RflP=mWxlGu*LM%ME@l#I*@goJ<@J} zEeAYMbUR|}fy8+D5nG>#dNUU~H>8|jIc-+4)OghiC>S{GIUK{#E2(ty?L0< zebROt7~t%awy5qN16J6KuDvBqrvSA2j^d9eZ3B>3_OGS;8ZoifHXUA_oPUD_>Y`2e zbD*5eKH_4n&0y#)SBboxGU8-*pNUDL{!v?qNIlA=KjA-m)HYIicxod-TA#M%cK!mt zJ4Ht8)ywSN(;bBEm~F5*9uGm~bZH61O}9>2SK`C0nE!V>?5{m$TcCqu`rrFtRek86 z#oCRa3;S_y-9En_4A6h=Y`xmO%`>>1*lMxOkJ!&59`V~oBDdST+!5#7XAAa0xIs={ zS{NK>l+KgN8HP4QGgJ=MpLtvoGfe~S1~?EWpR+x#LO}SdPT0=r65UI0Sv9g?;qqHn zELd2ua>?>VD>Q+mc83%yP57R-y@9$@d>X2|wj`KuCkOXOjq3%QLsXS>xg~#;2&Lml z;W~T~`AV@UG%W2S>hWrbGL$VxBz%;J=IvarqAM?Qe*_y)QSsK>>ZO6?NgGd~m(c$h zar(YUq^cz&hQjiYOwyNrSb#sPhs9Z$VjUrcoCkWL`jFX)C+$f|{K@yyskEU0yF{SN zt}mfFaZcbaIzZKpwRF^(Ll_rP@fceq-k##@vHBIquPQn_`pkuyIR&# z=+XT^x7;%xNG)-Zx+(D2r-w`Ji({g4$-o$GkeG4j;uzgK;o|KUR6b6UCdHnpD!h#5 z%I0uUn?nE!*KJU3KAEyGT%7!bs9dgB?t?yjnLYWqxb(6uCZZqFC3PCMdfQ)`=yu8$ z7qM8X-e|D)Z~Lnk@kctmCB9!YEya%o*o|7zGRcenvt|;K*@5?&P+&=&1+!uQop5-c-4L7CQ0 zfsV;MUP>39qN1xyCD-Tc^7&bV(81+on>76l#dvu}2Nq3cC`U+c-x|hn@Bs+Y$Jdjw z!U*j5ZliEDD^wwe={k2)xcZA^RN6ess`05InV;%(}3}&!PxY@cqfdVH*LwHWlTKVio&dy zR3CuVsk8_hK7yWhJ0b9t3WCJ}JI<9u)fVXjs-+$#fpQLxRwX7P^P%OHD}dbBMwop^ z+;l>c?ZI`tlbdSO5tHaWRNa^jefK^FSH@*yV1&O`Xxe4*w9RoXeyK!C&*8zo_b6Z~ zkTW_YEZCQEKjd-?lv2*r!3<$J>Xnvhy`b}s?KB}_Ke-I&()EWSQ&PT3C9Arl)N6=t z-&UIAAYA$95hZUU*)`5YW^>?ebkyLQZQLE(Rp|dYkEKi>%0+!mJ4B;7r4Lk_f$mDA zMrsxX{)*c)u6J>ZMQW}GPR(p{138Fdk(!wH;+p!l<|lHpc-|eE5(OPt_)i4&_ejWM zbG|1E2eXx==&Z!KJK4Fbwy!uTKbH~0l@RW*a$wND6eN1B3C1gZ1Jml+!47gAV-HlD z`Bc%UQyiCaG0! zm1*#S+Yi+9EN%*cYYCsrYvzYElTUhmYzjw@xaw7ujFl0e`c?Y~YRT%C<7ae}lOLe1 zn$r|1`*a}WwEShbwL1#R)7L`dpIFKp=p9>{DBHc*>`#8zc3LZvA6=|erV(NW4?^EM z*Fp+w(n)IhHqy!_pqb$5ML%*suw8&V z3zX;GVKAGYLYFek{a=;bZQJGZ*1)r5L~*$rpLd z<%~y<-t~JJJT^a1sO0B6@%i)+mQ8-ve{9o-MX|S}-qKdF*&zL4sh=hPS`#H)zqxpm zX?a{VAE$KDeqJ;OXRPfc`s-0X&)$wk%G{T?cNDSDk!uJ|=iS+fhI8a+b|(rqAL3Wb z$Gn&8q}8Tc&DLUGGHP+vlB&h6&>GO!Xk?LcjB?s|i~8#tZRI+V`8wiFRl2xR&Y;{1 zv0u?6wOf?`&Wdh;t~$;;Fpws_sJGTr&hh6Y9!An@XDn8Geq)pEfL3HqMd7|IhHT>@ z_CxiS2Z8!YC%So_>2iFS&KvF*>`#-c>AK}}(o~I_DLn3SZs3WT`?)P4P)_b8f5qpv zT&<}42}9MKCG@@Sc~;`O=P<(sHqMn&T2dZwb1$%M&%MLrQMvo7x?pn!_GRllme=?t zxoVpx_pV|UpPWkEV!7#BSJH6n$H`&u}gA`*P$54ZpG9^!v>WB%~*6 zP=zmvq)_^zKxIb88T`#(+Rg=uviI34*>#*S1@+=L@HJFg>DsQwoT?uk9vfm(L+kLxOYFzc(BVS8MZtGLQ^W%j2_ zj@|UXxFf%6o}Us}iGby3jEvBsQQ``jJYT1bgLM5Qh6{w?B%hZ%7NzDzU?jIe7QNp?mMvB$XU6>?D^d0zwyWB4 zjT_kqHUE*@RiU9XFEG%GAJ`G9Ima?4-2DTG;4c_xeqZKMMn^dKL2ulwY>4Y9%0~0p zHv9-wwVRZ;y!zFVh~`#vl#-if)AJ{$(y+u-#j;$@N1&WWeP_0X47p&Kek&gEPR-`R zmY!JZ0ui{;Y`X8Bc}A2=mW!vyvdnKSho0%rOeJ z=EL-GwQ`bF?VM_OSMD+terOEG+yxx9m@ZRUkdZr)^*TFwBz>pHcG-QBChauFkYeC z)vI|4WbcS0vg+6gp~Ol+GpkPC8OI+3kYP4>(tX9&06~{^70tKDMafm$cv1a1%al@I z3KOn&EKQxKY{LXjPyo4K1>L!qEP~}I4~oLij$hfT$t&3K20XL-D}J>l=>i9*DVsLb z5#ml~;<~cM6(6$r<(sJT8W5DNdrPQ`o!5cob>~GekIR8&`D7h4unnbxlnW_vw$j0~zID&)$B-Gk&a-bsT5jTpyg^56r z7|U>LHv=M-%4y4E0xh~)8H35Q12(F3uo(OAJ@^X%-|fl;m;O(5RfD`JDrR*s?5d^2 z^~I=f0Oi&U1?APv;hki7%)kw*wJ*>GkU_EZOXa>m8HY4zGaTig+8`iYd>vF@Q5wQO z4AI{dWVdJoF<)w427g?~YB{y^zv|gk(x$Tw@ZkyWjfRkNdD{ogpnhVK}gy0aAqEbhYq@jFH5 ze;vRUmu@?Y4pXk_BFyI8HDI=i=NRdALNWOh$iAwH6S>jDSQBVTInn5`q!nf&2F`KP zhV&hk^HM$o|8NA8agA=woHxg?E3+G0eL0*0RW*4FeDvI-TyM3Z%tQ8aa87z*CS8%< zM{94RTw^E$FFneb8_Opfe0qC=Fb)Nas?(Z#S-z_TJx*E5K`PeU5klretLIL?p9=dV z16%stD7ye5b%tCtmpG+FZt!J}=alLd!2jpK16^;FaeBP5Mq0hdNK!7beN>;$ z$cwz{Pd2b3Y}B5Q9ef{~Jd$neFw^aTV|WwzsO7VDEN$Hs2Jkq-;noy+B4kGHGdHm+ zSD>uR79*F4?M*c~W&SfA?LAqlTX^J~o*&;`{MNwbJub_XoZXIb0!kz>L2$a{Qhz)0bd{Fk^5*9Jo|u##~{SiMjn~j z2K5)Hc^E#D(Y2wm%Y$~OQqk=_d$ASg?N}np+Jt3a-Ay#x(YsWc0P5fLPvXom7edd*}3-WC|~G z1;AmTx!p#ihBtyyy67f)o$pToxNV6r9o`5wg;f^@ifKgQk;y1vK7?N@V~;@hbKf_b z!>bnr3V4I?p#~h~j-dV*Tsf4-+0(;QiUQfSp`x>cY6%uE@J;E7sIbM$@ocuRYzRVdE_`=yQ`nUi0Wd`B-jp7PR-;s%)1p<;X(DXK+0d^C z?n1BUWFI@8!93|Ek#rYlyeSbe=0(FqG!Y89N{jCrY6{DDUxVaHj}zt5W6j#U037cd z7-$~%EH{bOci+e5*vHPDvKe5ts|m2{5ZXTWe!j;0!6$v}diaQ)3MR5gAKb=(He{oY z(gzKh7CytgC4n~1iHI$Sfef z`ikXqkjhz0SQpD|n>qY=TVq$W_}8Mb0per}?#z;Rt<>vkF~@p3HVy;U;c24q@xo-G z{iMS%-R>#=w-fD=A=l&(UHq2^+E1w%32hwmGlT3_T@ywfgYDhn!1o_)@1twN?q#rj zs5m%bgHfF7V>0#DNSy%uua={!puvZ#mH)5qWxcuz7CQ5UKT+|0OxJHf- zu_uYD@1tTR*F2;!(lhgW>C-gEpO9it3JP(->a~c<-+C&AgRbI8^7ihcc$mHU`cSbu zuwU#|O;m$5F!|d(uF77u%jfDt#rnsF_wE$%C>sd$Xcha1+k0pcIasCZ4k|P3Xz{P% z_PA$9*#8+6y<*j>;(`F@ebvI%sRizpE8HdG?NRntQG3VD7JqYwJyt6YY+o2DzHeRG zQS{BUKQ7Eqp#XX@(_W!174hrLG5(4h?Db)MOr31sp*8wHnQXr;NV{7c4VxP$EQhe$ zRzXIZ^j1jDSc}15dy_qukSfQx2Hdka4UMz8gUkC%@?svh*?f_8`#|jUr4Itj{MEry z*Xb<`M(S5q@%4zJ8%Sks)uc}kxQ)3y<57*g87;GDK~Td;1Q4v$uPpp z^QoJC0+PreGm@upC*Rm^0Sa3iq&!EejwM)g%&w;KbHNTY``l}xQC}l!R??9 zN_X7~l=X%%ZXpXCDQgL1t;=Vu=ae(=tF+cIc!|O9oonA3Br@mQt)gO{BweIy2Jd`( ztf-Tp>38#4KcCJtyi)`@`TcZ2zrb77;^e42fdV;ZI!$@3>Jy@5)Cw+v2H5NM1rRaT zS@twim5&D2L6$f_E+op|FwdT;Mf)p$HdT#sfj$(MD)5MSrk(}Jb=iwW^SjJfrk}Tl z=ezruB{`9Gy_wv`gQ!%fF=Jh0Pz&&xhZWVC(KNw573S7?yuYVwNXA$8Q` zDK0>*eg_K+bsqp^sbVzM(K~{vGsBFh2L-A5)@AMBQG-=n<+b`y)3k^2f?z-CH=A}X();Fy(FMqZee0Bi}-9_EU_Q4 z;)d~%o7M%)#AR_w(Cy+mthsAdiNWt)U|-!44ilI>T$J1y6^FzimFv=N--+UB43xFo zUW#n9Z;5@A_M&*C#Qvi1rxkipyprS;@#RXAv&F(y_7}AcqVHJGTx_5-H8|%o5-lJ4y;~Aoz(q9oJhlJ&OE0UG!Z`YD?J$ z937!;jbo4v$jZW2}Z-j71c3k7YLXMH79w(&N*w4msF8?{}xqxeu1 zj{AYyv*?q1$*kqtLZ;TMNxTkuyJdlT1wDHSXu z#iCOCn1Hh1d!^2J@%;Iu7+vm2@s&*WNK4(sX|o9|H3?Bj?mC(`iIevX?I&vI-N19@ z0HNWkr{!@xo`^}1u9)aNg~YzX=uq+PI{PTmoWz^w*x>2h&BqpU5B>l{wRpWfU3fmj z$oX$?bw>xAnA}p$|Eu-(F}fO~80=ZuPfWet9)q8Xg|{=*2KUV1TLx6iCmu9ChtitYqU7xv-ftq6|KpW_uXGZRKNM#pLtKCjL|N% zjte%HTtPt~9%YL!`e-T(xrAk2yAvdtXGM2H-Ir}H;jeIairhUMf@`ysEIpvha6Z5B z|9{Y@ECr{lg45owcYpZvSoIHoK10k-yCvi#BJ_wY^|_ilS|)@owRNZ;szSqM0T zS6VcP(`gZB`rQu`l@+PGW~cnGiP_6C2BIa&7Ose%!ro((bncHx>zGcng@H(=n}7;~ z)Q@;vtI0z%Wx#HwTPR~O1@iuTSy?6ySMXa>v>%6~{gKS# z!pODfnt(nvc%aWG~J!M?FA9-<>X4p`RsMQe2C2JtTY%B;@hT9 zO=X)-kzBwlL6S%csDPrZ>oxU#n%RmAiu#s^2OVrz7i#~1fLwY_%=laPICV^SF z6h`*&pSs^(_LrmN&wJ1goBZ0Q5jnF`0!K^isj_dukz`-3Xe<#GVDHE8~YnzOnBz2giLXJ%Hgp0rLwcm*M30YeFzSllMY6!)M zR!_HZ!9yTY`;|C4D7j5HJdKZ2gekMT>`j6t$xoy+CxV}}+ZL3q$P}&%phDOFv`Aa&ybzLOf+9H|eeR3GU zzNLm`EmG78_aySTm*tcfUe_f{us`L1Tu|>#v|n?ISb_~ZxX|hr;We-xb%kBI=5FG< z$Luk_L=4TnJ`?2Y&C&(oLby_foe**@8<3*A&n%?8MAg=vE0CST*HCfyEcY`0hDYtm z;);@+Uxra>Q6k@iLlEVL!q!c>gf@X=#5QC zmbb`ke(VO5?_=cuP11v|<-_C zNnD<&6pNI@_N}@rA!7TQ;9h7Fz!9uJge`~nR~ocF&+zM>xPe{^6NdRlWVC-0dsevz zZWxX(hvgJ(9i<{Hl|X#=MU=N7P(K@UBZxz z{)tigP0ckUjWL*5!`v?+QCn}=OWG!+yB5jlH6F2Ni{zCk{I={K4JmsBsYspV5W6KQ z?d}H?ODUv!pI%Exk8XkY^)k7NDJQ$;d$@|e$F=k9b4zGZ8s7U;o|KpInb8a(xiJL# zWHh#Sjd_S4F34XhW`Xkc>RPdfHl(0TafFk{Q6tvY13LO7@~>DKJ5{BrI0lMe?CCO& zTq#pkk}wsCAm=C~xeD^_UI8D!`X4N6^T{D5VH!6vLQK6mG&InziYk@k0kV}q-okT= z1Cde+sM?QW^}c_w4-L1I=_-SUcRj`2)Mq3iQdkH#@H(ftc~Bg?A)4uHd5XDK%@WCg zBC;HOWcn?`BV3PFpn$5lr?pQ5RMk-2V^!ngahgniV<=00Q-9cL$9T#p;h0ed*KU;3 z32)J4*cVbGxoJ-<>(p%(4}xQCnTl6Ov*k80Urozc)La?gsr8J(;M>So%0WC-K0|}W z(jBlzx(N0pAiz+r5mNR{XRSkF+j^g26sm~#3D)2932e$(6{!4KT4>1V$85dA5?dlR zuusM#zNwDr0n7MtDD%2!H^BhijFzo0oYgYete)}v|zSak~5Zif|w!S^Ty}`3DMIzFY zaLxq%jkO+(KAnP7mzC7ky=#Hf+PZT#xn~=kn%_Fm0jTeS2k=3q~GF>zf= zIF+%P^rk6z5`BL!3s5UbQ$pz+bF|6V7j{PLL(Fx$4AxdP8{AyCg@2M`WLKv4r)((| zlwdk%%`j%~ni@vy5iZHHh8)g3iWWjYXi6tBXclOy=^R&h=C|}a>FLn++0y=tL!qXy z!abPTdivVt)s~^TP*KN#l}y@kg7#`&zJ*V@n7`*ocMJf#CYWwt+ac|fDW%eFiCI!^ ztbi#wv;w9->_VXa9Q|qj5Y}w%dgkn)fiQocloz6b{VY0ts<%>Jt#pC{hiXRs_O>2N zd9|<5g*d~{+>P@U22d}M%9ZW!AMBG+a_&B zDl@5IRg8j3?tKin?&-7eSJ^)&R9If%!nrsx9FgH;0>kR35XCE~ zMNbXk29*DlN)4-;nFaLbeJ8l_+gll?{H(A(2)rj2gGbM^-6{%a(T_679M$W90+&?L zDu11opE^Dg@F;M#_ws2bPqozSlD)j1b2P%z)_?a#u1=#w)Kw?wgYhr|L*?P#vLunu zS4;Ru`cAhNr!x%?7~$5-%g9><=5slqL|l(m!cvqrL}g8qXCx!4%U`|&_i`wjwj~J1 zuYDmuVmN%p^t}OW+%y{Ts`p2x>GVrnRfeYB?AxV8Mahi7%jeWSU9e@n07&c0?Q~71 z3CgoUeiqAMNuDqS`L(0r>QqaD$J#jw)&O`V2rqjb8nx^&JmHFE=&=3Icab>$YWqFi(tiPMNetk5(8#<= z-|jVA>7BgS#TiKzx?Yoo<=|a&ksjCXlj12ev)V8NtwS~1;x`a%*S!jVwDmQ6rYh|F zl4Vq5svDTV%FLuoirDjfy^;Hu2-6}qhGq2DaTGk#oo>?}rlLt6{+6*t$U?`0(i)E; zV!3`nH%arbn$!oN0;EA%{o=9QKhj06_gPM*GUHMsPzrTw1S$-6L#3Nze}?Xvt$XnS zDX(oA3)^=u=@l~lTz^Tzdbo4`mlJ!7k;!>l-`x-2E1?BjwpvM1;nNnT3 zG6Uq@B70ysEom#+jqH-HW;JmxZ$E~2I)@{YnPwDhKrdstak0up~ z5=s|@nGV&_vhFT8#*&Awmc@IDJ{l*mUitD0uiJ(~fI{p!A3`NtWk$Ko*qzBTC;K4@ z8t(ETag}Lalf1|z4_$#OleDpdl5b(vvQKjCw@qK(F#w?aYt}$ruod@n|0_bX;za;h zE^?UEMV)dxR95u~h+fqL<3u0eZ{QqN4C3^<2ePnrQ-D$?<9Y=s+Ql@f>XwZ_HZB|A zm5uFP=9~5~@yR17SE6x1}wJyhRq!+4>?RshYz~Wq#8LACyl?QLxlL};qY+(`FHIb+yur z;!IGIXm~r+B36H3PuIEP#E}o|8}UH17M+X_?WMZ%e&Wc7q$H)TVouK4-MXUw;>bDs zMqO=xOxWy`v{wRR=-d&J=I|^11I=U`#M=uAxmEw^{b0|J??CA+7%X!6U$kKzAqIa0 zyH#0xul`83njwymqP-w0J1prZEVuFY%^iz>j>|=KH#^26F4=yss zi@g{6Cu(02CAY_$!`hVF4~B`(vu`0l=!l`XN-0kE-}#CCRikbMu3@K4O7^e&-u^-- z-H4GQqF~xU|AJQga#PT-k+>i3RhS$+YLsN%Cgbq=lhBG#k&qc@^yfr4b{cw~CxE5o z3RUy}tC&I;z?{1Y{+cxX2@=2ebo2;wArLGYV0}(6;(Ix!8?g~fyBKAC4q3i82`gv6 zx0ja32}?Db3HJJ=1N7+d=k>W51~Z9gISOc zD4KSliJUx_)~^f{d*?bfii(wxISDpLDgI0;aDZR*sHfdASsd$(R3qh%zGmH(!D6r7 zF(%;E;E`{WyNI#NVSGnMcD-;*)uf z{%rrDBGtNikbgvhqcM!n;o|(Nxr6-UmN?R;@HtBCfAqdVV*8D&h6?ZKIK98=DaS*G zpke7l#f-W0ll@0ubWH8d=WrQcY@kT~+)*c4ve;P(r_tZ~x#Nst(YAdzUU0n7mD1@V ze&gC?|F(^W9$Hab#I|>@Cn&GwBN5_{|K0J3HfY$WR0Yw0`47jWNIuiV+2*|D;B*=G zPWf|o`u9dSi_obtg<^T-N{bnJ7zKhfj8wcb!01J!>@Z%vp0;45R=#Ck6p9A-;T<4~ z->b-rB9MZ~X%@REx}PJ&(5}wj z!LCTO3|!6QOd-nEfhg(fjM2LMcXxHhX)WzK0W!-KuDPoD{!e(%0j_cNcYh8S-dV^x znq!=?(nZt>mqqk9JI8C^6enMCB?zb4*`??6uylWdx&9dchl_sL+(k3vK-=$!{Lh=6 zcHICCW~)(dO{L@|w~Jq-e+E~O^n4I#PJTD(#JC>L0Z}f--&<2X^Nutrl96H`#C2nD zj3)SsbDa37hx2D-U}s~UF_HfRgkNL-KOp#l@Re3{ow6IHlf7et$M1(5El2-QoaVWQ z?})nsuHR{iz{(bLNnI>{ADH_7T1_Q!G%m?5#%s$TXz#L=V!gH{!DHw3^v~_>ybDXP#pVPt;Uh~Rbcry{CwxcoVsn_tx;Z=w*G}5h zUclPj5xhRs80^pP=giO!%9?odprOM@3>u#|Q*+A_chSO?ngvT1FI=@+BQ;AFu3Wuj z;VR9t!do=iQ?tg4&YeV}_%6wr9mu z2lCvu@%NpI_^3S{BRB1B)((5PeD;x?}sVou**z^ z{HsP`+4-0#+A*@T==@o5XR&o4HLia)4RpGN=T@IVdjM6FPB9@edfYLgT{N(Vu1D^7bL*N(CS66C*#9kDj6wEc zVPfYUIJY0X>Q24riXACVin6qx7*KlUKA3b3T2BY@(d)NGVkUUL@+NFo_uhciE`bSZWmMv)?hU+kCfZAaR&~Fx%GNJxY{DzDm zLDanoQ@&anUM^UI8DM=OW{1H~p||Gx6UXAu)&aHtsa+JFo{cDG3GfrA@+0k!6d5bt&P! zD#zfF@V>frV5F}Jk;i5GFcWUbB9>wUTYV=^AIjevD3t`VWPHZx&7p*3% zJs12J_-hCie^7mBM+M$`Ex#SS6Qe?%X5h8-1DGkwzemt`YZ=y6_n}tI8|v&D_HXLz zG#MI=sQhD4l)w6)J2JHXF&#X)TJh;ESuU~s%bU&O)50jTI6T~GC$#>%D0NLFB^>5&0aTe5j88S0CX7|rJjuO8ly zY1-ADj2%J=PG;Y~a z31!M_2DN{2!R_)*gtyRySIFu`1fNcMcLwz*jG>(evamMofz^~{ceq*ml(-~KPL<(g z%IB~#s$WL#+a`fm6`Ed!>Qw9D8a))u zLlhn&mQD4!bpf<~SP#M1X=7Z>6WBS1}Domz=GHUI_ z3*5Z|p@>qJZ@`8uVA$9?g~n8@L2n~Z^QtS62H$vRif9N)XczjT`iB7WIC&2 zO?ncfM5#U-KF}xWNFSuUuVE1*Nq({;5B1-9R=S>rA)wE4CWx}lJ-PSf?eC8`i=Z0701WsU1YMdU!P%5LT5rnLPG zjq8xBOZivBL}#f`=ABAOFDHZ-o^l&hI*AEUpJ$$h7g#2ZMpdlId=bYq%8=~GCpxjK ziys2}u{*hS(hSiu*_j>qRMvli!gV+n-#yvs4HyF!%b-lwZ2DYwH?!ZEBj;OLmzjGR z{N>qB0=lSrjqf5xC^IrytL8?0{hDeUgbx1LYvUO20(!JA}allYb zTIMxLk&xv^C+Ouy9#7|P90QMD2bTte7k0*1$lr2hZn4b0vY5@2bRPpL(=$x7G$U2U zdpTWc=(^2m{V8~D*Mu&C)^dhUg#jo*#ZCd#@h^hf8gfXZk?JdOZH+gPn|u?wN{*=- zQr3UPucgzZ6v)(1HJN5AeYsB>9m;aYKxxR)+U z!xroNa_ox%>2f36Z0Un)>$!QQY^XR`jCJ`iC3BJ{7|`sKJ4jk0=gi=UDR{;@cn%dk z*nP^<**l%x*AQF+f|I7q-cc*S7#R+O@0S^{9q(i#9hHjjSjM^cS4lhLtp?2;zU4c)zDF%_=VIdk|oWj<#v|8&PjH=%C-D_ zA4tz>1O?4z)3nZ(8~evLh^IwK7BbOfX%p)>$YE+KpiIRac{E;XEAyc^8G)=Qe-2=i zcfo=5ZiFLkoa2;A#Ah!{jbCM9E46#G^C^^XMoeOsztSZ?NZE~7tpOWU%R0^Cywvz@ zX#0Hmj z{Oi+B9fjFWnm&(QbtV+6SRshw4UA49h$6`XR+uPx{KU3%*Z49gP{B)=eB6{Na;6HL zVPZpOBCZcQ!S7O#^M7VQ*;C}@A+3)Ul!`@(ZBSx^2em=j-H8*Belw`|_Zv-ErcVRg zDFCMrvsS8WWy9!rwjB)Hi2DX%aRAh{pZ#4kn+(tKUQD#~8CP%TxU?5(`{i*sTSVE@ z9IKSaxS`bE^Gfty?F3#=0Zl7Pd|f>_nVyR8B(l{lLB4V6Yg~ z_KXo{-&htUJd_QKf%ukxu_AT*oqS^`?}JF|!*(faS{ zARHG{nv%2%lB@8_pTDWrg$4u5f>6Y5(X z)ryzyM^{0f=K2qi2zaDEggis|b(%XKA!0BWocmT}o36c}|CCvbZ)ImY{m(_CnH|c%bSR$oDlroz;>-wEtZ(=W0e?*0P=qJDR7H19CzAMnj zsQ-rB%+UlsZH_=7;OPz}ANw|Isk8tZo}a`Xm$}yJNxYZWK@&6%WA>iybN}VJr9(e`r9H zn>vai6O%%O_d5|HR$O*K!xTB6^k*({{v0aY2{;HkW;I9aZ&oX(X%hQSPr}6O3I{)T zbVQrvz!S}9%hy}jqx-@Td3Em)CiZ;fz^B+v+#QNJYFg>E_(pr6e4e|5KL3r$GW;15 zE3BmHE+&iZE1kHZ-O78T{#Y2klZuVKMarG>`5`%{rd3W0%&o#%v2mj10T}~R+Jt$w z-$cpgQBi10ZeK-x@4Y;%tREtk-~G@)O!(wy!LVfNuXb8Q)u>_Q;^tkXH)Y~GcFt}n z#8Jac5&G1?;C8p|&ne>Q%~;J{5`{nBfKO&`MyRMY#RE^idbUO`kJb(qo!2;F+17Kd zzvqC%YJE~qNEr0|ZUnEl{Y%C5AcjK+r@(oC;!rjrNb7hLor4+D^3^ntt)^0`jzTu&6h*b{pOs_6= zCX3wA44wkjG0?Pg=t}PW(|98s8pxEbW6H{nV|jHxw2dOW^$DW(cBtDk#<6(49V51{ z19HQAp>%Wxbn(S|HZi9gaf0g_D>|=tj?p&5;aG>qmrTp-Y0z%Z z+}gH`)~8FMcAxAVjcB9u?G$p|CK!)&#+WpHHq-NQE-#aAXh#}u2jlO&osLz%!&)l0 zj5}Y8Lt&TCh?KThe^c9|o@IQgBQXh+GNHZJ<{PzXB0d5(dDBJ?R&G)z5eg=Y?PbnH z9B3C#!x^$sywFjfh_iR?mMrOfy7LA(!eu;Fo7WA|i&J=y6vpLaus6sS+hv|%Bu@+P z(owhu3tiIN_xw=cj>I)|X}0LRk^GbmW6ipn2r*55xaEgsirB6`-rT}-;HOT!INo84 z1Z#5=M0I&Ic9%VgCeaWj_I`?qrE%^iR#K)Ir;2Ht0OET1L44br+AKBJ*ckP+z~)WA zwt3?p;~9PV#W=I?pWRue{~hB0m-q^} z*h-rS-=b#6N)F-{kVLsS`7Mzhaz*DmSl9|tGKKI7nd|ys#%mORY$!#nH;P~+y(cI8 zAGyOhs1u(^Cyp#g7Dw+u!ndK*h){8S6x3SNlZhR~v`S|rW_DWvGA`k|_@XC~+)XUeP8aSNt6@wWBouW~ zFU{4}T{X`|iKGAQ*N5wChHyrU&cnuFlJQ$=FEOp#jh%&SRv#Q*-|IAYYob~b{P5^p z%^_2R_K@DFdCqi3cPJ1jT2@BQ`a_G+Uv{rENvG3=iAQ&G0E@)Y7y@)|oj=JE@mG(2 z9z6QRiPT-r$-zmo!woayu6H=ff7dQ&iH-;&j$rX=Z(SErP=mMZ3-LOm2=A>k_(OI( zr)fp~WurwLz@;(XR=LWq{5}_qcE7VxoO^c<7=eJ#{(}!VSL?8wO`YHQEpg--j>_OS z^k(t>{*D}<=599JkUaphxfeB5&o;@m8e$0cO+;(jn&#nR-RHa@>boT9S%6{nm=5UM2C(Z0@UJEk#Zi0BveweE|xdU`o z=E5ZIO=;*=D$^V?E$29QlTt=eq))>mWHc;7dDA)<@n+89-Q2@K60Xr{+|B2?suh%~ zk3)F%?4=zAzHWD98_;I?OX-?cYk8-+=Pr>NiTsLPz6bwX{kq_P>mg?*UXXWj^ykkp z`o7QLvVEOrPRhd&F4#u>01531{60Sy>dY%UYi*#jRgpbllPye23V1AVzmgC7d&pTM zO>M8$8UPs+s1*xJQ^tYy4?{eyK87=CHBw6xYD_N4#%XyNx@$my2vpqlsw z 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

TxEn#lS zrE^(s0u84v9AMPs}ZvtWv93*0lxCWm>UYpwX$dE zt|h_g{NOhBq<=wd%3dl{tb^FuYeZb&vAQ`EjjYwtMxl#jF`TUYAKzmnjA`P zCz;*KJTia92eMyb8~xj>noUU=jeW1OvlX;5F4nwqq_ii|2sizgudWP^0w`UoW)Kzd zQ---!MN~K3+K1H#q>UX8m3;ukaeyBn#*2t1^_k+xH-N%$OF9fd1I*u=L z_&)j7&%mwS_dElY{te@sx0UIfd_NJ%s|uM?udNF?r@BUgyqWlFD@T$FtcJ=A-_ZCnM^dPX3b-ey4J8anRL0K=Dnt&*eWE zQD;MV+#n&Rn`FekNI0MNvzRGfm9fypv{XhYc+%#(%J`H&wLwSewkd2NO4$3T-8x; ztBg4NBpXd`A7*ORS3}sJN|_YLwJc)w&PbTc4oRz5GY<~5&A-okrNBKT`Njz)B9lT>^cIO zd$!MJTo-5hbL{s237R1~y({@)8{k1VUs$MB9Tmslh(+IxfS97b{#2C#f^UY{DHAuC zQna3BlTfsp!YHM^yiV`8e$*ezMCYn>Dn8s_10B6(W-WLc7c!H>b8l33dixxf?wSOV~0_tT7u5F=>HYa`}zq$G;0s^q?~#6Cu^^;K+{g1`;(~Pb9V2Jg=~S z6ubo&EViTLmKdONmEX;J_fH8iih*^}i8U*kPiyVkZOxoau0Imlw(Ft|F}njfZj>ta zr)t0jS`O5UHRV?7egmC|))$ZoTK;vnA*KYBSoy10^n!vIMpY&!>ENek8dVoX%;42% z{NN`~1^Ac=$-Ma)gE7W9!k@?O|3jWt6Hw8v=-SJupl+130prCxgvHX(wO718kox9_ zatuJL`o7MXtTw+7$D?*b?-Wt*Uc|?q$HzXgp?4am@fI|076KY=>QIC9q7nmxhE;3e z|5f%*^ZWuqvF}fL3U29(3ClD$@`M!vh>g&K#F&DS{$|~*Z`CBJK>qR;*fA$o(Wu|s zrij){7StmvbK>=ZL0~lVt`BXvM}4# zivJzvgxB3&BZxmeoCS9*a(dSU)}wox$cPB_7iOE`>w)q5e`Hv7I|Jc5Fq&`Y;lk0dTuW@#I*b))BgWPC5q&#tr&C1iJ^IEsiNYEnZ}sQ|46v=aj;V^t}Uat zw(EC+U!tPngf3d1s6d7oY5n z?kFrTjDoX~*xwLi|3{8ayD8b-eF+EFecXs^da{XB{v*`|IZX9eAW|BV#^I(mgDw3g zXuSSCc>QnJ8e+Wv$k=HQ#n-PyxyhT%0j;pC6-57r+u>_8PwmFs|3{{sGE?&})vT&b za4StyrZByFIkH7j_6j}2*Gb~oG#u-~9ctVZM3KFb`qdC0bM~J_$)p7bsHr zz~;x&G}{VqiC1whet`Cw$(d}7*&V2;5;2+lF_=$Nk!vhWqN^F$L|U&xlNd4`*{Xda z2IpL=PejJnu8FGK{I0t62Ycf|ZCy>g7X4cJ0~>E|2&#KsAqHH}%;YL_dXY9f`^Ls! z+?<}MIwTxpjCALfYHfIVfVr#^jz>l$hV;o8kkMBhU$iP+W6sXb7CE!>&2;qGGgyk` zSI>y`X|fzwZ|VjFjQx}QJ9htXplBK3FoY-yuwp`&QGTUYUx#eRUm-Vy{(Z`8syjWMLAeWblvgR@1a2xrUcxoBahsRg%y=b40Pk(1gy%F0+LcIAU?l|BTx3D zJ3C85#LFWckx^JT8l)T%`zpib{}Y`jHr(%s3;isya!PS0c~_8_I?X4f3g{@u^bl?v zv6}EX0Y;Zy99fsq*JruS(V$Y6WDt7L`5}@)7M7C}}wJNH&y37SI=0T(u6}OW;xp*2|?o(l!s4fh) zEimOxV(0DhUNM$jOP6vTsvQG281L55p`SxpSNw=gmsf{=mG@Ftolk$4gG<)Rg|Q)` z-@T5P05rL9uVbaESvXcWR&KLEFkN2ZC>LLj=Cmze={P8?_3N~1_?Trs>QUVM0DViV z%i(4fUT~4GRybDir(Rr;e=NeW+Oa{b-PsN`{=Is+y=Sa(3`1qW!5`5wgq`o;8g{t@x8EO|BreD(%!1ZAdZ;t{i~VM1UNt3%iD(QvKL zQtcRdbJgg5wObr6)x8Gt2M3kbrHcH~U{2Uwysf1+}=p_m0?pa<*M! zsviOG;5T&eSM&Gx;NTuo|9&MB@l{CDrG}rJ)>3ExTByqLfY|?>V}|(R{f@D1mLg@( zB2PeTQH*~xs;hr~&N$$R)S-yU6!imPiHZXbSEnbiman$K`SYmu)s z3J>>-pngncyecJY?;nl)UPhSTFnGqn^Fk*E?&QNTIV#>G z1KGD8mu9E0+@C9#??sl47`gbh@xAQ+4p3dOOTdv)zo!`M&i+rZ?Hy%Vcw>7y&p zR1Gs(rn`>Iz%rH=c8WD!^5GG>kbZo|Xt7^1NDm*QPN`}X2voSH=VahXshG6y^-Oqi zgR$aQfZ~<<8fI`$)-Q#m&6Dc&t=%STJtMd!xFkgU4W6mLH>YNCc~?4udowPn?>P=f z3iq=q+^0Ts98{%=?x&b6MPd(s{K$8`KX?2~G%UXh{AT%7S_S!~`1;QN!eM8b@A-n1 zt)1wtN%{xR{?cI=`>u3j4t&Xe(+~=0$=u>7he+AeLQ2!&YCscIw~_KRDHVLXx>3*~ z2j%PF>dqwp%3<+q=exgh7}?48e8m=`AVrO=MGwkyPk}VO@BTHR)89dvGwt2+n1U;y zi(fm~qB*}s!5-L+2fub;7}>i79fo(u$9m2<(uC$WE=<{H2-okX*0nRbqak&MYAVH^ zGZbjwvKq2kx*u1d8g`5B-w;~12;#;v85?`W3294_oBn;nhG+hKjaK!R-^027TPjC1 zjgG7X)qabrhoZMHTJEl4&;6Dv2kRlO{k}}2r%T9)@4uz+($D@C2rc-IhSZA%-x2B! zhY+ka#bs7nvAu+wt=Rdb#zf>D*i_` z*#rBV#F6S?v&bmv-_ck2y(2}XS|pbL;IJj_2@PWJ3fdcfwcvv>p+V1MUGt;dAo~c_ zkB+z@UghML-Z%YQl?e|he@Fa7aPHWMR*~F@o)2Kfyb4y#k68Qk`STn1c#s!^ zDu&X6ir~?@5J`m&71btW2gMqwN##G3d#&2m?odL;(Wwsuw z`cjzQ?~brAHUo)p9P7HEY!=jqT;b`{5K~(2T+8NArek*=4LiqMgPN1+ilaiK$`;%I zgxz#8Dn~C$|6+|PO0m=Du;kD23iQT|Ypl!qL;#M?Tw~=ODDA^t{GMc^=TV1t+Z-oK zhTlYTs<#$%_a=&We_dira76>K`T3yb@Kc&uaIKHim3?Zb z8AFvcadoI*M-6r|@8zpGZ#*2?U?;XpNe^KWnB{@Ba~@t~{cMu~LxSzW)TDnJWuvcx zon2WCu9J84QV;AWHpkqWDHe~xKSJ$S#f)44V=F>bX`E@vEu8(u9M4PCE`Tx(9NT^c zw}%(@Mdf&|#uTDBP7$ZqquQ4iHV3WEfE$=t@kZj<047&Th%@hR5gfyzqAJ8$__r_s zyrO-YP$#Ye4M#%I$^moBS03hURY9~>mjEkiA0DFdRfRjVRKnWhUWW1k*v6;sXKFN$ zO66-0=i_^aGepw-%a6UKn4srLbgipPxCL8N84m?}tJ%#4ZIN#k<@tcySE} zz_s~yW8cm<;nnbX$ECYo&&Rd(;0$hjgtc#}n~mnq15AvOTS`$>j&V{u_;;%A{+-ji zHHNas3<(uu4{Z#9Xf`m2+e@aNJl zH$ISFtToW}mX@wuHp^LwC2`IyQ4;TbL9|^zEFw8a*&C%7B2XyfDewiRD=aI#yK!pCh&aHi-RxO*vvp|m4j7gPWx-)X+D0>&uCctL9`_P^H+V-QI%#*65_L!-sWMCTL{{i^=|TN~N6 z+Goa!;YR2Azl}x3ADI!p{3K^|u*8I)ne3dYc14I+lARsYeAF-GUld6HN_KW`YsHQ8 zqq8N*SVtC5$Gx%_a-4&-;+FQ#&h1xmVDzKk*G+1qi!7O5A-Ki`Vy z=ki4ToeSod-L-huQroO0OPveK=8H>N&KHIGj44Yr{2Zr~caeQ@?S#I+bFI+sWe+zS z*gDU=g}z$-klrEU-TqEi{Im10N9pgZ6ot>0CWx7vbrDb03~<6^-97^duwhQKN)%<7 zb-t<&w-s{rMhDLq@kys_m2crl=h%>NbZC`dqByb`egy6xHNKN$oQG9OT&{ErLe53!bOSuUm?G)rP;ypZQCRpZZoBop=xmgwOKq=);YCs^+kC*qj} zawWFpa5+|*>)j0bBo#7*dB*iN>-HI?3ysr}1F_ndiegrxl%}`-rvn|?5vCz}!f7l> z!54*(-8uoaz7Ii(a(}|c;#Qp2cISd^YU6?qlnNmQ6P^2{L)|GTj5LpPN`J&L(i5;E z{yn7)(QP{iyt>>0J^9WQVSN&M{_;e6m|X*U^XmWF!E~JFd_M_s_`TAoI&Sj;lrWc?C(jVS}I8J{{J{?icC6BWu%SB*?p~r z&bn}+sLd&=ba|skQOr4p+)}55(<-k5xqG-&C^I5mQWZrqEL)5SNjG&F3Vsf>8BaAMgw1YWrQp)1 z5bd>8qCwQUf#GbhI``>RzlsTaa8;}?U}F6$RGs0+*Keh@%FVWZvGb_vyf_jQ5vNR` z^CD*~ZnnH-&N&1-&f*kWPO~bLO>CTW5=>S2$l`nJixE z94$8^jyI5dkXaZEuw{N)30Y&^1}93n@OZ}-8{sl7b`g3L8*6s~_mAeofT@~>i1RKd z=)n?gw)Pe*gd3bl;+oY+DweL|kXG!B(*}S~(eTV%qpDH-w2Gp<5+360*9LITKHg;H zKDc-_p$eSx!H>9-v?3tE=NLTLi>oQb{V)RAa^pi(IzERlvW9Qdf>T>HhQY5~yBjp- zPi~P=z0ht781UJac^vCwYGAE@a*ILe?wLVBYbdDobgIic2y;9(P^LSmefMifLY1+#%dpDr;MHAS?*tT1 z;zeYKwV~xNVu+@F5mU2@4MZpoZA&gfhj`!E0>s65aejkyD7=+kmCj)jZnmtF#_sNe zuq*0t2xOSNsTRBk`mk|=I8Pko+v`600T;?%+($3;JJaYZPipTZasED%w2JD`1>HPZ z8zCK@LUY=5mrQ#o*nTESEVS zAg4vgUG)G@>XOOg`~%LR>cMfMcNKr#w~I3Q_f(w7Zxf1_-~@)E;v;DCi&f5SgrmJS z(zRAnZKM`OBy(UR<(P`Zc^Tqu&*e316Co`{csVAd;gjW%=9`>@)#j;SiJSiCq;=* zwmC=pEFNcTFmO=LX}^)zY9&w%(rWcqn z-tT9Fx9EkHTlsA+=DM|2f8JymWzxmAl=Sgm_5zA z%^c{aSG^;0er%tp`dVZ>SeVFXuFmh0C=Ra=Wl{P_-yTbqq(s#avGcp!MAanBRCrq? zj?1?VVuF0D#eF+jcZ*fL!MezWJ@XKLGSZ8uAn`ocUa$IAs2+DFs;-F(-h1L8Nl*)l z6V+#PF#u`T+o-}AglAQ*$mvgUGsT4OrzNT!!Xe*WkQOr%Rc^6UzU>tkWI>0-{^Z_? zB5MwkuvT%JXBChEI?_dni~%$v{XW{iTQ@_mN*Bd4V7d%ANq}bn3Wc=;7@<;edKYEg zD~^zW3Syq%ZI?LSp3)AA9NvWe3Ft&^hu(VjeTR%zi3!;xHi(__t%q18-)<4d<=a%T zU%o9Cs@-HA{M2^p`I*kYA~FczhIiy=#`z~vEZ?*uXCR4FM74aw!6t8L&d|ul-E5gD zVwO>56BlGjg@zKn&$`E11Vguv76IYzG(~TtK$xC%7KxUh5G7=73AKnbGjJ2#{G=0g zf~k8Wdc}#VF&sQY zvFvc^*(H)+n1tkQYbe|1Q%v=vm*Ap#Q+g+9G6wX`5UTn-Zd($C;B=RTe(V9!+~J`x z@j+#jLA>-NBBUMnpWIE)cu`>M`Mc^hKYWvfEO&S>$*`gNj$U%8cCL6$HDGUL0#*@Yx8iHqiB$gamX!l-z2d^zU=IV_G~66 zT#{B3J~%+tf$01b&_ZXf-H|MkZ(%CCRGekzbzL#GdlIMZrY9c6cxvemshn znu&GK+fG;ICH9rk+qA%0zqhJEL_ZqYL)3dXY+V$!nPi6jddLV6}+kENNkkc|MTsM>N~)1I2xUxdRA1?pniqQYcva-nY4F%k&D~e(S-pl(8=izUY%k zq?(EJm!^R3Tc=ZGYe^dA9^mR*l|K!E_W?G2{n5;1QPJZzzSEy$FoJ!Z0^GmSoU7T~ z&+0ydcx~Om?bp77`ekK@Yh&RX?BnibH&jE}hNHFUB{I--Vm;BlU>H2>#zIia+Ve8G z;+o31OIvc_2>7q~P0mxQK4MjO*aDV!oyj~G_lCs%dKlqIR06z&LdsVoaMm(9O$L6wvY>EnOf^ zN0<}&v$NUJQRvpfBCQ+3_icKT5mv5*_GV|Prw6PYg&p9H?x6FeR5M&Zx6yeHw9$Gb z%ftQ&-&7gm)|q-;hy)qBU!1OcXwYBqJWyf97YS;Z%7%HL)b$=M|=rKCm7!nf*l zo;KWet0cgu^)REVe{r>5G&pwfQRhKow0r=sNok_;q3b)MSufk^5UW;UgrQ7{NS%j2-atD*<$d<`Evr>jKkV{PeFI+kX}&nU|N*+xEaOiwuIC%`Dl`^4Ex zCI0yFt_bnjXU;Z0@u@RYZiu5mW^U{g50N(W)a+E@?U2Ad;AMBVuqybGT|>|+G?+D> zjCg~(Bti84AU9Q<`xJ9e_lQ)=KQWB;_@y&hIuD|wpA}=gA)SF8Y#wA1+S||xb-%tc zO<2|}3l%eKCS%i#yOSF#w|x{3gTh)NjN;+-+(7CR0d}zTbs0TBfdO;yIEA#lTm{o` zUn*a%5$^L1Unr_Hk@5Z@U>)z}-rur?%fU!5@-}zRIM@JhuGEIx0|#Xvv40YJz29RP z)hyw~>h8LmI^?T4hJ&|ZyiF@tX4-0__+*Y1HK|`=31y8%AZvGYGREiw-VlKoP=3e| zFKXl^L2CISvfFvf6c8jYj?sAZSdw^;M*h8f)vaZHgm*#?*N_ioUrzKj##jTYTdn@` zg4iLXrmg;X7!ybO_-RtXf2hBOv9otVwO+br`P+zfdLJcc(`TEE>Z}kkv{sucth@-* zHM2Gx9gIL5t1sF5h}IR%nvwseCpQqwfbv+N4Zp7B%h2T9)(0T9+u#693Wv9FIRliE zleyaP>-u<%%t2135Xay|&v$$wMeVRn5#+)s8C1Sp8-DUeM-(kv_lNQT)UFK`UuP|g z5sJED!2&33*SslQ%M;=l{k0pC#8Z*&!$isNfY{Xc@5N5{F>s>=@1|?RuPfJ5wN$Px zc#0K;XF)Dpze<^id~J%Q-l7{HST!Un(G$7D=(+n=XoXXGcnvfTrxE>DGl_1Y27S_S zV@yG3e?xC}EoTblw_cdZCFUm_-&v#qz4MRwwxZ$L5#eIv_uN{zp9}(9r}WAiI zIfJ7*dw%gy@P0##DpK_Jf#6|r!1}QKf>WZB&f@8$I1uxGW_f9bwvXqww(AFHcXi*s zV%3W?(>2+dTqlrQ_u>B4sY3~Z)3Xo}=Gw^y-}E1y$)SF-ea_Du_?s>`w{YX^^ouhw z-l7i5S{fA8|2ko7Lbax?Lev5t>Y7-|JzB*rVw-zmN}z;Z%MwKN+Jv^greB8aklsByh6g#$27o{S$*9iyq~st@sunPNSC{M5E7hX+ z=UY%`7SXa3FkOmOrlsT+P5|CaD?sn~yQ?n^K<+ptaj!Fecl zcmFplZvzy=!K==Fq1+6D8r9gxx~nj~I5 z9vA|6^$Lc(#H;7PrjU7Cz>v4(V=^&v126;i?@VCc3@b~c?kXa6BY<#iB>=FSQ*JSfQ-Lh_EXWWFZ>Il(mPE+hEL03 z{oIG~#nE~FAao2hkpC0A#%{ANf%c{bkL=5D^ZLbZa}zQ}!rT}9<%HgrAo$IFVZf!# zCu2jOE&&jH>;FaBo4`d~wf+Ay!vF&gIKZ$e%AlyIsDt8~>9{2-Di*F`4X)%mI5TQx zI+T{(VGS-EHPkV!+l30tLc7Vvva&M6va(XcR_~&2G&3!i-}{^y)aU7W{=eUUUN7bQ zJ?DJSzFg;8KG##T^&vV<4{^QA+_Ao{ob%wTBRqAHe}qmCeCzU&$S=7D(abSWSB4_nP$JR{Wf# zv&EUGABY>UALNW!^OYHu(J8mff%x$)`x;8QVwV>LmO7@pzRba?~-&~s=vZZ|m1 z$!Y3Cd3g@}fEQH1N5wINGZCgy@rAKTLL0&J_u^paz(nm6A}hk#1;w7SyEy5RhW4Z8 zzruuH8{sqy*If*b_eE|vhj`W9%@Vt9N&;H+=g2{~o!2iGB>?}G7D@XJkJIY9{oE`L zosTf<9u5&l!`%rWzLm(>eVa!RyLSeF7vA}x9AB0y-C3JhH<8ZR@IR2yBi{s_vw}*zMko~eImhpToSMYyZIEL7059ZH0KOI>J5XiWI0R6V1{Ht_er{ z@)9fUKJAexPn0f^!bAK0m?ed&yc-gy9U{)81A$mOmdRHDMuM0#o(a|P!_vS2=*5}Mp^e|h z3<^H#S#Qm5gl-9qQ<|8{4?&HTMmD^|9YNiotOwRo&jV7?>DA%X?o%iX4`#`fdu#{x zq<(By;l*ml0)rgrv*JlunM^x?n>Ka-RvM(WFG40MVXEoD=4Af@)7bRq%o`oWCK&C6 zmwu7ElD#(_pl)?bHdB==ElKO^B`3$njPQ~^5iG5*8C>;LKMF=lLp*cBbE*|v_yy`{ zaY(^@dpgwqD|6k{W;VTlvMZxrC2hD@Jk3u1<_1XFVJu|N6lhULB^Smz`P#6%@s2oy zyI$>{WsSXf@JO)R2aB|)Z}j51o1s~`T*3Ojv@Bg3nUZfUTDDb1;~T#pupu~M1_v;u zO~cH3sPto3qXYdmSd5V(ci&EAn|Y_WBGpEAM0)q|P+q@aZYf3j0x3CHQ!O`v=6R+0 zwKs?Es@umkwEnZ(5gN%pEBLbw6I~`zAOz|&@5wRr*_|X5}AU)2_v-TUb znd;+N;z~(DB{`WNA582$GA+=AyMqKrCKJM^{dk0CNoDz;;MbO z8_HL)S5%#2CgjQ8*D}#=6Pfd1Oq z-oa^-(q7)SpKfavS1ymHc9Z$mdzR~>?`#yR1L0}3WPPDkSnlCgfaIEcq_n9moh0`* zQxYpOnH{6x9ytiF(1$fLVo8q-GN@=vIvG*fjs4A3$~}0Af&6Y-=GLg#8jo@=)6}w9MD@k(qC^n+&2nqeF8#46^>6^KzKUv!omRAX>;_vWSyoh*YeN$?A z@IipIHko_l3~B&3+A5hyD%1(zsoa~F-ho0Z@7ssVx^X5*&%xFXq%+m$VLraPn^}zh z)bw90(gp_Z=LPu?r;gQn@|EeWpN#>6Vs}S#Oj7V#*?9RLDAX0*Gad$CWn7P-YJjyP zA6YulrQT;5K+DV1r8Q-!p?toH{;Y%_RV7pS3Ymeqmj|1bgWz8~I#EHCj-pC04~{pr z{_ovfl8p^$-dV_O%S`z6^D;>e;22lkza`anC#m&OhzZ|NG-4YvDa;{X6~_8;Gs+KM zX@*$T$(bQ)d5UR7RzGoLW@&qnhv#gLH4*jagM9lU6Ok@UZq7 zbSMmY*(g`=8dKCZke&ZVuF?)x_*dF`*_HKw**AkEFB1Ei^{r5Z_rEo@3_Ngq!j6hLU zH~K*txPJFG{oq;N6|K%xm@JmavM@30saCNujqveOLr4Btywc9qH;&b4ShhAseApe( zrD-ETvacJLpKR(FNVYiehvaF}*0p|l8SJxvV4;*TdYq;F#ctf6R+O1_{*K~kGqw%S zZf-!nG>#x;B<$xkrXiS>|7KRw#?|s0m7L%RGhqo;_$PdisvqMyxvr)obuU>CsS-Jl zX_LcNzFsEE6<7I!KkS4C$KLb8WBzAnn31gsYT2c5?M`ftkEnrbqZR_DoHS4;e zWiafH%<5Icou`eu>@0Dx-J_kw&ks~&1*&Rm7aJ><9=0^8J~!UkGo-rx-Ojxsu$J@B zRv)?7>CuY8OPfPFWg{uiU0;-h^jIko=*!CCG)k=l>!{Y~eWh?kax`Q1*?tBFq1VQI zlQsl+O9a_VYVnSl5zrjyqcjIZ-voLlqdRi+G1~ zN4MC8Gs%_6Z<$nR;Ud%3_Wulde0SkU;UGGD&Bd-Qb(fV$T&by>%ADm|am{~kq_F)s zFhab(+S#;&4I@)Bmpsxk{;jo>trY8Lz;P?m1<-KqC|TF>{Rn~cl+)FUKUGV4$@w&}{A zacau67_!Q;cBI<&r)o9Dl|azCaBJ{Jszzz`%Qz{^e*$IXt)!94$1==-#9tc1?x22# z7^O52P*kRi8Womho-%!Ws3zu>R812F`zy^}KDa7YuXXkj+h;-6FW)*G<%6}0n~JOR zZ%+jcyU3U=YpH4&r#Y5JFR2>7b??5b4-VLw8VWn{^DWJ!P0hdgYtb4auRnrHxG$k= zvKYC}*-eLo>xb7lTg6KS09Q1fNP`-=lGxjCN3reZxJAFRCQ@8k$02ny4E2U2vAKCy zQ)}HWlrB0*D_&U#rJ2CQkam%18zAU6@A_7hwaVnK`P5S_#nEzS2YG_*rE>eD15*C2 zSs)9v5zbWYL@`7-TLUhO9V51mGQ&EJrn_Zy;JNWH6u8scHWAm+7Ca8gRB`~CFaTIj zc93D18Fi51+d+C3&bHlVU%Q?!q}B%UkxD;7YKaH^Tr-)@>TLTZdsj}jv&`qBFpZdR zs7MoYD!D@)f134|xzU-4?ln(=UdV(n@~?L$nbJ_iz&sSC4Xx5pufDY2X$%@kGVj@d z$Fm|W8=c1L2^&!?>a;Z^bzd5$oBa)%VknsW{#3q@zu-QX?RX^hk|9l7hK0LX!^|^? zvZvX4uY6*=eD%SJJFmYLRwh**G*X?U&Z9S5?3CW97cV=XrL)&FD$px-{5FZ)3TKhn z{#-X!;{F9@13Kkq87~St&TlEMt!vX%#BXvoPahX4ja{)bC9aWI?TgT4`{@n2ys8Ij zj){Uz&Xi@8*1-=DwCvxrO#{j!a>{)`6Mm>Q&(2S+wn>e|TW)QK;)IA`lGNZ%WM zea=k%Px7hmB@_^r`<$2PPPKw|HP+=d%9neKM@=i)4dz|a(TB`Ss^;A6ibU!aus)X4 zA1jjl9c^uw-=zCxSDoQIxgGnc&q2a;%%;YDN7nJMN|z9^i#dP!Yvw(kdqCLeL9-b; za{|dxRWR3y7M|qhV*55{1_X+HHvM_^`d(XbNqVkc&lVNWI8*RBv;P_Ae7Uo9*ydaq zznfNCSi>?uJ0`920X6CPU zWn@Ag(MJ>nB_dXFZp8Rh?Q*g8y^b)VzFJ|7%2egzSe3sBOm;Y%>uPl(`uCw|{vu*Q z)A0;p!W`8V?&!c7+;xxPOmD)#8Aj~qv;#8ZAmK*tbf(77ft4(OjTy=&cti#>6XzUAyw*wBHHsE@$fq0}u@Iw_F@Mv@SKmdgFD# zJ7ZEKCInv_L`ly`Xx;BE`iLdLumZ7_475AMnTgSHx*EM0RoN>+VVP@Bh=c#^hXclx z>4QblCvYSWr%X>5j!z<$x6MzmFgBw?7zij8g)%@d{b;KcdsTq;aNy6$z@LUds=f0U zLcr|orw1Zn&rXUszHqQr?AzH-T70O0?6Gr#DZDB`yFKt{Um&`&cqA9S_t{ouF6b7F zw2QpL7|3P`uHNtr%1vuOz00h9Se)7mA016t{|EieqUDb>(7oMYFo{uvU|@%}S``~| zDjH4T^t^bWxQ`9ZOw@fIEi6;JC+Nzeh4tz63Bvx}LwfN|==xa3qMJB(YHXrT9}N>z zkDAcwvB;QS^dRf{ny2m8a;4;K5#aEiL|v08F|Q~zK`X?W(_<60O~uy1z=9kTTf-(X z$K;n6DPCJ3j>&+AIs&GgZxS1NEs9|jC6}AT={|}Q4P|ySdHPUk#NUxAv=9E4r;L?# zf$L8Y{k8SqkdhIi_{+Nzbst0r5Y=0rM)Bl_*5p4<6cev&hue?09yE)2Yv?n52gGw; zS)xK#f8h*?6--Tw@sq;EH?2p-A~m^g)QGa=r{XB8w>Vcv6GFt+bU-@2;ggVy)uC5l z*)kaRN;+0ip0nIUUNuaL)ust;n^lS0^WuzQQljpyDADg?OhV{d)u`ex(-6IWg7UWa zNE$rqDn!52qUR#O3rC0grCiuNzJHU^-ZvM;YTv-NXDrueS8regPcY2b{UXg zhUj7GnX%1;?;Bo^C(Sg81K-k&^yaB1vHAA=F!558aM?}2iF1{n#PV-RRsIqq)$k() zw0b9jF^ixb32Ce7iqCt~t*@Jr{{F<(r0x9PvAXzZadbseg6@YXvGl{V1d(?aME2@l z`dASy9f*&6-V>{v7$rO*ASG)wzZk^}q|#MJ3A^@@1l_r4;ctRStmSZOlDC(J*=4!e zx;7@!ax`JCZ^j}o{0rr}gU1qd4@HTCrwj?YQBk1l0oWsK^%KCVFyMk!aPu2rI0%4|+HfsU36`Z3CC6y6@NxOP`!=W-N>U!>o;0 ze?--`#qfb9WWs#<9)9h~Y-W^i_9Sv`K$5F;2TdzSlHoDrn$~XZ%-pcHz7AimdzS+E z52f@>?YmAh*D6(v=?yNCwUdy_+T-9Y*=Hc2ymF`q^^+=rc5fDDzUfn7`Aq9(E`JZj ziM{u8i}IbgKM5sv?PWGd|HCViw4aMT=cshUL%mS9dBd3*x`~cQAbF<+yk&7F8`r|Q zerJ*n{e;u6^h^*- zVl^#pgkK6i?N$vN7<{958e5DG%#)p`CnV2M2?pKxP!p_ig}8c%A&*n_n0_O=@$*R0 z>20D5iHOzQ_qXT=^w`jCn-tCu|{5f}qSk2VGMeh~A$glgWs?Gje^iQJ2 zJBW|1WuwC4CjKpUyLgCLcrIJt1c%E`qM^w*5@iNk*Flv$_C|PPvzDsx8Gj4EAj3uB zL)me2L9G%aImaUoyqToToctHEB1J3>Jl5S8>0_1%oSz4F3PwRbHyO8pG@ zmeS*c>5jCd^4jsdeZ{urFD^HW?Qg&}wMq-VhGsaAF1iy93)4F&SM;6J2X&19jD$UY z0s>jOw->o%5DWVEwnX{|Xt{Qq&>k?dok^Vj(i;9#@mKEF8;LsCvMG#6=`6tU_6P(s z`Dnh^O7EyDkwhIQQDH=AB7cf^_m_XlcoPz^w_GX&9FgKWg|M!^$W6$RUmW`$huW2Y zj3q||>E*BIgMm>R!rRwtxVg2TWYoSZ_Edqhr#_k!DYcNFGs?Q|xo8G}U4c8NccE6} zxNIvwwsgCeJVWT>Vt8O5L)?^^&k@^K`m#?ib=%Vl9awZ>d7v4B;rD)&O> z74^Z~Fw>2Mu$O$Q=@CbDCCapFjA!No1cqZ}b}tX655MY3w@CEpD>G@Ys(oeNSk*xt z(wR38GdVnO&4wTSE@!mw4E=sYx^@V(vs-~one`zXi5l;ki%3C_Civa1P0GODtZEu)qLlIE&;{MQ8eXUuFMplyd1n}kGd3XHa@{Tv7VRdsSP zg3|?=!I`$?WoD3N(JC$)(ie)#Rr*39pF+L8wOHbr8Z66L>okgKkxQXJr0w=eIrS8d zHg$sjcsnfkb;@8vpox>kp1nXoQ@sRC)|e>KQZII9XJfe>6uN;8Px}cb+%mThR`34mTz+TBIRP&S+7yrd%Q{exl zuMnFek;T=}sGhiTg?XT0zLinC<4q+0RYz&drT3UBOUkop(CZ@+MDOYick3_Icodkq zl8c`VXKC15Acj;(;0@!MYbjqf&X(N!0jrU#qK7Eks8*b|WtYIPV)cavf|&EmB(@5v znW09ZuA1wfXZ^?&QIU*_?iD#QN}O(bfjrgpQ6qEH8BJhh#&nk>bIia_Weh=5?-||| zF&t1R(#;IrCg+Iim_XCz;93ii!7IN9ff=|S3510BBA={Rvyl9K+bY;A|Br1P{54P|C|+a1xrMBl~`#gHAvuf zH651ZFu1k^#Gq>0u`>n}Ul}GN{xukZyR;n1^V~z2BCNP+DmDL6Pl;#c%4CY*MW}qBQxlgKTrq-x2 zkFBAx*Ae$^>5WnJ;hy96p$M`W9`5BL{{BpOgkh(XQSZqVFk|MZp2)keawRyIxg6^|jha3R-a}snSm_ zB~#Uj^`Ccfh zj&i?bsH=|5VXD7_G82cXbA#Mb(zYZ1O8EdS!7I^>hyv?Stx?W6)Kkq`Y+L5JXymRYTX4+1G$;0{&76Vd_P&%o8sj`u6jxxY$p#8QQAi?gad53-u@fV zjN5!$u;Z3EINlm+VY_V;B|qU)rS5Y^Sxqt3#T8mxW6HlK7)AO!v|e?v?;uU{=Px9) z`v%IsALGG@mQ30(1Qlw=Ug^f(8A4Av3fq9?C1-%r9Xh#9_KNfjRk4fuo;*#7C!ZV4 z{CJ{I@X7c!VM`+Uw(`J0HbDsik@>ls!em6j4^mx8suo_V=|o#)SjtOeP$8fEUo*@_ zCzwp~74_w^uQ^p~YfxjjbeQ<6M3i?LzU2_kZR4T5_DrWaDdSix3*)T9QH^?D!&Rp2 zk%e(&A=QU+PmN%mH)Gj4GKjb$BN|?VFf{#>dUqZfY!LeobsaU#3xgI|{G-3-NF5>vzyL8KE?m z`rgkM1rw%I(^Q(ZMCvomkzu!}E&WL0HTNv!3mH)2RI@Th={xdBURO;Z10vTa?^>!kDg2B1tEcxMQi@k8h zAm~yVtGorAkP$b%1=Prh`hPJ1RUdE}FrJ|?HCy>C|AlOm=sOhAa-EE*ryy;nc<2Q* zU{gMwj1ALFvQ0^&_&Jkk@xJezWcvo2^4fnVAw!kOhz^-#$%7P-a%d>#s~$jZ(#uIFr@@yvevkapD-WJmYDWN#;O~qUAr4 zx#45NCde@5w`;EqyYkP`)am2FxI2>(_01ndNk!(kPge2lPc%B^047iN4{1!wx3seK z--Ml&iRXkDGEa-BY_5zjN~jNWMITNOU0a4nelfwh#;7xfi+&Y-62#dL*{q7u~6^U8n<_X_axLV(3=9?q(#s}_$ z7IChBGt9{UU|m`Ma25#PF3hnic9kcaq=1cIqoT?KV$bqHN#fW*cDaU6(4opWn2z$& zqw!c-g!hRz1=%+_fv+?VD5W%QD+P8hEGQ0%$_p_aFphT8%u8cnqx5Zb%YsWR+l zQYf9ejAb~43n2Nt$u!H|jooX(WK91W6%QW}(t`s~<0U`Bo}IiETd?)dcC=^*idRn^r-b)1Q>(6jphZ&cL;h$HMr9bM zAf2lL+Ena#bpv_|h4Dy70t$L*Rrb!+v=Be&U zV&uD2*nTHn;$M}Bz(V5SdmqEWgD1$yyV;}4V?!RO)B)w2X@^j^^zs^0^|z#1Z?Q`9 znx`R1lrTYSkG3GGd_7V+&k*5P4U$dTLpnr@XL@pepW6OJxX5pvg+AK0mWZeZG&9He z1_hGd9Hhb_mP9SORgVow68rZqYAR})pd06z5`ziKi2Qg{kgs}65z@E9lBJ81blynu z)X$lSI)Md(w^BGXKS_H_5DwTnaze>#?EGx9n8l1v7asy+#)QuwR}~QP9GzFHDR>q zC|{Lq3bHeAW?ClGnI720?0Wk#7DAHr1oJ=&g?D>ccC~W8Fz3uL@PRUd{V6cy7&Xfic`4;0p zVc*{}D}0`G{%E!d$IRYX=q2@URo-+STAzPQnYCdMd)Z9%`FxjqH8$hX5O(Y*LogWI z$@EZ7^S%;8OOyKtUmYz=*lk%IS_JH}w%$*W&?U|4V%F9K0+h$#y!UVvR68CKbd3qQ zoyy7aRa=%x&Fc6-y0wd$BFEJ;Gv&-^deFUUDi+Mr(N8ZcI7#*Kaludh*RlU7cws)9 z|DTPO#Y~rD>*e`o#QK4n^h?u=<;Kmy{Jm4z{-wJea*x@K?}#W-_#2EY`7D-?xJ^z9 z^;~yk9>l7llvaO)@?FyIXa@B2Zb{m76<>b6eR3e7zn+~TH+cw{jEhiJPzm!sVFReK z*@Lg%Q}l){;xo?3WBY0LRz<3UHwK#ho?xs3Ej&$vn6m#}(gL!VtphRsa5%b%~)L^w<;!sSVo`T2X zckjBDj41Yz@*y!sk}3uJo(NXE;q+bD2i7z29z8qew6haAJ`3>JGTH2s(&ZTI)OOll zqAZ`Us=h!F`OeX1t+f9Z#|Fv$WDHb;Yjqe3#(knFbv&iceSAT9L@yZa^2fosl~Ugp zX;br=#Tb-FtPGlwYmos5{BC6TMqjf$QzRSbc7rA@eiO*OT8|-2G)r)`)!9PCJ%42- zhNG=w2Lnjhw;3!bk4O-j032$a|6ay#5LcEu42Y}OC%B@tCP@O`8`Nl-JKa?z%KprM zLo^uH$K0a5vNFl#)hetJv3)m2lzF3}Y^HUIfT{DZ+Yp^U0m4dNP7LY<%?+Tg{2GCX zUE;KOhpdx6ql%vjXFFI!pInsjRjYZ5{=5t!cCVIvvx=`h^6QJuL2t3X3_|d@GQ`=o zyE9M_UK<))-kW4$Dr*&#LNYLJDR?!IGS=(Z&;CF%;VmQMJ6eRtmLKU$4OW9AbH|#<*zy7jcuq#zp3l=)4^D9zb;9vG65y&v9_VS2mE|FTWdRvl;Yq$EnSJa#1JvhHyJng>s-_)JR=q-+>?8@PtGy~zUi5NphVrUpd6GE2Cs5ro|ic?*z>wgY3l+R;jY)^HWL;q0mS@#p)SsZIO zGf~?e!^(_A?JQAJHWP|xa}36H!($ATkY!;Kek0BljgsXRT3jy%JWSR`aBZ(MjpPDU zcYlUB@;&^&E3>+B>AVojHD)$XbyvG^)-AB&fa-%Mfs6mNFMM~&bhYkZXspglbCu~t zk6vL-tIxJ} zhoaKv*0-IDKFo2nxs^*d+g%B4AM&Q46yg@mXF+SB5anM?2pupS;gM$T1?HYFk57ABifL=9?_lnq(Ju&3RG84n`{B zy?YZ@NLk}Klru?ed6G3;lMINDx*=5D(?3YL+TOD8g-l{P3d!mFg^k$pY%&yPQ)C`_ zorr+Wrf~K2elxsOj9D(NByZz-^NWf5KojWu1~1|d)htg6&3D8-&Bp%l%;4px){O;i zK_>~1Ge0UrR6QC?k@7-O(=0rg#CPp>cEw$xH2(n25BsiyijOmxFy<|O44Vh*d)OI; zX~SA+4~dvBSeyRCY$AV7=){VYczu>%E0W4D&7%^X(SWwU)il{4HDLJFiKzQ5salUX z_CDfJ7 z6z(p}tbVA!YxGTx(^!FaZbJ1Xn`>hPX?lv7is701?%lJx20#$ji;`!%$BDeP49tZW zHj{jW>wvha+l#(0TR}g}=}ftdERMb3w7IbVz95|gP{DxJ{=T4>@dE0h^1E!50)_A0xFo$M(wruy<+`SIUxU6Q zl2Wfhi^3_-TCHvWK@>a9F`6=avw;309Vk_Ovr2F*P;!TD-vDtr*EKs7t=?UKRj(WA zdMQM_vsPyn{~F_p5D$%U&8e;*<4V^G%kg%4?P8&g?2sz*x^-tAe8m;D?l~v3@B=eP zWX^;XtXQ9d5pZoBgYKkf>i%FY`}Rc>aTwOr+Fiq$XEQJ#?kh_2UCqUXUJJqN{0QAX z-!_~^ua%*=Fb;tiS#`_vk-&4+`3<3B?w*`*u`=If7AyDUfZy_XTeFyR1rj)K?nphC zgfTDlN)>x|=BJmx*HN!sDbmKex(J6GibLWpC{%$NfC-2O2`lib1SD|0H$DJ4AR6wD zWB-45Osq~HUfzm><;h6{fd0sJGL$<28B4ewg`I{8Br2Ck3ALm6P(d)%O(g8qg6LSS zNt`Kwva{t*2*NIS)-(ghKz^vu6T*N~P&f^PrvqA`a1Yi_8elFTHIZ+T2Kx? z8#|POUfMuyWI?{4$bQEAW90d^me}dk-*lAAn1190>@;LcB=ADH6$pfJ65&CiO1$&7 zR8e!Y%6iBKD@=&bhD{*5VPx`-41@Hd*s|#yOcLusqAY-<2e^WQSul;IQf+6-Z>4#} z@->+F<-HskmUz?VAN39O`wfP+R+QwSQrvJ1+SE7ZzFpN%?pln!3J?o;BdZ`yuQ5o9M~Ig6{Dnf;ojKpPNhK+M6aQ? zjfx9@DOHem!4}*Mzf1_46&VF_;6e`24@?}sQ|Z+e3J6FSPgnE!C#|_%U*eA zYFal2-zc$GFIs-sK0#di+L}}@9nscJcA0g@LPX~iAQX%fF+H;(QBpa%zd0BktLuqE zj7Uk)y%8#oo@$5wnk5{aJYqPBOYU$a#yn52$7Vu3%59jLpbZz=(1DbDtT}wZPsXr9J1s}Y>!(~g zaWxuX{+By39RH+qYd3a=+W1A%UK^MYwdN?Zn3i@wz20>I!&Zh?n71FS+bb{P57W9p zA^}k?zx#;LSdEF>HPN1dh5%Yw^w@<@w4yxUV?^MyIrO zu3FX+Im9&71nPFIhV?Wo4H82KFSc?M?AlBzx$Y}V%Z;_evzK87GR!OS0hFL9S3)uP zw%q|mAW`Bgk4^)0s2yT9&!>odYF?#9M)f+q7jnW`Y)lHvA=lq69fnLdNPuY^-X|BW zqt3D*(^un73`W{lv0UkOC?Hrr37UIxsg1jNwZ4pU$7qj&u%~+2GCWp$}l`o zUB~J1#B7UfjM*dQh00%=r*0D)tCaW{_bp>Uq&i0Cm*Z0?Y{1(97Ze1Z57uo;6?LC6 zMs;%$$w`EX@`?A;sy{~40xvt~;?s17cSn=|w=gWig|&D%YKEtmqDWkx1~wgUOHOkY zYxo$BvkgDs@bl3tv`LJI+R2k)^f!|ud3h4UE+w=zC*gF|{+dhJp7lxP4g@HrMcs_$ zuPufvIs-7c+G2KQi35(!I(vyNdp3ETEh1I|;+3{xRJ;qhl{x^cxY64jSJJb(8s!Ef zg4^1m?U@$?5#Aixi%NlloKS!SRR<95cwdFMR=w|7I+h6oFo){>`66ornByuNZw2&@ zeQ%h)d`Nq}L|sA{FXl{RmO9FrH&zd1lXsCb1y%foh&`mh>SV)Qrl3UBSMp`kkK^cc zDa8B#ELl514Ddm5*fv0U{SQTV`tL+J1`tL<0{_=5QIr$jVOfx;}+&i z?R;jL(a}FWpqO#w3nYvVBZH&HMX6q>$xyqAiR=O6LY0p4lk6KcB31vK$n5@oya6F- zSz9FF3c0}lJ_;?~7cd<3m)HTH8nT?SK9E`zQUIBmffk8(U`s>!942$kyHvz+h^xJ4 z7vsD{!WZ~v59751i??3J+9%qP0k>$wM3S+Nyme$e!^EVR*pHpg*_K8~c$1A1GO4-stv33~$G}kXb3`(W=h=y2VJ_3WnRaiZD9qf08$8nnVYEvz$|z-NAG2e8+zum!Q=u*+2-p4yfXD)tU|B;L?QoiLjF6m)?w zT|tEFtDMGveXzBt-JjWBw7AY0shoQot@pr&KFMXvejV{f!~Tf|-FoPlcl0=BoV*U| zMe=3U)yOhdo{H`%29fzL(g?@=T_ zUk*1gdCN0g<;rF2zcD!?NMN8IKJPGPnLgl3?CYP*rS*nb1Wy7;gyi+eI}`fhh!-MK zdhQWPbIC>F+8WEcn`82Vx^ZlWCB{yW6(Hn>nxBPhmCP zUkQ9TVBp2ro^P8WJn||1w2D%|fu{4lp+IF+o_yLKh*BaRlNn;y|9snE>3Q%)M3ll}t54Z>Idu<{Y^+aI*GO+HHKfn54BYP6bj`nv^_$%G?OK4$uAhF3a zfxFFld|UtR11aKBp5CF#f?0br>5sgn6K<`-!JdE~IGO>KQT3RO%REmpMQMRz8`1?5Ho??QT*CK1Iox*`GeGMFcn#)MT`{m4&Lhu7?$4|r)+FOa> z0)HZ#J&;q~xOoGdn5SkU1^uQy8$h=*MzjplL}Cws?GVlN%3*4yT_TP-!q{`p&!V{( z!e>=}^h1K`E%^cxt6&R6~qSL29f>%8PF3VaHM<$^@Eq@&M zlZIJR^{_yYr`NCTtm~SM0Zf)vJpb{8aIyIDPzc<+h8a3s7_Hq2q;eT1EkU!_fVnF6 zw0k`m_>$LJkF=K5ic#BIB}j{otd?;GzhqumFoAY>7Mc_7^36{sup*>2t$Md;#k~(D z$0NDv9JWlmD^;ugSsLeJMT!Y#BU-s;mxpgXm}v6t+BFn}jl#JLqX+D)3*XZ0>Vt3Y zxRGDof6HH^{jcTOZoXrjeeCLkG;ENjETodWZ_|X7J@fy=vRj!1YgDDo)wai6@B)vI z=m7znFkIh5qxIh|TOpY?p6Dm~{*Ga&@5#yX!nbzoRE;unm(LzdlBEIr0RH-Lcd^oy z5OEM=_p^F@C@Ut;I?Jrk%-EZl`O=yitUPn7Mq6yd{4{mDQF$24h{BTkHO>BZV)Emz z#F&StXpTuMR%H<@0RqIa&IZ5bv-$w`m!lVenI+C!2 zuVlK_z-}rKdDAsG{_kvQLb@U;1(4A3wy)Z@6hBDGfbF`8A|EZ48`GR{&@0O&NPNQ!4tDAWj@?>$ zFSn#XQ(7JC%;g7Q2Rq*29#z$UBF9{(9?&Lb3~_C5_%98!q>e!QRL+gHt}t_O!(>bv zjhdEd#IO1;31V@{K*~sA)T{OkHzO`P6P}T%`$VVAxL`vR=ds<@Hf)rTmBF)$T%^ga z{52KYjG2io-qHS7-ib#=YBc91PX#KbBo1h0Ty=XziWvteWp~*VbsKf!h4m>3_$n#u zG%8WIUnfTWt8Ieru@JF&Sy}?A4i1k=3|$~|7F$bZ#f2&pBO!$vx(iy-udg*Bbh^sF zr1a6a)NQH?ZG#0f_js4T)*-TLO~kS@qmo75+qv}FJ_LAQZ?Q^UJhv^jlJ>*5vtfmC*jK#(p=h}Th>a&5V)sZp z)=18Jm#KU=w|J8o4O0I&J4_X+$n5Dj0e*uWQoi#28H~5|%j`&_Ewxo(gd01~$L>|0~=K8(!r2x9TCv)a|IWBNe&{7FYKm$7xkPn`W)l)2xxP z>c*6Nm?y`pjBaJO5$U4NP4?FIbaTDD>G@to6DQ>|90zsVvS!WXv#mq%iM9y4*pN-G zm#S+wxyrSX3#QL0?ChGp*wtB#u}@E_er${DZcGM~Lc=2pUGwMOH}&4aX`;^OIw?GR zCQc~t!BReC4Uab@1m@}&V!$)5dvDRwQdb-MIK*An=91Fumu%4D)aPGKQ-!DBQaGxT z#;zLAf1L?u-UxUOqSK0G5BxhO(3LEz3{ruRdIj z!2ue~I%tSWfs;sBZd)eRm2VzHy{(2GsJn)M-?Eg8?WNABGS&WEmMnUYnBP?7yiTkF zjJqjUlYnvMM=^x3oP)o2Sf>w_09bCc7nDpdWZjCobIAQ{QkR%2ipn1OM zT(tMbovlv39#!>onGT&0pZB)vjkl z_eDV0o_w77tMuyfDhRWmm&$0q490O6on&dc4jG~>xk8ID#JUge#@QzULGiReBA7Z- z+&V)P=DDXI+rimgF18-&v97i`y=*@-$|Q0wa_{ne$Lgz@M3TOnW9hAVdVs7RM`rQl zMd`fdMP}T};BntcD0nsdA_3X_r6ijr;$7`VY_OyZQPl0Ge&8uXicDroUm47luH7&( zOl+P!5G=W+DE)Z1(NXznOK2~zF+Ou(Qe@mHL0xESzd#SkrHo1M0f+S z2r;3BT(g5-gEAK;h91{n>e1|m7oj+j{~C&vjWSL=gTLhBepYc6_J{4HgAI79jZu9S z%GoH+oHOIs?^Rd5u-yR%`Oxj5&}i*?Kqo;Rp{R1~gT9z%6-dHqTT=)*sloBnoe$$_ zCw&ldtzKSOiyuoto7BeeOOmc_Ka?vPUPr5AZyhV4CEIX3~7PsA}XT{B~UxjR^GE$gDoQ3e^9gBW z2bD-lMhvhFh|``E#p}=;*^Fn%b&x^-BozkwVUIv&g|mNrcYq08w{jtd#dlg_#id~b zSw#051N~rKl5Z?en8KN#iNZ^*-(?k+;tr7Si_2jgBNK=$vI^#=X-;UY=~i*;A(~ab}1x};SXY0 zo{Az#lAOA?K~YsDJxOUl-xtid!brwTJ}TzFM5GbEjbyt1&!$l#VqioQQ6D4wYCkF$ zmQ|S$`ZD7FFH*4h&5uV|q8z&ngnY9NZx4%5dWuz9`5uL{PC}Xwb9TyiDg;;Kq-ia0Q>wlNNwylo9ufn^o6Cq;e2b>l!eu$&DH$QN74G~p! zebMTgp9kN!Xk@rBPwoW6^VIS@9K*BGH&lWt=^4j8I3w|s5_o8mo(@+x8z*u;fGmjfSX~V&{ z`ROFBM|^k;MW{UKZclPJ*R4cnPC4Ie$l_S8|EUyRn2#x;s%3K)tvu>Z_L8;ZRcjOH zx}p+S_c1C8rVJ;O^1Wpd;+0{uQJb((@fQ!HFj|B}S^hdIuPmbBQL5${l^r3j9(yPp z%^`DAd0&{!-q%+^;cQ^YR@Or!DCU{sKQ8$fEGP4E6l0cjki4|@9DOscSpoB<&g=4e zqD(C#;YZPe&PBj$Skj>gaz|tQ7;iO;`R_|!qvWyqmUBVL^Bc`t1GpR!Kxay?CJkeU zn9G03i4c!pyf0Pw_e_U^tA7gi*Qc&tqVKy?Vdh?>OQq(N4nD`I&s=T62Z0|awbSPu zC-bU{Y-(IHxg)&2o*8)i2)_PIe*GrQ0*Z!4SP387Hkdm?!9v7>M?y(b@VP5V8z%NF z#@WTF*<@B)>109O8Noc4$^8ayyQX_!&KEgSV#Mg#7@S;MM&I~%hcZ#J%aU|wn~UfZ z)Thb?r?2vX*4&6Bziz>h!L3AT>&=Gp`=^-7A79O#`+~le_8(%*Zfx?;h&>nd?XbCG zBGmrJ#PwOam)-m61bV0&nHIGWqrMcAe7&D|=T`*k+9=2512xNbeVi!&z& zbrgM1_Q@85m$OfKvy6IO>f-9IU%C>bs+a!gvV@4yqm#D?|4~~;wc}?r*_xdTs!&+e ze9&m(*|Is!HRp_?!_d5z)eZHoT0`}T-z7iFFMHSehijjx(W2UqV@YQ9B^Ftd$hzd} zDNK7n1DaBJTPuW6Et1N2uLG%6=Ect_#$3mQ*VHZ)%-A(;GKBS2Xu=%%WceJOG}9us zr=$gUvGHAYWr)7_({0MXWbI|C(ttJl0D`G##2N3Hp-j%4h&xTA!%CU&=vXn%ub3AmpWp2stq ziC+(+Cu3a+igDE)ZNjTRy6WnEi}qJF+F$QzMP0$Tbdfha2M{%_`(>aJ*axjWOp8NKE;J`|HF_3KO;P@vu@-jc~trk*+4B%9tz=TQ78cG&0Iw{aIO_>-zo)ysSm~ZLio3 z5oC$y_U_neG*;V;?vpy{jDbA=!6{ks5n5v$wVWM3a$fQuYr5#WzL0~j4msq><2GKLH}9#_V>8ylw0& z)^-eN-*~r!8UB2{dzr|r;Z)5|a4#0V*QxSe`7~!Z3+_k`cjUf_?q1^1^(3xwTXI-9 z%}{IIE5k6Kfc)*5!#ObM5w?9+RJoHoNZ%y4Rd~Ljv-iFJ2q(-W*ah{vg{W{}XT#f@ z#HS7^1xvXNm|y>u_DL{MJ0-jOb0wF2N?&v<;d%5ij_D^jSkvNc0Qk-HL z2gBt*BRK^#{6}7z3%-yTJ!pniOGM*jtI0UBe-Fu*u^Y!?xZbpkLnv>R2y#njQMC`oO z)@yCnF~GPvPrP-bs(@q!rID)2!wbfh|e?Z&QypjSw+^ ziUjd(ihDDJ^InPjDmM!8T?=f{+kp2ZMZES z(#qXVmw8dlYvrC5b@=@C?(&jV^pa-(8j*Gz!f3xC-H=igYrAad1d1(Sox8d9`MB++ z#%qdqN^Q*AVQw^4k2^Ta-*_rgTI(>wDCZJd!j&S$qPgE|I@edF^a@{?6otx_(q4(Xc$u1x1hUm|AoB87V zT=yWYMYJEuACio8ccC$xmX9zl{}quh7%!Ly^>j}g~tG#?;w8%-c7N4xJz z1CGmV55jRKN*vg5P5!M-eL@V#b9ZdwMywIokQ2nRJoh?nNp<`fcmI$ZJFH0*=wfkC!YE7OyN2*7-#%{fKka{*265JcGQeRV`VIB8l zNY%(Chz$=^8W%7vTd;=yEHhM_GTmdf)pI+!7i*JSDM?rd*;cuxear~=!Um`w@gER_y#=aP*x%}IF&E=w&fwX5+>B+{~ z4tHrGo$&|wvvTNVxE4-UU-}hx-vWu+S-H9RVe!ni} z$KMZ`_9)tY)=_upqqZ=Y)b=yo*1JfoB9+m{hP;koP4mcs|E#**t&NfW?@0(QZuYF* z;$T1bT}Jj<2|?#&s4t78{_Y&3h66)McMXK(eq({mxjs889Q1FM#@FASUwx&&J4M$i z0pjz$4z~UMLp2Mw;w!v;Xv^69!1vith%xGZSoWIC#{c$u*X$X1gz4v>oJbtK-H#YLI(jAAj7Xo{j7D zOfXGdi%UH((ceonrk)q^_>HczxqnE)>`pB-`Co@=ihoYggyC1t zJ;XhgW8{k=?$*}FnJ8C&y51e^cJs;yQ)46GA}$Nj6sN>I-mEX-TwTnQ!ZpS9AW*~p zm#ez=DX);Bbqa2m+7CUt0Ts_ z-$u0yFOb4=3QpnKDefE{RAtwx?yeC&BjR}Q#rkU!#>Qr}+m~rg9jmt;^O3xNor@DK#0R_=4*xDMm|Hk<#2e&c#B{60i z+t2_pcbdD4Q8INKQ&sz>xxHFZC7Q!+oZ%jT(--WMx6W{biN&5E31n$-#^k^ zcvDyDBiPT>&m#tGe6qFh4IutIF|x=FJTldhzY9Y92RF&J-joz^q{v;0ed)mtlQC3j zV%AqLzRx{D8wIOc{Ve>SFV4+!w@z3L$5H+oqomZgG(;?2u5Tu4zeH)EQk3i~iqrWC z8!`}2re{0r}OuPKd|&A1ZG;jk!q|gpAcaFOqBz26fb8}Hw8l{hD2r^%e2z1vIb*4~pdfv#E@mA~s^bHQ8))x)JD zjJhj0x@|eQrO0+HG*w$Gov;n-=CMb5=DYQ}<>BI<9xYoYY!AvE*tXP9a+3Fji)%&Y zNupn7Xr%C8h}K8c1yi}$<1$-|25+QZ$F1cBhr4Y=ui&SKK%5*iT@i7UX0;Rz56%uX z1mknWLG$R=+I?cOgY|LNAfEhpY)hRXLcGwbAVvK8Jx#NUhl<_ZBmy+t$j^|tE`M+^ ztGZQxkeS`4*wCHv)DD1B8VaBOpz5b zC^4i-VgMdmSSDa)J1u08S;qvD@XxyU6EFhMOZeZXzy~fB3ED~GAm8ZPB#5$~GtJ`K z@7zGgEgc-I`&YbhY(vW+&pi@eynaxu?zZ^y0k#C)-HGC!^GyQ8ysk!Qh7Qs&rFB@q*|jro)D*dC0=-^pl9}^yd)kvKP@Ii(>-2v zz7Uh3TSxjW2?;uYlVxAzS>2hzZ3`+w*`M?B%x}G>I1; zgzqR(qIKWJgM!WdYxC9SfEF(tY1TauFX~#4GK&LJsJV7-WGs7EVHm9*omf6PLss%P z*aROSbL+Q*=7)vR*oUy`{1#U3(tEk*rRx?*9N0Jf+53bWHrvG*?*5DEoC|Sr zGPZp@-cA#w=gU1MjLtADg5O+}p!+3390gBW`;r(VgBLLZNi$`c0~175lW_TjXW*9a z(Bu>G!n1mg4B1Biyl$oqr(o^f`5`W0TZ^*Ok%_vC7%qd>3?aBDoCf@uAWj$b0mPa5 z2Vk9x6BMj7OZ1FPKnIT63nJ;qbc(Kx%z9J2I4yCXizqA#_QkI!DB`8P&RFe1aqtmp zcst`OVV%!_$&k=Pe)1f%Kmt6^rZkyZj|7EHPK-7|^gBwA)U{;FN|bWKM7%igJn*Ph zUo&Ix1an!NC<^a)Cu&P^`pGQq3A!CM`zirI;)QX1pz+~+l#uCsGn^V-yN51s`+yta z)FXo#!q?ClKJWwsZ9SY|mL77J4+h4f61~1xmk&l-CDFN$uVCTW7T%#pw{0m|27a#K zGA@slc+x@ZaH4huOS_|Jpx#N;uJv6>^nv*0hb z7M*5tOa8=qYWKK&oc-aR1dV*meVmjzZ>a2FPKLDa78aJ3b*QjBWhYYTSb2&J zOG`UgzsJmbxv1y-&gZ*-!23Nj@43%wUh|sQ>-nlu;hUPn&%4quP|exU9G>7R<~3Ej zwawv8ceO<-JVgr^ujQ<;j2YXK$dzfHO4NcbTj@%%lC20o(aq_tuBWkZHF{CEv0p&< zhgsNqH)R>^<>k#E0Q?_lu$HCPaye`6IK%4{Q4+2)~C`q=}(FdfUb8lh84}xQ8!7 zz6i352P&2&2mr&$<=D^$@!|ZzXT!2Z@ns&LUT;C^l#n(@X9b|UJGn~o@~A!n5fZ#?Q5dAE5F8%XRI zsA(ZwmnFx1gi%lE&xl8=N26<&&<@lcG+j}df8<^(KAt4q*tJC+2CMbB(t1DzdZ*Dcnn zDor8DE9~Qy^v=senF4u(XzOmI{q0J%(QXZo{>f^0$d*ctJD#-Qt?V z6J1Yx-NjjnCH*;v<;!;m>7EhW9_1AAou{%M^qK_G@OR4=??1ZYw%fL_ru>x?b?sxw zgZjM(*|`B$Tcn@DCCFisymbZ6U>muLXn23Vec=5nvrN}lEy&XKD*XOi!iT7QGsGt{ z8-LH<{`x8-Ti3E6uje5pz^aR%rRig@f))Py_c40V_YTqz^A#ODdI$9x!h-jA3%@1L zuL$vXbKVmEH*bZd-KVX}`Mz7?PqTCQyDhyX{BIt@4>WDB2UT6O#LqwF1fl@B@Ro!} zMHtPPJzM3Yk!_i#X%Dy#F>H-l-$a)3RCsK2b{AYv9aKIs&EZYJ?4PD+~In9O14V@ky|!F7yaGlHYdTde*21nA)Imu zp3)qg?Rq+AQaIy4MbvF)Mup($qPAO*4iuOjy!P}|sOI`N{KTKXfL*>u)i+ISJ$}1Q zH&|>XjdekDo=vqc3=n_P+oF00BI=s6lZ?98v=ve-y}GX(GXr6EAdi3S6f+= z6#A4Fm-$a`smSXhndGp~mCGvSnn5%Ox;f=c9ycM~xanzd;w9a@*i(MfG+3NTU7PeQ zjeM7FfH=o<7eGI~u2I>tF<84O%kkV(obQs(rIF2JE24r2sg7wnPrA9)xQg#6O4hQg zd8mKNB?Z)<9-ecJjj~}*j7jGd2mAHL&cqA5wM2=2tdLSApu6r9k-XP#<6pFUN1NEc zbTAi88J%T#x(qPAN^h4+G}VfZC`dHCgThhGm=Rn%>1^DV4ankB>LB+~rMD3VF1)eu zd^j6($qLGNki7CM??ajB19t-%9{;wJ&Epd)?JuOaaILUZuYM+1VBK9nn};ry_Q?{4 zT9v9m+f{9)stuV~er~H}5+Ra-zSc6S=+RrtBtlp=VN|R#QE;*vBrK4*e0p$syQWW% zOE>1KvH9`Cnm$dJ4yzkSu}5nSmN3TZ`=YD<^85IRkxk!6r!*B^^^`@%g*kTtiYe=! z|3iqY?y-lXQ5|_>Bw=kIUle{0G@hufOuwul<#h1R$O`+ocPrB6m2SHR#YWZotp6r z$x_Y(g%_;`R-yIQccEcwurty~r);)WtZJueru_EYKy;m+;5yh87hw|1`_Y$?`>Bp; zVX)TA-wWM0zyZry@VzK8a3LI%*c*lABrCVIU&Nr@d>6LSReJ_;qdbgD(yJ0-K6ONI z?omB@7(8;Qy_+~b3_t5CCLbtV)XWZ!V0Np3O+~bJeh#${y%VjVlbZ(nik_W{@Ra=W z1cQDRo*@6-CP=qT=ziURZ}Elb5!JlMT&>xZj?&M;-Uj_59dMr3AhG|w2SC@K7Dh(S zF?7hAOa_&2;s-q$z0weaU$txf$$yEcpe_X$RH2cY{|QT~I$uGO78p@#%U(9iS3GuM zfRD&{i3{7JHtkLN2hqeo5E7(?)bE+cWop(K^gQICZu+acNe=kx`T;@uxoF<~)jdeW zNbK>Lzv!3w&vZ2DY1XV93ax01ZgBBh8lwu0-Dopg1R^-=o$q>NP+&A=6@sz)~SR^KB?^`AbpjktKUXOKAgghR_kKN5k= zR+^FV;W(t>dl7NXZ@k;2&u|5AI?K$C3FvLo?`$LX4r8PrI~3w0ByP99xQ+ODGza>M zcl$9Ydiwdu8v}iDZ1v|8_8_tQHG2BO*=4@sF8e&6kWH=np^;ro{$w|8L>{`=fi;IY zjhQ;r%h;XEK{q)?n|_gS2=dnyeqDQYi}DtG8FfoPSG-hZk>6bx2lYJyc3ns_>65&7 zO-u_C(wBj5g^2f~`uUPN7F`d*=pkdVUAJ6Bd)i!~rIB)`--gD3g3nie4`Po(K~fEn z+l(6d;YK=Hp>2%6vwj%+jMxC)stt@Sq!8l!Pm_Y>DPl?g(TV- zaaD<`?7=3|CI?ZgL{Bz{s=u+^6jHug-bE5^B0r}seWT~~2NQ}6 zNYigXq7tf;VQxQaVfw%bKT6@a!N4TX>a+ z8my+Rk|8<*H<0$5g-lYhiHVx@7O^QK zpji9=K?f+X^ZnKAH5I$q!}iNeV`I_mE562AJR_Ta&*($W4ey}un$w?LQo9B*wTBR^ zC6-|45$};fwuLRD=y{5atYz0zlrLu_d_&H5aw)y?03G=|^-KAXa`#_gi%cw?K-(s< zy{XUA4)A)!(i`ef zR^?IE=*jwNiMd3Ksz=eNQ6{ll4tB&o`c`Eb>D^Iw$ddQQ0{xZfT2su}fBU&|OTA8R zxh*lLj(BRh)f*V#()o-<#hWM*75}BTBQ-c(BqsJRFcRSn&1}mJADUFj+L6lZv>#j}a*mH^L zu1MSnjl{*iN{)*Et&$u}h9to%tje7NR9I*=vnBKi(nSVQCADBv-TTNsP%eKY;hL>n z{%DgiZ6*n6f-!+1ykiIDS`!)E1yxRROzB#?gCk*CuD4 zsH<+8;GwZSv{sSHDFRiilzqcxY-5@UIXeWvOyW>}-8ySCre{{YE| zI<&$N+>?ek{qkMU5=9=EoudP7y1gRL7$^VfIwitKJU`x4cxb$A{=v7#+GtJPK9pUO zBJI+rh9&+nlE@x2AE3vIi}55z-+Vzo#f=0D?@YtufB6ic=bwt38w z)fai+8v;1?r}ue~PQ2hEgfEJ1uZL(;{Y8-;BF`VP!_{UIaXTyiPek1RSlGTD#h(7e?+N0I5*bZ563AF(=<2i1 zzn(4Y0tBU@GfmBquS%_0kkl9jD<>gl<@r&98MSoWJBTMa1rG-&D-; z&-%DXK~m)ejTGd+3SBMwJDX`^{0_$bPbN`n^ClSjv*L_&rFM<*zbbTc=Th`qiVPI- zc~#^sXxcr}4g)A6B|j?WV{xgz$OS@t?N z$x+?#>9=3#su5?;mrRNBdZpa7Mb+o>SjgQa^|LH`crd3U;TwZdkSA4iS z{KUQh4J>suEi^pFX@q|%LN6C7K@4MKUsYR)VlFCLNIr+@Sevyabf)UjQn_a}N-tTPBqyr)o3ftW{#Se2eTLJqiDUw|KLP=qiS3b3JG_OcU>9n}N^QS`Yd_~>6P)T`)Df)^HKpure zzmJF7)j)hMqT4_~wQ-Z~tK>xaTv!sC#w~Q{Y}b5{245MHIE6}{Ockd#Rn_0hi&o7S zz#dABK4x8VG*0$pX3+097RH~2q2kDn0h$-?8 z0_dIb&-vsY&NSPQaw#5HNrf7v&w<*bP$NZR&iuQL$wS^#Agr3ewwLoJ6ms`bHk3pu zZYo+^XwuKdxcw=dG+!t}+*8%%Q8r2`k1~}}L}N-IGrY08>-EB`)Jh4e>c<;l0natb zm#QA>$Ud`tj7yA#*B%!=i^=gf>DN<2j(?C=*QyJ47L|#8bE!yQRd4Hsfs9Fx0I>*FJQgZ>xHBEGRqUkyLOTXuZ4(!QkG)(cg){MR&nv? zi!|wxsQP6tN+y5ZZ59{m2T0~m3AWYTlp;*#;Z5wYVk6bGRr`w)Yh*}SrE>YENf?Gw z+ZsvO6Be?Ws!7%O9f~RiU;A=#ECqqFU$b;?-ZrHJN|k|Hglc0{2a?zq*v6GNIz@4c z+PdaZ{<8q<(w+d%bVV%wA9T!X|(;kT!T_doO&7hn**jh z+eN6FpDoGbST-toY1Ir@^3s7EA#y}r95gJn58q#{E%X%+zxx2ienwlgMN!0bX;~g> zAaeRLNptoyNgL(4yjC8eRg#*GEI5^fGca@Y8`x%*bM|;TO(ns{6&wFFPQ>kh+2AGO zYz($q9g$Zsiz(xfDCVCX2=arWy^l*sYvBu(X@1)!9DR>+?6()t`qD=zqhSf_No7!T zC+orddef_1KiYao&0^hUJ~i4kjUuEANjoBlUD;3(wPK8otatUKR!5AKZ>IcXIzu9# zb}!$;2U8#p^&aW2nOb@qJev6lz+@^GK}565S$q*g>Ek1BKqj=XFXUaslNLO z4$Yw-$etT72Sh#{$?mJwN7P^5fK5+DQwxm$Ah!PWBC?ljMSH3s`-qkFhynz28~|}v zz3!J0XQuRGY`v(Ys!PU)>?pB^nQ7|mti*XHIn(N2B23#V#E?}6?VE^u_|gB=ANQ) z+L~NO<5V`q@tj=?mio!9B5!Um>U2D7+mPZR>m}m~*oa97y5-lDkR_s}thaO|leb3l zde!nqBy|oWB4tPV&B*f4`Uc7D-hvHx)G%IZS8H*ex4Q(&+BnWi$HR(~GX4!Jt8IOz zSO#ClD}hks2}*C7@QNBX-i;MjZJjz}hmD)5u~Z<2sb7U&BZc`DC?(d~>;}bfHN~FP z?>dXnw{*)ajUK8KXw^hoQZbmRk+g6zOwJqGu1<<7UV&ILk=C_1wk@4D!j59^@r{E! z3+1UXGKH_Dm{Jmfp>#~7yj)S;-9oDrrBL@tYFo=W!b;bY{K|)@aemDqvUue*MfcAx zej*40T6dJgWNB}5uOEm%UfgeTSdfJEQ~FA=nw%Mo?d7>x;t4hVYF*Frh`3apz(nOU ztap`@x`(QWmLqo&zEthSIq|eykqPD3S4|4#-_n$+7=3q|x1bMSNY{jkkFAFaUBG%h zM?P^fr?2iIzXoeAyVxg?iBcJnDlut_uE4Is>OjAh$Gc{igQkV#2R{MrIfx0G>2bbL zou%MyVr6U#yiKf(&Hug|)ty5@v9AoHNEIeM3l{x|fS_K+8l}&;oOvO}Lg`5`|2N9c ze~kN=sBA8x^Dn?Y$F7}1IWqSgQ>?MD7t6R&W)v$u3`X83OTE;Yr#*y)8n{i0vT$*c zDkE}cG3OeLSof#O*cMNO`Sq0F;)(F8tOWcEwC@6XE>-84zOe_O91+sXUHxjff}}R& z(kLU8;IZK24oE#@rd8Xe{JfTn+|UeF#~7+nL_|d=vyh5c=gT`y8C##sqH}ygkyn@U+Gvt|=-d(1pq2_H z^oCp%{XkcxO1FikMN}gq)Q6`hC}@+cRimsy=oU7CO6l@YdfIE{$}sX8uNP#x1aGdl zFN@@BJ8)*@O<&g5jb|9{9bwY-6L~+PdDJ*<9jw$(C^}RS>O04!^X$RAeO^RA$#z;# zxX2lYFe>iHp$6THB7Qxx)68$k$mkPe@;%Y&lLI1t1hV0>QzKce-^k8g3u%f9n`Y3x zEN1=_CMahC!O5Bt!e`q_B=8&zC7v&dWbCBBdkcRa8wNM@s;7_B@CAO)_GW zj41kvypPDlM`T!iclNhRnM;+7xF9QcK}K94F*>Ne-_i`bF98(;5Lr7MJ_g-8B6>YM zW5H)sB|$~WJIDR!SD5wZae(L>18@BFX12|XOvn6-WE&&@?3YPH|A{c<$i<;%q3#P$ z`^I35T0pm5AWUCx6o2x$-qc2P=+G%h4k{%xaYx- z!jM3*_x`L2;@v-T+Y4i6){~;HzfT8Id~tlRIG>r-PdvFUz)MUG-H3MXlB{TvsmDFb ztiR~zFG4rk#a};aAw#<$-;i^Mej$t1`80XB1C~y)SL2ml-C-z z8X`a-qXWAv4CQ=y>An{4b%i4ABLEz7hX8MomTWMJ?9TwMG9U29AzhZ1b%TpE7b@&3 z{UqEEJvYE64$Q@8WyU|JDD(lQMqdsP`}Iy#Oe~p3_JnOShB(B(^iG>4)1{^q<*6@L2gaCAGjeL2W(en?AGp#76+!wojwrz)+^AxdUU z>Zbchl-v^v5~?e0T60=mAH=uDebl5fbOt890XR@gkgutk`K>A}mP{qjEKxUpid}EP zJm9!H2%yq?9>VC~sl+-hM|*R|@mKi3L!3H|o=&7V?y<5PdYUEaR3gQdwxtrsJ#n{) zqb(fbxu3it_d7*=JV<3Zho8Vn4G|1W19$(^*7pdKM2dn5Olq9x`x?H^vlMM zqTsg)c1y}et!=xT$0ScCe@>+L!V?@8UY(=EMVG@iJW#rnwa+wnhHd~U{}grOLT&De zb~h1L=i}J2Vn zGals7*!)G|?+XAq+SD~re?!@WMEb1h_8Y^jTI(YVIIA{)FQT?^!&Lw9GOK$|>l{SE zmzhSZZMwCzptaY*vghb-pXRi8&A15Pd#y!)%kz zAVpQjeoVtkNNjUOfT^vEW(GEulY4p)fNF<2+X}zN?xIT_P?^eFKCN^)e8TUG!7(a? z376j&{x-oP!hY@3^07*pISlRHos&?jEBFUlc>1mcTFgLq?OPKXXm+ismQe|N7RN6Y zzVqz}$B$WqyNQO&V-1CV^R1Q$SK1~QiiJXXfqY=6-Q5(@YQc!O2X+RVT`K9VGM26$ zD=($k^`RkRu|EzE&6@(6(_MA3o)9{jZug1=ySt$s7B@}HP}F9iI9F_grlzjGp(~}6 zNK9#yFHgV<3KW+ZAj+#VC)2=mC~og0$WnImJeA%ebsvc6k(f-SwnJ6N7A_jrEJ4-S zJugsvy*j_G4zm0_Ii`x_d!b>)e{#`zGQbIR&Tbf^`P)ZPfi+a%f{TNo#xnVAkqqS$ zxz|@4#jYPCv08g!48yUIY25Jm%~L<@1-=-e`Nxb~xzZ@+*+D>1!&O~^qJ2hTqH$N3 zr9jg>G8xCad$jMHY}X38&+8*Gw3m41*`a?Qr}PXeJOia_5XTc&+s#E>2Npd2`%C7=7iFjB&Wgjd#BrV;o{?MKBQa*t2XlX)q&={H@70) zw7@QUdSrTWv*2XY4;Q_T`i6_BI1fNB`xja*wXRQE=#S=DGI|OePawuMT0&9)Q&8o0bQsk} zcvg78btrg>nRvh~cBOAsIHZeW5!ol9NL0=BKr^EeoOK zWs0yq*xT-&*4;%YbK6X`h^Y@s*>wJmbGwY1uT&eI`+QP2F9%NPYQL+zHG4iO9LtF+ z=@(zK`|_qDR0max(>Z39uD7~7n!+n%2jKj1 z(lkiwJ8aIXq=GxAQxaT*dsI_0ZRI~U(e55|Ly#i_RcFOVI)3(T)m?aQu1g8E>u*SW z(iiKCw2vTH%3HC~Zx}wcUFys&v#(CBEaM;_yL-+JUl(6xo0vkM=-2fSivuCgjtZDH z>+g8F{yIP3OMen`ps-;bFtkb5O|--Doc$4V#58*ki`bH~-6sBu!QXQWQC#vg#y7ud zR5`An=(QJtbld`5CzQ;FBwlz?n>;Nf?Gow5oEe?$ZEE_v;zac4o*l(L!YmD?T3B&2 z(Ot5S^o_|N%IyArf(668UOBzP3+K~cad&LAwkdc;`yg8^=sXM*?n`WoSBGc~E9S-9 z_-a!P#1EZm)_cP8!vs5kBE60UhjU;G%Y>2~($d5=^G{)~vL3V5q}F#CE-nTHgrj&0 zgJU-z*3!0+k|obl!`cQ4&K@rO-tS0{Qm`f0m9WXhFWab0SYJEVuCE=b?MPAh{}NHs zf$y0kw`BVqMtx?RSX}QO)FyS57Ck^*dZJTDJ)lS*9}KnWN4tq_W=s;*yi&ekclu1U z>i3TpeuE6*`o1P{>1!+_$Be-?(H)aaTyf}u%39r+Zfi3}%Q2~qSaMr1R?n3vQi z^NsolqgdFDo;oYGnI_r-cPD8HuXfe`%T45zNFP2i(0$-Q%maLqdb&qN4-l3$hA2_p zl|5lpLf^I`EyC%*$T%;;8KCoPM&;~SUKHVM?;U7$v(VSpVz=Bou0MEOLFjj+O?{l5 z@gDd~A7{8JLIRTl8zE5wL}XuQB$@|z^>r>3Gxq8Gh;x0N@uGV_=OmHTi3{+gm3_R* zFZXkv)JrAG;;44zX9hY?xQl&1-v&zi48$d6w>w7`-UAx$l(HDEy=HdhT5U!E=eF%@ zK`%d)0rL5nKB(OjhVjkfz2PMfz_x>3lSPCVN3yO%w(VGtu}c%S!-n zU8atDl+*t5gE7{^>tG=5BU1Oiu*lSDMMFrlpa-Ss07`Q@M}y~iCXWN=UDUgJ9KsxZ zd>rVZKfwY`kzvXmbiY|L|3gI>*1ieX*x^VYqj>Ky?aMvV2au#$epup3SkliA_rXF` z*7ZGE51iLa9Qq-I2*$eL$mgxcTNLOrB>Z=QL+ZKp;P4(;+<=-wwbz`y>Sd+SjD+`oK0Oby0r~U+1Oo}u4PTdTxS-t zw9AX+KzMf}%mWL_77u~BThRzeOO1fbT{eZe*d5cm$UAy*f?nE#!>e>R9r-8CZukZ) ztEfLxNq5IQxO%@icCq|hPqN=`Ksxxy1ipQgQ%mZ7PtY@Y;GsEAbVY4dVx*Z9oK~h? z*92$pHuumW{%-6HqHaf5BvM2Lk5q<0Bbqv;8EQ2|I^*k&_e}gNewyI)*T3r_I=o~E z(j|-Q33%z7V-Slm#}ei^Y8f@wX$?7Mkh!<`SZuPEiPuo>_1ADxJF!=g{(xRQ`Z_T8 z3q8c2KlQhXV`CYd5sbROn~SzlnM_xOo)kZgbpmO*I>)I04I8;}&LI8o?&8mdEXTxg zPP@l``Jp&?+nxYjgjhAsX=~rWj^XbnZRE9In(O}=*?Lj3EjBhZ8L>ufiS z;f)cVR+}rGn_Cyx(`VclOVh!P!cyD|+kOwRx6}~iF;*5J@?PAD$F%WIyTz{R?xLc6 z8YPmqg?B7`#)mWD83xj^^InE;0-&(9nY^a`F%}u%FUbf>tC1xpB|5u^g0?(G-WkU5 zN$-K?3Cygta~S}d-r)pGauxb!%8y{#R3~zDY1Cw>$fZwDz^6Mgn6y($U)aQ$(b!8O?(`+b&Ts0 zBlb2sa76M(sBDsRj`ZAk8)|1YKXKO;xxxcQg(Rne&`W_K0I`2Gg!^ls5TF;I>5978 z34m;0ngnOp@YA9QQE}QG^`RtZj&7p3GzeYsv}9)}&vgl0sTU+WqeNqQ2dXI59;-Lb z0!lUwN~N6GHIPzR4-aR4-@(&J`IK~rv!In%x?0%}%H5fHGFd4nb*e;%?5eV}_jB7& zf=FGdB-M{Y*j!U!G?f=mcGl{IdN20klDMhck(OeGB5{$xH!m;FXommIRt z$P^kljoA802wW@QqvjRYgOS*FA#vt3YI!JP9w1`Vx!fq0ua_NNIp|4k#cKIk<5(#d zmu+?2yVz7H#~@A)dDNYZL9CwsPCXV*#&^=n(%+{de@7Z$e=qT_O+P-C2lUfwi{g< zmB(&-)yae@SkK*1?bki%P38Vj;vQE{M|epC*|wy2xj3D_0pP1sAELo}FKg&gVc9v6 z`@k8@vYjHV$`$;iSn};kwDn~03nKpOSxi3f2qPJCW$`t0C+b0DzKIt@Oy#vRoEJFG z{0n=^;(NIKbj)=c%CDt4!G0XK6E^prp;l3~Zm|*OuH@us924~j2U2i@yF&w!SAGYQ z;(<%deFCyvwmQMcX?w^*CrFv^0IhGn4ROp>DZX|5fRteWyGVb^#A^$k-E{dN*&s(q zau!7tN*ZqE-~bp2;@;T%kSbIT^nxZxc;DqiMgqEc?>gi+;o|Up&TvuOHU;W`s25Vp zHMhIu1GQ~af_2@*fDGqQ>B$S(#4L*jVJi-e%`l4-8T4e-@-TJ`8Jlt#u=C2Icrv|B z3|K^_N#86%jryG~VC08PK&l~M3na5tv54xVajXyp&-OsLFMW6w%h$w*u;GbaOzf1G zFq*IYcOe7zoIqyc~|DD!^V0}@%d`hK*s<4XKkb@y{E9CMkL zRR;}c%p`JT_OHAaXGn2@JfP()bpnHVnJQ~Fdwi@NwuQP4lk>vWkhI?d?Yd23#WK3A zU>*I8C-kOZ zp4FO4@)^%0&ZgM1l?-8Z1WR)M`FZrvYzDcyYphjV9@*C{My{mT+DZv~@K9ESa2)3; zA`CaWCy3aUiK%aH>>{&BOpLJaDnr0lEBZe`bECe6&&rHtl;?j(rUl>n7z#^PS-n%D zHU6N%O}zPlvxCSz1~gk*7bFt%ud$#jdDSI|{tuEx{zuWWUfIUNGx(pVJ_tpu{wUh2 zJ0o5r8hz>bzmMj~cy*+-_l}=t?C3EOX48l=d~7>0-=XOHTE_}&t> zzAvQk;09mRKh9w?xp2rTZ%jOv89_qRJhJ7s^2SySK1H2K4>Sf8u4bQ%nql|ooTl(g zTKuo&-t=CKx3;7;&P*Vx$D8`OXG*X<{r{6!G;xN{lX3y*y#C;u&o_CFGn%yeT?Xb( zI(g%`FhxSOF`f#>k$NA>b-^O;@VnK)Tlt(^rx7$P>3yv9Tn;zV(xKS@zYDVBi;*7U zr+ebs?y4N&A+GFALni*&CJ)i`*|8v|=Q*nj$I$=Pwf7puzDu)Nz|sMIgM7XE32HY} zp2ru7BbA9$dTb6eY>cN#cR?I1Uygw8agGX=Tf96)_sSxUYs!JxDPQgj4gkQbJc#9H z;+0)_5Hrsn%du`N&LfH+@5KRCx(7?U1E*l&(g7GAvN`^Z!84$86sDYvDMw-Rr1!DP zJ-r5q&);G-XdcA2$_*@|$$41jTXO)}m2N2<(k(?V$^f%9eyf+uBbf9RCZtC&;grS4 zb?r#;lo@B71yyLnE$CVs= zd2v1>A`JsuIixE4nys_oBu851l`0fH9Z~!dyG^}xSEU^H)+|Ba80S-#@;;9`hwH?S zy*TN^FP4X>&dBl*3maDWh{gcKV`;0F8O28*E<|2=7%_Q8L^-YUZ+2QW$1S^m)S!Eo%@uX&oO|Ei=KM{p-pS%? ze5qHU&MY3y9mg$HfB!fU7t481@sH-UT{Q+z)cyg#m*WdiX#PEG*%CUyPZS@AC5u}+ z5q{zUVHZz6G7+fm*$x~L{Em+{$7?2%#QMMrN{3Zx@-?@Lj)-eZRt66d*=bB zVL=Jpi$rXI!KB+EhS~GEbZ6_`&jiIe{IuaviHHshs(A{#v4R8%#?oSCa(A1UOO? ziUCE379yZPCqdN9uokxmyPx&IB}6voj8q>s`GS|c?S=i=@~Z=J+Y~oa9*_2{MbzPe z_EN^TeA@6VOk&dBwfy;L1XtZHuB=w2KnyqFqqX3BD!+R#JX_9DECpMEA}g-w{zfvGa6}b(k7tA8wv~z(il(Lycf2p_B6~% zex(m>E~ZvjKf9e_ILt8A+x?CDC^s?G+uT8f`ox1HbtjYT%wzC^1&?!Jw?EEPu5Jw- zb)AkXc#gp;zQZR1mrejErTqd+aYiNi_ju;{jJts*zqHj}m^*;c-Q%ROpy}gsEt;db z&eOr2O8OX9*b~1RyGa*82)@q15g|tc^KS%FT+N5XB)EaNP0NgWGd^)l)T}IW9qLj? zAR5JE@Pkk*;$Ju62Vvkq5#8aTp5-qTIbZQ;h9-6S7^q&hDMXC>dx&3o@l(!T5$*$H zqQt31+at@bf9Py)VbKxraBW>w?dms{+|)>+tgVjeB5s3Aqaa+ZpFB zI-Pd*l5kw@k{lxX=u#BuH=DYO6{nq(GNj7{nM#6c4Z8$bUf}ECOrpDiP*;;vz(@2h$~^iV>-NK|Xy3 zb9?05Xi&1`Yw70<^*W!TD3P|)!q#=g&%f{kv*GX;&eOUOyGyzV=i=t?=E5o9*{mzS zc*c1Vrx+)o&^1@h9L7D-kPJ;gs8Vb14~4o07ndr-N|X5$^&%>54TmT%?klKnL3?C6 zrNc>_IG5NeTmLRdU8Qog%u2d85J}P&(sYg27DomuD+M)B^9Tf7DWeuW%}%QP$Y*}# ztQTq9$C*XxA!1D<$Ubumi=jY*7^tdAGf59{$J}tNg{`RTQCWyK%;R=XW?T46s!`dw z*DN3xB@3bqdwFGzbB-Q|qH&VTjeZI36Z7T4(8>JcV=ODf z{&WvkUL?ypW5#-;?xa{$=NzbBj_vppg~xz>c~8#b@veB|Pz zb)NX8k=t$3H&V_qXd0RRWnxFUHVb!onSuB~&ceIG)sFq4g%5Rwg2{BsW5R_`5Dryu zj0kj(9tb6PeOAx%A^&s^@nQkRNIp6ew*vj~)F#~u>cpPZa~tNYAj>%8h5AZES2*cPeJb`CKTkmee8AE+V(~hIpC~qDC5TOrWMXu>myOjdy@O;QoM(T| z;gMzRX{I8zE&;AXRZ4@vz5E}-jAEN_R)9nVdGk9*2Trlk9r_0ZCb_13>#ygiC{8On zzbx2SsixBJ(^Xau9C;qoZ76h|`eL$8|Byx0{%W+s9l869=n($^PDE};QK7PQNea|m z7njbE=v52oNV|jdGcD+ABwEGdh1jX>{N796wfriQznp9xFc9zFmx1`WKdM6E!-W9iuBjx#ISgU8ACED9l2Z?-6CR1q~Q5*GjK$^QChslUWGh5M4or+6TmY!u%BjjH!DE1Xjl zQI8#1#{HQbl5c$cbmp-MmsF#L%il;sft->rAJTQOMf^D zMgUfOXgOfF_pur;+$HDA0NQboG&-^5ojjZFm?&|dZqrYPoPIYt2z`z8`Lu1TML3R- zXpq<@Ukw(K8{`XG?U+dJrRERv*FO%W{}3Rx#WsrQR3GRsR`-WVS-t|@Qa{h>_^ukH zuJg*pHp6s8e5dm`muC*L>OK?63#eLL8MS|k8lvDHYxyk-s%NSR^o2C58yJH6FwNnxR zol)i9UxxX6qNRaBW8CpXdtvz~Sn6L80j0gW15Wv`j@H6Wtgx%!!7HS783>N#H3Vbk zJGdxF>dy_QdW{;z)lyl7^m4fsmM2q6@G5&CWg#;{+~K zeVzNlIoAy( ztE?8Xensv9B-=#eRv^~HO z3n67w7HO(x&)o8DrK-`(w}iWi3Ee5OR$V+k*&OZCCBXy5Dj6NC zZd%7TM@PDzI*9{Bhg7QQNw-8l1%~^iUO`MG1?CtR$IY|3N0v4CLsiRB%^x^iPs7EK z9u(K;B^%eRIl8I1FL+pxSk&H5@&-mf?Uv&x(CE{ zQtSGNz{srL!VGS-&VSc&OitH|nUO@qXq7G=Hw{Ntky+L@VX9U$A#%t67>xW-hJ~t@ zuOQ6QI0O(5!r12J)YktCgyNoAL50@}<#JfiT%9KErYj~fk@&Iu)yTNyvZQKiY?vD1 z7n{FJYI;(A_gK@LTT}QNt-fW!BV>8cH^(=X_c_g{yx@1#?Am-we75lIMYGRq3p4k_ zp@#PUZU=8kwo(=UG%ePJa|xQ+E6ZB=n@ujc1Gl7oUpzsUAv0AcO=ym8YT5v`vuye^KB9x18@t3$yz2I8MQ)c}C61R(3qXghe^k~Ot{xP5-=TF< zoDWyu%38GeWq7!TM-T-RjfZ{4+?Rv+VlLNGJ|IcKR4z_q$Af&D`96md6{bX36%xv< zRGMG6goWNs2DyFMu**J%70x-g!*%JZa#k2$HSb}B5&IVcsu~F_c|-%2JVN7iLIO(? zBF*>t7ax5)VTUCorTB2v~3MlhGv`FRkKU$R6p8?hy!@q;P-P{m$ z#T{9;f`0EnrT=?x4{F`ps%q%)H}%X-ovrfwA61JU*t%-zyxm;2mOgF-pr!Ef6-+bP z&t+4%pj3le`U)GhLPk+DOc~?Wcg5DJSPEEo|BdPRpCTMFFd#Q2-aq8lFq6CwR~g6( zh?=M3v0`n`v?WaC*Yc{eYI#+;D0G>~spO(8fpgZ8vr=^^l6I<*A7DDFVpSRBM`;r1 zwdISN3OSn=qIdA0zG$gwtU?vNv8F9yEjg>OoB~YJBVuWJOOlqXil*G!=$0_mXoY5~ z>U<`VT=pGcEi~ZqRrjMvo;%OR#aYRChPk`2#4^75AB;qZeHgK5RA*Lu%g1H6^Ko@@ zR+R271(qsWicy`}^4e0nmapw`|GVgfZE$NXpQvm;UbDedbZEeBw=7y*m4i_A5I3X_ zDU_e{;|^C_s#RM=)t_j2B>9ALoAg2#YX28H5yj`2XR29?Rc2-RUSho=6u5`7d=H^Z zq|s~7p)K^Eb1X7ULrKNdlw+)6+O0Xt>K!s*E|CO*1ef}M<@sN0Ne`IB$NvbTd9rRd z)$)He{=ZhWRkpI%ZmDXkj0bO#%q;yYXNZU$yagSax${_IPYz;Z7|)zHZRaU8mZw&I zN)I43TEYb4U#sT-x9sX0r|0T=+RKpt^ep3zq53T-h z)x0U+8>>ma9GHOK*wqM?Qyc7wuZLO-@A5P#l6;p)e%_?E#F0!rg~p*UI25tV{0a)1 z^!5Y;_$~^ISOYZhLm^7x*C^^zv58$;A$Ta%(lvO)gHgSo3_=?61pruS^G=3 z?P>}+^<&fKi`!O{#OC$u?iHk)CytLM|4oCke8qwBzTj*;$re_xV~#6)iJ}#4B(D%Q zCQHj`g*aXW`kBJtECTq3xI77^#y^tCf4_TTXnY>5IQB_`MC_+SnTwTDDNllSn)ZSP zDfxlLLbpm)(vslHd$maK-do zB?AKj3Xy!P>}QFCe}O1hG>g@t4ExVa?*&5E6R9*&;(HZuM+RaJ34-hZZY>nf*8ZGX z>=zPUD<<(VARmhW{Mi3EjFy5IQBSEu0o6Vtj*oTK`7Uv)2#!|6D3pj4YQJhm9cPAY zbGOk6lJ5c?mLk0!vTI5XfjcC-VZBl`BqVHwM^i}MaI#d4Qrg53tUu|C_a<&h+h@QT zq=XjeCdDe85V|)_Hld&w3Od5K<@RrnlFJg5auxY3b%$EE(2qp`k-+O%RBA z3)TIvpWV37w9l@7(0UKRN4b-kYhvBr7vCvNEGJS%EPA zpR&5KMmJ@3Q`La>Zm!z*TGc|d%{HXfW~=Q=au3NI-m<$YoW`_}5Tl30nHVE3Jvf-9 zG@OZA(-;Il4*IjG4r2tAI;4UDuJ)Ru?TfleS_3ED)IbRW>e?^A()PqBR8vmK!Wk$^CKV|*y<`if zsz-z+SuJAAj(+kjo;Q(m1}TX~b-)i6iOs;Lk%=4(iX;ri#M&@dqY|}7CH}8Q=|KON z3{A)X)W?X0|HqizIKXO5G`2%Ang3&0D!v>-cYtiI0W<%%5xH@m{67rKjg`~g*d_lX z*PHr9WtIPfJ9s;qKWzf%v6|(OtH{NH46cj_t%+dhR}fa3fYMHl z46EOo!hp-L7LVQaSxkb&KJv;-!jin#E(rhx#K96=rqx?2wR4O%)VH$GCITt-pP7Ab0m5gYC_6V(&?YO@ee`G{PP#P_lVfCZAY0S-zM}_18A|fxgr5z5$ zO_2^(oC5Snl@TeSJ`#&rmQmXitd5Qdck*RK>K=dkZ;PKnoRP6rF?46~u|b@hWo(rv zTI^*qKT{p0RooTG?f*C2yVc8BqlE9MmjxxXC;Lq=(VfO`NEa$$HnL^dk@L$);*k#h z2qTx>583In+o)n^NTMVoQcvGQ zIvEiuOOxPfB2Geim~z10G69r|DW3uYiP$rkdPyLVO+Qew0s=`84M5(yHY&nDo%kv!C<~3W-AIBYz4?MSE0#VRS$C2Ek)K2q2)TlvMRZK}LQp z(NskKx^YGi`N;uM_coAz{d{7~zSXU=dRfGWt_cux2p7_YfWJ)KA_;SI11aQDpO~N! z2ZAg4lkqL0STqT_PbA(~dT4Eme+?g+F#+PTEG(y0czJo)-C4it$~&cJ4bY3(F`m}) zynC`f))nT=GnC&yH;er~?Y=C7;E~<+Wxb*N-33{v^y0zyqI|?(dzX8NhDFN_;*E@~ zWO3;YYp`g@pW04gk32VhQI=jeN38j4Xy5Wj@6QU>HKT_}v%u;eQ+kU^du&_LZAsP) z(lre5=`3<1r(giJ+ixV-P^Uf}Wb@vAzt#pL_9qfIWQ}(_4~&Kqxa*eSAq`ieQDN=6 z%u#sf@L+K?V|rV>$Q)e9c5;1b)}10|(R4EbdAr7;?Jh5%i{rW9E?SlqBaUcM(RYCG z(YP!t#d2YUR#KGq&+T>7&5)dG}*9VfP-Mlv!4T#k`i(lgCpL{BC+ zwD-9T_%e}O;h-Y!x8-Yn#$2NaePxzWI=OioQ-1{<(c(q-T`blR41bH10t>9Ddf+&M*sp~F?w z$Ai9T%RQST8>9Q;v0D0;zR*nu8)TH$$ooG;16?G*J8$>hIO2CHbWo zx^;eEWFWkEaN568INDsDwGj(Z6y9Gam)*Bks~^6kJjLu2p`CP-#kR}fxQxHK;n6^G zpa;Eev($2a3O$oe-@ChvEuvRar`Y4*0V3X5r`&!ho2N+$2SeN&m=|f|0E1v`0`hQ~grSt0nW6q`DZG*{vcy9#EGyV%CY!a1_?4_B#K?f&U@n zF=X8MNS1w9!9ZH8Ti_6}o3ree>Ra-yBc<+Bk$&HFyO{7|s+U#?~7!)icQ!66o3iSYI>x9K;rp{{kVtTft{@!Qto28 zXD&@-KBu|vLR!{I9qDyN!g3Aat?x`PS9Jq^J(ee7aNjv`;_uaKv* z4^qYmxl14iae3S=Hya7Tw1W50GUy7}V}M8=9%2(UyC2v3q)?(W9r9yRO}u&7C9;R^ zPEj{4w7CMse`1lE^wD6erS_KO65m6dY&(i83u(x3;p#}ot|S¨@Lo#njbVa;J$7 z0;Sm07XqK@3CnlpX+N|ti(t%>`o>r-ajq-LmOfCB9uc84P#iEo`emM?;7QVFgklAD zdX3f-2e6y(pb$7vR2s=9HxQkJE;B;|&8`ev`XKr-%;67Rg~}C=oMI^a19M+hiOfFp zxf{Pa4dRug^+QV~4$5!lNXs4EccS|$D}j4XDs91cT&~v*i#Pglpb5Y#n$1LgV*6uW zTK2i;J75!`9~x-BCHM4dre2L_XBOAn8(q0Kyz&@|242k5>H%w84`CgN;RWOn7CsIB z>6v|WAhzPJAxyrx>glJ*{G^4dr#;9Gz0ser-Im3YqSeVn)$W7Yrly2~ z9~UO#B3)w17p)z~tMb+0hu zXGQWJG$=mu2&a=}KPVIBkzNoQ*9R>_n0}g49CslANVyktme5>S2-EG&MV&%lW+$d| zmiaD)_*O;9FHQZKv7vXN+N%mml&`sll`YsmwBzrji!eF41d#fw_Sm)XS^c*#4^x?k zQ?-t4l`Y8;sHlA*%`~hPIY4=RCuJ<5`*+5w{x_wMdMv&&Cq3sFn|g5+rvq@|BkygsR4=_p*-jcLAh z5j4=1yrn)8>;u&<3HPO+?x$l4q~03t7yvy-HWQ04C- zT|`p+0G49cVa7I1h(b&tnYhSrv|V3s5ko)q3oqQyQMJ}@G>8?cT1U22dPy>errPmT zy4q)fTs|@IWE%qEMCPxxT8v!(%U?_Sx-ZH6s+<1?%a!x8b?Q^X>DuCJAEw4Uyu-4c2#Nf zRKbqy-nltxOU}{HLw3`aa(IjxX*cUD0>n$}=XDdwoGxz7_n=Iiy4Yz48L8x24EBU8 zAs@wy(UQ%7HLdkRjeY?FeO#Q1fHO!B8HRFb4Wr*>3AIhXxwZ#MizPi(*yObsMO=1u zk?=8mkmE{t8*%)b4tA^So91eh#S`M-ovBvwQFbtp)}=kndR~U^He#|dV+;xcr9G^H zX|uJWnkPN4Oosu60No$j3U`D;6u#}}Y%7K>_O$4(>^g|;;Fa||+IqZB+7gvkWNg@G zEPS>HYLo|dfzH^TAxK%o}ac!)@AjLbon&#%h}$O-Ti#6W8?#3|+y-@iyDF z4>xHbI=Z*D6YITNXo^w$|GKzzkcs}T*ye>~JgMItW1Ib9S`>P#9Y)zadPff&6eZI4 z4ewE2T9W0ox(^)GS1fsYVh@i#eFsFvpvdUnTOTv3e8b_a5R^eP9)*KhYXEz0;%HCt zX1ja+MD008oAOgfvfOonm6$U|0IU;q+Uwm0hBf7t$_Yoc6&RQh?{sWq@wXd~vDdR^SpT+sbf&B|Y3zVMk?jIrIR$&oQ&<+(w z^H1*P@|btBMtUIj3JxvbeKO11R##Ad;ESxkP*6_@LnPnLDQ<(_6FDA!`1em7;fa6$2WxR_l|x zip9B0!?{GsN)e6k+c3?)o|TOx@wMw&YxL%DG2qXv)gt#-U_*1(F2xk%&#V+|%KQJ7 zwFXns*Z8N8>b7e@_G(@BuGg~Hh<^3#_9J!KnR;V{IIPQFEpn=4ruuA9K)#%TS+t(G z+6ZxR1Eo6rQ>gKHRI_s2vtxw$A*e!yJ4rJ(&O;hx-+*Y+Kze(3ao9i^`$c~b3Mt;S zhKxM28-(Lwj;FO-;~^%V*_pblqQ6)67~G>`5M4ZHy1h+Gq_zSY#4)ezfmqsv18w^& zCU3Ps7K+^8?x$)-O3vJFK<@B4rfNmTY}lbe1*n^UZt5hD@Ngo=Y^jE7dA3J4k?V^{ zA!0F5#UtBfM~UJE@DztGVkTG1o+XO^;HXmE2A?Oz-_nALHstM?hR9}_^fCR!Zv^W$iMnhb zAZspwyO-NfIDJT}&M5u-CNajRkn7j@&;Z4T1KNS)XITkwvWJPJ*I)$IhiMT5Ig5Bk2yFWas!=4(GP zH6H||Y3SWk=<0)>EcLs(S@lOKuq|g>$Ehz+qGhB$0%oKnz!4vIG!DlN}iAIAg+^UwN|&*z|HfI z9O{mI(k&F@0u@k|)Yn@)dKIXv#P>K<=YEvwDOQj0^%il@v@w?_^vYhY*SmR(H>0wL zcE@S>q2Do7lg4Rv?zR_Xfj}Vl3l4}oTFZN#yIqA}NLsj#BLPAMtc*wqR>SY}kHL*CF( z-_QD9fYYz{eV+3?zxV(A=Xu1Lz1LoQ?c3UGuf5jVvYTGjnwa)xbYlq|=Xdw^Iw3pO zUs1)pnvAZE?&b&>m1>I@$xVLeFoilnNy;BuOff$96^eW6kC1H<{hIK$RQQChn@!#2Q;J5J1)MTtxde!_E{j+AH$VK%VZng=jiVXOOJc-t=Jo@P_PCp z-UV(T#8%3jw+c7d+ReEAVWY&4>tv|w>ZUvlML0+LX|Mo6X^2Zgl^uhJ z0Pm%wx8b?vf^7;FevjK$!GNZEx({yJ@~|iBp6vx>8&Fyx#P}kd{{=!0e2n`}0b@LT z1iktAKb&??8W}@^0ZeA`9Mr`IFojAZe6cweldA$dY2!nyq-Q$wruhVvFY1fS?STI3 z+M+48x!%-)w@h;au zRI?)=A|1an)3{|EF1x0O;pdBJfW~4Ar1T%ldryup!*un z&O~pj&<)0{{xI8lG0B%)W}Lv&ChPm)s68FyI1#;`z_khQArx(bK)YuG`mFAg@tAWy zW?YK#&&u_MXmABu>(0%^%I@v0u65V#Q>b2Na+BvO$J)DHir!wNppTU>L5IdAAPa$*dqqZXI zbN_=nY7YTe&6)~;skG3Rt*MC6m@w4%WYdyR)Y^Ozdd3>WT&MasoDv^f#D~qu$H-6m<Gz=B$jt+*7=NcBHJ2BL# zJQ+(@i?D~A=LEt}Me|SH(et_Dpv{Z^L0qtdFC;95hzxR?^DHZK>pXG8Zin;`Oqf zpzcX;M7>O;tB>>EbZ=jHaV5<_(23Wfdw1~}sPwVf8fAl;RxU?ji)sO|Zy1HpMTH}c z%JoC&>T;AbacF+yUhF(YI#^S_0%t$VQfwxo zK)~BQ>p`b?2b;jlz|_;;toOPc$<@> zRys3LE38x}QZt^4gGzDBP)QW9e62IG@bIcB7NXv_o1jcv3|(AnJTCr3 z5#!rUMr~$_IFx2eisebLtG9-7en*#DUc_|l!sgxujj140d|V8s{2@m)h~El9FKPvL z`b_OiME;mj5C>a$Y+2S7XkS$i+IOQrs#c)?S>9Ly8tW7gVmemXdMnMS@rOAH>S04u z(`a{2A2S6%T@s22OTjk?huV?bA(w2K?N1SpnEa`JolPBs!~2`q8(la!lvO?CRdxpZ z?hn{c&%&YnCsho6I58uPYT_Ql3J*;PC|_k5LZ{zY0)N;KBm8OcD%-b)X1I`B)n0F| zel}~bEG{&w=)n?Osxn(m&*6V>+4LKv&Pn6v54B{sbh2+Q^~#S z6;+QZ6fr}rijsTj%{8`d0#?T{wpNp7XwuY{>+JLgZsOq&Xf39jawQc=#8e+w5o?#q)S>=r=18PAaX;ye8 z{}V&L2VIIy-UZGl3MAefGstTjr)#yD*YQ;6I|I%aZyBIi@kZ#&UVCe;+ils3@mEyJ zS9y%Nn3qq45Ccr<(0gg+RAN1#a4b? zVG9li+`pAxZI|yEwfE}%ckjLF%-Y-R`$A8$kj)B?xu0xHBT5kWAjZpUNwv4v)P}!h zrWbg74ZDU)hth}&TcmJ$zYN+mpo?k5={-GFkfHRL8C5(5Fgt=Ep>faz)1M{{rUQf2 zHdfe9Dud?^S@3{m+T9b!%y?kIqGf0eWj%mB+IoFPHf-ht@rW zFLy-3{cPh4w%$+(?0>-)!|sy!MOF6)L7acVW>nM*36Lp;Y&9u%0~k?6s{ou$XYil0 zKt&hso)!l|l7CWlF3M_l+oB*J;9E--PDvg_|JiMeQ|PH}w=EJo$s}(&#+Y)&1dbKK z&Ecd3m)Y>LVC7(&V>tjQMq{ELFM+8!P)25MwqP2az#fF*a`WuG+ zlo!5E<84Bcl}`N4)?2$)%C4k?{|1vQD(k6M)KKh;w!sP?no^S%j+ah@S1p9<_GOz7 zt=&?{zT}4~i<5M!1u(NX78{D!<`;%5^Zf<4ZZf?Xjet?B79u#*lM4|EY4b#O06$X| zjVt>#NLY>pJoN%}V|PcxTf2QU$CpA{J*O?_G}A?ddg@n&ZyruNcQFP#@iRC!O<%n* zL>cN2ZBhjLZeR5y>pk#I9{FpwhQ@jTRrM0!-v$)%Rlnqr4+C}FTyAs0zpCaHbl^%ZG8P_X=c?qTRqff6c-W zMIYM#BKpMT25NTFM|*ztqd|?ahVr9ZQLYM+l-=B%`CPB=8r}gHz4Qqe<><046GN1* z`qL&9AQw~o%HP3Q=Thuij7^mXJ@_>z;3^dfIDsnmpt+`lPx;WgwWxjuoq6hEs3^Is z%ee;Jv-*(!9AZRU8QURFGYy%F)+Qrlj@x**&n!tRiRqIj&ML1jv7Qv&{3|U|`ZTO3 zg%|cx=_A7rM7q+ex18){mDXb^Ued6INBH8W(o4GV01(ci!e=Gi2yEdghkQ6Yx3e_c z2=J#C|CCP%{&empm>f&ZaZ^;*2*G>SIea&O6rG2xwB=4{(;Y2weY8&xR?^3!72m?vbeH z{2k!68z07?CBp{7ycJOfKW?%DWF~?;H-Fa;#J>gG=lanAu777f=>Dz@a1$XrUY>$h z=|`<0te=XwPeif9|Sf)TjT4dt9< z-GY6gx&wwit+&v#CG9Z)>yJO?5-dfvCjunB7NJh;9=aK!--XY!;8r1C(p4%_T+-+s zBE{mAa0Q}OzGVyd)?*%pP}bD4(1H;5& zo01wb{v0M~h*y^re}Ob%lLb7|4L)!bNq8m+1WEVONRy`_w8n2^{)b|(4)Gcx0egAX zNZ;@%9kP|_3L1HFf&nIAOZew>Esgxt+n{)ZcH`&x1flR447k5~*_@ z5a1I#(`EQ2q^N~#D#VUVuC?iVeIpdia`i6KeHQ?t_VaXbygv_rc_9m&LPN^(}&WT1Gey9=Y<-_{f}Z7xN|7jdS_^G zwE!X+pD+eWoH`%=y79PcXw_IX?CeAhiNm2I7z#t}?1Sv0!-1Ns*{QOq4l13Dckw5I z&Hfwto1g>|ZZ$3xz)(ZSHxN~Eg$O|Wc>%ltc0e^Qq_rmwhZ|tx@IGSny}VOtkkC7S z>I!xQQ1k*BL03l3Szx))6x)SGLLi{GR3*T2X(#j=D1j@LA7D>q-HSCAf29Z-8z!KXsKu=W;d_uTvp|6DA5I{^%Y-D9M6j&Yg(STbBjekiW)GNSQzk!ygc^ZBSz=E5G zbyL33vEAt_J`E*J^%O8$E5CSN$pN+nx3M}u6Ed;}Kw&f&`XoVnR;)t7G0&tb9pve+Ot8@#Tr-jkVJPL)8hl8c(3_wTZEYzZGBoIW!=0L&5omhvcTi!Oz zjX-M4(}jwpR$Hb8Kz>_2*e6s7Zk6MW3R>|bI=Lq;Ld|dCTgD+whrA__GE9fjwWS~9 zXTnRMA+HKmRbEN~?)7L`)ivDkH2(|At>SF>Zb#h*(-hGm*A1bfgada8gjgQpQGW)s z3cV!^i_rV7KByeuV2pbZ<`p?SH7lp=02jS?2ozaxQZJv%M7;^qb^#MdI~STXg-$e# zmYP&NB}GnDe2PS&NpQ!)lnF$K2ztf5%CQi0m;@0|VWeCn>yL2~9`qqv45|aU)22ua z$&EP1Fd@vVK>G!JrTjE^ogP;5B~24y7SCN>>X`te`9F#R>C}Ea@o2SUD&)msBr|V3 zfMRgTmxg4SRBtcAPh9Me(yY5gVtR?L;sX7`TlURMfG4WRTPmH$FV{0|y(suaKZ$DL zIeRg2$qt-?gwn!u_5!sWR}JHRX3DHk(pAHc-$rEz`1=zv7B*ZBs{H8 zL~=`FXGFp#h1pp`C|+iU5eX*9~fi(z+TcY)w~QP zaMO<%p&IQhoOHPr0=IA}S4w=hCK30^&4|a3F3swHztqQ#|CZ<(3#TvK9$|JtQ2OmD z$c)0gN0fbm+_4D9h^ZqqySOn-PAnTMmch(W1c>WLcqE`^D+f?Lm=#f%z?MN!Ci9VM@vgNLsKlxh5&vjJis3lra7Pl%$B1TCM*MR zf-*Fqyq~<^!n+oZz^UY1C}Ixc>?W+8i~w*}-2~i))I1jjcJ(E0UARBWThJ%#nNbBs z5B8U4{nZe->#&rN`3)GFuCLs(Jl|xgD+I5?O05Y}?G9-nCsOb~d_yr=+LpV*h2cO7 zxRUTSiQ0I!2%IECk9Ajgkf%9!Xff}1rN5$AtF~dl11wlxP0VM6c#d_8k?U?40l%yb z$knxM#kTv1%zK(HL1)bjLnK^yH@oJ?!YFE5jWsLyH4Do>;S9REc_$ifdhuaRIbTvW z`OSiT5p!+J2NN-e#sOy`KTuJ36$A)7PagL}A@BC?2COZ?*|NSCJt7nqCfvDqCfxdi8jCZe~{>wzaqNjzbCqCEEsmq5Tev1gkFjot&wDoPI*P#5QKw}5EHEH@Y(!q0-XKW03&n8W03YaC|3P~ zK>^!Kr(sJwJOY}p&Xaia!;q{qI5vnUdL`~&e6C~MAhy~qx?tYvu z?w#c?is~5)?v~*4N?m>{(&HuYh{?mx=GdN) zwYK5NQ0YPsR;u_Yu^HcreuSkJ4!6~YP|BPojjEo`82mxwA#_6V_B%xhtS8M0Lcpnj zvzT6mkHMg_+~7_+>efF)scJknM`7t(PBldpI=ia`PezQ02mUd+H59CD$$rLYf0X)%~h{H-pa z7%S}w0Aql$PJ-egn>J&VN_W6@#mpfRGB~$xB4~-qzmG)=ww;XdhrG%e#i{YAgCi^C zaBlTb9|)19XhJ3DMm>y^WaS1_ju;EjPau#yILR5U1BaqnHm>|TTnE^4KLzY38f5YJ30v^gp3~dprwo|YGY7< z;xesnEkLLsj+PMrGw>KUq0Z74TYxgdnG|3tqCV$zJPS``$0MrT{YSw{ICl$_dDm=AfZ$AT zxdxY1gpvo^^8hlx%u_St5q)_(R(5^ zVKjU8aQLk}AV8Kq5Ih(`JHda1hdp3)6QRox>5>)giv>q|a^Zn#vfKyT?QF*om|L&U zFw&b36f#|c>wL*u^C0n-nqgdbs}M#|H$Z0N`Ux7X{8aH`5`5;ZYthS=yC(8OBk1J= zrSPMxT8rn=+ofxYu6hN>`JB2tf%l(-U|bc3H|1*BYtU5(2i2-fksyqe+j{BfTrc$YWaw1MafxD{3T_tpm&jTb37DgMV3!0#@&OQyngJ?|b^e!HKk zz;KQN*C=_g4<^6_5zyEPFSyUU3w-!Byteu^xJa+>5#Q-Muaj<&7So(W(0DTq_DY4{ zJ78u0B#(r{(B-Jzg;H>wZ&EKqV42-u00-`bC3ckevIyBpy9-iqoo@&O#r5qAG~2W7 zu)lr}CXWGzyU@!yB9UD*2u}2GE}M;IfIIf>4FIoC-U!Xtvf29J8p&(e+SxRAr>C@| z2)-S_Fk+O$U>>6z$A;;o`?xMv zupgfDWVwZTuKQsj)((40W~)%fbt^qWCppY^!#@`Iw{S=WkgEbE_3xtV)}DhKk#uF) z)fG$LhRRLwIqaA29RI2-9F0)WSA`3>hf3f;khe0jdrzBaGX!1Gw{ZsgA9u~1v`g8_@Cb| z&WUb#*=s(&C+;n(3~)}!_T{O>FIE@!T#l)cE5dh?%ntMP@vaRjW=8MFM4M?fn(2sSF-v!I`uEj8*WNZwkdKY#ap3{{}5^TKFzq@aT0* z@LjkC|M`;9kcLZ(GITIboU?Tl`fxNBLoU0nE{3=TFZ_~`FeA6@gPid4ZwaCYAywTR zfwbW<@Y#5soyP02F*JUY15NkdeyG_W&c0`&!Q3R@R;x%VGb?s~H$Mgw-s;VdVHg5< zvOms88vikRJoU4?51c5?Yx^35E2OgBcCLM(#+tPNykqI(uuyqDD2^;fNCa;CEPZhE z|A0@run?9ga~{GSzG@82pQ2~MB<~bBBYIE;8M}qe`mggzjuW2U}JDaAF-xAVdDSrRymo#E`@34 zp%h#>AyJi@oCY&6wV6uRYyGJ%{Q*sFbBNue2tET-MC%aIWOCIIuj@nTjNT4oRahp* zjPY8s8vhsEnRz`P7Ire2l@7*_3mp)Pq}9)k-79;0)T_LbOAMLUtt!#E#w7i3rAcA- z7{w)u{azab({{D;775(giH2$!UKWPTwaACXb zi`#{M_!cz+Hj4Fp5tqgpC!dFBqr0XDY*}vMC{uGnqpsE6VLyxav?A#^!D^xYOUPwz zn8T21sC^q1y)zjeZbR)wRQJ3_Qyyc$IQ|9`eYXj#l5PFTI&CV170m*;h9ui<5ED{T z?C^}!gKyTQ*ljfW$?dS`KEP}KJTAPOZ-W_F-}8rW;A;{5jO^}ra4O5WfUKHrFqkk~ zwDIKOZ^b9TMfSV{DZi0(OU6O2GmSvOdj8hqca=9iQ{v}O=68X+VVJ#;%!4&B#eSDd zTttbyGLv6^N18p2ba+#VnqGbyjq;#T=6mrz*|SR_l6qqo zG^GaW=!JC{jJkAtn$iAx$2WKi zvb(Yq)Tu+@?6$hGpPBZL%teIxj2LxoMW)@Oq&E{2dI?Xid53wGgnU7EvoB;#Me&g{hX~|Uhmt5sE z;o0WpBk+2TZg2qx5Z@H3bYes-e3y?wC1L$V5A)M`DIqu_md(sU>Vp*s?K&?7mdZnt zfn^pZCK&C?+$}2_C59xxY3-r z#~!Zuntr**J{a@uW~MD%ah;MZ_V9@Na6V9a^_BJpFR!)Iw^g-sEcV+Y=$8~f~$wo@JcMwiQTcDrpcowl{bvD@exi8{W<(>*Nz^>POEI0b#XJ1^+S~64B zo38KTYhz@d@D{?h06Kpc@rB4+qSeD4e*Y`} zcy;9{d~%y_V6A2DsD%Ed4_w}gs&PeEVvPp@tDzflS3rkS6ld2fj>8aqMmQc)T5KboAvlIyl7#GV>#tiC3qikAD_S`4BxI_I~@|h+u4tA)T*(biD)8K#KT>!xirc z_JY9^y%`ESm-P9P-aqFPL-kVuP>P`{QpG z=@AwpD;H4@*0&Ef))wX3&#FjpQqR2pD1?VRJGQAjdnMJu{f>0`v6|Y<*>)pd{yVq> zr|Iv(LIpFW;#t^zIy^lByvKkZ9i2H0D~2XcOla#&EaQ8Y;$7Ig1hbkvepuD|*<7d& z^X)mJmDHwAOR@UE%}^}n+cT(j;z+<%J`5dJACxseVDE#|wH~vD?V!y6Ou~L}1cIH5 zGpv`N!d=0)1yFqnPKs~C&QfvT)hJqeRCk()Vu)2x#@3==OxUhW-F>HEvf)XMSLkZ5n=2-uyvv8 zAK?@!Tu?8Yu7|2^Vjx;K$Ii7Ve(izN^G)bSg{%6G7htPeJ;!dPgi}+XdbGmmq@(nC zwC_QC6@5G-Ku;O{p?3E?2yK=5A+S@;L-u&Z5HS`&!wn2af?X^2H=e6wpZ|oVSgmGR_K z>|Ct;2Wblb_b9F2G7xXpGnm;_B4V|PF$8kH%{K}~o)m)@)K@KrQc;;E0u8ARo@Z}S z(y9oph6X>e*q?OP?Qj>tls8R?&g`aq6G9P~oCchHjKxr?Eyf15z8VMM8if{8 z$t@i78mphu3)>rn02s`;7{vW5*oPqT=>CCkRa0G}-}+*aZr3FCAAw-rIx2aLsG|FmCJy*}Ug@u(D~u=a%5`b0}C@(dWbC zsfxc<48x;xEk~i@JNpULA%gs5@+-r$zaZf%rDHfyLqrg1pwm>@5Ek*k*r_#}?riEC~_!g{-6#Gy)q9Wf<+%rp_p6TQ$peL5th$AKAV8LU`-`!<)B$I^<3b>RvRDVF10lYMa^+Lw%nV?8gy zlF9fS4wZsYcj?82V6|5=5pYB#-YW|s4e@?i%SwVfp*qo*J{}Fxs`=7rSb(3I3awBt z5l}WW&LR#1NuE#PvK+`8Xzk+XaWj&(=b~G4J)pE4yqfp7(4fNM4(X)9pX{L1}s; z50w1_p+Xx&iZxp4P>CAmaH!7al@R|<#xD(~n~UP4$bY6)&}Zlx(Wz;r4JD~$A zu;D;ibi~h>(x&1S;>_{b1DkyzeKhA{X03N(+HG^#69kE_!NHSaeHa2f75V731@M93 z&$FTvsI3+{ivT4K{Q@Ry>&6I0Z;H-C2U-51!;)}h4JS&`| z?$^CDIMgHQUe`cU+*O2gaWN)^tGzfvC+%X*l6n-~#=57PXs8)2(~9tbM#UP4`o*Bp z6CG&`w)GXslNC7_NQQTPfjQ~Efvu}pivx1YGz^yc5(cp4%w)8$Dq;-3(>mwm*chr=icR!DY%%%@LGW<;AHUKbr!?b%_W9Ej zYIm%(U+Aq&GSifmvk=q4EINNGHqi0c`x)t#G{?Z*lDpk^;T;t$&^6m@j)usvMWJ63vDbQrbaH!N`N zK9u}?MF`#ujBT)oD}7_dcSbufc6etL;zb)))X%>B?VO1g6?hwzt(dTiH3sDwEFb?M z&S^5y!BZN8@*A8dejRI2j))Z=GDVJ;k%B)3-oRM$ykIaWl$6CkuR)KOv(%7uFV>I3 zOFG%`2zZOb(A&i6I`IeoTBL77X*Y^T6h*Tz>DQTkK>D_mPB8ZGqv_XA?Sp#V0+^zk zmqVrmc8Y7I)km^Im5;>GrkxIh;whSQ#2)Tl%O&VcGM=FKoPedIMMJ;Vm-rzD~5?B zb_oB$w9?zCSS}`A696bPxXh?{skZEE`_oF*q-gj{?Nx_?HLL;!@muw^+27htirSLz z?C@|-`^f>Jh;ONj)D9d?&)O3d-%#7Ro}snYv-av9q-g;_#$LF*n=adv5mFATveI`N z{Fd=k(MVan?!XHjoK?wLp3C+O$eu~MRNRnWL2AMkq?Ue&0_*V;YVP;1*vEN)&V5HG z))$9T)K$BgD!7*1tB|>Jt^&Ra-|$}Pl=%;%=dJ=v6Q`D@sx`G~*X+yuDI;knWQ*DO zU9WT?_(e7T3bF>cG&BrFKiD<39+jino2ptMz?{@NuqFCAG)k9>c8!BJqIv=rxz5i4 zCZZc;z@I!nM-(1O0K8j8w|3lVpvv>mQ&j=p?;UBPz;SV;A<2Mn=HM+w zzoC|PKh$FJM=7YM@~`sVt1M7EPg4{XmygKzmlS9(+q?#vXQuX(e? z%WDl~T|mg4A_O{8_KTtDpJ1_&SQqF^niMoLHb&}!T*^vu^!FYk@E+8Hx2>*2(=qIb zA9f39JXM(zq+dGlMQ%wNVpKc&t3NY=AuL&?(fhgjhy+7^+4t*XCRJL}5K@dEJ5ZfA z#GFj^Wh%4sz>wNaX^wqRDz0;$qmL|(P~OVuq{UHDyKRc&enoBgeU5LHwc*npeS45@ zE|@9ywkK7!SqmHq0kx%%I}jzTYh$xiI9^ijOQZZ}F%H%g2xj^|mJsE;>128+#h`pH z9U&L+TJ}TfWLc}@9qQh6vMyB{lv(NIPE&J=8F{5-P{yQF&@0F}mqum3C2-DHY4Dsx z$`OR7dU3Ep`DQvT;@{iS%d;}^1a~@p@NSSnnFEv`M{$AS>E!uf5r4ZQ9kFN(23175 z7ajb4u3qKUoQ5dsz6NDqK=Y>Air?a<`91oPH%)h%xM|j>cfS6;0L9BTsX~D<7r3!; zs>UHnG1wBOOidTIPVc4g4O38X&>f-PuLxgx*HYS3>Gbms!>Vhk$n}yAKNy`%afG}E zf!!#e43Ix3L&b0J3-AeYa_2@IB*4qUCmujU37l<~Qr?oOD7g`CRE?F1J1kK_rcwx1kL^|KRqGR^s;t$| z8C4-NKuP}vM%8mN8M?Wkpgy(0sB+1be5SH|{$jP0gOUvC-P3K?7TIp}WLk6RTa)Bc)FpGC$vL0+Q+WJFtJ($nP8 z7$Q$E^M(kcYKBb1$8w2ZW%Og^sy(kf2UFMHqx7l|Y5A}rpK3kAye;j=v9OIiIC*^dJ6R53)5j!a&)8~FJR6ADz|Inh##%+L_m454EN*u87+2)zd9W!$t@6}bsisNWWn`Ms6)?n7-{_6p{zuJ8RJV&rbCbNBFqUJmc~H&wG@?{ zy^czTik0*bD~aDQ$*71T1ru0u4^9VB^|-?`e^6rNrwF(<*G4E%lYiIhRo}={D@X1C zYaej!XX2%1*9R<@sM#a5n4^Omp(jxo5tvp*OD;x)EB=k}N|E7;apF78z3BwAb1#vz zLWRy`RQe_1D(`KFncP*Ijd<=m>*z>0Qtg6fD)Y7t7ZLTTdWBBFN<|*%4cWmTK~fnp zjsC!4#-%k=uDBvn(O1BZhmZI&z2$NPvL40zfAw#GksOv0 zxj#a^LcD~$i%@}9O~cP+7eO{&KjQuvC_HGb@D<3S%HMGr;)+AH!Xke}?(V3M97a`Q ze`!7z%EXV6QV>@gyTO}s{uOx!_mGw&S-uT4syy;2hRT39WJLLL%4s*kdxHd*v@qnH*7@ zpt>p1NoK^UP$hKkXk+h&t;-)f^r}hn(CfBO#H9HhtJS&)9DyeiBFhL96o!X9;WNjs zgh|xv(P84+ctx1-nD~<~87$OoS-TKmkK?keW-ZjS%!bHRg#9x! zVXIy-R%8;EcXk+6wQ|32kca3wx!)Ja<6S7H)W}~H@|P#&FEixLp+QcGkiU!)vkXcZ z->1?Sa=p< zSaX@eDgzHTIqZ}>r`>Ir!_NtC7_Rbw5Jdp&Lw+rujKswR0S zb4t^o{A!`JbhUEXtMUf3NCy5?-soE8j$I=649VNlw{oc|a;a*$)Ms+3L(&q(qlDm) z2o8x+Y{Vp)F6q0@qraGqC>{~pYl@UaA>qzeafX6_2VZ_)M_w&ugcYRUH~idgcuu8Oq{t6o@knn*(2~ayTl|H^R(YRI!we;vIdvQ zd)~kRHjl&QTIFe6BjyQei&Z2mda#~qZx&Jwuo zg#Hetls$2!*6uJ+-BIjUBk255AkM4eLetjZ3a=4}3&KRiZZFz(8i>=&2KrMmds;ND z857`>iQKJWw6f7LR{4GyZTcP9ni?Hu<*_gdI))mf`0ldOe+h0)j{)5&30;wb^1lYU z8C!s^@ZwgWn;Hh)KQ0ypoae)67m9B$Ki7ad2god1~u>fWDgrFOcvV;A{*hJZb6aKou?k z`njblY7mt9B&yhP2vwZC4eBc+2SYdcqEl?#DFa?6M2Gzf#K~w*h8xYXF+Dvt-6$5DF3CB3U6bT&^rTdPeg=uTxiDEm6K4}dJ(fF~d zk_Q-XokV|*HW%Cki3e`uM%wy0a6b`FgN6Zj@#hZxb`6M?)ucH0ggezrSd8!EVigPL zWA5T5&Fz+Zu_92Enm%JiFI2EiSQl!#r3^7pK<|ZJRX!h1Bfmh|G!^cWTPJEX+nZ6g z0EW!QE;Xd-tE=bexMGn1xwYptu(+Qp<$C44;(9q?q?KQx79-=U zzK@ONP*VAek%A)8uBNZhuK4#*qT-@Gz?%nP00n-Hs@C5^fp#R4g&HQb=a-(lp`0Z`?!o^-kwNXH7%Qu^<9aEMEw zGQ+zPmlnTE<8q-VO+JZcw{zKyrx1|ejVyAVL{q|P`$@+*5OV4yuvhS)=Uf8zsBh7w z3#2<{sDcN%dE}l3;VplF*r-N41=_&(BMA?|WTP?$!?KDV{gxXuv@noH>?LrA%cw;F zsy>gq>uR7>ZjYq5zXdJXO4O8KMcERD%Dw0a2r1Ht{UrD1Ymsz|VGEeZ?Dk=pWzS_`R=}IWZ%UL%4PFaf^f?xbmQLRoW}vxoPMu;I1vX*Lze4Fv zjz}d%(ex(A9ntTL1%$sf+W&0JyHT_YFtq;iut55%$paX-(Iu(<1ldZ znmt_L!ndMm&?)YwE1)T0HVht$+R;r#r!Zs#=(nT#deP+5sLaTfWxRs z=j3*Vt~ zj`h4&i;=B-9M>Vu+=N@G^|7ERG-kl8R43w7!lfWLs0 z0rEn!-$Vlr@XX1GgpokaO=%&06ixe3Oz}@DTeTKpdv2jAo-^Q#KSk43#+QA@5fJSD zQ)Rw1;s><$?od+5`4zu4i zCUkoLv1OsB8<6*xXCQoT5986-~lWW03&w<;{An%`%S^!ibRXs#3a?2OS!nG0Ie3It8vnZ5Ge+FMzA=TvW zA?`ERQIl|09OC&?>CLfpnoBp({yVL>%x%G<+8s;%TF^+_&tQ0&(zUx>-633eArlW@ z?r6bO`Aw<`HWY%$_KpiR33txL?&Pjbrw83^K?5{#;aDrbV8QjJF~1<;K&UfN_oo^r z&_>Q`xPUJB7_ff#$B8Z01q;Gi0L}hWw*sk3GBvS;h(g$>j5NM^9i}_76|pqCl{=yrFl^(5yXa+3 zNDD?n6DQ23^GHzqjUvvYe^*K9JRzbGmb(=~*q-l!uJAnS--+9}^Qgao>wl9|4)vx( zNP(iR4dwX?FX#dQ;(tM_0|vsOC+7l&xV<+`=j72h@58BmHSFVRu3^blJywCuu4WbZ z3Hw&NFFI_Bb<`Fc4v!fRv|R;EcBRLW0b7RMzRpOx>~SP0o}t(_EV^5CaOo;|gtTLQ zr}01sTn9ag3cA3Di!>uBtZT#GczN+69IV=KK5gI=N+qE1#?V2$2}1SPks2R~N=kcx z(fo_rIJM|^+<0uD;Njtb$iOMP>UXf_A1O8knHDo5i#Bzj&X$3wq3L(jsZt8Z3%qEw z-|UQ3A`JM*V_1$kmzc7f=!n8gsB;wUX9TWGz&?SplAMt+RXoE5G!;SJWuiI@Ja16kA+R5p}O2*|FW#GXq?t;|4WnZ6jJqAO_o zeWV!1#0&+UrB|RAxQ}*U!4Tw85~o`~LpjZFm?Tl9cj6>zSgbC;iejZShqL)OLUn&Q zw0_FYl|;cm7{a<{f}%`3Nap?a%wqFQY-;e8r_6TX{RT1G z;4EM7LA4ogr(>$avZH)pPgwLDl3+A>1O^n_+QADC^u-V*U=k=V!1|(%G4(*uC1Ijm zLab??DDFQTQA(W8k8^gOKeB}xGKOBej&+jlL2vNnP(p>0|2sf5-=dwz>kP0uUv2df z=CN`*iXTB3H?N_1h9Beepo{0x>M)t+08Xv;#f)1>8`}Yv6M_VR&h=`M z&T1`Em`-?3PSQBXDR)Q|HVPOyqei5#kP`$7-w`QP4FA*ARelJhW|l-SZCTI!I~MAf zYVkUeDX4Qf+*<0+>j_{Q@ z2o%Fwx&HaJ+_Af(fLW-wSgJR}e=6p{ia_y1^Qt!uf*wI}q#F&zLqTwq0PBtQkUM1eJH#&B|>i8QA-&|APR6izz9S<8HAQ5!CI5nfuDFnfYPbcPb6S4&f3 znU?FAswaHJ8MM9?4X8w}@~jWt;&Mt~+IJl_eN1gipbPb-)7Oza*jJoS4TskS(rlHp zhjNs!pt4Xt=-V}1RB;5^?;{%m_A!++Tv;Ox+<|sf6s1N*Wxf=B2^cX8y9Q9mF6QhH zfL84^@QAOxgiaT7nmFfYP{swZIP#M)KbQq6?x7@au%-~2(7z?@#;_sm{q$-DN zXyj#-z+xB#1qG7Z82Dk#sb$~~;6BQ4U@?UfRQbsyqj0v^MoE{D*$kD4@_kJg|50qG z{XW3?m4d$FVhhpifRQqFlxe_*7T7Hxq{AOLVAmYpzXr^Ims-AcP8$4k(LP1QnDi*Hgnr1 z;~tB*8;SoII{^G2{3q>e=Ci}WpF8&^?(@zCPR6eQF!Dbc6lS}?pcCKf31+4I?px-ImUzk{l%nMhLSf?b>Q(UoG7NoZ>c3QNkGPq#hl@ zJW!darF|ZUK`SG$&~Cq};eX=ZANwHiL1nu`(+O6DU2-O_yVw!J%3R)!O+cB9IL=sJ zoltnBDj87BGimLS1&CR66q4+1TA~6C>tjHJ(C5Ro6y4}B_{lUtmAI(4Gn{r_$N6&< z2*ld##Oa~^ny7HG|HtDkcPJFQS`TrMKP(o0^e2wXrg~;)IBG9bJ3?`C5m@dtEwfxh z*bM0$Z0Uw!mnb@*i+Ks->MqtB1?@EF66P#Yv2qQ5?@0w+&{qb>LBL1?6H27nNvLWi z?dKA0R5lA+ZplwLhFQI_9MR`kz+GkCc;cZa+WVinN~KxL3)&F2QmVq!jkeo#^C#%K zh1CtXe86>*0tM!+1fY9#h_eT+^>G?IF_^nHd#_*$hPc2(HVC>)T%#Ujj!+QB6XQQ6 zjWh}z>J0aj$tY6NqC@LoehDc>nWklJXII@WC2dLs+xicogP~ReDy&^L9Tw4^C;)1)iV1LSJ3)?6&OOvAfupkk(!?@>~IIQl!g1tL~aGI|vlP6LBq zxdfpD(=z~~g;AIw+VYq|Zwg{12s3zW0Eo@IhL#|67iaz`WkQ3xC6_h)c}f^YJDEm=fik(EOGT%*+-ac36mUXdJ)Pn-_-Q1?K@EsvtaT{J znVU{H42FAT>rL1W%G38z1#R+!z^XH#X#o5HfPUo?phrbP5x|mT5V7PNoCd>}QYOE@ zAY)mgplE+!sgkhVN(C(;(!t*hwi^|P$e;#nbg1G2u=q`vGA+pTN8c2WWUl59X;Dzw zf{#FD+tr>THBIIdePK8#LFQ>>hRN-5b)#ejVq;*K0TP{tYUGw+V^|rF@*OCT17V=i z86GA##NDkpLKR5G_o28}Zi0sb!!gqvTJ55o0rXJq8p7mO=p^fLW(aHOQzIzA;=9El z@`#wbfxzzStJx49&Pyt|L`sYRL2`R6-9Ue#vJY{uQ@^$t@_2+(9h)f4ZMZeoqeE_yf(N; zuaP#=85t)dj_;PmCFPbwj@!jLE7n#ET0=0bpszu(+-ys?f^ZH!jAmCyLg5Fvk$~$Q z?IOC#Y_c^HbHz+IBSDrt(5`MM{-7jv7{r5h7@Eu|r#dcKYWbdSKun z!fM_a)vdkmZe{SYaTd;>jZvVD`Q|s>m!uC3x&t_}+oVPUARhpojnw&~Mtr#A{AqkI zbev3Ae7CGjfXKsahAbEboRz%Nvu=QNEm&XrfXmmRJnmADMT7In{fudc)0-X&?-rP1sdpq0lKR_6K9K-+OQSP`r6mDu+e zecO!-nZdmJhT||5gGM297iY?ivY_~H;DLQiPF>=7xqJSk!Hpb!zVxgU}&hQAiwK}ORPqRb#CwXWz$2!%CGT!)ZFpO7jyu6UP>|qG@XuO3I z<1p*w5tcD9L<21ujnz;XhXJu*MK_^Qa=VMV)$l3p1||j>$sqEmy1IcJpf=S;bAW;}hXMd>_bf{aJ|p!?-kb-(BsD0F}9v&GQ+^ub~n zB~eo#Nf_LT-J4hBN6|*?>aC1-6x{?~tvswQ+K8W&+!ypfBE~&Pwn)$RtaF1)E5044QQ5S4S!n6b^&Ll%w5O~>lcVB@hR$taR*L$ zn3U6KM1K(SkOblKhZhfU+ctphl=R0$m#Nv)t!yT6RY@gkx}`r)`$e3`80U`?gd6ua zZIC~`<3-sBw>Ad9e$q{V2lVpUJSQHFVc86sVKbymozy7qfu;0JyfZRU77gONWidIW zQjzZ0KIbU#rnK`W()oC-y$>WPOSjTLQ^WuumKSV6w=72Nk%|;`OTSD>k+|3Dyd*M1 zk~@P&^_Fe}5Up}iFdFsd05l4l*J;k2E@jpr^EO7P1DTL_1Mk3;e@4o4cdLY-y@H=Z zDW<&T4ySrhC;#sT!vxkzWj)=}^$PmnmNeDUXeX-hyC8w-0%=nSXydCV?(pM3puK^FCbj|4C>-K_JH#`b^&$pH7b4y7#BQQ~ICpNsV3-oSZN~A^?2y-JzEsv6 zMA4sMLFXl+$!YXxB1T}VlxGQ|3)q9V>$+gR&u*jwdI%QH;I|f z*i(87+DFb}JwsTwlxJb$@L?hj2p0(q0&R^!yH)}zqO!jag7xZ$JG$!_&?Bs4;5si1 zLY?>x6^;Q4qLjhT!9s^Ym(W>{TdYQ?=N&3z?Gw*@)+oFs)#IT#OZtXWORE_NJ=Pnt z=mvhoRRo!xgZO~Qngef|W=0LjWtD+nXG;_mbRKI%P}m}ql?BS5L+BieGBB$Nv=Ne5 zjf)a5gRKZ!f@DEU5SA%r$q^yBN9Iu*D;Xesv7&$p`5+0{@S8OPTJJ8(&zoTz_|!Pq z0G)$+LC^;PiuD1VT_6WRWW=>JX9zfG8m$zh!p^~K>4%s8y1`5uh2szD0QGIE)0c%30Mu)R+ zIRYjO@OStNCu{)Rgk0t)(_sd{A0QX*qPQg)CQ>S#vgPSuQPaL}u;l)9%0|0|Q?@)c zil8rT0hn;g9-|jd*`2kx)U@dad{EEppvHzrDZw{< zgfl=%%^xd$sMistfodLg`qpl~%UOjOG9Mw)m4RESq6eI#$@05WU3>8Xr%O@$+#F|| zg8t}GYU%x3%1~N$OBqoc^pJBrV*N;k5WHiaa{^iRI@Ptm%yS~f*PurcZm94Sz+Z1t z2GDm+N<7QD$myhBr<9R&dyzAg&NnF|%bS!in?I#Q?4(znTDo}?M7_G$Ii^-y{$8@6ueUxJHj(GTe+RS7J#1(1qo={SSj z50G`>Ws|-^nB1I*H73=)GDrik*qtkto>Dq)clPt%4gWU{&B-g&)2VLy9U7n7LlcAARtIFcJ4jH>G&Vh5znDUWAtm-FOtExJTI3=D~F}h z$g&>ciji32J^QJK$i3WNizthz;{6nwJTVOuc(B!12o9z?AW`90@~()=3ZutYfGPrG z_Vu0NiY&VQo;RGK*Q<0Yy^OEzh1 z5F=+!uo9N_LVs!w(d1PC+a-cwd98ddx1VZ@inAKMl-nwWu%%8q;wMH+RQ*E)f-h`oimwum!ymkgo~egZBty>XR_l9G z6IJb3z384Nog9% z!72D#8J(>irPnz7sy~8fsOT0fNAWZbr03ok7^6-~OG=?OzljOzAxWub$~qj1co!q_ zaFe@4qpz)B>ugsF@h#qa+F7QoeXwu;p^Dm~zWw`l`>RoiPQX<)lM!m-mAhf_zS(Ib z_pEUUGm@LdX7p3WgFCwI&%=9R9p2c?e40a^x#l5Q+58m5Z$Y3lJQ3W6Xl^jApR%hQIiABx$le5g_rL*&+#KYr{`*IOtrVepGaI*q z3ve*Bs_jn17i#VY+x6elrAJk*W7J@j9AOQCI*sM*MCP6cmn_Tc!+^LPF(f_XVvXge z78r$qepPQJ!lz{Lb3m~G4xIJ;bgGMMb|*8H7g3+(&O324@)`mF)oWqVZ<-8uFw>jc zK*Q?@wWEtiuV*rF{pg+CUXa;LP`+FLxg0xFLth;F2Hg#XQw7r8H^$=6-ZIU0w-J#g z{Sa?Ir^1;{RUc&I5@25$cCq=0-6A}wWEs6Spxg$-xgzr#taeufZa(7iv~pD@>UY~* z0p&lGVdqz6CDdAWI6D;7c+dxy5d27B<{KFSwMEZ66BL99nFuLf=`_P)2>su|-*PrR z5At4ueJbD7*N)!l#HGpq!`{1qMOkkD-^_3t6m>=h85LzzL{!v4QNd6KMFm71@`Q>y zmiyi$pjftl zzsmhy@Ady*FV_V;&wV~U_geQ_>;A4XH|g?Y$(d--?~QyLDgKH}~2&Q7F9> z#4HWcxIS72{EwRyP4})1cHKS(yHJ^+{?#4m%zgyN!s!p8KPOY{lVO!JJ7VOqha?(5 z$|$;}D~d~L^v zL!&4-rj2l&1rW3GZCDV~qiX>f;#F+~TeC}0lyII50GVSU06Wfc2@K=cvq7i1DUC(d zD^V|wKez$Vprw$$qPMhqZfEEoTMN|Yjegwis0q`nD#W74*4ouI9mMC4t&I{5s|5Bu zRcqsgakap&c?Yq$YHbuoyX946a}HpwI_7{K=l%fDg~lq{;+_uRgy8^R$-FgDz&0FM z8!apkL~Fz+ajV)XySk{`uBSC$mW7L|1C*Tj3ijd0v-@dXkCV2s+gy6}I3+c{MctY) z4juk##|L^5k|kAeo!DUzxlt>$;?U!3O=@#1vE_>xFHsZDj@=CEDx>K0#M%+UeLMFf zECbgYG4(GPxSsZ2;@088f$O`7ho(E*DP&L>OZf6CCuVC@g&=5XBLEdHFJOB#oe0)2 z8U+W}c2~#7ivx2<$9N7OT)Rfue?@F)hgXEPb`=}YtF85(m_uv72v!ed!~QWRMs)eg zcbv!h(%QcM>Vbnq@&mRQ&p(f@4bZ9w4v`7^dAfeEcDSE|zIAStaC9$iEAg8_bTe`X&h9wj@qID z{CkyuGWb%h44x&@-XM6ESi?UV{O}txc%iuXCcz6u?>hcjJk#rnCaP2g;-O=_7Kr!d zKZ_^mt)gBkQMSOSakNSSO1< z9~2EyTQbF?UnNHg^Hi{V9cSjU4JMZIJw4kSP@TIb8Pr3kv`~7`@c7oW^+hNSrikKu zG*QBRakwGq$RplD4dQ$++LGEB1Ix(i2ZOFz%W`l1J0spH~Aj&4kh z=k?EuZtLJ19|yA4qw`|?OcLYjaJlaQ*l{+N!r?luB|H`t;CbVxqW*#E8kE}pwoWRe zNIq$d5T?A%9Yngib1M-UU>n_T`HB^JbMkLqzG}|W`Ag^BA~Ju9x?eav+@4CxHUTs> z{U*LmXIii)HPBY35}I=n$TLQ!br<=6yMar{k4U<{yEP!M_qGQ0bp5IT5wH)!UR6C2 zkj?T|oGP9i4eIHWfYuEe5CpL65)wbSC9pji0>q_y&`=w1N`v%|)e*Ufumv)iaUNms zK0-+jH(@W!GHYb%!){EcbQ!j)r}S9A9x%@_6eqO1xvsbE>maUpJ#QgahB;SF;ZpRb zC@xCNtIv~7#F{>96(CMM?`svODpC!it7Ckj_-bPcuUoeE5zf7UIJ<+kLB>|XCpcfz zuoxcXwwd-vmfa}I@V8)8&>kG{DIr|C>(b5^rhbbPye_DNYQGrIYwv+dNzF$TN=o5f z{(Pc@ck;gQ7g>8dTVK)eN+m4T21rHqQ7!j4rK4%%jZDS4cD5Mqtd4tI)ijS4U7VIX8nvM<3nnSvvNw_A;{ zK(com+tZV#cQ-NN*#*(UTvDuYRd8jo>ElH#r@Cw|FNV;N`hyg!_$al8$gUseii{V@ z^thf5r_n>{cUPQ{u|@aLS5sgsxDGw9i5*!Yx$?DTxi{x^-j!=Y^p84Aa4&gvPV^xZsl5n~*{USYfdVRnB6erc5sa$2|eA;z6hG#3m-aftw23!KL+~_qd(rWV9Hvcted_!ecdD2 z{~$k4d?y=LLzWw9NYTJ~dXaZv zxkj~G95~M2?;e|D7Ikj~;-g?e0C3z*y}=4^mY^9#!8;^z+z0<}Y~&M)>B5+7%LQ)s z!aJM=Zv<(R*q)57YJjsog{9(o5G4yN!*RZ4)D@l-xu>G zNo>f%lMIXHcu!J%$5|n!J1OcO_Sd+UYe903wE-Nb0d>_;#Br%+%`FoDt5NJKZx24-t;tjO7NQ;f$J zX?wj5uW=&QToU71GZ1t%UgJf<56*tRgCN1Ddn`7ISyK^OWDU2)is9dEYKMQcifBQ>92NuU<`EJ_>phK z!@`_oixzv6Y%%_qeElE3DBe%9b?#?w>l1gTz4_^iV)NbihWixk@$s2FSnYH0!@v8S ze~4%Ha(yW85xyP1NE6-6wqDUQ2+{<2+rw1o4+Z(e71A~%ZJf&cy;`4wWPCjcQ&5n8 zxY5t&;Ku>xi{JVBJUovS4ZfZFoc8Vb@JGJ-hoJ=9B76)>l5zcTmPSPAdh;`|9WkzN2iGWDrU*KxZ)d2%_k<(ByuY+<@_uW855MM%bK61? z3rE>Xe1m-sikdXLLFiL#7JV8GZt#uhGnW4m$ttCq&cGD!lqEsCDj(<&j7?(h3@kK7%J@D z(Mog}RSttT*U7cgRJPmLd3>Tzr`ohM@Mx-SLJ+fa@HoG2(Jjpu6755F*(tde+-m%K zFn;n`<+Gc$68iA=0H2Gl4n9wV*B${i9=1&n{j=%)qghKEJqOZkOH`sEcW5V(HqO=^ z@zSy6tO#fUr&Z%FuA-TGzzrGSE{}F)*p7G_Gi+uR4!5>_2kV44OYO!e#1#{5!NABI z+t{nKa89ZK0An&Yb=(te8dZuooIeE|Sv4DR?L=Fus!kl<9*QqXi!EGTuNH6g-qBU$ z@}fE}4sXy50;>^F;caiW(POrq{1s5f)&=mL3a8unW}5)f;e#j!=Y>c(Rrp}nTLgU? z4g+ewVGG=Df64dWJcXxYctSAW6@|>}PFx%KiOgddwV>pEnZ>uZWNKT2T=uj^h4PyFd7+F{9G0mp43)+#w`m(1&) z+S*T!;;a54X~SXnR6gCA4eyVcMJ0a>eDx}y7Cbns5{gWnc(qTn;-9dT<|E)%ar%aV zVE_Z@CfUL|{(~6xRov!f-PtOUOtf%rjiN*OL-ZXDRIm1FrmAGBYp(tPupF+iE{`g; zweYydn_D4oRRVOEXbS0gNl6mg906o5CCZ<ksQ{aNW}hu5Upeeg+G>@5(s;1`GJMa=5Sw08riK*gzS{&bkmb9>+;wbN~h zE^zx@`Ftb$wD7a})8VU}?`+}5`6|EQ?QVE)_jFsOFsgY{oW*O`68MPzfDl@W4b7295y0SgsA4(R-S@hs{ZmGNn`ae}XVk#Ve+!&Sc-|E-mkq^mhRi1tO%0!t0DCU;OL_KjJxvZryKdPvJv z`MviB2D?n$_p1GS8tr~cj=8D}f8?MkOuf>p@Z)l~m}$!r#yRlmxfe;SWXsCt@K;tyYn3V$Ic8N) zmX6Hfid{&vzo%zP-SG=aTYE1S33W0|$!{p6#@haz8>(gFacIl(-L;j$+XCcKrInUt zOdia6=j|c*TaZ04FOfCcISOPr$SWn7fM?Mtx0OFdDWh3rGF|;!oDph1%ks`uxF~<6 z2Qa^~z!T4tFD8jD;6IfeyFZh!)ZVm$IjObU*b?h;qq)&{XB+YKBjB!_Q1{~k(bUk^ z;@tfVY~r}yOpL6(c57>m>mr?Lk_AVbanT@`Ww^*ROBW3}wwmAg8j#1b?1gq;EHdf2 zws?;3a;;^{0WjYa$neOurVP39aX8|97Myp^EDLR*H9xz9tz)4r7o33eV>siOeva|u zxm&L7Jyn@F{cRv7uM22S>SAii7*0R)p5!TU5i7Cw^b9ul1$NYNjC%Ca_G! zk}~f^POZ3% zX8R)~g6^I}^x|mBlV~9a-UtM8ci+vNOJ}!3a$V~i?V8j95cR1ek-HseCE=4}3vKwX zE8=L8U&yHB%crteBG4!PD+6h%vR z6+$J(QRo{p!u48|QO?P8QEc5x3+uG>!r2Lqrf$$C=un>w;HGZnjAX97$Zz8gFKJQM9%jE4P1ymFP|OBoE^{Fag4BMv%QzlcBHj)7LLcY>-jCr z+-L(}=8tfAbV>)dewR8iePav;=`5>!5InV~C#1BLm3rafO*--V@OwC-4V`Dixa53o zDd%^Gtm1u0c--ryOoDth?q}&bx}}4mWz+-43VgyggrN_t@Pi_v{ws$#u~_ zI$+){`8TaB6o+25<%`#z>)gd-K5DC0ixYpZWTLDQ8c+D^wlg|W+kL*qqxsO53YCx^ z?$1Sbg4Rg?I%Qw53DvLO&c<+&r^I(5$cdlx)KFijas8X`*m{XSc``g(#6YrDh>o&n z7=u08U)T<|Q3ZqN%y%6uj=jL1mUz*&O$FN5McV-W9To(YJ=v8{_!0}?;6>zY4O29J zsv5E9kty5ERmTVz}bTp zX%&ZM$UKq!MHg?#LUEoD5DKs`klH~iDEV+Z$DoQ~u$GOt>Xm%Kp3Ly#S30O`Y@*Yk z;=ikoh|Hd)y12g_(4Tx_7qW4%h*#|9V2c%7^mqD$jN*$?VbPb`v#vy3-8VleN&V~#} ze5+$FPXiGI!6?4ruhV9K1T_h=mV3(L&cAY z7;c>CQ_8M6loWEuQSw&(D^~iD%j_%j5+l_XTG99k9Wck!5bZ;4nTkH8khOSXalFO% zV;E19dLfH*KE!KQUrIeEW8MEm_ZFNHiF!^cAc5Xm#W7iSUIOv>P-)KX+>3|7LXjCG ztCdlTPm~L{v7u;jR*n4SSU;I-7*WQ@Z-a0=+>ts{5S&?_jiJu|vQ8OW_jGZPxOkhH zlidxpx5jrVRrHhnyn$GA60e3B21&a!%^)YTzpPP4Dei;}u`oN0pVC|7;oD%y22MrR z{2UdWkQL-5lCIIocdwip-FPCzEn?;XS%i#Qew6*aa087t52x;SJ43LnGnKXzdBcgV zx)EOs_eKD2q5I%gsw7O7S$Ed!Y@4;=UdRQQy0ap&BTMidgQ)=NN{wft$&7 zLFQr|^DN9;7II$ss5hdni?dPH$P;pnOr#Z=ak9x~idH;WR1Bmy=4A5J8R`0oL9)ro zvf{0!LE@huWJD+%E=1XzQASzsVBc0U8nb7}-Ts&?GjAkO3Kco~0Ti`nB-H`@KUh{L zqufCZNzoXVxI0dc|0v=cWmekEvuL=JQVoOU;L0eC$Q&xOjv{Mf=?I*}%UtfI;RaO& zP!6)f6rynKPOhQkY7FO_scOz8qpXob>3T^4brr8+I6_wHRc3KamYO%3_vW#VOpGAch2Y8rhZg`pWkTh7W{4D)N8s7#+E28oUdrN~U>>l|$;cC5o#A?L=B z(Va5c&vl89T*+*l5N>dFLGpScK@RI!X6%sAB~Vn&y{QJ(UXeLW)=0Rp;AkU}$uX{Ygj(NL^iM;9StA4YP8BB!6vmhM zCMt%L_K0p98vSwc@F^qY#*;yh4vO;OawIZn%$epWgKIo*6_OOzY|H$XC$8;JPXH5B}j3SOS>aD7IEEMJzx{dN^6bi#Wl3++6(i-q@ygt0j*_j)q#);^ z{k(AH<>mXMCKTod@{+6qI?X=>r$vDR~(b!=VZ86=*ALmo<__m=N~JRPoY(f<7ki)WyDdnoSRfx!&IV*zGZ+6sWR78#>@EkNsPi&MuFK$l`UN} zO_?3}?3hN1+>mapr#E3tYMz;oYqB@8^e#;XA6uH-9;Z=cbqACM6=@XNcu#+%d|&zN z)fG338Cl+GN~a{ZKu}Xwnx^L?&y)cTh3qg+Q7)g2Yj|d+#>qBLr@)3Deo{5V0OhmW zs5h<>C#M&W2+D6}%Ww9&-ZJAZT<#g;WJ~4q38Bm2xrS$TbT7rOPwua{`x;@@s~v@+ z(@a`)M3l78AjeE{EEI?3bB%n?6`A8%MA>psG^3gCYzC!492;L6jm6&(#VRC5EIJrD z&eN1#T3G!84osc^;ixyjX?lofSvh7m!K~`NwpFr_bWz zU_amZczCf^UmRFg+}X7p?x-rF#3+tOlq85LM{jE< z8kZNxiHtP-R5w12D`n$7#SO|IkK;kdN({LoOX5WKcNoA{{S`@cp+CoG=XY!IK(}Ot zUhI=kI3hy=lM63Zu~Lri4k_}K#sk(Ki?9WhveK$k>kw~t!nt4mUx+<;7Xq+`bA1qg zb|%dE3F6HkI+M-!YFX65{|zZ; z6nie>A6Hvjq7}jSuuz>dxBKCG>-@BI&inTjBWYdDbRF#%-Abf>6Y+-lDh)%1x^ImD z8A&5UH)`!K;bY=rwX zzA~z#Na$_mKncS3RhE7xX`l{z9Xeb=XizW8&y0lNPUMGG z$XF}?;-rePoI3JL`8u@>MdCCEuD*F#d9IF~riR1m&f*4lnOXOK`bnDf^$Au?T_ z^uB36Q%>xWl^j#>t10S7Av)2%#1~=t0trlTN)R$k){?ZV7bY7eX$P=FH}sprMmc1s z{&!SZ9}5Ogy>kwL7}we5p2nv81@vv$M4LE0u7qFFqt1_DABh?&k?@U9qe6c{R&J`E0QWbAZ~^KT6{OBe2FhA;SrqaSSx=?}{42sF&>Q@zo- z>(bFM&jg>fb|`y5{zfcMVGT6m#V$bz3|2-nO^*)e(+(Yqw02iFVr3ZQ8!LgZJ}|GT zyIB$k`bUd~$&qwoHQY{i9PB}`D+}T@*ueqmgLMcBR*@|xb|Rt(R~GGB=Etf|Y>n|m zN}^o&D-l)|FsbJndb046Cnz7f3PEKIfZ(G^m;+ zsVmn|C=R(rRS8m5#|cCcO)=>P{PT7zm|+mRo}`P_Ie{A26e_XYbW?A!=)NB9#PJ1u zxu(e=XI2F*g+xj>pBEsJzk7oh&5H!TEq<%pBCuEm%8?WB6nIo z6bR{&FyA>)CVE{avb@uiR!P_5@$Us2Mabo89|zX)T_u6tKOh~!%Cqg@)#}-~6y1?|Y%fXKS|O8&A0+kG z{XBiP6o;d?jvp!xFWJyfJ$Rs~iAjw0ZuOXm`*A*S+{iAZM|I*Hi9%7e#&P4v=rBe7 zj^aq+w-X{TZ(K<-pe>7c7N?8Ixm*4ln}1eiSK538>xTb3DL}*b1O6)%;DC8LYMtNM z)N4+eSS-JjH2hu)aPG@&h^f?({E7nn$B3dHY|>U2+k#aBt=FZ@g_!gTGWw#wLMbId@b3PmC)niWcJDfipv9RE3TDHH2=>gO>)BsD z70p!PTmqz_YAXg}!PD*Jt+wgA?2djQM=hPi+qP1OMs{SK| zu%21)A1H)8y#E$)P)_aD^AW9;Nz(C43ZbrQB~CR+g7rU=1~1t0H1t*(M#=JBp$`>L z6~_xl;!Kfe5#F61VjziEzDAAk{fz}i^Z{4sfpt4YDZ9Kv3J`h!k`xq% zq$7Fuz5Oau5Y*6oIr(a8ApISRA@2ou_fi9A+j(s0_XS0IsevLjE2~ZVB{hJhlhU*+ z)IjVDy#))Y0qLket`Gzqod$?IOIt3E6B&z+)0`K|hOr7R$rO!PWuKu#u?IWUAu(9 zPitT2&EPTC6leR2M88m2h!9`bdY~%r!;#01|P(WFH?MtrYE|JSBfFd332jzKwnQ| zPy6hyymBW@-r!0YivFNm>v8yr@I0Pk-|WYUJvq(Z%g>?q8O-sME%fY9E75i2ZI1M8 zOS7k_Rrmyct+=zOE!e8@j|j!ON~kjIAze;maFzRba>8DJ%}}elZ8-#f8yBVYbId;H zH6k{{9)<;?GuS}Eac2X~7lZtLjwL1doX_%zS38GcdY!NaNkpG z@fa<3EG8RnwBOJ+Xa0&g%Ws-Hr&%M>X_9@mSblS9rf4`;Y{80oi(5Vwc-K%}-vt)0 z(M|YNdxc2xV;?s^49(bU;SS2#srE<=adh|lg?S>U*<<|0xd3K1E8D(NmEt*_ZGWz{ zFr6wyzqtV0orVZjNbmwX=aX4$n64fuD$gzD^+<+PsLF^kLn=!om#0FhvoG3>meh21 z7ZI!aqG`R2rM)lL9u8XV`Gxi{{wcbQqJ}oXu0{4}&f%E{Q9Vpx%y@idL4>f%;AN<9 zP|nKWW#aU7ZrFv-hcY?VaCON2VIGH$MRpA^-sgV^@}{~)s21Djh=ygzICB@<5vP~gxx*lI%k9Wszs+RjFR{mSud{$qLeIlRR#Ro-&szjdN~DVmr=P@eu$OnzVb1E zg*vcibv#K}(@o4>_WVwl^A&tYzRD-YFkD=j5H%ax`l%*}lD!dl;ka`ws>B&t=(pcr z7AYp2?8afF2~MQxxHIRfn+weP4uJV-B#1HWnNX2oLFu> z$dE!s)kGDidvwr?FQ@7Q|3g-;B!280;;CP4$A`3KM_Z|w&RpIN#q?sfHRE%L6`Un@ zr?Bi|kJ;CNy4X~TW-s#eWZEI06am=2(=uWmuZ>1MAH_O*AtoAp9?|Q0stT83^6AaL zw)5vB_9+zQ>ngavF;}(H9-zU3-V`#NdAz-Hq!>| zukJ^^bM`it*9Fn-b~|^RW@Ame;CA~kVGJ9s3A*eTd4wp*#J;U+1Lr>Xx7c2|$G5`d zfLHa2-lF>k`v_4RwK-Z?8uW@2XHz)d#62K?dT`E z-$mgTHTvz`yU2d8)Gy}+#vqZrlP;b8*Ej?IM^4{GwvBgT&7RwCH%(kM1LY~gx|&9WG&`AiI$HlWQ3*lIA(4WYdLO{9W9oc{VI18-KdfVDg5xkm(dOP z%*hP#2B_CrV!e9q=*>Kt?||Q08M+953qQzW<7PYiO&8KV@bC?gm;G2HWLs{~AiB)l zL^=6su`K>A>@?0~Bdcc%MU;ID*Obc>0?9pF=t|wj@lfq8_C!{BH>W)*C>rZe`GbMv zW(wKpq>`rZk<0FN+Iy%?C~D;~@{-g3PLSFZCodZH^Nk(Se9y?(6>4c%hf#?;{#HMc zdXK#*yhi17aN`hZwX1*lv~S46notZrRY~vu77^1_+AkmyeW^_ELEZh5`m%<*?tc4x zQKViM{a5P)b~Tq1u~%*Q!Qam{BU*#3(Z1JTWJhIbJf?kiY%JWp#<3qwzA zyW8O-zd)dn5qkq>MN^PM)>w3WW89K(y~Vj?W$XL9Q23fXzwK2PM`lnyGx&FO)nN=Y{_9ZvYu zG01x41(@2$?Q!D8H)mnUl#}iUK8Qj>>Uwa?NHNZ{Ji%5xQsg|r{xeeOD2;>M8pxD)jog`&)&GdJp6=Sj7Hg6Cc?MW>=2T zUrmSXew0!21=@Jp&p)yL$TkM@Lj^`1;#6O zupni0#tT?enx2)4-Bk(udj__q=dE<)~QnYq#C)#|J&!>VY(ezZ9Mty{aKS0ABgB+0l1U^W| z#K~}yK`Cxi5;)nhl--Vg=tW3c00L)&GS`xgJZ9Y)4AO6 zgU>r*^`nPEW7-skYMR~GU`KPBVidVs&HgB_+$|`zIhL!1i|AlY@G^tT%;DPbn%twW zMDF>3YLt_e<>!91o><{7VONi?=kjb(zkV9mW)ott9fQeQE4%hF$?DF}W(j_bzEwF; zVb)4k8JmCJEcd0@Gc>45*UO-qCv>l~{Zw_ItC3sLKd8+)1Szp84rT6Nl9Bm{Zu(8BcE3xZYqlQ&i=tKOu;+p4_b1BFHrJ-e6BPb)h*;DQuHR20@xV*VZkd7XMXxvA;K zSS|b6>DbtN;Qmk4L2n3Ne6}D;#2+JR_Js_MIv-HQ))u30f@!Ecp7r(YJ!Ve|RmUQn z3z!`v4*YHYAhl*JP#*I-c&wk@jsrr3wDFrb#I}+ zIK2);VPMz<``mbEpkGi;vmy9ok@HURP~o12`RmH>!`OVck3+Yla$p>PKevX) zEaoX#BvE+kjGQxbGdxS2A=d=31j61h)6YR;I4;<1c-w&w&oLQCH{ksMSABb z)WtQq?Nxh4iF7b?izo#Tobr^9JNggXLJ0C5qG$Uqse+^ zNP9LP)lA&^x@S@8i+`g61^17MCh z6LgQLC*s?yZWo7T7qkfjx!`om7!+`FB(|-?4rxUBk^pgLabNv*=TJJVbi#z8qkaj; zF|!pZf<6IP#LgG6C!U<$mhHPfgF>>~a_4tPC#hr0e9(;L7vQ>Tk<)j6h`K|dSQd9j zhfV{zcCPjr?jbkn1L->>=!GM_B6{u4K@PHv7}? zHTm2MjXF3$bWOOUga2GE%2MSIgF?EjSISSglKgV{s}y};x4%UJ3+L+y=-Bs43T^Y# zyGnf#BFWbg7B=*nXbFj{7OEw>5Y?yR^-gz(sS^W5vFVNufismV2Mdp{V}NKsc4mA3 zCzZ-dWMx`EM?l{}*Od0YY_U%>8XvKjVbJ!AWIsn3K4=U0=idP+RQlD<7NYu>=yp*P z7WfKZiP|SwJV&%X=}NKg<|mw2oC;Xi;VFMdfUlTQ8i$nQ^K5o{dC%FZahR~0bNFo! zHZX~^_`VLF$K&e1Me^Z1yi?z~ko(2qu){S!fJ`Bygk$7%19wCYobO1~Q5TE2ZcV6o zeMoPX(ctA2Icl7rUFS3QN;~SBpMIp7I-g0`gg?MxNar*Dn(#ZhmZI~Seoc6xl793x z;WL%=nKE3AeP(hSyPB1z^BH$d!mpHs)2<26PzoM(O?Zrwe&RLZZ!77!EY|#Uxuexe z`YEEvBmHz@?}4sx`$wkvx#D3OO?MjowmY`)1sg^&1tZ}oox|obsN1BfcRL0RRdY4G z&QF5H@Z|ZqIu3$k-qI0k^H<~9lFtB=QYM+>mM0`^Y@b?8LoMSs!KL0wnbuEax@rSv z^pBzu&faYZ_Aj87?Zo*6tmm^IBhYeTDdPRNQ2j-oE}l<}NEj)YB*@wfZ>vVr4BfSg+~B* zb>c>GRnr_I4qRUB)}6=M7EFJu~GG3zX8Ya$6#on#DJJP+TLg<>K9lX-b zLUmVbyjg`hKs;5sQ|84Cw+aG}XI#$3UEA|oL z@6X1nqJWRo{c#~*$Y1+&RP2iw!_fbu)4?%`E{uLp9l~_ng zGOW76!H`OuiTYEVX_{mbMJHFkJBE{V9)fOdX9ueCLtUHeHvQ|i>!>@}6)hOtKU{0| z7bbeLZ!25SpY1ktax=X%y~}aoPxd|IlRUH)^R``AE6QXm>eluB)2%os$3nY@`MHj< zXv+Ol^RTb}dR89Gd{!1~Q@Ygt<7=RHWzS&OzYwV_my@oe@8{MG{?m;(a*4K^cg?^4 zR>W8t3R4l{kw3W_&wX%xa}hq9258s*sRo!=Z^G*7&wq-wW%vAH(!aT6P3!6`djL2T=&jvzzq1{hG&d$gSDrJ(& z4~Pi=$2f+ktTi-5hH=M{c8-C+OT3GtI%JC+vW|LL)V_Nsl0-%{Rl_6IrL#>-;6CA) zMUt2<)KT^sDzfa=6qWdR5>GNL_~x65kYO=DFXTyv8GRABIgdz2O-6(-;MM&)XY}Ax zG>H4H47`ju(hr{KoXk=ER|CWF$aMN!NJQZoGugVzh;dYzA;aqb(gpbwg=EO^N?C1@ z3@=-ceTnf^Dm(Hi1A6Y2$@E1=}kU(daLF zn;cHD;h!qRflp8L7iUcltGM^`WnrG|;$;SKD%bf22=nutgb$hxTs&(&+nyJDj*LMO zIR%+xl`4|Mvb^s&$dLt~k)a7PG#@0aqTB1>qqzUJ6>2?TK{WgTwsn!8-Ymtzdt_7t zw_lK4L?J8tcW<2-55}vaR|=+tmQv0)V)9WE=SUKkuMmG(O0qOT8=FNc6!ZoKWoK~A zYq{WL9PBWPO2X9cp5oEP^Fdvi1`F)WW31dV&X_gBpgYuTG;O`o-UE~TaBdb9gZQkR z)e%!Q3D)63n&*BBK|;W~rkdC`MG18~fLdEpL zY3-yGT_$o5No|(kDup!2*O=`$2Q@nxp{{Ok`G%?fDvm7x5KzI+QA%q}&qDt6mrbGC zXm6uhI&(gX#yJw;qRbCRH8;*(h=lu)`yQonlc;yzGjXV%K3>w?ILkcFdwZXW)9cLF zlvg6tH@rItDYmpMdFmZ3ON{RgGU&3dNvfJm(v6cibSYQ5>MAxFU0dmP?WC!CS0~fe z%c|si*~%MeW&T#CN$I`0<1&M8<29w`+)t_5_ukDs25r-dGmps|AWy+Q*1ejE67gO{ zc<#m}R~N1t-UhYg4*HA;0AcWK9rmRg6AdD6=_*B!G17>+!iv5qb=xe0v(A7U)P8QH zp&GOghxRDrba*HL%#Pu-(4Co#B6~I#CR#LPy0h1`@WAt6L+rg+NPRcbnWnr|MsZfY zwnGDW)wdM;0_mLHQ9>B=SZ7MR>Uh-|djEPB56Gm6k3m@#`Fz$>{aHdiM{zKIY&IWj z_f}Vzn=@MWN6p%)du8|K{(i?US!Gow_f#!!Ca9q4Vfp8l8HeSWc@t1VKtL-%=?RXoGBtq7&7yCxC|u556P6u^~DwF zgTL5Ra>i1iBbl*nXux($83^rqNQh$~#`pWWw^wFKCdwExhb0ohiQ|NuugJLzxsY?n z9KEjQnpU1Z5<{UQDO9mkifW1k#6-EYMwsqIbNWK>Nb_aoyh{42o3S%?{)Bqw?6=(1 zYUEXCX}-2>zOq4`CMk#LWA}!Hd6fre*P+Nz>~^cR`uVwDtI+E%>z}!ztNc*Gfxb+4 z2Mh=t>7_`lpAF(N+`6=8)X%yOR8`f_o46%Y=3`M|uB>7dIocuIPA*t{)x8s4UH@Mv z&w0FWnCfLwGO^fzopsxS#o$Kn-N{ija9OB!z^_y5?i$D~*G^IaFM&xn&cSBMF}fQI zWn;Nsr;Yt}`f{1R?sH54b63sKi8ga81HDbsx-lKnRz+%pT3UYkk+zKIJxG4et_;_T z54Uu@(*8|ez4BFwV>=|_cP*Qn=UG1|=#VrkP1jD3@pF}S#gO-jUlzTOqVwMnv|}w- zxc~7G)`c4tgfnS6UG)ZM2vRGW}I7Y`C0aH`v%jp}9z4x#zy{-yO zaQV~HgV-IT*w-Ua^J~%^I#oMwqw*s<8+3KeBG;D02V`Q$Hf+p-3lp_!?v5*6u%tvH z$uC2tkg;Le)h&wMIVw!`l1P4M4ByiJN`zf2G)57ggbx46*Il)$q2fR{eJ^g5mrw3Q zXYWs8gLl{>u>(iH{^F+$igWc`aur9>leOJ+V*Utgm`*#)+X+CClphF2RogIp`WB=a zATMji2Y{|~#Q}*ZaE}V}9}t@m8z+u^eshdp>|pN&^8r$Y_G1o`g+1who}zJ%47G0q z(o61|cN7Qv#Q<09*c_tz*mHWkV}n|(e`SkB7}IUo``?F}wegM#4!{6PbHw-?9T|!# zSK-PPmrc1UZgj+mH=pa=Q8d2jY7~uq7nr~?4f1nMb~uFLTjH2O(_VALQMZs3Rh+ewNv`FKU;=;l?@PCDOks|mgmQdO_ z$&3-98X`^~*%sm&k0`S7AncPONVFVW1$$U@56tTv2X;>t<>-rh!GAgDAXmv2$3|}9 z4wtkyu9@S=P~9YS4a=dvM+=ziHS2@@<-)m1BsUE}6}bYHy-6Aw7D)ugH;$w5bHB4Z zT2#FQ<(HPvo+_(D?=Ox&jXg)@rCpJjX*pqHx3fL(%O*?JO92X>>@hBI%nJ|=p4J-G z4_?qf?OQ0ds`4D$M1J);jmjWY_pd~!`Vbdytfls7Zf^3FUxv=waX(gk=axFM)O9*> z>Hd{bB5xVITv?A;sfaFlfNWLy>~!uC(4FArj(FE2+u=FC;rr11WhK1b?HH)kN$i6% zB1L#MMj$6d$zRClluBf+WV?d%9q~aG&G(JqavmhME_gPo(kSd~jhPf(k*8&oz8wz0 z{kPU&;9=#O?-+u;IdO)atGbDP1&%N=QQqwfj-WQpU#YzMfFyJGv_*FpngA!Y!eUSx zLdDAkju8sW<61le#W~;_YGVg6=4L{j2m42RZ*%PH+#VrX$B`HS-;4smJk$&+@3+FB z&L!yzk}6D2;aaZb=Z|JB&&iA9{>cjZsC^1jcIL%!ZnQKq^^Qkp>s?xoD~me&>e~)E2(+s#OlIxdm`uIs1hK{RpR3 zjfANS$-Y{4<;HxPx7yJ|9XnLSE?N=e*|pm7sIO|E7s+?cTE~#q>Vbe}JwE}{&w+qQ z6nr<&Bvgknz{r2Pe}L$-!Ey5UKuE-IbWCpTY3Ny5Gtd|AC&goJ#G|iwLjm{M0yKFt zWERe#4z36j2lk_pYAyDVUiFd4+%_(Znet%{_bu8EDl_{yUrL>aYk(a-oYG!(SY#5Qu4p5i zbEn9WS}sbI6koD*R(?1|ukO-DC zuN%>xy1?dmoPv4_)yEWcuT+fdKONIv^`1!HGLEIPm6E5PnZnJ?nITebd#o>Z8pbCa z2LEoYr0%g~+JX>a;a&BlSoDNrfa+thgMa>aC>qzCnAM=4oU|GIGlFF5@~NcO9whgz z8u^~w=N<@=8^^LABx%95|Wm9mnFc0I}Ko3g6y zImDXe>sBQ;^A<$@R{36|)O7kM3UkW$IPd$~65Q0v_t8pa2hwj25smWweQ*BrbLi(& zyay=n-QK4s7T#6+#GTDQ=BE|n@ZXrNbK>+T zAhw*rj=&MtF^g%``K-GpaW2@rL|YZjw9vj&5)iWd zn%F9FKxUTud!5g$YoZT{(=uA4RGo88GaOa_ArRm{RjJ7N zyJM_ZJYYDEo+mL9Sqny_lyecI3wQd|<`T`Ha6qb$!%oGrAEnHTKcF3dL==48QM!(i z{{Sk-sA+zfW(PT+{YDz&e1ptt0w}^dr0CJDR1e|+s zfDFiy0X3VuAkUH-rgO*R5nzG+BlZqoP3cl!+EV&&wa40mS^C%*e1 zdYTx^a;;Xgo#)C0_p3GA^zQXkTK3+bsx;%o^;BAa;!jmt`Tq4(8guebReJ8^^;BB) z!5^*k+>E;;|I`+w>;~2cGf2a@!6lMH2CcGR9boVPgR=z&p%$NG+XeT`=_HF4qfi%=I3%fcLS|!*SGbw zJMY*RDB}7TPj$Vv3ss|eU4VEjX&s(Bhi{G+A11Ba;;FmnaI3vH*)5NAkY3s3&PHdRw%~zUUmfA+LMf@v8ZM5iN)XOo1_O2dYcAk^!*K~l zF6&gf_A4Y%cfZMWH`;;(SzQu;6%MGp(5W_z5b3@pQJiJV?+O7x0TfU!3!L^JVUUg? ze5t7g0yO{3JfyT_@T02ARtS|_06^<`Ra=t8Q9rV@Ab*Fm-Caq&9z4;D>{QQiq2 ziH_(p;%7I}ZLwS-8pf~%>eG0*ok6V`Dbj=J-#?W8ag)gl^_dAtp7-_eP%haW4U(hs z8&IFtCxh{0Nd8vjPZBw4;RZ4MArYv6b|TE}HXdBNQQ~MTIW$*rKHY1>4eG2>BE2>J ztT~0KZ{9?3X3Gbb_EOCjx+$H))Mv@mnoKP)pXRlej_69Fq^oSY*BJ#2-TM{RXU!t? z_4+BD^lE2{I2ud=EnuJdGv@%rm?F~K(AKv_&NSK9(h=>N@jizPBJ)Ue(r;ZirI|sW zJ!wBc6H;XBtx103(BC8UYRxopRL0&da+ZgOxxPjNRgpp;YG$Jxdhv^{q1*;d???@e z>o9^oYeW65U~Zb$_f)V)kIJ~b4^UU_yQ90-b%2}7MhU)IvtTePr4Q2d>I*YOdM9cK z7UvDjrp=khD37L!LrbAm3Lfc+PDC_`)oe%|OLSh8PPc9wi|dY%P%dw!cczkt?-_%$ zH!=naTBq>`x_@@II4a|u^#Q=;bzh8m-{CNTDRhfa@I7Zn7dn=?!D?`P#!tI?QSUdO6WLA0z2mquB4;gZL4 zxF<>%2}X(6GOoo*L`yuCah*cK7)fYV5<<~B)xK%F!cu%Bksj0KBg-iBGyckiypwPEU%W>ib%j+z(M5(ol6 z*FBTCXEb_nfcRz_t~K-fRie%L4M@xU)QNtsC$JJq%tD{-{+kH6p;^fcW7HtIBYxza z1VAmlFZ^w2erm0RUyX5DvK>bbjRP=psk=?00)4QHEm=ZYYRBLL8yF$QiH?FNlz)lf z8tItRQV;r>R=V6)Tw?zJxRw3*@9s9e;%%-d0t6=?0*%w<##jtX@&VO{%ownp)2`&b&10Hc{w+^CBmiCw1VZe6f4ttr+R~= zB<;x>Ud4pS3v#KvUIDpO%qV{aaw%;ouL8Mre;=xGEybEh0lGB*4DiUWfG)N7_JG}& zK$jNz)B<#=-82ifQUYDpJT#Wo|4X1tH*CvQ7?+ZZ`9tuQ!m(~0#Y;%5E8v!jMU~c` z-|;GhOK0u~DD|4eYY;B$a!2rqU4?Mzet{3KZWPvn3hY^fe7zdnvSuB^>#TRss7!=GGE*cF(|eI590e+hHxjzjULosSYNKC&;KOs-&ETDD3uWAOovd*pr z`Cq0E1w)nt%JIv6KR=T*@&8IOelK(T86n zUMeKQFm#Fz_uvJ<8A}l47822deW{R$Ut(Xjkcf)4aEJ=_yfms>bhSyst{(o4Ge#U{iJR2&9)qF0r?)J47z7Kfjmgx{-pV8ZrfM4GVY zEBW^Km@F1#zIf-(72ow79)m)$I0a&2~Lj!sWfV@7>tCRHIt%&8w6Cu6p^4O(CVN zJR^0b6GDROY~Ev6cX9r$1fYwK-ova$mTnUb6X6T9dX^Tdz{ToW+AQi0k6Q-&dZX78 zct%v|kgGgjxuZ&PZ2u}^lM}t9W1GRn+{78|;A@aVZbPrqc+u1d=WXppx|VxkUI$jS zdyc z?mnd^{IOj2e1+lrQc73uN*Vf6@y08juW)tI7r}}0Ay&vJ!xhh0$R&`DUnTo)kgs)G zBrccTUtvbvwFC*+kK?#WAsu1uh$$V)411kt-9WQV5`@t!3-3qiC$2caqT+s3+#(2f z_oL0ssdSKq<120RWy zyov~xlGm@5Oj$UP`Y(IMif6Oz%K~q9h@}@Bzhyxv((;ajn35w`9Ac4i5E;E*u?Eqw ztSb(&7;;w#QzCsU8sdn`zv2)JyTVDGSYcOt#WIO4qy2C=Hbgoc8%2vu#~1QZH9N+V zE9tUNEb1IA8>=|R8q75Bz2Xy#r8xzI#TG%iaVoD3i{(c?RC>lqq2Rht5@@kxHQYnU zZ4sBx}AT-}-#A)hY0#EMsIaA=iAQpc0?8LV0^2`kR9l9mPN zaQ8gkppI9ZVMU1xc+9%u5i4Gut2n}n5`~EbU-pI-FO0X+XzMtx7hE9Xia)IQ;k+DD z{9#3j=uT)DE<44F7e()~fo6@68)ydoyg*XbL7^Lg^k0KNtBm3(m)sREd&4rRu;SHw6+c*4i`5m6 zSV^oDoM9zhafB7m1YY)mMUzHS$Yn=Z@#=~kaWa#x7L_8{c8n_3^5x(QD@k=$dcaEh zh4U*DyZ&XrSGfJ~??H|fT3d6q2P~7^p_`pw=|y&64~=Uyr7B*qlGG>uANJlouIcjc zA7^8O0RuJ;W8lDX5GhfIqM{-W4~Pmn%L6Lv@Q8{!@`Q#u1?C|SLuD^ivf0s!5}yYtiiy?@{D<8kkg_ulWbWuw^qHXV$b6WM0!H*0`!h3dSc6%2IUQl4yG8+l%Nv$PSk4_`VFbZ7R;xFx^$x9? zqkyqhVl?_*zilWM!VK)T#!wK0ir)xiNtKk<{hX+Md;MV>YabpeF_EdRCvy+b}%V zJ)wUes-Lu=NA;*(8(#ClQMIpzJFiJBfi3IT!`t*i=j;n_G zrM_5@3`;%e*-B9CHJN&7U-SeOADk`N-DAuI-4Eb%?0(1x=ccD|j#qpf3x>cfgiaaz zV1T6opuQ}Db%76<0t|_5+cLn|Th(^FrR`wsfgj-%%kraFfaTGA)SH3ggmK9F6f}RY zbn?XRQ@p~-fzZRnJu|)6b!8w_mJ*)X5F-BtbrHHjgTnbUP*Ww`qgGr^lL+Qh4x)s9 z1^T`alz-PR&nYl*k|I~aUMwtZLJ*_Q6684u+PVU_Fgo?jhPymp)X`W1SHfnfZ5Mb@vYoh!+24VhIOiLfhXji(vj?Gh zm_;<*+?h&CqE>X1KP~x7!=YK1D#o&t2YRY{OD4{9GtdB_jKcWYGa|Nm4+m~LGT^GA z)=vJ|T)klvqGm4)TQk?Z-o3HUe_N z%i!$FY(WbBF39<-t*l~?%>n1F4u&}@Pcf4odto!caGI%N4@iThibrssg}G@EJ0G4V zwS0s5R?jS186E^ju8;-7<1bjOn{WfISuztFd*%cnc^*5VEoTI-G3SFI%q;DMY^%0n zRg95{#LS#R7{AX5VkuuN4W!0-zPMoK4@AmegK$KHRb?J4l@j(y1D&r;TcA_ZSPxSm z+WF~Ft(=c6?W}6`hk&`N)?Ea2Ir;FN)>=ZWHpex4;R5zcMqfG#^-t!roZ}lyk+5mz ze7(F?6lh^BqIpz`IQ!8rwmHztwViZ#6l5|*ri&f1Clj}I-10qc<>m&Uly=hwSzbk( z@b=4?=(9JOec~F;n>&-7vnSdr(39eke}x=#8JjX{+XhCo8-B^loVHc;RNl zJ5~E3F8Sv5uuLCIO;b=UbvkO?z>pXwu^xQ^s<3stAUmFX3?{$Mzk`-BE*|Wto|+CU zK$ZoE5Nv(N11Ut;>rwUHumq?x8*nss4HiKdoMFS?A4UoosN?1ZS|?Ces0%XP{;OK#^cF9UlRd6+KbT#?P^pR6T%7avyKfLW~;TNY-N;&=9`ljL{jFu-L7s6Raw zBT38*qjiF#?^r5*b7}}L-dZ~TIqV8HOk>(9=jJ#vD50DR=TI!61S@Rh@$kHK<2-1%;?bi>)WdW;f7Jj6u**FIb8txmkX!*V+ zzT`W3st>Orn(!NpfvtuIvDggkBeB4Gk1OCcSo*WBzzoRl0##=7An;K*uH;MI9L2F* zy9@NAH(FC14}*FsM^z}rh&5hx_A)Z*JR9brRcJ=eI@G7{D5k=$m|^PF65!883Aw;+ zMiqvxZ4Ts1w8N2I_HK+y`{UkNhnVA{77H80Kg7bY;DjQqn#^B>c1c%M434^asZ;6f z`^g~~eh1!kPHCJn7}bNVG?VFYw=ma4XU-K!U4jAMc*X-~kC8j@2!}lmLnoNNw=q9@ z_04E5sRczabeWC0DTF_?jCY_}!L1Orz^4?{w&#N+)I*E8b2s{E>xE*>0^5eA)t<*U zzRTtHy!~_XIW_uFh?K10oXj z?6Yz0K#ZW(W3m4Z$2Rtm$sINx{t!bbsIDunKkJ~>t)bF!J33o@_M^IML5P#uVQt!Y z1{+~w-&HbF-h&q5et*sX>H!+#Pq2wmxT8m?B*3x%f=YDH4)9NEab&Vi!foaJikZlK zEeNO=D*}=JUe=zZ<72uP^6@km}1>5~0$K{CfLGkhTy^7xi@D zSoYCWl!1L}AB~mZ7P_sse`m@oT@Nh%aOr~SahPgWZ$w7#U@u+5w8!m-?uYhvQA8-M zX^Mj=)gs_Iw{?`va^8c{DhbtlGFBpt6VvuYWM;bzvSh`l6)@v31Ty7dHSRXdc7$wG zpwc_bX@(b0nf&@7w()ctiv1BV*#vkPB(OZqBuuFJ0&-2dI$ciP^>Ff6%S?!C(xB+4 zw}57~H37BFnz%zLI7O)$I1V&T5O)g>9n zlpK+hSf+&~1If0@NW5K(bK{QkKzb#j=+xh!zLF}Y!d`t)T{K(Z&>AP`i`%{3mM%(c zuPy#y|KRAGw8g2RYta?RDrsS;IV%-cjxnns%`y^aOxZaU;%oM%iG&D>VibED?ST{M zA!f6B&t#lHpP!2(s|WbE%jWdKq3Y`(9Bo;=`XwotO6izN>Nln%#TGT<5mHP%s{-az zfIU79W~{Z%=};zTdFaQB&^r$xo^d4d@EGlJH)%eE?sebM9swAUIlU60==?qaZ+wqP zGG>Nm*aNYkzo;^CvSu07ckRoMw@mf7@$MoeE*wo>#Zb!ZhWEFr6o*;TvUh0Y`v7iW z@AuHS+`SmS-HPHI>blo*_xcHF`);X*2K?rOVn2$GtRLG6R6kn`xY?6SvDPr*u?*4N zc>EkHqyqprTghy4Czg2!`Tku}aG?ULdcf!M2@d(i%)FW)0a^Dg!ag6T(C6lxpd* z027^^Yz^l@Trz&9QCj3NN=x-{$Z`FYh(lN)9V5*gFc}sgX&+;!rAKxmSv-VcdX6Y2u$$an5?o#z|Z0Ka;41oYmKG|Ha}a_ z8V*Vm;prHQF+T!Y)39jw3yDfmoT9g6^1)!+#CikM#u;u|1b|Lkkzc zY9)7O!ZWMdflXPr8{gV>jYpspryXUGTBdB*IC8BNV!YRV$1Xt3 zHw&*~!&7V1@4RB_6QufUyu9fulKxrK>B}%0?Qd@XFY3Va;_e&oxV;)b0x8ORE+33S zk3o`Z^ME3e@Fv9vT9RBbf((O-#MM`li{=P#rvgz86^OS5q&++bo6;P%;>7Hh2yQrh zuULm*+9xMyR3sZxR6y1sY?x;DW}Jqeu>T6~qH<_al0*MNcNtXNWWwZ^)i_63p~8?t+-d)S z5oG&ULCP}O05;%u;G{nSm21^|pf;yj%+Cy|p4^Dz1aq!+{;C$EzLg)ukdSpe)1rU6 z45TXsd8Z>Q<9ZNpI9Dh=Wf3HS@oD*GEef8Ff@|N0EO)_E+u#=X!*owF^n|Gx&#ZIvL|h+*gWiC|dB^_uFJtJ_=jcmsI+L3R{|J1v0yT z4Tcz#!405NcG|I>*MJ;!MHB_UJ_);ErCRm`OcTUR6vsg56nEuw(GS8&=w9T%`_&2H zI?vtfK|OTLApqRDQ2l6>)0jFBn|QuQke3-YGT1MdE-=N`0PN6YcaQuXXRCBDFnOOzgOV&mL?C>v#?kGKS_szGFG0`PnM<_FLAb)yeTAF# zqX#C)sPZ?QFB>-|;~29Nq|vIxK4U1tmU0d)D9q=sA==YHkFxg3#U9=hqu4wfSAFvb*qy6N@uq3gAll}6I5b}yi6}4oh`i)3 z9}Sc)wtQ)_hGcjW*V@BKfE8XiSw|^ z=U{`#+XR9}%~B}yR|COJY=Eqv3%(V1zmTbl|&ld`hacV>~)62BW8`Bhvv z>t~=_)yXlqwbepU-OytK##^p09&u8K-S3QHxcccbMA%@N$?xWYF)qd7;8bk?{jgJW zPqmec5zoFp*m)gP&Cdh&ozc$gpfnDle1~doL8ThkVPE1p@HPBXjk2qKJd&wlLQ!&c z;>4oy0=oR3FpR1u68c-YJ%p{v}&m*eK|5BSOUu_?6-1=7^I}~zI$}c?bi^RsI%MBZ$8y44dj=o!@~49X!_jLO zSPJGWJYz9rF}O4H`a>Yd*{aI0Am6_mmGNGQyX_&YW%WY#2*7#469QOkt2{7 za}Qc|0&9APMqE<#laMQBf}GX zh4uZ@BZd8wNS8amd-d{ZMIbjM^iN8poE@{`-IEfrzMcw9pjQf`Jn5QU7C?)8#=;WP zV>ld_k6!N!5^ij6(OBtxheRYAIp{bEmS7ce%}b*I6weW2`eBw9bfpKDNy_S^5^)e> zX3)6P-rfFtrfG8x+Uky`>8+;TolM<7PgBs0VXnvdYlH_-5FxVDFi@*r*?`54Sy5>m zhsDmY33J07Eymg9Nf46wJk$)wEtos8ZTy~5rc*#oG493O;PlU`l%*iW&71T$rZ31i zK3LHHJbg+3V-dt*hhc`UVkE`qft?$suovLWrwPY3Siht~MTKk*>hiIx^HWvbpC{~A zM#<48V>z0$AUd@cVv9~j~DV#A2C~uW-E>(GVRaRRIi%>PI zQh|+x`5@HkAn~T&Dw0^HLG`C)4Xy%qIktd;&C_I-eC#jgdxE8wHCTdL{V-SS))u9^ z^Mw#rDifZC$voToqH=Co*76XJFx<^@o;^8<{NKXi>Eub!SgKaT3r*FFML20NH_NiU zYy)H_`U)50^pWv8mJ}|XZaV^YR9IbU6nr^ju(z$*b%WZ!e@K0UgnC^6aUfGd`5G^x%bQeWp6D&A&icBjMnFeP#^U($Ye+LSzL^3h(0UxnxfC=f320(r zyht~ti?X`nTb%T$IYlCY#k$D5v?0~!zGFi`Hx_hAe&OZ|nQ<#tvy3nCV3we$B4{@D z=ns107||Ip&C7kTM>99ebu1u{1vK`^MDxevE^F?$9d!2h=7NC3+~jDQiz>)|9J59D z!Z4hgK3)d|&*Rg!9}5T1O+OST63#>6Sz5o#l8TjBUVBr5R~U%kEYF6SJzPLJbI@bW z1HU8hXDl`?+Woloo`}Zs%g#MjKY#!+tN8&aVRI%Cc|-aO9PO1EIZyUKnN{ z3JC^=*P4_oV~mcX3H?adf;$YSLbKcl(ShFZf5%o-!7v9Ynt?}gQZ$*_Lc4o5R4{Gb z!bH5d6S*KB*;sl+p1T4qDnFb6?#6-LUOg7$^LYb~3(6P}A{!T=)hp6* z-b}|8ee1h8099TzORJ6cqGESpm7Ml3k>INGERM9AD=4?-yi_89ci+x_PA`u7-!*Y) zXApWG$(INubap8NcKm=u`K!Jf&|ON zzp6~j!QK2V11!Zspd&$=7ds0(kredvMHK!C_p`{LXLWF z?OGi(u-NQQThnGqs%uh;kBVVmyO)HUw&kp3^|PfoO)!7k`b4bqRsrZdc5q3ntA-WV zVFV>$v=(O;AEiepEC6YKOtAr?Ca;VsUPr^`fE=DNw%9=0?KmXX&A~0Xj(uLsRUtrE zY_J^CODwO$T5}yfXzWJZ>W7Uh#{Iqz&W$FI-E0iuC&h zmaVyQOXQ^Ki9Q>aRh(pj{RT@VPW#$OWLTL60;TRqFbUbB9ynElIB*%SQpooV3%Fi-HvOnAfXRqHc zeDdc`ZogeGaw{eC@7g#L`RX7mw;Rj3=yz=_#ZE5?sV>`6tQQC(Xz{F)jrfarptxIb zgz=uw-8c85TVZ3!NgBg+{K+Rxk!d2H1%C&sC zE*;nMg@6ngAxz6x#^P}$;`%&z+2l&ZMlJ3o>hPUG;>S=gA>~J{3KXY7@CK$>;ZD-? zHTLQjOz#94p_8qoATT>hSCxc_GkNsm<3HLLkF7Tb2$d0+xgkakkY z-6D~V<7amMZx_(B`{fEsit@y?g90!_U+`u=*i!`?r=4BV-CXe(({WpL2<7TvprC3F z$S(FbhT=Za4-9FnJdOeQDafMHpByldxVt1U85Mz6Y_nYZ1EjgJKkO z2ILd!@1CcmXIrq^stsM^!1cl&q}k&Q3fDf|)bs)ivi!)5>J)b3Sa9FBV(I1AM_Uc{ zM`JyTQ85Oall2vn!KIx$4nQXcLf&mgIwpY?mp=8*&^s>`6RyBnN`C^ZZo|Ex!2ja{ zB~vKc)CV^RG!rn(KmluL*5EK%jEoGEx9dq-v;iPO^Eu)qd5jb3}TAB>jS}Yp;uF^PaUZ|OEehz9Eab5VjbWC7I8Cw?j?2AsP(faUv|Q%U0pS_HGv}Ra+qIRQD?`and=!YW@K8Q2i5j$ja|v zG+v!v0=MkUsdhSD7t3%@K7g5KO~Z*GeH#3?*w|-%p07k$;6`gbWD(SO4d*cJhbY$h z#W)Y@-T^)?=iK~T2JY z)e}G{GlmC4mf#1}qT%#~6VBd|t3${U+Pa)ZRXg19so@k<{AyU!Yl7R|;2APLX9)|;rmNU2#n1AdA+Q7k_ z5aA{n-I&k%q#+-LTf%lk<{AFtnK3~0Nq(qA=2+}(bln@xYsFvK~hZ)=1IsK?W1L;n-N#@8f0+VkhTb zkPeL~>P~wDR>8DAlkv?;@sL{9`iLp~S&a6#zb;l)Pk6TYR3}o+nWd$RZx-9g{t*u3 z+Rt#wZ0R-^v-uoOYg+>`gbjZbCz5*cJ}JdLungOUO)L@~aijfp#SwyYbl`hfZPs-U z5XrAO_kuijYs>btx|3k0S7%(tQ4UhfjVc0*4XP$CoNDJiA5yqJ!? zvPe&t4*1+ndNA=Fe0>`e2B`l9OnOqW8W7+}&ar0g` z0o&>kEZjB!GWgQla}7P=&nXU^z`JH4^ZN}r{xSwZ7KdD)u0|N6Fo^ykK$D( zqB9qSUWfv3-!FY!ypS{!ybb&auz4P{I@4lFi3e?NDDFiE$IT1}9T6lzU7s=jw4-yE z(UwFLoK$q7O9ee)Onx8e^qQOnTCyv;VSf*ufbC|rNCk>7t|^)^xNqB^!Cb1c;WD7{ z#@JHZafj7B3z%^~`1l3}vp+XEjvG=-ilR5XOJH8@KsQX>e`|0T(9R1LL{XYg2^e;d zV0q*VZtbZstU>tnDvxq>YC65`Qv!0uz2IP`{|a&%TdchrouOvRlp>V7??^unrht83 zG0e6_(;HIchEonGF<)TbY8k;#<69CW%@z4c%)kixr(qo$ffwjIX zrk%>RScWMrAEAZ?axQ7*gT2)FM|WnyDd$E~SE_gb?z_9fl|Z+y*hA2L2EURZ%gR-_ zplyr7I`JV01ezEJW;@J{Ng>GF-xMl|aDZ%dd}K+ayQWuPCWs$T)B5=*R+oKUyeAH@ z{?!ToC5Pqin%)U87nK=bEsrc&6oSt_)$5Z=a#%n=u4+mnGau}YbIe9bb;hWYEeHTt zBSE`9UX<7eBL1cFG!3nP#u5nc%4e@{P*u;*F3A(oqFE)ws^`osc@H=L!ir+B4tIkB z@u$1Tt?ncLCtx|%7Z#R0Ar`1;eSS$NGJfo@0u_B8WTJiv!5Z>vE@Y>k&x3^1rgd0r zjxNG#GQ*F_PUQs%@5BBR0{0JN#&wZU+O$Ai4(@^BpA~o$&i10U%;ARC1`MBP4+s$Y zdy&z-0v;i3x#%Jv+%Ns6K)fJP*hNM?R;Iy~$4h;2}a_uIuWGbPmb1y=O+xVy|A z>n)=QR#1$U!y@O>*Sk!Pr74r%GrdgXx}20=DOnmoXEieuI_Y zxS$)B>E&s_JEgY=?Jfe>ZSBQ19yCl~3=&+U1J#Q{gzw{=#5`wgKZXq7=+_HtI&0Ow zQ_;SYVG$k_(D=%Z6G5aWnRvIM)4lMrwjIkiP#;kUJU`xu`29H7c@bFMW8yu0hW1SXOuVF4+$@e zM8N{L1&+Ccr_T8{m%_6bg$N=kzX10%PdG(@ipFPM1BKC^bnL(cg*Xn55QKF6hf#ro z!*mvrgvUhah`tJeA7r}l86u#F@SO_rJN)j(uY{HG%;2~ZhSe~PZf$m(W;^peDWuh_ zN_vE{jYsI##RwH^7<5r_U<2WYyh^c|06F8=}E1nCJp7yLR=_$P7MmNHDDaJm} zis9yTeFkKVo5+4U7$&#gjt@MY$04_U9BubjxC`y0>{ja5hkD*$5<;=7O9H|)9P`N5 zn69FJE1(|nn-%>|^BhLEhP!h3gy%5474FL6OP)g}y~=X9T38Y=uL*I4ZWCH#x^f_% z^S!NbSDhB~94EEHT{*7cIgV?EyK*%094FJ*Lge_t{Ure-GdX6bQ&7Zr<><*{4s6BX z%JDm%T#|UpUT%H{1F$wEj3SWRB^C^`{=&t^M1QpmourKl>ChJ8Sv`DkgWE(OPd8{C5t|=>Q+i@yzJ} ze}~7P*8#qg$DietbV0D04i7Tp7L+yw5}v<9`VyO{^Pb+E6OW_RwF%fxp-+Q@7CtL~ z0?Dp?CImDxQie-O`76#fb{2*6>8eyc!H^L^TV-pgT1pWY6c9>iL0aQXoRzCyTj(S! zY}NI`UHesBe|a9+DNr%t=re+1o#-7lDP&c3O#x^*PWMvYF%gszs3J z;0R>8p(v0TS!OfGZF=t=QtDA|a%L{gOO2uAuKrTNPUw9pAT~Pz8e%&sbsO|E3WH$~ z&Zv{)822kwisIiI>BRXTRy<=i?qZ*Q0=nG)k&4$e?E(pcbxh4ws66G_(1vz>{C`7_ zNvnY>Wx;^|nS$2@P5f_Y?7WfNeCeURCeQzo#;*7S_lAEwK)7=nSuOZI{}TfwgL&Ke zf2_>1H!#hOt&{sdoQVIk?c5NK#mD&Sa$E_+;p!3g&2c?ljALt6ZyX?{A5F)4R|R$# zrx|ij^j!X>Apn^v~Mu!DkO!!i`Jy^rHH1TzT1`mEELDiyw&iQNoGiRA?hDa#0F!= zowt46;1~is6O%`TlZRHEc`TKt1&W;T!hp)McIW6C_M=zoPcL!^BEnn3pX*ie5DQ+2 zlRx9;V+V>9nBYYGF+i&Xpm;=LkIP%mHnmvDz9%y{rx8~$Sj!=7Pt9MY;O$4ygX1l|#1@9x`mqHU2qowj*(@Ob(QG^( zM?ms!a2U2SSo0!~9vc`Il^6E(8U}0UqW&8Ma2NGQzrlp97=!ab4MSi)je)1zi*c`7 zi4@#1eKQNFcp(8BRRzvz87x30>WC zDECZX#{!a{0k@-~a2ujrML)DKnDhq_V-7wMFQbY?4-k{$)tGbz$fM;XXp@@mxUa-L z3oOY|poSP%L2xjcg;vrO^aYFDe0m{1M@dk=PRKHkg*K04EZKL!DcQu*R&D_;N>`8y zV$nrp86O48Yhx3{jkm5rSz6#so%9tYD1FmtoI_TEOsjpRKiEib0&~Vg;mDVvs{Iyi zm8J3lJ{F+b2BbEY>>3Nm-WPzFQ~C^-4+go_a2>Sa9Dmgw5C@i6K&h}DCrA(WRZH38E0y(GPvxM zt)Aer9jHx%VSz26Aai#F=I3)zgCS6=QLh;p2lXmYSE^zh=TJBe-jLdvtgr0^HUBW^ zw?NCi=*0>rvx!w_J3sw9pKMG(nYwiK4D;)+snLT9E- ztt`NLFKBnV6O7s!3nR(}bf5?s)Tt63B!5c;@N4xr+|~K+4x&F|bj-VLWHI7Y4F!*a zld38b5y_5EFJ-KwoauCcMY)!y2AWD_lQaTvUxp2cZ{~JGlZQA{@j2?qIwSO}}71%&y1o`5-&|_yyN}gJHBca0vaJTL_D76%)C$;lMKL5&!29{`tS*O zt~VYTfo`4)4u|zQG!e{1L4bBrUXa}AjNgVi;WZY&Kej*h5k$2XjDgQ}XRP!#tSna5 z{Y<=Q(8M^h<4u0e8LO?@Im1z#mfCVmqmdIa0iI{wco~f0x{(uusO)16V<>fgkoY7@af zv$9x5ytTTsZ>xV(ZF~qNEz44JK_@D>%0>`P#!9*@3*s4_BKa^n9Uo%x+Rv=mME)|Y zD_IXNQ_9s&>PlPTnh*^udN+Q92bt}cVQ`h~4qlOAop+F2=ZxQ0?VQ8i&_Wk8!75sZ zy&%_fFvQH*=de#lvTVm4iVd;&?Z+YPiU@Oq1#8*oNk?$bzgTi6mS%VbgZto1SRI&@ znmn$DquJVODSrS&fwK#6##6tHwov~%NGZ2EW3}~d=>xrRK-jhj<7yZ-vV%V*VPrR9 z1J!Ki!o}gL5|ujspumo z{i}k zt^)t<$j7@`3Aw}j`iuSHVNkOao5HtvOKjjl+`Ya27c@rp8{j=2-OPIXVJO2_8OzW^ z&Vsd-kGZ$EJjW*HL(l`a9oAzlEb8UtDQce^p_Ch)k?oEq$6(H>$0(@kUW}+?*UHO| zuR@7^#>nZe2bPA&4GE5Tw$|uPEV_O*Ebzg+#fcIOF1(YhDn{bf7Afa!d+pS`Ic5~mqocS5E!6D+Fy)=ovN&dx(?(Th|jDGx+1P$eE zHV4wtlyF(KxwhoIJDJ}p5m#rPDS>*2;bFK9sV{QJg57~fqWkBenrL5nb@2I;SB2n$ zmG%pQ{C%}NchoKJ&Sgt>i! z1aN&^I|&1O{0NV-t4l%tpByhDVHAuhO}_%3$n05tf`rYG@L-;|k4-BFAAv!Rc|cPW zW_`8`2YArK*RumCf_VsfV^kJ68?P~QN{A(xNtZ`ug}}GU+3ZyG&HJmMurnwUWX{R! zFhG;RS$+ZJe!(@$9~6n%G?mc7EL`&g^ncIsm{ZchU`}DMmJMJl%;^K>w0RE9I88|n z5G;m=^xl|d=KG;bKVd`w=7wP62rPySb>Eaoa1wSR)!ZrT?k3xtlTdY2Xn^G#c%yjZ z_32=c?1A~3L^J|5)-48xktn>?2=>hzbCHd1dN~TQ5oBNcs4Va-7|gx{Sx?**1}4lw zFjr#d0j8fg0&EKgGfco+-;DeKu{R@W(}DCAfxLioEI^>}ouLhQ?E(lqX# z(JuM1Qqjmj@ia!+rczU4V3-9&S7AHhuwjnD?Dn%e-O%h>5g_=;qvO@t*4p$1P#I z_C7_}A|CEsV%vqA#N;=?TM?cH`~tU8&Qxu@l?O4QP%ucwiCB!nGp0^hJq6{1lIMJUBg2T*G5AsXAdJ+-r>Pq)0f0dJ5cJOMDv#<2_!zHd!|3 zTy+biHCgcF9x9?w{mT`77&}1d<~)$%-BruZJb5%Aj-S!_pU>cw@GS_l+8^CT)v}14 z_X%mgY^ah}e{Zr2EcYq({@HXCtD}D=yxA8*EB* zlr}>yij=#xaX(yTjN&O%9XV0{sc!HyfB!xeHROX{AUgmuFe7bKB|a^uBS2MnuMAh^ zv7qGGnOPlk<6>MVVfD&l8;^_qXeiZ4PJrI6Kb{1-L^dw_+7n1+$XtQT?~h2(oCR8s zaVd`AoV?%sk;Rv0l!M%A&hHcF(A~^CHyu$v1Q|wu3i1Utqf;Q)#Z=9BnRE*$ImHB7 znMnW6Y!qc|0p1SGL9%?LwJ!|>xuF&%;C{OEgi4Tg`YLe|9|0_d&!Iqd`5<#-7eln^ zA6C@f1M92pDV#2NhX0G#(GFZ(lQq0$VhTt}!_hTd=0;rrN(*P4%xK3rnc-lZXmXZe z3>}7ejjU5SQcYrX7pMVP(x#z5p97qAmStYPR4{`sKaJVV?WOT?knNc$6*DFm6gMWr z5R{gokp_Tfl|2C?PRquMba|f`n4(01{(tUyjUE%DetOm|r_MhZQFnsZIBhptcPQ4n z=IdZWJUezSh$qpQAIS^5fDXI@1gPdMm>(_7EQKZ;vMrqMoXv=zwuv|+bK+~uR!FDS zf3?<0t<0MVLZ9YowS!t&KOB;$`bGqDwdq1ebmsn+v%d#U<2P$T&|bCYA7vqBR;?I$ z6|}yN*roZX3MWPXgIctFI32Z^iTlBAYmv(XP|spQK~vJ1crDn=@d1#K{m&{zG9`Eye~n)AYsr6# z-on)J3z-qNDmJA4I-eRAMO(QOOVNKmrnB#3t^cUGLkG1r-2T@gQ+aGX1SEB};OgtX z$^*^U&<9gQX@q9R6ijO;JS%RxoRWJ0x z*5%08_AF@9ns-p=t(*N2jgjPQSU|=uHVqg|+w>r!Fw<|z|6Y{rAkH@zA_wEQxwuDm zDaFLKLb6h|2C(G$ph#%?Dba>2fW_E|aaT2sHR%?h+Is#zkd#?K;XByUD;X?%H0~V@ z45n&ES@evy-oOHMFK!2_r$JN6_%2sU1z+OE(a;E%dd9t&7W!{dh2)h;)<&>bO}`gd z7`;7@1?0J#5ShUWdt=?VHG&LY!2&>{9tRJorpXY$G<9MRF|84s6xCH?(+C00{X`f< zpB{kF#vh(IMojQDji+^{HgD5<=nVVr^P?)!V)zXCZgB`bG;ybj7Mvf6v%O*3Id&HmL#!Nabfimhu*6C3 zxr@dvi3Az?ClDPt&D!?xV$gAzlD2v$EVv$m;Ww{?&f}bpBHwn0psH^loXeOpcY~h^ z7xQtrYBl=e{$U%NDDiTgm343l2tia|DX!ey)Qr^%Ql$PHh~(;|@sKu|JX7N3qVDJ@ z;T};47a%tT?gL_fQ>y?uE?Pc|Z~<(XEfMJGz!{XlzBvFxLYWCMZW&5Ye|Z6v-Fo3z z>OEZI<)SMA=e-cCt^clnC}mp0J*k1km01Io@>-RnMs3+2W>F1AT|itKj|D1Qj;Qvh zKpAMP_Gu%V0_Awb<341p6A`b0#WTR+m|Pa_K-tz-f-8t>{2>AjyAR~y>;Ocyu}|iy zv0csOOIImr+5l+?UF;$QE$SHP>&D*}w{Q0K<3K2u9m3%qIygWT2vq8Iptk7FtZR=d z;S)%!PfJjkZ+9|zu%x?4$ahl|lnJ8>UxV3D~7f~^H7X<2Om>z&f&sEhBW9k|WjgGkxIh$IVV1er}x z9Bb}dE<+^2c&`wFnU43t8UO8=?J#vyr3WbwVo0?6LysW2OzmjOwvn{{7YvS#8{sE- z=&)e&jb7+UUnQ>aXG(K&(zif5JZtE%AbFNEq07Oujt+l07ve@=-{%mKS2HUfTyahR z6OIq&uOY)Et49lJ92vTyY@oA~p%NW$e;oF4u9`p=u412cAB0OR=X$eBG7`Hb3x|Ui zRU!1!n30m&8Bmw7@59B)dPy84gxqih?TNKqzYF6j1;om0Cav0%HAE@bMLDu+>w~io zELGCT(muHFpN4i}-+N(8#Jna8O%@KFD{a^c3B{D}L4SV?y>do?-kBtdBK^nPLuJnU zV;io+jHrImcZJgO>-;#VMWd4Oe$Y`g*W)@QeND?s&q?Zru=SwmGChW87WMR`qxV1u z8EUv7Y&;kkOlAHif5c3<$Qn-#D}4H^zM#Tg^^K%8CTP{E9~;_!WN=ctwQfCbm0~Of zxhtUH@XWw+Pnx}RYb0fgu>c$bx2ct2h*nMlMZNyT9nh~R1)HVn<06zs0#Q(h)bdL^ zpu{k_eS(}3j9PCAM4M~($prP3BN>cxY=Vj?yqZ$WsgU-uIc>eZQU>&yabSabP5`a% zAq6Pausb2wI=NG})=uYCcJ&490|&F=YSp*A2sV6 zWd5KFc7}Jbl3BmQ2xud`a{U%tU~Z7y?!5T7rQ|et-7gR9iTm~H-McTOn$tBQ?>JDfr@9lXTJkRtwG9CilRn+ysL^Pz&4=t?tvW83k@fa#{FY+TY^v?g|GXEeKquEy<>Z zzVny(Y%d&e10~hTi%pF}XiR6F^A%vGX)Z(DNPXX*K6UJ~-UTZ67p%R>cHI(nZ8 zn^$YnMi!W7fyu1KiU?fl7&_Tfz^3cH4YRktsh2y@K$o%g z&Di=@)%w=h`X*c9N}+9iGqk>0SFmEPK&~)J!b?=|3bU+ql{jG~Zk;GQ?nNt2STI(a zM2Z6JMC|9h0J*V!9D+I1^Ap2_2R-PMuunDp(ZnlYniyz)ByDG)FBuz)?nh3(D{RM)v1$w|NOsR&d-0 zSQKRxjR8pb63TofT_Mblq_yn(gJ^oT9-X7vs`a2NA5Ud{7#2;R0%lRJK%<-+!$8xc z$nPwojeTDxrsJQYS09d~6hOqocwsLy&>K(#1xT2QgJk_o)*kgJkl$GLc3(7|VPQeh zG<_Xf^Mxq7!4T?<;CSv_X9^JhJCb_5ix?G=bPO@vQzG3+FlSdF65Be{C6?&%7)l5W z2xMdXt{5~&j4oKXCx&#zGM0r3qr;`knu=|A}>gl_@Uav6q4;BXJx0K4Nt{}{5D z>VrJp+z#{R7o0=e-WyHknG;yTU!thT6}du4@cju@IzakkFkT(X-ad|`s(S~sw>6P8 z<}r~%c&)P~$}0%m%SF+ssv4D97em^#Xck8Zi?Ey#9)Zi{?$8~q5@{$7SmAiPh-yHW z4sTm9=zl?u@qm1B7lWL^C>P?^y#JF732jgf3>0*xl&f-uyFYSS-&YqbzAuIiru>i4 zWxqtz_Bu2=MU&nSyyO0`L|>G`>i01pJ7-y>HBoelMd}Qps!p9*9>+1GpdpF3Sr|_{ z^Vr*`ooNg-BZY@?H_j+k2yvKC`Fci(0D~!efI_$h1C0g8N7I-iOBKR1QS>QOq?C;U z-~3-kmIep|qDZUg%TOJOq)%C#i5O#Nkmh`6I`#~{@5R*f@nfZ%5yPr5t^uX{Jeu|+ z64}BrTu(%A4n&S;SgKmYj#e;y3qT+^vMku$O^R;6IGKT-MJpXfs`}ouJ?P7?r?K{Z z7h;C}=d#dWB4LUN!(=js)X^9QX~0@@6iC-%L|;w~q8l+&VKz$P%hH{|+*+?x2xp_$ z-{k9n2U@B*n58=yNrvSd!zkeFFJiE|&h#nuL!(E+0S2L3G4Q<2V+Y`hzpq>&9uB_} z;OYnW4h;Ja6>YBwsKqz?*+XgjcC3}lVbDV87UBTnIn4R?9c(RHwTfO>!x(q`ht_bt z^Q{`Xhr)K;;Up)#&Yh0MWh+K~iS0+=cD+NoK2UiRx{YXsXE@)s2pPPMAFXx5_jaOV zD5nrkR3kQ#o!928yiud40nddd36R37oI(VbZppW zMVJTAr;U5<3LmYY>BuKE9StmWo9xWJEqxanw9OO}Cd70Ty5)2T2E+WuHe~++N1xvz zd|?0`D@8b?TM6CPcL*;Hp~XlaKAq#A-y!@H*4*$kIww&49jhS;ddvwFzO0}gD0Hub zywFS%!ST~N|M&CG`^x#%Ch=(rr5+EUG&#JJe(ew**opjh0q-nOJOyt4D6`|Icm79$ z%qVaR>;S*miM9i;&_9eWvHx{2NVOGs+&Lc44)I^-aGwtF-?03kH8Okf&RpZnwXHLT z@N(m-<^1WL|AYBp_IH6>2XhT#3MuEc`GL@`&D@NBd>L_sZphyG(>nik!L)WWO1|8k z_J{3K2u}ynv-l3{!TWWPD|+j&GAig(7QUSKz_bqGSs~=N#iUr*o%idU4&f*GbXeI6 zcTK-Pcz(-U;acb0Lu_WdZES_R;wQ2ix|OuTUGYy~W((bx&?8$+^3aXE5KQdG@zXm0 z<@ELzw26Y(A=3$TYpvrC3LF|uikx?O_=FDOr}!xQwiT{-zS%s3&po6xx^QU+I2f(QxTOpFeXv_}$KN&%5*}o>7j%_k2M%g(& z-wx^2D4wvL31JNe8~c^38GIXmXOBwf8yvOY7_(g=eu1?jyw7+CuG@g4gwXAQ)~Fii z+Zi>3Z*GO7!u)rF$1iP#yW)pLviLh%;jZ|^<5Mf#75{FW>4k1(Q(6ODtMAup7O<-o z?n3lDhwteC&*d5HYlXWqsHE#=Q^>j$p3i~S;PKA48)}x#L#=REHX2@!2Rpzw^3B32 z0*X*qaUbRLJE1kc*7^1_5DMIW$82`~^v?guFfV|iIP-BnJyyAbTZd|OCzh~thra%U zFAPIlp?j6|Qx@Ercx&wt!s-ptV@Q1am31NfaV}T#kBE(@%!LezOp>z3`hW zb|NLGTgD03g~j6oQ@(OtmlfRibu0sy%Whu zA(`jy?npDkkz=6aPt5*Q|Fb!e+!yqRp;(;eXckh7J$v8CJb(>wpK`!M)x&abvMU&!%1 z)&c&ugvEb`!PoIXJ%75nrTVgf=bc||h`R9%Ug-e8zzg(t2l(&Ug5+*zJHXd~$slic zan(EXcPsT`0ZkneJRoE6_dCEx@Qh#Y0AIv2KHUNC#Vht%2lzAVcoRL*Awb3pbf^Qo zm?Nt00AIvg=+zEzH80RR9pGACvG-i{Z)<8BZ=#PoB>0dQ=!*{UGaS)}9pKw|3!Ul! zKguFAI7wKs3%PddP#=e>Bm13a3Kk|#UBi}^%4+yUO?$;D`CM`4D)a{qZcE zh_0t51}dT^ZBH0zh37}$mOo_*5l(>x%|o6FlrI&Z9Dfug#0CZ;LOvjZ&2->BAe{on zn=`yCU4|b_!2@*G1xcV%Uo}f1cp50T!0yXvu>u2NIchYtr_@>M(rcc9EWb~W1}G?b zKiaOLMIjZOp-4xY-nwbCdD9BAZ)(54Of${V9d({6NcDI^OQq^E8lkoA|1#}#M_Li< zz&l7b!;!3oWof^|EcK2m>hGkAIgT{&qV}g@^_Nwf=}0s44$@HZb7%+I1ZcR=x`Skb z*^aDc-$5GMDnZ*N9|T!@&K)Gf-p}S9{_db9<~h>LyMr|FAm=Jx?j0n9uM=Lp`FD_p zGzU#FRKZ%}Z;e^H_ym|0tmUYHJ?sEzk{&y zxxbB2f22J^`3cO=W0XI7CHrgY*E2+rNtdrHLg4;#{c(iZ=x}1s5GsEXLn`l0B}U|n z!|-+;yTe9my1^p~u)|T|Fzk=26POq$9OzEm3f)QKIlk_Q^13U^Srmin`T|1>!|cra z4M*hDj>xB7k=qyV&0FAuE+@2E>`H|Qf=4m=3WQ5fqDnrLj~JF+aJ8j+9pApR{v;a5881B?32zmTF78B%tqg-R zYD?nnP(mxa9m?F`+o3$@hmdwC1wqhSMpV49 z#M~}woHD9)bd=vVR-ppo*zL<$$pE)1BVAGWv?7$eeY@VSVdseU2%8z;mI#k_LD}0! zE%d)#RF&7Cu?hyW?=Q5{g~%>A7*{cxH65!TT2 z->t@d=_AzL>K_H#Py+-k3YEyRkioKj@TL-=WA8hL>ljlNz|G_q3E_gWbhlTapcA$OW3#jvveWkP;gnoi>qd;d*dx}M`&mMW3+P};{opD|2!UQSi=;u zeNWlqDq5b(HU5A4LIDa4ELZVP>WIVHR8$@k^-r)kTkX87nFMA0AoHIUX|AKK?hF~` z_xc7*lyWvBZyH4^scRG^T|pDEg+WkDhu>VyXd1Uj{GA-@Cf;mbor>jDxps9tXFtB+s&AGFN`r{yIMx+hw&>evA?Jx7(FxdCQcp zTsJlUWi5*wxoSUxp^$Xx$^w zU^lK05P`p*&!AZh3R0{T7K;urfCTT9Zk0*l3-BxhBr$+WbU#d>J>f0F6-i(RG?zh} zU+j)NYCT~k?h>X>vK^0d7Em`BWwdsOF^sq$0n1|nwJboIj7JuORWR5!28$~QgeMUO zt7EXZfq-qA7YUJ425VukEC$mZ9EOUYMs62bK>TGqHnD)(idgInEM7K)9c8eBFr2Q_ z8Eh+qU1YHA8Wh)jCIXhnSU?R6P_hCYtO1qwAdfrIIDn2}6*<0uHi(y5X$S%uHVr3n*j(=UKq{Ca5sxGFT;pNmw39uOQ2E25Vrj zBnCU!8OCR88BF>!9=QxwnS#eP21{nJat3ROLZ8L4WO)o$%V3+B)xInSt6;Ee40ir4 zT;4V@SRI4KF;rPUK(X>DgS9YN7K7Cd#^WM`#b3c=6N9PPxKOev*$j4+!494Uxgwpx zwldg7z=U7|EdCkh|7sXS2}DBJW#7*r%?y&xP&aGwIM33le!-)F!BnYuNLZ8%20O@7 z*1-w-6{IX=Vdq(_O<#h%kjrA#bwPO~KqQR!r0p!0@(gO1#30!))eeZT0J5yw5QNMJ z@#7j&39X0=h_J?!B7QL`s_U+rUJz4-1nv%AY=L4Gxwi-vw6I}gq666LhUsfB_u0MX z!<;v`G_OlG&Y<{j2Km9#bcDEiiPy$#4^n>$DPG(B$Z+Z{+qeuqx#lQnlyRd!=`NAD zx>>f-+oL)*WF!2Bt}_nxpt#(SF!E3IQC6=}Zkz(&hK7|Mv}kBlBK?>Kt-&jiu(1CY z`y4z%r7Zh;Z~)yk3|~9&MR8xkh5CyNfuOr;V?3RWhKaTTdH8&(uTL2DOjkibIAMm2 zK2U88r9XZg?Ll9#P<20qYQi^WFyU~K``6%{dI7*2!VN)yw; zAlRef>ZbMYV`^#p4S}cB3xlEA5V}|?m&|b_DR8omx>0@-^x7Kl84t4q*G5CRtQQ=B zG;W6`q{i+GqfpzS(rI)iN^ebc8Hw1%Z@ZdL*FKHv?@ei>x}M_X+R$R zeL{p`q2%`-bRvBp@bRSL6Cv<_UlHMkpzRPw-Q*J zM1$cz_E%^N>r;CN$*Xc5ksu?%f51Ngk!4m`3$%YIg%CV5%%{Vryw(}Dt-6<4)Qj>J z;EYxGfT|c%kJNnZ&Ggx!%vZBAs!d}Ncn2afw*qO8ng@NQx8}q85p&MhY7bIwnC~b= zyBv^6@E(nOzdzb$Od@}pS5biyL4bC`Z8&uBlC8JO#$NU=g`*4A{aM3`2Vr@?r~98 z-~T9c0R|j!klTO^42p<~I^I!HN7F<_9Ss!~btp|#)Im)tk&CxMoq-{Ng$g>PB^ec# z2^JNWrIi(ypQ1uTv!Wuyvcl3l@AW(n##cV)_d4hNd0t;$<(_A)wb#C{z4m3T?OTYh zbzv&3GhgoM=aVAQcc>1gKlAP$E!8UF$&{Is^6Vb1Pg7^s<3Ota$&R*RM^GnzQ{o!u zEgY;GC-#HsYHFu?0KLp9=G;*Mn}?X+lzJ#9Le6s~@(wvSf_>9#Hn7h_m#qOY9*bWL zw}hQJgH$$7Y(wEad4cmN3SWs1e>=N}P{ZTFE+fi{8s-;B4*wMGBO1-tEglEK_veak zKIYY(vW!UbAb(r|Rp9>pSGeiRy#teQ`8L#cgGApU&l8YHYj;?bT6!#mJ&v1)s>s|| zva~gXqIk14Apl|ViJ<5%2=zFM|jeqpQ8Q6ws2Hx zv@}rR@vrGRL<^HHo!$feV8m8wcxo&ol~ggk2V4(YI_3UB&}+VMgHxy<<5cwYPtlTf zvf$5kN0{TO6L6(g{)%zd_-%L$sQ-PTVJhyTPy>yJ=1s)Yfx_3Q1&L9NCSw zWDW@QF-eg+B!Nh>TVfJT^HNll5QCn7Q7akI#n`dzax|}7uWnHJ-PXXupOK<~Qm51pnVDwhppng0AJ|-p74tzl>|6FR> z^B3S;R_OW=H0b(N@!3dWP)!BDj6oPwl{K)7){fo^DY%heni_EIL0nf%`C2b#rH)h$MSLt;+VmOj;&W4fxze(uxpq11OXUnM@tNzEZL=2cbT$vXVC@<|wANi{z@iKXM zBC;KIMa;GdJX-@H3>%IG`QW~t(1KYWGrG~wZyGUKZR%7Hh#{LT^3-btp5%1pnK%(r zq)MXi&_8A&1ygN4w$ScqG0j^>N`n34U&eH!JKcA}ki2su9O*XKW_A}CeF$A6mP=l7 zP0aRe;GH+vOMYM>%(yd0cdU=3wDcg2)S)}{Ys8V&3K=KMO61}bf7n3OuX{|)I?cSH z5De!#Wc?weqKSmV1E=GGjtQ6m^D#(QHanyMdR&I#VJ@%q5vzNrILs>~;ttFcz}!HX znazGM0sOZ$Er9tnbY>2EWIy>KD81orF}<-_%>sl{w?fJ5z;+JUR$bj5gtcjh(Rg(` zbj~L_wIzsU4^i^scAhiD+_p)S9oWugwwX|_o04XB%x(5rxax@7+=(;OUt5L=!7?4g zL1@5;M|(hsNu(WE&jYD*{S2)xpuE;s?0)rSu>2Gh!MKc0 zgC-H&TQB2^+Aq_6I%d4i*k9|DF41>rL(pT}L*Q@p6ZxB7>?iW4m>r_*m=C#oPA{n( z!Q-M7Z|g;!+eg1e%s~gm9>i4jtR3qAmcbgi6W4y@qavyGSu}mZV5=aa7l7ZBdip5g z;XvBr?g3?9@1a-NC8kvIgV5`5Fquy{E#3ylo#7$ldMng03}aQ_N0WJfvS|yEY|IPZ zS~~L9Mh(TsN1+?fg~N-C7rfznM56z<8E$}H-XxW&*4_giG(yJd6<@U%EVpwCNr(}l z6>33#&7VHns)!{H(m{dZ%|A<7Q9khlPfmYVzBEA^Fh`S zjekZW@x2e|6}{Rk&(WDD$7s`2=FS0P2B_}r<8E|hN0)9s4V|ddmVg>VgPTtlK-YbJ zBjIHSa^#?AJHeM;1hjy}Tp&jXteU zT_@tSN5Fj(B|i@LA7dOn;KBu2k*%Zg--l{7+d8oZwQD@?-oi!kPK9sr@gnR9ez{aC za9n&BxOVOoDQzj|XE9z4Xf}tyIm@L!?S)v3M3XEw_!f$_s!*LbK*^a|iW>GBoOUlW zBHmqup_Tgc}?IhCiD^v@+c2N3F>2 z(1pptT1_X?v`0Z2O3AC4_di&d2`$t*0uD-!j7sp=?CiuF5#Wq20p5vMhrl0Dh*axY ztKbY}c&0zynbgDmo~J7GoaIQMLQFt^w><&Vr%?C{KON~$m)6-jlHXwRR)JjJCh@+w za-i17V!b~nX(=EbMal3Mg$wsWDTh({6gZRl&jg{<-e7`k3g>!b&s1WQZ>9?~F&NCb zo%pRl$(mN7Nm2{kq>9j|;xi*K=znNRppzY;1R%hU)O5|OOPaos%PHb0!Eu52cMp_@j)G4%G z)fdo`g^bj6ig5!m@X`m$biNzBM+)@%6nx&+{*NN2rGj%NB_~5WNrY7|_n^nA9G^ZF zd+yK14JJM<64!{tWK?g&G?)_Nud&@vp0*m~77Ro*8|Eiwy^3bd2-eb_APBS$@`DLq zrYlR4iFA>Y;-+-b`fKd>@x)E%uc&;u(pMHKk~c_nceAzr>3N+qgtthMAvmdo zIM~2`$_0N{LXA6qnXdJ3{V#F85#q=Tf+;g>Kbrt^5(-`Pa#AM;N z;IeUiAlM4YF1nZOW+~a9M7ke97YZldlQIjs3KM|hT03cDJL%6N=`L(KM#cupdWkHz z2ep?ZLt^<0UD>n7528DBncqFK7uv}h+sST-?B;`AU$Bc5i&Ed%UX-LQ62IR>!f!Aa zB&D_!DlXq+*iQGmKJTZ%S?&upCZ@H5TRYj=dzF@oYP3QkG5SRVVfp7jDSE#VDU63TjjqC05fX621Sq zB9XRZ6bSMUSNcJ$bH&n~^Dxh=8VFDQJQFKq-KDHwoMjce%3Zpk^1DdI%nNgh~oOk zy-Jt2Nzrb!mpE~s7|kIDLM6G2DfQHewcp>z*PRkx(}c@)VqyK8|4SqfF;b0A?9+Y4 z;=J4*C4GPAbh?O9zCjdjjDBL2%k5EA2RcXbqCubU@x$yR^l~Z2to9fs|0PCOF_G;k z4EJ~`N>+Q6sM5}fz?mA?v|p&$`J=^rb;U6RtMmRf|0N0@j^`*w_#Q#ysG>!tX0pup zMW2LkImPJq=y8(SV#gZy7oxka3%xfw%vC!yVi#N89 zznD{MkCA;)B<&a@NX+S1-Nkm2qI}lg?J83Ss=PYVcNghhr4cirD06;qd3*1vKh!w^ z9S!;&O(c#N*#I$1Pq%l|bf*}jP7H)Xgo#NE!)WI*Gje#lm@~Ae6I0$fRyZBMfpmg} zMxtHgwbDSlb5Hi{#t7;ocrqMA*FCk}i{(GprDZ4Of zwGE^^%gWv|E#0^j5FjIxnQ+7-Jd4qK3BpmoBiz4ziBRuOX{&~YDxQ^AUH);0#S}_l zwZwlckopKID6gaCDJ@Io=bsWIBArqn0*%XNA>+!yhGB!rXUU9y%3;F?4JU`sgM+Ai zgFk#I>4)L8CSr>xnclT}k=IXMx=_e-R`~f&wKhe%D2%sGZClj#*8|2=-Cd2hLS)8M zU<$8c@`7)_krjORsjQ$Wt9s{ZYhO8zu=B89h}s`cD=gLtwCvS&hp0{lkJzC!2Ch3^ zvPR%xk)PA71F5MH2GQoI5pb+G#uX=uQN!Vl?wksbNO=3>*90Zry?8$uzs9)YAqamB z{Exk_?naK4z42BBV+{k8}Ev9 zuAVw=@jicSVW+@dt7C${vUuqjY~LTkA(<&T5?8$U!gpg;ffsgcZn$HgkB!tUB~VT4 zw&LxL)?ygBIsP7n=Wi0&+-*+~_DYzz^)$9}>%LlvLyZ|YSJ$7wb7tmPI94?+M>={l zugl+ud6*AfIp~ACgoOY!{i%Tk>}%KtWn(i+&4rV7;r-rL({i|t*21T7<8Hv3*0*D8 z*N?)vHq!~O>>7*VgV}roZw07J-4Ww`4crcQ!FjsH8%M&?8|T6%Emw&n5dOy$FkV$W zS&1^t+K+Swb7HgL=-AwM3y{r;aLTv~N8*kol)rQ~5RNFgwru(dG1ODgE=?m-G`La9z!;6KZFOR>oUfoTKpq$sT78At}v%`fnc8M z>MQ-c@-{r&x9s)-$4SL%0SH+Y>?z{=(&_e}-6^dZiec+Oi&EB?uJqG|QT%odtj*52 ziEKyGg)?qqw2|cVr@JrR?u9EI;=_sM?jq4x3}%B!G!`ec!MhHx^wX20s2AjaR<)pWvN9^J`cao3~lv zee(#ej9h#MeJ%FufhsxPB>HHyTPQh(!)>=}n%al%EDpdcNZs9Va2lr$B3;gQcd8r@ zma(xG45tM6amzl8vmoJRJNOXtp{kWb-AQ;zX&R5B0GD1?HKPA~ZIbS1Yv)=;^Nf+F`=dw4V`T!v;}zk4Etu5>r) zwfgMYdRg}D9GP<+yJ=(rd{YtDx17SCnHNF2WAnPqn1ATsKNo`No>6h~D%^Q}s`T&t{proigvfp@RX7_{rq@r0*7jbEkW9#FTwUS$7ZZWn6a zZ^h-Ezv1J&;fltKexB>^PJRch8aj6vBBC)3(OQ_n`JjijBA1YP=q^s}QrxXt%foyO zmPhqzLvZRQ-%KhMK27PxP=3Q}#!HVUy^Ncl$ zGM+_@Cj2Ts5R94E2&+?L{&Gy5SNq@%)up1D^-hWT>Mmy2*7FdB_jH+R=rXP{*>LJn zY3(iRQ9ZTN`Yt?yy=Z-!g06RY0DjSMIQjqTpQiDcHwCY!|LvFl(*jiF%phlV_Dj|p zxcsdidBXa+LY788HP%1`eQK-&VTzsn!D>8Ng+gwoG=}V^a>nnbQ}_zXXUz?Ng;K~4 zWtcd>T6W5MR3TH*jr|F}R9kBe2~tZm7AZuU0xf82p=!0(VgfL}Zq)?!mI$2p5e}h2 zPp=a*)0=W$w+04HmM9wTqwGz`8J#GB+wMarSNptS?W%xshMpXC+FC>AhzHT%wjl?t zr>z#!&w^5t@|HEd_%ODNo8JP3(>et+!`oIPo%?OArubkF4QX~krO=##fH00*jdSfE z(bbJgzRN?73zSGFJKxKZ9aRw$MF8OX~!)*cGO@WC`IW5xiQ zywhVaefVQOoWt+LtxOj01o1wXobOuWb=j^iC;ou{+)dqFPR(<18A|Rh!`nrA6nUJr zhV?c>lAC)NpVdOjBg5RFj&K*_t#1(R>f0^_O^SeH*A!v&&{^w7xY>RGtaTg$&vVwb z^!P5^dwcqvHI*fAql|WZVAUyRKQx|X1M{N99yoJm&>?c3#{mA<->K=OX9yWvAwi=* zw5nzCboy)TJI(yi+F$g7sC=9KbP&abx4lUeCSQA8s zxZ{boY&eFP7_7oWz%QDxg&pD!&9%o0Xy#03?ulQ+?Reb|F8=Y9TY(>R^a4-B9Sgm^ zJ{T7ypDBReZhElDjlL@c%vb=u{Xrc#JG#3=gBN}s=?BM>7R-DTA3AEhi_jRyeg;0=RJp&PWt;VP&ko{&|BeV7GIa5O_zO_7kBuMC5-@m>#T z4|4-}(%;8L)1Frsv-E2PtuC_Sp7ABD z5iCPJFg<+Yheg451tPNgUwK9Wh0PU3YU&LEt}ljwRIdrZGU6l}#Z+uHQ-;P54i0LA zF@}%ZFa%zPSM=7=YaxM3qM)yz+^8<@qgBa9P`P16pe%+8));a7;fexU^H2~NUcu(L zB?T_+O=&S0imXo8j!VWi`36k8l^wg;K}v?=IHZ# zy)dyJ3{$&?qhy{W+v4pj{k+iw)->uP!RS7}L)&G%ABFeoDdPPo=Xtfmi#cHSRPq8NI+qhR~7MEpNjMco0bfnrwq2ND^xo~A9sh}9grLQ|VUyqQ{DijtaM%H(&oZ!nGHXY|bb z6qkC28Ra-LFxKK2t0|yedua{shrY~rP^)~x^~D94E#sU0AQn$;Q$bM3=FA^KrdKjm z@-`W3Fwnz4#S<&eYpALyepR~kSh3cl$y>~%q{=uxb_WT+@Zr1?imPy}${2^@=32;X z{Im2Kbm{sp{87z6Yy3&)69!3|F<4Jcb1|$~TcY#J^vGj*6xP>AM?=o6hh!4oKe#jx zilQ?PS6D0`KLBlFeUui*pFTm;eJS;j7vxYtxb%KO|2ghpJ8mVC4+uvIzkbM#E+6uO z!oL}3dCs>ZFsXcr^ql;eQ4cLg+kHA-BYAN$jysRJLO)^MUpp~RFZ-R6j~>ucPD>o# z_q>LA1B;UoI-gwxvBNrzAsX|GYWp@H`gz<$tW0w8LQQSdw|BileXzTK|%fG;!tvp_{WX2mN4!-rE&%#LW9GQDgFRqe#tviVj#G^tBa zW&dxsW_r<;AFShgnw2g?E4D3ZJGpIfTZJO5%_%u_zlxc~`GCuXD~f>X$v;{@lu^XP z`O?13Q!fn;q90qVVZ1r>G8s;K8mMj(?}J>&I5I%l8at3*PliFJP=@n6v!pc|k1q zhp29S7yZKY`K*Zlx{*?qcMuY0=6Y$H<-U!SY!micOqtv8PX-3NVF7f1=YvY98XrOm z*t%f%sP&x{SX5kslAXN|;#vJ%1SE6U`FPuLGE1>dkf2F@9`T}G*OXnTG{7I5538^q zt^Y?4Wjq0zZN@Nkmgui|xt8A0K^Hn+0a02qYdHkb zOx!H3_wj7Uokk-PEMD!u7v}&u7jJ_-lhPwaf&4@YMylBgx*3|p=A?jq-9yBiU ziD0_bW?ghoa(1V2aYJ3{=q*UtBYh)%==cy>AnpCjx{j(mu~}MJ{II{wlk$G00Ac@u z3|cJYCQAh^3+u5H){L=4VxGX&#fj7LRB-)SlLzIDjMHP|VfaYOX~46>hM@*1MO{n=Sya*xXS+mCGJ3&QEy>^y(Ez9H9*>euI<5D_ICa*aZiY9QWK zP(?Q0n5oyAl-2d=xvAKVYyZZpS-A$f{dlflb?KH|n05$!&t>Mu@h>qBS+u>;4fcfw z)7Zw*ZpGQTCNl0ViK?#8%2g?pMn&6j(u`Jya11qF{LVwKQDIXf7aJNfS=eB`d-iNH zY|D-Fg1f>K*>aa#<^{%6!E|GpGR)_G!Y;y|h*+l3%X)8$pTgVDExeobjLq`Dzy7xl z{IiY{>U-=Yve!2_` zLh-N4`ufOS)vu4-JusO{_wRz_&BeUfwtx3EQag6TG%s%#_TcyK)==XfVB>AOu}b(j z#g%p)*xiMcML=XQ;=C0I%_SgC0U^sJ-L~C<6uk#5qIT`}qWOcox|}TC-FORLgDw^A zc@vkx%8K`7$yIxB4z?$gLQ3|i=m_memsOFjWKR}_>|;O)0CA+-w~~*8~|O)=rTr^0*#!M0bWmK2;|zm6nc=8JH+^dz@H=CAs{qGbnwugOj#o7 zoE*QL@y?;`mEaNK>KZSJ90$xRB93Zh{jDC*M$AGRN-E)Aq zQW*y^q^o4~^Ng+p8i3~k#|uUrpr|h}`b9>+fW%dm6#60(H&NM(z?YD&it)!8Uxnxm zq&tqx>tCdU$3cd?yu|pI8UGUSain`0@f=jf0jN(f`V~f>0J?^BuK@7zAt*>kUJ>a} zGDS60oaEAi2sMm9#rPUTC?VY`z?-NHfjsII9=G7edyVn0asghW(AUHQ zyaqau*K+*V8DER|>7;udaP&04C&rMJk&l1pnjLpXBqu2 z&=sUR3pm=20}!8M^m~jxhq7tUQ|NnOYo@aIfCu&ajQ@b~?<0CH={^9wp2`r&wI5UH zc`n3s9|K-RWgLLGp3xT=T@Q2v=`Mh+{xdpw z0hs{xCyf7;@t*)6N4ifD&p~Azfche%|HJ5uK-ZA&KL8v$WOk>+|Jn06(|^VkpEJd0 z-1L_y^mA~wP}%3;fCvqY|AO%i;7~%kF92_%G6eFdCJOzMi}w}dzvQOBN}*pNzKP1d z0v*U3IsPTaHzIyI=`I0YM`Z})s&6UuGROa#@t1*bCf(P-8>ox}P&aY(D~xUeI+1i& z0C!Ru2Oz%6=x-Q(Rm|NtfFpMZEGB=Qzw>83jIY){ueR%R>t38e5;uJ4KaBRko>QV{*BSUipl>b zCXYZK^$&&KU!=1EEwibLj@X2zm)V4-=KzVz8LPma(GfY&C8SdTj;2Q-$7&{2X+z?! zj8_7WrgsHG-;EBs+Juqg#_`=5?*=>=x+6Y19tY{9Qz1AoIUcjSQc>!NRI&a2zWxO}=Q6UuC6?hAk zbp^hLbQ;F{FkXYK#b7H6@N6pM;2i0?G1`~W-GGiGoiE@HD&wGmbbgHXXS5&CiKO!f z+(~5|G?OlX(SeK(06K+qfq++083%2o(=s}U(ORI>Nf!io9hD)Ft9nytFjs4L#s>qR zOS{o_z>VrNQYMBWPMlWj1OacDDV}e3j@BD$~cH2ot~2q zXS5#Z8q$RWFfa=%`Xk{0#F4HCQ}kqt9srypT~Bb<45EWQQHP17i(q^&#zz3(K)PPQ z>xa<6Ucjf2E|T%R86OFJGwFIGWdoIQkWRWNM)zTK6wqy?>jSuv$~ed+U0+7`V{~6` z`jHgc4{S|T)(`j+(nT}AKjWjh=|@v&f8fnj)*tu^(hXqzK*kT?rXNG01A(_t*+AfH zNM~UDAjTVzd<^LZ0iI1|9GoNFU`7vN^kAUlNH+v<2bFQqK)Ruf9>(aQKqr!J7~oDS z!b!VRS6eF{B#?!^B6r>OnV;S$QlPoJCV`z8J)? zfbk0%zW~uwNVgF1Dk|fkjdV$jUc~4mG4Vx!BXJIp_+mycVf134k=zo%(e4Q3s!R$s z+cM?aY&wXLhfp%G;LSk|=^jRqLS-CelkO1&kjfmOj7t%uQyBsZc@+F3mVti*l`R9j zm2{6Hh@mnLa!I$GsZux>%LOW33d;pM9ZV6EU4c(c9vxhP&qUI#6nS&dK)O`|k1_;u zJr*mepsAs!#Y4p01*;i$As&d zkik(_y1b4F8DdxuNDUwY;d&Akc`H zHZUav43B|h+b)UYV@$V^=@^{5TLddN0$j>q!$yF$duZ`Sn7Ai zDT580kWLIO+JtmM(wPnb`8k`!Fr67P*pLpoL|T;2bdNI~0P<$LNat`EU>U~XQvS#A zIEd3}(c?_~1QP>5w}XRJVlkCZFk40#o&aSDEqa0}H!~#w@+gOt{AQ+OuwgUkYG~1B zrpsVD0OWB65?uzw)rem;S3uj1&3@zPai=mKACIw8M zyH_I3WKsqjG6B{W(&9|6$}A>iNJXJUn8kz)He?~~7+RFYX=gJX0P=H1v^bxuJe#YW z!G>(mCDNj7rpsYE0OZZZ62Bbg$6!Ma!09A{w=+0oD^oLARYI3@xU(_DuoaLJK!nb= zl?k^oA%mm#aqkBqLk!yhsR2YF+{T34nGj%#?ZK_H4V6*KFvE6`Htd&3w=?MuCIy(g z<#yz~lmUhvpldrI(d}TmolFNXRr=xu@@qSoCBqCmL8>j2NOv-+l}Q1HWV*DISu((2 z1zpTRE+9s&l}BwZ(*ew*+sbqdFyw+R@sPwXm-+2tI)Hg}=Q14w47)&=?v&_uG2L#a z1DJ0At%V`r0xL`?ci9Y7$_T@5AQBc@rPtiI@8%eLI0hpw3W(iI%rL_qCQiCXyoZTx zOw5Rj_Yg`O5T%ST*f_=_#7MP)ONgC`8FrCj!UOV3I}}OPt_(Khql(Z|^HD`14yFS@e(tD5=U_Sp z8yuiRPjxU|0n-5>Z?3@mm)xTZIAI1G3P6`miwcFPzcZza-J^W4irJ$6(dV zba@|-V1^j>15yHrFoO3p;Q=OOaMTI9yq^gfVmJUu4Iow?Li7G=)oLOveDjLC|SyB)Wr4cZlf# z=0Sdt=@?)*1iF}0ctw))cZl=nWIBMk1`jbE0}M{kCB7>0b27hjrURI3&S=|)=$6OwByJ+aJ!SKgH=ZZ&ZJUw!Q?@|)<`3!g zHr%5U4(`r8Wz#})y7ZK7oLv7sg&wwzMV&1=Z0n;ij2J@UnH!_4UpZ`B9fHr{bm7N! z(bco+Y_AW+C+;l%ZtJfY0c(t$^N|KwN%gwlZCf?t^*H$YLm@kMMdotirtlQ=jg1hq2b#02={gE`t&AwzR9B%mWl`@Xz z;^}hY$^+sRGyeV!EX-<`6Iw*oDqIS%Gw#>^`>vbIx;nfH-yXNlgT}hsduYrqF0af4 z-7O^Br0_pREpPVI%dxw#-`yT6&vvI*5xQl&xeVQeD;MtefLTVB%ZPR^M(KVWr_QlC zY*V=OZU3$B?sDRmP*@T7Cw@CUTu!v(|Hk)Jx^lKGf^NClyHf0v3&Y92HCI#pn9BZ~ zvd=3DmlK8fe?9(3+*@Cug7%?uV6*1<3pxH9|Cgeq{e_dn&PR?LyzDW;ab|U$mwjkA zJZX}wUWM0TwYX{!qPIt3jVS;ee%{)n*?POXY-x2)Z#&6k=IWq6cIzNAypEIls&fjZ zD_j4)NXh453?Tk2s2>bJ!wOt%Zk&i41+k^kxY3bd$DzV3{L{1m|7bs%21F6O7luT` z9zea&4zGa>s~f!+N9%pua7D`<_5iKHnK*Jt!~wU!MRPd?=kWViNnC1d{a`n+e-*~U z3^3I!#6Kyiy>NkP`2ZZt#|=gfYC~}u;8Wc8s{8={7?b`2HhKf>6iUBxMTQRINZ&8X z9t#n8Wv)Gtatj{hy93BWQW_#=EJD6;TLGVM;Pdu(xQ*txgj*xGy^*=wKh9JOMShSj zydLUHrBgs%@hz?>L_dSO4F4K_RL)~WjaBW%6|@UCA^9(Z!kbbc{=4C!kB}91HI`?| zi|v83QW2hXvn#6Tld-tO(IXz2(jrCSzCvs;ezl}^M+QzIw;_+>v!eSzFS-=(*M%}Z zOGVOgn{c1)Jv=sn+YGoe{w(Z9gi8xaOOTV=qd=6#bJ6w<$8mib?z-53kcH6ccvOPz zOcKxg|~f`4*J}DpdXZQq{NO-J0ca zsjNjssFT4PHYT|Aq17q{vbQ8MH4RF(2m1I)Cuw{anR&lO$IU35C7C<&DfHpmXVKj1 z)2KB^Dg2?8GRLG4G;4+#zbX$80>XewIM0YS-2E3)xh$oUh$pR(83!X%&&Hra_;SDD z2bhPb7fB&nm^x2|Bx#KI5Y{tqSxVh6`hwC;UuSRcZP=oGNHzg&xp-b4h;-<0Y z6o!tFi^Lz5>Rz0CZ|VBz#rsOt4sR5*lktxmqE`ef$8e-jDN@UQk=o(6B{)Ai%k=IN zy$g+h1YKH9r!S@Uq>M-G>L4xNDdoTR+UzTlMlcQTxyInane!QUu_X)=64$DjPpn82 z+YRlXT8}bUeg?yz=1?-P0qm}RwetKJ&FJ*6-jBdXYS2@d&4~?r(OZTej4=Gv*Ctz@1VY$c978-OS6teOfB;7eXnj*d@%pK~kDaAH>M9Qg} zX01YvX@_aWoKBVc2(HF5yy5-TB7D3A5251>Pj9DREAfe=7xNfo3IP zkn$6|{MX*C@G8PEtuMu=+ST%ST*R zyEq>oJWLYj=h(JS5a+fz%MfohI#|0IL3>iGrJPj3DhUI*atf+6L&ife9rKRxOAyG> zuVc{K@{=&a!A20nf*`mq#n;m5)hK9$)S~SL-6^4?=myZ(XB%_@<0L~Ji;S%SpVH;Q zVnvcf7*Dg-fG|NMY@7kpErGCQu$xGDNFub*aVAU`38PamyJ_%Jxx`j!6seC&)P>}; zmfQ0wNdMRi==@3JQHcWQjK@47;%0`69pEJ?LJg%M0`}&F43~C?KoqFee{>Z&zb+9r z(gh~GCKA>%TeSrheN(E5_KJRAqQ6apEXYahG)xkL>=n$gQW1q(=HfD9#;3?#<$l}% zbgEb$Gp__GZac3}rSBwB+?7t61d+lVDrtcvZUr{AU&7U5>t7yX(Y}^ql~8yZa_p2M z-(*4ThWpt9hYTI74niJwcSqzjh-6zDSceoRi3L|lWB(c*XErS&8`Vpw*%l@&-3r^x zZ@D|e?eu&7nx5U;+Y3sliHvu0;H3>2@ zwQ4&0o@D@TM!$$lnx*SGl{AQ~x<@dJHLbI&yq0zpNVMgP$$_K>S&&77xA(`1(su?8 zT8~t=i>VlX9E(ZoqNZc{EG!588SGoU zB^t9MCw8V|CQ$z6(l;KU;N^+gGgWUfU3Ga&mJQ~vwJw~ zS)|^)2njjt=@^q91pqkzfTe+>0Du(ocoG2f)Gh!#2>_z(Wx#YeK`q&9w@_uyqe!C= zC_U{ewDY#KM-hT5+Qk9ri$Q<8wLcgX+tc9!46HOH(vwJEBGPjJ`hE5+dGl1-z0aOW z^_mr+-j8_dAy5Mx_{9kv5F>Da2&EihI_)mCXL1S307YIn0O>)b?r`=)+=F8F4>7fg zb{`U{oxs;Vh3@Te0&gOZa>R4cE)J^5<0*m5E)Kx@uzfOJ9PAG}x5M@*56v>}*)A?l zDmZK(K~0~-jc;piyppyb#no}m{wZ4KaKt{&W1?gXXQo+4>?7po*3<4I_OWES!58cW zA6+97w4C_U_HktSy&Y{`zIQTsS`E*uT;pBewtq1Q)ykdD3ASdQA^lPDW5_Z>&= zG4f{kv0&dk`gsnlDr7VK$)mzPP97H~f*t>i)MATg7sDzfSZf71WaNN@=2>Lw;@c(I z&SGa}#yOc<>>liT7Q`u%w<5v6-jYWl)-=bE9K7|79hVb8=419Kc}XwI|0y~^GI2Cw zS)(6T><7{Q-Z5~f=|$cnm66bt?OOS~$PNp73m}yJ+gcRiIq+=QPVYa5N^9*)o|X0} zg&}4L&B|ODU7cKM_wvT)a7ugC-d{0z*l;@DUxRD7V-w*?A!iHh3{tisV~cipReQW< zuadzd_p7y7DLa+)WvzX%j|c6Fvyj+^kzKo7(9YTHG7G%guG6AuyE zY_CC0-#A|COU@p+dhGnco=6rQ)&p(FOR=W?C=u2jKic&ak%p_(<{yz@Q_%w|D(s2- zyH&e;!E&NJN<}xlePNG^PkBW!{q-YyW9=O%;pv;>Fe=(TT$6q;)>PR)p|@1kLKvR$ z3&I`X%Mmcp*kRO=s>N;~$6;_&egvx!$3S1)=AQ<;{p=RR2+LK#1<&H%K)B<&^|^3( zgvo<1x?f-t+f)Ywt21}CsA&GI+7gFIKO>Uh?YX%z9`-u<<8enjg1mbplKwi1VR>tY z2fg=KB>Ta)N0I&+lq&l=WTcS_#!ifu+K7-Li(=V6-{Gw1`{V#THA?(-__DlhT z3&@cfkmA1}vC?C4q~*jH86y{>Vt+yMmQOJ4rP#9&u@xgyL(}`@!6PDmQ`M_5TWtOd zaSYpIw6e)?mgoi7gN&+Ah0cAZf)MKl`h0E_&FG6voAE)ZQ%jM{8+KSb#*CzbadFYg zp(BP2ryC``4S2K|J^_RdZR%C%Up?km``sIo+>ISK?RwdJbo{3MbA|>~AN<|E)s42F%{P&L>K2pOdH-|UP72(mPw)0h zX5MFVSwr<4MILz&)GO!@&!}ON_27JT%M2J8TYU4-H=84o@r#%{v#&uJkL!Ydou1(h zi!d+zvi*t9QpJdLMl{|u;}Z`gQ|ls3apxa}o?Gvm7a?vPoPQO%hWU*lSP^((gB%-+ zABN|>Np-$3kt*zwmriwTEalfT&q#^e4x(EYVLnaondj$W3}Q*>;!;mHekur~*yk5( zv-gJXoc?V)~hbj3Wz>wm?x8ucfdx#@&jOCKNY>PlZk^vAY9 zBvPuP>5+NkTF(TVGZ^6K_!OX_lLy2Pa&Wj*$8+@QMOceHWS$1*Y{;*z78d%8S9)`-eb?ey4>_*_39|%H#Ub zj6R^#l;awt&>>Isfq_8MvC&busyhYh-~M5K*nIWsn>P-fX*vRO1WgCezIo_{BL|bL zD!w1ZHjWxf`kwn?;g#s&N`w04Jx6uBxBHEB!s02{&3LOB`=PQv##`kGb3FxNdSVx> zpT_05+%UViB#gV_a^tkZCE<6a%ZYKafS-QAn>T|N(ZN0k2asdUR%Ku-dglsAV1Mjv zawPdA-X-;?g?9!G3b_m<8n)2+&)uQ9;L4&}4^jOUcWKQ9OAw8Z&ig=VR>9uanXytU zcPglF|GZE?Hpns~J7zbR6U;yl2M?I)A?q^w=Y`PCHC;(5PmFOwr<77Wi)7D-YJ;9WDcbi1H`c-2!p_}x~mGBLfUNK?qoLP zO@tlLg>4VvEmH$>n6By_#m+Az>o0S7By4)wYS;8JqF($HR=^rBKX{p+qk(PMJ9yw@ z;~(Cz0xpKn9=9H_^KG?zq2~-LgZ=I-*aK&VN5T)!aqPXEVNIx}m6@dF?QGPq+{Fw3ihu3P-V_>d z(+A3mNmddUSUer7>$(0>YOi#OECA8vbYh{Qjd-mqcZgDP<5t%A{6p&r6KdbqZjJq8KBh8zI_DCkhs zbX<>Vn9DBqV%xP@f+_M)2pqv*PkkcR2bvz(Uv^A-81t%I5+sxwZKHrJSy8c17?dk!y3&xl{mCT=R zJjnL8G027HJ(S0Ibv%53Ze6S)1N#Be`wYU8DG4kx;;<-hQbW3#_5e|@>k48R3m2QZ zs^M8Yd>a*U2E?;za-oELu%nvA8;-Zf9}hG%U|5uMdI)iYZ8;$_sl|=bvAqrIz>NQMf5x z)lyo6^e9YrFRbwDrz}ww&+gjJ!KW`ch&Ic&hamD^FR(d^t@i(il?)BPU|8Nj1XqUV zJwT1Ur@>N}Yuhv;FP@UdIbaz!UmsCC3gXLYhCy)ZaxXNLFKVx9^FdT$49Hp#di_5Os(%kkh{Ku!RmBa5 z1g+u7s3zJAu1>fMG>t{|Bu!r=Wx4LW2Jkp(C_uqlmiF_2==LP9Y^Un-eQ8ue0$mll(oqu%RF1iGtMb+J7^UldAdy1zk z1$qn)p(uM<5DnZIU?EM(4Cv`gd~oe&{CLsv5LvEb{aN?Q0NB%=S42_O%ShVTgbSdi zFmDLl=b&{7ZYb)!CZgVA*_qc@Jl1Y&;6dd*EZs7u@5krg1~l+97?|d7GjNi^yT}bj zC=jLAZg3c|U;D7sEFYFa-W4`c_@phq)Adj#uJ&{( zxPlYKn?T)lcM;rqGz+JhVSVGUu4{HT-UvF3J zG=fbvYv-C!WOKq_muAzTsw>%g}Zbi2t@RseWpvZIErFU81tx3*K~KT2S>*L=o`(X83aNk1Yo=SyfbQ5PEHG0YIZTvY zl7E^P0+R`@bE3!+nGsbSkF|ltwcs4K1GYAiQPmq(*^Vi&ulh63DLYT)u5N+VO@HRW z7FBcHN9mzKP4iy^9Ur6ebv59pf$p^BO{V%|aLiY@&>IWS*l;)*d0_~YiXVO5=(9PK z;hQ1&YoEEo?@R8j)LADxOz$TKi&&WGCH;*%uJ#6v$|2n ziMbG6*^rb~3!x1ezjuQYHy4{zArdxS_f^3-MbYgC`Bu`*0^ww+)OnvtY0wyo^)%MhvD4_7Pe2`lHYj z_XUI1nblAuZbFr;bHke>^|`*VJM=F>LhmD*#W)`fTA@!`KAD9Wcl$#onpa~Enr_Af z{PYv(ylr8KJ3Iw>^eNC5nb$+nT#ZhhowpoX=$DTpvDt1&;!jLpt@3<7pHrw0AD7dQ%KZ});pd!Zl1>ytR>uDl(HY(9dWo~G-|Q3+NhvT28UGW1t?`l}lT&CX{o&(KEuYo|VoR43v$#IxsG}ECFe2eY0sz3MR(Xa_nY#aH`g=rz?Kp>2`8BiJl zuLW@V6T1M>)ZZg78Kp&j#du(p>Nh4s@mUYyl=>Bv(9)Usr|v4Y(CZ$?4u(+;{}Sqz zVCR^%5j$v`p|CZ)9fSN#9}DH-0*Y%(1kc7)WU96X2PREik#z@9;Z^mn{8DN8cbRxj zW)3ogoI~5%1b-0|(6Eq48AHOTX*H6rzupsRT`7}zR6aZaIJnPZ7e~LtBQ{u3w;m4V11i0&LPpb{Dp_@KKwi=f}`EaK4 zcDfD675blM3h${ZJ)x$TJ6LQqfMNrQeGBF=ui$ zDsb9bdB7c>0{0E?LXB&Y3B$$3s6DTI0|qXt#`xi*Y9SLQD%cMPo?LblU3fMx4BGL7 zsMwcLu?`bd!q%&qs5-8{rXS{seoyOGp)(4VSL&IsEnbUj5+-)#(ex>*K_Inh(Fv+P zMZpBJMwP3&_&Y2lYKQxxF`|%1*9nvZ)k|VjJMP#QYbElI__Kow^=%QTtX5Izl(-`WfXIZ`pOogwWpEFFc88VQ^B) z1uLiWI;?Djj+!xRm{{;~x{!-hqCW%MszX?Uuwz3UMEAys?@^3gK7pj_>k6f=DfB}w z2OOY6e>K+aL)Dx?_s`%?Z}G(3$JLo`-(I8*+l*DC6WwsHS{0R>om;aNP63CpT}?<;56(t1vhkc<>t@ z-GWbaE1`rhlI&fa88qGNO0k7Hv6wGXc?8OSo_k|7-}({yk8pS_Bw9OvI0Oc}qe?oe zMekE;;bd|W7B#I0mZ4eVkY4)7D7A3Ir?Q(TL{Z~f5HEN7q4n%{*gcRUDgjYT+g znSk9)p^{@)Oc0CpDczXW)t4HUpyso$VL<4oV%5xj>r*;?6_2BANk+17qZV5)tb^#h zwI7A*0wF4h;*jUD%B+iCA@b@+viB6?i0en=TNm^r%Wm{HM_2CE!m9R4W(eGCjeiF% z8gfSTG;m%Bq%jr8PY&Fqp!)sX-}w@n`rCPsO)OWkD*zL&E*Ktyz^Myx#Ok`^{4hEcuA4K1N7t%tg$)@W#m1qA# zLV}Yi?T{o9@pC*Rbo5nBKc-E5=zJD^(XtR7x^X@Pw&1W?e{awU(mv@Vdgb{yFn*H{WF4;Fgshur)(PB{6ovWtd2aC36Fm*BRRaMOjk+c0tN5qshgsO< zXPK(r=#Bc!K+nmp9;7aQIvTt_z&u*@K^l@vz(BKcvy?uElr)>sqhb?KI7>D%oy4=g zpeM9cLdnWl!~KINUEvmF2H%XdjYWag55sj>DsQed&PKOtX+%|;A48MWUn>cr((9v8 zhGp0aa$YJb6`apecB9RVPaDoW)HrG~B%#V{3(>KS4Y;~y=Fj*l^!loEP)!V%QJ-t7 zaFAV>1HI1lHBZDnBd}}n6GmxVEpm13dxsx7UD{I<;M$^JaC;+<|4Ap-)HEviz|9vF z7v7lTN7KJ9a;Krj5+Cu`|0iBT1DvLUb-lzC&e0(Mwc^i@=*l-3)^#33QIGBuL{E68 zuWgVIPdik_AER)lEX;f6$8g?kexE0l*RvvE?i7hm6%A2mdYdq_?du6e;5_QsluFpD zxPy%zM>!fadNC^6)(gr()p4A3B)x)RfBx1?%sfn-G_wz|3{wwA|FoRYp=}q!{>0FS zCsRgfmP73|Uo*l1_A)eo3;0#5L-Mc6+}AJLuwu=lc=Pw$X@S+(b@_Yb^z?zKZltIv z>Q2A-Ox94`#z-%`v1;x@dDG!B+VmM*Zoc_)zAud#P!Nc@z7*P5Ql4vd-|&0`)|gja zy{UWuo}RR{M}7`1PMFz+G=m?1gzBbw%%i%uv9U4n;y!=XSjYhUt)p3M!^4V4F2;G> z$$TR&A>g3V6p2*^zx~2nF>efcJd~QfHexy-itWCkQ~5ab7fb@t-W#D+&R5CxG8#J+ zM4C8gyUw5a;O8pNi%j_RXzC@VW2V=KK8~%}r?J6ha^l40Ot1VH4`ZZ=ZJ;s3fOUQW zugMozV#Q)?P+@B-GY#IUel%fEcy5BfhqOSbm(v@=kXqFN9199NLs84&?XQ(TRnPgs zQS;AGJq+h?kYs5zsc7OpmA-hiyVg@HE%cDxH->{j{M)0n#q-uf^?x}4O2=$0Dq2rW za-*?lv$|1Y9(L@`U1ud`^ICA)7>-)*gZmCOLs0%!z&um>iJ6Z9zY*Z4nu3*El@%TA zOcY$$8M81;==Wr)G|6YGfzq^}hMNNh2Sn z^)L((GY5C-*NeiaJ|rA3qpInn@7yCvqYKx1#tfAjMnP+SDGDX0a;#SF=S_>Jc}7wb zK0HcBv^UPrzkr1$I0t^7uZ6SP^pW>Cw}Nx_OHhd_K_{!H@cgXaRR27POrzR~R^I?o zW7nQIYfcZ>$Spn;8eJADdQIO$7oOALRk|{WH058xsJiF?`MSk-7(X`;yvPgJ=#7ZD_K)y!aD!u=BXr}`H*}G#I)4V3c zM}`Lz^LyaI#O~d-9?cT}1`2<5Sy*unZe*8EnusmltFhR!G(5t76i+wp)6y)%BfX)( zV9@!M`})bv0hE`yIg)C|Zw%?ZQMl0sH%~K3zl>Ab^K-YnT4I@X= zmG$$Z>9NY~(_}K-!_0$sy+q_Q8}5XYcLdeHT9Uus?=kGJHDk+Aj!*!5x||~OT?h6cit@Y2o7A-UuA@6W z`>>-6CEa!CT;;NY>##&K=W9ZY zZFh$@4>6wd2zQy)$7`4GI4_s9ia+lrqy!@+lR4jSK=M;!ETgN-&_Zl4;+F1-hXaha zoAKWDk|#W z5fybzJf=CAnx}LyH7(4+tgO)4!{{szsAESmD=cfQ$i}krDKaddvZ6veS@{%pFfFRz zXRR5u_j#Z9z5f6I_4{*Oz}|Zu_S)-sAHMf}=Zmes<|d~t{qe8DRmd1+=AxF!CFzAG zxunSbbADRrqa%G6{^}R}{)qbT{_2MZ=h5cKvn`$1Ef;5tTqDHhGNZ9)zQKB>5=mx$ z98CztxX9go{6??C5}}R}F@5cS3|NgP5W20l^J= z+dJ{dgBDuRfgX%%>HW}#B+-S_W8<@etH+~Ifqozz9Dk2XOOQEn4By^O{fN91*|7)tS&dD^4c$ z7EkIHT0}2Hn}BF{&zj-h8Enk8@3E^Bf0`}&u@*?GMng{7CnT7>G9-$1-9~bxqZd{F zrmZ#GA+-Bbz?$uZPCb+eZNGU=NK|H=o=?IPoKk^N*CT%NA}_Pu9GT=DGZd~&25YfD zoxp4Aq{?OtufhE+9MqIHj16v_y|B(T`f;6vFS8W-Vg>1W>>Xm!-YD zk-Sn5dvGu8r!Qg%?5>oU&3=uF>mPT;5jiC5{oYuV$Ojib=q(=<@xa>xQb$E)xzMT; z-4lWSt}1^fq>hB87!N=kS<9$biHIB<$HaMka1{;@yp834$@o{p+AF=T?M`l;^~k*f zn-d@@vzEXC9D|8cAEM2)a~exAgla*cyBW4n%ATALK{*AMNIlj=t~62b5)PI%sk&47 z>|N;--xGII-@6Fd0zY+zLtV!w)|a3eR5d$Z?@Oxethz(c>)K-sp=AMIpagaeH5GhN zB7BziATLTg2LX^&>`FpGd~EUp!XQeXx8V<3({P{U^%4<1+7W%xJr{2shg=1*2-l@Q z^nebn#KWeNY8>266Ee3$O)7(?YC&I_&s(TT$}I4}3gx)GI9^QX*dkiN@kQgYzG*lJ zKl_E0qP(K6Coe1Rflo`w=)fy5SLA?YfE9}D&iaTI%Hb+m`POF;cvme!J`+qi^)vi! z+#whdB?P(99WLR5kro|v5_+df3RYBQ<}C;h9OkR#qYZ1Yho{~>XdbN)i zJ@>W8^K?%dxokb@CGFW_0@8zP*=scA;L+g>J)vwwwY;^T2PNbi%TUz$nW@rj$vaNY zKbfe)-dJ7)|D^KPy~kwDoew{BFqRgUIT%XI7qe)!^!05`MM7i0LeKin z=hQ#gxs#}E!&nK3ks!`SbUbp0I%u0Jcc}E|aTP2VNA=QTw%r{_-<;hUR^uyu z4Z5ysHK`YM6?t+^EPDhsM$HiXH#?hFO9!=%sA}?jq8~0hw}%BXm`${yUTRtJF3_ZkhY6h-g# z4`$_ZR}xvPm_dz~94wMc{U{{=6gZi4W!2y)9MV3cTDGu2hJPx1m_Ie)catzIG_c?U z?CXOyt`)^!Ep9KvLxplKsv8m<#P#CPA{=TWfuIM24zsW*5QN9kL)oi-Y zxMx!Y)8tT(*1-%G>~}3GL`P796DH!=^58@p9u#!QxiUuV|7~(G`*ql4BbAa*XNZK? zCIl}RibJJ#xqc_F>I7eutW}82GQ>KLkME&bQYm8}&8)6_%GJrATk4vw7moFju`QO) zTRMN?T!ayG=dE72aDi~&>AF+O8`7kY>t@38bx!=>Bo93rZi43zF~)C+gtx?8Vfm5weQ{tFv$F=Yjim!n7NDEZD1AAyE#HHrJ6a5e z&Hly|;2FPLkR1FIDS@_rWK?WeSWZZ(+EJYPGm=o^C(w%2&H$rfm*H79Cz0K_f^jwG zA`Ml+y|vU*gRY~P{1@5n{oD{|9}pTLVmc)BatS7pk1PqhjbhWedmyri{Vr@KaGm*m zZUcF|e3r@k({h9EjQHam*fI05a&q?uU(@N+5++W6Rwc3JSFm`8HgTN z=8`XdyC0z+RZtrPyrakEf+ z1oSZx5v4DHcBMkL#A*!jiQAwFD{eRVwFg~xJ!ah(A9nTTU-~1iM@8c;+W{HSdADXDl{s)V zvq1{r8_7&%XOFdnmaO=dre-6+N*kR6dU^?aDXbjh?W3^&N(eD7+yrLCF4JM6E+Hy_+s0Ncn-lM z$mR?w;=mCXDEM!g_hq-jfmK}sl4<*ZRbSO%9%DIk5<@aCj!a3UL9#j)$zpw} zNG0g+f#)gRAdRCGhTixBE%$ZWhA8TK3Yxosn6=4g)%_94)}${%^fY8whJJH9ao`16 z@)9MF$5Nm5;Z`Pb;?XVaBrl?*Hou}FMf=qXp6_jV-26%sj>v?nC}gsmUT62PZ-ZN{ zX<5STtajyyz|lnr1~&GAv6q3=v}%`0zavI$m8MCx+=$JkJ9zv?>j>{cKF9XkAX<7i zhjv5-uea^(h*WkXIr1B}NZkL$!B~6LzQndNNfd9fW{8C1D0cM}MtjGB9?ZL=t_*!f zdeHJiJ4*e^mgGo>h0qTdx1{JT*-9K1(RV=q9Fcc#B!}kPki>z{3ZncIUv}LP6$GgJ zvf}>74WPNd{xw&DE+Zd6TP5P3^Zb`iJkEwEh6G?q2iRP=U6)18+l0Hl;mdJR z!tt5pcHVO3i|noAnL7JMr3pu`mm>3{pj}bf9Rc_(36`#ZA5+jyB0*v;>ZB~8w)=Q0x(<%s`U>=8fvmhH32w>yfy#O4 z0VrEl$AzVkj1HcPZ6*}fj`aCP?-8~q-v{jhXS^yrWaRqc~!3Vs*A($k?J%Pnn#ZM(ROZ3}5bRE{|ZV*|I&P?IoMQ|Cy@-d$^ zNu)O$p2EMP0?2qxJ}MN4Z7YXv?ZFTIao$e%Pp|g&RGll$|$Smf` zOi?O%_4+#3d@}D}!u9O9;j~P89&vujkU2h~1LliUGO6wu?NxzieV@q9_U2|ma@6}N zc{GvU5l`{fuUO>H-={;MTY&^xK6Nbv$K;}13N*aAYg_7-npf4u+6fr5;6d~-(uBrO zrMz8(3-OI{g$|($Q8Y&#LNzZ*GUWY?IImRSRy_$8)+yyOzL?<#vFfIA+{%j2f56M6 z4q7zOEKxZAMyMXZ^1^h6gfp)V2HGUyA;v%949s)Z#rbWYAt?bk0cS1H?Nz3aGcq@t{aGetIV1IB)~n{p!<%*nH1U$ev^>nL^w^pc|CEIm6@NW~=2 zPnkfpY&q+Srn8mK(79W5^8V5-s3fd@gPB|PMrS56N9Eu}S?OY7<>WyeJJXhNN+v4Idga|?&En^a?CtGEUSk&w{*EIR&H0hBG0&PslYeyOiuO|tk;46> zYp}5SQ6(Gx=mM4Sql=AwfH*X7R1bfrpIrOG^^kSS$gj@;HvIJ1@fNXj)9nms6M+Xg z_CIg%O83!LJp8MxPTY0<()JsE4i7(Y8Ik;zzhR|uIF((`j(--RzufJeF=5$@Py$q9 z5VZ(xL1lEX}3MCx5XG~aOV{F*-jp0e%p-i-Gpq*bN6c&|HAWb!-2?6fA zv)yG`iELccv-*^bpK|w=cZi<^G1S!vb(p}aier1$i>9K1kXCBuF;Jh@a zKJor^VBxY6^|8S(tR#k4eha|hDb_0n{#Sl4GS_((q+YkmG4A0>O~ z+eFUT@MZ_5NB}wY#>D({SGWDGc7L;Ean9Jq85?p8kzwxky2S7D{`#vhUuU=5`mgi@W7?Bi}xKjLNrv`i94(wyMed)~__?85&X_7nc2V3tq@e zWw5c^qQXwy%P;RZb-ruZW5I(ynO+Sx&KWxUKW+@Hu3y1W=ODuKBj}(s191ZBt!MjzHo#3?(bv8-bUBxwts*9!0RBuo!S7L3UYLr!!<{cc&a^t zS*jg7Pk$g>JFO$v_DId87(U%au^+=cF)~V<5u&2DzJ`?GTqgDBrgqd4j@DWqt#0OGanI+;&Zb&L|Gu0~Mq!-)-Np&j)0Z@mZCWHx9_1;sn#a zMK4h$#r)F9etQ}sU@5vW3Z0Z|s?v_W5Osmoz<7fxdACEKI2J?N&0dHI)%xPbP+O{B zh8R<}`hhJRO2)qJk)So#P%Onkl~$fdmzb8flW*ghu7l8(P>*VabiLzE0{fXJ;kBxU z*{k?MTZ^W`IZtsYtJYLKjv&S;<&REMsix>lXhKzuc0I?V<6JyIY^je@{?ZN(VOWUd ziSSP93F3xwyGX|L%-n_0y+R`RGIx&QRaLycPG)XMnNJBR>QoWzOXO9_uECI1ul7b5 z8xE*4Q_^518>D_hrdDiT)|7hH2~F-EvNW!wzLMGkgnbhk)3Q&H_;2ovNYfCffsI_= zAzBp1p{~mRjt1?B+Zr$4&H*E38>t2Rx`S{(4Gmf?%au4f7`%<$am@0##zEf34O;ad zMe$;tzjrLo$vQIzFTi_R8{zhIoAL5x(%Y80GCl^at*$D3$Y9k~$!5NzY!%}kc!h5Z zBxv(7OFF9`mm(Tl!XTc%k0#k#YT3GRigoATp)t&eD*338uzX!4iLCo{2Q+x1mLVzV zPw?e3iG_x!DKG^Yhtk+JPTZa=oDVQ&Rp+`Gbjw6(@w9HJ}w(QEU67QqSLH;>P}d%Zrjtus*I6vW%4Sw)mE@086#QRDd-Lq z&r*HY@OTm5Wnruo!`2b9cDq5Gh}>?}4HczlY3C?Wx_o_#{3v-hNl}Kv-g+xi$_>Qs zQv!!&O5lLw9am*A^r6iM&y!Z)r;~7gz9mZReYD~ZLgQ)2BVrsOOONlwq0=6=FSZ}wPM9!@^y=l095^@tMsA#ww1C@GN zd&Vy#ftlUIt##cx1H|y57kGPpAsdPE7oezHgsq?fI%r9Hb9=G365)#STA|!vC<3=W zZ#=YQ`&??C5+m)yOTS08WPBu&-tsPoQMnhARf#gpBha)5-b62Q`PCLiVH$(7vZN!@ zHs_Ka(vGn>DCMk{kLo*&##ZRSU`Fhp(I$N$U7XC29y4-~7H_x@rE}o=LTuwZX&{q2 zuu1Y`0%pvc>)ptT%GR|8-zmiyiVAKdpY8{dm5a2a;ccnUD&I)&ry}Orv}*>^7Yzp& zi#i0w9JSwIs1xX{C3#Dfl(Q5!7y7Ke(!T&+E(YS|;+Q+Ux2U^tKLKE4IT}`V(JI5k z>syBT+jrMy>xI835Jt1}x&S9~DNzc?iu8F}d;hjf*0sJgLj2ZK8x(;wvDZux!^GRYv^M_@RPQnVCAZHbBk9mSh-F~Q^LX+65yuX$vHZ4Ms z`*VLt2_;mKbb;S7Kr`s6WZgjRQC*oxAEfn;kArHGKShwmnB_k^fOBw=W<`G5)8Icc zNZT9*bGjJ8cpf|AAP~;lTwSs_m8bRQpKiFiD;h5E{O;k}03CVGek%n6BeXQGFGjWI z$Q`LIySCZqe#X|1-$dr#L`0mqBRLf_r?MZ^pP3aADFJ>|Azh781sOZC$c-OfO_>}` zg_*b<6i+rXL5(tcbnWm>z<+OCAE!!>Lc^p1Y*>VD)3hi9c*;nc&X)fI+DKXbI5BxI z)z=T|#&Ix8%MgXt(~?xmB;g*VjnPfU-7T1VnRl|dD4$FbrKKo_<&!C5@@Sq+6~$;= z)sv~>kbE*vNqE$gc_Lwq_J;61hxV?1EFW1SO(v{{bdClofzFkP{MqO@RqhSq*ht#5 zOg^-BLwRH!hYD4`YlFBbQ%VMdn7L+6Vf(U0CsDs-EFJhrFN3aJ9C{=Ua^dD2IO2S* zK^*zYf<%2PpzMPksj}wF4s_#csE~r6Ioa#vGiL_4;1NC;BU2w3yg5n^sAcJ>KTTI*JVW-*)Oq_9T1_~kY;FJj6 z&7x>I_{REFnJqW z@VVo)&76-?XDOUgo-$6P7ijX3lwuXt)sw|!o`}QU1RLVPkqG+nd&^~PB$X}gCR~KrNu{M36PD8 z)E^0BKf)|U(YEAiu>A-SxUm1px{8#|Y zzTq4n^>Li28#Z&$oDttlgO6}@LRykBUCR-dpGDxE+h#bF_a76Gh<&(<-Crh{f8%TI zBI_}zA$35Se`1LhmIG5(2c&J|41<1=PAr)L8K4C0D_`QeT z);?)4d0SiLhaB_AwHIaXo0%iziKz_yVMTQ4D#xNV)XOX8bSrS;mw%HmkMV{<|8uqsv0RFem zO^Gpd4~|%l(7iw#PEbPEQkpZ#&4}mRl?Q^4h>PekUv^AQm(+n z;dpLZp+$tlpDE1N>{rlPS}iw0+JZt6j+O8& zAswX!f+Zyw1+%zNNnw1(!A2`LWAiHYzGMF=KxsRr1w_~?^(vhK!M@`&3e*?l&P;n4 z{;VpPck-(s9@J~3H&whcYK1yowlt?n;hz%4+t+B>V&pnR&k8}8A&Nc(eHf5W54RkM z3iA(GSNo&Z2o%u@X=J{Yw~iP4k5R{Xk#LHBao!5010gsER8X)}-!igo@1xPiwX`eu z$K9yC@?gkn?!YdhUDEeW0mKGL~Xa(72>6r~M2=nu)45L#Nc7TAW`4Oe!F(DjrM z4%u?K8;aaF8NMSu;IEvw@sh&rh#dk)nGp|t-Yr42y-kbuzQxoy|2Y<04yUUEUSK$( z7GxlG$xZluw`)Js>y4ld%KpYX*z&tz1n<;X#gccBjyIasCIpuao9GRtO}vAl(a0uM zUB;&IJQVpEkvF~_I(uo>;JSq|YZ&r(X>fffwuF+e?tvE?k6PWP&xhzO?+4`KL)^q+ z@Xer^Z%!hz4{E;r0Cf}mMSyF#G6+I8 zRrE?(-GzvF==7^9Tv6hI3C%hP$1J&>YJBeOP3&U1Z`>GSFnnW+$TxEyOogt3wKxui ztK68+{|xux9Nv@d45#?=$1aXd*H%@BDp4x}Q&i8bM zQT*_H8xRLmW8k=c!E{40D(rTXsKU7uO{v5;V6M~Kpj#0l{qJV0Q?hfz)7$B-H<%s9 z1Wx<3duVasGFO(bu|l!5!GeC-nS9Atxob9}ul~AN9%7j5ZH6O1|8+5_iXL?O4BVk9 z;rZq(i_zv*?lyVX(#}nhd}pm0Ba(p3U$up;J?G0@h>W*4CWmKbu^mcczkg14j&f<2 z6tcaLePES;_}g9Nb>3#u>BZK2Q9F-(Xd$E=621rzF296t?=EzK&sCWGb@ysMT}!7) ziXo){IVjPDS=oBOHc@|nEAi?5S|8mWkx-`HsM{n~^KYn`KnuSi(=O=|c4d(imi}?W zdq{=58{)&BUEBsKZ&>AZ!*qu4Hphh(F6kJ&pUeHXNPEx6isUU?JN@c-(SM89WkW#8 zPEAVkYbU4!ZpIJXPGE+8;kt|GTZR=H%)aaD5iMZjoG*bW-B*YIplDd$sv`?=#3Q_B=kVg)o0HEJiJx&tEb*@Y?IZg*lzumGne%IfOpg`B(D zEdkOx=IvmQdaEo+%$K*8=N3`{m3nmx5nr6Ax~TEoJ=K@$`eb8&Fus^89tn$lwopDZ zKFQVV-w_4W+@05qzQ0RL?}~nyGu&t9Lm%pauZjw-^$4^2I{61Nf%>^lIV1s)7W%mm za!I_D41af2ay*odL)1Om1o72C4QF^ zPVCXzB{HExKZ`qeIO>n`zLvwmziT#ZRzH+bPx>YSz{>hHnMeRk_7_jM|8862RPr(y;jjO+R2wE zgtZluTDtQ9&`f3S-ALWJA5f949l(;yzxC#eAC`aSPlWoofaRdFl8D2y);oJ0tlFoj z94+r}fh_tU!{oiHnXY}EgDfAw|D-*bD`E z68^qKKQ77pU>ro#?a1Xzd|WgDOXNseZjU$~ z9Fq^~9D9{FfoQDzh&FQMT%IzRfGv1-2hEpex>d2m>7h9O)Nb!+@DlGuwIx<0yaA=A z@E8@(Vg)Z77%Oz2Bz6@x3C*xdXa*o%pcyKyZIJwK91N}4Sctx&QZoDCHTYh%Afh^9 z9&M{0fh0y^JOVS3b!)Hnk!lWZ5g(BG1C$HOuS4!5&1mR9ro{>cxwel(Oyl?k$b|Cm zudEPCWY84f84%>xT=}bnv_A_Nj|lJ!N=0!Ed9A?N$}#^1iNUt+8bjG(H22^<2t4ci z*cw*1pe+S`CNzESA!!>u;{#W`m=n=9TKF!9AQo7e90B!LvzBoMXpIW%Q)wqL9xwz* zYO(ggDGI%4C_Ms#5;^6_`7-8EObsP08zW zkOl!h8!=*(+jQL5kUL%C&;l(iF> zs!GvvHTsBZNTx`4Sb|k#3U?j&a6?Ipc&v{n#EKbDS>tsP;>pwOvX8ZK#|GO{=|{Cw zEwv%DcheCSQh!olEM`U*TZ}^KN@h3W4yooaGk^IXoTCko#%73yuH4oeta0A=0qRuU z4tUKjo$6FiV&C;)2^E@8S=&=no?k1ViaYwFa<$jbDtTIa!gH*#eY!?{IPHqN48dS)MoudpYL|k)* zKR?#Ow)lmGc_G1B(pd+~X>zPRg@2_>kqy>%haFVjGn29glZ{t2Rg~&unolA%uaNEzZ8eXqCxK2glP3%JqrkHptv-f=8po1R10Fpl#dm z@mW9BAeVglbyE?A-NRa}a(P(`4>GrEf0-n8aS}f@AKbRR{tlkKu@dRMH#JSSRGFxV zgTd>IWpJ|ENw(gGMf_2^QsWM`I@>D~*s<@VMb_7_NODfWs!Qu}6N}cN#evXeM_S7B zfETe%Z4J9;%{D4uBQDm!QK~(t{<9@CSdPyZv*l*HdThwMio#)8URlVNQ%OO!je&Eb zxzbgRbmXk?-nEM*;M)^FjY zmQG5mfY=3*ROW@qQ>436)$!CV?O!AUF9`KAeojX#pQUmdkSu+cYV~>GecsFEz%}xn zb*GsI_F-%{weKP&wJ0>z$W3%W){;1HG`+4|OvK#;X;mY)Kjp}zp(p*MqG_pT)jc|K zu1FcJa%qzJmCU>Xrm5};GhZWvUMa^KRiBekw~#q*&soYVI>{;j$V|++4s-rwKFXCc z7Bo(o3Kbyxwf4j1^yYt&NQyG)oO0THKYf8|fBTJlJ=#k4W&&dWPD-(y;v00?;>e5ME=)$>B zf?0@ng2ovlacGVlh!l(TU2#yFi#SfsXM&Z=z$6G(g(aKGX_u*WGBx0dXNDZ*yr}L$ zS^KVLOx?b$@PZTE+Wurb)G6kBRFY70D3SX#r+eIiUMQYZw88#me(l$wF^HJ+ycQD` zG6X4lLA&>VHUz;11)Jdhp%MP2FTzfWTMkc|A?94REXCLFP&`dMxu6x_d$Kq23w-U8 zS!XY4GlVS(*>CNmk+AgZIvR8aQJjMC)iS~)Nqjp(&ZqH$U-cbyt@$rRU0Rz`gf}>j z@Q!k_s<&XoiNA4%IFbHPs!{7GC)2QXoFT@}^p`)~MAmiKEZEBv5N?-IN#)D%^EGYA zQW?xami;Hg5j4F4ZEJZM9>bn7z@Q_nixeDd?_rbR;Aw&u3L~L~tdhHl;(*p0hiRMx zzFVgwjM$loydvc0!XiqaL9A)RQ@^PC7~n(U0E8scaesm>l%+PLN1~!*ROBc@vt4tysB#VMh@^dwhzR z+c%R>C{8!%x{0C(dAIL_aqOP&&!pzp$!?Z$U}g-MZ`M5_PB{?rMT=tRdc5I3#75HT z!@jL>kNxTXbvS@{hec%@o0Ak{lD<3nF$ZPYfph3rb`MUF-a0{9vfr+yHxw`YZ_Slf0k++{moBk<+_$(h(KiI zN(oV;4cnY8#nb=L9*D5Vhh=-q;#!HD-_&~O*_3y^sSQPqBV`>CM(1@y#Hj~25;gKS z#GZZCbz~{7XITw0L%j34_F~;zT35(-9(0w4$XC5ewEo20&foBsb~#)|Mc6O4)N1ic zx?WbRb&OlJ?3OIFvkT`IExSqBBHXRTiCQgF#4pWG5Vd<-#025)*1`>I|J_k){kx#F zPK%-`i5>m+_q0MiH_!ev1jh0gyszzu@b2sgX&}Y3+BS~k|BnLsDt#gc$ckiY`JKJb zX`B$}Z}>>d4o3xX7SOq<4mUw}$&eyaa?aDDmC5Z1!wave#N-Oqlqse57aoEmuw~-a zttyx^?*&eKC40^s3)>*&=ag60oW@m9Gv=q+vg#Are2t$Wzb5G^&S+JDXppQLiE5HU zboo|^YErh;SWxrb!2+ePVkseo`Qpr{@p0aIEy62p*)J^iP`VItd}B4bGfTZzfTbe| zh69`uTD_L0vgI!K7`#U~JOcF^8?Us5c1jdfjRV3L`)H21WK%?>Gz!ZWx&@FIIhC+> zWt)u9=jr(H3Z^9dN~;xos?LCuE5~Xn%}k*iR6S)I*e4pkVu7f_%GlcZ%=K|zX_D`_ z6>Y4we}7)Qe>UUr=uGquuW^1k&+^p;;t)QzaM`0FjH!@d2@R6V>`UU%=nPR+Ux@}_ zuDCdmZng!lm2$eI1UlDv4n=;pVFhG_bPGOm4n?J#LSQAkBXocK4Vl}CaDr-l&ea(S?{ZG#tCgcm?Q=90vqSwBO9Uy>N z;^Hf8JfvvEcjs^2XPT>-9E?OAR#y8TxmsVRom znIDVSbW0m(@SKCQG5ARiw)wJnyFsdIFGlc6=^d(ebZe7-Mw_6TqB_!sykiVl9m5se zl3UUZ5#A_Uk|?;~iV<&Lq@dH64ry`IP_qc!u??={m6RCqny!MapnY?bw+y~Q`-VBM z^c6ND<;0wC3N{tgSEP;Vi-twogKkQ})=ImXS#ErB5PH=1V)RcaP;!m^L&u|4*PSD9 z(rl%cm5PdrukN9BF~bbH+k-la%%54XfkO~R+Xg~R)b571IDH(Gs%<~h{nl^uL$+4F zwInFae?wO^5j$$6Cfzkh@{l)ia^A}KULK5s#c^8jf^iTy*}3tZgmd&jcCz2`oUh!- zAK%ge?MXlar+U-haqppYInhWrIY&AnlrFK}B@KY}#HqJ8%JZ$SNN87-88INcZy#~7 zZ!3;FH{7Z5IbL_+l4jJ`Uylv&AbjDALx_;;w+1SEY@ z1Y&9D&d^O%&SfJdeK}DSw{wpX_V&m+Hp?EfzP&O+H$$9i=k5(*&!5Sy1?wt)~y$%^3i$;TY}s@wVEfTu&R$yDw^J1{S^5l~lK~IVD$$U{PpWxd= zIuDRf){Ff-fz#mYO|Ky-ln(*u;5$HF9uSkWAVM0u@)3Sf)W+Fflx!aq%ywLy{cJg3 zfA?q($PBkZcS@v7eRx?0nLifp)5Yz*zcnZDVurgiTGalA0@-PCJO9S_Nxn|{7Th|Z zv|VsZSB#(iLEw5?7E{vrG{W*gmODq-)^Kdp)^CD=@gmQVz)_L?A==cc+c{KLbZ7bI zT%HX(B5xPv^~Y;pAGZZr5c_3P8K?qdUw4KcMfsq63$ zfK9ic`PFk;G*9lHER5MS;liecQj9|b!T=!z_q?KbIaGsTl1SHK8Fm!|5PiRQ1i z?;-yP#bGMN(An~R%+WOsh*eK2Fzs}_!^nuD;q(755n-vaU1P*{Xf;M!%&)LnFq+)UIUGLx?cp$*Z>wvgIG7fJxpI^ z6rW|UX(isN+}%tcEmOwYbV3CnrXG6~b>fjmDC6w*CRw?jNX(A|wqzh5xO#f2JomoD7qh^%u( znf|<=+=KOzKO4gi2Sn*F?yjj$tb?SD6?1Ewbc6OQI%R2TG*uk?#hsX7z*5PH!#0^L zz0>)`m%q5%x2-2MRq1`hm8p(QlA)?f2U(vV77>zYwdfbbB)amk(0)}S*EkWJyxPLj=OYN9lL$`Si7x%;>t)AAy(xfhc>8k}9k|9Is)k?|Wegu5YDh z^RnYexfS@QA`T8tg*z^J6n$C4`^z9JrP*tBj}dIU(sOO5jB>9+#+QWyMNzSeFPxHM zG3i4oV-J6n=cM`%D61k6*F=)f=V2B}A7cK?y~=;?A$~R{g66m>$|O2nUv3qF7Z$*d z%)pUF&i7C-W!IM@w>ik^dbuPY8syFy5Hz#P3kk`IjB4#mSOqHQ8fCM|r_doP#-VX$ zCi&)+7lPf{e+evf*&NadXAlB%)cyt5+jv8Hp?BPjD6!;~bVxmEC|{LS3jOprd%(dP z%5y~h$ng;MI}A`#m*B>Yb9u4zYu3YII|LEvbm%ep%u#+53d~NJR#&auO+Gu%%+n%6 z&^zCEeN5sZd%2ayly2(NRX7&ziW0qSXoWi!@yTkLuWCs*RLussVjsn-IatK&6|B2@ zcwe?4>F>@skM_#QhYx?3*+L9k9+e=pbdVhy&-F)Q#mQE2EUwG4p*PBgKC%{#_kkWA zguNA4&07p>De795QTL7IIcOt}&25&Vg6J8GGAJ^iBEE@*ND_u@gk8FxXBy9N6zU$b z5it3iUTFRWmypNjtx6(jSb88{cS-7#LX+q=i)fy?Um&z zAQHb^Sw133u8Rj)A5wZCmsbGyi2j^g%B6yT;dZ->)QJrMF+2Uvl5%G=-9vueJ>~l% z`M5aj zR9Vf~n=f^O+T6P(U39zu7TDS6?=pB_D$nuW&bD5exQ$#dkxOAP&;P=Xiw}ed@x@DY zinhWCHsPDUhN0S4ZYi|90C95xhqc9|jKawOMKHi9it-kM{R3ZB-lr9hn zgBgc!qbP4{wZy>8)+W(YMMw=+o20M+ZE;^uE@j`P=0kBU6df zgZt3p@~+Xz*kPJL^9SB4H|x(Pi~DNIdqvoB=NWv0>itvsB+xSSBx-*Gg^CaD4e}sp*l>=3)7u>5hL zp5K(8G2U`>pSd?JSRRasIAuZ~@q;h9b1>$R?e#5oq3ys6hUP4{3FBSmYXuTCTSzwA ztz?mC(6;jor=gFG-%#2`D zt<(8b)hyNgTJP4-hsbACQXV+0BlzV1wT}PXQuUSw^*#T~ zOBl6x_G}K0km_6&FUq+WLe)8FDBNXpPl2vc9NOOkC&dzmb-B4G4WpH;#jR3AW(y2h zPN-l~-ucL>eC=<7WrF)DZ(jgAr{M|YI{ zWX6()Lcfa1hFN@%cXfn#s1r(J-;D@y9{6K+OTOOTLYzF>Aw{@9rr!GB@lVl7zfyL~ z#pa?{O*&D=zo6m6FD10p?G_0!vr_acTL`Vdova%x_K#7YaOgvR0GbRSWr}{}3 zTiSSfCzQs?AX_tn&-iN)Z@2M$7WrhntmafqyTsPN<7DUWp}_FVqkjI37oVniZonvV zNL$ZbsJ1pmARwe$4WP51w+o#$(Lj2ycJ z^x~K({(-m{4NpPZI*o2vJsAYGptA=~>g$D!`wyuoqX)M$!MduPi(=3wYJ;&~uJ7!D z<~EHW^floRuCRvc-Q#iP{UaqBDu#fb_+TC4@1GGg&*=LX*3)2P*PD2->tl@Q8t0@>ycq zQ0z%SX3|Tr_wED?sWUuhU=3-2&w)c4-*!I8v8bg9YEpNl8LH)CsNc;$_f69M75eyR zcunpFc+|Khs8t;+CB@v`ljNOFyBaQ~nshtGsVS_LDj5On!fkD7&pbeCT6UHRiLt8G z`P5pIsO&Vt1pY$hZFssbZPL*-i@r>!Yd$VOQ61|{(qYFT>zd!gV-W|Rxea7uPdeN5 z0e@`2w5QhV`!;oAS{q2-Oiz+-uxhAW9*mjr{X&xxgV$$jK%dxdL8oy168&y@IMxJf zs+yGc(k*mN!U`l+eSu(|c>NaAZyg;W3_pSdv`RLz$!Uskp1w ztfqWdaXn(Qe74AibW{O4a&~9Oi%+sVgGI$d6QJI2r9MlarYy>qkjm!7)xfQRcA;pPC z?w`}YsYLE9bbU^Ft1@2$s;LrFivzRGVc7m@|SHbD`9p{(2&DBx8Gnod>-b||O$LWk(@o)8)z!hgZlPz&S4D8WND!O4%9X-xbyasC6YqG}SwKHWP^s~c zn~;-#J(&+*&AW}iPeF<<6Y3jDu+)1<9Yj|xi{+J$X9t3Hk$BUzVmT%wCH`eFt(srn zJ}L4sPK$quEQteCORHuLU6;F(j0OGpB5g23KKsM*p|u#0w=)j$m1TocAf%2$X*CS? zO{2}r~xf#&fC;`FXS>t6*3A? z5alK7Q$3+-Rw%EELPl%$4(645hwT;Kp%8iMmPN}vAJQ~c8lR%Ms^;oJz2m$?`GSK- z8DrJ=swtWr@`Hu!S}J%@?lEU*Y833|-L+3Mk8%(2C+#!l$Aw)yE0KMZ_AJk8hI*ET zzWxuUTBDtosqqc=VG8-2!e|96bUD7IK?!%wzf(+SBlw;x1@8hC@hW!ul+z zM_cf^R9-uW(~)Y=RP$f$-euKI^S`Q=DU&a2GCju}ytWF`mUWC%t(qbZof?m(Uhea0 z&ofixJ|7C4cN0>P>Pzg&YK3Q>MQx#0xH>V^3RfWUstno4aQd&NHAk;?1pT7cb$tZ` zsuuFKrQsXl(Sif@A0~vF2Ffd2L)NXlTQ0$XoXr(-h}7WMoRouarL~!I2TYSwqj99i zieyN3xLEbhW@0nj>DgtStk2{lY{iD3~}epVi1>G9Dbz_@>*sEKb0ZF%VQLwN8cx4_r;Hh+{uBKK7bLBr zx+3!@>M$12G?zFlL;G2S*LhZG)KX#E7d5inm7sb?wg>MkOHyOit6mBMYibL4 z)k{Ie*fI-kUv@n`Q}Ry+f3}RCc)~)V2_N8f()@DI2;F-^2Lwh{Kp;RFj6fBV9)i@v zZV4EkUS$rr@qh5UafGJsAmj2r{Dr(julwt@M&264!y(wIre2N@3HV>1bkZt?I z+c*wtkS}d5E}pzO*e9(;!Wm%pYu%jhvnM7QViKuGzOb!0^&)0N$y|{B|AgBW2;aVP0!21gN?18>@nioyQrFa>nX^!TV9`e+Y~Q8 z{5^)Kpts30<~mNaoPo@#p5M2K4IVGKwKpsH0e zwH)mUKuRW@xo!)3XVzUz&(Igwiv8UA0*j{#&N=P5p%X+)(u6Z*!v6JjU8rHO`*y$pxpmU!Q`+Ozy{$ zB=hEQ%GXclPwsP!s5%a-Z^?}Fr_JzKBSl36sGs$7JkjEzk>zlWv#FivuF_S1)f}$( z2aUZo`TRZQtY6g2=l=@&jS9%;FDZbx-*|&3PA6|3#8stbt|ub3X|YL{d-6vYn%6DF zgt?xS)YhSK%nwcbrsTF_y-aSJ{X70GxubYOCO6H3^Z%CIU3@~aI5?L<%83xm=XsJv zlHHRbjvIR6hQaP>Pvg}GI_-!Y`-%N;Z%y>q+dZ3fqGX=O#C&&O-UE5WXW|$A>H~jZ zUhw-QN+E!Ae{Y*kHDqmZ_UnR4|u zRG%D{w&FEIFJo}1LamaO32jlRy#J+no))q-2~oGPJuLovwO3nu?DxqG?6SY7{d=4L zLze&8`iozA8Rq4Guj>DgIn*@F|2~Jht2q=L=6v)R^E_STQ6+7?NBlTklyGE+*gZPW2Bc^_&YATI3+YEe>l9ZcZ*QepU$Gb+f=vrvd&USVIQk zo8Y;UzMarY#P`P`t@hzCv+gIc-%@D8-^-=DJa-`UU46HwtJs_yi|A_vD%0w_k+_)u z!PKeAjZM;@zfoMe+cR2hd$%o$)t@Bi_e@$+vxfP>H!g}6ciiLYFLLji2W^E%0dIf2 zZ_QXHF5Tn7fBI1LXoVgL;QMi)DQ5GsU?Hh#F~3OggLwoj^6au1VS1P91<5{^;T_=8y}Z6Y8d6}5onPT_LkC}nm+jc(=xE$-je&pPqW)u-+Om_Qqi2edwQebV&xGpGp^alKo zImDVWnrM0JCM0y1k@&A_#S7z}#@&LsSX?3vr%^>C`M8_sL`MtU4bTlT9HXWoqTH6( znntY@Yqs#>iWqQdCDE&RF&-K8Yi|*kpG(CBVx_qm}8W&A@K}^nT%^C0*qN3ByqbTIV zakXki?P_t!6*fylQS(${RJgMGq?kg40~-&k?Sln$$W) zZ(k!WX|k=$P|+#}I)Q$7n3`3t368Q2hskbckCLAM*gUa=_vxGn@4*|A^p|fHm)tb$ zMRWi(EN%BXzSYR=eNOD3pJvjn6>G{pLv=n;WE|F21YRp*#X8MDVtr=n+|vg++8PI zS}U>Mg{#MsZJr!&{2J71AI^uq*x1{E2_SptC*tfR!VsJ~*rThCXp&2jb^ei%O8)Jh z9N~B#c;gqZj0ujcchfdp@82daZC4$FHvH#Aro?QohpBmoSmUJ`?%?NIK5iBz%3n(A zAk1H)fG8Z>!5jD!R`EA6| zod!Z{KG4dfuP+m8cJdZWnrJ?vC64t7nWCSuMO@-x5bl*Uq9rQ#k9H%hxlLBT%VX9L zFp6HY;#0sS^|D8VLVn&Z&dyIu(XYiXcE5;Z6_*4V_2dbyQ)1S-n>L6cyFCM9oE?I< zXT-$=k+_FiJBto17tigc9W%O$Kd;d6T2~?tOty>u6|^JsLkumy%wE$%%)N3$OR=Yd zv(GD@BT0un#E(n6V)8R96@*{^Jv>^Z9(nI%STrG?<54g)$`?O^RH?tz2i)aePb-;w zul(@t*V-#;?*ksFWr>`uIz`r;0Foc@p~w~PiELihTMH*Sk&up8EXGA znHtET+a;dcNBui2;$+!4I#$AA%svu!i~c^^WOK16sW#ac_M?nUsu0hSq+irm-0^w} z@U6!j-h|&hTWVRn|Q&vf7oJ(DpqU7u`kV=T2ioqu3)X zr0>M!sZ6NN`N3CO#rj7)pq=r>Sme4fGa_ps<~+p@t+(jr`1Ox^T8E2+`8UKx*g+qN zz}O8kTEwUWp1~5$dBD?GI5#Fo=u$-1zaYBbDK3wXJccJ|yZBcU{^BnemnTTDfHfFj zLR($V9{#vzl=#=-=Do3sTi;y#`I8%U++}wsY&<){W}hj~M(!VEf3hmAE1= zYy!>^dG+wmpe*o;AIGvZeL;_C#tm#E6NTo3$2IhoL{`&tPFlpEct2QYpZt{^8VK*!wJZ%6Gxg8XycZ zW`p-1JtFjFdeQtdM{CHAQtz-fqT=X$0CTUP-l`YwT42$ED%1d4-P|ORa|*>#2M0`pG8@H0O5bvD?&F?6n*AsqqoEL)+V+VWz#XS$adY6M1!+VHA~bT6sP3B z|HIn5fJIsD{of1>Cjl8`fI$%kMMXs&6_tu~@O(fW3l$A@C=Xbuc*xLDNAuJUb%^0! zYG_ziR<^^ku)VQ{w9>M|a+kZP#xgS__gH4yrhGqZ&7eKce%}B4T-W=b>k{w#Ugz`r zeSas+-pT(?`TjdEQh(?jiv$5_6NIHQSRV+lqIXzdllbdXVRm$&uqBt>5){GQ!j zSk5Ktbq?{u(aO%cz2YSQg&%`mEPs2&0eeaULZ5pUZ-5K_2#iYmq!JG7zXZ`OgZjbT zeyb7-F8AXpR!IZc0_Woo;eA94jtI=RC9o$oyafqTGZ;a(y-PMAe2_(|E2Pq1vWJMw zz%B-{`V&O9y1rf6F7VrMF>@niY^{tmMSe++K$K~SQT(-GI#Ovnut@dCzxo z)49X}7YcpOeMr-tYku%5V#DKY54dy4TMO5t{r~ z`!DibPCVToqG7(YZ+B!mmS&F0NE?X$wsRczWd`sx_X%o+JDd=4G?GS47(gRJE|IXk z&<*NG->OK}w-fy@!$PXgIodG~PYxsmcMJ5>WBmdmC^D>Bp|yJ~jZ1;mr%-t_^#nI9R3`l%EoX$u+2FgslkLS1dz@Yb{ za0uvc6|cQl*+&#~e~i`kUZp7p<5S2FEc4Aw{+5cw6O}@@0yWCYA-Z(b^||Ly5i##q zzM*>NGq&6hU?I8V?%})OJnuz9bN`Wn*h>18 zYqRp?+bBZ|E|$P)f5b|PmK0;1?Q~@ZY7`O>R&a6oMmCn(JkHCk0TQl16$DuHRpol& zT_kOA+=!>1?B5oFyS=*8a`)u zE~ld`q_}6zpMx*1!Ky0;S@+YIYeZ@jeO@Y39|Jy?UrNQKrpj5O@e9DJLrn;EAT8Mh zt+oFks8r-Rpdh7zk^Kcv`ySz&g31)eUo5}5&ymn3eaJL_$*W1~urzg)Ld>uBC4)e) zM#~J4p=DpTR@dix@z8J@_;zxbCT*gsoC>;51<8_`6d%|Q3+s76o|1pD9h4k`w5XPu z)JnWewYhd-EF@XyFtlO(kUK(E^(crntp_qMJBYTU3iv;Dz1tT>)u;K4go|zr!hatu z$=AvKy7K>Diux}rlj^MBR36p&BnXuG*`#mj7sWR*_n8i!dbTpMuH@UwBAux2kp{~3 z-t8b*p9ixxb_e@ADqVV8%J`0sYKa4LR$aDvEzK^F-!kImw^aH)Y4F{2#S8$*7R4Zy zty2u$mUESvx;dincdR>G6XU0Jm{c0acZfh#hml%wB=ajIvi6}^8LV7k+-C z1tqW4_p$9@xdQ=W``;xt_c3?P+7OpTco4i7=R;hj7?vmub*&Ls4?l|0{ty@UwGX)E zIRi7KN0vYu1(0jbS-LwUFMl|nyG=8*w*DYIYH##JipVJ=Lvw{aDVnu`8>i{M*y z_hI;LpUaqeBV1Wx`|&lXWBjC+O$!LcXSN zjU}VDWTbRm_O&JRlxL%Z#kY~JXmPo%D?`|)a`km?UdZH&rZSd6;_hfF*7uA+ zT5T3^q~`Q{)OTp!d)=pt+Yeuz-f46J?j(l(w&}5dr4H31DeT(a11^)tELJ z`0b2AwmgoiNsS?uSL1O^1{UpL4Cyh{pyMg2_Pt3V;^}s-PQsDR238*LGHNTiEf*Q6 z=0RdWKb?tp4MBp8?zZ;Jqt9by;sg>K3^RzCK-288E_OK;DziQ)LzSw^c^P_i6B?&p zmCPi|lu9ct`Nb^ZBWaXrq9xKgtxvDT+F_wdH(H#DrT%B1r+tS+!?%cmKJ||_$Ws3r zWzxMYQo&5co;caXiDYQ`;vqj^-FSd~*D$SHoGhw!Q-6=c{c1i|3Q*M)x`fCcPt125ApweQ9SZF%3b~@{TTJcu|gT z0b9kh9oY~Z{~pJ!-*lRBo<5m zD7QZ?u#i4uqFEd>yO6khn8|aVM1hCKiB73x?s$O};DhMe<%7HCiYNHYx;&HW8WQ8o z^=0ihH^auXxQ1R$Th|HDJk^yh9A2h{XWW!9w8Wn6RaeucBxa1zW zVD6HqoIckWQ#9UJtL=W!fCisNjC?PL!Qh1O+K#@^bn$GOO9E%Nh=y((GekpHyZ+b? zSole_L0kzm@qaXP1hHk$jv6EI>t;r)Zfh5|&)Yd}emV9L7&n6BBYg494 zlj86mSExR!T>yGe{+}HQ>tGZK!qUTZ$Hm&tu?fK?1jPv5`w>VN^*p=P0r2%bpQ zJ%KBWd}^}X%b}UD0iBpx$N@R8Y+@1gwovu}D%#YYJGy-n)oYwz%pgcls?yP?DEl3e zg_3sa8mA{&=bT7w#4>Kq=_sgHr^iN#T^X+S;-OtwZi;?eM2On&8TxlJT+eIM5y(&3 z%AvTfmn&5a+pQ&v=X$yRDFxLrfc6+BQBV*FLl~*=U-5Hoi5hDa=27fgmOp~&K4}Wg z5I6w~Vt)H#r$ynOI4quHu*7E#?ew=&zi{|`WcLH{>r^Vv$neIV9Eavij-q47+MBh} z=*ub>OO8**a>!*6Xp<`G&fQ2frw=CwrJ=44m$McZ);w-Q8Nt1pTaXI1CgO!-&ideJ zQS>B3;aLDuV!g6DT^m7ftk3BcCwAQ*9x6<|m*M#O8mVkYU=%i%=A--@7!P|^T60^U zg`!SzKc{(1`tb2M+Q1*C%(EAbrl&Ct?Fm-q>A^%sM1@mtv`sxG_h3IBi?J*fGIm z2*T<&W{&$AMfs`a;bOqhq0u5^W+qd4=+HKu0-k&0NXj7=l5g(`@ntIaolO2oI333% zosHsP?gH%53~(I=Vrw(dHL6!z>$O7u*{OXYHpfwZF|O4Gys{35rA7Rk6%h6V!XtTA z@w~^2)dO7}qIjH4!_91RMe%h{4|M%a7ibO&17EG zR(yHKNO;acnZ;O2 z_lH(Rh5C#K;Q!*ce%%aVX2%_yad4#z4(Mlw!yydYCv)rBlpj`SztuGZMGkou1mek5 z_naK~Alko|?h&=T>uXmCPl*dyya(=zV`I*<38eWoP7jJKIa%W^4ijVe$^H2=9UxHLII6xPXlt+lY$%w=3RJ^1H$IGxvM z-oee-K{$pTgmtK*I{wuA9=^%mmKF1aKHff>`4dZnD|KSvOGtby=(!tPyB%(U3A7_Q zvTpV5uAf3gjO&z#KQ7r?M3=$v#?ztPq^l< z=5Z~{ zWQ##b&iz?rRy%tDs+Ib#Qh6@~`zg=I$7{c%jaC#n%cyG<6^|lkP;xjtMC^>5)lT=W zI8)Fz0a9Sk?Sm=pXFW#k$B?tNd>+KfqcHvr6Q)unzG;uPr@r~JDxYKfe(u!m)K}(w z>OdBB)MWsb+3&*ma%@Av@Ul$mNgqb&oB`;vt-+Rl$oPEH{>Em0@DLkZ&2MO+oqClg zcRo#fby62h-G3KEVI|lgu?(h>=lB+QD|Wl@gqgE@QxbfT!Gn#M+DWaX6*WJTfvXVG zW`<}eY)i9VV7EVYM;G`-lfXWPzee6@&{OiAqdH`|LI8)lS^=-Odl}dMzF*G z^rpxmIJhq-wC`TErh=gf4Crzr=5YTEyiI-gyJ8~Le{l~m5dLQk$JUB3QSooNkx%RQ zcU1h;8{eD!Po=7coyE`R;$tw&qZ?1PuFJS0=N?QB*-mdq!*>cw01IfTPF#A_6bq-R zP)3tlnSrA3(ZX2JfC|1Oek|T9~e(ZqfwT13}{KCq21K{EPdgqRyNzL*H7bq0eR+Z-+X4 zY9;eZiXIu_0XH3aqhPq0`eXZeXK#$|{fG)5HXqOvIQ0ObBci#le9iPQT*L8sqnN|> zsG(0egc@?N_vy|I=Klqo{m1r4FO|aNn zZjXoYSJ-ECLg1)iadBB*JktIRce)aEXGPziun_9KpXw`yPK~@V8>;wYKQsV$3vVtU zv)N#P#SQ#X+5**Ip~_^r+l9@JXW?`xCQMDpHW2Iw;bchxSD~Uru2?U@Qz9#kk>WrQ z(3;7JiP!%w@%a6`s(2+c0TPr;0vTDG1`3fB4+vTC*%UU-aWcV5Kz5bM3C(O0_2UL3 zSS0Jybbx!c%C7N#fYXxK>9w-iT`1=ZB);7LfC{euTdDuT+^kQf#N5&}R8AN2=dHO^ zZx*+Bdn5AihPSxLDTYh&6xV29_KJt13R0>FWkn30dnh|{{p1k9&wur#2BFl{-Vu{V zC8G#P`mTt9pX$o>WngJRw9Flg!%WZP_t8PuhA>=Dz*(@mvp74XnpgGPa2A@vfW~KA5*aRgxCv)8VS7_JS3p$fx4v?YKHS^MF--DqK3cRM}it{c4}) z$`fTTlf6<_DRIt3kmcQC_8DpFu~_!A;&7>6f3Fyb_$|(|YWe;AQ0k+SN)0ZpVkXqf zd1~UBOvfn#MfHl}u2{~~4F#PbH!>E{^FDQ|Pv{2oBa*&YN~x+k?&EZ@O@7P0iz1Fq zha_(NY7z(M{akk)GN4QbD7%!ll`}0OSGFfZS~67`C}xN+?NRtZYGzSA>MfaYD(z-z zRIPT|%rv1mAq6ISR4RCA(!YTcH&=N!IkDuX@*MqmaAfdYR(m#Q7%SUaz+7~k0aTDK zwfrHAb5KkuJ^?yy?m^Er-$OIaUn8g}jS7kC0!G3&VXtt3P;<5AE`6AGwks#u9Sly! zdt>O$|Cp9+4pZsQ-JhrW6(()@ytYmNruhu!p_~QUKW=BTNS2=?r9U%u_9z-Nm3xG0 zOzphw{>HG7@=!xgW|)h%BX;@Lm`H7woC8urOQ{O(kEKIAZ!q^9vs{_N({~P&^6#bo zDdwF;`7MPLBaJ=d?sTJnye#cyLR&7`6Smmjlq-xk5lWBKB zP(LbamtzY5RCQ*uSiA$xn)| zjr-5a>i>mr`$r>EQy{;2HuQwLevYePt_&!DFqqJJ)T8BJzzAjPTdSiqv41&jMVF9$ z)C5tzUxsGvWwtiSfSPq|uqEedO_L0$|D9GxK0tu;u{q3;?sR43BQoGLy&dsWK-#rCR}DU$TP$XK$yPN)?9VPLsE++_@S zLJ_&Yj-?qg052W%vy;`)B9kcx9bUy~n@=sOvtVt8ouh9Y^O=vs58Ua)7V5s5@7f+L zEW5PMV%;K_RbmRg>%Ls%+M^SeAMeCs!P+iyVg7Ub-(u3DR19?A(V1;zQyjb@#J061 zP|l5|SwJ6l=O!38{b=9$8+oqT7zTbv}4NNU3& zXS);j?bVNQi0plOC$c|nxCMUr3_Om1ruD*=#(8!yLvL_~T4~pH^ruL6*?0}KbQbTP zpV?I$y{mwE{PAsmfT3{(CJDj{3P3|1!AD^J_awK*v!hs6b^}|JM*hspB`y)akR70$ zD5qrcFf(h-WX_27oV+kbrsd-QE;FV%Q(p_@R>}D7#FV#YwI5KC}a3BNiFlEPF^PDUZJxB zMHQNE?U`Q=F0Zv(q4(7UCh$ z$+z&)8NN(Ti<2^*_d5zJxuZ*n`0Yq)8?6k@dC&3*2;=t>(^u1IZ{*rUai*aHvvPOM zG6mXtiO=Ncu;({Wwsik`^oL$7k$0qf9_u<|;8oJCAwuKFT#pev1IYVj5i{jfsA9S` zXCZX3#%0v~Lo6;$g)6cid@QX)iW#A%zE`Qr`_2ed8bX(I4m}?XFpXDrDFVFHL7w)* z<>dM1CM=>!zk}um?#_l<_>bPJ1J`3$(hgbKH2`sy?q zl_cu)2$!PLpKvBS<8RraK6}X4M{+pT@8m!>U87&jQ}Phyj~0Ktp3qHnj44eBKkv_i z+FYYH&fRR4#m`MN$OSuSb~oJt(YLZo0;W=w=UVec$l!zh*2f9YUnYc#^=~Gy7qnl* zN}vHdKJ9R6B{~@GSu~rs|uC@1H`0TW@XgP$*y`Kjn^y@Q#}@gnuS%p2pwn< zXO>ROsN1!1*zLctM0$&~WQoO=WDC}KoUwK0gH@w-?c8`dluQ$e4pB9iHAbv_ zrK&y5(W+OfdIknWi#K1X(%QN~@gzca{g0r6B1mJIduKY&r*Y@kK5mHPUSUW*NFbw=+VNeneKKN1wHyd zxV3|CZtN2cKlEdRmQJG0IS3ZMPSXIF;3TfXTfErI{|ebpfR z+1t2P{YVw-BOpW^pG2Cpx)GG}QD382Uoe8?7pg46xhkJCD;{UBwuUZj#Si1LxcDI) zR(nOmkCf|vkR#FC3E|bP@2=~l$pf!$kQ5!?`ajqn;m$ zMDfb+4@8UfgHZ3*T~O)jfJnc98jC}|I$uhYmc<*q6zu$*Euo|Zvt7=83{{cb-Mvq9 za@)TxGX~nain$jl-nwlbdIDc}N2c>#sbIFQ3kTFk@Nt?i(#Nx;eem_>M3%6~!COhX zZ$P{v=O;=qBYYuY!dVzxv+Z4$9_Z*U&i$)O@?BHk+yJW@gQ0=e9%8PSZ-;!}oEzmG zr>8i_H_;eB9zsp-srDmmvH8Dh49O*iq~s$`epuDqY^EUgd*V`+DJVAzxpiBb->-@D z35M11QjNM>ugMHKEG+Ow`SR_oe1sPCYD;!LMeJ?l;k)OIKE zie)Gamg@Ttx`mA}W~2q99KBOU#0%HQ%MC`!Z*>RF`osZ`BOt(f&C376b0jiJ=qGA< zfylc}pQv>WcZ1?T03#>)2E!l%r1s&7+GBxkgrKKu?E}y2#q{Y~Z=Iv=VVm}t4k4B< zcWC#C(OZ&|>gw;%8g)n+Z^_d-Z~{D=r*+mnp`4%8UCPr2>2!H&iwjtau%3$ zt{U;e6s=oa1EA&kAnUdB(E$?IH(n+wA}Uj~{=zg><8m`qGX_2Ey)M>#F)~$@PSwyU zxqcl!>`TEYa8A`u>+1B=wafazni%ohOs&Ikcm@w%2zYkI*ScpPkY+(C%Dyt-wPo!C zuDyzN&SQbr*I=1v9v>P|aUm$I$E?(V#a38WJ%V!%J$L>3fYIQc<8E|htZshYv{{-Z zNK{4aK(+O{2nn?+PPtVSe(k>IuJC)OIH69O{=#p{1q+lSNZ>W8U6Y&#+(wf1<=6q)0ME~pUh2Aj%ywI96G z?RO^m{Afvcx`@qBIye`MTzbLH>xkr&@~=B`1`Gwy_b~RBUof|0VmF*OCotnv$KWjn zuoWc#Jf`GoD&~ODZ%l;cQ1KwV3g;YB^+vGglfU*yWUa1b&FV*#!v#znkMlwtp#(5|wyl86eQTV7%J z`{nK7^8u{9@hTs{(i^Yx0W6*IV#=iOFJ>l#Ax=s$>>0NtHdGR)fdR4NhXq>q;5G`! zK3Tmow#N|`T3~>GcO%YhU#|vaO7QznY=Vw(supV5;*Vh^UeWtNf4jK2`u zMqwwl(;jCREe~4?j{N*APQPOuGBr|9 z?+nrRZWj>lPaF`i&p%T?q)Xcc#N7BUt#isBaw#+0PmLG)@LM?MCXEXV_7H*xqlH>* z@G~-zxb)2i>}CADE8VdZVAk*vP`$aS8$EUrT-tWOmKMInde4r00$kZ{EgTY*ug3pRVHoes*%odL=UFbJ$a~3UFyVX%(_t+kO_v%Erl% zD{bgSl~!pnoajl~q|cXgquN^msor%QH?sSK!E9u}38`h_eg`WsCvNNJFVZj<*)PKb zNIt1@m937ZxVstA=&h03w;HvO()cRl`t95tRZh+Fsd_rMNhLd9AicFZmI8W~6oJ(> zO3XjwUC8?4$Bi&FMsn<{Ix6Ez-XSCOx)I{iNMz4dnPt)yui2`;rb@~7+>%isniAP9 zw~k0BZr^+?RwVUeUyzmDy#8J2vg}+Qq+$06)62mssgRc z#sJXmWn=XCf^?^hDWdozZf-SCAm6UiOXEPnl6^J8Cp)iFHZCTm_h)=n`a+ZdeQs?u z5PJ;UY4f>VFm{&EncJ-+7_faQtyvscg7|$)Uj_li04BadV?|LR zat$q;wHtN70KAWo$nY=+vLA$2HNV~2pG9-Okk*JN&DiKssU6b?GnGaHjQiRk$g(v+3W<x~)X#;L9LhJS7tMZ-~W z?-Pc*>15ay{%n;&s^aQ-xGQ$xu2=!uY6NQzuc4H&>OS(ir9VOwF$*Nnw_xqGd^mn5?<=z6gI47LUa^%`y3L z{E;!OA1^%zkJj=}rWJnD{8Lm}urz$lsH;jRrQFxrxs!f_zoI6X*Ey7deW&w{{*fVy z*gY`_8M%_D&;V>cyND&RI)!ZiP91aCLba+KBP*dStSh(&6b+*~Q4L1ScvQ0v_sg~@ zjR{*Wo7eeKvISx~0tf$QZJI{&`o0B|0p?vqE^A)_6Q(0`dh_3)w3T7Y6Ni|CWq&X^ z4EumBRcYlTceK|3zy&6ls(<~>k2!sCDwFXNt#4VvkhT1qKlZzsb0xpCS=yhEfH41m z+YWQZq!g?y{kQEfSFDv^)fQ*vq^K%qTPQE1gruG9RZSLoQNp>n8kk(1Lt{ZmW#Rk| zY|;jE&mW@uBN7GO&q2F3 z{S>u$ClxxM@HX_=SU8u8>_S}b>WUlxr|0YX|QM7Nf304+h$^3LKk zADcKBM%!Za7%Ro(cGgDhG zO!Uvs?4cv%GR=9Qin<);MxfTJ;YrCm4#zFH+-drVJu-Rq;|zrJ+pZ*c_wn!es#bVO z3?jHw#7;YcW0MA zTgsZ3mx7YR_b~n5hPT$37Xwq_t=q!19^)hqeDZT*tGUeNFz`W{CR5W$ZM|w9TXC`_ z+_&8a%WWl`J2N(9gt_~;bSZN469Zh(eOwaH2i{)H3EPg^8pcoNo?=HTK%G)ePK*Z1 zL71T&a{0=$_oKrbbMbNR3ppu$dKo@vXH!=%_X0Kw$NgQHD(P_fl}SyN8604`L*Ct# z?Jx67Kx#fQhzJur%>P`lcq_!!;{UW@my5MK=L`~R6wBq7r<~l>zPL3>*oHBstF0r@ z*}vG+SNY|lZxl1ZAw!A_B`!EqCf{Ulnt*K= zv-IG3hYg+{H|ybY!VIW}8q(Y1M#Qo<|AR7V!{+F^7{xEzSSq z65l8$z0Hm8e^}xh#abDn2HM-OgKL5b+C}O@`i89LJZsOe-@o>VeX^gw3)Ov3YUirz zZNz*jAqA5lMzVKRBLXJ5>Ho`Hg%ZM0*`RbSeVECa@US?uiJ4IHbvKyI&od||dU8|a z+M=gh_H-GSz<(88KugWB+_DY(S%Kc-RqQ(5+1zGN=jzhZ+jb+@e|8^cnAZ+eu; zON5f)Nb14l*=!-EO>T%+%b8HQ)7U9(Pi-T|pjf6LW-(Q5P>+#TF=fSgOjybUmztU7 zyMU|RaM)GIn<6y?C-ySZo8mxsRz%H382Qdu*07PtVsC7iABr0rrtU+bT&$PvoriZw z8B6Mus!W=Y9mLgIlURF}p0Gwzt754cTJR#VylLE`YQo$5iaswUy%z2(8dD38%bQRd zk!rV$WWmpJa>nGJ(|U2hQyLp0 zqw96zgP-lm!n&25la%-NA(qIFGDu3M$zQ4ee`$D8eHSqa9IL7X&&T~}#9u>As_ZTz z^;EyuC>g1XKT(ZnNMlefk8v)jn%I6Z%T0YxCo8^HpN;f2_p&&7gjmXGa&;VnS=>bR zKzAqW{reyCmc1NL#Y>admPWR=nh&^XTV8cCNgsum=zQFeE*hWYPU-kA${<=^WZRVf+eJ+y zT3wbstVZRSXokE$GJkdxX$uoP#q3M|J#=9B)&Wgn~VN=}*MqUsKB*B%Lk51?-&W{ub# z3~s9hi}#wfZsNKj)Aw5U;$vD`p!j{4_O@7aax~uV`mGo)yx;dL5vv*oh9d46f)15m zn+Xzh4y*}tE@G;l$H7o=WeN~-0z#(wykzSxfqUBW4*tnaB4$Mvb6^d^T#dWa(?!Xe zA&KI()goGKUy)_f&L=}Id+9f&GG>*p-mR0v0&DRCICVs_D4+i*EZjF9jS;;rM~8}o zzjZSxuUKXQG21x*QDYmsU#=4Pt8G3hoR<(}u)T_GKqF7#SN(k5(IVzSD&mlO3`+I$ z{CU_5ZeGK!eynJpsE|=keL9-!$YBY$m^skEm) z`i9d$kF7J{i#JQMVk%ZqA=^O?7tg*zR?*fxw6q#Fq*Dj33}sRCp_v0YvWB}e;d1;T z7uuS|#u$&Ew|UHu$Dj=ng5)9?KNX({t2R%1r}8c=PBh2`%g^NdFMt|nVtvRv8em3w zV4pp%jafT6iq75;WsGtAqlfvIIBXIb-T5dIA8$ymigJ6^$ZPnqTYXvD#Gcwwbo@&I z6Uv6#dbzEPccRlLf@+1Xh`p0lPzdiOC=Ai?#hm`MQC` zE*r3kIe+#Z8kRXVRU96$DIvz|S0=RkQqZ!sGOG7@JK33BX9}^L9}i&eP73$i zU#osjGsSpE_~P7*TKG{AwDB}-VhF^? z*M!Nv;)Ugd&M{)r>5zn=-x6RP#q9Dkj!N$09=V;E*potQubb{)BIci=34yQvS$WSk z5wyVdNl2Xd@oKkFar9#*jqQHqsM|igrd?qEDDm$4tggC^qGEAKLYq=Qn=-78c)io8 z6x3@54H75cUEV7w6aLMlrv|`)8r?rucWc!(F+`ktK`Sv|4GMnl=O8_L7D4D)1me?C z*W*_|r^5q(M%c^yB(&-Abx>T7Z{S6r6{*u1krRh^nPi6p{WZX{(jN&+7QO4Wh0=xD z?s~0v+rqejys&7r6ruty1;vTa>b0S9Rm2|@957Haq|cBS>0Ong?_r?!nzmxXVeQ^F z`*2Y&S3>sn=?CsgcyUF(OLn3Jz-F@)gI9H1=ZPK(P~3P*1QddI$N&L>5^wJxqIHMdzLMkwQ$Y@0ejM_WXtOmjx_cR=7+=*NOzmZMhFa0oOa~3OZ zNR>yaVF4TBH+p^eQUA(;O=TRMfhl-YY~=K2ys$Dnp$ zm^_M5`OR?*eUA9sQ~73?0TV{%?O5^{?41IsD=Jke?p}(ug~sE=ds~JY{;`6R^J9(p z)H#Wo2#l46e5^FM7l8D*rssgZ>6W55B3VJWKBvUVqsXa+4daST?=D2SH2#rC{fZ+Y zQsu>ZJMrEgJeb_qZ$Q<)QVO{mVE}1`gqm;7gGt4=DmNK-okz9JMbl9wN|e|0>rOp+DC=@)G*AV&k5}oOd~FS0d6FU3~hD&#kLb#!fpLzRP{6a|6j?_ z2L^QZzujcFoMV3r3}}Djdy_~lHzy>n_kSqh|G*nZa6rI%%vNbBp~?2uhT-L`y@qVsXKK6pCXBK~^FF?8y1@+kIN)_@4bDfD4Gcyt7Z^NzY{Z&LeE0+(tIZ|yw+gO?3M&z-*rQIx;`F8 z)iW@lESgcWhDPYMok>QmABnuVy>T106f$}TBku0NO~g8}19SSjLSo)vg5Bhmm3*Wj z5Yey5q%9o?59mH*!OV|x&vAdqyz^;SNOM_M*L~dAuNd@gWB$a_!;sJGGnOR_+Y@-s zt=(jm(jUlMI$T_Rap0-fuAo=s-PQ#WnHSfwzezTmO@qzkejVmo%^Q?xe+BN=O@^KK zA#RPer?fN_A&|bXzJyZv{xP5(3UDv0f>-J&;8N=h-J0ppPdc(XR*|OHd||NPli{hEC*Jatfry z8wZVdA{yGgaWdz%rv%QT?Qe8w?mrj$36ES2msd3lVVNbp3Z|k|3v3<~Gn9TwS=3N} z=!t3h)LSY*pOE0C`B^|;_1ZkOHK6R?E|H>lQ>$3LXDlioHCL!#c6Z3C+8te?NM6M} zvrQMNhkx962jHOjj|ll3Gh>)hY}qw0K^r*(&ehAwAX(M$J0>zSF#$IdDd%aR32qN#KN(zMd9m0i9@u8^;1A^#h90wXBfOy%LwYByagdzUO=a_&alrMwID zmU|Pso#S4>4yY$KkMS5r^mOJwzTz=@LQm?HI$Q;_u=5NC5L{L5zfdXu5#OA$tIC{eXC={=%p z5Ai)#uxS))Lb4-N z7D|BKBUxK=s8@)J`=QTeKHBA}(72#qtpQ(4tK%}8+>luET15FROFJ-h;{Y?2=dIi& ze9PT2lNFFaH?%y#5>|y|kLw<$S($mKO94iY^%+P4*{jO@lSKxENyOA7*$o-hqrhf5 z)1joNx27QJW$4k_U)?|X?~++%^#DU4EBG2a5mGIYj=fY?=Osf&WmUZy8T>NI39+1F z=$*RkG*J@ofTWg6EH%0^X#-;`OHCA)1npOr^lILr>ucpqH+0xeUD4YjJZClF zu!Iu)^F2o5qQytZUh0Hs4^k;>`=xY4c~1o4e={Td4V$mZ4G*yPp9`5FcaLJybd!7P z3|5-jNRq0!xT#H}{5`hng2X@V7j{wJiCL#0)W~y)=azY*n8gEQBejp_uuxuN!g{k| zYt^0sNm3Q}PAp}7q=s18H8cD1FB5rkc4Q-ZkFK!Y!~WpB)&tqx(_E(=4`}2v9fZ#F z1GlrtUw1``htKLGL~|46D0eT0Jo58+h?o0TXq33U8~!$03YgfnU4TIxOM!UCh)KU8 z*pfYEFdV(bnD)#l;TTfTl3IG|Nnukr;U@QEENbN%Mio^SWTkP#nM>8j0i$lN1NEwA zzj{($RMJ}_*cJW`2f;7|ZXcq#(`F?267C;9g47eJ989w=~`7X+Kq&cXCd}?y{;!iX7Ei9jdt(0UY>a`OqnYl~0gMN<$KFcm0 z5UGu2RBbC%-K5qFtu8qNJ?dU-_f2H>`2LBp z%K^h^Q*08LQ+0j`$NY)Yi;F?2rcg>fcXhaGK;+wSsl*sNu{pyhO5$GBPdua10B? z!1yIKbGX^1)jiugd1<0{1-Ge^LnFhq51<5U?kS}z>p?ip$JthzRf5FuHg!F|*A@qH zznc&&o@&;5iSL>r7l&9xuo!iEJSJHBSh%9Sf{^{LG2!jS<1roCu*$Ya3-c#<-*k`P z7A-t4u0~5~i7<)}EFz-rj~}&Hbah|+OAFTt+kt5o5q}9Wy0q7RgS*=4Tv+yE{A72bdXuRepWFu{J=p$!dH)D8>UuWgC zh%xm{(S9ay`z~yRNi+U2rG5fov~LCkAOdg)(3~e1#Ia^%1cc}KWK)dWAFCA(1FZf4 zz{ZZl25lQW&f1+=E0OLSgez{N0W7=kon&I4m~7JGm@LX@N)2x@-v7wxz_;9)pG~|A z+D@uQr4N+|oS|Ey*s&oeTIQ5TPG0?5iIXCw?S#cO(kvFt907hfeqDGN#DM(41d))U zV;I|d{hp2t;7S)w2B_Z#gEr|wy%vKuW7O_^w ztSQVxw_|Z?jP!^8Xarg)r$S8HgDViT4nfSicFiKZz*fxV7)y z5f`UMNjvV`0MeyhKl>SE(5=5|-1r~h_FMD_1_Ev85xKWL*)uHsW>*zHDLdew{SjKM z=o07CqZ$4cx;c&uh}$2%V|ARtPw#ZBkANsD8)())$hKrW8=NzKElPs*+dyXhh7VimZzhS#_K>`m?8ov(`ln-K zM9v4&VuQ4!ROth2DR;l7w{>B9NY-cm+@Xe?o+N{19O)oOf7v6C#}9gZkdX-Iam}{bAvW z!*7|dFvpZ0Qb_&+P-9p}eZ}`dZJwL;n(mSVk=mV|RiiBbqe_a1)5jFPyQ0=E=Q{7p>oDgxj=Aqf5CRZGY zQb=D>;nE@r3?lg>j)~uD;@jiaa8;IQ94~5+J}XPFGau1T1&Z1jVg6skc?z&QD)#)4 zg7n#A%(Js~x1vTOVZ0Vmp^fg`(d?f9tus?Dkxc)$?II>4IF{Sp7wtq(4Ek3rjP4*T zJ0Yp}Zbo#}g2|Y`dR&zKGzO0&#~+9gi(_fGQS6BoowcEQy)IiEC6OE#-~nMjoL<}u#QSmYfm0F zSh|iuG#Up*AZX_i%dQazHsaU1L?uV|TDMx9ksoT;16|}f=RosSOa_6IqSdu|66uq; zTZzQ{MoNKd=MkU`KEw<2|L4ENZ4W z{rH=G8xr6f`Gz$Vg}=EQjrzWU0sga;o?Yf!Pyy@sKQJK8{}vE%+W$0D;%4H^ZHCxH zR3M0Az7b`;e^A~MIRIvfIlKl2#N7yX_@D6dO>ld;u62JxdGh_Yv{&`wuYVmIFV0Tb zYUr}wpGIz*ORYKnlswy|-qL2B5m#YR!(Af8Dy-oZe)_z!-kTTPUytRe~v`)~DDp{vGF7AIq z80bHT*iqe?-4PA2KKSEm4iwMAk@0c#~6N?or) zQ;PwJovLll9 z(ReFhn?u?@F}#6|w(dx{yH9ab@cuHHPcvwoQ&!3IDOa14Q`F0|4`WS@Z_2B}LvW0h z|LgLpAqq)XP3)xA>W^*k*jx3pVCuDcygBlI{45qr{EAG|hZMbIJBl%-J z55u%P=57eiBS@l3qFl6$hh%cj;ZCODI7cuX|E4E$xP*7-o~|fpMWq>vxI-I01M*Y; z2qW_#db}ZKLsg?0N=bTBttrieYJE{&rtPE2_-)8`1-KdBB%t|Ftf|V4aXotkQYp57 zaE(y_o03kiXisq8iH%mq+rZ=&(LDMERj z%sF>i3hMGHwysjVH{HK+#ATvFQORD%2h1!IB3Ns<4Lrh1}u2n;>8_zNp}` z`4)qy4A!Vl^2~$$wTqvlz6Joeb$iKvc?{hW#YN>^ZOw5^V})D;K%@-Sn6JUM!D!Hd85u zhbWn}6SJqL3H!?Z;7Jt4+T9YEn^QTewa)%q<>t`8!QvmH_jm-7&X_Jv=%LqQIvu- z%Fa#wXJFdO`M1|m$b6N;*M^?MY0N<~ut@O~>x;-bSTC$D6D`ls&9!14{VGv~`X8i) z%mZX<1wjzG-vR|GXrW-$Y6f*a^|K7DP7-AYc2e4ahv322Lgy;@!1CY@z#Pngh~00+ zhltnL;?=`2Vm)#aCnF3B

_eHq%~toK%mg3JQ?Z>F&u!5jA2x3gpl1GODnVH=`l% zD=`L{c(M;MkdK98@%?KOFxp%3o^q7-1n^$KeMFG;U2>)zA0ye!qOrBhxd{tsYj$`1pAdjL5P*GL#QTW{5LtexjmUjtc`vbgVd?;QFk_d(LYTAxexo^g zM40Y9pGc9z2*BWYauXs&?Ip`eiWHU14S~XyW(Hn-IV23)m|^1A&u7NoR=*9Yqu)*N zfu$T#(g3cShNjheEomcr$uHKhaHlUm3HC_4_s$B0RZ8x*BQGJ*0cZF5oGmlE8DqBl zjT5&X>itAtBW7`K53+G1tD6umx(|=QvWPQ>Bk-XyDEu!@C8Mi-dHrd)pZKqpua1`0 z1|6vtHqe*7({h+$Qs9841AtN1{sLo+!GAH4msk1gCl1K?o=fbAjmz`XMXhIcVwgXY zMZ_${o=eS<=rBz`A6jc9wCvTq2^eaTD#kTwE{Paa$T&_(aw~%+j{GE=cXqKU=6q{5 zzM?2gAp_0BYw2Z0Po+a}IFu~2=e_RHTs-+x3^&_Lr?i#gGY=rmLJbx_dTCqQ^l ziNp5m??q;9lieiFUZ|3dmV!oF2S9752|Z`aZw1h_>m*%_*>dP0O31iP^%^3@T)JS@DGYM@0jp69_NP6Oj(Y(_r;a?UPoPtIjnAwS*8SNhHP zO2){xFOklA7*&&^h6*}MzBZfNg@ymArv{R*;U}(B1#gpi)~(WZ{Vt@E>UTT@5+SX5 zD5~9A7LUW-_w@-eHEF)G95?3lnW3mTwsi01llzhWo*?26fni9Mamb6pQmkvB3gp_aYah+I!5#7>7Tl?MCqm zIj{vyz^THTiCiZ-N*tw<$$_#u)5Nni2H3m^I$f$D8u!G)gOI*0jdMc%nH!1+n=nV2 z`pw)}v3_c}QHLugX%WNF&eu|}PeDA3=P!Vs-tX$@_|xKTK6r(24F#9_{d7$#cA+VLn&Hj1mb@V>t=K(SBOB6-LV_5sARc|0vXx ze?zFpPqE*i%5^@9J$z5je^TX7>3mfA?*acwm0!dBDpa{}juGkLGp~&i-Tn(HesSV5 zgV;DEq};0EVJVcNZ&O|pbmA+9Ur{%cT& z=dNuWc~z7R6Pf+)rp%R324Dyz5xJ}O(#)*_H$1@snbNk143}XHwhQ-vnMJYU>tWcL zZ~fkyCMhWJkxv2x>A3*cnIIEwND|$!)QVngLR+CNH^%D|rOeg-p~4jAD~$TK@Fvb8 zuuzvdTG#=UU(xj9YRyA-g-LYwVG;`p?@_`^H{a$jL=tJ?viXI}=7_R!;;5*P68WOh zw%sP&mDM(3{! zTIBrV>Kxa)ok(F1`IGy8rdTkoKL=n2scndA+<7ZLF-PK?uuM#vI1t&PwabG=mofR# zQBusP*1t*%#F>}Fsg|>iUh0((zHMQrC<$b?ay0<>7EKv~?q|haZ4(gb@IwUdxdYJL zmau{KiI^|kS=iI%n$IKt5dD1p?{_Pj(q1ztD@^G$&l=HD@B=F=UQ zqCQG@TtOmAcf3)4J15iPy#p*(iX(YtS|5b*6^Hw5X+hTe>=tf<5;{>}$iTtGbIW)V zxTvxt93*iIgbsMR!Y3(}5Kw>+e6kiVY*;82Mz-(pL;kS#3YD1iDZQ=>=y@Z7!;eb5 zpfb8C)6?va5gH_sh0q)E*ZZHW{QqabqV-l%bpx;n{!k$)YnOD44YtT!M5;Fvdrz`b zt+VGDg-_t|1Z(~}k(2pwY|J86k(-zV0M@>pTyqcwO8h{D`42QIQ17qIM4{WgEupUV z?BupLC4@$c-J9oGL~?yGs`^Re&;>k@Y}AE`h6UK*wGIvDUh?KZE;|cgx;9F~sg_JG zGn;?I9CS?{1bY3KU5!Ip_7>;IoUZoD zW!%{ta*0+7Vxw>ug;dm>fqja$D^~`ER7kB@X9O67S@PyHBp_jZ2FeHsgXW~sIY1aV z_K=!QN{?3w4i!reYwpIyP*rWxq0`SvkV0Y>*%JA%zrc0Yc6>H>yw77HETs65!Ypi` zNz&9l7V>!~B!&k`8__rdae&&#=Rk`}Mc}0Gc0ql`lS|DpxV;5mcO%|t=vYe`P=))6 zd5|49;0q;xP$F$Sn(vzh^}3kI3Jci(35*w?*956uU%SHU12MF4;0yJA|Hm^K)%Szb zkcXgb&k-uGKno>)R35uDO<3N7O=LwCOgN5HpC&2Tq$Ge0XC{%Ith~Jq^r&M$>`S*) zHCLff-Hot;3@1{f?HQr<)KsRyuj^7eJ{MFr&a9Yd5ABPy%TW380ty+@hkWaLQx?m?&+&& z{_(A-HBA;6E>oBNQc$AFw2c|M1iV5a9ER{wU{^0fWkpV_ zq`EKM$?K}sMp3}?uTx8}f3ntKEAXpvY)iH

D8;)8nnlV>h}vIQ>UCX| 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 wNzj<8N1#-XK&cyNe=Q}l2ST)S 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%0DZ4h2#kBJ{K=C*8*2LU)QxG^ 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

y22^T8>A- z8L|WTE|K_6nt9Srn>tC4$f-I~Yv#saRJzl_CM(2XbW$ubrA#{tVZOl`ys&zpTRy|3 z0xh%DtB#9oTpKSzDVBD0%6)NL(_2~FV_uP5yo`lh0Edo46}tPvnDpO6X|xuS!mrb4 z@g&QfI2*tjSR59?n35TmcYbR?v*I=Ba+slB8v`CEerg|Cm$~9+M<5Lo2ACDWn22Fk zR-1qxZjo%}Oq&j{fu($`DPrSIw`V$r=~-O*FkRZHi4i0#$_$pbBadQ|bP`y@#g(rc zB{zZ?6wp}pcD)aY+%lC>&6uaHiG0BLl4*!g@5-m@#Db-wY-3lC5=gs5p|Ki4umBdu zVwqE;2eZgZiISWTPIJawdTKSh22$qv0zZMZEx zXB8UU>DTV9%mFHF_~QnSxfBpl?Z;r-sl>>X+mzOXnXQmbrDADpEc30{c(e`?7lO@L zlWUymv4uQtQe;IW1u@X6uzCP9(nW|vk^z6xZp3z}Xj(gDY?CDyUpz6BPWEq2oWy1*kzrdMM>k022R9)>N42vKd!(8dRSQ2+I@$`GQN9)^;AIZ4yG%Pv`2xL{S`BJ5MV;M^sq_V7V0VeujP_KH1?J=_%P#H6v4aW7Rj&?V)Z z^DBa(+!opAnl6%NTZY&>TrCwK+Gj_`R^0pT$Y{DuXT=4EIx=xsen-ZV?5iVVNwOUo z_56x;pyG41OE?0W?*Do?vbE2#lFQcj#?h2=a!#z9~s`_`)8UEiAtA8a9-L|)% z*OPFmsQ9$&aR8W24!}mORQ5@w^AKQx77{C6 zee1H}tk-;B!mM;#4SCn0ldRKq3f+L>Y3KkQI)TbqO2A$v#8> ztvV_y{iy$6eeUepQjN9Gnseq{x$7Ep&5{e>(A?A%xuYriVw5~NG>TeJP3}A8wlkV$ zD7WD8#+@yNAHI0yKiu)$vZgy;Y>94st|i(I{3iZ}o1(j)#q)5>1i=`#HHz*YZaHfE zBNp2kMPJ~v&|7S{W%BmtmMysB#VfzQZD0JOX2X9;P^j_G#r9w;86qBDS4!P;~dNTUxe1*V4RwcT3ZD#$!4sg69jk zf24_Nbv`i>`8a9&qp;i0TaFewq<#8u3-Jk(FO!dt)<4oRdHUvqqm`qhXv;2ypVAcF zctaG8JGIg?@BGn+zOS=s@(=GD)46AJOLX_+u+O&+@7!}<)9Ck|)71Lp{f9?;?r)A( zB7DcsaDM{q^Bnk{i0c&SLVGPxIvs=OYt=LTZ=#1S05%TTed9a#Y?FMNEV|!+;=((o zHMPEPa@6|d77ENo-8p(#9v_8nW@9c=n`?kM%Ix*tdJ}zr*hB zuzP#^B=||>*L}m{&rOookFt!yZ&?qyvW6%VUcBw97MrH4dsoIEF5-*dRhKbDX4f44U-ALPR_@{t$!-hE$l=Z>W>?wvE-@+#xA zC@c5P?c6i{)t!4LH;s9+?f7WrDN}eq`pG8TJGy^G+Lr!h(;FwhI$D1}^jrEf+)s(t z!?&eehRP)4PB@zNNp#Z}5ufEZME8i4H)97=_9stg94Gq`sS{qcecn}_A0pn`iu6v5 z)=&HO-dOgxUP#i*w9@ZB0hxt*)B4+5O*&kg;p)omd-opgWK2Ol{->aa-S4IjM!vc3 ze0J|_hq*j+^%KkStd?jG>AMh@_1#}ez07vd)M+M7uFf-8`aJP@xH9gaL6;9bwfF7~ z&C#A->W#d81oam6(|Yel9e*Wg=b;|HwYl}_L;rp6%Gs#fHwZSgqrvM@2zw@adK-AR ze)gtY*yc_<%IMg3bhKw3Xk5Ay&hrCPKVojXQwme+3+8ZqS*fyAfFij=a$DLTlxUZ!&f05)8h0QkLPREGxM8$28}uU8vi!FHcH8N`LXk7duP+9jL#gs z{a-+{^EGIrf4f((AL03^k3=8&$St3`^Y1?Y4-cTMzWwcQpN!v03!}9>F1_p>7eD#$ zQS@A@PD7t?3vD#M@?vrrX*(X3U&1uWedSqfxED z_KY(y5JVm`)(#A;#qLG}gM8`4YuFi$fq`CG{&z-i?}on9F`~jhD{CvwpEaj@{`~GU zOKUo2w$JUDH-Fa5j@kG(xHD(Yn>)L`drn7p$C@+Czt$1Ykg~V}m^ArfDMR;7#)AF$=%w+rz zw|;WWC&o(r_Y=o)6;ED#>T@S?9IJSea3g&x9`7TD<1#o`v~uhTox=OzkF@^fn48Cb z^6*bEO{9AYKOWV6&@nBO7>;8$Po6H*0L`=E8%N<`)z}l3Yk40%{FZT_9RCScEacT~ zX}fUm^J4h*Hr(08x9jaTT7Qx#x_+JQ)-k^6} zFZf9w8bzA~e{}}`u;52#@M{F8rP9aKg14kWJpD-UgEIJ&f}^+T9S;e9w1-B~mjy?U z)jRGIoVk)dJ|#GMz25PF;Aj=R<7 zuQWw%FxAg<&%t})pCS6obM%BW2kAeXqvx6& zxoks1a{mtac;)9^c;<1kq&M+rS01+@YO zbLj8M(dSb+_{1Fi`W(41gB(Xe{tWkkE8Ij5+FRq!md62iZ6gU?i$MHr6IISr?LF~M zh0jy?LWM6@_?ZfK?L7HtTMj2kBX-xue(K5TE5hT%G>J=PF$1qsDbU zx_d^``Ka;BEKl-(qvAhF;Vv%->HN}s+&%ep*|@xP+I!*)>^(1ee4H%Ow<~&`zpEAA zW$#J{gAz6IbvLYpm1FeIKOiIU3zv~ zddJ`46Tp`T`Rn@Uc#Ate7;}}w+1c@NIQzpq$VZnuZGUa&<%*tz)b8j~c&a>F-03sL zMrc^v>ErON7Nl8jg;o5F(3V)lTKTY9U&$AS++ri}u*Z#Rm;j0w?9))W@4TX0odiKY7FkRXo zwkUk1A(1ot+dN2riMf^YeG1q5{L132f3!YNDSBNGj2dN_lE1DeC*?*rsspx2|0vpDs(oi;GKqzQUaj#I-*-oA~;;HjB7USC{4K+pXK; zzTK)8C!dS$Jui9bovP?{`Eu!^AG)-YwAIpcY7q0w9pmf`amSNTo5EjX?|E@NN$=WL z;+;IOer?HcaS1zICRYC>jf(XX7B)H*MB>86oMq;q6 z_u~U6`^OKmPN5&4mb5%8$NaOsT`j59alv-^5VgacXP*gStTCy_`kB9%VPvzjZSr?B z)F}8rRt(7f12eN;lKj@VooHy75`>&lCml`p%>e_y|E}nwh&t5Yi!n*X_XDa80Jol3CjonRmysyT7s zP)$Kp35e%Ej9_oCc zugSyI?iua#Bb?>bJ};WOaRyF6&*WK7*uoU3oZ9E`R!;4+c`K*(S-iyw(K>i5r}lQ< zwkKLQYVCL=Hk0R>rt17potKT`_n7Q4&Q|I#AY31|`i&vB!^94b5p&b&J-bJbT{I8< z^L@o1>mu5#A0Kl`0{k1dX1Iu>wgvt8xH!MK0I?q-$h_Z|D`tmY#kZ*zOLU2V2m3{qf6RS%{#=WmUZQ^5$viwAzF%iyOBI-d|zW$%F{_D3tS6TVj+xYI{%en*ceT=lj zR{m2qBIPqnefc$OKVQE41nb%n%O)eM5Aj3tA3Vv#SZX6uKHmp@`CTwR?Qe^lrH1`j z+2N>~OMG_m9q=|p4#}T1)llrTgp}WgpNsFx-%k*k^7R-L9;2OBzI8uBa*&pXyK?M- z_pY2UjK@FP__vzJ`0V1j>$j}^V*-2A?ROk3?&3N64_N;Jo7B-`X_vZM| z!`6Pf{(3bcx%ke0m%@I&Z1SFF2edcZa!563BR~Eb9UX1@*xwqej+t}qqR<0hL!}3- zI-vtcL1rP>zSb=Bx-oRK`Fm|M?tEtGp`Fige(Z}^rq?13VYs_B>fFKkvG-w!40BJh z9wfbXsB86UH-hm^ZF@Nn-OO*^`MbTdk#3m_8@(=>yNf=9%-tnD*BK0bz|8v|`e3xD zr`EZn2Qqd|9$K;a-O-*~e>eV)PR#Y4gI^EU0W>yGLkF8@xAv*0W8of0!}-V2 z-o0PYbBlf3#e8oxd@%kkY5y?zZkyh@V;bfeZ#%Yg&o0=w^64dew*E=yo^zTow;jWJ ztp_0v(&*-Er*yFVsKeG5sY5zHm^QbbsuT8h`M0Y%n!_|;+~#g)3wPCNlY1+}<*lRZ zLVTC6ZhrGM$QQltYHv%^LoZ&b)?F>aeCUG{J($PzBh)(+9DmB>`l!*xQ8%_V?L7Nc zk9Y2w_|OW>bv_Dn=!edxzi1tr;ZttTHRHbO@n}z_*14ks-jBn7Mqe9=uP`3NJEN|- z6CWB6eml=@g^Z|a=xoOig?Kjo>;Ao89pBo7`S(qu*AO?#rm>l$bAOBd(Ps>;Gq8+!Z#y*t&hNu zu(plq<@4xyA7Am_KmUE-W7y?K-TllH2mR=o8(N2-X@!sNnzi{BuAynY_SRck zKXJroTib8_@#q)N`~E3cf9qpoIzPJN{QBS2PI>Wy?@zmJ%yE~0>Afq?ANyCe)~mOF zto6k;->;k)-NAID@|fWK@<`klqESzux@WKG)BNFR&xxSQL~RJiQrfE4~yco02wLCZEL`CqIo0_tQlEda$0t@lKc1qswb=p2zwZS)+)uGQrkIn;-4mgR*k>(6<)sK$ALQ^AlJL zg=g{>--m7u=tdunmTq1#+_bee^eyOlHP)tGwe4fHQ)@KwZ<)7@v-#0z4>6{v0>7xh zCmx4S(0=cQU;G^FFK;^tYjUhVjDbI#clG`I^#}U%<0nOTkT=%~K9BW1epzt!5$iqRHc1(T*YaD^ELwcV?df$h%j)4x$vsU;z^*9e{J_UA~jx?Wt^|wE^6#l=C zevdK`P3_!s0sMdIr&^C|z4~vZ3^-dc?N8XWyF7o^rT^aS8fDiejNY+e$0=BMdCpg8ZNixBf_c^rKk+7L9)L-TeH6@wJXghn{}?_I|0wkJM!VWNR(-`@p=vPm+tuOKoi#XHDirm3)cFL z!n(nOWZmH2MTb0uk0a8?usz>)YBXmX*6Y21athzY`s(yrwXM_5dS!=mJ)yfl^W^C6 z-F$vcboaJ{7t9~M^VSvTOle(r+sV;N*XC?(+Dv;)r@o!jRqQ#r2G6&o#56 z^?j#CEBCYte8 zrW@t6@V03Elxfk*TYuBC{x3q1LmPf4}vxoj)#ME%4)| zXwP4t#PyBmO+V*^s8)PUv~t=>XcG^L9)h1deJ^w!J^z{yo^xdMbQkZBF?b8_Uv2LH zdJ59>*3S8tzoT>hy49WYTic_DPWk)l_s=_F9AW{TAyr1T-xYAT8`O14K})MVdoCo==xdFjbBHf)7aB#~bOWx(tm}gBvz@+gDs20{=;`5O&<-9N zJv8~+=;`ZlU->_s^Edwm?29(81<%8iqLojaiFN|ET!6LLCr;>`H@T_#$&-LTiZ*#0 z`edzrXhUId@kiv{&Z+Qa;uWmjK0dnpk&{|(eDv97tnD&+JA54as$XS)VbuC}L;r2i z-}E1jS;zjvZ_s~Wnffwp;C#G!HrHA=qb#!hGwTvNC$c}(d?WkhY%}TGTPH-bAAye$ zUuZGZ@}WbYsOd6R@iDs1av=%@Ydk~^l2?wo&0Q|G3o zqoetlZ@h`VL%*TVunl)*i*=VSSCqB$gy?RR+3jCL9m#TS>dE6IeUn+Xkq6gG7}xN# z4mDxJ_WJ0ROvj{n-QX@fV{QDpbw@=ji?TM-#WObJ`^KM-k5=w_UFRNMmrQOl>*iU1 zQ10bF-Mg|$;+yrUjQ9Lex4!jX*-k@m{DSrJ5c0oi+|Y_K2S8VBGwlNTO_cSH6Q`pt zzVW$bOHe;AMm@a<_4Pv3+pNdGDeJLa9m;mf)uB(LzqLP|9y!XaRo)jJ^`ZXPqTQvf zN$Y&#lLwHVYyV_u#q|e3x8T)7E8ckkbWI&YE8cYgbk`m}v|`Nx&@BMJ%MO5U3g}QU z_nXhfDMKrkg3kEKr0rZEy)XOHwngwh4{^4ktv>~26_`j2|^AKYAXrFr>22cp?8Y<-+*lt5D{C*lgD2K7w`R&j0!TqMv7&e84^l$-XkK z&o<%17=u9FcEQ3cK&eGJq$r@4(~Ot70kk zIoXAM2l#Hp=Tq=JZ4UZ*u=oAH-MjMfLpt|VAiH(+{kODUJ^EvhBOdz-!+0WqaSpANexzaaQ}hHR7!{oOGwDd*1S!LMLxzf&Wh&YbTJbCds&b*a4jv=1Zy6`qUeuWs0QE1q?F5Ij+$GUJ?b#C+< zCIJqa!xfN^pc=p06zs-ifKMptR(y6Al3N#8{R(LLEKfQ{5j8<({EJ1)S-r_fsVYYt(| zQ!>#Dg0pE(9~TSmJTwVATkshPVDC;7d}aoJpWvu9y$e8a`mMpUerxco z-x@sYw+3(HC3A$uLL)6O$K z0Q|_f2a$Z+|D51SeO@(eqJKaU9j|7QOIwGqmK^<=vmrZtFvp(H=h(j$azlK|IdVUr z!>2ok&!su|k8||=>m2^GbNFCULHz5;#}NGwbMR$3{Qn*J zc1P6ekKjptyV>&jvmATA8ul5lQsDY_-$gvV zXM;=Q)*O3&8TKC^CH47`mHU+NN$Te=iysDk#>=a{0p4%%b93_X5#gWI&zD*Hn{gel z>dDhA-Xl0N!5+Kp^=e$lM<+Tsl71kbzL#U4Z|3;_4U#WyF&~&kjx)vnN&E7c#o0F; zulAU^-Qp+a$SvjITvO%p!m^Odt8(l{+7SIaa_B2LI9s$3pT#-;JU#~>m!toubL7&m zLvq*W@Ndc~cX@kS9F>#5-^|hH-*fa|n1j#B(dY7<{C!6bAHZ^O?bJK$Juma@J=bP& zvV=Pp+Z*B=9f<3N_MU6MX5zlhJ}=R(zaI2n{Rz3VYAXB!xSj2~AV@YJ1NMZNh`;T5oRUe3rc@ zuK66FgRfG!=HI1o&A(USn!ncbEtZBCt>;@6uJzRRUutQnzs8+E5O;A&s`c0Q?6Q3P z{OY#2pI zcX0`AR=B3$qHvurrzu?9-}wObxxmu!qWx3zZzw*lt|R2^;QQfKmfqo0?DLSl`u=&n zhdcWBTbz0>vG=^(uJC?^cPjish3jug~W$OHX|?pRXwV&Gw#`A1Hi|!k40b=RrPKnp-(vrtlRC zuPS_{!mrQ4^VZOBQ}l0Ae7>S^&Huq19N#JAp#GX3^IU>>>!<|Ra*tPduOX51G=(oy z`0N~fvBKY|==0Xr-=ygEo&k3$e753a_KY<7rSTsq`VK|^n8MFg_$c(dc+hT|&s2qL zKXGeDNI%y^mGgy)ezC%rTio~Ol^*VVca_C`Kflbw9euaOsm~H6x1n&Y&qj;;`na_u z4tM;AEWNMK^&al%IiADA*XQF3e}f^B^L-X~a@%a!10H{eKdkt;I-F646|U3!SPuVP z9`5x2mBsz^KIP$#p5snD{PeckS3%-hpRpGA(>u`}+4PT+^9Bcl@_n+}G!J4|nu;THM#?D+<^8?6kPA&o?~W@xRaF zzCI6lxTF7p#eIDqQ@GY=m&JX3e&ykg|5FzC^?A<29sO@D?&~x55aZm$wLar4?&~wb z!yW%g7Wefr-&4#Udov-*(N9%!m#FeJTj5$C^BpIOe0|Q!(Wf&T^tn*U)%x@( zTAlS2zJ0np+|l<~+_%qF3V(x2*Jg!lJ>PF}U(YQb z?&M-ZzZ|}vH+#6F-)eDRPfTu+gSggnr^0nV?Hd;N^}NsGzCI5tKDs}!D+f2)V4W!R z+2kH@ZL{~(Q@;q;>|A4|Z z{ZACG>7P@$rf)_1dH8m)W)@u2Pcq~g`UwhOYVUbjsql9y+}$=o{=3}+u1+rTYZX4u z-V=Y9!ks?EhZNps?}@v-CgkoN?)Y{pdXDY8!=;7v*EkT@Rra2EkHWhY{x*d>8qy!H zaCb}mm23xR6Yd4&?r9sBU&K#v#=_OrfyDJ!@@`8*T+c1LUg2%_o|oJ0J?Wie*B$pLe7Xa1 z-KFqT75-a=pQdoP2PE~>dv0;>79PZBm|HooQurAPk1k!lV9^CjR$>dGzEX8lB>&;e zxs8SXfh!{OSFy4w*OC=0n^V;4)!(*c8+G2 zFXQJ1+P^V&;qn)yxqp@&??=Y{jL4S%cwOiJ2V<|LwX#zgEQ?*X_@Bq^py)5xiVgl7 zJ?4tmKv}|;S#Dx!_+QuE-cSS82L7$S9`EPno@x6A{`tLNb{;b(;6_}<{(4^pTYU|# zSyQf+yOG89dU0*J9x*Su@t4_Zj8A6kGV{!oFqC_8;jdc__2$XY0H zpejbL#Tu6eYuLG}Q7Ga6eanF;MhjTaDV^nNNT61^vH?jlX|wjD(($HN_;2%KH-u#U z)$F7ed#rh+k%EVD=rM#f^E_G7u>6{q1U>|-%QP^ zZRTCa&e>gFJ-F89EOsk%d#J^`ycwmE{63&9)ua&O52*UrmaP}sUDcctC6>WdD#feH z*o&-yf4i!z*;J4}OE=buw^Xyr^u?v#Y?D^4G|I%Vb((b&xzGA!yv>?aqVl9SU=ybi zG?OcWO0tT*_@`}bS=jA1d{Y%^rEZF10U1?6T_BsM$!=>b?WR0R^)-M*vgAbRUD)hX zpV^a5#38%jlqS=V-LAkEw+Z+ z$o=7P8`vMNdq#)Z8qVz!2S9d-Q+vgAm~G?a7_ z%170+%;OgO9_|8d_rg6!_u`Hi*rblm)Kl^>D!G-ry8-Mgeyd0C$NxJ3KE^1!ZKuw? zSMVK{>2&-Yem}5~{H4Hoxc3V4l$Es_0ipQry<(S(Xs^DmZwKyUBpo-^M3_hBIH*5u z?CXC!`e`Bgoi?6(ZzB&LzN}jj-^WO|)OK>a_<)1*DchHSZH|05cYiY@tHYOdRgU~^ z0r_LV$Cv+wgTm=|{oNrYo43CFyAa>UNY`pR^AGa@2h%?mKVSZdaH^2~KaOlX;}F;d@S<-2l9`Q!2PdyfCR?`DtL`0nD%IxWZlXHGLQmfDDv&sl`N{C~;ufA<~YG8^AreEC1j z@&AohzP3N_efbyXq`%d+8@D^b_Ug+&FDLz5tb8|a!1Ny*kpFm2`McA~-)ZH#i!Yzw z<$a8_JFWbuY(&cEc!r<;dvfIWT0%Ep+p@{X`h1T3yX+u98#kQ9LHQgX@#S+qL&*Ox zJCd=oY4g*1O^*Br?Z;@+rJZm`|>{s zEF}N>@#K=M)iY07S$~dzko>lJCWiLEsepX>e+w)m|1K;4F2g21`?5Zb5FaD)@_>9c z3BLT52Z!ZjKL|PW7#sm#7QYiw{|=!}PFLCZ=O&Qck(P(Me#**+8>No>Z2W2pP4sv0 zR>b#pV%U&PzZ=)4ejNYu(|>J_{CRdDdw=rzT{$Fwv;AcnPpAIr6?85#^q67D+d2#QV!@t?fsZjfrf7|icBL(Z)_ugyv%X)5E z^BvqTYsjv1=X(5INL#Z1(?YDn$9{JAnmw#~n%^-0ns+tr_^YF$htPK3xb5D_^Lh?` z!~EN@FU2D4MZrA;wtasxOYcqCqhLD5?$`f$OSH0Udgq=Z_Cn#FAa1{#9=pd&5&Pn- z!9Fjg=7Vo+1CPG~uf@3j0=&3)QqSd!_iV-DeWYy~;`Ttt2f2rX8EKKho_ugdK;cy+50U6 zQ~v{Q{so+M{#gvefxOJDO(qmNeg!bJ2Kfl718j#%MI0lzDqJ><-x8w08qaBh`z-|= zS#VTDf#dgIi<;H*2Jm&Z)FLQ0g#UF8epL=mXAklDY!1$TtX@kcc?7H|cw!&PUto*z z3-RZgtPoCpc<@^=-x=LOK0Juq=2@OuY4IR_sJWH%Dtpgw{i79rnTI1-jxKxU8~{z< z?ct8T*W#3Gn+ZW^XCB0D_g9|3B4;x?$`GLiK{U5ftum4Xx-03rHabN$(JlxT< zyzub#?-JDDN7#E_hU`7*$Jl#bj<@$LH`;qU6`m?(?%SIAJEbxI${`5vyi!utTKNILcug*+=3W`4i_+#{r%nr&A6ckGgp9uK%0xHI% z^c*DatFN7r{WlN%%?3tQyUibNm@!l^wtw;x|H;NoYr_B3<$1(TN@c=oH~Kz2uvcs9 z@E)Zs5VPblZD)L!z8RH%j5z;bU-5tI(fje=jBp=glu5SA9kL3u3^JY0*Cvq&#{~RB z^4-{ytG|R8CtnuJfRB;Z&Bb(?MEO+7mwya|Q@;O>;{LzTl^>AEVUr_q2=MzgF(-!@ zk51ch-CrO5L!fm$C89n3EY$H0(Eg*veDYxnxO&#{cIkJ|J8=`TpPLKn(nb5RUUBhV z{=EpymklVIXPtW3CXSa-{4?gx)?M_r{q@o3%$zgVL^$w1y8N*PmBP_!&qu-Pty{-p zpT#EZ&DFXcF!tm6(jC7+pFOk(>2sjt-lL$q3G){3J`VkG_Gi)FZn+YD)dh#Je`@wZ zdjWVC`n*4Cp7?Fp7JFJ5oc;c{V4tWRcn{d!avb&~Jx2IVj*fovYv^t9`4QRs%k}%d-6__I6Dv8J(vAq_l&vvv;XPf=*A!ZX73kk~_UCu1%S0;}Gk$_p=o?Wbgep)WY%Q3djt-8*UXx@pChZJ|?)It5Nh3!TsFC zrqqJF)W%|?`vlMSzRccV*>}dj6MEk}u|J03zE?)krv&%CGm6fE3Qfu@AG9iQt$nlf zQVbw@VZ;6q@2X_gl6rfx%mvTtY3Q@|H+a_mOm5c7__lYh=c{Y4c5?Wx zcMRgX<1~B2cT)Wh?)3HXd6u58Kgx5cT?M0?MR8|Np^@2u`{|DosWKglvAuJu3O;=cZE9&R7w{bqdq%~+XPuf%jY z`kD5|*S}NYTK_hi5Z^yt`kD}r{9RtUa^~6KBE?W9 zKEa>M@EZb-Wk%KE~i-`@-Pb1lB>Jv8PqQL-LoC2@c)=;*1^RH0?#j>Ty!UrvM;k z-7JpNX5(*(5p(18cQEJAgwlTx6N_V`xkwv64)-p;OaFTj-N`y2b4J$KG56XU?g{+51-nwX}70+k$UZAoVl5#jnr$Yp^c1v zUT(lhz4mg;(S4_9q`wxw7Vg_nFO$%b{#tOz;boG$*<|efUEDu^MfFo(M7r(qih3X0 zyZ4pZKOgb)S5`YV;^(idc8o*jcAROX9dj+)%lP_AE#J{gd`_qRbSHx*r&<5hSZ4rR z8Nhl1*i`|HAI^Aa8MhlKh20at9tdE=0qnT|=H^ssxo&=x#@w7HjV-oaG>xqaV7&os zD1hA*z_tajuLQ6M1K48$YPPk$r$r5XHP zg1;q$ze#X6qb&(OO>pkqls;MnFQh>{{aEJe6f^i21utdrn*=Xs@Mnep+6?|J!7Ca3 zHo@0r@Qs4^W$p7jK(DB6m+-L@EfjvJ(7PFz zNx-8*uV)LJupNRQmk`>!ErOqr!Pg2tIfK7m@F^L5qTnZG@Lx%KU!B447yRT5{%OHa z$>3iV{wT!Wagf;IR1b}!p9uZw8T|8tpOL|D5WGEu7X_b{!RHA+Cxag$_?a2}my#~d zWJ(|R3jVq@h^MWBpPj)!BK)&!5cUdwPKN%6f-lJ6|4Z;i8T@*|mt^p_34U${?-2aF z3_e=$3o`hyr0b##{`Z0}%iy;N{>BX6C;aUME)}|1aEYW)%uN?uoF#=nBc!R>vl9MY z!H-JO^5IUwCuZ<3!8Mzrq#oF9DZU96o1&y1bNEhVVUzk7Du@4C_^gfjJN$X!leAL~ ze^K}(?TEwsgilhBIeZYKbWKrGk2(BOG^|bPUl$#IC6Q9H?D}0iA z-r+5xe^PHd{A$s^FO%MrVdp0GuY8XFI^k2w(0@tvS(m{-Ao^UI!FNi!iW$5^_*63Z ziNfbi8GN4bDP-{1OS%R!_zS`(=?}PcEtYhZGxP-h>(>N9c;IMB&00?gT2iyqHJ&X; z3~foRI??pma%AYU?V7=}?V7=}?V7=}?V7=}?V7=}?V7=}?V7=}?V7<)<|T8qM5kmh z0xi+0Ir!;0c((mAeA;v9v+b9mpOZtMZNChCw*4}Aw*4}Aw*4}Aww*F~ww*F~ww*F~ zww*Hgxx8eKmgu|;MxZ72Zy*UtOLS54pzd0tY&*r^mgtR&D!FZml6pHqNuSgwX*{W~ z()e5SV|?EtyF0{>@l8vVvg_b1 zvCqN4ftZ-jT;gNx4R|BFAqIBA(Ps4u11B#zl_JL_aH})J%4~tcH}Yte-u8+dzPbro1|-E zhTZ{O1O8|30au8XgKNDtZejUP$@jPiTs6JM9SQkwb`KuC#vKXi-|HScdW}00(%;}7 zJbH~g64JlVJ$UpQcO;~LzkBfLHSS1A|L5+(qu012A^iv3gGaA%M?(6)a1S26#vKXi zx3~w7UgM60^f$T(k6z=Bg!CVD4<5b79SP|_kGThr zUgM60^dEN*9=*mL3F$xK9z1%DI}*~f58w`6pJ?2LlU~;wnqK3YUY9#fuW?PU{Z`X! zT+{1%Nz-dw)9Z4r={2tDb-B>=8rSr?-qZ9N*YvvH(DWMD^t#+>dW~y(U5+%p#x=e6 zb4{;tO|Sh*(`#JQ>v}-bYh2Uoa;oVyuIY6-()1d4eU>Kp^S51OTqoIk;@?tuo5CMZ z_%wz8QsFZd{&R)TQ}{0w-l_2KD152H|38HVh_`fLJ)d{rcu)?<}`tK|JW`#ef@U05}p2D{&{GSwlm%{&9;rA%~VTJEh z_zx9+pTd8jaHkv7^_apPPvW0b_^`bv{;0xtDg3(%e@fvGDSVv5NBkDwkYLXdzcqIF zL;39&l)nute;e^zW9O0j*4SaBzBP6j=_eRFjPw(X9e&?_!e>V6TWQBf`nSe^UMl_D zFOK-F`0XRg4$D=4X{4WE{CT9GVC?Y6)=wDm+m}{-JMvy;@@vFzUs`@UG7dK4w_8=e z=%v!X9eFPs@!OZ8-@ek`%XEKWsj6p2#uG;R34hGr%SQax_~(PR%<{6;-t)WOOQoOi zN_#IG@!OY&-@ek`%SQb6<>9xlwD+-6AAN!KR=PCRj6yB-u z|EYP5UsL*2l|H}k{Dhr~&t}Ev>k8kZ@V{61%?kgr!nZ2?kF9_E6{V-1$M`o2A6EMR zvCRh?@mo_*?o|2pO7`2oR(2S+_kWD@Z%6!g#BX(dJL0#-A9TNWxhlVZsChLb{RCs@ z-*?{lNI${YEw6t&;dy%ZT3^fA~YKFZ)CFZ*{%;-}#+)q@Q5? zVWgj6?C|@JgN^vDvD?Tvn6blu^?Kfs`qtQar)|@D85svN#uzpiS-0|X9lsr^Z(knu z?SI94+40u@4{C~{ci4Mg+;=YG1%)rR_r$vtzDnUmh4(6awZexKUQ)Q*vxWS-6~0Z; zmlf{DUP!-2;SVbMwF-B8Q;@z#;ky-mMd4#X$Ak2jn_D?^e>@(<*O^;6&sMlgI|G&~ zyid_{zdIh}({FC&Tvhmh!mn3&RpB=)e7(ZC-yje2ubEpp?^JkQ;XhD#L*cs=KB(~D zDtv>&$2FS=%DqD2Qx(2Z;qw%}N#PeN{GAH#Quvh$Zz%jKg>P2))e8T(!r!IvyA*zn z!oQ*LA%#Dz@M{(RD}}#X;n;Ln4%+8Bg-=lU^$MS+@IO^}G*GYi7WgX-^!JxbjmkiO zp}%}Z)ZOTOB?vA0}{Dbt`4 z(TVy+#9hD)#oSE|%75 zH~=w@)h>=+Etl6BMzwN(dF?=>f($|e%cXVEjQ)W}dB(XHzv=XP1KbT+wcOub>0fIe z#DJOT(TrNTw>YERQ&>|g_LYOVyQWqyTV>?dM4_L}po)dn$h!^YTA|cifrAwK%8j0Z zZp&Dx7O%YUlKjwp27>>F_5uu<$D0~}q9dPTzXVio-z@e^V718A(&&&IY&FOYH}Z3X z4fpnZ6PWn>AdnoYmut+%Z2lp7Ave$npOsG#=g@vwbmX&$b10XE%b{EXt3__ONk(q4 z)gU+A$j=RSIh0G_awwNTawwcNS=8l8HYCoBY>(QN@Rfgj8ZhC-l#Q-t8v}bCs(Nl*|xBHn^7CsN8PrMAZeX! z-KUvJ_N5B&j4YHF8OceP?HL&)FRJr|wCEt3$0Bx_G>?T97}O#K z<}onRQlwUc6t?f^UL|T7cxWCA$?{YYH(ro}@**?OQ-tCLDI_nd%kLDiRo$z(^H{{$ zo#qjS^O(5&PV)$&c`U5JG=~tF$G}KS#}8opj^6I&gkj*Jc`U>WOig66-`wYsGv6(B za+^nN6q)5Bq#yGl#hGZuc+Yv!40G3D#D#g^sj!@d=3PaDBKnnx;MdE<;(a_*3GyPR@lvw;+DV{+k2x zM+fA8H7EUU%x{0`|58r+?+M61G$4OHlnvp1 z|Ghc#C(Sh(sQr&c+4uj4a^$=5>HW!nAV>bvfczr^@;{G45wibQqkjB98}>0{>(3xQ zRLC3~1M-gom7o4M<;cI&a@=3~m*>de7LY$NApg4hA^8s;p#15GA4>ncfc)bE@{dI1ko=zPW}7b0m{EEr~bV!Ab(0g{#iNlB~w7Z zzw&oxj{MyL`6mVBKc7?n-S@El$$u)R{7;)_45ntR1ms_mBY)-r%D*^A{yhQtrv~JID5w0Lb%63ekW>D4 z1>~O|kpI4%`qzC&-CzFySx)^sX+DJE(EfJ@p8fnkEGPXd4>0|$Iq6>-kl!AV|Jj`M zcO9VoJ9E;%F(7|dK>qu4>Yv^Nl>eTb`e$1}KD&gz{U_v<|BVMI|A?IO|8PJ)t3+RZ zEhqoo_xJtzUtdoCx4ss_aA^OdO1}IPbKXC;9ANrS$a(*m7m)wDfczii*#F}PDF3@T z_U{SEKRY15Bd7k`c7XCv&#C`z4#+nhD{AY6f|A7OP|8F_|KaI|YL;L>{Jp2B?KF9tKAE5l+9Q&^d$UiqA|Ct>B z2V7EBuPb{^U30Ll`;-4zPWo4|vcsX}zYWj6{HHJ|8A|_dlxrUQlm8^*htfapd=p>Ge>)&w z{;6Za@}EM#hR6QozXtI`^6$IQ#Mkl*fPDF%&yl~&67Em_XL95Zv9iITv-fH6i|IED$d{yO@H@r_y z(8EPbF>1Uu2c21SXGT5N4kLJ~<^QbP zv!3-__T|~p`da~6{ZB{e??b;r>1g^lN9Zr6#)hQzFUPsn-x1ONcbx3lkE(xpMEl=O zjSWfbUx9P0zdSbivYC#TOiMt{{Von{%_4`PW@5!zXATR{%<{1Hj>u=S)5z_^%4Dl z$LWs!sQNz{(f`-1@%gp>bs_p&BFf)VJT(1{5#{&D*+^RdZ8*2(e>$T4^=CNtqn3Yj zMEQ4+vyrs^J8*9GlbKZia-D=jmzJFA?;qoH*%2)z*`JB)3pw_4{O!BUuQ58dv`d(u zFH^GQhnT<8To{S{Lbw==Ve!|I@hSS4|1O+<5kKMQ>h%`Ge^xhfmVJn}p0|tJ0ohHy zu>2R5msKWJDhnL@$c%~#ms3$O!#_yYk6Jfx!DR)poJV5b4+8!n8#;I{M8_%GU|S5z z!?*m?mV*mpTMoy)4R6I`TOn!v!ML||yytE3;+aLS#Y-lEcw@%%w)YgI21*j%Kw^Oh zo~kW}Z+UKWUp)N^@en=J7Rk9+kmb)}LNn4!4eW!Se&`%o;BB82OAU+$cEw43zgmu8 zIyU-^KRo!@nQwgLu`{oXjlObS%v*I*%&XfUFWEX0Hr!R^ZFnr^y_tyJ^)(b@fb94~ zeB{>A1zyGck*NWac>!dOflQKjFMjJ{W8QcJGWSE~^4ORw*NyO2?T?SzN_fqW|K?}5QrPCnU7$Mx{V$OLq-UMkB^W8U_CkTVgwe~SE3(0u`LDo54e zVBPQIiLDy*U^nRzeWIfeyis}*khcr@#FKy?1nq`hgM;78ms7Q}sS_(qlBF|emRFQb zpEWtTw4tlHDcQa<*;!FOqr7rjWBJ5nV_U<@Wl6lS--Sg$$?~aF%BEB%OIy0TJGw5u z=%NN+#*}64?aSJlyV_TGHa61|o{PHM+uN`vrgh~-ZEZKLxUi$M{YI=KN;b}#Hoa-q ztfrZbH%u)npE0#^*0i#z73EW#W|mdXs3>omKDBA;4KtgYCwe?3@?tkH@?y7sD0bGE z67OsTn6#y89D57KoRhq-U}NEKW5?-Hbh@@_P7~ zH-Yy@+D%2HDfHePv^0o&B%VmA z%x;JC1V`bm4(EYi;b<#JrXvLMd580j3Pt}_hw}td;Ws-R9iB<;4#z~oq$Y=}&WH2U z4#&jPq)#}UFI-gK#~jWV6bi3(I8XEyex<{ywt^`h;s>INdqF?=c(A-a9xShq2g~c@ z!Seceu)IDVEU%9T%j@G&8c zIpe%sc?G97G|tQUS>#;d@SLBY!a1d7_>J>&{*g91-r>1=ls<#{m2s+M(tf|}@LYX~ z9GVi1^K$i7jB`rc@Ehml{48x=>^%kLJIhh}8{s?E;KFwn@N*Qs99lVroMGjN@>*|BPM z^Xg``NY^dZosxyIY&Q>SU5P~sYT<2uW_NRELw9>;K1)Y?hXH8Gs9hVHC#b9S=4QJH zG*A+|?2~PF@Z3e$)z&S<@=+`j&6A9^vP~Z6-i#%#?TvD_!awt+ObM>V!h7EC{dxC> zyn6@Uz2ENMU3agftC!BzYvuCdI2LcYrB_(tRX)XknS9vZ6!*MK5YNF;7}p5g#XW(1 zoy@5>8JUFft@SKvDtnZFApL`&#CIhAY9Zvk={|zat$ykgEJk!?tVoxiOtSia3oK0k zW)gyQwDRu-O_=^QA^It#to~|XVfuFfr}UJ+%Wkc%9^{1a`}4e16dcATx}A7xRn1M26*`8o|Gt`DHwd;>QJKsQ&%TKS3CIZ}r~| zIwB=Ibdqmqu$XL?oXdU*a_G1$OW_}UkZ)id?Ox5-nBTB_@(m1&i(bK>Wqy0VB+G9Y zY<)Zfe(MvG-N%Fp=BNIL#&zMBxSET6tDE?@ai@HM_auhu((+$aK6RG5J(E1zy_)ih zS<_}XhN0i9*;7sy`6=agDeqj=+Ta}pFCD&R#Fl|+-oT;siCfa@uIEo#$)dOO?~{(%tLW+Qh)qZ3c-!1-I}^jjt9Ts ztxDj$-t+1Pukcpkc2eC>3ySZ#U|`)ZCdLx?jCya~FDB#o_wh5fV*Duj*$Kt>jE

K|J&oNsL|0K2{(Oosrf_p8~K>tUSnSARN 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
R~WdmI3*s@Zh2Jr)%| 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�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

7MZSzV#Y@fw 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

g@l>^wHW5eMwPIdgd(ZtdF;Y*NBbU2Xx;*U_S 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%0D*B+jtbd|15?liPmT@>OooJ+bHwD@;3G{jtI}t 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�=R|CD?m(3q-ZePhh1i` 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 KsIZlFhaLRVuaa5P}x9s?hR1) z=Mld$oW(vfCk~od7^TKHtRV`Rg^0{VBA1kCjVBT37};w|^osFXcC0oWPQs3W&QMiT z5~5C$7+GsrN>5Zu`(v11u??8Agc0g`Puy{eYi?bsS9}QC@BklBEw(^UX~$I%j_U3% zMdh-DBzO|+K1moU|AWoMk2+3bA3?{=t9KN$&HycXBGdT|?2WU*2)%p;yZ){*jurNt zAFjyNu~{S4Fu7|q`Lc!IMd;M)Bum|CtaOWi6gxFp(92JST&9c6 zMmGoG0(fdRPD=HKXyw?S$AR8@11t;|!yU~uC`bjGQ`V!-D0vgx|2=3dj^i^`3M|cw z*DQwaUZx@LAsc~FC zHIDRC*&BgA(Q2beC9D|668)khm?>s6)%e;sEH#AVJb!lh>UL~^NW9~GZ%zH z$^4&lG&#}^EQ?@UrwRr|hm6%t6?zp5u#WgJ%3`a?K+5sLFDtZ5%=7c; zhh2Gzom(_6hP5slhf|gGN7GO~P1xuS8e70Dp=(cDqH6{`uHP;QuvLsr2BrdUoAbBZ zt%#IOt_jG#+qgcGvt{KakGUV6)JZJvY~T@ z$63`$EXT_xz;c4gnCQp;vsHk9=y}3oW*$_yk9{?Fo*6g8VM>rR_j^qhm2k<~^h!5z zk;?_-@bMv&HM8ignqF-8t!ZJZlz?O+{J?!rbYgE>E9VR2<*_Vdz7Qo(WlQNN2Mb6d zNQZiCL_}9q)PNY$JG`s>D7!EpG{w|E{0-362I1Yf0EER3mUwVzaPH^&4itM-)PSvL8 z6)F5%@lytB6Mt4BA>nbWmr$|jslWS5W)~{mA+&iV}x0# z(w)-%#LuQ@0f!$ce&8?4$sZ+$mlk|#Xm^tpgBYV=E0&}MFZ>k13a%k7rkN}43l|B* z(>5~Mn_{%=BoB8JL!p!=h1c@%0n%4zxSf}61e^Fptfc|&#})ANL`nw}imW#FT$fZ^ z!&)IcSI)Y0)%9UQX)h(SLFAq_zX;-6{tm2U(_5B-(MnXCT9W#A%)-uBbP!~;=G;6Y z*hsrNGEQX|#zexZ!aTLIXOM@EEAzOcdH@|1BpUzZ#e9z?&IyQOttJSHBtJDpnHD57 zddgoVy#=FQcX|Prb{AQeio((J(vvOy`eEak5U!~7Wm_Bk!}?XDIq$Ugm@0uCK(pLw zHPYRA`{Zodm$SpVpWtQf>BcULm)@Qt>K$A0Onz`g1bQw=7UKcQkly;RrA1lciizOj z9TCFVH1eAA|wrx!o)cLY0ka0<8yoBfCw=APj) zX{(aSoZc*9wr`m3W!@}q0#N@>*H`a`j|1aOUkr|yCWzUvWMccB*G-pL6N&^=aJZ zxK;u8b5(Q&mykLVp>AC#K!3haFo^!EtYlM#dk5kK3p;qc&K zc?3I`yb)eoPT_!(6Pp98aGBmpZ(6oKX8TVBhRc6|L2-3354p|GQAh~)i^N0jVRK>- zGE4M{R7B#+Nhbrf@_}so8bM4njvXfuP)ZR3zaDC(d?m{|+5_)a6k|2ZdM!YNT+3F3 zA-IHs*RfJ}@OqXN3j`0c!|ssHY=3fMFueN$u$YzJ2fTUwDoDP=j9sVW3cKwtT=%bz zN8^x22fvkeSWNorwYZYi5ee3tmHNCzU$nR~Gbj>6`jrR~#-N3Gw8G@OiKLT@K zLt{6-mgLWd53YdwqbGsSK%OuvpP>#th3>BW1`TT^kh8TB|1k6;Uz7P8o&!CGV8%6-ZG>^oNc$(NZ_I3>^))`>_vOuOW|?~D*9;c^iEX9KBbV&%LWVr^3eK)G5DHw(-&`M+c4VUQlG;o&keJ}`lZxO+zdJDjK z#km4Q9yJx$O1UG9^j(U`0XGj5*Bv5Kas4sg1g3miPxgU;#La@#37FdpF= zidN_3FHUyj$v}1k{f5ZI9J7X~rA0-^%}8GGI(}G$KSnB09sclf$vdC-Hb>yt0qRF3 z(ID-o(b1wCU~-O@AA?!I-K1&v%}0wDqluel+z))^3ApiA-UDXCZj1#}2_m>>vCM)> z@W~znBc|gD3e=c_oi6h+^cK#QARfK85JR#6LYc{{(1uzPqE3DWWUcJP@>saLMyuED zMKg2h>W%~u7dfG*g~ALZ@SHrN40R)tQTuxsbcRns?cx5!>=fHFiWU$bAk8B$Vuof5 z-pI395ygt0#fXg5+8tA-rU1r7w7Yenu@Ep(mEbl8oqF>f6Oe8~`*8wO(+DgjHES^f zOtpYB{?rRg1d))k>9cWa2Bzv!TKL<%K^Xh1FYpoNs%Vf6DTp|AhEUnd@kdpMvNZmL zJkAR!S`mdc5y7hCSqCCC5YMeD2hpdFB063g2?TWxf409|n8O}(LNa8m6XX@k30zRL z*JA=$*WZVxH?%v2af*hKm4cTSQ;dQv#q@2&Qmq|1-J50K8XD9PwOt64vppvU`m$@6 zi+tFWhlHP5a{YW<+OOc!-gtVTO8y_VA|0-=OSWQdt{Q!>mF;@RsON^Sgr_HfSaSm# z_Q6lUOLa6sit^Ia(MDEOKS-}jl8!HHq*IBFo%laB{*%@6*f7qpAjXxFO89#pc{AN)gfXJWSi6x5Z?S4<1yzE z)GnDEp>?dw{u^4rVx#9Iq|65)d0xH`g6xp^1(_>GjjcKy3{mUE7|;bjnIh46YJY&G zu)HM`;JEz5A~oA{-4L!b_7+QVM=Kmcfm_W%k0!g{&ANAJCH;D=ITQl`Eo+-hRdSys;7QElKkl5&hmChI+~QDO$zHYIdt5pcko$>#HBZ$kBHqB}n_eIbds9)evRAyA<jCT#u zmGt>nc}euyIAo2A)eOcw<5J0&_MtNzL)PeZ_5XrD40!pioheW+xKN8$&Hlz;uWOaS zsyxL=JOZ>$kCRS`>3%K5c<1Z~@J$o;^ZWpivt1s@!vtyFjZ;hgWfSB>9|j}Du?3XP zlHE{&YhAHirEtjDVpn`5%O3y(>Z)C!mv<-wVc7Kt6NtupP?F>)AQJ0Rqj`j*xY|sq z4Z>J{d8}Rme!;fr`JwFEyV2zPdhP2@(Q}XaK z%#2xyT7_A|_U^j}BJA)-h$XXhET+_)!sWfmC9+=UGKrPw9I5i3AulSthI5=@WG}2p z?_=%c&I^}`bj#l$fZVe;gzc9|bjvC)l}dhzt+)Xl6xiDXJvnT2NS9o*h*6hX-^6<^2tm$ zeq2ZhC}?S*I$k2IHm4U+)MA}w z+PA>R*YS&9>G7x1OHW1P&U?itrICKqE7n1n@OD8L4hKV0SG>{^Z$p%@GZ49x|1Us- z$a%X!vX`ewbY;lDAHPLYY&(9z%O3xGu}%K2ZHs0GecIwbv&oOA&l{t+C7$6f=G`Wa zrcTbR7^5FDR$mw;+Iq586l-DHkE7O;eZOE{k}Hvcdt8ApyX3ChXRfR~N;aU7d0{Rb z^lbb!aHk6-%4}Q3u=I*SR3;4qi`^v)@<0!}0~(GA?^nU5E3YlV{~KJ>30|NQOFio( zk{OYVH>Qq~X{4CT)FYm(niG3SCA;$GWOA@nQLK_&)Qeq*+%K`F>=BXPRN%Sn?A+-F zwz(`C)_uE11u%7KZUDRY6Buh7;TIh+>=?<2i3!o+gV6;r+Qh%{2?uZY{~I|K2Q6}m zoqI4kjzMtM+si6bv0`n!zSvgUMv2p$Z>2lm$`Ub@OyBMu8N##k^{s&|I-mo(?C4CnXh#m+X{mb_R8 z9D$LOA_8=qFoWYVo~|OzNWQ0d&e}9tpf*EmcYX_}ZE4QmGMqmK##hGvy)-%G7!Q8# z?Bstg6_tT|B|BUvp#@M{8BybpQGo!X1+kqP3~riuTsnO4QT#hR9xmQ8Dwf7&Y`hv+ z)(5pgwj2r|14b%~NN&HgC?p8Yi(;f|!u=G9Bgdsz_@+C3QYyx3Q=DVq2oG}9 zzj|tUjXc}`_fl`vkss7Z6%k*L(fFIwB|1cL`C}%3B+ST1Wig2tU(TV{lln?*5vn0^ zR&3-U5&ri?v26-DJ@j+enCY8Ma6)? zbOH_El2z|ZMcG9Q6)Rt?P$91s8J2HZqG1;=fre#eh4KB?K4%84|NncQ?|HuSJTT|% zv+sMKz1LoA{nq-zshjRG4$@VovsHxRC}7KBsSkF(|e4!$o+QgKYUDDyhcCRlGx zKhiHiD3R;Mkcq)LFC0q+`#M9MA|R^TGP4_W9fCYNR+!6kAMlH?pHD0ht{0sO@UxE{ z=FFP)hq(gHu7}<5L+N|<-SaqK`%P!2ya&M;onzt_KWa=Y7Cj*1(H3xAQ&*9GR@Nf46d=0|nU&nm@QE{fm3zIW- zJz^!o4I>AtvW$t_-VWzw@!pK~2&aWVJHF3Y#KiXrf0J3kj-j<*b+pp%CZ?7jk1AZ! z8B|y(93LkhozaA@zjskHm$msqR(D<`B99jciY>myYIHRs39=xvB#1OVcx1emN?)O4(zd1 zGZta#8!mOBT*ul#%_&5|SpW zL+J7ZHMB_Tz!jao*Am@DSoC#9&dQm)Xw{mznK0{1>W!0*QG?HvL6mlWnTeY2W<%X$ zHHh5AD@KDW%W1Y!N^YjR&rng~Cnr-M&(_0|GWBZu>^X@>vqJ~su7!vZ;N&Zp&sD#f~ zp1qadD@ynpa(JHVUw?a%j%Th=S0&sb!x;hb z4~HwA;gm)eVjJY}^1sD@Ldj>W5+17jvU^O8(}!FhOjap528kCeEs(D|4a1SAE^i!UcfydL6sHnz?ZBeOSRAPK4!b6<#r}JG8{Dt99;}pjNv7(G$HCm=o zg;B-+C;h8GxjAB?B1*he5bBF5a`ySOfmCq`ib2CB;PlqoI0xroc&<~wC7Ut3-H-v! zOd+hQ&!oDQ;Jtrr1)|ZgWg!?Xi|wql0kwRvZ@_L{Tmt43i>z!*nT-%V6WKlX0OG;y z7nNQaj&s`Qz z)&yDGZYZ+0R^t?1n)o>0?nOCO1Hp^U-vcIx#rS|x8i%p=RSEi0R8V~QxSNFv--|8~ z3kkx9(bDB!A`T?1uG#OjLDW zZY<-`$!~caN?}trgBvjcb*p_AY{IH;Q@~$k?Q&rkth^l13&HIdk3t@o>;)cktUolp zG8aRs&r}d?EPDhP?xqlL7}a7~LMw|UEc3zn72N)oP2l%de3$@*#EIR(#d&BLv?!h~ zM%bX`5MOLw2JWrUU}n*jFf=6OAEp8%6L&)2krlhk*4n{JyNdx6YTiPiAnt^+tl*>9 z4}$_>>Pg6f^n6$PQ!J{I0Vc13MFc_~(8&G^T7HPf5V2u#6OF5m!YhT4G|Af5to$o{R+OZJAg}?qI+C0YO0WQ;-_ejOna% zWscA?DwyF178lD!Gu|G6{$ep&We=2@JbWD5&!`47yFJVO6EE_g3)WGrM*y-3#JIHl z0ZaF3`^JI$DAZqX!|YSz2as8mBnClaFvVnmb$4)Y8rx8h`Xvj{%_CVT!;YA0*lVDy zHOrm^OKMR@@(N6)Ty{_&yT*=q@d5fW_Quu7g$XBZG2PI%dMlVlHLqfNwsDCfX?;&u z2xb_L5W}87>L+3bi)7{OY_QybSx|Bjkt++3aoYxzle&IBN@U+@dSD55)^`JI>J+$F z`j0Se2K~w0E+bmo^ek)q3O|EOp^{meW5a^Pp6%OMgShQ8ACwaf#Z>`jX#KLcuIxJ? zn@#oT1vq;`(f(+$@c#F9wmZB#vD-h>XDGtF9F29zi z)Mo}3xcV^2B~I5t08(RtT*7oRM@goiH9VXmHxB7c9v6FclH(cagC+LhzkM zK(Y@Oh-)x$r>+z+G>6>i(mK@lTA7bgb3uN9s-=h=*&jWpAAo~DYawR9`k9zPx1chAyAV~a?9&(hz;D~yG09@Oy6e^3sO}_Km!{$PPW0mf^qS|~ z>Cy%incRpjTCyIQUb{L+&Pr43PNSy#^^nEILMgxUF?`aw-$5TktUh9utYj2YsLxXD z=SMKJDj&eNQ1S;d%KSva-8H<3S%fGV42BX?-KK%1iZ#u0mdJ~oTc_b;GP6iph**Vr z#26O*wy9BC%NPg-h4k3WxFrFk5qOgFo!H*%Stu)n@wt0&*O6apFvyb9p@0kN_u_>R zVz;o>$MPD8EyN1kI0uA?5Xy=uW`;b7a)rl8f!%7mfT>Z#&R-j!#&%UMq~)S9@1R-b zarl?a4pIePs^;q%{$fpB0C@u337B}%5x!FOrThuAC!Uy7{8_W^Nx3&Zn`DNJ)IW`x z2>CtCxeS+}shxtZOl6e|0UxSA#CpgqAg zK59koY&EKpCAgI=l-08&wdDIG6qYlJkyz3TAQ>{BgZLx42qsI0y*OJ>|EslRQ>RUm zHyoH+AgrsiWYLAuF+FI15nT8*?6BxOQTv!#vHReM4iT~eQ47-HG20LSGy=H$4K>wLBD5l{L4_8Xd zlX_9_9uF*rx;+$5L)-xyC_M?4%rEnxW|Mz(aVHu*4W|6LD>~hK+!T0&na|G%Cf|cl z3(5?Q?-cldDtJjc)%S_(35h05ojrCOh_eBAp?jR!H!hHl97jQ4y^Z9DZQVU!s=kXW zT|I8uK{k!96WsaTbI8SKJ#TE;&`xqqJe8WPS-6lp0OwaXthALUECZ<20!{1QBj>Z)9(FmH{< zIbk_`yR^)}SCTQpY^0nE_;?|>j-=2~kn=S#PNaFJJ6#%K?ybHBYZ8-3t6M0AWsgmq z@c6RqP=_!w?PH{3Ii%)vcN(=k8wQD{fKo}TfNVKuJ}d~O%>bx1En^j9Ayyn+5kmFS z0uZ+ILSX#om<=+Y**G!itq9A_-lzlj;RZ*lg%>_b+wi1L{ViQy=Mqvj)Z6G`43*oO zMk{I&Ck?Vn*&f(4pXEZ_%a7)Fw&^sbD!SAst2-U)1L;}q(-3tH%Z1aYJ9zZa@j(sO zZkpXUD}<&WOu>SnEr!_11J0aESAd>)=3t7yXO$992X*7V$gAxaATK8Cv^W#M_cq0S z&0ZBR`=E<|o$Fub2BF(&KqdMiW~&bQ9VQLvN%+h_2LtEfZQ7Gxl(~TZ8C9bYY1s9CRSA@VI&gw(KMmWL~ z0D{&DIDW(r3J-wk>PurV)DSvefzp5eyV&`PTrdDaj0d-ZCxY47OxP1ek#rd`)O8g1 z-ol77;DTM%a5XDyVvfQ=6c*&j$wS%RoA#~ueHBi!67UNeP`GuvIR=uQp@&(I7 zE^1-iBN_@;^R#*3z`;wqdv5#w8t4FnHzHq5wl7p2^vZC;|C8Fr4sI2v;n!G0715T`j5@YU}o zgNe-iR#7iN7?L2BQN#|3_5_)i7{F!7HdMf&W6rzG&toQ_4|AbW)=7~;l6^c_h_NBe zF$Cv(JY;M_?vWkfXg9ONMO&D=?Me%IMEiC4H<4=PV!;@O z07-^tNb(O@we8b}HIvWyO(v0Vh{Mo{qbI~KMj_tb1RQ`y?etmC{T`&6h8LO+VT4LPPuU6lHnm6E-no-1F82T{S$R}ruB=5iuCpTxh`zE46S_%J$1sBkt$FlBrS z`kn%MY5EY9Y#RfCQ|(Z+3QYs8RQ@}%((~~PBqbhe(DEA2O59a)ScdQkoCg|J93A!A zg~&xJMH!6Ul*{-Q#GA+^`6eG8{@uq|U3%A&+DRQrH+0fb(*6aPjWr%pCRj-$4X`$i zyH7rGais&E(nd3NL9iwMOIQb?tfR zbyzxkv6ZhI92#l^#VtZp9|1dwoyt;{w=|5Z9)^O%+kEG}8wQVW^PRb705qXiuY%jd z=D}D@8=-EY+XelhT1J#5LqP`i($u@+pdE2}1WuM5@Pr)T?*q$XME!kGrs07YEa?ke zL(2w*L+QjvGN?bNf*T$YbPln~j=Q2bA8D8-CxQm}N~5UuYm}4aD}`Z6jfzqf9)=CG zz!R3cCECFv#*!C{KmMNp)~f^X^ZyaC)sQ-8V)Y$A=^Wep`TrY>M8G1&h?R*t4WHsy zo!C{Hq|x|?Q<+KX?^cf`%zlDCHi0jc_<%(p!Rzny2!v!@fr|;W*i~goRM280sc*0p zoEL(KNrfjNY7rZHT=C>PiG{xhcyD$Dmy}cUeeqh&w!Ez$av z8i2DL8E`hxz1fWL>vK4kZp3#@wvT8|a%^qQz*2UX%sx)xVPdg1JU=l~ zO$VOPgOys74Y9<%_%wfd^kXk~FXyDXj-FDHj|)y4hCHb=g}4B*{yd*;j)zEzWSN97 z(19;|m|Pam8TJ1HE%Ut(TE^;y3j}`5ql8PrHG^LKWPSualWq&7$@6-# zP&)s>E-esc>Ou4zel#`(PL?6V$)@Y!U*5O~Mlz~oBpJ(YkRFIJ8uT12>Iw*1xC|jn zl_6xg3aj4%Ffk!Xsd(j8rM!{_4Ald|r3chl80nA9%E6OwX24Cq)_y_Xi-(Y1U zRhddSSCuarRyI=Qcm|A2T!(~QW+cmN#)$w2tZWnHDQeY7Rf7`I!Okzk=fvTTv2aLY z)JpuB0#;@osftz-Iz%b5w;=9q`EnQ_oDLXv*@J;(dBUviqH$JG_K(R?H?x3+Ui6#g zmv=_Mxme*qzUq|UBoVHt+#$@-h!;^=4Fu$lYlbpf`$T-JBiIQe+a|)z&hSX(ZkY%l zKySSs>Epg!2z-VM>=*$%)=C31W7BB61RoN@fRjLy!GKdDJ^#oGBVAhCDTmHHzOXN~ z)`7PvoXwQqz~&Di8JM0<<4v*+pe|+z|MCX}Q2+l74)Xa!NFp57P^qSLfXT@4&`5tD z89mn9S>t=qV@Wg7a9^i{4pUZ%brHRCFS^PB9_uFJV;q$$Rr&2plfGUSqhx8@t^_yIt5z4 zMNRHC9pyxliTrvv%Xg&fqCm_1qox~u^dhmpGZKvWy}}1NAjQ=`Jx+?^BBS$P(Fh|hTQ`it9%a!U)%a%W0^}Y#U54%TCAZ6A}Lvn=LvOT|JSAm z?7Rs5Tg!-{kQ;S@J=*($Vifx(=#AD_a85Vu0vkH@v$a5aZC?awSgYa^99Vwg`A9&- zDkCA@5)iT0=LQ+oy_L!V8peXBzahiQmom> zGBvslRH5l8sAEAf3&@M$D#kQ}_Dy>Lgmx9kvDXT#4vP8wiEYGw- z5)ek;B7>S+;P;yQqlwAuhlk5zj8uCH!WifLh#>9-e1=7l@^VwJ;3qgE^49 z0>hFr6=xa7Itgbq9kNK#XMY1XiGIi&2S#t^Q%_(zIoZYLPi^Ry1DLP^|I})ThXVO< zkS#Sf^lfT%2m~C9!3!3T0^3x=u5<*DNwirAGc7m4gRi;~uJnTl6V`T;H(*^CxF*5; z7Puyv8_&2V0mu|AbRiGW7lEIXJHSz-2osPdkwRD!YRm&eu;oX-RD<3=+{lec_$s`;rn{bFNt3)b+ z9nAd&vJLSOJ~Ia2n*1ScK*pu6U9{@Q=+=#uLF#j~dIrvJwFsiyS0TK#++3-H4T8G4 zdOvFAh~4PGH$Z~&Mm>;jUGM;cGXrJ_#>#L|4&KRdP;iVn_*sDo6|tYA7q@xK3Fphe zP>#HgfuVBf9sv#&arY|N(6>fw!9Nq&P>y_1U_(WWcVuWNhaP5VsGLQe3=ied69OI@ z%(rh~cj8Ovjo_D8I}Sez)GJuqsf*EJu|2JrYka3?_c$>tFfsyD7Q^T=;qt~Dht;(< zuhVo&y8=@*p+7H%Z1?|$AG5s&25{zgVD`mSVJu62LC${@VYG}af^>PoNMz5LGSg5D zx4@JoU%?tB#23PMhY()~bXg@M$=VoVmirpMSC}RO^OaqB{0&%E|NdC)1CV;KtYa(| z^~#%QlK_7U2`ju^B3XOMPhd@taF zfEa`HWyhY$Au>{|!`OVJLV4$4PVf~k!^L6)z@=xn809=M2WT^XyltFnP~$y=#PsP? zV2u7}Hb#FI5Q@atd*E~V6C&))54M6}>^2O5^xp@%JK7EbYloAT!Ev z#Jhb8%8 z7x1pK7vk=XCct903u{37EC(Y$|0;Ym?H;%eI5aB}VwUefs-?Y%rTNfy)Z+H6M5B+Pr`%Dyo&6;-6s+of5Q+@|cI~bT z6K1SfYatYy?HMQx<*yzPPO)d=AxcP_;_q`v$)cmng*ha~Zc%JG3eWriAA6Ao=s(7A zk@uz^9f+rRx|J}{Nc~faF;Cx}ifMBq4Fx)|TvQ(oB2A=aI2YxQ7=lH>YFP2)`Nv*A-d_fSVK7MfHKJbspzCT3-cx)NOens*Z<()pZpp zCEJs+SoPlxb|L~DrxWxsCm1VxPAT~s%17F}Uclr%SK>w|6GQ#zW9=w+3Vl%G@sJoX z*7~F!RP(gW=$8iz!pTx<2LP+rKkCa-V_&lwHD&Ng@?ZfBEaAb&pd6k$8peJ#V4!t| z4r(p1XC1o>9bUUj9}bTWtAVykw!q@PlIWgFBawQyT&>*)L1!QsHID%Na`a`wny;Le)D zJuoM}MWXYAS-2Lg1=qW-6nRW6WxnL<>t@J>@Btt4DHN*{d)Rn{3g%$t&z$r)dg_HB z2>w2VF>xVWdYS6xfPr`R*#+?Z&bCtgWe)C?J_LDpq$&UDTn-cV(^(-CrhOaO*4g5YI3^hs^0hkFgAqYW! zyBAB5g*S;AN7%g=Jkad+BTM34v}inH#v8Zp@cr zsA5@v2>Tv@XR5i|OLSfNoPWek4V=gjR=bD1DN( zDE+|t;v*JI!B7yNwOFd@te2|<09U&$hk7lMMyfNb=P!{G)RY-u2&aanQVARo9PsqT zJk@HwDd*+IfwVH-)eZHLc6aK@EfV_9>DAMgORLq?_*a~+x;{f{(m)8fca`*`t8AvX z@f(nijehu7&JveYmQSRzDp;is>OiKhAYtl#LCKf1VPB#1R&x}Vt1}OlLc+Zdgi!ee z9KuW|KzWzzT zZ-Uit>k5TF@uEHugh`3ZY=1I#h1rvqdPq_l{So<^1R}X45O?)I#)5P@io)-lEI^SL zdim2ZD}3*q{|av_yMjPAFGc;@0`Qpn+eB27?@UbCH~N7{DlO)$N_l zbs-|JcpNX@M;|mki?`)$+gGHmX`cs}=8DG+vgKc)MHe#w#J+f&JQ%GMIk$|&aaQD< z`v=03o6)CGl*1X+g41myKbm`?V^cSy8XcN($$Qaj=7Gph=((|ZifY3K$sZ~d5Zy4} z=mDzR;|C*#o3^>res{NMvUvo%(aOu+e1(oeQ-uvXb>Y@7I>nw{4qcwCgI&ad;h<7R zV@r!H!nD;*&N9%FDcFNbilmuT8te(%UlA}>(9#1&7WJDE_H_l+%og;_hMh;_Ot4ap zU|Xr&EDa;u*E2C3JrS?;3`|GlUx(c2<#w=I4Z*X0Xwu_YrFbR4oL=!bIKDL-pfdMe ztOxSh2kSl-_8t#XDZs=Y3;fR~1n88Nvy{RW&_`EPbq)fXEDi5}CSk$jWLY6fM1}~HCNSBrZ zq9ryP#DsoUhz!k+`Noe2-}aK za#)AkX~@&kcFz=K4C8+-hC~WG9v?uXcS^3+*PfPEsH^*tv`y1D0kIS3Z_URFT>SJ_ zKEV}!<5KvCOST0#%hQ}!;^t4YdM4TbM_)ZF4eR|a>H!E3_*?I$;CAx`@9l5n*FHTQ z5*HZ}#Q?)$|CYw(wI``hL8h;dkG=zV*8HYq`;F#^xNYP8vBc}eGtgC6lzKbhoLJw{ z2@eV6)vw9+Z$#&{e*_Rv;h*Yc2Jm@5xd5$dc1xcB4RRC_ue^);I}o8r4pW84jr7;Q zVcGF`x%52ken}ctef1@2v@7*r*VmmI7O&9JO-6;+|Hq)CN{_DB|wA|>n!rJQs3k38;W z9OGq(^MYN$P{cIg?`Ncx>GJD1a%cE=)de_|{5eUCLLdat<&gk~ zUwa(~UDL*1I<%*5Xqq2weM8c#OXS2cqwrl0LqNdWN-77v#5tW7kvtk5uc%-YGUW9C zFgwW6jg;a&*N++>G3x>x*(4)8mPZO#5?%fST-|7wEN>d|M(0497NKl1rR z6eSg9`MD1gMa?61BoMSsU&nt{?YVUH9oQf28)Km}kC_u`*^>0c>N!shf~uWoRe+IR z{|lPUPn^z3qch_kH_{KMGc5E~RFH)>e2_6ly`65o0scuoAWmf-*y3$Bf%GuE_#hxT z?3%7=I$TbbJ_R4}nMbzZ?SaYICl7Ci%=;VABxx&QZzg~C0{p9S#d&?}Lbw5#2JDXE zHOOh$hF_kqs$)0YtTgOL%rsxs!_H<_po{q`Li6u6yVxiPtL6(y)EMQd!%F2ybfd2- z)*0^j-g}7n<2YOf{3+e8TCSl{xha8N|1A#oM7w%8V>*gsXxzOfFBMuy zWy9Cv>$K6?QN4GeVn1tSVAwlYPJC72&iou}<(DEIj(McM73eqMUMri9BG-u`hd7fu ziUi-~(z!)}!DV7-m?0})LCWtsE|PYP_49*b?p&>_FGDSHfDH7T;j0?uh^<<#+%<{5 z;k`z_lmS*rqUMfIizmB$Sw+ofC{HR?Z@TqdS`f?<#(hx)Thd!c!qw*VtnOtKIGSJsyKaW|%XBrk)mCS}{ zN`#fOFiY5iGcChOQ2#y7aN<#b>rx}2=35I%kP!IPEJfU5t?}?9t-;wdHwJkMYj`az zC(5kFW6M$eEAJ03XazsUK0A#W+no`{xQ8}@km0I`3Y@-ytmFz5S|Aa7E*lDWpF#N8 z`f(R1gS-J+TvR24MSP;R6}fmTTF^)yde^Dw%sX^o4+JKuTyV_{93VwRA?Y)-oTnwj z(Le#-%ls_^eHG%S#LG1T<5BJnL6M2=8wz2fXpN9$iZCJYYHII=WQ90vn^91iv=+qO zao8lRc^?N1(K+?IaNw3Z$B09zs71a%8YpVfs6!E=F#?0w#>$tCUqi$p;?)d*2qBie zWQeNNmqT_0ARnA3e1i6hffiydaVKh~e+8#df$%8*r5~t?tlrSA;~p2?8FSoGEB%BZ zz3W5hraviehrgdPH~dqObqXefkeHPMH6>eO6e^-EEZeK+w=M6ZOX}k=dNu4w#55H3 z6)7r9(SNdKM|RLse-tU&CIKi@&+V#z5|cy3%Vz*!=%EaEQt8nPF6sXt*}h&$oABJ&62Tyat|R^wm18kRDVF0BRBXlX7E z%1wUTP)KGDq?bwfnuHLrp2dMBunkEyEBQO%Pbzl~ri5%0ai0si@n?hyz>WwrF-#|y zJ&EM5LW=zCspyH5U?=EV?^CF_CbRCVz;|LcV5|JV@r5+@LMMnxF!KWmviJMnnpp!^ zyuCAR99~qNJXf zf=57qTy0|1r9+S#ioq~X9}YP#n-DckhbTyV-{OTOa)Pd`vIIu))f<(8gW*dYXEvsz zm6M=OEG$2YffL`An0&G#gc$i;43|9ls-n@XddKABNv}-4f-OEuHH4EFeK?r$4xIq- zkhb7c5_J(Dn`{-7CF=LDKW1KkYJY)1Af`25M>BIVs-n@tx@=7?WEZyM?ob#=Uxav9 zFfDAQAZNs*x!SQb2vN2WOpA|A9%;5~DhyhRZ%Q;Z^+Xs@UcB7qZwG6rYC5PJ@z_|0 zFG5I@#mZLyQ@?P^|K%|(+N^|K*$>JBRYv$s6*-ruf!QT2x^~Q~md)r`fn{xtNWdps zfb8{8;^WFFz9hhRa-47yiau~Xpzn9!fd{S~vXZh$|dCM9{ zm)~*ogAawv??EhFI>}8df)~<`e`)>1Z8ja4v9S3L1sW(sxLPSPe zfCN!e@1)fWmHvE@QXHXGbifh!FcmmL>*=zb=izfojjoVSiYVoVBgBK^&Gw@gls~HNWg4#zW7|nm;8D!UW*pYqPX5A z^3cKnB-Sl4uuCZ}ri(JLt7$dgXPz3Uh3NA|+>3;Tbk=dZoeD0biVpr<3JT_0KBp9V zM--_Piu>2-fVZoksMnj0hH!;&$@TgeIf%gyIIg^RGCL4w3f*;-aM97Mdy^x|O-g^N zhg`yKB}&e{QE2uTO3V9@bUBP`z0DC~qk``SamZnWh)Ql(&Tr@M%i@M3!9luweJm#k zKCdLWt|Tym(C15T)g-(You;SDatWIp33`EqE0vt0Tsw|= z`sEEgYmV`P&a?N7gaaaw936D$WDS9xR z-@tO3%FdQDCWRvdxM$i~KNdxBP&o%xvd5-ePG7@em28N&k;6=Ns72djsCUeGzL1B5Xun-4sPA92Y@fHk3=>3RkG(6V6^`XfZB!~IhJr(`EC@jmBVtMfz<)S6QD+h zu>+}+Vl4HC@B(7l%O7?#Qt&vdH=VyIjqE&S+O*`k2~(%eoi;sgIu-PWEsy>YR*&j| zm!$7q=$XqBV4+(f=&hPHNn4%&jr5_0VkZHnI`MnSOdg3|fz|){URtQ3)_0*m`}RvS z{5>*x8sXX}>tK`~=oG6S$ui~;I``v1$gIbN8ht7xIZ~PT7a9Pk2SY1hMt4~494wdI>TFEhLgZI@YZ=a4O+d-~)~}!3O=bUq zK6B;<41%p#7fz)q8DJ>bV|{(9loNNFGYes_*E|7W)tJwqx^nJY9+WWXafTl2fKKNA2;Ex!z{zlj<*bZQz-ZVE#!Xt51=8Z@ED)^hgwQ-cT8`t`ce3aJ z>uMMdPlhlkZMly8wWGplZz=HUCEpJ;paTmEdK>A+NzWjv2wn%-(QSZAg&pLoe`d80 zS*7_Eg8cgkA|+u`w}Kz*uiV!bR=J?a{ZN^7Dh`nDh-(-v-M=u12Hot;<+8Sg`fXW@ zB6(IKlp;1jh*Nc82`n)Gqhtvh6x4cZ3C3>(mNB`#r}0>NY5KjrC^Rh&K!pw_hv1S8 z&5470fPjtq_lOQK4F7xYK;6Pf3+o35sV|cHh-(Cuz6O#1?)t${iTFq41FUdS>AA$H z{)NJxV|&97M;U!){v)2yw+Md~#CKBx_yKRn0Lok145jHMuLk-1Wd0-m0amprCG|5a zjX+e7x;q7g&p8PDwhh<frXGvXA)jG}sn@aWU$tbE>bdg|0*GuaZ&op(j0h*Q^e2)HOF?LF12SY1Ms7{cjU%XNCQ73xdcU*61UczMaRwZIb@dePa zkU`e9A%HG?8lI#mS;g*I0c-0o#QA8jci-yQ56Jj+&{fITK=;c3XINd2JqQ%Cb7`T9 zDmN_|pC0b7!N%z|(5-jbgQK)G69GO(g#nl5?3x`ny9H6I`&7(m_BmJavm5-R;?XBZ ziQ3VNtHahouH)LvNP8nv++`cb{=Vq&RwZi3x4+|Mba++bIHM*NRVWC9NE8p0>uT%J zXUZaWm%t8#GnS!uq!+p)(zM5m49&8Ib?UX8=PsZG~oR7S$mdwYmd-z8nS~KJ*0^ zU-wuS`qEuY>9{+18#}I~3(gtfDz?6p=0Tgj8XZKrpJDk)`x6RN$buu~7%`h;bkGC) z?wS7BRMNrRt}zY{FvQ64VYV{^T56DNYU}4H4&%P zEPt=RXQlp$!j6LCxxaw2I`C_zWB zjx5};Ht3c|`@p}=k;2s8W$qwAj0z`sw?eaLQTmXL(346T2h~cA)n8K!4d-Au2CqsE zHIPjYKS5keZEZJZJ|Bq#w+s4R&?K$XScCo+3Tx_Ul(vii-=kASP@0ZTn{@`w@ox0j zr`q1?cV$%nd|I8gAp&Z}P)`fL3Il^_$7bu)HhMAC42M&LVcooTg50<&XXENJmj|gE zscx?gPLW`>;F=db|L~j;?J!9iL@&A;&D96otOvbaq^M{*u)xs2x-8H-qnBo=Bwo_q zU2_Lf!ciB$>a-ZEw>oe7v?TlIarWPm>}}V$C5v;gMs&PPYVcI>rSoEz>p z$jJsjhs5Q_gsZX!Cfl#diMQpbrC%MuetS`~NCsJVmwRm8HtQ2l$!}0fo+{p6^F}S_ zUR=}6O!U8(@@v+JxcpJ7tijOR`ac&UQlXF#QOK`snsrXx+}YPfb5N9nHSc(F40fVV z<7H88mQ+1@l=X&&oIzOf$D7>D9lJPk^@jga)t3Ff#SznjbXpb*{N74c`t)sl#Q@yv}r89+d*H3 z!mi*O5I>Y|T#u8_SRBmsy?w#by8xz+X>5?bEZ&M6b|#-+7J-)zXEJ5oz~K?Ggw3}~ zBT|+yAjLc|1xoK5@jWyiL#noHaF(i?QW4ewZj(q+o{kqHMa{3+b<2ZrKoOAz7Ns@b znh1kt$f|7>{@D_s=qDaa60B)dx_=qq{fS0*)gxJJ=4Y-a(>QAu4b&|TlI_uq`UddT zx^dPaWLp;CPKHD;Z)zWBT|q~FhZ@`QbuRcY&xK)y`*dDtSz1Ue+(e|qAV;D#wCoe8 zEtNlnwLtFzrrd6m!2;uQanRB690A44K6sls6Q=WZRPc=t^nos}L5Jtf0y*ab>b{g8 zTQ4E!L5pwz!AE*8fAXtez9r-2h7=J~)`1J_RFO4evzY zM5EmS0&dqRj71xW{A;YqoH4-)^(uF$RT~ClkBtmNSZgUvlRbDY$X5*)Y0GEyF8dfY zs|o_f{q|y%+%P@`E7V_XGOxQQa+T&`Og?ZAz-J#F4SO-2%oI$s22t=k%K+e59_Cp+ z{6Ero_28)D1N;dW?EdF}X8G!s1Pp9_Ma-Be)5IqblxNo`u?0Y$iz8(*J^EVVVRMMZR?;W<1}S zYrz93c_z9u^{<6zETq8XnG+I88K?*J7u-7zf`e znJzJuU$7F#l5V4+hH=Ur;_9Eb8F(&Yt{nvnJ##$Njc+fV5lV(yJXXDc<6UGh-nM>$ zGlDJdL1ZOi@3x%BW9Dp3idf$PP>fr|v-jG=NU8kkAVurSE?h(YR;VAk2 z&{5~l@`h}PMd!VW8dxI6VtVs-I&1=_U*&w1hGQs-WTG(Be}o$?dbNL7+Pb(GDt;5> zN!2{GNKD42?;k?{j#`Y<*z1d6^uTHrULN{Ymrt|?8eOb|Efn^%yP4uHbc&K4@XmAv z4QVsLt=!SAn22=t)n$I}FeURf2A39&VrTZXT| z58uE8?cS5mCbb{8e;(bC{hcsr?OpT~q9@u1g~Q6f#P+k>PZWOdJ?7Vm5B9cPbuL%cxi$DAq>+aGJ!ab9A_ywCDA z$K+6cE4I3Syv^g_xMJBwz{jSeOwuz@i2wvs! zfWox7+%XuOT`FX+&hkZs84(Q+=6E6Z7N#qZCGLqs8nb^jag zRd`9(cyC_Gsg+KJMJz+`gF+|1GdITmSMe4ei4j{kzIV|b{WL*kbLg_>SJ2SX^|4J6e>2-zmkF zS2*QF{L1l)Ugcheo~V{{<9GM30r0hv$0RbSGbWK`#nZ%lNo3Ajq;rzUvK{|s{e)BU z8x*X9da4#5=6hV4qu%$I#88L9aybr5{c<^Z&Ss;_&^T6GWm?>UiI5B8H+)SjthvG+ zi}8J&AJJ0oU(S6!^6jAP`Hb)eVnE4uV)5G|jmT8?^Dwr!=v5W!T6kKW=N!1K?xO0P zon!sto)d$@4V;XDkq5O>3@SI6Gie_0%pyDVpJR{DR768%RL!Od#q!MHW_q8*M;xNO z=0+vW7t2ag^l|Ua{b78cw-S0Z*1C^Idk*MDZS3o<)^`ekXnWmtaBCg*ySs_rsa)<& zUmTD1rAJ#vxOwDqIk=Wl+&-_~>gjYKB>-FIN4;SIc<@-(1{dL7Iov`O-i2;-B~I&G zHZSBKq))}{XplY^K`9$Tz&bU=f^C0();JI;iQc*~AD|Fl6_gQ`%c2a?>mpnc=HR|f zdH;wAhc1ms3UWJy-y%iKijr{o&Ts%{ z3!zA43jqmj>)C0l_HgjCH3l@f}X0dsN^~kewKUh=ZE+!sCnz%ESvcd@C zKEz|rMcgfcp=r%lu!p(GI#Xbry0o=>ZNg_k+eqODII!Ezg2@iyDet#@l=PKjSsukHgzc`F zi!2Nm7QkLY5xLK%K*GaesU>Jw+ZyBoEDHc$YBxif2GX;c>-~}4Gz@s_^+$|l=6M#H zekP$?=X*sl3Dj?#wI9v-ve2DIk9x?RG?`w$v?^h&tCvGslQ8#@^tB5qY^l?N^)g~S6SXmACIbk-!!9_3e2!_ytptM#B!UFQXx1g*%e%4ocZ=?XnnSwh7I4j@e8Hw++?bUV^&um|s=KT<+j^ukQalbDQe;)U% zq7yLgwatmr4Vu$5yQdg&lQQDswUcg9=oh**GAaP;_WVxnwmAFenA0?Hk9DBBnJTU= z2^1$GIMK74!V|Ym4~G}1WX9ZJ&^sIyjYZ{>*tTXd@Hp(Qti!KZJ8GQ3W<@g)M;ShV zJGl{$ibpZ>Un183WxS{J8)d+wMLC@O{t=(r5#BN6a_){fQ=E)c_Bb)oHeaTOc5Kl3 zd0w6Ri{a+)_WCwd!cnEHD4y#bR8?Z(2pFqtq8-Ql0;%bX1zMWw27w;u&@q{K`h?s+ zeUK#v(}AD@zmvSb3Jz4;Xzn91!Ib&4tB1d1E_R?`n_s3lH_zZs;*FSFA6I|yx^<_P zx}UTf-KHhRSqBfH-2K+m0w@IGo6nEay2HqD!6i38H{rl0l?nSvqwj zjXYqT2pNa{fb~CJc&hT{AW}|Y9Mm}4LG*XZJ%FaZX??6q4k$jp2IHMZ)j{T*uDO`#!qsuAYe0B`;fVggGw7>D_@L$C!u5!IP4ZgcAd zI3ugGGUXzCakspWy}6$CkxSrBgKQ=!ItcZ-((myine|IWkt~f03Si{Sn z#RgaVuWSREr^h1hCtz1Ko??RM1`=fYW}+7CAY5qR3cE0-&ZvOd7v^ainI)V21acQ9 zb#jj&Sz`jiTK7&x1+L;Q|G6~~+K(RtF`-mx4Cz~gKnL)3?*_DlMUJ_B8u>?QF9QHO{^!_ z;s-j)JOe7AZ6_m@v?W7=Ei!>67c{0b)EeuVpyM)Rf9jt>v@iI?sdp?;6j+a*61{9< zyEnp)Z0pyoYQuczv|mC&FLoPfApQF&QpBrTQLHq)_9wi}uQi$|&3z#n$R1b3ki@*q zB;HN*P2&zs6w9h&3~Xqac4r26>v`yiq;5iw8h(O~lJFc~T4S9~jmhA8$>aJg>L?rN zISkfqMn4;-4R@dIeUKuVRS??>+d3J4fr_kW5>cpBiZ<)ljeuPxE1D+kUDfo8a`f=O zpinG~>}P}_tZ^r*XJ*T@BAHD;8*MoSiCe?)hrzjbzA)_vH7Bxac?KkB>=e+=rVl{O zi)3vZfI=4Po#lUlMJ(b86G8Hz=3tVF5i@&0w^Z28&FurCw;^n?o`hwfdiE4jemMzg znLtloJRPMmL_2lDOjMF>=~n)cfxAY8RWflb;+6D(rCkxP?TuV~ibGJ1^3hpPmOf$~ zJGA-4+mWFOBM= z_9L$kt)t4KdTGnL41z3Cn+~e*4^V|^{lUb{KcAx0SX`)kUw>Hm)&SoYss?DIv>#4! zY13wb>ILOVX&hEjyc((muYeuw|B-bVRkelcuyV<^y`k;nS=vQjd9Z|Z?}yx~-p5Co zRta+W9O7%92_~<4>nO^!NZ{Jff!fUUdSo*tz+FdA^IfGEBoqydS!OE>lom1?9Pibu zpk;Cp?A40>i`;1V$5vnUHx%X_5W#lMDd%H|Qd5HK21Y_$%eg0yfL>D~fRWb2cQwbfN;ta%!&vzD{gC>%Z)oVDIo z$I`4%t$X1{&iym%dumvT#qZSWfd5&8)I;u}I+E=lC4;E6>%)PYg_Bwc03~2q>n7Px zi+wHbD07pT#&{kYSNfpQvM0ZMbQ4Gi&?9i`D2!2`7tuGvh*(l_f*?5j0RtrzBqV$=~;}8IIwWF1QG?5eR)ecYsmbAa$ z+yil7vbLKNlqurCX04|Zkkft=tUkka4~*>LI#jE$U6XBzE4-ue-WgFBSNOXo)_dnE zkI#QQ3I0fXc2I2S@7cZy9(Z&4Zq~?VcXn<`2Qp&D(v+()Q@M{j(eW>>>!@fg2$Y<) zIEX*YcU!))n!Vt+Va@u?thwnK8LQ^2sN#;bD;@vJ3hM$TqYhP9U9c`tcV^NepN9n3 zbwOItV_(3+Ps5Z9t>(0vo_`*?`j2kcd$0-GWe&fBDg&aok@_zf8Y|6M0d0&WU?a5c zTLG2Qix6z)U$kmH9H8P>dU3e1yQT@q$=h4~@Xgm<#F&@Tj*Y$iJYH7l4Hw!oYIp=h zZ)Zmh_v1_q>N^y7$?B)kyHMXAG2Jz0@!OS>H^g8AdCHD;$Z7ZvIyUwxsc z;Cqj&IY;>sz-#&A&CmgsG;NhE@V6={g+igD>5hTjCd2 zj&}K~dOJ&S^v|zo-n|&cK1z(GqGSiSR;BWwl+CLl(ET5jmTUx%>iJKD!)DpfZq6R@ zVuyGvRgkY;N|&uB^>@~RU4KUCz05bqYgjHm=$Iz_U7Ynw z2iN0e)(l`KUehPu+Old3AhDo)sdP~x_R%m9GKMSGBC1&YD7N#=B5clAAXpdfj4Fnd zf>vUrk>#p2gIbsv4c$B+l+;!00{KzEJ+OTk=32ReGi=n6C1so*?iT|JV3o z0yg{j@#qPrlq*vZ);4cD;Bk)wb5#E`#;fK8C?0|0Y2(L?R%;BUJ_!;>I4IDwGXi~i zsDIf?@N)H2a4tw@W@K`NH~RVU?IxM{O?{o!wSPpVT84sbGO>l3HXSk+?%*nZvg%y} zF?rU~fgnFWar>;Wsi+R5f)l`3*bYqB0os!8?boZxa}sJQ{+&q zY)&zBrk_>~F#iIeKsY#6HmAt9kI3c}`F1P4^E0@I_q8o5;y#7`!|R_VR$f>4GWqYa4f2c zfp^GhH$VS6x<^ot;SFX6|=JQUu-YXADRB?#mEgaN{G3vv^i7p3!;MB(E&O~5bP6K%c(uQn=9bCSkY=vy6V((WOF$c zoeN{(Wd^2a46jdudGOL6k!2d_D_*lqfg;Wy(2H%jxdLC_Um!8kUQB{x7*+(rHPe-j z{1Mb0s9zWK;zY0`jqRWfW1Br7tp5|1_9|HWw6q=RSP#{+B3Mp`&FRRWNM|_)qVwqE zA-bJL5QLfhWY`b2c!N1!N7GMW!O8vF+qkndDwb@n#cUtr;}eTR%2<8gppHVO#SeF( z6)q#(dApl@axq-vn4Um^>L?i9p`OqVhz5ab(?sdit@QE9#aNI&TaJma3Od+^9|l5! zoF6lH&e3VoR5bY%GBD-gYs>e;E}=c_3al9$?z5D;`NQ|!*_Lq;)M2{Mwhx=d^rkF~X~qTDkaA?HEt z)}_yaNY~Z5LieH)>NYjB0K;A9YM|*KqDQOt&M>NICXt(R*q2xR@*T3w2FqVaB zwyM5E-RR80KEBZ32P``4x*46&&5T^#9L1Kt^fLo5DHxgsBXh4 zn0l*yb|t(=xkZIj+QPL)4~MlnBi-eAweyAUJhR09RsnbKL3l zr(U7zyL8~uV%T21*((B0F6xrtbErn!8Ixl8RA^ClhFVRb~YYZ@4 z;A-ry?oM%Dy`VSygRf4L?@n_%*`a9|1=kkBT3d9ql`fC*vA|E3Ka5l!W9I#ksK9DZ z&!}XN&hKJ!gV8N`cKc|)U({&NY1nAv3jbP|-IYQ{MFmW{-i$anPJrWhJreHW6N zM(uu6xafFj_M_EloBZ7D*Kh)vO|F4aTPSYCqfj=!-x-7B(X+ZGFlw%v-kR$14%znW zL&@AF>JWu~A13PbDzG-BL)VGDow{-N!!0vg@!9*4iCf zUZFh!f=YXL7Cx|#Mt~o)k(J2yFM@%tEAjqi-XL2l5lq9S83=t1*oFmp`oGDz@+gc~6fJ6uX$3yP?O zT?^&!DZM*x~gcmBd}i!AL|2!v1RR5tRY)B=csX!%+=>QTu)% zB!Ifv*r=|fsZHw_BeF1f*uxj}EJqQ|7jN56fYFoYk2TOFWWj7AvG&+>J!roddq)Kc zx((ayy`N$KhWT9TLSq1b4peBEmR4lgRrw_Ic^=EvgxZa$B5a?#@lBLN#m^WGTdWqeu%P>~L0W?e=#XZ!lAJ!nX;c!o$+TS_|W{bMvCQW~g;&1l1ZgYd;apuD1 zq{+r`yWC=Z7WbHvbTv@}tVcE2ag4(Jr>`!+qcWU(B@9J;l0BE2qqA@$ws1;7d4o?h zm2E{2A+9K-9*BgoS`GSzgflu56oql%9D^B3KE5bb2lrBA`7`sgG3aXC;Y&V0hUW$~ zc&q+w3>M?P{BgUHQNl|efM7nH2NRMpnBf`XaU-g6;DfL(owdZB#yaE9S>^L+%vq;_ zk{65ITuhFEX6M~2P1?o~Iu>h>@Ft53d`~LqB%xVCJG|ut|Fm zvbf)j`%#{&;2F5Gzn_@3Y7WxWeGVM7Z0uvwV*VcbEAER_;)BeDM8{e=PhkdZAF+YmJ7vS#i={2}?@i1LqfD3MoKch`r4(JW2-LVS+s9X|( zJE-{q-QZ>MygojPvdrF?k9imZs44}UtGa8TYe*Y_9h=u-|B?5O@Dx${#9$axw8hx@ znuNu9a9m9JtcX~+XvZy_!>?}lqE-)UNX_aYRyUodhR!aT*h?AZdGgRd1?%%$CJ!(L zctT7Wuu;ff0CR?jxkK?%UGY--b)>aFHnMM>IAo5pmS{Zbc<|5_H0j_vcbYoMeIM1o zt+UkF60MmUm@;SkdhU-Xqd)wWTl30afObON8<@PNm3g^fY82FQlqN@J^Z*58Frf44 z>8+#k2stXl$0LG`Imo{Dmfa7SO<(jVt}$Ui5Bsl(svgl{k|9Y~{LkZX^;xuCL%X{& z4wnyzgy6?c!ALs*yv}$QW3H|n0u%m$k+!}D|HAL)*~)7;glVqwa`ExI<&19?Jas0U zL#eFH1w(A|7C8uqdt)Tc|0mX4m9HY27-!SqRfSp^uhJ7EX810Q!j%)OxTao%b%tRG zY&O+bK$khKSAiUb>)Aq1*7ywc7Gox0RPjT9Ck})vR-lh)U7d$75!;l~c+_R4N~u2Rz=ksJwu?+*Pd`y>S!O>V>Ow1NG&H zkyz^A$UXjn@C9^``r+WLGz1Zn2jQO}%w8dsb13#mAd^Rbp*0leO(Yc)ulq~Ft zFuBJ}=wU7KK_7e)-J&=EO6E>i?AJ61+ds`%%8OY+ivwMErZ8sPnknDnd+}Jy2Rr%4 z&~u7VoWfyU$pdNQRdkgJAvg|gd#SW*@b z+&$O7$2>DH`9sl9H#so-5+{P~d{C!MXI>u&WLB?A%|oFu`aDKw!J3(8 z58_m*jy+VQeBk1unNB;5o#uwthlBa$F0cYq#Z$*Pj8K(ppjakG(dz3EV*8EJ zkyLps3q`?Y-ZB=#Nqf|a5pM}b!O})-00{pfmPc2j$99iGzdK~Lsr=dPsO2}NqVr6| zsZ+{!)b0AmQ5VzR!a;6cDkx>`z6T}~dZ87jm9N3#{^5BR_~jXladI4rqaq3Ekz z-W6=E#ifIWD3okF2Q(cXhvU(`;9DHeC2v9@i0z+-OlvSDO|{Oaf4mH{@57g2A0lL$ zwL5uy&pR&5a4%-&G%UgVKaMlQ57V?zN?tqCt0sB6b-ISCS^ui^)PevHT?mB9@>GuB z>Mti^n9GHNS=PfP_;(g>*vLSyao*pc45H1it}+P;S(bQ zUY-b@mPxMe<@fS{_9c3kdOfb^#NUfixt>2OhFdV2#Uix&8;olQ@3qEJ>o-^iRI}NF zqW?@qJspgtNBAtDxV(p({AshSrgAszb&mZ3Q^M4Ja88hFz;K`c6HX8t8?cS?`8~K{ z6f+TWt~87Z&{hZ0NUIg2vqw0N&~c-P_WulBwtW7qeZmW(a7CqRoii6(Jf*l;9nfGf zQ25-r(0k+ggqwGG`5##QI~sL{a_1x+@omfU{~%s&&4ZY}-G_m-?TiVxqW<3ZESQ9OnSZJV9yA=h{fK$qb4>96YKVN{F)CXRHtI7EM zNFF!Q+u~TVzh(%<4wz=e9w`{!?b=gc{sO9yVfH+)nn9^JwiSN$YG$NaXF1c1%lGGZ zEaFyDD_?FayP2vC9#qyH)jR)cFSi=ch1PkVG%64KXE`gdT&`OI8E01cV$OaX{d>Yw z(93JSw#p#pRXJHGichLm;v#sKHJ2>nJT)6{`PU(Y*ZHlo0mi;;EAiHJ4|E}_o|u4( zF)OWERDTug3d>G>#y^D5ndtQPb=^Du{b z6pKHx*^;*s*XfBaguCGW_PTADbdKMoBlGz}D4|B6W33N`a;s?-s)o2fgOlDkirhOd zn!;yVv8>pL$zIBj$f%`!0vhouYoN2uZWFsJ_I16ShP@Ng%=N=DT&JJO#3VPdZ8C;e^|#D?#$)EA%ylxti!*HM zB#5o!=LBKzBvw(iyJc79_C1uES@~9fjXD=p%;I2cs)&-Dus7Yqh!{ zdZy6YkFNg=RjTGft6sBQnIkQdb0pm+RF(Rxb~g$%@wO%A=|%&BLrmS+By+E{tuOXH@RiWyhc-3_6|r?IT6E(F*f&Y@_A=p0HTs0WNKB93 zb_PCnIw-4{F*ri?xKJeXa2bfR{&+L*a-;=dDpT!^o!!RTK!ozAn2cowLghznb)=-N z!tg&D9YKl%bNtqa$6~1G!zRUp7h$Mr{(9LhvmLR$&{TziUug1_oq7mO{4zSkDkETG znqlGDl9@fy32my<1`J<~Ik6ZaOHen&=13l|>)VU4S``zbigrv}+W*FMOVN2@-5>EL zW*vEAW91!mI;BDdhW!f&-EH9=x&245EHu*%r68ZV8Pl%{);$-yE6FR77h$F!E(36) zbPaPHUPqUIG!9>!y^07-t?Kw(t8_HBV@f&mb<;4gh7V4`76@-K)F(lYCNl|(DKT3T z8b9Vf7{QzVja?k&9Ep{`#Mx3Fd(3MJo8nC$mq3xNVjD_GFr{aA&lTgb23Pz$doDzm zI0cLIiW0~H&JmCrZwQ%36(Tj(+p71(LNdXRZ}9RKO&y~oZ%hP}kq8y%b?rY6z#Drx zi2o%<<}|)OTE4YMfa;OC$T3ZG?JRw;Grm|ic(BNMfUaV=1fd=>x|fCO6d>&GOb`kls3-} zUAb|+OzA1E{^Io;I&#%FNOJ@JLnP!u_$a|n3gazTyqEFoO69bTUso%qZT$L(a@yAX zjk}9xy*O>7rmHBL+-trDO}H{CWV}Zezhz34#D;kPTXt8Hv$4M@wn)V3qS%tMv|}R2 zRzqRU-v=egr<$o>IO8)1)!D+n;w%@@?kcg(R~`iOQDP@0yck7U_WO3=@;PPGn;^ns zE?+kqRh>2cG6!IXq$&_|otQ5nJu!(lo6#K0K0v7nWyj=g3$dk$MpXV56t6x7iLz4M z-b{NMZwX&5Lifrp&dQ$V0{ImG#OyKUN8cE#8jdEEJk<-EnL*ysyulJf4G(Qa^E>50 z(!95lavEDdVs9nJZo%}kAKC%-R>CQF7yMv<_ieZ@PZImkpS!H-^kBJlXN{h$uWG2i z4K<H7 z8b`I*2BowsJu%093duEpgH>f^Ew(w*_>)cC;AR3w)k^+kD>uqKt(iX?zg~$h&AS^^ zvp#wR6Ts$`Ce18LEG~m(`lqb{I89S_OW@Q;j~$lhuxT%*qj5!j40P#f%zK(fVA^nT z61G_qDy$|%KM(s|Mr=jYZ!6P5>m+?ba9H`% z;HPXY<^{q`O2X5aRS)aq;Y*h$K<6U7C#FI12e9k0;5@Di6C9HuHZA@TRmjt1oQOS?^*L>WCYHO>nD?KPS@R16E^=_kQa|4H@Rnaiz3p zt)7H$4+?wMYAyfWy0L=_ls6wy1n7!|iCeU91Le>+UDBXZWso%{rH&zhqz zSyMIi$?Us>yavY&cz9)c)_|<^1!OvG9nv#>;X|>*26q6RmMj?11w@l19`w1p;@t|W z*?8ExLxW|6XQcOIUg)iaZy)DkFTRT(MutLz8$I}nwO??eo@Y6(9a}K!ZL`C4_!aCT z4VA%@L4qHAisuLVii4lVbcbUvmS8pZDDtkh28HC{n}b!;6zb#%&S^$gTLXi)VUok) zl`^_|^fQu{Ra*zaJ=q?n@|@)1HHjssLrxe6&M=i`$;3Nd!gtVLh#qX0!KY-fIFDIGOc?Ra!SHhB~sZanHV9d zsAUDsl=Gmnp+RynQ-<@%#m_nkUnJpb9wQ`tjfATkf-@zz`CZcaO>$Y<1%HJC-{8d8 z==o6@8w-k@ZT3aYkE)B+9|~X$e_6s+Mt91DRV^^JA}o^`7pof3Q8VBx;b#S%4V||R z-jz8!*M*^nB>bX;t2qvm@GD*LlO;npBwWoviLX7c=q3?$=ap$rI=0V=1%r6l@F zxSDW;lthe#tC9<)qpw?o9-J>TsH!=t(Oe~bjEsg<#ZxQuakqqfOZXBAR}F)z_}&tp zrlrs$*1*9TUE&>**;&;kod+a*otDBN;DR@}=^3pUlrw5?>X= zpXk}Rq8yNLRbTF9$#;zc-_TLx=E{H*T?jod3-XgLgyJN;xeI=!WVEFVe5!==&3Jwk zhM?LKB@5U?Hhnb*4jI7?b1NCxT=<7I6^kDz+L&{D1ZZBTeTUtG#94I3OdM8MK7+lO z_5(Ap#WZ0B=00hdM<#p&J#d2%=w~Yb3nyFot=L^ksRd}$K4@}eh{|12Z6y&ng;3(7?!h1c8qqg$y0c3s-87Rw% z!Q2h2S*r9~gGDSKtLGQs&@F9OVF0`XGbiPjkmp}sck4!zj#(cjT@kXIe;w*B&BJnC z%Fky)_47posF-kynewU|^7sUHz?u{X?fKtgJFsa>Ht%t{nl$BP+>>omf?^gIo1i(9 z{WvmfnK~TvsOY62v&sz0QFoa%(vQ|789h&Q)H5M1eUxSo-M!`Of5^`*!{N=7e}=0k;e%C(^=kI#C8RX*T|Nmve~azDg5j!mX^H^fOOnH)^s?_$fM z{&(bXe>KXj{y7}we!dIh$(lSD6R;#mIlpiq2=vBkz2aS~gDOAAZC+8xVs9<$VhT2( zPFQDnh{*tIrj{ZOAWNx9SlI|))54i{(>|=&#ClG^@~-fb*#~?5ai~*1Zc*9qhhSBkL)M)kg}O*%z?(xx=xxdKJA-=}fR;{t$a5B0$`S&&>qU zruAHZm_S}n6q-I0lF949s~d_%eAQIME$vJw26Ais5LswoG3q};7Q|a!9}viV4}vOv zY^o%h`4N&#y?-bw#)-iaR>81LPN;=rh{P?iAi8@hWZuHtJpxw2hhXiTMtn+uiq`;< zh}7Euz#fLdXhIj(0Er7&i=blYr{5Ki@>U36z}AF=yPh+us z%>2w+0nxvT4U^h=5KD3gto>3Ns>uit$m@W`U&h3?h?|Ajo)K|NZ({Ga@neW3m))i4 z&p<5VExzL|^9-05u)574P=7{6Zf8%FO@(O0d4D2tLC^9DU=?Qrk^8F)B`lR;EiBEt z`)5d4)dAFiwhvHmEo)*WtnL#vAxr!i)cHmTNTh4&2azUpe4aCwBJM*-GOrPos~(w; zY+a3l)K8-nt2$uq1F}W#*uZq25>e%N+%RsydSjA}^Y*@}>y(d!3Jgdr} zqT{Wh^KAqgtL0N6k zi&^l+QOwjBR<)&vUfWkT-tDN z+VeS1o(0t=FEo?-&mkn;)Bf1KLcP&!rF|b31ku6P#i$Vy8{{TLsxi}rJjl9T4^9M1bTEiIpioEpJt{1ZHOF%2L&}-|g46_F)sz{q*ta0a zpiOq8YpVwb(yY6&g~oExKHx@^)7%5K^OZ!X)Ej(%zS!NM&4#PEX+eRM{3g0vQSTc1 zz=EI4QkeEjeJd4$nt}7lmSDhGWZFG2Inj>mGs{MLdMUJD0c4|lAhirb$0;~Toq>!t zy$*Soj#FV3BT--T7?vEuWzY2@-ZK;@QSLBjk~afAj(|1o!LHNi=}5hbIbxW$)s6mM zfE21OAU^`j{5Ck-zu4VK=`WxFTZWiMNnbTgb9E)(w#;w28lXm zDDwprXC9N7G0%icwk0SH0c%e|XhdRyz!?cs!Y4R)xsP1AW82id<(9VG$@3DXs zJ;7D?U5uA^m4rfp0@!e^b^TIQkai6sEkSanUdW-4+oMn`jtL9Y?f@exh}_;CQV{ai zwWGm0no*4L-^lW!%)OAp$*ZWM?I(p2K#7tR)SDXO<(Omk+l<*Te+P)6b`$!3|W2W2g z#yC^K5*IoB3ZiI$@5=^`D7<3D$#sH-24r6$GB6`F7}}9Lwcc5x1r97#*oXDF2UZZHc!U0IHR3KF94)i zfoQkm_W={K_g$uJR8M=*wS1)YoWwYUy!_W1NcwM)((7p`!1!;~5_u1{%zqsnNV4Y0<|s5H*6I_v>Btp!|xK~Zx0GhH3e$jJn7h~`_YAL zM-JL%@T}zq1S@i9@}%X4&_Hdtry`}Q;ZV0&uqD)>9q38tpFzk7U~uaz{T}Vn_C4C; z6a}K4fjGxdeUtwyWkq^d$l)}UZ?sDkdfMflv={VAe-yLS;K#kw^^9QQv7#F>*6V#17?1wO6whPS^-WQBwuGe>5Okb zq`8m>G49aL19CqoR{XB!`-&&MZ0r}P{Tci{=pKZV;+M~wv5Dd(#GrNcqB(QGBrJLI zxU0qVd~YtkLzHhak3fT3aF5BLMSpPY>exWay@CSbq6&%U-BDf;;g5GY+i~#CPm-4+ z$c#|buUt&xwKFC42N1Ff?A86DvX|jS+j}@5+7akzMHW_h(fP7bf!cL4&PH%F0GVvy zOt$&Mj&9bM&Tu((AOEKxnKE97V!qfx`haD%)W2EWl4xP@U&L+>?NCm07H*FuP3)M`d<6*EFUi|^C z$9JQGZQi&d^rq3LG9oBt?+0Z3A z+g8nFx~{Vg3@$mC4+h_A!#@~UQ4RMLzm#7y+{5;`hDLtk974^(W}IVr+AL%Xh(OO- z@9v|S4X7@lCdJEUan>xWS?6O5(!v%gy0%oWleNx;gqc!Ius_&|M4qrvuzE1CL@ z2W&AEb;M1ZOP@n`MjvF0q2@VITP^x<9`5MlvJj>G&>Q-;U*IgNltZ)b^~A=={PDPl zmi{Q8dOI7a+NF=KTmzA%^@R$S;c0B0;J5}yQEQ;TQg6i+Bey>^NDOyl;?(%Ne?U3A zMV}SA7Abs#L);YCFf8lsSjShFbc4-(4hVk&;!S-Vo;Om87fa-PHecL)5R+qpBHVe@ zMft-;WlbLyjXuw;gk~+pR*E$aQG!FzXQ7 z@j$PbfU8Qq#dmW#zLQGE$CM<5Cl-%4Q{xI_1T{t3yl6(a?VzTX{tCB^(B`>Pwyzuf9&tcX zPq6z?gl&%IJYDdd0n^hFwqVlswE1Z&sasE5BJKwYIBYq&QBF_W4$Uj%*30(1HbF~s z!fb(bqL*y|<|WsA+3c9_6g&je$0;_uU+CMgYO4f%9tD1iJ;CuI*r)jBj zsz*0^G}6{f<4!L}+Cnt(^g*O8Qu7iSdfOs2#mdiOSCb?7AYAi86>tkDwLYNk9dqjiZkNeuzXf%CmCiJ(R^QZj(u;TPO z7ncW%|8$f*qTIYnIyE*joC{H01-rm6Y_`^*-pa^Kw#RbIF+qN<*^Ya)m=OA zr2$PgVm3B124++Xb9E5lR`UL2V9*BW8?68i40^(p1Waf-*px-9NCH7KL>xy+w6s3? z7WeroNrZR*pWw;GSKz`vI0@{8!(f%(!Jge!ckhYZ9Vr&+uh?Nq;>q{=`%`5mCO*wg zBVFn6D4VzI6=!fsUw@VqR1-GJcF53g>HLRc=Pp^6mAPd8lAO6K7e2Ufe$J8=%birv zfDRBnJ@@{eG%8f9tGPM_eV1!?u2c4!8s}*?H!b}%-R9>!cj0_;nPD4IlQ6^P;zLz) zTs&M*>3zsJ(`Kz1JI`kJqspbWd?>m`8EN23_Z1}8-Q4<{G3#N+La$0#pWX{Q~BAi{4^;)0r2XBuw*jw z&nD%oPWkyo`LR&?MuaU;ekzoo&y^oN9VtZESmh^=68Y8e9{s5&i1Q@;P#5^Wp`XTd#!31k}Wftv7pGQv;^ zkCKFDOGX!U$#ID|s(I3hEz9xaqx?8+M1q_Fv;0PK;(2U?P6<#&5APo0sl}-iM|e(h zD(8nz7iGdbC0sr1^8f%;z5K_i{;^u{qj9R}z>JY^Cs0z_4qGTrPR~gAk8}YP>;X){ zNj)rfa(Y$<>%h167V{)()mmR$krv5M@=yw64E;LR>4mFW##!dWj|^Q z(xg%Gqqadwy#!ye9aydM?Q`_Z8mIjoaFwb}FgmmY{*a`)fHWl#>|=tQ)Vu+bnh$3I zAJ7qPD-UOQo)O7Zig*5(CEvcGbdb|5rL)ZI4%&gQ#ovpxM|B{}I_dNnN=bW*|M}$- zV+|yub-KF)|FC>JAxd*f2VBMf8l|sw+Ck5Z?B9(dOKkzJb5K3Cw9o%Oe{H0mrj^>p zZ#XW*n$!{bJ}H24s1sVXqd@3biSa7>2CY*;2mS>4Hcr3`?||2!?P;Ah-vOT};9Jw~ z2>9N>5sL4CZxZm5JK+5UeA^xHMsyNdr^jgSHe1jJ>IhaV>Ohh2dph8Y9k_C9k9g`K)G8jxUsTegh{iIj9ajCk-%s4jU`|!;VC;(3LR&H&uGmPV7BzZ zbg-ji4fYereda4Gz-&EM(A6W5H*8;EQG93;l+Sx(XD07eUf%Nc#(W=0Cgoa*Nz+eB zBA>cL9U(Od9IZA7Xnv%96}CYXGtG$QY#*?gQsrjSz}N<}(>f=@RQ@V77n=8t$9exA zn@KZ3WEp1qgxstDgxbW(J+=T?20Xq8o%3YDZ24cdC zo6c^vhHJ2?{5`fOgFR^FGq!=05Vq7*zO4-9`Z&}K5<;R(*ep&w5(Wj0NbIg=y)XkZ zsqn-7sZ^NoZY+TMNLe(ptr(cEwBc;yP5f(XMHg>=3vXtq$WzrpY&bS-#LjajuA9Pr zr=y`8_GZ~olm0l6EH><)wO67Nm41c&`u17ascD#w6G>rjwCEn*3!R2p_rXsPEn}Z8 z5*7(?#;PbRya?J&gS@cAe|{413UzuP?)lR?Z)@@MXsECI01?#KXC$1^Sw&JtqyxVhW$1d%{iJnrZ1ZV05Qvch)sy7ec}X!pT~Yq?MQ5$n-6%% zh^Z;v^@wvlB>*nAo!y{eJvbiJmk-Bb5X(02x6yhy-%I>QbdVCYp)X3taD4!D4mjcD zS;IO0@dvTAOM4!cIP0n*^VF#UGJeq&l+C%hprmi%Oz9jbksq+(d5~R;;eb`=%2SkO z^wsk=xFlQ(pe5c@59MR;0|3OIK!y*VxDN+4%(vw)*k?#NU^7!{9u5z457;$q-u?OYr@ zWsC^aK7zBembHP}-8j$6#`o*)bpD|cI9cFBE5S#@UgW0XeS9`2j>ZnF>p~-pr}Xpk zzLg{RF>5ak@(!01bWZIry1v(=mvS@}%}NO3;zTAw9LmKBetkpStaatrD7paaWoV~6 zE_CyUe@wlL06#8nPxN4nOENF&s)CD_;pxg%3VzL|*i-Oc&#xK6T7`)CCG&$PTKU1S ztVFy-5ii;N1&Y6<9n%G61|^2OD+C{+sV`)j^JG-AwSWD&4~=TONI2N*dT$kOocR2x&qmwLPk++jKKLA5N}Sn z1k-SS`clE0sNJX8%(UnV8^Y15L|14Y+KanF&CAX~_(^A*(U;c`@uJ!c9Hod(u4Nxw zuT>sKBM?2EaBo&WVg}-Ke=7ReQmfk7*ZhX{@sVDY?8`Y}a zs5qHyj5uabBnBzIMc##QdoH*WgcIJfVT-%S*M)WSMtLJPci(w9N2bchW(Ab984#fv zCCu$5&p=Py^ji%2!@b1(%j z4`*fyp58xH;tGC0Vq zVu5XfQkjL7)T$DO;*$*nCik2R6z0^t5uw6Bch*}_*lA(Y(G7>7CegkKmsG_FmbVK6 z>_jOADXk|?APinXG<*7T969p6FVTsg{)>}gCWI=R$b9CZInYGAfF>;5tcc8KYSc`1 z(&f8y*qn9h~SC=mY_?mGR1s#SUjX!%)-0OFB8wI?(75*LnD6-X&pg=DVc@f*Rrz^i!AAUP9N zAcD|c@QHL{G`$UUUJ0DqSPH{N--w`p#b?wAlUl-KEz^`xy+w2 zK}?+!tk=9v$9r%;z*ZgFS%prWM zp|U*%!Jg=U6h_~G(?`+Ewy`5pQEBVS)Se?XOO4Uc!w(aDHma}GGVZiRu4X;sFQZvR z|HB%lO~1r>(~IX}OQ>xDNHwv(s0h8pxs2yZ*YG;(CENKR%Rjg-u!+*lkMS0d`LNQ+ zTYf-Q6YWtn_qu9?X0pyy#VdF#B$X>7^{J*xmg4CMCM4r1f zGi&XNbd$49k<|VVkkW5PwnTYYR)ABHZWZeTi!_ApZ`EN?sT&U6X7tE1NzqxgtwcxX zcnhp4Ip^7bTqER{dI+^lC=a)oP#J_Y;)kNDoMUBA(fTsjgh(B?wB51XYh)owF=a2^ zH~=1A>oHla*fSFhF^Xt{mM6fjGGAr|;Fc3;Cl>YsCDbun_^PRBjQW0$!Mf6uP~;W^ zrG*{g3jQpw#e37RMwGekKGa>opQxgxTqBZMO-gWD!F`d?j&5RsiMJ~DFVQe{3(|dk z7&v9O6vB{g+ZJT?;09<;rLs|uWH!bkU~O>$lA%;y0f}6izgPPrn23Ruk+-lUHEf=b zD+1@2KrXDWEV3%xIEbu@rja@gy@4p{hD4xLy@~QrEaq~_i1FWi0);2W15ryvD^p6k zw;x6t?tuTt0cR+N6#S_sF?RatZvB8~7P8UJ%!^HFpj zUE(JHZ*iL*Q8^Ii>~_yb4}!Sf8W;;5y0j;Crt-gFqJYkz_{4zte}Sy8E6|spM1(GR z=%j98rxIz0?nNngNT)MYk^2}73I8t??T=+ux&exF|Eo0qU#M&)dcswP|5Z%p(*G|Z z{{JzweG=}Vf7o(D}Gog%? zufj+%hwfBIEM?-ytCcF=MiPAoTXvwhMHrYYUWw=y>=?0J4sVZJfVApGpy*#`?oo2Kt}8A0qSuIFGW6;Jj(p1kBq?w<<8488NH~Fv^T|sKD4_ z6<9ZKpdN|LK8sa1GqPHq;6(G{9*@H3HZ{0F1|PgF_$Y$OG#cY~LmxL>sl=>4t?$vqH- zp=F4CJ43ex??Et~yF5wneeO2+$7-6YshKtxn&Yu3h$d}}a3{m(Hbn?cGMCXfLEuM8 zbHL{^P4$v$#%;l~)!^Q;hz{NsyiE;OZ>CM!JX*$%mYX3;+E>-!nKC%zw%{IL zAitunr3U4xb$k+lLcov6IJGcQxpfG(-QpbB|M)^?wory%x{cytrg-VvT5p5gSQ30d z7Q5(ddVhaGSFMY2?i3mWWzP0>SRyCP>+d2$`P7~t7}Gw_#p?K{O)rYgApz`wc(CJu_kESQ#F zSPo|WtBYVVZi~DPk*SuOb^OHnDxXJHimFIzL6Jq$_Ai_MHfgkZDAH)phpb}G$)r?~ zM9Y(Yh0jUnq)5CoZiBB=;glNLTV>%efVYVx8t2rVdHzZbRzk3qM ziy#u=Xes62P?h4Qs)n|CQK;8~AiC@Ak?xd_P?7Ql88=#gYsz~-TGUPNjN9NJcffbw z2LDTCMZNi3tEZ97ia8nzqzV6#tf--Fuxaq)+8|o;ADfrp!YKQmXdDUiqsVgGf7I$# zcg97P*-;hfU3nYwRlpZ=el3#LrCWncsCo6?vT zN#W)C(0XnzwO`uwQOv^{8TVk9xL4JZk`dZ}v+5#LM#@yiyF`K;!zSz)Gu;=EsiIUL;4Nf$gqv{S%a6*y?-Cx}1+Gdc z&Y(!B?yfi;RKhTv=-aMcLg2 zWw4A|*#$lnChKKoQBlryK^aBHuVpSrNh)ndy0&+E&<3ap@T2ButPBqC0#B0g=q_*- zpVi=QrK9FQtqWY0SB8WOH9O9A2<-!lqRLN|X&vkmcRHO_QSOl_m%57{Sw=fRiHh78VFmNSAO#378w^bTCl(~Uco4I3RX??j zE__j7+O=(~m&m~(ins{eb3Z{+ynYbFuUf-$HFVyJ*#)m5#F)pLf&A1mn|S!AjP_j* z!m;x^ZpzsGio|KtkdFYb{c$mG-$&6Peo}(}MVjvr;h=s2ek147}t8LJd8)b~XfeIsL75p<{ceL+j!9o}Gd4 z_$wYP7eXs@Fw_0SMc2{6gi*xzAn6$0&)ab8oE|YOG?jzm1|##yac-S)hEo9t?B;;> z*l5^4#=$psrcWgbOvmveIlR@^{!(+FT`0vXF0_55yWYB3G9q=h%}cGP`eKe zfamTVslQ3F95CzaEac_Z2|DufA*FLz#_veS@|F=3yCd03v3*H9I7G*}Y)X#t;E3Fh zx6pCGHC3ef;{pGUG;m7K*l`WqnY`xcEHWRty1?Atr*e9r@wQn!$c53=A3*LEIy=In zlUxiHFtnPksx$gTNe2^mpCKWEA-7G@L1&tpjwg*oxZ+!(=x^+B)UkoW)RHa8;9vO6 zcoFi+n}j3BOB|Xv#g4jv1$!M$LBOj$iL#sYn~xWrX1u0r*w=I11YZ2}_-tcXE+gkM z%rX*N`O${}Yo{Qrm9Jp4{vZc5=(b|Zg#+T>%|Wea*y*h}0Vop4vG?hB>2S`~P-{nu z46=MaMZYT!pr%&rj9+3H58MLm&BQazJOtOL>c4>E*+C|f$0=lTK<0XEO;leBgW?!d zsp5bNL1h{GrDhI@|0hT_aX^EJ5xoL;5=S^-(%FV{x>^ma1Z3eN?g(^dc^gK6eL%c* za<#@iRT&L<8WN2U7>sLV+CaD%30(%M+>ebYxY>e+31HrrZixUjy2qCIQx3yt$u$=f zDyN9~{{FO|Y1C=Fb$kt}!?`zJop7)6j5aXPJ5H{uIQ%I(vVXfjxi}+I^or$rO$BUY zj`1fO1LEI?lxu&q;iCVakm~}#yo=;Ih$C0h^%;5ow3Fei=FShppQRnqz5VGV)8Lhi z;AFoDR{m9b(>3QnTm|jhTM0aHOQ6ArLR}Ep@T1VnB}X)ICM*l zR;(@%LlaG!>lo$gj)U#j8M}QUmQl>n%M=^A&7Up;7^0JtV1`%ULM6dKKCXd*A-T7N zzj{mfNdx?5AzUY?mmL4~Tf&o#v>f3zxz}y4XmJ!4;6*Ej+&8Lb(J!_aG&FzbmI#_s zHqeb8Nr>^P3H!~KsUgkKIo+wuIo6H7db^)@&5;{6tR5e~4wbJzr`tTlH6Y_pww~I# z3u`{VY4g(17>&Jqjf=*|Qxd6PZK$Hfi@9xnD?9ugg)`)XXrYJc{DcHr_ArlITI?FPf^troP= zreom&#^^GI3OkYF2g!s1zxEUkAY0C%#hKiJACtBe$7ZMc1sK~NSMXS$ik~VvyE_1i zoIeIaL#-11({9FZy=Sh;*!YBkqRy(oN(4xky*L@_gU5P6J5^_gBfOc=cy0OstXz`# z^-465PFw)|qL7Dy|5FKEuQ7gE<^wM9#q%(9W$U)+JUWRdrolp|KSfw`!^q?TIr`9% z_j?2x>vt;jay!UgD7gzJsroDc$GQ}73}i|<)enld(F+2MaZ;T+qeJkC>8{v0JvrS} zUa;JS!k-%fV^N-n)6AyAQch0CUD9J<#nF+#aYQJ8bP=oW?(nqtp#;1eFO@6dog7E} zh%@x;H+uwWoXO|~yp(GwmQ5kyD8t?}bsjOD1m_`db12a@JP00Kb^up%AMJQ@sL3F; z<~!3)oDbAu1+^y`^+3htFhn%wO5C(gvcM&mlw~H(Nr4F;d~7W(Wm$mnoJ4NzKtB5p z2!BF}?zo^8lf4u*!<%cy64Z=M?kK*~yA{;V7*p#J;|0M=c?fiscY50+%U7b{H@PB< zDF(aF<6H;%#9vpL=(sQ6{%ZCIaUT%R-vxQN7~t%<$CPF69w{9qa(p2ue$8L!E4#czXLUgGFqxo^idKfg5$Y=oN3JNh9DcjF~VEWe}H zUFZfG?jd6!WSAj`VO>XPdLTmKgM~x0o>zom&?>)Ga4QKRl#2?k_3KG5&zls5J4PA< za+m*tf^@or)D9q1nla9#UD}HVj);OkDSQ|mFDi(gX(s*({n?iPdg8ci#9h+fa%BXp z1IB#k8DLD2V|!=O?br|Prc{q<(Cpue8JV!poE2tvp-PWw0mkM#@Qtl79k?B*X;t^) z+{hG+LQcS^G3zCTlg>gua-we#{9JGkrMZ{;@!ZU(*6J*e<#Q*LcV;NOOr2JwZBvjN!=Qw^V>HW8)pT$NvP~?F#M# z3T`nK1VPBJbY&s29jK3r0?|CHpl+rD6pu0O4&39wrKS>;bbc?pL3=q`lpmQ((McV= z13U3A!GtK20kk6mvM4*U1w()zWYKyD`f;FB@k9cQE`n$UY%T1d4h) zdZGi;cp_(aARcGLCW?sRDdXE6=!rLhenKgWB!P}wAfhY`N4oNGoN?0x zF6@WGSIh2Rs1*+==(D<_?@AmHq;XRy|4X5)QBW(pqEey@RQ{8vK?7lD9@?p5OpImpR*XEQnuR7&2PZ_-xvR|>2YAI97}5EHeaStS|~8KyzW z%G4XVdVw^4s15aZpdV-SQA(Q|O2$55VYq^;d#$U$F7&o@!{q4({0!{q!-WqQx8r%TlR zEAmXnXt`MFl-C7DjZ{#dQcz(!Ow@#|JCM_(!9eQJK$G@@q?&&K>{bp93^3N-fqj9o z4IiyBX`=_y`nH}?l!6ahVbQY{W2es5L3&>x>eHv741NwYXj=x-^2zXHnDqgSku3N+ z81q`*SHaUc8eHHgrVUY0l5%L}5O62Yz}#;McE;G-*f0(BGfB zgqBZ-WvFehO$_Qbt41N-(QV_CumkJjuU+j=+Z&t%Jma`fDYU+V@g{v8Q0;q z?H%W?&F@A&|8Nea`bptfJ4kv?eoCY&+Seb6=O+QXj<-QBx=+Dav}YJ@@$_97U~K$A z!INoV?GRxBeiM%;r!^a4Ak2LVMwTC7bvOL!kN}#y`mtN**ZY91d7KIy;U-)zJAdu| zD9tu1cs9jk_)wwSDYS?IKn366L^FlXyHANCgRTU9)Q_>q zGtaq&!f_-|v}lz33Y~YW-2dd!^^hn-mp^f`NZAuz0=l&=RU$UZ+wVMQIY!2R+XJ<5 zbPaD;mYNp_+3hyxA+c!ThrBE`-V5y8bo9shAp>0p4~-dOqw5c4#L)FYi~M2x!nn*H zsX0hPmf1h+0h=#5ros&-r&WF>6LPmXZWd3;Eo{^HZs!zf(sKJRaMI!GP2EPqyx5!- z_QiNCP$BuuFeZ+=^j*6cj0#@{&}c*#esRZ)(@wJ}aP zVQN6G8eo6mGQyqS=1OqoUPs9kon!L{In$7!Ze_Bga7{p#Q_eU?NddPWX5GzEvLTK% zA7Q&9+-Ha@xvjDr-N9na12>x~XqDYUANY>&+Teg)9GJr~Fm1%p!Bv;A2Q&xiBo+TF zsrVOJ3cf{m162H8alNB>Y$W7&w+^Xh!3p{g9JTPxW+sud$oJlQ$F|JK1mC{n_%8;3 z;rKJ)&q*4!Nk+KIv28}AE_s7$P^V;ExTAPnc%rXioD=>{0zUsC4r)^IHI<1?r#LZA zyQE+@zappczl{mjtr{Xqv;@be0Q@kvH1P`yMuL;xYlsZcEC^%Z1@~^9KRgC z$~Cdr{R(BbWCWB)4mXe~*Y53pC8_YQ#E0&q4_4X7I*%=Gr7*t{!L&DIxDUnW+WTr6 z>DqdGFm1@S`;Wahac1I->5hUHQCW%uA|YIq39JUagQSv*e`C=W=CXv`AUQ{2Ei;U- z2K;B1eK)^L`9th5pugHaE1We9M9bldS^SNo#1p2JZkBNzWaF|crB5l2pp>4&T{Zuq z<-JFBXRh7q5PbPDN`Kh?Ao;9D`+k*zbL|msob4H{1 z{}t7n>oRPG5=fpx(zh-5qpgP08kLjAtf|eq|}{u^cWsRZ-G9nvVZW1eL{~Z zFx{nd%+F0`TB9dzTOK}X^TiyuNyQ7Du0+y+wRV#>XDQvi);=^KN}!e`FxNRoaN;OF zPfxA2_wwwpadm0Ka#RZOJeS#Wtt@PA>i_sknYz><1!i#qSla zg_uK1#)z)|Ztm(g08{B*Ixd{Ipg>Ul@Li==vGUUoK z1eGa4`pzJRT$zR-Zs>@09seawhFlqnph~shmaQ?h9 z2Jl9PuNo%7{B^|w@HqkQDZ%`8r5nJ_0_-Kh&GdAk9rhnXZQgX)f`5CaL0j;J!4F1= zk!!e{lMdw{TYrgTIf~CY3QlricQmKjCkoqKa{{^Pe#(MX1-9vA&B#smEDcQZy|UTf z!_9Z|D2&;3{e{831!0d1pm*8%HkjLShBZ?2#f&&gSmx|vxTS$2=)`4;Sr*@$zS&}5 z>+;Z&M;6kBNh4teVypdC>QiKYgKqY?t9N;^-4Sd6b{78l2~~cCXU9#Hej~--H3pyx z+E#40Vo*6=Y#-5$D+NFP%8!!?zu~wtYwr&GdjlS|_X%AfG30F2X%jF+Q^4<=&NT1^ z@9y;R@f6>Y<9uS^pxh@q(IM>obNX4>r##v0WHYqU?y!?eC^BO4yRfHcRe zTGO7AD+_*AA20u5nDFMLUFf45=VQ>O`{?jJ&PO-e$B^iwLvSSiGPSh#7rn`FzmEx_ z3{M7hCyW#(4(mZT2YMQ*e=zJ`WLbS&B3N!0zUzt9KU?7iH~Krp+~p>6h1ZM-XexXs?vl_kG`CT+L( z4`q@&rA98GJ?QKHg+@&_UGHBQrfH|_<$nGe18E+!`v*tLH3t*q zm=7W*Cx}}1n0=6__2mH;H;URF>_=G@z1=oUW=!$O8t8PF2kXL2b{Zk!k{KtPgin`n zkp|wqCH!#-SF5m#gx7U}|B1T8^iMFH&Gm3y;^!wB&@8?>{Zn0*@INJ7t*^}zF0Lma zOqPJtza(7fI{@x2>3A#z`8Ekm7e|V8E95N_Kva=4s)WP9S_4dvA}Cha&dttb9+GFW8lv37Q<@c zlK+$7%1^Xp1%O_o+#cldh7{sj`l=i!2odB>n25F2;!b_DJr`bl@<+kGC|u>hE=`XP zQT&HATZ~vnZO5ru!Z(p%=Z34>hW;Jlz2w^$`1Nz@+X4Sdc4MOilcPG|yCfGy5V4!d;ZYGcEwF(cC@(9daN2V8B@f4WlWllDNm*srev zyP-#(?iWVQ`2$@jvMx3Nr!NInu=Nl^*K1=6TP#p9L!u!JiQvH)4FHB_!->c@wkfgYj zR{AA0jm+%esDV-HbD&F9mK|k==_VwU^2TCVs@iIVuE0s)2}2GdN#V!H@&#ZOU*Vj$ zniJ35gtnbBXACr#>?o6jlhDIzc?v{@S%mO!vB{Ia8iuYKp8@5TNf3m%Xj^)5Ih;~$ z?v3MCHpyTPhgz0!om8=BD)7Vw^9>;1WJUHNFsMVNvl3L`C~x}f=XhL>c&j_~Kkgk2 z`4z)-Q00rIpnQti{W=_KQ&W(Te#*Q^iodZDqKkrD>i&$0gyR_mq`aJg+gpnl;372} zcQQW-!#e_{{pv`ld9h8J_-0TME{iMJ4^YLN<)HkE2i|5cLZ$n z0`{hZI`S+erGEt%o11(WD&7jH^o?jpAU6eZb7K+XKY@Cj2PGbdS%%cRaiW*?QLtG_ zF1!F|W@W3Pxe~tL9#3Yrkz!^m3F3;oC~mWE0qmKuHH(*LAh2H<`n+q8!nX%Im}*&% zOM`XR1VmtCSjo-?Q~AplBzX)BHRO!I%||xQ(Xt+elgh57>l(It)7AH3iCG9es z83bfHu#c=?g3h^O1u~HJ;=Ot}3dRMYhHWSu^9>}fh4Gxqg0m|NvVra*bSA?=Tj;V`>hgLsLb=z zmruYb(DFUHjXdT%`5+`MDt$Z~m9X458FhPacbLK97F>E{m}J!QzIUWz@S?&45OQhr~`VD|ZmbXx;%yS`Yk!+JuO;%X(Xuph1nm>lTQV&>=(Cd(E6<7MwpGJe; z@&#yx))<+MD((GxYL0M)i@q~#h=VETaTOMn8{Pvcks;w~O9;all9*WuVfYATQ#ko_3aTt9qeB6LE!aGsg-DtS%NAjGvE^&hrGPnfGtT=hJXF zke`Y3=e!_D?eq^oNj{3u|HIz9fJIquf5Xgh8f0JwISo4M;1LiJ6lR`5R8Z7GN5!)h zD&`?9G%PeSlp)X{K(Ta|6&jkA85MSd5_K#~-BDs$Sy5rzf58?D+wHJ%i^z;)|FFRSUp1!4zf zf+kGIMSOr7H9my|YS_tG^Rzp0`vEGG-KE1vf%9MpvPw+73M~C_=Y^-0TM7%3?9Z-T zwHgJwxESe0d8+L1!11Msnq);HB38E7a!9aYxytM!0ER`ZT#P^wOZznD>hyV7gmYd` z@PJB7F*+#_u%bg4Ph?|yHPgQop5Q@0dw(eGRWeB@yMZ5v-GxcGfw#W_>TR;^GNx{n z-N46!Oz~}cEhR7a^YCQO+qAbrgKq*j!l%L?JW`J941$@oLGWf!$#h=|KkOgq$Kpes z8&U;re+wAGoN{y?ZJob|JYpJoY874>yLk4EUAYqN$ltMN-;4IKy@@W^aT3s!*n?2h z>z_vhXG}uRXqb-?ob)3`b@b>ZNtAyLeqeI$gblFf30SGDLx47~VPWe~4ASf?LjkZZ z8-gZ%8Vy-~#xItvzoH{I)nPKgx7K*3ETUdt4&eicR<&UaQvMk<0nW~-Ml^xO&R|-3 zP(E&1u6&yjBB{JMelioem2me3E}I%yuBM5*8`IQx!&Y6>lUS#_Ud#md!2#(1jdY7;f`RFqtNK`=Ob>2X4CY`fy;jOF0$(XW@TcOlttzo09mpDs?`rr2UQO z{(UP@)t7jtyaAEUbCXf3iT5Cn3HWDuroSJ3NLp{on|P15PXBfSUYm0MZtx||;RNrx zZx1KD>k*i{A}=>)#rm8jtCufXmjnC!E8XgjIT9Kblu;NLT=(ib38NJJnwCxB--Lzw zWKKgEzj?GaEf@!Ck87Y~&T}_VPJqA8uEKZhS@Y+?1Wo%Oxaqq4j@~}W&K!AC1P&u4yCOmi*+oM1^j@m-$U!+=t!jF<^I!-%pSN zbk0qDrl^UV+Z-9l+7b|hRQ!SE@Hh#nJg1bw`6e|-hOcIB9)_8D`4kUoDTlT?FAZ)z zI`m6*KD*-N|SRCXd3OghcYsaoF5;MX2B#PY(noZUai3B7Azszd6JJRcbjhAKUTQ zFw~Og!BA_^$Q5`rN9O~;=t>grLb7}c@Tb(V&w_3lKT1osl(DGv-|##fT;SvvN`eA( z&NnF63lB2kNXcz|bg(Y7^d%4AE)fo}IOVzv!-!SVf9>3$Uuv}_5-HK zDStpN3m2Z{Q|I6ns|r5HPMk%9ChtP$j(@T=SZk8Sx=X>ZRl9nK&c_q4-~4-n!hiQb zLxC0`ImKPb(mBMKRdN7-4Kq?6a5MHVyxnEiW9J%#PDkl;fN=?$I>ca~hGn5Lwm>l&JEecXj$JfmtCJd#H?Rd$k2PGigX@lh)<~U z@c`<-SU;4S{#Xi3*)4(st(v*bSEoE3KznY7U^Q+6&fg-)FjdM~1Z<@C&=x$o#TY)d zi)M#uljZVu=glxxvMq|!Df4>ENjh-jBe?`=?|zKL#=mdYDX;XVAJ>jX>)wSmU3+nJ zP(YSbYS+y!BQUD54^-%su-&%ieLV2WFMV~iqyfXNz28cJIiAJ7vseYtI)AW9`>z70 zlRgzjZBMDj1_i`Ukjv-#3VaR)>;uZPc@L(yPWNG2r6r8M$pdhx>EK+vfIZzOD8MmE zj?&%jw_gT4bq%~=NjgOsU2pOLs-+%NZSjEUU}cyarHow=EW2%L*%5_f*f1$jJ4H^U zdmtbG2oRF?GW@f8h~k++LwnaCR5?!xKQQ4!szJd7&}S(mgtneeHnlxK;KK^Fndga zkx$k937A?x$bzltC2>JMwSDE>7Sdh=e0v$ffS|2+7UaOqnT>I)_G`d{@BaZ9Db+wZ zj^sRg1?cXd(d>uIXfzA=OE5K~ves39k?>upyV0B=oN;-W{rkTN$sCvvsV2CD3-!^xo%MIihBJl*WnpXpy)kSTE*m63zWyM#BVmi z4I%vxXl|EH=N!v8sj_GYw#g}M0Rf!c1$;Zl?b5uW!(0frygAN-^(ZoG%RHf0chz>? z@V0bRO(b?n$0^-mEsGzFW|v8~(VE|k{gZpY&Qix9~{iSUO zSUrDwGMq^%Jy-fKKtKc)KBQ8P zaQjzG>MZKiY91-0wSl7pDY}=@r+?{*w6ZNFs1<9sgC@mYwwgOMo8QE+nO?eoFnw_? zVF>A`NxcRZ4|d2>nqt;#rIo$O_i4-QrT?dr`CXG$<)WT><&iCYhh3 z%IgV36+ckn9(;oLx9bVL3SI?!Qt5LXuZ zxr_F-ENikveuf(Fj5bCNYDRCd+&EqQaqbUoO$f`S_S0;J#uP>LPAi+abAxe~-x2Os zZ9I8EV&{3I(fgbw@^h4&f)z%|?0OB7 z(<8a`4g*5{5Xu?ghp7D#wdu4kLIV)0{>%p<1422|@D^+f=Y-?Jk?`mLK4D6S8kvd* zAw7c!&W?%)a~?rD#2tdT_>d2@p`f*_;*^JR$_nhPZ4n4*uV)|>iBS6SO2|cV+}9uR zqKAhYe`XH`;6{U+xney+BM`zC1)&&(g!;lZ5}_O|rx(kiN$@i$F7jma_x%*5p{-eQ@(;ag1kKH)Z>lS?)XqNbM7JJxPaYy(`2LGXEu5h{{qNw zig7`hUA}YEIIj%&Q@EXV+e{m$7(>I>Imz6O`Nut(*~{o9uoEW=B9=+#75YEHcD~Kr zR9^j4&GgMqDQNNC==v06$W$=^K{W#Gs&L~aLH@bur=UhvxK+5wh$sKzP#%TbwjOj^ zY%zxPaq;J)Knk}B=sHnQ>Om*}sXbbJt>^(Kd+_C8v}lmMx6u2G z203yIeXhvo`CI7jqCsBxE4{!iTeQfFe`UB;i57Y37Wy_(!Dnuv-!B^EwOi;HMS;%T zLjP7&O#N&R2E|P4(MMxMi=6JsUkttyV`Kd^qfzlOy)?~Ohw;9`Y8((yjrLHwt+**Y zoOW7`cPTvTu33%0^|I&ngVyrMd`#jCjX{c5QrPik)v^vw6Jssd;5S_aI!XODZrN`O zJjR5V;5(km$HwXK$*u_JJO+<7m{Zxys~U=+1BH0U_2pHjxi?1kQ$LFaZNg_^^ob+msbbUc*>I3mdj4M)x?m@Tz;7^6w|1P*G2+nMAUzzo#hfvH+# zTsssZ)prrPd{P*!9-84Vo*niXzUx72;&KWqJ?P43~Y}(Ym3g-uzSBC4U{CAMD zcdBt7%=XQNGE>+~7nY{0*_%q^T}Hewb7sP*J`#o;JBz5A#RYJ{T!s)9Hr~~&<`jjG zW;qdRdMO%5CNHBG!ix*O)MP8wLU)wCXbTRR*;Z@$8*l@aa}7Hk;pjzJRTjAkgWOt< zCWN~aWzP+i{|0Oq3DeTG8&FbV_*_I&zk`!&kyJZtRRk^iax!oN-{Z(#B&A=8k_wRq zR;spgRclV5%+Ym7v|$KTFwG4p>3>i@VI5ll1G)<-QcmiJ!)?(94R=F_BYaUb%!j5W zpAF25LJB+WRpBUsh}(5P3NB*U>d|VpXQN@9gVm$u{7}_*qmZhN_$NC};0}>}2AxD0 zDsNy5`XVH1Dci8M42JS__!6h-T`Q}9t;bP8VPRdkrl@%c>4_&T6oevk*;M~t6tejw z3M7(hP^+NeWvk}4jo9@XR$w0~I*shJf?YYtz8^SR`){akeKu0IPKG8@Ze4b>ko^(l zs*WMi{Cb44*MQs3EuK9ZiZCIUA+*NKZT<(IR`UtwZXfTIYiF*IYrhkEK#@mADX<8; zv`8S|7u;qMR|OrI`Wcj^d^q$GyTYRUXvBT9ePy{W#wS>MBSyOqlw(Dd}VIZo9HDXy@t>YP+w*1)H}2L;;gZ46m&J5Pt~hX+$NnuDB~*P3xoGbt5NaH zUKSL9$Ah3{uQm>b&GgC0ht-*)nXQ-b+#AM2H!G~R3tCs%ENDF0(!8)kFPx%S*~Gi> zP0=(e78n@=-Zi@J-GY*hio%+82nEV{3>#=+PhT{ec(V0ZxRUIC>; zprkn*y?Yi0vOWSGM{sxf-r)?Xjv_`LJ9S{MQ8HKkuu-kZhgGt2_@7Gm^zh8b3#> zUvB0&kK!QW#|7W-6bYqSPhvBWA!b3InxlEt30DBo4D1l&H2M{H=j5BuN_H`P^ex`d z)iK_}%04e-EBg#o5K}lX7|to&s(~{804trX1ED<-Q+U^7Q1<1sL$fOH3D|hlqZbLN zMf-(8=ooX+6O!&iqGDus&)mX?fyi7vuP;D70I!ghp+O>Zfk=_(`U!Zik4Zw5$|}4qup^&rUa92Sd`6Hnlo8I;UT8VE?6XBxj- zx+WNb`)HhpvSiEyL_j zKMLH&^{B51iHSovniBP9LMlZex4`t3}%R#Biawu649D} zUFMuG>i0%Fqcz-=>z+9TzQcM5J)(QkmXSz2`wHh8!res@Lx)7Ag})3j=Zc0952Yj% z!(Gty?Bhe`u62cKCZZ8VTs2o(%y!WeBVF_12Dkw%qT?PzLvcBjxs5MNA2fz~7Gb!| zqrLMy13}sDqAa5A2L$CfC}4#5S;dztF8)k0j+wE+nZ`OXhC!L-qHLrqgJ6!Yhzdb* zPND3SLhgyY#EQPr*vB;x1&~Yhx~|6An10Prh>ET!`#Iq?OQ2`O7_>6fEcs1T1Fv^Pe1sGPAcOYhN^-^%$y9RXhR(pM}S$ zA7A8@%TC9{Bjg%J4{(-6&;AF+q*c9O4dU|dxO=ST4?uTRryvjE6-mgY@8&&mn+KqE z?65$%QWLAZ>>`Z^ard^g>NQuT#R~i=g;z{s0~c`*W28Ka(Kb_d_V*|)bx{@wcnoB= zyC_QpGzOI8F3PXMr5`9)K%qwUL)acG@=(gB@L0vIp$Hpq5lX)qvfT{T-VC+e3~7s9 zG5(KBN*|5wV#A)n*zErJ5Jnh7gxM%Rbqz-E@9>1FEL${APDS=fHkNxJ3v zEZ#9{CQib}j%n>i%$DV65x0E#SX7_68P7njfoY8_QeTWAU(U4p=Q#lfrjYaRpnON3 z>E%nUOcQ22b(Pre&B_VrYUcRSDlazU$u>Wuu$551XHg(E z8w0J01#qmMt%(XNp-D{3?nG}A7Dn}@OEH&nT(|*2(byPh2E)&)MBEP|P;jORNLnM) z^7~_!78XVY5Uoqd1p~S!jElB&+;YZ;2^^XJ2TaC|T#t-)#O>OEN!!XaeJ7yRuOIBC zg)PvT5N2+ECF0gFm#xi`jm>)stD-ev2!o<}Z>Fc-gJp*eg(l(O&Qq}P8KK(wBkWJ+ z(C!y|h01n5BiQn%%7;FBu~&$4t`E&nz@%mNcH|(9!9vpbqe@j*zTNnoPuniA{t?tNG!Ld#)=3oU4dXJSpryDN7LRd9Yv~N`nL)pCA@YL&1KNvKq0TH*QkaL*xJo(+Px& z{jeu$ROSo3hZkN-lL8ZhlueKWUr{ZLHBtHkU~_UdnGA}jqZ}JVU>7Hh2jp}F!--h+`kG%^p}i7?VEA(TfMj!;(|xXxK%n3 z6D)vOg=NCzz5q7m+=<4@DMIv5E}f=N_V=a? zCcyfBkx7ToC+%Bfi6z?$y}zHuTFs6zsE zast&zpbizUhg?0X*=|KOtLlw;l)E-WOM~As<|u3LC;MBF(dJUf+qjnGk{wsF_`@F0 z;KRlo%FTuBeuR{@>nWtcI2j6t@J@j9D&0q-aT<&m#1F`WIM$u^G#HJ_5?@-pci2#S zL5zp}2($}23O-^SPX!5MQl8&LkQ(RnBMzte=OGK^==DIV)@Sxs zme?rdm~ou)=ib!+k8wlEaS_{S+c6|;DI_~{9txyQH~fMA8sQDBSRsWtkY2v?a0WO; zQPnb&PHB6X><&DS>f_Lws9qTptsjzhG;VFdVb z1L~un1n^VtvxzXk=rHP(C0odT9GRc$LwlaS9cdO0($17v{(c)>h0VejtofuV*QpmfUNPil)8#PFODjs!v7j=s$Cp&XA17*aX zBr;t-VgQ_;1ExiWM@meK`!KiVEdatn#p@FGkmXjO>3i4)u&0FEu{{svSgKfAoX@MTBzN!y~ove^XM1)OsZtu)=KpI5J z`tZVtC8sgSgPv$K4pKg>p%{g4sA3c+JxqRDv5!;8hv)}QRhZl|9g)t|wYxD2G9M>9 zc#0`xK}rYWLx8HHLsV2^ zHE5L)MyJd_0j6(>4hd3rAdxe8UIvrQu|38JiZkfHh8<)Fhnl{EWlYhU)q7PQ_9n2> zcTh+ZB5BQXr2Hmy*;>dmQI#kYJC=HS*w120(o*nQOi2ThV?0SQKWz|D_kGaAcM`bc zl$~Q_@yfNy9`=usc>PWa`526jB$<(1ibZb8RzFXA;$!0&W$RccS(%2pzFm*m#ZDog zprD!I4>${&{|U-dX(v0#%Jbvp2sw`}Mx8gJ&gT)~95_wMPR_eYF9Ey%kUcCZ!8<*`~nQScN?gjHANE=2we z+;Ev&n<{hlbo|*hIt8LKbB}n!$^(<+WaINJI%Ov!evZeh#gO1}I9ZP9EBBj)yT}f% z;&ZugRAo3z49#?0CpHMXDC9hf+&l%3K93g|^^n^EmHl{y*8Zh0J|jGj7D`BC(C9E) zt9dw7c`mJoRkRgwfVImz)F(}zbWdTs39D$-k&E?pc^o{M%=-ev4Q@$ZSp$m+b7ZNK zKJt|zQLnNIv|x8roWwBEn7W_7F#3ABn-UWEb_s0u4OCIhS3%mk7N2z%1;t()simBM z_^Rs8wHWVqcQ={iX|Ja)+QZBS($2Q}#ws4K+jr6UPT+qVw08h!{(l1Pu~Q@g+B?!| zyb0QCk)>eS2nX)~?eRSTU#(0AXs?s}t{MesF9iH<&|dCUJOUZCSFq(~8aEIN$UTnS z#*V7~gxvd1Bq>|yvSDK=aLHa@iIxunWz{_Co-C<2wBr&F8Wk#AWZqqfT>w znT1lul)Wj({}aORb4avZ!9S7L(GExgv)BRx>a4>BcONS#txHDui4<-@_=$#fA^a%n z4`bwT4Whare(tX1y8!V^V}{dcQd*fNt!x3={xGh0V*MDygOZSYmoe!k*l%*zpTT~d zo%7kd+7DnqE;^UD8|=q&{}$|*e9dU_7GOVeJc-G_+{5$>Inu(sX`83%3Uw@k;&tihEkQ-}R2j^G1kW+}Ef<-HJU3c=f9r7y%BErStKBb2ibsJ3!H zaFgc(tzGVqP=^{H=v8XKwS71SG%aX3>#_B(9Sdz;WdInJKVWZE*&CtS5)g%d6-47?1zvruwUNa^e-wMU>bt2L`^l69*G@)j5o}9Rem^j2ZQOXDg{2< zVX)ktGFa}$ee*r3Hqz9poCceZQ}ROTP?TwaPdJ_f|A4iKGMRdx0{lkd=0d{>09)d4 zQ_LtA9_xL9_NkEL;J=Ihp#b?fH`IboPYyR3dj|=6PaGJ1hxBd&*hULrnR81m$BT+K z#oPqUJ=}}S<1+Bjo!>&tJjxyx3Vv{wXq=GW=)4o<--q;WmOojbn6~xc%fXqVUIjhq zq#S|rZx!Y52^*uSBYKqo1yO$1o5(+anjY)P?-b=Jbg>x__~i&w|K9F`{wJVdub3X? zbQk5^-XoqI^cUrPqz9eujzKwRiE{o4mi8*ryV=fbL^;cP#{0b||A;70X;1!yk)|1J zqkg360pWE=>9*=7JFhM*)`a8z%sl`Ksn0$Dj|pK@b&7{*yJQ+kJJ!KLa&1uzHf&ct zVPN86pr7{F!nldSY|5m}TJ+Vd-=_dJG7Vp?WqL;iQLWh&OO7$vw*fSZXhHah&UO@I zDd|9AkfNMY5=~2hbO46c^7Mir8O_>qwNH@UPY1&ml{z~|b@*Z@Cg4)Z&(Fond>MbX z*Qy3>NM$fRIL0)EY76l~TfDwsFkK!!7aPop9(YGh#9lrI1BfUZtcjMC* zP`A)pzI;l1!Srmw0CVD+n#Ll@Z)LEOXDc3HZwk22Gf)Z51>=+`b{ukPS^2B~=KdtI)ek| z1Avmi#t3c|fAB82*$SKj*3{snwtYJeX)RN6u$S>Ej%M5097hs=Wh-dW?BA%7zu1<2 zvhU&Yu}V;+SF->|uGQC)QI>q@zd9zGJQU~Y(0m^_3SeYSlNALKzRBBrqn32#FZk?Kp^)^Q-iNL5EcI3Au1de$Hq$?l{2{m?F`> zGKh=YQl#woS28|m=LY>>X{i6d0sOf4{C~U$v~R>96qV4kI$Ef41=vJ%FkwJJ43K>8 zYB|$HhhEwa7uxy*&?o4*2}Jj7dJ$*j{|BY>-|U?k!g3Bz2ckCrZ^jnL8qt#ZU*p+` z=OD^c^*APks=rJU$1xR&2~Ct+U}xkf$JiM$kqYBRV$#GD#=h(ySXRVzku{xQ$DB0_O?0W+K!V>f=0> zGh$MdAY+?rni4vC(Tg&gcshHJ5E4ioAs20Dx#y6F{#6vMfkWjC zs%+T7a>xDD_K?-k`=o_CnO*NkI3oyPTIcORlO-|wF8?J&6{c09XJPW~VskfHi!ov6 zGZy949S8|?8WHmms{a^;65NbTWEMRaF<@lHNz+SF(6$@}*r9o55UQKK1(~15lq;$m zy($zsf`4Ma(8VT^gkoNPb_~DEx-cD?Gk8MKy5V=xTamng-(^>!qx3+jJ?U`(s!|CtD4u4Z`V~+ zUmz5!2BDDAFQG3)4@P=I&YBKPgJ>66MuJI^a=cfF+r|+{RD`l$N7HrQk5sxA;h&&2 z+<<)!5vtma$pi)%=6lH?Zz?h$$9ss}`?B$#QKn|{P zBKNQh5kG#pWcq!?0Kk46T<;Wdo-t$lEsJcR6qm>*r$|ryA4h$d1pbeMPW&GSFUa^m z4o1lMKMwAd@qZk&JCln?n18MupOo=`EW$?J_}3Hv$Mk(N{*Qx~oFah~uooW-2mst) z1~K4vuwt>`=9 ziI9N8W&VNPi-5w3!I{laIC)4i6iyz*424T7M4u8+IP2jMzy(AXW9vsrFHA;HVia6= z_Y}ec1t+)y1&3%T5ToF%r}6j&3QmLs3a;&#Tf|{oCpaNT>Gm$sM$hI*9qh% zP;g>6=AT5hn%TfiHwsR4K!Jj5|A2cnqu{IzdlM))fsAYaV}>)DK*0&Q?g1=NaLogj zp!&kL5$~e}3Qn|!K*2?`a$TU{;& z`SJqbh$lw+ItLPuh+G*3mn);-a%B`;E;@}91qbIZjB;a&69tDDjDpLRQE<633Xb_s z6dV|gd1Hzb1(z$M;Fuz#-~{s<3TTSQXN;*)c)=gBL?uHhsz#zksy;?*c6L34+K-kn zeoyB3(dwtvzJC>Nj0QOTKajI7Mqm98SkF6Ej3 zS^3)kLpkfx|17eSCl(v+11qs_VDQghx_Qm zTJ*A8<7WJKXweK^5@?@t0b*hZmVP;Be31Sw&|>#P|73dx-`@(rk^l)=nIVIO z7@QD*)wCtzt85DeN! zp@tNwCH=$LPew54s7uLBhZqVqt^EiX{l+I?izxPPtjGGhIc)~=)O>{HWg*{6fFj{w z>MTo^Fd?7+)f9|@v^ zQ1}T1o?<-Q@?IDKZ-BQ^)I%WNMzbCQaV{NCf)2DEqD<{YXPN3L`@|9cbYk-X773>fWVRB zO=u4_FGGbQ@|p24;z3>bFw&FNgmi%E4NM^^uiz(_+6VN>SF&1hcHRUN=mrzt0IC+_Lkguwx6jhFE=TbVz*M)adR0XcB zcfvk8u6fHSYAdc;%jqCrPc5gYZMf#Fpo4tXt)!?*TpcUvAYaq(qNwf2@jxY)aXXiL zJJ;nggzjC0*M-{0Pzvd8ih3Nd@8eA3s`K|9jOUy3=_k_aVo z>i}8Xo3jIoX~)t?sJ+Lv#>avc0$lRZK!F?s5W694`X=miG`vRUz_HQg8*G5R(j%x$->XGV?7b0L6(h zNuRj|^8h^XDy4ji+6{rxvQAw)H_2K07#ZZ1l}`tm|Et_S)zz_1{uO8YApRckz2(QJ z*3NM9m9nxQ(ZQz7i)CIkpG>`#Su)6kJYF0FF#Me<=tECqUQLyu0-10s$Dp6_K-FU> zbmYxYZ>oLTBqh?AQK~;ND=KbAgT%|>KPNT7r_t6 zb)`xsrx(yckd-$39(MZqoKub>ooMU|-K!XbC?q`wiQBs6sb$z-YNBDF24Crz?=8nKJ;peNfuN@XvcjQ&mZz^Ra z45_`h8tRlkJhbHST$4;W#tHC|cOWp4T7Ia+d-g|QSj`gNFd9q?sq(@?YzHsnm8_9z zwYsI)b_0S-9lE7qG-5nZlo>yQYfa=BM-Zd>Tm`(|CrUYrQ#5vrG>ikm7qdp~ zFB-hs9mN`1IYAE?WA$t#I|dQ;#}F~clBS~6Bnie28{rTn^Wm8gK4y{tJv@?xbSgiD zefACuCWj;klBk``;$vCdfTcIWu@c5jzCn3*Rg5**!?DC_0XL)*EK!?R2LI8!Vge{G ze9SP)Eb&DX{R1hbj^p@&h@TZE1z;z_1H&GK$khyVJi+Xor!m)Mzfh*7^!`Y&z5wQK za~Ka;`!p;mETpmHQ8>pW6wbB}BhAta*4Qc^fe{5bpT=Cmx9MN{hSBPXd%Y>E6z&v- z*}2#(a8r|!LGrkA*fV$+>yY7DoSzmaO9PcsJUOx=W8BR~iLSh$i&adhn{dJu;!T+! zm^vx5k^gXZT+e{^h81P?fXjT$vx^wsz@kZ@TLf^t#M*Eb=M;`;7m6&i~Hy zzb{NzY3Y}y-zf7dzHR1zU-Q3jOjqlcersCbdDDQ(+n%g{o+yt1{CD-lN?|2q(k=8P zZF~ZT=MUWg3fc1Z&oZCE4{+4V8Jbn(;|cEx6nxxbmlE|J_}U1-F6H8Yazen7W${6 zMVHF-6}Y%c${suvZp&_o&?cIcCFP$>ev2sR9WL_CbmoeT7xkdmJ^8)q8-v0?4|+?- zl-0v2Q6&L)Je=Of)jkJ?bF&Z6LHG6nRy%o5Z!MkT(6?-^DY=)FXV=~f1U&-OvKFCa zUxXx;6hw`_Qnq~`-}+%Ob@WDQ zlY_Y2fe4lNo`FIJN;%5Bk(3xDVTal_6H-CU3x<4hFoyYtF z<}E{P4LaD1RFPRHjaR^{`x)IZs%DZzZ-K4SnakHOb`BEM>8bakN8?Pu`NPce7NcQ7F)m!>bc>ToW9 zU!>LvxG;litC?KRP(cJ3&&^pcK_##FwPk$tH@e{5_e@?&6)t=SNSbmPH&5Wl0 z89wAWKMh7I2XG8#SO$R6;_E7EH8Ylf$}yN>U2bvZVUVAIft&kh*K?@`m9*bypq)PB zb}}GNW6ml}?60Tesf8oXYjk|x1gtq6o(-HT!qo_qqXNsKBOKMvGScti(l}+w07@Jv zMYv0t^MPjM9YtYS+Gwg>hcQ;4gd>XXO-0v0sl%N*wjt-Pp%QRVN7V=oL&$c?7e@>c z(k;6R)o@APRcwux#IE9~^ZKKFt?NHRTI>r9_eM!Nc5@$)^XDx<4jFiT$8w+Z*Ok8D z&#QXQ%>_MAUcn1)F4@UqjiweoUSnO0v;^HR#;z1T2DU|Cn%BKPOJw^TulC|W=R5?v zJ+75m`s;dZyBz0SkH_~|iuaF4V|Opb)vwI=rc2|c07^gVjkS{3PXM$btt(iA`Ip^)G0*)qGX6*&EqdN^{|CwPK>- z~N&00Ctu6lZtQT#%y+2@yxWE&8hSRq~@-}7NKnr{=t4{sPJIRj%HPw0N86kOGW5R6D(>1Ig|v8z;`!q#(#sZUNWrv`bvCE9 z^g>#NM~p>rJgp)q#!~c-A*I14vdM>CO{#lFDK4Tg-VDUt}336vtv}eCO;j1 zd~oEOJvhRmNyRw%Nsf53=oC^DJ>MAvPXz8s(Ks3{+E{)lsim_!;Y0E~M0@yk=M!(e)v~Cet5Nr3AcM#!ZtF3UWY}ZN#?S z!@-+qY+ubIw}Swf^$C=?&GIKE%(adM!G%iZ8H63$!kjNRl#KGmC=exW^ZRR5B?!Wb z@ju<@+i8;C|5HSgk=ts`=8wq7DnwkfLka z`&Jgc*HPNK^0-5_GNp72+Z-%y#V0S)e2TQEYG{1+`o3~Q2w&R2cNr(s%<0nAy7U=R zs=FeTuEbA-IrdqS!Ow!YTvPs?gJEc&p^9z7@FgAlBq|JUyMn!FOCJ?H$bB)xizd&O zqN0vqlquYt@8*c++WsyR^bnC0|HHfVle4ACigR@rW=nMn(mw>_bk$+7BB#}90nVI@ z^}Bi=7L4lMSzfgAk5YJfE| zgP_(HG~s7Tgw&T;Ac=1Pk%6lz6s{5=jEpmgD`<_3$tW+!KdW^Lin%`v9j)!6hrDRBz-j=pJ%B11@px~_JS^q!KM6403G1I%G{>oPGCDaQd&@`)e%1k-A5 zUvI_xbYZEqgoKU9nonoxDd#Mln8cpT!sk-Kw5eJ>l-hsA@eqGKPBxz)FY-U9>5X|e zY#DZ~nOkORsdX7Pr!5@HT8R<-7~}axh_(_3HXSjA=)b=gYn3Hx`HiI| zB1cD=SK-+NUPk7q29PcAZoDho@&ah=84quH_Zs^QKxd}yb{o&@t! zFpV`~LKCl8O?=*zUl@$@IUHfyv+&-aqoqF$97f3;uA{gWp2J`m=MHb`dv#)fq8>R` z!fVJiyk0h4T8a;{-!bFNxj*%fST|HLl8%p1h5A^WAJ=wJ_$n#f-8@Q|*^l;!i^tA( zuf`*md{U%9^tg)ny7pDlA$QOBQwRII)$Lv_{Q%?q_ey_|&4yQu@*KQk82ok6BeL{yzEJslXl!EwUR9i2lgfRgQ4}rQ!dHv@fNb(zIKF1UHy6~TS4bqyu#@6OWywU z2ZvgQU|P+}lZyGQ^T#~-?WF&MQb-?O&-gb9yE=tixO{{Ekel(KEVt=FX)?!qU%uA) zZ;;;fCiMl33w=onUKs5dN!e_Buz9dbU8jCns$~B&yB|e&sku848`7=oarC?3ZXIPE z0o-16tk}0;2ei6Lqh$tMB$c7ml@z|TNHz_zAF^2 zPi`JoCja4qPyckZ_%R$*h@*(urzQr_=`Axu;Xe^aCKaQ-LlTc9cZkB$11FCV<44bR-a9Ff_2Vyncix=g* zGdg@S-+Uh|wT{4H{zYaqUBWAR#2f6QXIBhPk9SI1IGsf2G5E|JOpXT!dsEp?yracV zH{;{NorsY=tr&3;!ZAocyAc$dcS=1pDwLKS3D+v#u4}24vJ`2qO~x;xb9Q@AbH1ui8tBk+wZ(8_w}Eh*MYCe_p_bXhn?3~UlU`Y?)TTEm$90h!CKSN z-wR91W$D1%XG#l|PWyx9e zLE9L(AyR#ez8g!0A4>(4&d2wvPrzynSqmYApd(bA11mKtKueY9aQuIO3eRFn3HlU0 zTd4ey7Ul`Q&Gs4tp|hBjgFeG;vk&$IGM8`Dean#g=SaQD6T6BMgfM6n=cNLLjSBhF z$rmL31*9Dd$04mRFwrO9hKW=4CC(y$DnT>^807htG=J}1_SyP4u5MckZ=>0wj|nld>+UW9TyhQZV0 zw>ap`IRcG_>KmjM)WR7S;)G2^>X-!AL^>*LLA2OFIa-HhvQCjniVL7c1j)3_b;IEw zYuG9zHSZoI)xrh4z)5|KNk$}PlQj6IKbDl=N#l@Y%6B-LjG;nYlpg}pkdhYS^kegR zAC&4lluECe>_bETIaNcpUx2=7ih-gn`tMQ@_M|C)N8OUgjrF0@zw`2BGKv$hI!8(B zSVdj%e@WE}cXMnkX%G62Aiw1a)9PY>kRlbb;_TRAm6@tCQn68MlNMqvsC%+aTCc>% zztH^#wMz}ax+DOc(Js|fPRIfk?YfNV^gw^-aje~}flh1X5WH{yh#5_o;8^%0IzeSI z^mCp2u)(ZmM)I9=kO(sjyYE+#?k9w_!zN;%`;!!o4~nsnD#m$4*S+wQROOHRcoWwF zORRack##r|NqcUICtbd+zoxF~x)ke$OfkD@JaHBi@&0@to z=x<)kt<_6oUff&R*^jPIUWRWb!_B)Wea~_q+IS6$VQHW_hf*IO1@$_Iw54}pksD~n zesgab{B#X6FQfwlG3hr9GGiV5Vir&}gCXa*fWz6^L6B=0Y|d7cP~;GE0cDNWdCY z*$+`-Bh3W*vs@3z6pW6uo+6&x7}5xQ|ktqR1$)V!0=Xo?ID)2*{18 z_zKTS)ebk~h3^cPW;imbUa-}I@Hg=F zdpg48*oU1#7B6&_e4FkG1>Y|LaZoe!t#*YLA8|z^`HV%FQDaA#xg+80KXfEOtky#~ zZ=r{_u5pAp2mT=*@x@X((tJhk_TQ%YroeR~UO8gp%;o%GkH(qVl6>7~aprN@WB-K3 z`{Et9VdlGi8$J=fZ=0DvLB!6$Xr4<=+;gq50V?}etjx9*l5^*iF?A3^6?n?hom^^m zdsaIi8CRK5%*<6-?(3ORn>k8H9TfxcJSDTFRC&?S59Y%Q+1pqusy|J^=9Ntk-5g}p z@%C6ev#-~{XsBdPqS{ZPDwQ4>^T<2eUa=c;1tyBCD3QBfZFL zgF9aM6E*m>WH(MYN4% zN1xd!hSi)bA8p%CqTH3&IsSBR&++gxrhNkDbaqWgf3Q3e14~)I-Q`W+PB#b8u`Ouc z#%=3ejnsJ;P6p=YBkl~uP2P>Jnm5Bd&^>OHFn=(-?$iwPXG-_D_?!9z#p)TOsiDb3 zRi~P5#>C?2g%7dy^Lb7=kM}|S0)%u6%~!h-2z7?r%{Bo(*mnoo2EFQI=T(^@rj5F( z8Rn0Clol8V$x6ce(Mt0HN>9fsmui*__Pfjrad3IW43)SIVIVB}2yKDRo`pNZ8QcLI zfZ>#d8dRTwMyVwW?WLWK1Wt^>yOnJf)V46k`Sg;t=R5kSYtt^rmj)x`2 zzvCZ$bd(pKgZIU3b1d|0hYH|NMQG~S{~mQRs}(FtAB+i0DEO0CgVFR;2;L16Q(zXQ zbY?hR7=-t`BX?n3?fh^QUIEYGHMQm*OhByVx3572F}oPn@FO#gqNR5Xf+31gsMpdB zcmccSlkRO_p3{e}M+Ww{zi0BPyS&Cc9)S3gWOzjQuVwiD_kJu8O@CydR=Id^m6ul| zw2mKUo*o4mf_Jf`^{(jwaFUI6>3L=kB|pUZ8{~(%#d&?xdHsHa{7_>aGGoWsc+V{fMS0+9{8@(30jJ--~|6D2CV`EL_AGxQ3>pZ?;eKu zThT=vC+ft zUr9q5XT~CiYD})(Dp}j)2YC(XSBW*i@C{5Lq;DBFn2Ia$(8{-riy*^e1F=c0#2g}& zvKK4O5;m9pwnN;}jHPb*c7CYl1X}vU*i5?i1XfPW+-eN7K^|{DW?rk5N7$LME6kL> z(_GJ!NiVzkS7b!DVT1J)+B|j{zrjDnZL$n~(^7?Y%DE1wq#d-qAPBapG+2x}s!*iv ziL?5JNtjOx=ED}ly3ss0a-01g4&=@m+9>OLyoC^~H2qW8?x2e^+i z#mhUi^B2vNaf?L6=4ZM`;=ladM~@mUZaqvA=Axx$RqTvzs|9Y!Vq=o*b~iRJ^X8-< z!7c`xEa|ly2idQKzDSG=Yh$1|iYh{z67~tBhtVWZmdkVB*KXEI$^MI74xoE(9e? z05tarPK;EJ!MTTiM3Av`VxA~YE^Bhi+}jK&Z(7l&JZSY+3({d$KBbwj=k`e{+Jpjm zr`*_Lqt}BI2U$wM5$Er)nR4S(OR3O!h}5QIkM`@twTj$esL*hh9w(pEbG>JHu$E{4 zU5((?iWp9+p^2Ve z?{Hp3OIP;CVj7m{A6Uc$)>K$dA`67)Dk)l*_zGat&AP;ey(&Swp8+NwBhDgADGY154+NTpiJ z)PpU*9fy=Hca;1*D#lWu`jQYzADHMFbOfBZkK-JIb;+~TH>LD_T72Q2NWrG$$(V+F zH|v7!gA=u0tg^iHI0fhv2Nj5hxC=@rOX-)^(z7Cd+j88`OIeUIKV@FZ+&Pw_cAaJO z$58noURvqr=-@qSy!j%iu4jkw0JY6~X{C)&4NqUz>a02|cwJ8nejq1X%6u(lFH|Gq zXv^lyxhCh}i2DjXUz7T-W!WjKqRmny25L}-ndav5LGeByJEUOdU@KZ<5%4;MQMsVP><5q-_Do5bNnCf zaiYjz%wJbOu7+IGCny|lHc#T(Ts`r-x}>DT1m=%`;K0yODcxmOnO5Q4i-1dE_V z4c8QX#%);kq79TutZ!%6tMCSCjl3W~0in~jn9ph+b69@+k^^*ny7~KD4aaxeq*9&I zY(9v{LawywxAWnxZ=rexk!Q`PG+WxharGYr-6-9b5R&~jgxb>KHxiW>nrXQGypU4b zDtCuT%qTb3x!hlygm6=AEW^U(QM7eCaKkxjrG7h7C#7P>LaOzT!aLE<>VS ziR;KgiJvK_e}OVsHh+aa^oQs}5fu}?E2ee#q3F$D+Ek7IJ2O2nv7WsJfqr zCVrwMicO5F`zbQj3$4g!XHN|I`Syb=9#VvOc z^&6e2i%mPZbx|G`BCi`Zo1nWpr-&Psj=Jhmi4zoK+J>Q1i>1-) z#v?3L&kyO{bf@zE7#}6XeJq|3r`PMGNQq@`qrEFq2GUFMi3a-niWFUd3G+8x?siMi zH}Q!n%Fh%Oo{%`IfS)=%>aIXsOW8U|zQ&X`F0`fSFs~HgPU+@~wPPk&yJS{$H;XBk z;=!txSpnTFrd$dGi_=Adzv92huAuZaCfzvRCT7|qu~1p zr#s1fcWENXErM)zlKJjZG{~)jJkUwzyGy|!cL*|81ktv9XDND5+qMSt3d>NF5d$l; ze>`l0N8{h_*|St0abLBar4(Dj5Q~?a%B^iTP; za;W7Ta;IBM@6Q9ABp2Wl84rU|EXuUmvF~K`0G;q4Mpx- zmCCm{sGZ=i0>O<-y2B~^C7oS0dnkr~;epvYPc1ktbY*N}pwBN(fkc66pypYlLJ&Dw zf})pEw26($(>a z0~9I>OHQ1Lx4BixiNiyRJvb9Lw=ntQ7LV&LC|L922hoSgiGis51-@LQ(u#xuN)Jzb ztd-D*VpGttgDD{e38vCKT$IZ_>E$Dn`qK6kJku(ADJ5~3&k5*1_;-@x?jNBaaoIlt zEj+lUx0DmOij$-!A_3;wT*hH5npl`I&h;0cYmCy7No>lE{>pTh+ zZp-DY@!$Dm-44S*71M_~Isb#PHvx;PZ2!k+hHcOR1{h$_K?emy9d&R?oH^={h@+z7 zzM+mgDk>@{B`GK_2r5=`TcKfTX`x}6Sdn6C+AA4WZ&{(?+wy9nVyhM9|8qa*3|PJ2 z-}RsCQqH-beL2r_?{}>7_ag<~TFEF-0HhsJ;2fEoe@f3(dlb0vWC*x2;i?`A+yt$3 zQNUf1NlECaR0MZi;^(Wt-GWs24*3}wxTAgk)}gNy_yPs4tc9vpfiF?u8A|&q*;m>e z)h|jycctM2O2adi_b$rcehQowg!tzkK#T%EBZF})$-iI)UjH|^YORuRT}g0H-7Tf3 zw-q?DiQnf6{8!~2rU2r1PJy#N6#v|CGoE>dBn8eJjDIzl5{9p>k>ABG;YVK#g%e&- z;O&&ZlTiV~3zc_wMPb4iVUB8)0(bA^wo3lszvbVFDdBpQ{;X}@`kyEXSCtg^XE|T# zX|!@WC~j0$lQC6XkvP=Qh&%r^)T0p}v)u9%mqQbBhdv9d@C1&IsY8A5{yM-A?3Io>KPLB zfZ>Z-Dc* zX{XLcSjCBur+SWSP(9LS2+zeT1*wvnD}P9NnnAZl+QQ-{h-AK$`6t;zjMqy_5(OHJB)6g0YGFtIA`1kr0n;|Y8pJk9L zuDLe%-t2(A7Sy~WRjSXGEw!1(r`URU&BvAuqM4!I2%MT?Gj{J5*T8`zz(clKM?YOC06X5a0`q855Xg&^-Kbox;JNH4y!vt{+T|- zP|^mXCf6oJ4A389qp^8VK(D^j$1^&pc@L>n{gih0V$%gZU|tkWd7tFN$^HOvXEP$L zXzvy9H!4hORnzNMP}?1&232V)(_ zW|KI&rSO(@kDXnWcR*{UW4Nd6BTK;2FF;36w`~HH8h(5jna`m5@>C-Roi+#mRX`!{ z`dGYHEgypsz1kf?soE5I(yk@Y0;)+wrFEN9P+~FgsbqHE(=>UUjt;CtYSVRS2@04{ ziIo1uJw1d9Y9~Tozj+Sy{c;S@Hk9(Y7^~OiWTUFOyFhGBhr^9>8>yA3s)~JD={lq1 zB8zSzU=81a37p|M4L%sSFP84zlzhp*;VE_v!ybuKN>s68B}y3R$t6B|4L;ZtQ;nh2 z@IAVC?~PG@^uF&DAJT8YjHYE{C{=1i%*?(Cu5l{6y7Ii*ANrP~p(N;>j8x(8Dt^j1 zKZ+RL)`yOtXsf5D^XN|Uo%t9*@(^Wibq}E@&N=9biB&BR1jEooTIUT0`i2NZZ5;tG z?UR<~!(1kEejsfwcdi+xtN0 zX{yaL{E~eCG-C*SOL3mDbocuBU<8JS7n2{yZ-GLQZmOp!J&xXz6aI}axk5T|MI~yMJMkq~I z5H_vBcU1QRim~T8vc$B-wjGVHOdkdH)g}(UDjL%Hpv(Jw5zK5n?=lX|CmKt3LiaQM zCBTFOE|E96Z9CM?`9u&~QG3H_)GpdK4aEoG`pu5VD7}iWO*q%G94Ru&S)^{=pr8?m zV=G6E(bj}Q<00b+K2lMv=nA%lC?=VlNNrt&v0O8w^PfkfKdgl;VEAkx133%&Z8*15~P`=h3_Ry8g!tM}oIh-A@X4xq?6fxiTGRZ}&M&Wal7o0r`iiwjF z24RI}VNZzp6497**72G7B?c5bm%DN@p76{=?$%hCCi*=S8nLC&q&=+x0-?7-PL zq06hV9Yhdqv9JxZaU{#VWnYT&V$X5I>NqN^*b0`VtS&9aybTjB^3`!Z(JRvoYn@f0QXd7@)C{w%j6(&5@YpA|Lh3xuERNfF z$m7cA*?KD@_#f+H+0jZ_A@L+ut*Vy;^8FK|Ft71Q&6tmAk>2NXWC zM3f&*LR3ipCQJXE1#|Re(4a5fjoYT?tb5lNS#atLZ;q)&m`(8{ytOqPL)WU+=DfkL>`GTSaun_^MJ*-{QZ29NZ;mL+ zSm<7gx}_MeyoDBG=jK%4G)-NP!%1A|7T%Zj-{6B3m%MHfrb)E+mlI0aGdd2!DE5bl z(2GG^shsOeE`@X_eZxR>Z5~c`5qh?C0|uR%&O3SX28=D;HjbLuNTDGeZ3x$R!e?dL z!#IhO7bBl=u$RM6B30bDIj!(9rw;0jmFbBcR=XI(Dizo1D9nZ^t6PHlgwH(PZ5#xy zCCC!bt}~myPsez_H@ji+mhiW^BSlx)w8Zwc2c_0vdWFwVF{yQ5rej6f z>nPSjS)Yb?ktKPBygsOg;=1`1VBw!X>hBteniz z_DVZ10_rvmE+}>Px*AIO0;$>A8K+fx6cDVu6hq0^yhGV7wCoX#S zq45}YX!@@hl-MKMX{npNwe{=Ynw0D6&+%?4>Q4)Yl~E5RuhI4slJ0 zT_7$8fxFIdrT~(IOXLj*lq%+v~V0%fm4dAbc-Kyqc_JUDpl1CorN<% z9KZXq9P-5_+>&1F4}9zWUajS=Dm?>)C^vm0G$0ufOl3EaqS$$U6$oQ_Pdu5{U|$!l zw&@XjN8L+;S;lJc%8t@9jy^nw^0xK_VuMiSRL}6AXr`f6uou%}1`!~Y^f>_clFc_5 zJW)hRB?rKC)X@bBL>&V>MSclk_|f;3?|}R{=rns z;I1NSu^)qz6wZK}_8tfa;rj!~PV1s5%pdRM@+(--y4zhbEY>!bX%Jq0;e%I@8by3$ z<*?t{a`rFm_#hmY;1?b^FY|C^S4ATsWes*+-3Pb^>KJDE2%lKpiaGd?ozrE6V5`&| z!3SX3I{`@R?`SQ#_Y73}2b3f-W<^3PcO8mJuS8=lGf~X4f)90um2%9>Qihp+2C`GL zt~JiLBtDLj3XK+ZpBb=3yNy1WzQC?b-#!?1KZjQ87?#X1-Ms$z?>%g}nofWf{ec~$ zjY!0BIG-+;KN!we-Dd_4)hTUIRusDm%@x-L3y>ZzYk2|po30M|q&V!w8iwfx!OEgK za5YYa5^UylPQ7f!cW?O@w{{%&Zz;p7R@>3WN(`c$V@c-xgfFCFOSYEA{SM0!6M{KX z5toSn7Fa-<_a;9YS`gHlsu))EDs*2Q@1q-z9Msa{nNIgJYN=u8b;AGNd6D@FS}Q7? z39OyH?uj^*$FIccHTmAuT{ka`riJCSrd`JdLcq{=aci0c|9YB_y=hNVNGO?J!U%Wi z=J{0~S_kz2Dh%o!O4X0sJ!$(LEQ0y$WN&h<0`8H!Wm{`<<=flP+JVKmDE4hORNl+C zUGt)=TWsAb^@TQqr<=9;t;zZpsP~lh_ST4ZIn;}4&Au%#A6oEP+dv=>>!1#`a(!!> zyRjca;BB>yqSU;&(8_1F+8$9e6>z8(B^SaHCq4OS z-w?f$-OVOiKzk2oAu`$21hg>#9t1O%LG|Z=eih0*g&W3@(^7^-Cj47KGe^!vu*vUD z5Sr}hphZB&QwM|F!=Fx)F;JTzXR<1Mx&@Rl$1}_;9JD-7z5Gx7Dsq~qrMcmaB6f|}Z-ce_C6^>u%I;hd2C z5cK`ZJI&$PbqRAZS7lRIf-_PA&dB3g?SMNyS{O+0|Mo~&;JqPoEAI{F|L|n|+8VRi2wWU;w{?UM@?+g6Q7DP5k5Q z?RddPe-&(`z&oK~z9$q0@aH0Ip!zo&{n|*QeyB1-3Oi~6otlNJ&4-~6=$h@Nr`-Mc zvJX^uhBqO$5jCrAhCs98AEu>03A0hCuC~~SfEwLOYy$&Rlq?y_fr@%XmKlAFkfR;q zEY%8s*x20krIXzBw3SB9RyfRH-*T@1h8qJf^T~`~OLL>Ek+C8LD*vT)chRCw)R;0O zT(7vlX_?SVoUP{BnMUYA$=T|*z#wf(T<|~ho|=oijx7%xH7^8_f4n!^J_2S{%9SyO z!1#aGdAn*U>5h`W|t zg%ypj{59LyxTYU@3zHO()yKQhrg=diTHm$E#5gg&jxC$ouV+V{rbl}Ty zy=+eP<8H|CixC%-%8I&beXE;y*yysLF!hf#vlVc;#d}a=%690W&gqjKqE|TQEoafP zQ{biO7r+%}WP}{4vi3>bzBL!&LCqFH+rI4quX-@C2y9e}wwx9_8rp`H41=jk?afVa zr?q++4vVPK(e!rXj4(|T>=DN1bfU#gt-=CxXUKEhvbXbofJ?UG*=V*aEFF1%YVi_S z@sEtlPNRPrmtj9TvmNb;j*d~QNbMPI)c+&rsf%zecszfOQS+>vQ;xFLlt0H1sCWIn z14mMN;MjU8*a#<~xAtOhJCrOf_ruJRIboD~5K7L;cjxIfN$uf>4qKKr1CEWxKb%?ngTg3(^x|-JBwZ}j z!bP8PD(>~sl3w#zBwcm*BAh5YciJWBA#@LMm1s`D=}sjM%>zB?nC z4S{L@D6p)kD?Y6RY|-j_N%(4};gruj8-!Cn0mcT_Un~#aHrM`03R9n<9hfb6nOuAT zV|GP@xpMDpgkIx_r4xO|cA~%^G0rbzA25*8=Yz-3P6&nBTBk3ZFlT!>8z}o&9M(#Y za+|;7geFUv=j)IU(XwG+6c^8&rd4Yx(zwv<*{>HX+d`?FHdJlx1(UfWB}0NKWn7?l z<(QXjC%n`zkh;P)5O+^p1tc~HDo0n?inN}y7G$m<#~*FmQOYoHU;6#HEzoE2%xv?D z1&@;E4O{2nMN5{hT4G)?cXrnD1(}bSIsc2XZ`d?A`X^;-^gfmCCP#a#E6b{EleC(3 zK6LfB?V*UfdUw2c7}N;-e%~I3<3DnOH@pt`!pbG__w9Q1B^nI?LL4sUt zdwxgR7`k-U7N(K3bdg_SoAxebNm=v<=iNeq6HyWuXcOL`oXBsV(KLR$L(BNBiMH}v z5G}j2EZCdzy{^7=qG@}m1_o$XeN7Wdea?1=s%t?ioJoy7PWj)$Q$h84=>F;u=+Isao2Q8X{+t;}{;f;e8 zz=jr_5!zpS@r-1s*kuNY9MGHG@CFsu+9EucISbB0t)W{;n@K|p&dLgP&VqNE9R@*Z z>oNMG*4EBnijr$D=pB_@a35Zm4Bcf%96}#RcXMnjDD|fJR8F{L8?N>UP(eZdLtC8b z3DNjzXCd6N+=p`Pd!iQ6uP5p5hqgAF%qbN3ku6-kjqa|P7)i+=**dC|DdQvCAbKTc zpf7Fzc!F=`?T>6eUexuWti2R)VMcW2@y~3DYT@D|T{*}GQRFtLp1k!r1ehc4^z)&p zQ)Bhs{BhT)$^Z9hp;Y{Z&C~a~lKpo|c*zfB?-#bV)G$S_4Z*h{eop+~TRDS#gziY} z(ZA}B4EDFK`YQx#kSLW)-ReLhG#xF_`niSS@qm9#JL+t99DwiF*}7tA*XCQ>2B&$5 z)>P5_C&^zw9-AoOiY*+%XY_KHlKLyf1>+pL-^LU|^@sa<(bg-rA(~iES~6i!PoWg# zqJ(QW>+2T`gQUU*(*Elw5&JF0zZI~lt2TqLq-80650#mg9o-Z{>#o{@!n-Iiw~~c| zud5>I&{YVVjY={v9seLL7QaZka@95ilHmSdBG(p_(x}{`V@T_jT>EM9mr%bMq|Eb4 z+ReGG_S$5r?C4a{voRFpI_QS!#@zkqhuid7qf=H z2P?bP+a_wLv?~Ov)@Rayf<(bU%+VFMO6`AaIM|vXk=NIC1rIz7#D?)Jn?VEQrTbU5 z>FONX`ju^9q>s|m01P`w)vmb>w|x9(y7d)~k=Z^ppr9jY(XVYz$_RP{)Y>gZd7|3F zAm2;-;wfJ+wudPV<@Efu~GAUCd!T?D?>6C;f3%``JR z0@T#kHqd{M!{0~!MUW2}-+-b{xu!)(z5xifnbH~LMcw0DF}@E$tfU1@2Dh2@6?FZ! zpsDd2kg&TqYJ3(5W9p{4kO%w5qgZrD138}0L+U|@e1%NfRR#%Za&J^swA&N>w5L76 zOX2`4#kav}Xgu5nV%J+BYs`s&HLQVzLqB>cN{j~k#Wc@HckDWjHqwp4YtdEk&*NDZ z+3+qh*RY&bc!x3X9F5c)wsf*|4nWyda5(heVafz|(s61Nm@eNj=k^K6p!A8j5zDb@ zMOQ?ez0%X*ER^O$!ezFDW1vq5&sGR6Bo>DW#;V{16|MBbsIuq7@@sjF3GsPsE|NIj zorNRciTa8+LWb0M6OA=G)`J1Flt;y5E_){)Ps}@NuwkXD`y}D%9WWAf?|^3^5=tY% zkCFM?6Tp?qeG-;5_0IuUFM1TLA6XPGqU&uzzPfK9-7kF#H75_~29!B-Y80HS^W4B1 zo=VvVOY$#xGS>m7-;Y7-H_Qg3AZrYaF7Ke`#?hDqQzxFUGw4C`U6jaq9o(AoS$M6x z1*VtaaZ0!GBo9AgI@;hK)ZDfyPiAI=mOqZNP2gBpn(x@OYI!tGi9@jO-iBDc@jAW& z^XiqDR2JQfvDR@kKuZ|77RAp%NR$%d~>C>e-wf#saJ zsUN8Jj9XijEg|+#>Ta+-#10X!rk&`x9H)^thmf+Q@*JcNY>#E-*kPqC6VDc-I8R5u^1CsKtFM|1-rkd%Bvh^CjY3zNl$VZ{T%?f=`@L@>!Bo+e$C zx2`hfC){!*y~BdQh><|b7vm(U+k?J|s1IM--V?PPS62 zh(^%_j;3WmA^zLMdy#pFr7xpc!&>mEi;keB(qHiL*Dy@lfc_S7zVyrZ_?sA3)rnu< z9jB`_+_Qb?L9XQ;y?o}(oxOC<+~u@*Se&u)?(eqeu%}*xF!ktj<8kP~c`7Tuz8TS; z%Bnzil;+0ZEOQojrbos~VS*QSeg}|W7#_@**|0tRoaId2TCsXgot>Rq@AhM-GA5S`sj z-E+r**ayh0#3>caM76+5hw{FZ;lfHaOj_YrwipJLCz6Cb6*eK2M9i?E~c-qhj_5i0m$6 z+A>Of4AeUn8VHHO*Z|dCaOE_PpMk67Mh{Qw?PHJE6vxmKAA1Z%?GM8)H|2vANwAp7 z`4%>P^^G`;za5xnQ9ohmn*jqZ-%X2#GG@UUL#7rL?CL~^we}cTx-oI4`OTO9Z1Rs$ zKT11_aknKrp8yZ!z8Gf3P)Ih*PC)kdwZj+eM}AE&+=P+&VzsQp@S3u|*QI37KVK+iH;A!i0&)syHDC*3==(a2`+CwBYCQ2b%MT#u#htuY+w?m(lu zKP9|A7Y>SYI>N;8?mz={wGXxCVsE*O9(#2vx)e23Cg{j|9v9=8mr@Msebh~d0Sb5H zIosP{#q&qO^!0?Vfto7A&|RH9o@!^oXO4D1xUmL5yHP!n@^1NdqT2Ol&`Y9m+n)^f z=nXsSypWh~9_+DUX2~FHW&aL#UoUlS<&aMH3Et`o+SARx1%Ensx2KuPfN;R%K(;=M zdvE=3YG=UUf5GhRe({0IL*4C%z40NW_OZu=7N%vtc^$b$;B?u}uV7I&mG!}x`nHY? zuKcBseLoI~djHtU>H&7W5A}W_)Iv>z!JHrWihqz$N3QIcWPig0Hh?>}0BzK33!x%5 z)NW9(gWbG6EPNlvrdBlB`qyw!u+=E+vE0WQ+bw7G5*%NpIQQ$94ZyX^0h4Rz;C`q%i96U@ zX~B)hn4oShiq$=iCuy!-qN0naK*wqfO-GSMw-mRf2y$69(%?s@=GuFJi!%?`{%6p6 zh@Xcq?7SHWfXKq}Ej8Y1T4FJUQVrwWsq;{|We%=56AQ-SeGw?&AHex4=HZGcJpd%4 z;VACjT zM=fGJLfcD>r(qz_r}$ck+Un+`ad|vxC?>`O1s9ZMWsIEPhhqlVv0&**lxTVreQA0e z_>DAfBVa-3i|BJ{8fK-A1@bu~p!AZ?(GD$Ltq}2DKpW-HVy0?1FsNk#TB~}82hC5? zOL?e%0orxeAm8x{y-w{-M;6$_NSh7l`7%a1F5>%@wDC!Xtpj(a}3f+dLSJ7T}eULI+BGtJF)mtjiFYzSt>#kJ~0k#xRu0_}arVmg| zAb80;ExO9mMRp6YE$*>y87t~-#(dYOBcp&BOU46xU)=n95G(26*DBsC&OsPn2EQ74 zmQ#O}KxZ_+mQQkF+cm#JJxEuw#GN;}gBL=KJPBVb)@E3G#~>Z}Su>Ylq7Hn3sy8pr zNB_HGSD3y7zLv_KHdBA?2B9pkam^C6S@Q#e@dcK`i4EBK3g2H6+`;v32XXgnN#a z>hF~Ug%#UDj6{eF_BY}iH})Knv{voi}0x8 zvv6^O>3z<&5D5qVOvjhQU%BXaO(woi(c1>rq7r9-B@1&cN~C7-JUnMXzc~)8C{dJ! z5@m1kM{fp9J~g;R-7(}dt#m&nH$UYxKb7-ScEf6{XY&(60xPicB=kU>8WO8kxK^R# z;^>fllJe2PUjS9F!VG86Mc1@{pa+foI%zRpFS9$+H12cxBiQWP!Kg3iDKHkqpv&Vs zV@kD7Y>0RqK*sr);q;|w$b57KRb^Yq9-;hh~OeNa|aqDdL*L zL3F8e*9f}vn!gumciJWOC^{90s8KAbPx&>*4ByM@AafXSuiZQCYjMj(lz z@)COn=#~hwuhm>mqCI3^1Lj`DE~M9Y03cCAc$eIZUggrX=g=$NSSK+5=j_KZ?A_1H)3MKf z5^VV^`+$-s+j5O1t$;q8_oG__d-Q~(klXO|Qoi3_L78{Zwe%P42-_5kfZXuq$nrrj?gIi4b3 zMsmg179_t6y6w!tFwkwgAi6wH)5?KIZ3 zVXW+#!`Qi{{N(uxp6d8XKLqX&O|Rf7V>2kD&98urO6AuxoTZeXTyfd(oKk^=x>s=D zc%4W950}N!i4}IE=YF7Tq&@+qWC6=(*ulTT&H$!9M0bC-Kq$Ypz^Hyzeoj0Bc%}U8 zdJVYG<|9DytCWmEFcqn*;4a>O6x4Y-bPG*K@S6B4I+ltj_S(U_R)og*_=wi5epdiA zbq2b4L>q%9Pw5c93|{`;>k~uzV31$=t;`0vvYGZ8<}85j-b0UyKlJdS83hXhk?{({ zvDJ@aE+L0o;vWYmU%PsvXGiS@&9smQWbrPReAg9DH)!UD(BY8@oy0E1W)+ntzK)?G zL@+l{y=@*Uc%A3(DCY0pJ#6vpP4kWFHFV{5v{yzE$MEM_nub5HWx{sZcMRw-y2F4k zYueyjs{|PgZ6eX5{7O`AqurG#1->l)XnqW(cE{}lG?&NFbo`~pB8d6Qj^n`CMOTjF zvn-@#{_CJ6um((os5emiM>OpXlwVHEG9T?kXWqc1>bHXf@ih`DHFYtvy$M=!KE>(R zg$0&%lJ{kqV!EWJBi2=6UOoEt?qijMM)X7U2=#zDR=RXw8%+99sh-E)ve#m3*pel>5&IPMwIL-WRkf9$$Iz3=$Ul5yE zkmi|K;L;`*Wb2X(GW1Fv&VqMEmBOJ8jIy0Kz2m;P*(2@?+Oa}1Ya!VYPEIJ@^_Y>o zeLDuy)RXr85FV?m?d$33Q#s)0WqEj3Zmzap_TbOJOAC4jegf{VqPr_GgpB@L&&oMx zaEMY`E3mn1KhpctL(3C`Nc%1hf_tO8g;7A8!O>LP1zR`$U3*PQGCt${QZJzRhDZdb zJ7*6HUkeINtqN-v8Ypy~Y9-~J19|c%9XSUgWWJJe()AcL-KFf|1eKjRf_J;%4;h3eazz=(c698`_4``Y7U zEV%*mA!~pyXp`39@9Q5y4)enc!9jV=8?VeQu74G0LW%~OgD>d$j_ASY{1}xRC?u2rHWLZYAE3XXs^@C>u_3j0liLJ)f()WedtleDV(m2Z)O-u zO2OwYUgp4oo0oxc>|AdsIm!MiSLnf1S_0)S^RhTF>8=DR(h?zIaG3_e!tF9HEZ0&k zYGbKG28W4D36I266Ew%m%ou9!LDb?ps>AE52xG~=K-@JNkXZ3PFbu(Htt$tMxgil4 zl>VYUU*^I$ebWy2`$hW!s!IdCVHpyst4#mE?x`Wm`(C<|21fllP6tPq8OF8Dtxi7+ zJWyP#WTC&4{p0q(xDFV)Ii$21~OQuS2 zO#1=A5zIgA?dv^0&~e(04~d6(>mJN8t4YREdf>)iN3ir20=mT8mUD zyFwqfCG`)`qh&?imDGkwkh#}3r%w75^&S6ZG*p-$wjf0CSyZ~YCzeh3C1WC=+Vzyv z4t6^!?;>H+Eo`moh-h79*{Akj)ih%TT6+0zJ74->^sHd2uO8@C`RZr(7d)tXC|Jz< zHnqlyal!@B2JP4pJ%h}heav+43iI_gI<&qA6rNLiS*;R&0I^fA;&w0|?*x4d@j5hJ ztG-MLPX@GytJgNz&dj_1@hZ-qTz+-@do;X=evBL5@g)xL+&Fx%)i#i4wQB}|2aH#B zJstTHh)>F9ko4AizI(m|ceDB{98(R?2cd&6jl(B(8t7rq2e7g!LQonBz?&>w43-d4hySg0u%zSAu)Hik2h`k878anU<%*2 zoCPrj(Y4wb#F%)aa|aPgP@`=_Z|;G{PcC#>c=+Mz@D2OrjvjriafOhP^wJL=jhZQ=~Nb4_cqz#$T`n3z74#2Ky9A>^`_{xMXgM954 z4AKi-h9$@{v~Y;gSuhCy7RADOiZ<>&#SISB9_|m0t1cXT&$<3yaKNT7QH^u9=SHWx z@qWE?{c0;*!CYWi;b62g$a=%YFY8yw1O6JjXiyU3MdTJFIFRs6O997Cw71#`;Kml9 z^JXxBDF7~O0j9u#%`Ca{Nl2O4k}~PWFd6OwT=oPfI^(+06D}&aH)%-d)KVZV0q$(V z?OC@Og9MdWPKi7r(E6Ycu{JRe13e z6S8(agKm_|$;EQ=9)1(a>lt!`Ij<!YZ4s-;V--H95Y5|4=9RcPy;XtP~9O(RV4!*4J zXH8rGt4G$P^}l&!jZJ`4oE0P34Gu6b*$ocRvh?Hv#P;>}?G(iRbZ#zmd&U9!^?+v_ zdNxq%{|}cq3x?qvO&IFaiQPhZ+#h0=JuxLr7@NY7Ksbsj9AakghNH~zgtmrG20$uw zC`j@VvID=r6r(?bq`_->=CHXl5#{Tb`}J~t_lFqehZfItqW-}gg$zCyxAx&_fG@(6 zvH08K`Y9lvahah7=gv8d*eD!ODl;kJev)x$q4$WwdD`T{wAh>W>qtSED}l8->F{R} zfx>ejO`9>mFX%=-5>fNuxLeLbyR&eSmDU&}qdwsNAoI|I_9F^b=|>ba-5foh)~|aFCHFXt)s*w6<4r;cB47 z@Oiabdp{-Kd2Wza^sdlORk42Ii6^HfOi!2r#U`KA<1x$1_zMG^g$WrvYks02`wff{ zp7vJb(D?cOjxtmNMJuk?kxjiqrRXqZe^1GN3EBII#LWk2X{gk`y@S0*X109J0Dqoj&ZDJpU^_bjswFF@fyc@hf?85jqrZtqULe+_oBQV(w&Z0nD2 zrm104TTf0UW0+*8gJ-2k+8-tj>nr*ll3V~UhdgNRyVY6PHJRNW0+3knb7H}F@JTnK z;NJc5j+Rk$HcFO`e;c$}8T9?p&@gikcePQn>qSOoKxpA1deD0pk!BjLgauU^< zrQT#6-5>bq{K?u7#qvRTvnu9~9Y3?Iows_}NNBh{(Zy3!r>2*NKGFrEd&vYeW%S2B zhOR?|ccuh*qY}QloQf8nVA;V&D0hRL zQIdm>?ngWWYe~32tm)W6R`BGWYFv9a;e{%vYi|f~cirYac#_(Ab_&O(b?Efi&dmw(wWT{R;e#r1H3fwJD zJg&f<3fxUFzM{YvD{%J;^uRmUqad9sNc6;y1XY}XG!>oxWO?w~gl2OOqmrcx-RGk2 zE#t1@7ARHC1C;7mC4V^h#6Jz@N=j~qw1;TQmNbww+Bsc z90DgV<*ltSh|AKVpLG8|Ks z65p*;p7yK&$Mfn+RJCn?`)pd$1u8;QR<|+(rz%g=(Cr{qL^B+-A%4-A$_JGP6>A&S76FfG&L5{d+3@#42Q_A8 z=~)>uNY$QmwG&wtezj_rNQf0M{x6Pp_$P+7a= z}jXG7)510JMIV?zU*#Fz#)r$0_xuesn>o|!og z=TgwOzfJ^uDlZQ#g|8r>FtzSsDA{F3#I*NDL8M}Z95c58oEo7hTK7IUR<-@4WZ6PI zSG^j{zN!5oqr`ANwh+Ocxw7>vQom*mT5{OC$sXGfBHqT}h);1#2I!bVW#9@9`(2PRV8QxIRXM;L0HpXLdhJ#{ZB49e#T z#l6DRFVWuFeqmsD3(IJp;xB0?r{ANy2y^GfkWkveke+mjON?Yg=rHwS*#?@^H_}~B z-$!vfkp3=3_LjmZ>c!T2avkpg?X6RTJk_meG@wv#2<(AKcU&ro@)$Cc@;0#2)nh$9 zp`UyNAYa0s;a_LE8x9Mt+7Qe~%@ZK#g|mm$0vut&>qRa*57K|ld@@!@G%bW&(^`ck z(63yF8MI@PEzB{iS}`?B=6hv)5U1POI7L_T-FV2~S@+fQCRQt5JaN{#LVsknEx;ZW z{y#D4?aH46=2(MHRY zkbVkS%Tv)t-f&jQDJ!U&`#=*|XiC=On0za^`{U$h25ZX z^n$DHk|gWh)-1<>sv@B3;j#nI$hAWrC|v{##34zsR5KgBsLhNqQu2gR_@X7L8h(tR zGm(+xA5~e_U$Sdx=`ksQ^n)ee%2p0(zeh;s-0aNmb5~}}SUz*foEcg8J9nOnE)J5~ z((OUge`wP)0|F|4Nt7N{)6;b@SKgK+y+qch@I923S+y`(kqvMY9S*X76$QyjM80fq zoRPZ$Or3Uc8fIz-(0?~;Ay>OLDy}^OEY9o*E=!6NUCwwO3{%S<$>6)$EVh}-MKe?4 zz#`fLE^@JC(y9~KRLe|{T^Se_cwNbK4@Wfrk|=H^lBe~_U?yYYraTMx_Pt92brT0(4X}kW?2s12ru5p(dJvxD}bj%6;#wTD@=-36$ zv~e{I8W8zQuTCQMaC`yD*AY7+t)s7=>W_7n%R_k`tVGv!lc7Y@6D;p@D7UM?0nS?m zj0pF&ix1H%cZiX$jlt+jNAWr9=LK`*vs>_GJ~tpx?m>N3f*0)`7uS)j;Zt!W?hgW2 z>utbx7C1Um^<*ej7L6)~6rdxN2tV!(8v6XGVq;*uyLx$AFfT`5MpqrM5TuHk*dL-9 zA;@!d2E(&)1jgX`s2?1x#U|n){yZL$8vfH3ny;yldDMU6VJInp0ej{m*gNMw;(*aUIMNE$asV^=3>uij{8tM|D+hI<_%OvR;}*?)m0#u`9HWbOA}!j z7v-OXh340s+?)sV9pQXwJA;hsHgrkT3;bF}y~}q783MDFrd`eJ6?X)g4~%=*h*^$2 zH?0$8?23jp^gp}E`Rb^w~a82YxIDeD7|sM9Cd1@4{)=h1N(v z^dqYy^e2u*YbpQTK4vHh?`VLt0!J)r&z+RxN!fE?1TVf4^9nG}YsUfy%6$$yH?te2 z**bJ6c)$CEitd^}pr`yVic3if)BFLA-IysXP=;P}(Xwb9$sZt^Q`(&lX0aIXsVA*y6C{2~sRsp4nJQ=Diu#`lpjQiDs^UAL2-v%3yj-*TLY3+Y8>zIMom9E9o zISsa6Y=#sGdC0H~=@v9f;+IJ;s^cr`mr2sw(<6x1Y{TabR>?wYe`s+CX^*$jfgKRp-8Y!# z>_Yr4Yqq3S7t@u02f-NNu>gNfff^=YK>KPbG8^uCGPd^dR9}Y=9VytiiCe;N8y#8H z0WP((r3f78ceABI>LQB#HX<0ztD%ob>|1-sBPg5xo1Y0$uy7tW9bT-Xj~|ira7BLV z3RZI*C0y+pjL?#Sk4o*Kg%S6t)R$aSS3;5=KOhM13VV6edm|cmb#ylzhB^q#t9t-u{&ov)$LWwSS1?_o-#&-Q9+?*A z)-6gGq6CHIqrA1iU-qKuT|0-WKc!25`h{t1UbL;!56b+D;UcEPg)u?1Ze!p7FQT)z zprhO)R5kNn@&)l~Zf?j;L!K7(L^Z?RB;is|YWKP|l+ME|D^<6JwMVKn07ihVpb2o4 zP4)!kl`+H1vu)4=H1vMuWM3?*4WL)nf@**VsaC$*&;kB+r@O`pK#|r;-nw8Jg#SBx z(4TK@Xh*dxO_;4}@Gi_{-O%t?QFt=r{;2q64%8-AK=fb6uZ}$vaq}OK@GN|b$ai8&v)nH9sE%v766Z;1RJ}*dCH~UAW@}M2V1KU&8h}BppGp@Iq z0T`au3y53o5mZ_Kxfc?Ofa00WZLx|ez<^w}0q~PzZi|k5f?08G+73Z^I525J%oHza z5A=TL2%!9Ic4c9mMj@&fWI)l=7EmwMpc9M#bRcyB^aASGa!fY@ln2cFP>x<)MptNjXNIG_MmMrYMp2t(}x|yIxI6}H~Mr$R@Q|P3{42i#`6{^ym!IN-J zrelje;WU&PY){dVu;5^|j`Fs^eOB&xFHbK9m(z|EuVC?bRwfr2dX=s@5&N7Ue-I=i z%8hQlAWT5oQ{Kg#Fm-R?J4--@3$hV;mVF7q?&ha0xVrwYp$Y@T#>T!Ndsq=%ng`OQ zZXFy$sGOhF01pGE9dRG2Bs(^P}9!gMh`1NqWlO+u4t zSd>)IVI?*L?)*=ouvo{+uc_lfdP}9O{+S(#I!`iHrcH2{I@(<>MUvM%C>s<2s};qn zcy-FTqYYb8LgHfZcZsqEpz?IgJ*asOrfRv*rC~-w(Th4Qcme5cG4PzHJ7H9aWKX(| zsK8;vlVghnwb-+$0KP@Ry0|kN)#nu;UmWH}R8Vs#5wD@>u5ju$iGBQ~w#k%JccueD zYrKJ2rV@J|v|Qy0K7#*BL-1cw6i@o8ZeT_*OQRwRpF>?R##~&8-WG)-O9N*q`WW+V z>V^514J2Cw&uyeYT?vOA7sPljgsM<&MxV+bDh5f(o8GlC8b#R#)iMSNVqL4)9c%76 zQxsJcp$W00b9zEkT;9>_AyO<*(>7?(3W}F?ZKx^+RBRn=739TDEkJ6iu%iCZCHlCsU6AecNN0cOHb zuV_v%^+a@f18nugoN2d%(iW2>{I3eOQtEb|eOAiR-3C9RdOnu9Vmn4E_P6w&33Iy+ z^JsduT@-v|;V?;g65BzfI<7%~Lf?pk&%&BMsqgABOBdIJA}_`!5LwdsKro*L6Ik#C zgcDs0`_12{H>It<2gTKM5bd1`@X>29}e7lVb(0Yv5(Bh7sKCX z)qK1@hh1U)xhIsh_u(_iiRtM_e^|Wy=-IuniA#P`dV!vd(S}gflL=iZYopp!nY&X; z_Ml6yYjqHKLCR8@{gKzqdH$OaYD8pLYqfhd%{j;e|efhel4g%a51?}E%F z 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

8R#>T<3J*ruveV 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

5KI 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

NJMy8RMdkI5htrC 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Μ2jjdbFtn65Z8K{#W|Spo|7m{^RaBiM(Y z{bF!fLW1Bs=`SlsJpQTNe`E^DeVFv#P5L`TsC)X$rqQlZw(u?eWgZr1Pk`sJ`<2W3 z%l<7zkjUO;RnV}q`$fsUtMqp*6lm=3(J^?!&y&)559+$)KW_RAedJ>ue`sg) z0R|H4l>^6d*~4M7naMI0hvJaD+c>k}|ck~r2D)`g7) z-EUx~L@MTJZ?cWG4WyE1Aq=coW5U|M-&;8=4FdZXqVsQ&NT!$j1^?S<*MF2+zaf(MJG5q;O{@4xNjt_z z0g5@!rpxS&HVBdVw?}zYdRmU&6w=;;GTC;?oq1wH+8Kc`UL^M_5gz|Zzai4!%hWm9 z#;hOW8ICh>Al6hYvV>f4gUlg zNjb}UTwCHHO$f!_q3OXsuol6>b0M}&d^!>e!_U1T%3yPFnr9+0dEfPxf(QYKFcu>~ zKbDISkJMa&FiRw_X2ae3QfO`dlDy_Pg8bi;k1c`3`u{KarY$(ZS1s8F*#L_zMXuVC zCqf9#vaO~M7U3+<)@#aHrmGn{2SJ9#NWK}qCDe6=QeX1JrJ{oei&CyTnwt6 z^#rM`JTk1DDD{fOo2X*zEa(C9^D7`M;a(vK@>^dl#y6N_K_n#_rQqIpR76X6v`h~l znB5bW6@78}x6y#JhU**bkvrH7>XRTW66LiVt57?a;S-5GVp=xgKk=QG0^E;Oe~OFf zf{>u0HU(Lk0EEBwX%+(>Lw*`g0gKis=Z^DM3i8;SC1XDzk1icVZ^B4pejAt`vUm8P zt1@+eJ*ywxaM)9W(f|KIRW-oKI@L5oKrhJj)k9GQ!j7WDJQ^vp^~BW9NZFOjlCvbp z=IUCJl%SOtPxXAENhF%>@WnV`o+QEFFH#Y@p!y)F3xv_fmY*RoZVOT4zhMvSoSTeM z)D)18jtusBGX0c>sLXC5CLE#X6qS@8-!BRlCc9!eI08|nr3%$Aq{*TeR6P!%yLBoC zs(uqhT;+2yiYot&|6w+rfTmSV#AvTR2jge4kM6K7W zwxNO!CnE@pHd|KapsGe0q2={~Ht^j~P{6=?WpM3gi*1CQ0%q8{^9D*q@6Ddl3H0|i zC5@S3)9~I2_D5&fI=647dikX;TC{v!&XPro=*x7Qu~Yl&Knl2M?+Jr0Hg#>xG+U%d zRz&PfmfsUpwbtpj>k7J?0)u!Z4`5G|>N{E`Pp8udLwk@TY$P~~X4xKR(}vKb-$eyx zM?)EBoo$OI*K64Q)I2lerB9|1Om80crCaatx~AuH2QG& z?o=~vB?62JQ;~AWbfl5D9qaZOe4~kWeQCjc-|`X2XYo{kG{1pVse)f$xYJz&!&I2) zEd8eMb$z`G2%senLRyvtO3u3`k#MdPM}=7WcHxXB9G=~##-EqJ4BuaPP_ z>D|r8*XH_VrkXQZGqW?*^JM2D&ra}>10>D!%>f5j=*q(}j;z;ELsaXTCb zeAg*&6uv)FuYqj?YTP>jB1#+XeYEncWh|Prf{yk_-YQxmAmFe}&?wIN(Z0x@?hC+7uFiJoP!2fA%k5MR=bj~CR=%J{)XBV{J2jA5Q#JbJ20^j4E>Vr}7K zTbQ?iZYMsttP34mVY?yDvHMoqzK{n@=TmMsKIN8evCz&-4@3~H!=2_aN$wt)m6T`M4@i*H7lVBZf_hMa^Tkmo zN!CwFAV~Uq8GkuKvh*&^ShCqtLY|Cx-1%(5;XNdr(ySu;3^`NCB$^C_c^Cgk|0*W+ z^0$NDfmNPv2Wr80`7-XbJns$ZO+JI|G6V7SEM#U?K`;VYbqueq3-F&|eHdni6W9eq zWP~~Cl|fkj?xq{ zQs>;mb1k2z41O3HmfpQ!6=)0Qam#B{!xSsMDCcx!MDUa1SmUW0nQSzrr>AK_SY=an z>4gdjk%dXsB$Mrsp7cI6aHB1PmO6_tIRH{9A5NJ}c)5L}O*?nFINkJZk0m-C-nOE; zLS&xSmdUP39pSXdf#>uE6QfehM*IztdCoNGytK=)0+a8IY#-{GZwu*i9X%ifM_kWu ztMm}7pfqr0($$Tq@TyB*SRC?gVe)D^d;qr3X4Bz(aX7ks7lP20B?fHRzk-6Oq86(_ zo)()`huVR;d6O-yb5D^q^gHS2kx7i8HJ`51cD4)e5Rb3SQ;WaRGn;H$I{qP+Sj}Lt zep~;e4eOF3LVE-Qvi8uIz3J{3iz3{>zoub%2wpHI%()NiqG5Ry-ZtC9V%Qq_{fE+3 z(np`b-w;{Hg!UN~77hf~@I7py#TL_`O~4Li3N~J1_bhOMiHtcBPq7XhP=r?BaCD`# z(G|MR+vmui zNFeciH1K$Qkg8^KwCrYIe2q!%Ok44dwg_ycn)24;LwB)r&z>?2CzVGyF5?nf7NHx9 znsiejJOmHHk0;F0ieedl#z8|o2@*9CPE?L)<7$>E2w!pH73VbZl**(DErsKe7e;Oh zB%%;XRQJLl53?miXkky z3j3|qEE8z$x*daEhf_hh3$5D5K|09gVprxwQT1(9YyLh2E`Jnf_57)*YWKNtp$2X~ z93$}|bS@tpJJlC4Rt2S89eY$8=iuuOah!!(24 z#7VMAxK;5{nGrDhR!l98&!oY~?2mo?=^}IHWpr5ux2znLoS`udlVXrRCWp&DkMzp7 z+s0ArmutOg&~8ZQuWYxWQ`e2bzIeM%EzhHd?O2!U&)GZe=@AR|g+$yQ^n~$)RCk$@ z#?PDvb7<%6K{R3Jw2<22J8XM=oJ{G=mSg=i1KoXcqT6_E#qXH4jO$d;D?Bz9d?1tN zYMd&_MJoP-%cV8Dc+L(0C3MC)?8lANJT(pnfF)_z;`|(hJBE93IBDS5lILdv0Rv_+ zTnOup{Yfquvzrb$^yYRMZA8B8a-4#izy zjv;_377NyM!yvG`@eY@N6Wr`><|9gUmdAsz$s!DrY(flIr`|fhXh}w_qvmwv)Nvf! zhnnwkx^3YgHT!Aa6oWZHC{F@?;d;-NC!dQ1PA)4tW%v#kP zsMQbGDXgn^gawyKdCYSc31vEp@J_(=K8^G%wlQYyD(o3)Uc~O^ z0K2&YP@u^)E@X)eQI=cj7{#NF>YE@%eZ+&As>Z}q;SARZE z=ad5hRdEQtFZt(nvE*2Y(_{;KT7wWaHG4Ihe$B%j%ykne-Q}%y_ML|DuEt_lF%%Mv z>}L?c#BPS8(77I<=GolcuJ|M8YV3a<$MZpl&4C)=7HsP2E^&dh3!Olxmw`gBx)ZW! zWRXVpJ_I$)AEJ}PXzpPYp=Aziy&ICY;poo?(}E!jksb%C0U@EECCZ(inKI|%y9L1J z@ZAoi^DKe@s?%8|g|JdHhp@OHnlwF+1K;&$xlZxwcc(o_<~#&3zJqDaQG>#*tg?+# z^>%*&-IF~l{^g~kud8fH9qyU)+5H_z4K3gGhIHUN0Eh}8tMDt4qM}kbNZT(!K^V^i zBz9%R)Ltn^uXX|P*jH$fl}pq>=uF1Vb#u)!kF`P=bqv<< zT7{og{LjNI?)?Qin({z*^y3?G7-rp3$QgSc#sK-aKU(X7?qR_WDUzlAOS`@UU77I^ zR#M9hbRgYlAR~0}Yg?_BDbSi1Am;@;mt)lJgXEYVSIJ*Y>N6t_r3FHv_c6 z8qdK*I;T#+{l{1>j49uKw_K-^4h?%LpmAKJ*NB8TN{U<@3mdPtyCI4M0h)=W0W&(m zO5(TUfm=Q{N?mJw(?j;w7up9Tilp? zPizgCTw73YtB_N}ClDvK%njDi*Rz2(*-61bslZ5P^ERM8z!J`wmDgUK146!%0G<3d zDhvS_rez-Fq~-gjW0$A^L`F+%7@}f0ya)gWM!i%rSmk<%B^t5;Mz6@TDUKm1Ah>1F ziFGQDr~0|*W$~o~86&VO@4B%opSrOtHwAWus(;=I`5s^|WDK(aR*CRbeH56QXojd@ z-eyS43`%EEO140-$cw3v-*&m-E3XOo3dKePMftTGywchMUIDN&vtFwO%H)G%Kz#Id z16W3N09fQxYxiHaO$G0mV5$7bb{rzkqyMyRA;TA#;4F_~hL68uGs)*s;r4(LWEsfR ztygUE?je4MpUQ`%p`;(PTYVR7IX}k6+ISA7KmM_;mm(pa_AksEP}}Jf+fv*G$344K ziwAlo3>^ykCZ)0aT&X|ek4Ze5Wce&}aN`?5sy8mIGvE^agh?8QDy1wG%z0ZL?|n_K_Tm_Hr6<55G`Ufk%#QF8$X{ zThd8?q)C~F)uB4RB7RT0;(dyBpvk4b3RHt>HBNy&%(0!K-sW_qG{5XHuVaQiABKJ; zElgUpfLhyZ!^e9H3E`X;K#;O+{Mqg1d!;-10icr2{vA=yOex!p+w5-kJy?oP6j=c@ zrsz*w-@tqKnfJ~=Pp&_0Q|Q*Jv7M=GdQoshnMiPZlDt%WBF?q--JoY(wC1j@NXQI9 zb`nnNd$wpVl$1*tAn1`wF}RQ|Ykk1e{?vO#gKDGW4;LuIFwekd?5unrEA z7M1uK9ylQwbvn^rtBhy4B-}Q+?R(=|ea!s@VrP%-?D_7+Y>c}m&3{^p`Ql`QwcDP`MOxH6?|CmW`MQ6cdK z^Y+xJ_8j(3x_7=kJs26!KL+R#td9?kI?nl67j$!Qoa^R5^Y#o_9fzw2O@!JHEAvV! z1*B-4Dy4LSN|;81$tmVVMDNhePs&JI;Ob&Cvao=zK+!VCu+`7()M_;bcM<`0K z(;0<*Oc0N|c3E@jRoW!C_n}ZP`#%jucNMu^MI98~m9I0Jw7PKwNx{+L?&Uy+H@GoHrXvi0+z9W0CepD5^5c^z5#TPab% zRM3X5{7VUgO8*31QI_sK}DH;Z%B#)@XNj-ole1OGWRWl(@1_2{&oN<2g*~1DqUpd4m~K zLuzTBuA_#~0ZgL3Hz%Mw#C?y}9>g)-ouX`x%F}UC_p4A9Y^g0B$;t4Zeec{z*q+F* zzds+Tr9a*5lT!LGkfgZNaMwZH=WvjwdQXiq&av<;R~zk53JaxQeeL?Lp6{8iVxk(4Ck*@KQZT@#xNUrTxLBu@ z{s7h(^gGcR!9e1vbgZoF)^mS?VY}(5H5j~Gicu6-`fbv^*)1b_Azouki&Bei6pbG39{Ako@$N=ndEdZ?8NpPLpy`5& zUqulBth_gXtXT1U&qiLFDl(*brn5heCeMZ47;1L`NP@{d$UQWP#c(9@TyLp zA-~Rs99MFkVGy&?)?`H63QMi1m)vks0a)feEi7vH{+hZ`hIv3_BBgY+yD3i71b_R7 z^m?HpoaP_JX6D`&g%3?t+aqb&t|j5LM{R$eK6q5wl^jFDAWe&VNMD;5V2_sv#3N(* zoICu&NnRGE$LVRa!#^UNTabSqjfEM{^|XIL=WsfC#WxV=yrXYsM?&eNgNKgCCVpM{ zKcTjq$y!MnZ)k=}ejX(qEQ*dA7D2D94fCNBF5f`f7Gw|iE0#j7rlVJU_4K4^WRP4( z>0b;ESFaFBv2yFGf(D*7MfkN!fx&FTrUNh8Lx8P###bp%q%|75Rx!hiM!ye!VUhfz zjYEUUk?gI6W;>~;RvW;Xs+P`rQIxb6T-w()b~V8I%^G`XI4i68C;bsLJ8jf0*xo-p zTIu$Z4*$X{kuvSL3lbk}*9=}M`Fr$GTs8TU+cb_kF|f)@F-eq%b(4FQG+JZt9&ua> zIlzVSi?(o{F@H!!<+iPcq2BadK zSxVpqYW}@fU$DT-cjFvf@xltF4>#XlZ`$$EDlIJtS4PnLYu1NT)eb+U56Ao(p!%u4 zJv6OeMZV=e+r4)vcX~al@baQHpILQ7Q5B*kB?Ye^BJhu!#4Nc5vjbXwDhkJ8t&k=K zgi>`VMD!(x0@U&n;ZS=e)b5g#dE!X5d?h7K92qLl7k?;r;z(7bCuL6I1@1uj-S2js z)?5dXI7kOU;zWk;*M{*?M<){4aG~*(Z2lcS%?xGR%SQqJh}`0VzhP z^!FFkAG`DC`4{2-Bl{03fZeA^?_H$7lcn_WN9?fMHHEz2RJ5zJWwHz@N0F#4#eKL@ z&)}MhvMTP=xOzHRhDc|O^f_6(`N&92yb75l;)QRkjNbbwp%{0erWon&gL)$cUhQwD z!0vb&=r9>+$Ih;KbkbpR+i+xSj%M1o7V^z6*89WvMZjb}d@ux7AK!>SK%4K(eo)wY zY`5~5N7sIxXr!0(A+z7{ER--ihK|tHF4WsE%E@*wW-Mq%a+K6GbViu`zqICY$cHN4 z2-M-a9kbfV54y>1R17)Rr-11%l;lrz)jD5*iu*u{E==yE%X=W)IVk>+#T#{V z8hnA-Wvu_`4B_0PtUi7g+&TIno%0YRb*^BfnO6+w)d3f;ti1JOuCw8ExNQ*_mR@mdg1PQleL2`0!3a1w}CsQLyit0?T<&?om=0;TzA2M^F1c?NjoE=B_(XCaAqp_g6T6)Q z?01pQod0#_=s${_da?lwkQ4-0k-C499npgiq9L;7{~Hl+--rxYX|-0V)!P2%{Q`fF z(r--+jXNRg&hfV(ZJ1_4WNX{qJyUTRW%jXSjCUXGBVR~8?gePWvfBemYmjU`fb<_j zx?)*2(Wn2szj?0`X=nV+{dd~cZ4nH8takW}>)h@eF17L(qLOB{yL)mpSk%Fac6U!E zAV-g~Ykkj%s#ru@INK4uv0vCM63YBrgepqvjggz=M|U$uM#NnZxm?p8%=5iQ(THh( zbI+kQh~BxcsL%!N-k$7$<_q55GdVUzqUw8SMgJF@0}#ivgba~IwtvDi5zQpIljq;AeITEIuOCbVJprJus~q!l>a$j;c9`n5 z?RCtH6`LWQA39@eI6X6NF~sEtAmR(2!7K<1W?L~WuId{D{nF$IFhN!T*W}uU|7sF2 z)y5u!eGM3T2JC}rkLofoMU^xF+>V9w&R@C&f8=;#8BHL(> zg5H#)w&g?Nn_3EGtiW3c$b(>E5eNf7LEw94C_cd~EW#?E;C&Fp48m|<3sW}5KIs=l zsZT@o+ro@VZnJ~Tn3OGuH`qX8+na^Zxps%D)(r|73q7oOYSF>1!xn6QO+VA9UD1{!p=}%-{7;zNXcF}D5+=U<;7A6_F?F=)}c|=1Cn~tpy zWgrnI&k-~_sZn$Boo@KAZ3x^1OhPno;z49ZF!u=h4}s;;zknVoT0*@ApaW3_!ghyV zwK0IYJ?!o8CM;@g&H@mj+8daP%SfgECO`+NJ*NWi&gIMh6$p3hPxB#`iY>u^-$QLL z?mmc~qPGD>rRfP>uHh`eA|m4gcOpo3su}YmGFi^OOwbSsRF z3n5&73c4N9CZb=8a2@1Mg5k$?I~vfGP$;KGt+g@QKKlqR!8g1Uhb?Y=oXWY^peM)q zsrVw}E<|exoQ}J5Z{)#tq6fevgV6y5a7erwhoMc&ccHQL>}wrnPjqLm^}PpCL0h4{ z7a$kWuLbZ*pmVYZqcgg@`N7VhJm?Cwt{98f-LpJR#5X@g6X~Z~0SW8EgG$hvF;B4m z!~{Se7``PME0%kZyMlfhAayd(d0}L|3F1OS2q({0LIqk%l&Fs5iWqt}zEbx+P%!SU z(eYho*m9%dIIzf{_>j9-L}E@6*-(dKvMHD|Sek6a#S3@J3}RCA-HiNI0F{BP1#{(( zXo;#WXfezIKqeoAI!T~!%0FC<-64~s3B%4UKLan5@nlSx^CfId^BJU-F(3FG@l-b) zI3DpNY(h6JpMi|-8iPDCmzZGT5xK2rL$eicuf`~1_Bqkh#JCkh$x;6xhGHFi5D;C0 zWQn_n^V~KdHcFw~&$xw402NMXcinKM8(Cq_8mRhfyp|)IY@}3>2^ws86`V+^>{h{W z9raF(WO0u~ye%09Ova*_5|56Cg1E~PH1-FW;VVXB zx^=f-99Aw<(JD+IUFM?C@kCP1eK;`#2p{7q2foR3NcEmrJn>{8hFx7Q(D~M(>tS&6 zE=Ip`@dM~?Jh{6EC11L6-G*C59I$2uB~YY`xn5ZF5!KO>fQye+HT{slO5j+8uRvaj zUeLnEeJXik5*ENkR}eH*YNpp~Vdz!tew3q)>v*pQ%Ypt6z@OYtOheTu=%rM^Z>gV0 zxa=HMe)&~&{f1HYVvJPu4>zQ-I1>_@U!YQTd=5aYz)w|eMK_2Y5BO6}F)kS;+Oc4Y zD>W4dtY&hp0EooY{ULPZ{>w0%hewxDa{zL{LGsz7<*_{IwW|$axqlOZGY+B>uiovC^bT{b z7We~ISc=<2jU3o?7%NByvkBFW#oVZW1f4+`@El-u_)=BeAb>>JL;VScW$ZnqQoonc zvg7Qqw>}OY`OH6*!5)pnS7IQtM=E<%ZbAWJ$`k9*aFZ{&K89c-A07&&FXg=0NlQ0A zp5PC3Ob&RBK18QIz(KbUN%JK`GSX<|G^#6xBk%0-=cbY1C}c__wH|{&^$$+hcd9RT zR|uTQ9UBs4?&TXx&`UAF_ltdD!?%%IauCT9TUw-VXaf*e6i<*VdWsZ}`-1m}>uA z9x`?M^wdSuXC#fAylCo#MRSH36KG8-tgmOM+aIQ9-WldwdoSJIS)ssv^EI{Iw0;*S zySKTabo-$Zz)Xil`cTe0-XU&8oADIx)>N$ZS5nFOVYqA#mib_DYaNlS?ufFDw5B`E zH4dgVZ^9&}bw_}bsy+ZNW#w$f4)xjqa{^sp&~E9u=^FV)xAoH0uRxz#0aKSKB08M% zO>f|}5+?!B^3`-qzMstK0Bs?4SR)0*LD<5q`p-C^F)nn%C93nlrdqE9@S1pjm`E7G zsNj2S5GwXRimv+|7<2>!FI(Zn<{NMt;Z}2V7Ixj~Ky}2=wgW8n$}+UdcepTPDO~{& z9o#^*l=L*l{fYC#eA{tz8|n0H`yi^(Vihx8p9;$ebNqp#V(eeRvGD+I^fLixWbWLV z0wT8sp`dKN)HxU6H_NTHK#+|Gg_dg$_7SdE;(TcIV=F?aLS6=7#2jRTtxV9$H3K0~ zSqa3SaC5zZj2$-sSfhErC+r!1+{pl`W0JQ4GP+S=ezg7LP5?)-c*dNvir0HkYOGut z2_#nUWK3pDl>m;cT5WLN1<aBBjtT^z$CX3R0LgB59XT}0&+MXH$#*U2LR6ZCXjkzKShKAAqRG+46IR(e_Mb_ zlVmXk?b#KkO0BWjJ7y#UQD|LJ3N%VlIdFcu4F(#TkfsZENz%TG_C6`>l^SoOt!vDv zied#mX?QY7NAW%4IZJUh=q`>sg;>}g1cpsHd=fat_*LCJi2aYUzw6l{O6T51VHCS` ziV6T9!Nyh4Mdd@AE0=~))zm>MKSM`8*%E0}Fc7j0dzPXW7NHi{h+FV+NtSb8?%2R- zSBg7{5z}-S`MdM$I^d=riVCJRa0@oG@&Ld1j>L~4@fx-oTd*D#*L24x3U|Je=EvzY z(ruFaQs=NP9nO^2SCDqpd;r8M{g+^5e1TpV+dN&x74RyuaM|6VtQ$GW)Vb({H@6v_ zJ1QU~^v0Og2Ve$cCzd1!LONXY-by8X6qSOrE{vUkte^X%GuMdi(Uy^bqJ>NVY0Efl z0F>c|aE&AbHoD7#iK6g5^a(MLg_)7u#r7z9G8MiAVd-2i8;=?RfUCPWTt)dS%s^KK zA_I3aQITyIu?LCzO3Wdb&!amzKx0O23Selj7tX;~hoKi)junRmH%Oml4FUf!=e&;k zsJH@za?Sn_+?;y?2Z)lBu;@Kb+lqfV8+6MpvHlb`b}4Wyrw0hFF$~e)5A2- z8zPH#o4Cj<2d$Zmar7%)ZkYg}z^5ZrPE{FZbC{o^usHDKR4l*%N>l*=Tz>=KS=rv8 z41}YM1(>f)n$;@Eb4BN>TrjNjo)ejOeC5d2U_B3+|8(I0he( z?uVHqi5!OGhX$?O?q*OkOsl{ww;Z+CbQIH8{E%&7!PiY(Co^-gBg29#lH6fCK9cEN3h~9NjW|BM2>gHi3VfnwH1J_jQ7}Q> zAPL|)>Qq=^t<1qrxa3A$Fdbb1P=%=m^IKC+1hVwE@NA4#9xS??{9}qkaJiZa1JR+` z@EAA3eQ6^sHQWN7-xnezuA`;^(ksdII>NC{R!VKg8NbE`#fivsIlta9fwXK%6xZ$izY;ftzwa-dXX`^2DcVt@HQXbqRc zf-EOo^(-X!4Tm$sfZP)f)=?1Dhw<9hIDan6vl@{Twk_3y3SRiP{s)`H1HP6p+)HBz z=W|KmSbse&-0j`4-6WzzLRFsNOUGBCxOE>5!?JuDHtG#N59{QU+##!;2n9n)FTXHw zQHhitLC`F+%Y}z+I8@WgUcp9=x5w;-QhArNCo=Xm*r`)mI`MNP? zBHMiToBXu9{#McL)hKeEH2?jr`A**jZuD1o*!AwPw`teD5tupd#)!C{UeM^7 z17kHHwz};=dP+)vVT4vu6arAIx;qujszAG(L+gD<>CvHm<((+WfP_ow@(2C;%HN6UST4T6=GKETsqegettu_hA*ETx)-grp*a_o=lejWfnT*V#7{7 zL5HlawXC!6mh=5#A6h;Ed$NiWjSoFqkrKkJi5NX!CQkx8VStfxZeW617>rYlP*WZ8 z&ot9$+uXOPifLnvGX?{PeG7F}@Hw{ZyJHi>VEr|7TAEhzJB*Y(WRH-iQS+*~*u4d2 z`cTNh-XV%I1?3#<9U*U{^sFdtmt!b&h>S;``{$9m{wAk|4%f-xFmY6U3{FnhlVK_tdyTvUGS8|dkOf$MW+zh9a_mWxKY*Qa zET-6Hz2=46`p|^%uY#J>RA5VM%S0Y80a$&!+em<|`L)WjgQ4J=Q{nG;qBr~-;IF#w z2dMa`GkqwqCNhLf?=8muuRE^JJJtiBU2z~20PXcVqp9hYP+!_|>``1%n6wj{ww?|o zdsTzlIT;6(`UtG=?xdPfl{JqJ4%^d;BZ^2#6TQ-xPTlAoOx6uZso`A={em9DQN}HO zG}QDmcCI2^>q5+dt|^^ZXBfQA1k<#9c}2BnB(m@-3cqw^WR%k$4q@0hY@Bu5uyL;H zgnqZ<2r}+E@UXOxHK;-H+vYPQ%z4943Rb}!RTU56W=ul~HtS-$Yg(Rw&X9);wRS=6 zXh6+C`Xj4w#$So{wZyISrAq}?>eGtvi9XBqT zD0pu79yDiDFYE%lVp5O(JOL;9nW_lP4GdZz7fTBsvmeJjZdI+W%s#>kpb(gEiXg}1 z*+I4IcGySxBV+>I9+N(x_NyoD>2CTs2GiE2K5d`o=M^6pM{&+^gZMJh*kHH4L^1~9 zETMX6bs+V7(f*nsKx=-{KB@b3!AW;7HxO6$qpx$%0<07ia`yn!ntuZl0{f^f%peD= z+8W^31hBD$LzM~b8e@s_%Z2~|nggh#x#)}%NJiuR@STU$Wkc9~>#ys+zL~L z>z`@w6gN-T{`L|W{s>EP5PkWmqB~7~RN+Sp4%zLs7Y^A+VGRB^K_M7V1F&+1Ep#-QOg@?!7KJ5WX*z{cSihZEWn-T`%Lc8R7)F8SsqlJa%iwU zNCyufV=k65cF)FV_~!v$)Iod4?$ao;eo^?4;q63Qo&YgYf-IBdU%2~^?BDnzM}*>2 z6(2rmI9}X8k6QR;Y*INumE_JC7yganh;(~Lr%-POG|6dy_b#DS5Q!B|)2GK`+VQW7 z=LBY=_T*7JC{xm&!67t<5f=BsEZ&IkM^&HWglUS1!WNIs`3SCorhbsKRlSW1O9hW( zZpXzdtcSQH<~)W&bIlTbLZw3!sN51F z;}&uMJi67TsKk)=ssk8B@@E9${V)KJI~(T>5!j~xO($4r()ChonGBjs@f#|XonjN~ zR*0^WJPPnPq&=9dT}RG%qWd-G%cb!1MM53xcQnQ2>3fjj4ZE(3P04WvNFil1PX}!F zrdvP7M<~8l(7sK!h%U@MaX%A+N1wXfhd!KWjp$|msB7mkAMJwknNi69{q zbZ=E87*SWLx@-~|>i{o!BE6@ioVg<-6km8z+Bk5=nf=iiuAW_$LqhHY=XhG=4N+{* zL9+wcWESmWk_DA0(;?#Th*t_AzaIbW&%$T{68@o`=3J)l?uZ{ zLN!)B8%hbG2-34gK#&6n^_$=+sJEiH)}2Y%6V;7F0(+sOsEfwkbjNO`9!eyXGGi7- zPyR`ki;Mg*e}K@qK2w|tjRk9$L{fs@K=51{pN>Q+nFgWqL8ZZY5*q}=5!{RxgnL3~ z{Ff{2rl0V!rtf%Ij)j`S^{`3$m>@PYwLyB?;OYV$L@_o2LLqGNLVZ;D@YQq3m+IHl&mX-Mw4&3^VNB$%Z`0~`xiwBp(6i#_Wl-5 zXkwdAK@!}a92rjkPkJ5IC2pO(!_r6`#7ASf8 zgo1Hm^7I&5wtApe-21Ni0Md{bR%5o%??_N#eLwoigV@P`XrBXnaZCMZ)1O*jN<6Y1 z(-6BQKLH!Y$3Mje^0;$pXNtLGpGb2I;OQ5p=`}2ru76^%NFonA zJcwft+Z?vy1|%IH22pXrXXzS*EPN1))-z=rAocpWAGX6jr4RvuioV10GAH*kk}IDX zpmXjH!CAb|EXc1nV(q+0y*Ukte;}W_hVD>xaVZYf*D?^Dx%wTy;%kl;TR3gny}-9! z{)q$+Ax793^b^Y?kVwqgJQqicA23198Iyz^d-seEF&mQSz^?rkEV!>@@Xy#hH_G`O z-q=cWyEG1ILY6=d-5m727ol9g%9a?KzQly&NXf?8`X7&R#T?~8(cg6Ci`M&dR`+%K z4Aup&lu$dK4I$Dxj9}JddH9GEC5}(9O7&NDEUz<_PM8qHX>lO^DGY!DzIlG}>k^3n zu4UlB&`TXo9}HOr4bQaMiWA;FEsi^7Yj8w*5oexO zcbuafCq92J@*go9f^d5n1ZO|Yg4A0QRNa@`R}i$iY&{M)k$iJ|?GT7_a#kDm)S$Ww zrgy^R|CmYDzTZX8IYN^^#Lum0Cvprz&8sd2f@ME+U@&bTx)i;k){48>+u}I;x53X( z2`wz+kKTx_Cxy=!aQG>KB&lg8 zh?T6b;0Wk=!(BTp40n9-7-~W_Eew}Wn`Iaq@zY$O=$jG7v$hYq6# z@%KK4^I$_EH119R0eL~qFEHEEDy7MC?fO$V4H_%-$n7Xd9FxC-nU#Wqf!Hg$knGA@ zC@@eL98!%VGUz{St8d8?|ZN=qw8dC+}3$bpsB5 zXREZx0>7%afmk8cfH~~S^fDbT_3{;I5G@AsfJjG2GGIXL?Saihh0jpdmrg;%NN7_U zUYrC))^-!><84tN!F;pZvb6-Ccq>M=M>hod&%@X?^u_)?*?Vv}b$jFiU%J{IYMyYI z$%e$Hu#-<;c@>>b0nogD6QpNR=Yh?xAb%XT^Khs)9P1(sk*nk-^uf%s9^ivtGcZ|8 zJLhy#DGvD2$tA;jDC6SehSIK)(_$&$wY5XQej#6!2MYKv6P110+_3x1mpjiaNWsmL zJ!5mi_1q+L*+@2(+>0`oJHoc$)~(wDGVV_V-qgE~co(qk0ts+Y0shC%PL?FD$RwAx zvhiWu4jFR;j<^haFE`k{eWJ>o(3%V5&KHDhoa@YmZ3Xb=h~h@XnVHiqu=I@3J#d4~ zTy()GzJk+Z(1k7S-w@X_q)V{iKmSVQ%Zm4YeJ=;ikP_6 z$Y)+(zEFBEw|h!iVw7;-GNm*zift16Cb=)ph#ceMByQqn@U=;pWxkh-yGcLtZOKqG zQY^f{r85_ukN1@K{~W~R3G&zSxM}pZy5dj=|AzvV?R4Qg;#Mv{NVjs&)L!|*9waCA z>}9GbzCz7a3fexYl;?w@vGE2}H@K(78G#i-@X$Be1BEc5=$I}ZYM~EN zWNvskHQloX`tU8j8;i)h8LHPL>eFl=?E5x%iqfl;*=+C1q<}u#In2lOc(eT@VWC}~ zBP=?rmv>ln*3kX}?@)2Nr^fOLss%BK!#_SGIK-1oCJq|7OMz26)bc`=zc^pJuYb_Se*_GpmA{S$yyD^BdKm1;4C@ja4qUkS z#pC}(oOt*LBRc6Is@(XsJ(#NWG0JXvlE=GTwZaOvy9RbByqt0}{5!Chn`EZA5+o(A zt-;U^`~k}=8qlYuq;q^JqXPopVTUJTU*c z^=cO^amiDm7kP3hrq&JE{K7ac{^LYkxc)!|&6s4H7WiV(m>i6weqEB%c_;%J58&e+ z?jS^j$P8Q$;x|b8`;?6C4hx7NRWUwgQYJu8*&V8x-E=f}oE93I;GDTy#a0D%f3#DC zVhBXgv9S>fEWSq$^p1%05ogJsQc|d4>1hCZ{{1olk37Ue!9_t@`2vyy#I5)kmU(Lf zB4YR+Zb&;)UMA}$rSh{#J*YkPUeqml7?kFVcBs5r6c zWb2tJPMlhV*;!W$K+8@3xj3dUG!uYItoD~J5V=tKW z6scLnZ(P0=M+QD`wy`PI#wcW2*o!m%oQB*^gGV;w5X&Q{<3P8`2Zq}C;2rxdfT@Dc zSzz&Sw;tgR;{aU#I&x8W2M0+3U(DDW1zgf?Wh|tA=xZWw8)NoFT-PNWqb)OVd~ez? z4#%O_fVgW)gp{fJ-AM4&jT?`=^hU}p!;!LjcNjACJg`04>{j0vj*S0|tku0f+DLW6 zgK4)4(z-(kun){vf~YH&Pf>!XtC0zuO(#;vdzy*=1>VCpza%HY9tIVE8NwORnVdSRPCfHu$dSIM_hVNX90Q08th zQPm!7dE2^f)H?%}2CAoI|vv;yB*?EZFWE9S~5a`@pwhI%q`JZ{QP6sk2m8J;ev?l6eNurFK08KB&n9 z#6v!ZHfj6}haj$HVBDHN>F!S3e8&cmoC-KV*BhW2^2 z7Uv3yquxkYzj+iXH6f+kuP0z5&dA!LB=w2dJ;fcuUPEqp6mGw8W?E>)R{FZ(DBOFg znJ(S6pmfYJS`Sac5&cS-uZx?2?L@;Lo3MZ21|GN)BObV>KzBNT3tHC1B6Y7mrWORPqtB6tm;zm&z z>{z7nbo9?i?8_E|t*>qDh)&ppo;a}>?Oz|Cpp!mQZQwO^bEkWYXX1p&EbFueEv>(W z^{u%j59dHVJYk4R+aGK`h5jeBhS$|@E&syQDlcLB!*cX^m%{a=xN|*@MgQ2B% zXx2EK=|m5q=u5LKuGZ)QgXz2FE>_xCm+C<+^ClXqvLyLsDTR+#tlP)k&u`H!ACXuj zxGp{s=_4>Y3WtFo7Cc#E(Qu~fe0`pOwMnG+XHj_iGQ!al>`-?)4& zE&{WC9cHg^BIhOJeC0}_&R+;{5GEBjX_+h3({L}jhvz`9H=aG>&a;$DN8f@@$;dHo zZv2ke;1DjJ8x|<6=Ty*TFS(0UM`x@!?a{x4W1Fa@AnkSO5jr0%rsCnmbu`pl?txRf zx!y=2fzEg>#r}K|_Jz$szUqO#6_z0>;xn63x$lYI z*db0WXe`|demEp_KD@P>U^P#T^Um!N+NqcONrS7-=w&}N)9daK8AX8GspGpzja$Gl zrFF{#pR{5$WHmp4NLdS)VY(d$(KW;cV3IP}viaj-AXm(krS$8IAft7d)+2_y2DN8j z_NXOVPvHhR#BG*fLoUvW4TOcXNpKumb%SE!s-Q63zi!??#F_tS<+l)1Y{Fb+)5 zeC-062xnpNm!~N5&epxW`1;Ff3cmocEk54|YiC~fB<_}2OTZhm1q*9{9IFH=iNv{Y zZh$@>%}g|}oj!YeqQduv-wxJA=?^72rn+EG<@Kpf7>L3w3ZJTt}-#jKSF0BjIG!T`w?X<6i&&B1{-x3 zOiaoGR@!$ey9-r#^AR*@6YIkZ#L(mo&;>7k0n+~Be}jK%zK?B|S-JqkI#&NAZzn_|PEgGc(IWvMG8K*2&%DD7V(bgGPQn!e2;Qt(RS} zs?=gtz5N$PS$!8d%dp4iXy%5vz z_g*>}$QAm3Rw@kj3{Ylt6d=6Ap|oUO4Oy|7B|cY=^#m)>8Fvd)rm$>GENb0QkeVCO zxVr%UjI2#I)DR{+DegYZzNS2_gU~AiL9DRY31PGp0b)3?!WCPkHT{sR8HJDdaGRpg zNj1%|dGK7`R)1J=NPwnLVO#_?TRF%>eqL0GRdR`o{l zU?amGfrhOaI0lUqDO;sDl6uG^?Q8Sf1j4-q=p|Xhp=7@6yXCReoEhLwZ|~aCfogl8 zl5t~E5dB`jWag@bsW;`dVglPr`g>4;1zH>LO-}Nl#3*7!Qd)M))&-hW@l$mnc9$d!s9QL|DBcUT zK8W3hQuH%VTIh@^WdQhr0_;?K$?npesvf;$FQ0*r&RuQJS~X8zG~c`=eT{il=E~)( zR;)~4U@=3+tG=_(3iJG>nF|*^v1)nxf-36}xw{LmA>Pz?@T&dvbWeSEG7Xaxw2?kl zvxmuBJpEg+Ch)`6cg5c=x||^Y3p#+|F1o1z+{17%jFnZ{H!(eVja)(wd>cp7<(c_cb&9Owc2YKj+qitiHa`&AB!P5F&ME z@Q5G7u6J5jl;irz34V&P$F!#)K(0?jd7IN=9OMv9>ZcEPiNW4P`g0E8AA|Z1pgH}q z56rnAh%06xOWmppljK6le-R7z7-=cFXb414tNf{pF)nnt!0}PoEwEsVAnhA^x$tYh zoNZH%Ts>725-qXYLu^eltbKAwIW4Mcau6+{cEZmq6L0)ASf#DimUZHoW!v% zTMZj=YWfNPQl?{p6W2^d5ZMYU!a;VY@eY+kqg2shlfkQE|dr2&Vb1F;C8t zYU$!Uc>|TWAo%q8ayHdm>j?ku@Nb+i$3PEWkUsO~9-xn`GC6$#Xhs&OB9-!6O>P!8 zZv2+JAGbJ6>39<(YC6A_4;=+b(0@TkO8K+o1~j}I(^27OM$k1agj+p>@lNMAYX-)3 z@*gNj`9cm765(nekpsin>{{x&p860;tXzz5qN%gcdLmo-RcRf+)3>iA1{Rau1P`AN@23mn$vD~F!P~2BM zN0lc|{KRPv(6U8xfp4&oeV-N+c;#?1FP4Y9B<8QPFP3}K+p7b8H(*dF7FDso7)W5M zN5`Mv6yeZx0ydd|CX4<>RliCq+$6vOIS|WwN8v9TSXDr&ni3JiJUwflIDF^8H>qe- zL^FN`!_Njm7~)CI%x}Yvv2aN$s!)OyJ!KX?e$#6F{KuFQ&yTS%X4UwjW5S=qaZ!`E z19~n=!S#cUQY4Nf)+>nuPzsn(fVgyIvEx3x3tc0|U>~vL3>O6WO*+QsDy&J|fM4Ke z0wIgZ8-O$A2qPz@9#7=PxcF_(hX>|%Znh+?T06$??WNj;p>l-l%H*UX03agH_2eSg z+C+xKV+1Q?H6G+3lA)@Ae3r^EXkRB5em5riBT*#I!xio9a~-&h8?aaUOSlvnBa((r zGb9wD1glVn)$O3r{5I924EH~bANq^m=GkZv9BgoQ4lKh@MZ!1CjALa*JFiNJz8{}o zEjmaO=eO(pjcEd%s(sIH{w2FdbPcfG-ib%req(Cm3yVbrMD$K?$1EA`z{cXwj~#A7lA7^_>lLiB z>pf68k;C;)coSHp@l%CKTt09>n?UeyP0SZ?WROZvN+=9c3(KqZ^c z8+IXWE^`}RS>d;!$@JI~c?@h8mo1S$z$%a?%UwEc2Ub`9yF8+C@Q{m-^WrFjV_!!| zS(XjJ#=O7MkeIK|CfI{+Z{*d79`70&P_=iByj!AaHu=%2e(U6iT?Tf+bO5AUa^cOB zTI^>WqjJ*#xC6+p92q1Qy~RHcuN?_=WW5|>oQ@E{Dr-NK$Izwqa_5kA6iWp&{K*k( zQwj{2ZIDB?gVf&+>hFCG&E6n))qbO)jT_{?+SfGn<_0+}XfP5%54WvRew%tp)FT)4 z=d+cb%C1^Kug2%e!4j6L=_%pffalPh%EZ6xH)vUHdN7&S%Leycb~xSUK;P!dZql=D z4q-fpu0PRw|32Vou%`Km;VX*%t~YC}cIHjIt6Slf>wn#=nvo~Zl-vYSsyez+?jv0T>P-J!Qo56o**k{^XeGk3fQVpDC=p?!n`( z=-sL<1#*)sx^KmHc@=DSU*9ed2^fRoI9LZkmW|YZhumNKkz6q;lzxjIfvAQ_n$tk^%KgAK1Ob&Ja7puNc^D3_YoC@AMsp}-(1V`4 zf=a~yzJ(9kw0@gDz3Z5_e3F6W9r>bBHXny)LSZ8?56v{bME(-jG$MA&iJpHTXgpw( zb+mM+Jj^Bjv|rnRbOEj~UDzpifb#kEo!~x7Xy*rkLcO}P-%L;m6w&;9T&T`((|FqV zjND1z4~{qnzup7CRQ{T8FkN{@{y1O-bdebfP#kmu%yNA?oqSdv4+L<(U2=Tq!m7_v z3Y>8R6*jSGD-Rd`Fko!1Hhe(2_k%l8{w_IMTe!OF=q@=*8zQ=G4i>G%!Vi&OrG$lS z;Psct|9M=`gPeJVbdqq7dq~J(5S^r=RR%1I>I~vVdKZ04a$nDv;h6x;$prE&m3L}8 zx=>lEZ0c=(8NZ2}A$ux8pAisxd$h-SI14z~yfKnZ7NR&l@)& zg32JU;BbxgdIv3?+#?T$Rr*_dAh5bbZhPfE!3i3e^+x5!6dh;U91p}?zv5C#+$;B# z=F;-LvMk-EZ}&pb^)K>xPVO9fl0)6UaKkMDt7*&_%&N`bfQnpyfx<_0G`kCON$CENYGyxEsQ1U=!h}Exh)t&A3rC*g4>JB%jCXk znRgH-zg4?R$HOy?zlyeVTKRwauI>-F6O7>G_hPNz#?kQH{L!jT3By)K82xq-0-|y>-C|iI-OaHJAf>*H2#msG7$@Z)b(i6?E~AlkK*^q zYa#Wj-X~Ah*0oUJemP0Xqgngq?%ig#+`m5=qr+SjXTeD7!)s!{{1&%&SsLt@d?^vT zfc`c)l5%`YJpCasj!9C5y6E{Gd34q$zXirJJ5wGmJwtD2$~LK)B9>yvkCeN1sP4kz@Go&JVZ<#!r;ry4&aawl|8ogW| zDSb%!%jL;fV82=}FV#x!l(<5EQkqJqS0M2ruy!XuA^nrqtdz4OAHxW459i7y`~ua8 z=jk%WoS$vc`0Y4LA*|PhQ1`t&&L^RrT2_`2`noMxMM%kjw^5oUP@%<}nk_H{Wfa2!t>qoX`r=+`LZ4Y_OIPC(RlI5VL3XE)Zw zp9YP(fBiG02w3rzi%@z|3sjMoy&;>VS7_TCaz|+Z9ehKMlG3Zbd_!J}ds-1TH%dDy z$A*f-wI|b;FIu=}4!>&_%*{-nv#9?9dhRH85#Jt_gQ|W#Dtk#%1m*qH78stdeN5OQ z#Bl?}(+VnQGP2LXA3q1_z(42rpdP2?;J|p_a;`pH>x3WQM$1c|7fB;CZP2J#VRY?j zh6k^p{G{+dB%0DL1Bk{oLRobGvNIaEjuO$2D9O9 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ν@*<^+cZq6{H7CWRn<1+h(>P141m4^$ZJV545L_vy0JRWZN+OS`=*`fzh z*NVwD$m#BAvr^IV(GR%y6$9=Kr~3%?tyz?Q&jaqhSP!tqQI7(PKb2qTz%%fOGnAvq z=O{V}1EOAZV9^8K88jE((h9XDF8AhCjz17=5xttk^Y|@S_CNZ7{~Wr-xr`U>Hs0y& zsPfko{xBCpcu#)7dj?H{H&`G+Osp^E@eG^l4CbiHSE8Yl9&leG>ek2U?#R_cG<44g z+P{of*do34%{o6QveNM;DR&K+iwo~LDacN@w%)0y|@ z22%MWprU^$%UoBbg3W(IG9)vyM)8w)6L4nLymJso+hsxE3{x2#Du;1H6t~XUi3qob z?RXPzLWU*ohYHPrSWYjM(QWq%;bhxmc&{9a| ztFeH@q9OPeY%15I`Fu2XS*$Z4vTXk9No=krWDZm_;+7N{37|f1NqgF6)USCF zM1@@YoaeF2isdraOw3ekFLD&IM2?mZqj6>{V6Zqx(PJWRSk2N1^bXh@QL8X#twd%b zT54A`q-d5@zArDLC12FzES%L-43nH$I^&8K5ik`sXHk10*(_fU;hxgvqQSWs`d6`y zR(ks}lt8qh_zYu6l{R0|hHam9r9E-mvX3`#1{n&YErGUAk$@OwZEhl!zqwiVq1y!5 zp+NVtUWY-y%Jc;W%6;ZBTxw+4sT{t=A3GK06N&yUuwjN5y6tI<-^SAP2V%69H0($8 zRw~z0ytO4I@L>crfJi0xc?>@hq%Cgo!A@X@AI%IS@s{=~bHW02hDE_S{3hBU`8gEB zFfCJ$qb(`ME0CE9S+kt#s8xSt=x!h5k%X!MNo^7`cni(j5C={Z8f3l8HiuZ z^;pSoqOfUGQC&4q+zf6a_yaj+XJ z5==)XeWGy5Z{*>Vsa{+D?Sub6+TH~$%4+Q!XNCa=8DK^R7!+YpR8-W#BPuC)L_@_h zDk+#6Dl*UHAyia6q@bu{CASqSnx!V{SQ@CLLt3F>VOd#GVYv$v6L(ft=>Gri^*kK5 zyZ8OS@AqBbTo=qdYu)R7c-FcPzq{l#R3aM5vA;f2*XFcMS&IrcW&Ph&rzw9?e_X>!e7=&Xt32zwxab> zsObI2(YaM4M<~A%Ca?wGZE%{LPh%43R$;-$B!fikQWcD|Ao{wB_Z-nT(1U{>-pq!+ z(J{b**w(AVW}*xR>k4K>Tahdx1$21=mXS9FF~WrbVKR9O#&F_>3|{Sm9|1LE`%%x~kyK7dkh)3zsel5I^jrkeAO#W**bD4_xu zb)gxUd=6K6@%k31j1}WBA;il)^3t<-|G(#r6GItZ+O_XtJmuFab7RG@6?MlN6F3|( zjISYpG-V~s^~j~EX70^u7RefTe^~uCH5xh`eW@>{KeiI^2CQQX{c5 z2$%Mbf-!i3FW!h@eHR;H*3W2E9+L=7y@KK=!b!I@50B9AqvSi-!fKBU#R9t)j51!D z1Y$!R80xIJSMWRLXEKM?GF>%?#YD{j9V_movEH3tLYRQhC>3cLG^217js`n9wrU8mE<#KjS%98ts(CRSaH zT-Y5a367}ch$@bV=LqdhR4h0hVY?{A2XamIt05R4M2=qJkr$StYVYl(mox?2i_vahQo8WB6YI zhn4dRE!~ft6BlMc0|OBPL1UcZ zM^v>GXNAddcRFGr`r8wW>c>1Y*4+jZ295k!h6XuOKg zTQe-`7ELmR;ybpCNorVlnfz(p+iAw)q{SIP<~Xu6!^=$;H=O&z8mOL=NpYViwk=Ls zn&AVx1H^Jr>IyJ5vrkRX(12@+UW7=u;tk6)K2=kjUlxSrmoLzebtNQ6aqdI>sCux) zjlA1FX`uSy5awDEv`{mYSXn~5scKu zXBAJk&myb3-`7A~HUqutJU0;h@#*u!1e%0rM4U`_kQSapOE;iW`kYwIgl;HI3h{<+ z!X>j-b&zf&TJ@w19O3+Y9OU!K^UaV$2~3K`wN^bXc20mqy*F6H=69Ze`SU;>PE>gG zG!JPgyBgU6Ho=&xhd96 z<@|VqWAAb7wOI>HDjkj6F}ov~o?L*V=pHQF^!9Vn^7Bytd{Krwup}hIB|PX!6;+zyy!=gZibQav;pJW~kg;3oX2WKEt8p49u^(ra(E5 zi6H1&V~jMZhS3ifkWE6LZ1nLn5MIhTjNAZ?j6Q%Jh`+Z6O?elUnIl)m@e?*2K?F4! zxiXYoh-z2fTLVQ*rd&?jZwG+KU5e>4aiTBuCs+gah2?$ywF;vYGx|NAzJoAx3-3hg zDR#v=$W3QLOT;SPS0=L9eM0P-piW zrR1>~kLtAH^uzmT+QbE&!J0n>etNH&3!n;zNA=F(G`D<0hkPiLlH`DLi+Or5WejF;=n1=b-OW(f^Kzz)qDq8;n$bpNp@+ zfOZh(!X!Q359@!{0<$WN3@NcEC@}s{p0ppKtS({{^AqyGuV$Q`4g$b|%9-FE2q@co zz6t)4%HEg*yd3S5!E9ml+K+Nal-Oz}4xUq&c%BB}~_cy6?M$r#f(C=w-CnWrg14sEAbD%Hq^JX+K z#%%N~Y0BzjWL5hQn2K+A~b*x0TFd@j&qpxGO&4u3+?pltPPAAqG?MJg5jv zkoqd>Qtb_uqEhP;?5mprD`ED*V|XNY%2i~L6K{veuc`~$@y48RD#xRzIiay%K1BwV zoyTIXyJDJ)E~)G|1Tx1zLX4hi3LREF)5V5Et4)_24=LNB4cNf(=()2gtIt3Zeg|2Z zZC0f&v+<~|PM{w?!>YTN%=-b#8iznmJ(=lEq!DjR&NMe8H#eNWK+*f;oBpZ*0>IM>- z(&a3bF*rfdL)^nt?yZN8*#~%S3;IIm6KLea7Dj_!5j$8K6J2i)3-Hp9`)Kpspv5AM zo1m=CSoKJ3Z?(ZjL#&cUS;;6UwFA;bZE03IvnKg(eHymRQ= z`qV5X|Lj^%4Ha$ygiOhQ=HIb*Aa4S0*k|lt<57{v{TN*4A40Q@&vl@dCvPYN!1gaM+ z8K*?pA@SZg*I%y)e416cGxCjp0azGYlzemW;Gd=tHs*__l8iy{6KyXYV*<((0|=3n zlIui3X0_TQ zCo7$cvxfOD01tMzq*XftJ5bWyNRxkxB7kpR&|bOaK-1WOSD0h8n+KT>XFvz^Z5$D1 z_s;Y;Dv6qR*DG={mNRW|>^qG2+l7~*oeTUnlm9h^ym_r&mC1*WnF_AoR=hRW?+7#l zn_x{V;7*h$$@OnusRI=EB=A0tJZRxTIh0{g8RgzeDZ#y>?m-Kqzh05XHcxd(E~au- zUz56>kwOxHSMu!Z0|Nb%{)YIl+-^X*V6CWOjl?e$RU104fi=;RhyY)=v#8e*nJPkt zIDx^xK$dDJYEJdL1GU~M&3gZsT!F>+aI8%~f#bMXCE0s%Tq?QO-RN(bCKEUB%HwjH z;9HAL>fK5+WBX%WrQBL<^iNSzG;ijca-9IabgE6Dx>%|C3As*-y9DS(%}>fy5GaC* zvRh-fsg8>b$MO-qe(i5EE|#lOmDdUibFrCv^>;?{2^`#k3Z`#@X7IT&di5@Udib%X zgQ`wO(1;0WhM-|*7&7~x%lx$gax)9*`cd4uURc)I)WSSn4ug{7(VG)OaAA$ouMMP1 z?PgD{qNfk!jt7wfHltT>GJG&5viSJ1j7hAl7fpBbr$%a`dPQ64xPJ!=z|^)@jWg53 zPJTEmFY)hA`fgSqTBw>CMRhl)03&jVfBWL$=b^wRGEeF>Bq|%3+d!0SZ1Ys z*AL8~-@)Um-UDe%?3E0>HR7R~itDPLoEt;IW&d;&=wP5obss{rPj6=x_j%A;{yI0b zb+O~4jCze~5^W#n5kime%=9m=z6wDHpH|)JhZj1xq`Ef)G;S*B`-GF>>rMVN{IiVC zK-;i=21)l4%Ka>(d(bp!BC48swvCqi*rkB3fGQ|a!wO$bN*B-%5T7-q`W(?`(N0yP z*V`uGm(M7QqiY~7S2sFxc4-9BD5liUGrGI|3atV#AOGm&ry5dx=<|%RxW!(Fd0j#Z z__X$Cpt_U|y|MfQYw!oX(z*%rpl3C5JPxtHLQhJ1W+~*q|H?&&L63^;C3s8gOJMk( zy&M)Rb%T2t$@~wfomD=Eb8gx<@Q-KS(g`o}SMqQsW0R+3H5BYC;S-Q7vFNw0ii1Nq z285O4GMqiwU2JvAeBi$P4#}M`I!s;)5D(Z5LI>-xJ5;iYQC@lxj!h{Omum72TaEcT zj9bV)Nz~L>~KT1N%$2Wl32Wo1#l|p^& z+YBSFN``g5nA-5B*yAaod(m6z_$C#iuIT&bib%>E!(|R|^ZllR1@xf-ZFnt+wI$j$ zruJ2SjiJZ3SN{o~|GQntj(hF5p+U z>U(ghaJM>oT^peO9^X-(@VD@N2ISvoqD}b{n77iB9Psh*B%9m|2UXQ|bfbgZ>4qmeeOPseJ>opu~!tA?!ftG-BQuf-wDs)DJiwCWT zrXb-PtFeSf!nu@3g7R*lVAL0&0#@8|8gpzG_U~Cf8X;=llz|{_s=kN_?uY}t{(a!x zIeNl2S%eAaR0#svfx!YQvcb2`>W>L5dq7+~1M=#A)4=WO4RvsVMUXHV;yC?aC}jpS zdI8)qfnoe1_OL?MV2E7|CHG`A)D#6OhCq*qJf0j5Hqd6UBUz8azOgHKk}NaSF*t&7 z)g^!xB5!IzBD6qQ@+IUgqVr=I)*yKuVg<-RN*8cWo%_MzFjr3ozmyRTD&CC`r^wxN zjQP|F>{8SxpJB=K*l$-Yqa76N>x@}(4y^UMJ{FYP4OwRYYc>kxb~|hsOW}A@KtVv( z0+#hn2*0P&l_F0desE2Nn;}PaGPV&$s1Uso83W0X=(XT9$Q1>!MFo41DLTU?GiG{n zA!LKXNlnZNC`@*yH4pI4s&hbpEX#pPC47N@Rf7B|1WEO)6EOsjAz@4jdR2H?Dqv}T z%o~vBCVYWxgKOuY8{dK?A!}blSm_(xz|n>;BC4$$ig!sKa5ZX=Aen&dH+_KoO7Hk! zfbI?j>-q$sL~2VBn|B;Vie%|M(GPhmQMhgZ_~Ifgxm#DzaV{}N^kzwGICE%|Fv1HS z*+7?&Faqbp{b^umKZ_ zfH_jJC|9R`T|)z(0(U*{IfP`r1%a&q`;Yt>4NWe23M0q#<%b~R5Wn(bP`hiXC?+8g z9anxEgPS}Ja+9i00!(hK(AJxd2m1K|0xjyuIzLa=v**wr!V!}oxK63Y7ECbuXY4n% zTUmC?4yI(h3f35^XL+vB`Vj~ldOLO-^9mzcD%_c}C_S$qc#C=4L6|)7SFl?j^hRqke7`i5?4B#Ia5qm=Qb%SZg)|s9!^CaN!Jy`%VtT_# zQy((S8Vc-=ws;9=zlVAkd<=h4eP~Us7K`J~Qjo>8(uthm7JbRwE{IcUvT$T544VhbcKMqtr71_Ym0@AX_T5Zqz_EBsJVa3Du2LNVn16 zF^mH;p_NG~{Q6g+eiUKB9_?JB6hc7CIGGR`^Zg7Dt?Cy#zHd^Xr@bcz86TWj8COGpKNaW3 z6RBb3wzFMeeuYm2)$M{6*Mr}j|ReRGUItx;S3 z011uQi8H`Nj&(z9As_Jg@=q(5WufM7)=V;w#ovF*Q)q0|; z2?02QR8NS)DCsa5j_c6GcY0c5DSH6kliC)jV6UEYkZlXjfNd=@d&2l46JXrPyFL#0 z4Im9v3rzn9&p+YenJJTk_U=i*b04SFb~r6K zQc%ls(8Bj1X3PF|p8jB(tM%4_@ZTM$w+6DB=F}nFeYTHyLOO zCp6#(G7Lm@j+e<$87UXlaO+Pd!#)5igZ(ih3Vi=okSFf{c#b~*OD{bn31zzWp%lGi zhB?0vSazX4fSo8eSfiQakFIZtUx~AyU<2Eg{y^BN`z#H;+B(TV-dmtYn3V?`VCh4= zf24d5j5~`lkQxH}0Lq>e$i{wV3=$7B!*Z_zoPwRT?J@9Y#+X{vHRR<&s{+S|U;($s zd3X{;rH)tEU}NftrJVHgY;(R_dy`5_Wk!r?HbfW{y%KKW-`048HRg}5cV_rQq+n^O zRVTvJx(PX%+jT%Q&1mMrm=2KG6+rk015WV%^LrRQYr4xFY^Mh%w4uODk1WGLe0R26 zM^!D^!jb?~I0wJigU<}1M%T0L(Y62{K@+}`%U7o{H2`B6swd>{IBt;UzOSg@tOm8LNkpRia5s6!%uEz1XmqjYPQ9GyV~tLvn%>r#c#7|1U8tU< zqT)W*gQ~$WXtxHbTc~J7U#mG7C?P{k@mm&$$2M3z3mlVSKnuA{Q6GASc`>8ptT%f6 zWzdKm5JPc?fWmB-%2_I$ao8QuUe1 z?!`Y3vVN?Bb@@%+33Z>K97x>i9N~a0zlPWlh^^o|N zP6Mqgk*q!d)_aaXa6n31AS*e=5I*)XUG0kh1iA7&5dlKisQ6o_BL0oT2*}Glds1Zt_gTO0rlywCsi?gcl+7*fIMIunQE)G`O(d=A z2U`0Z5ZVfd<1y?7RAdtTCsN7fu+v9QPqmLd3GrJ}AYh-^*LbZH_m#+H*wq~w>mh+T zfJP^rpQbBLo@xcdN;tC$=Ci9f1&cFo!f!}YxFioF$qIJjj2p>Ha^j3DPPXEVTkAGl zIpYcwYkdhsWsyU1AQrx@_{dvqpJ9c&w89@T10v>HOGtkbvbvhNIQlp%eLQL2Q`Tox zJL&pU*40$H$A^(Hu<-BG^)%~hRRpEZ$15lLuMoVs-pB+iY93BTm1k2R=iNCUQ)-@7 zQb|m-nqqd~&`>iU`NER`-n|Q~5{>ou(5fvibo4<;2x-%;Ni8g)@(f2{w}%LHdSM0^ zrXyE-n-xf(j`S&q!cdKcoYRwT2wRBQYp*^gD-8*7k;->d*ob{zhP5wM#tp^mGQ%1T z=#%RiI2|Omh72*ninp|YWKZK?(&&C#yzR#=-C`#1ee)rh8yTa;ioR(@4*ChtLdQX} z#!zJffPy5+YEkFFXX))x@KQaor-7zsjtHc0Yo};&IK3$$MfMFylqG!>ut{vlT^|8y zT+Cr84@fqvg=$+s8gmd4s&cw+LyerPF?k}M2BrCQClv6s)uIA4?9K8oDR9St1IPt8oD^1OLZ+^~{vq+z zhC;pL0VaFpQmbB-M%S032c$pOqX(Yh9OnXYB#nPr=D0;r`7?Nbnse8))1K?zICfcr zl1weKmF$w#^s{GZ2*qdOUS0_#V{2!1@7}a#?bDH(-j?WSIzDO=;0$d+ehZ%lA3bhL z+~l}PKmh?Vw|->qhky(inR{&1Z=RL$TY%-Ako$8& z?sube?~l&CE5G7$&&TIp17wzddR%hc6LB-*W}c_irT#-{|1#?(b!Qd&*&4Xocl{Y; zF>>=jC6PE%IOj9j-$@8Y}uVBeu z$&%IpIsi78KKt!0uaw*nkFoYJzUUDXq5HxW+nP4NERJ@8ZqtFu%o5!cT0AxmIubb-nf7W?|(y z))B>HHdsBH6Ykq+{o>zg&NO>OHXr}{qc_!W`nOy~Nv-pmh3SJP2%xyt^0_m9^9pU$ zZ_{t`_|StqYwNI%ap(9P#85M#I2>v*kA^A-Lw=0EToSfCNoTfMg8*sp={DQh*3;o`CZs0P^aM$~BEpPRW%e`>3FNl!(W_Mulg@6z6 zc_&XgWVg2QFJ+$rQC|UG=w^i|;kSg`bo$DUGw_epYP)s0s+4wY$Nj22w5y&5&1mE1 z!PGZyT`aEKZr!V*!so5`Nb&&BqHCWedua9R?m^`EM2{Ex))X%qFjf=jH{Qn*=Myp5 z$2{1_1Vj-4h`>B-fERdnFS_B_vIjhrn5EdZtF3sv5r*AaL=@y=gU`DUsi^#D4aR2u zB90w-UcI2r89o~kx^95YIy(=$MZPs$4LRbNd~4_4kvvQAnZe)xhGF75S=9hsf~W}m zB{k4e-0R*({ltbU$|&vY=}NwJ0B)_v7uiE-W+`eufUIqxTsoDkt<@1~>Xy;6l?sp} zWc5=e(dBCB20i$+r4Rj8jgF88&T*qxKbYW4bw+oMe~EHT78^Cnj>TUE1?{vB!7KEM zoz}kUcvlK}$=U}Dlgs>AqCD2oV=r3!sv@Y(O9+L5&y1bcKAt-jF2(b-{Xj%8wfMHT zuUjueb?3c(w?NFX;+-M+|09|PmuTFC3$3AMi z@?7pt$Nbm0(U2FdQEC^s=6=cAqpb;fM?<#DpCJAR+{1P12|il< zYkrU+^woc#Pq+Zh21y#1iw~CI{5Bov+%9WxH?CqO{jtm1U8RxTOVk;C+*dQX{80wq zXA=87^BC`WiXdB~ba^s?h&Sd2Z;r z)gCCHGa9G#J=cgobMVaJ1C;QF0`4J>!`nX+UW3J?a+xR6^1o>1*JC1lL1TEL@{7@y zR4#Myq?Fi@-~~je>BbRMJW)TkVpfJYkL@34dllDz9#AGM?pN zmkXQ^9WVFyo5$@}H%0&#Lm|GZqjWI`9NVXnv-2g0;I0Kh zZ=z5attenf!C=1C-53h>3?EPAd>N_+$zx3>@Ncd#Dopmvy%2g2H=X@ZxKKSVhdP6B zdB6J8T7PFzga4zr*Dvb~wLSZ!?7SHmHQ(pV$pO&CXxU9UemiA|NWP-#rButp9K~;FEe@)h&2>JxOM@yGbCDf%+2WKEH zECQD&3cLK9V*_9?Gy}J;Pugo$fJ0$5iYU6CX%C#0E0QZ(Q^;hpGOdl6Yb{+SG-f+d z`85{bEnUVnhKpSvPhO&$lN-YuHaGVc)a{5hAZQFWq2|tIb|{qPbi1u3P`yt@16#WX zz$|0S5!AY!7kvY54h-Jgcnr!Gi3c@izFqnC4c+GG%ObjA-*$0nh#p97j#|5uQxCyT z-C?bfDn5l43hP2a6Q+A(Zh6YD1+?-ga{E!_)~_-8dF9t>I)dm{r?9Ctcl@$diCzju zz_9Rupo!QFTe^&FOx_SbmAsFkWf1v=tbx)?=6uL!s)u5hTv!3ft1V+qfiUzDQ*|e` zHU(KkEutE;X=u|Sx{Pds7&oc8bDf6hzvux+?-Z4I{6A8^NL?M)K*L*zXxRvU21r|q z+w*i_ek%=*QwP9@Dq`)6()VzJt33xEOt33fBP+I$RDoNr<*(UToZnzZ>yP76CtOK5 z@GI*$SPup5Sax;X8V=zxZuUaQq>|}`ki6(g58V#?G+q9*bg<4YK#rWuC79pAzlts3 zemQ&N!e4j@S{*6>1dGrz8~myCi9iD>Vo&UO8$$4lYiGW*3AJm-ygWu#v`=RF>=dxd zV%Tuqad9I!RV<`07>8Vn*m}CE2(iKZOUKsmMFu=p30x3HdkEeH_LOLCLN$s^W=|;z z@!(VnIezI=s6p~C9CjNFEdk6>%6cmGdzf?hJ~)DcF5%Bun2oaGdU6>470_gq!Q4+B z)8(<0Kc2<^c|UN)!||{7MN~r$>(>Ir-vco=xON_}90GJO|5q8uoJruf_o9GQe7yLeEfuIxi{mCyvZ&i8+LN_sP0(C%WNeFxrkxT7!gA@*K zeFZeXirzr&MMUZGLX%k z53Gl#Lou3P#adbkL1>#m3DA{bk_EqqnG?gmbao7*j(z)Ny@zDUlfc-`d%hFqRWJ05 zP_8ISO2G^(K^bCXioV5!6A?N{`YGlP*XnD8iP*>y7=00&&;dFb*{2$k?Hr66lwQNg z@}VzQAJ< z5$T_I4$nW+5H3I)MAt_;F>wT-i3}ypOCgf6TSTe~hNiHeLG?s-0?k1rt7rDNG+;eC zXcpe0+1lwy!HcJs(~8AY%hNy%W%77Lh_x&hfPfiDX0;{}n|HjQvOvXT7ce&!TTyOS z*&1}lkN73}-(dlV&sl^^TtW@X5RCAYceWxeSF*|pq#iS`dRepPZ48^x&C;F4FR}h( z&SDR7K46acJ19KwEexfoP&zAeCI61qQoz4zOPV0lqy43Pk_y1Fkm$Clq{ctK1KDp%f zGQ5NHkH=9V3H#3fz7MKYm{R|PJ_vSVXdjtoRnK9@{!d$3`wrH^|Db_lqy_esvsIqb zA~DjUwEx4AE*gW$U-=GH`2MFgxHbsG_{d!QKdeDs`TwHj1?oI3XI@tS*NxU4#%ubK zp{8^+oa_K75rbEx#ZnU+MLHjSoR_WfvQ}dKL$s(m3gec=*lXgPRR3#N zbmxb>HM0!0ei{~ucn!v6;I*Y^L2AM(Uc`L3sgFi0W4l14Qu)|)Ksb#>v#MB=RmA4~ z6Z@Jt`UL-o?1lbn7K=}1M4wl&85Mqn_m;rnsbZX=(%&~@)2iWpd=CU_;w_tQ(S%do zxnyKuLG8s`R>1d&w`|PRi8y48L7xg-A6?lrZGJ1@y$e0rWJcer;z*$}E6`*F&{6Ug z>qJVtF5!gvUNq{H^%VM{D@2#oSFCpU@ZJ6~AhvQo=6C8EC_`3#G!`QjvKVc>wI1j8 zz-2($c^zgjjx9)2A$%$@UHU3hJe6LGK*xN+C)!0DG1M#(P5%HjFJfIm;czU0!?HS{ z7t_}wS=LzS?+S@%-bd&i=cLi-wvLD`V!En8j9w{g2c~ZuhDQ;`($soRtDE~6{`Cf( zF1tTk!a9L6NXh9mOv=>|c}KGMu2Ri96wX)|SzmEhjAN3=B&8j(AC@q7M@0#$Q7XbX z1>2mAm9Au-y8u%z;*}(5K}$$VUxX}`F3v|U^t4ha7Kv!9NG)^eRH7c zQw0m3b*f1Cx&L;NTk+1%t)0~L)fd*n5bL5v=`&LoWkk(fwD{?H8BfhzG-vV5S@RYz znwdUl?qV`mSz8zH_|lpS#O+I3xH(Af>_w4PRvq=eVV#xl2X2D!XBInCzIu(N?Zxmb zErsB~oZ|(J+4u znZ+A|8YnG|ly^fkFa^y5OGb*sM&(#A3ffUM(4}(RnGBECO3tQ6dRr*e)Y{1AT(SKd z@^(B9cFg)#P+KURWQXUB8mm@iqr0G`^cyfsan1?_bAGS3Jsr7$5!?2qs~dQuF3qYD z22#g49T+1&4gur-eYjeye}T z5ABQwZGV|Mr72M=vdGkO!2a15T%SulV41!(7VI@R z&C)A)B*GOEQlcoNqQvli*lkXB(yAuQj;|%Rj!*(rfJU?miyB2d3F6YjePEsHPCkR7 z?o*Ek!?nS3C9XBrrHlz9c0uPg@lH#$`>@7LX?Qd^hR8Gr8%eL618E@(@GG~(YMY#x zQ8kCH?_1Y!1kR>+lvVeK1x_FZ6;)C1nLvG*jxpYa1FX%Dz(O z7MP!#0fq!PI+UFih{-u=D)a~tW;i%ZE_$cJGDcP3!7yNF2Y!ayrv+v7Y}tY8GN1>0 z;=MLd`y3(Dr^sIzfGeP<#2wE9UgLIvQT=QS+Ip{h2h~A3{$86vL!m<7)V1TzgWh=n zcnk?srs~xJUNqwyBYclPjcPk?!|FRz;nz0Jj4PZ(e{>9%)(L1=zHqNQrUV`h4M+@4 zx$nI@+(bvz!vfW~iyn0y(1B{z!(e`{Fq)e3G~5KY)9jdRQkUsOjVT2W25FSsu%;Z3 zUu%Uv-T+Npiv~CfQqPtE@|zoAGQ=xz9;4wiq?w#r<=RJlDFlyE-xCPDf-Va4$U@x;F@Q;3?EAsPUoy0GM zMwo+U)viNT>>q-qU0CU>pa~?N2*=w-VH#WH%3viOKi>&ENh(lqE2qr|uY|3cjXzz25AO%v)_SX;z*ilQvU-+(#gPO5k`YI+Ibq)!Tz$xzih4KPScK#YpL$) zPXiCYDjk?bQ2RbQ&e#YzkkVL#xciZT`ANWLIqXk9-Qkcg_LYSYA(+P*)ffHg!{fk& zsQzgq>|HKQFdFO%ue+%M*Z;z+irq}9KZVV5B^(a2e<_3WKL}InK^W`W9^q+#sWfUfDp?(Mk zYnq&IN>la^ki@w-9BT0Iw$Wo%MlD|6Q3cd}I54D`waI|CS-c#o=?5l4_LDl(UmGkZ zt)ab%W*E6#nJ4T9{PjxCj;7b-LsUEvFQG9eZF@P9eaB-`TXpZgw0+jtt|zxjH`PLc zXt}F&v%R_xbh747iPZG!)vpg7U;8v19)9$cU-7k0(iXMH+pIQm>xJTiNGZpaqAZdm zn{!)kL&B3X6iVg^owtA)HXFXyYAjNoM)e%2B)5R#&Ala06=lD_4S)~@ZY{~quP;X* z$w*awB=!$_<#a1HIPmT(b%*W8-B>X6@1nM?`4oo{bxiDRR87xUjEu zLru;Lc*6^aM6vZAc)JKY+!kP$WM@c_u9e_Y5X%B9=V5oO-)9h^f0&Ga10h7S_k@je z_8W+>oWQ?2He9Yh31ORXMPbeaPdE5_3Jwt8!a}<)$O|v!uA#6GWy9s#dQ5$%u-r9+ zog4cl)I#;o!GD&0E~I4^YLAW88x1w`;96aI1ng2Y@B^>znf9L z%Z<8yuMKb;#Do-8k_&q>STg6UAxyIL#7^{26=i%g6BfsTW6{!?u*mstkQ73tqjAZr z^Xmt$UeY{Vws7~xY!8RA>=MW?#iKK69@HDBLa5S2QqUXDcB={ZgzC@cf;eL{?xLT~ zMW=CEb1bf&;t^?aBIF2>f%sMX4$7#0F-)6(9tZTimm+a->SsE)&k$ISK7 zm>NL8BR z>;y(@eKM|7f<*8Wbk9R*QNgycSy%a1$raE&i#myl)xC*Jrhdo>@H(p@5X!D{!#Qz! zH(Yc3;vQ-rg6c&cMq0tlD18SuK7}VcV=lJB4#D*%{TQn@pG^)$#+6IKASv1a{)TXH zRlNu`EBX?TqT{83=qM3ew*_w{wtvoFz7&}YDTE&AGKHJr)=K7$mil0koZ*}7o^_Be zFmE)^-viyi@|<*Tk8?Am5Vf;WiL5KQPzsOoRl~qFn0*ILE_x1^dci^w+?cEx=oKMW zN?;@4sx%~v>1lzc_AU%z?R9iq5es1=*;Bbi(*b3$w4&%$^nBK36d7|0Df0fp#W#z& z^a;m6SK5JFIvx257xxKcjas+Pn6(4xZU-D5(>Y1PzhD-acM@EJB7dk>Cj@XC+TwVh zV#MVqdjxton8Ql%4g>>Z8Mp*>uFz3ViN|cqdKYK+gi;K7J^Pm|SOxid>;lZ2^p|mO z<1kfwIGT_G^Mlc|!V0uKt=T^tCY)?n%7&C~yp@{h_-L45+D|`a63^{rlg{)NPa!Kd z>0~0Pp0P=1`ad&dqCT=QXFU@MV@@U-BpY)kbVb8s)EniLBS=_u>h^b%Q$9{{Z*xwU z;?P+WlsUmO*t?^nBDx0u!MU*C# z=61sZTn!F}GkD1fu-kZfF#4?i{DKq;?u$XHcjHlLKLP#G%@;TjOFG~v{R1yD29&j| zvt!{igGJ!WHu;Gc?&O7^c;QYy_T7mV(uK_Oq&B0aZ2D-aWGH@Xw3Mcz=YphQdTd<} zFS^s)%Z-x8N`T22D^;m!*Ldkoa-Eb`j**2cJy4?#}h4QjVxug@16{2Ajw~!tfs32|cdD_h)OV*JQ~|2|Yqg!Y{jX zGpzL_cBEGAsfSiXg^!*}CnIUWPr%(uoB|*p$EP5%@7n;9pS)o@QGpX~9)UR#GX-?I zXTcwcjeZJ@x6eSAU4Sjn`4vu*C#IkrX%cw+j(b@04vwvS(+h6aapblnNdO=0he2_E z4Z~8)=bV%u*YE6s3M6sehp{%tCt$`n!;q5`k7}4rcbh7$!f9wYsHWo8?qr{wy{3Vn zbf6cCS~LQ^GioL-y4}`7Q%>EpWqtu9*V5rJ=+0@9DZdR4>4|ahWhA^(#`0s$;V~G8 z=_s@65Of_YSub8#o=MYD%j%Et>M_6G%BU_h(b4Hr2g)jhD7|v^RA2yhWw6dS-Jva0 zI1|0M3rhb7Y5UZ}-TI)`FpviPJ3 z7gOlfe7O6Qj$%ViJe`8anW(Lv`?35Zu-F#nW_nQOigw^6HMj*;YunJ#nbJU-7~Kzw zqHm&?WbnuMAS{88mczlTD{3lfdwSA?AI%;VKVGZPKY`w>?vn-upEDi7>|v8iNBEO? z(XbuKi4-ZC25pDsjibv*yf;3bZ_0l?5onfes9P#JN16hoh=NYATrkgtQODv`)X^~o zb574TBq#XM5|V^jRyof=g3uo^p)jW{TnByEd$W*RWh5~7U_sICNhHr61x+NWBl{uk)58-TdiKfQp_-`Z zKJYg>GCi{R-6y5j%<4Y9Y5Uj1A~k*cT6$6H{l^dF&eB0iB}wCa!)(5jshAEJaeDD$-nqoarq+QB)x zn3Px-7qgrEb1r?2?1Pqy=!QftF4>BjV-b13E(N-Mfo#?AdF1D(4h*G%uS?yaEVK|Y zZOmrQw^d`lvC6L_$WTpXNBj8&l_9apMc+uGRet?aeED^0wMw;x%9h&#f#aHrFWEV0 z%;zgi#YII@rCRl}h%J8Mm=y00ot-GAxpz{ESA8Jpfzc{bSBWpGbhw*Tr{tjia!}m} z@V|Z(#KrY*Ns?NXE9YYFI^0xTa7r@6i0!0gDlR=OWntcUXWK^O6PLlWh-t z{J@IFS+DMUNmE>KUfS0M0h4+JUQQ(kGII$~i1~Uq?*cPo!RCx{8xa`YBvW z^uK_lhDq)Z0g3LVVer9u6(kYSc&zG|rp?V~T5dnN!3)8|;8T zMQjPj<_$>1?#U?&1Gy-%n=|=2TZz8Ok!)iEf%u3{(_$$I9 zK0}zPAHve}HfoF0Ka&|1y0twW0u;%U43jV%p(021r5`Y~pN~RWfm3gn%PzWbT zI)rHbB}AwHg#D4rQd=~1HWYE0HxcLHq_vkM4D5S2N=Qt~MXC}h%2tlyCFNtn}q7>e*!`5Erdm0K)ZjvB>8&&6FOu3u~X`MKyIq9#ns%= z0!l~>hbXn26s8&`Ac)q0{NZPh$ zsG9MoM!80-@SE54FeSWBLk~j?ZGi@bLUO$5LnpG@LcMFH?&|%@TY3~$GJoEFpREr>e7a`ee9}*KjeA+$hilH{=_@Wf+^`zTWqk` z(oAZ7G>!4Ktx}u%(TBda4(bD;bX0N;Aj=deo*dLaV^;4Ag+&@}diH*F*4nLu`jZfu zLeDRk`yD3Z<>KEP&Kmt}M%6XCthaSkzow7~C)?|L^fasYhKNjnO*h(LTMZ3X3{!-Lt2#rf&K_Wwz}u~Q zUMP*xuYrdA;+`IK)z5~*%+I(&zw-2GBM`Q|jc92O_R9DB1k#Z`{b5n{NnogYot(R& zM$tEpRfe^#@b#_6iz*|(N1&=Lo#k$>o1oRJ0naFUI3kUF{86E3J3>;20pJ>eLGofT#4>&J)wZ7B3quOGopKY!<9;|HZL9@HGH>N9>aaI=W`2FbNKRv|juP+&jfaTXK3fA*?7o}P73izh9BQjhs`4?{s zv;q9A>BaWn|1z(C`Um>3o6XM^FH5@7&9*b7NAEt}qx$veKOsJ@YqQ_@*%iUXOS{{i zP=)vC(aYuWVMB(*JFWP3H?n7+G{O2VD4HzUpxfdIT*rvI5jOr2H zb;OX-T_=p3>=HL@0@v){p1HP&FP=5r)?4Q>VRWyqNfRf)C6vuy9c3xbA8%U$Hf-a| z|NrSPUlM1FV~fxkx&7s1MZ0Lci7B<%+i!K?0Qo$i90OptB!6lkh2wL=qvwoomGA~@ z1L)g}&u2K$>#R6v?_Y=Gt)d ziRw!}uS)@LGf^@5?9*zusCMF^5mmbOqle3)0|35fGqo~_{F-#UV|fe5=S*MP zx75~c^q(RV>^#cHseEq`_2a9s{7F&L9TeeB3e>Sm{Be{cpRmaCj7<-t+%>CoeT7e8 z>SphiNn1An;pgF(lQWCAZfo5`r4H;*ch`V@H;cw?PRg*}h6*D5-`0$*|R zk?Iod&B7B^dfNtc{DSO^5z<<*5RrpZc_E6y=J|f z{AoZ_sv3a`j!gY3f&%CRWO=vHW8bcobMBsz@r^hQ6(t(*ewq zGhiYdBSQ`X;(?KhL5bUp4tYwr;Dy9EY!hPYcEGktlMhoG=?|#k?9V}Ug6M8ZsEICL zU4avleF@k+`ylo+uNh=S;<8=6aO!A~ctB{t4qtH-6XiG$L#s^x#s_t7md{I5$Ixs%~7x$}N(n+~4+eKZ#Y5@0P8`pxtUG>#TN;ZY7F(_y#V zTSuWD++&lB#STsk!0WMQKMMbIZNAz7vdy6rD6c9@54?ST7bdShT zCwzjdYUK2eksGiX7J==^gOHzRvrzT2HYQki@je8zWid++%3nXrfv?Ejze0YBr|aCF z`EspsWk==n_hWtB*n~aR{G6Xj^^r`nLtcd!#TR88ux^nfZ=&dM&ck2+S|)$}A?G+; z{(4gmB>Ah4oKvOLBP12x& zCiM_yv7VRT)^@yDz>Hve)o3|&S2-rO5L!U{vykg8`OSJoREQEIqf9Dac~7ql2sZ&# zg9nwQ2~fT`%ahO~RwcGNv7}R8#4D|xm>v*Xhvh(c3+KhW4HT9^t3=HGR53lt{tebx z^fAe((#ccPu@8uW0$Vw{2n?8A@^Y_U0_kO9yQR3hkH`M!D^Gkt?n7@cC(?+yD5m$D z@+{j%WqGy{q`NejXQtR=XUbh`mPhcI{B=eio@;XN0|<||>xJ@@R(|R#k8Ya$^sF5B zKzhdyqTDXMJUjY`s!+|mL@rY7-!tS_ zS}QpwCA%XQU(+9;mXN`tHU^e8W@Ir=vAqKqMF57^F@M#p%KNzFQ--ksw znvVO#;aG=f&-IE8HsIyAA14Al#=>{NF3>1mFOQ4KQX-U+}tG ztbqB`!!a6F1(ofyjZok5r=Kru4IuL?AW4Yq4%O)IAY;`BZqazQQtnZeaskpSC?Ky3 zNGia<6a@?mpqE~;4fnJvlxB+B&zr6-LcKbGI`6l2ru)O8W1Jopuk+>_ZBqy(K}h!f z$WlPNMvl{g_p;xnRqqL))0{B58%nB8@`G^Yth+`CO3#z(Ra+M_4MvucGYsJEziQKh z`#O?C4-P{p&|AT9JLj$urL_o@Z!>zj{wjLN@hVCyxi#9Gy#JaGe}YJ?hNbYAucEYr z!#W|)Or&-=mDJ;v)G2c6*w@giC4n^mHISEbR$0fPlU!J)kgrw99Wr_4YoLhdT&u#` zLdxtXV-E$=rUNJ^<~;N7F7}43{k+l% zZ_$+lwh=&+4?2ie2Qz~&hMAty1%==vO68bzPTIf@)#8SA=pd5)NOw8X)GHnxf5-;^ zAtvg72qj%pZ-k%8kPvvPdQWLlCzITLu@rX*)huLgXw6+rpa!<4R^8h~mpFCB>o#3b zPBX3|4|bfA-Y%!NfQHJ?PXW7kIrE8MM~~oyKkap-*Lu#?1zme2{Zu7=wVd9`=_5v< zN3Xq(iqA38PnUy34!Ht6ulgK3@tIe z!_tDoo1u_!4E?aMHO)VUez^8eOqyU#vtHgx$B$t)9-}{wA^&J@QC9Q#N{VyXx`5Mp z2s!CR{^`(?6~Z`fMHW5bIat=)}*Dt%njG*Fl5x=2?p!I5k_ ze7HgeqlII)PH%!-_a;h=c~#dm3G@m-$xeH@TkK4bS%^#lTZ{>WwCbL1==7VYZaJ5g zM@dbICo74o<;3O_HXXFCyPmMMRxfKqqfQ`E+8--)hKLsOOlug60@{8;j1yKx)ngE2 zRh~c{&(aqhT8dmK3yx14hqao*P9mbb2j*VVNi1!z5So7ynb&yDM(b7HO*QJRZ~`l7 z+zB+N@+9)Qro{#j90z@*x|3+m%n-6EtFXQ7Wc+mU~lcG zTn;Gz2J^S{$stX3dylSgM9JP3sPr;u+USeXl$#V(jL@|G6TIo`4O2ZDw;nHr^X8=O zZ=rtK#V8=+7B7m~P@617TIR67UW~?N-p8Uyp88Z%;|3^+;r6ryiS;F%xR6zKT%i|W zDM8|qq13+wiDOP-zfEF`4SX6}HAP9EBBw9p^rjC`cu5KGm!Witlg4AO3Oe{m(nU&A zhn&=c>?s~EZA$J4osz^;X!9DHdJ1h$`c~2z?mv=zKkenXojiiqPN6^Fr<(|9LvjVh z|9FMz+fdt^6m^<=mIa4tr%^$OB9@;<1(Q#s@W?@NO&!zIEay`QAYF7!H4|K8#u89N%_9YErEwgmWkF-k8C33FdXWRJeTlBA8aTOWuzD2cJYII;O{Bo=bs=(kbLXKCcy+@^Y7VZL%P4aFX!?Hnh>$>mJ^A$`FC(P*S0 z^AX}-DC{iaO5R6%lg^^21KZO4v#1eEh=a->q3+aHE(%NRZB(lAEGm_>2U|nIu4!0e zXSqdf=}%5ye-5+Iq{!YIsy13lZ>H_%kUj-8vfMfI9EzUVmNuP3QkLZgr9G0=rX-c* zq;;G$lLw<97dl0HCuZR~3UZKpxgZ0KKF4G|nEg6UuTEoA0 z<6XLoIIu# zB|rE`^5IHytTRq-c?Ze=Ki<9sF3M{CpBc7cA7mSpWl$7U#K9F6bx_cuPzRT^LIs!H zP+=BCr9{C3LB($J*bNKI%!(4b6=qbBrc|idZLu3AmX#*j(B=~6|NESI2PW#@z1?5G z-+VsG`<~~V=R9Y5&w0*so@GCceG|oJ_MyApMDeHWieKwie1TNlf!g0h@p>*^O((ec zV}0lw6c62NS6tV_N-QTaW7I%#N6_5IY3>nhF(+s(-a?;%if-u{fbkESbW*^O4SroJr|FiS zAxgnf7J|dYgZ-#a$B|J4`M}{32g9e&XO6&a$;~BllCRtL+?EX zptKFePlkiP|b>*Ky4V-r@U49!S=TZAK z)E4p%^0hb`U?}<|7RP0j_73ulrybu&_)L_hN4{$0gV59WM=AMll(X2$k39c{;xSF= zJJq`={sJB3%n9!za|yNEaC}PVIJu3Fg5~exzsj%h-<*9Yp`gqrkej~`C2FYsD=0bf z6c|OaCM-oN=D(V9pw!BVD<~(;hUNkejq-cJsdR7=+S@5|ke#E5 z58|NuE6E$Eye%72E6g1^BokpbAxqGlf}o(~+%Pnk^@X_wQIvTK&1y`+O3ms$A~A-Z zMj|2!cg`xvk~o|07w|pT9tWWlso@i3nP8n#S+ud4J4cDp&A%v(?oLWPi7choxwM;n zPa}&{ac@KxwTVe&`w*TGsk=N-uyd}{ zwtCN4X{~O?hzeRi7qn8#iJTB{e}d9OZW5(p3OhK{JI&bGVm?C=T_c+3Mwu6rrI{Zq zX1?6VneIA`Om&>81(k`SkZz0DgZ*UGbB zq%J_}8KgGKk$UZI6kYC2?(gIb*jbDOp8RryGu_4#j;7PVUOy7z++T~CWa}yJJ#>KX z90XO+6t@mv5ygEm%ufiKtV7;$7Rp32w0|OB z`X{Kn#(COr>V8(#EqjmRhC{8?f@z26bN>_)zitG?pJlE6(NLXJLw?mWLONG#F#-8! zTV@koXe!Us`eT@)Oiqx6XEF>?NV|k*3QR9*!+&A?O~gv4<@#<_>0lxsxD~oASTyA? z$tbMOB~TQ&TPo1nt-xAWF|QmE_kp&noC3thwS_i*i2C=r(p`<94e=O010Df7Oy?N% zF+i9>@(@TGUz0$WDDfkJFjIwOuJ|Tqe9R94o}o;zLOSl+6a#GixsNXLHzzVHUU#v! zZn%`WfOFwz%Z!;UCaK816uAZJc~b7GZn?+Nj*qa|l%2sgGf76Tzb?^PLJemy19nma zgLy4yaM&9X_yvmi7~tL1&fxSXvBplKbGDu0Gup_|D2g}(C@=7o$9jktU^F0RsfQaq zb3P}Ql>fpAY(@9fOL$YM{VuGVEP4e?C%%cwe`3;ieiKV5v6Y!Ntbn*1<6TtrIQFI% ztWhsomy@*=$BWu)UEhF%_y**oq>Xf+btQ>c-~-KW#s`W{>zoqwqRSY>3H_BE7>W}S zXE6kIpGw4tW?;^CuE(r&VWVcBpoS8d@?EE}41FvJg0(fKXXpBsML9C)C+aZ^;SdQ~ z#Uck)<8x>r%YqR(Q*89(#9Ajy?%Lj^C0S>`B;%4_?Ceo=Cr_4ZycA~)gY5m+EukOg z2f|nTS*)S+De>n3Ke4sQhS~LNS+^a@t_WCeTM;=vqpsHX=xRM~?077CSjWQM+VuS# zP%YbcAWkoxn}%U$njt74R}#F~)Q5S3uI{QvRw*d!%%%~O-8$XZcU8J~=Q%rEdb>=Y z(#D|(UCZCsQ*;`WN1p3Ot5SQ0Q4^$lBK=u05^gq1pxbvI+*w)uY%3V*92k;La1GSL zF+zuqV_;t(ncS}4X1jWObq&{HYPUyVf$9dGB2Yo>kRwhvG{Pz2f>T50I~b4g5UGsDE`6ny6E)BtU=6rS%3;rpuA&`3NlPl?#eI$8 zvEj*fr02gt4^}p2d-mfBo|Pt1v0Vk6ZbMrRjc+bsQx;dm+NR_FZY4HIgw)ujFO<=? z{W(2@ZDktmU|h>F+IRsIeGy$&7`i6JdLBpI2-E`155U6q<>pfoph@9k19r4tb2 z$MYRlV)wZj?7G(u#`Tv-Wi)o_D`@4#oL-$I>+C>W3Z8F29j(GO9{jAKQVft&f9dx!fe9N8K?ED=G6EAhNZ##xD07+WJjSuM``iMmrEA zvNgTgE82_)~&s?@e*d4tq(NLbdu%xhc4wPgZE0U*GVd@HcZFp957Kr8#=P?1Z2)t-$z<6 zC-=fD3>XhDYTwk)k5nu?ZJCHjCHl4;MQCk@8a$-8XVT8lHieiom|(#vS=Q&MZ$ zi#7kcTDyahKFk*@j&MZiE-m&ReYBHk7(|zeR7_7L>+rD33w09Uaj4IrH`w+~aEbS`2&kw|0%UAb=yI+y8Bj zvbPPBqT6+ut=&p+E?Am;)!pFFlFR~}wx(-bX)3Q^WkX>+r?uFTsOwhn1Z7%4V(}N; z>W7tGoq2$E0Hd32dS}z=cI^Cf4q&_w*uL#d@p zXpRdc4|CdclyNq+jor%F+TLuJ?kc`T-x_?DJaz}@AkcP>yu~i3fdSpXxJE+*^ z=n3-uj)%xQ-_uv!?ar>A62G%ssI6hMO?+e^<=En{-QL7hry`Wbx5{dp)k7lDmvt_)Qn;~5R-6>4g#M%9E|Ks z7&eF_7?G{^a#7Qx7ww1{=<}W&2EBN?7+QgH)`r6 zS%hsw30p5i@$nkQu#X*bo1vU7OB2biV+?(zt3{2(H8OZRnBkW(hD}n3=mTd>#L9bm$J8U%-+kv>`zo`8>#_vIx8Qs6!zWcjn!FldyY&wXdDSjGHI(a*|rOI&FhZp>8$6x8X6&x;=(0kIO z%-gjEC3bC)IOs9fB~l*Tj?QC_h;Pd~Iilij2>(uT9oTJlu`n{^(7-NaIP`S@*$D|* zjVHx2PtY+FR=-spAkoGcGOxs78lwgYiVoKJrN@?1OQRo$|HMFw(rnRG{5<3+K2 z$Y-4ZaY(fB+>PDJjgSg7d(k{0HK>Z}8b)x*w?Od_wV;3l!V9PenIPfGXN? zi}|ot%#1^?=GeqH4UFys37y8Sj5}Qhy8gC7)Y*Z!1Kg#XRlO~pPM;m@*G-@%+sk4s z`S>0?mm6YP>H!gxEPv-g!(c#IDD{R73o!DJyYmIBaBQy-NFktcq72!e5@IM|qAfC@ zdP<0$Ajv;%1qw-%4Vk^9=^tH^rl+iurWoly6q2SAj>95{v;pUNNSYY?Gjd>mR*02= zyfi-=ReO2SyF`U)9EftnkQA2O&ec_k#v=#sEP$h?&T7w9P5<=A57tLA2v8V4z||1j$(lvmNf~(h*|`f8cf+(r%3N-jeh`--3PYEKWWODZYsXEi!T{O40ynUoDyY5xfAW-k zX_7WO(#c4W13P`sI7VYD&|S1*n~3(J6$sUSEn0DZOCnr}_-dp2K)B~-PMlvK5vzBiRmlUez)L3n3YkHORG_n%=#H6{Dx@f#Z7%Ls zU#)F^;+oPY5obqtgEHc(MDhM^nQe7K`s)s}Yd5;_O$V=C9YnP;UWjvV<4z)^ldu zP_FFbS=;JiSmx-uWZ}yB#$~ybIm!^&`I7jeyz6D-D{{!{4#@*+=ld9b0>gh)?ovC! z*YIJu@G?N~GSCZtfaESzHNxOTlV6eh(fq@5R~md6Pt)QIL7s~j=E2wV+LiNHEM7?w zSF-&Soo~K3v;AwA#~H8`l()fab*5p->QzIQ(Qb-2WH2$_+kBY-`_&Yc(4`rfU z>9Y}-QjFZiT4!zR2tyx*>x#t-7iO-QPnL0pCKu}q)sM%(zA@e~(3WuPT~vK}ydj-V zyeoHgge^FeK9da(Q%llHD5y;~;P~&>t z_jW^&+qE()4jrQNBHx`OB~J|Jdcr=_37(KGoOvegn1;;St=7yc+QXR#N|`M`!l_es z3i2U5JMzirY^7&X4EIsXWYD6y&7gKRk7S<=4Qm|zDlU2;Gp9}XZJPY^Q51U<9tWrV z2@nYmPmT^gXl17Mj}-mfiq^@ zDjo0(mpxBuAV?&U|G24Y*q>M_e36!?8v4oAV}zpyca@}D?$MXK64$|S)_@Srz?KoV zMj zeQVlug9?{@+vfNLl5(q;QdTBta6j|96;A=yiZj4-SHQ5rA}*kLxyb!%V>9SSp+npCw?)@~)B;9YtKS>$U+(etss zK`;b5SzOjnZj$;l?*t9d1H)v2fl@~;cB7Y;qst~(Cx%X92g)hp8GSgED@8??6nb=m zTR&`PV)mSoGN~!&{k7pRspd@7QaJ{$IN;m@)~li~uAQc5(ok2afV(O0v^E^N@^Ehf z9V5=Y68pNkg`E#z;^r_+fk7=~qDzQF7~J0b{Imh&1`^^?D7 z#pte-KB_zi3i~WN%xO1#5(w88?!_5a0?P-`yeHo+u4R4au@v_x5KLhonCfZpZ_a=4)$K7{#PAG{M8jH zt&S)}oZ99CkuYDHZ`ey2%dtJrj30;iemB)lu&g}&UA$lLFbH?qM}s6WcaQ{K4g=}6 z3`0_V6HB zEqf+mXZ3=Uy7IX&^evbKp9?h+Z1=+_f;c{v2k^x>~%}oQJuaQtj+tu@n(BM8HVp5qPQ12pJC~XApECg9A=x zn3R&cf_eixXB)o??oQ!bfb`!W2Bi8Ogmu&`DFM0Lz&co-oQ$-M5Xf7;fJ-0YEi`qB z0pZ8=>`*jgStM00f!E%aKC@IivlLJ};s{K2>}@og-G~ZrpXnbs!bjs$ti}SMe>L8- zHe;y)7iz*SDaTH!ZC!@_hcxSlST#GyvI4ymvceEU**z9pRh%ee1!~HF0+*%Aop41j zv?{Zg8=PvZR~WM7R9Ol)lERCZW)(7ayu1`DYd5`dm%xs^@;FWSsBG$h=4HJj%vtL> zErk76!kJ|P<^2F(lKJhpP{}UC)~R0&Xgbto#0@sA=3&{si_^+DP25`7yaUCpR+0AM z7-)&Hv&`shWGPnrq9M}VG(5|3nvT))bu=9kukn4nXysSg9u+wNUbq0ukvsS0c#w`? zi-*AVXN?k;4H_48L^-Fas=_>Lp`dt8CX`=97vb#CJ~|j0VJpzPO?%Ka8t+NguBmM{ z8qQgnE642I6}5ZJhP$0{N}`5akwI?pYU_8AN)1o@!N;LDrX`2YAZe4GX!=6#T@ ztpqO4qT!*5PJ~W%B~Ra_@ao6DI5k^_z%|FYc;*x`(-h%U*=|x*XyLoE@;=ntdLbF( z(r&^>0T-OebB^<9^ph~(zlMjjqj~r|1(T4l!7vAIz!q^!_e@77rDhst$KJ6@(uctr zc*_PuJo~v6H&CsJt#Vs(7_~-*0%95fUxf#7^QSww*t)M#b}~FAmWQlY;JmSC2KsHl zbOkM~@bHx(971UxyrK`7j-HduI>5BeWU^j`!D7hxeoCsE4c~^v8ww+YCvNy}iaVu> zA}u>ao>`BufTya#PU;O^VDm4flJ8YXPb?k==#OPTt9aJB_1B;e-Un~(n zs}*puHFuMtw|wMKk{wPQSX;fxuv~0xJ9UubaPZBiFL-EVFVno_B%Ce3G^EIzr`HC3 zWtc0!eSsl!*{bZ-tF!d*tz?KZWf|j!I&>w%_0w+?;RMQ-c+WkHmM$Km85Zx5gwO}C zC-$eOFBm-NlWa#{xPx|A)HYo(=q6cLwOzwZn58pdbd?%qL}-ZHRx4^lE*j!x|25dt z%UILJu4p{yQmv^YBRuouvtQAR&!{`%_0qbhty$^HwBprkD87_S!GE8mGx*57O}Mczuu- z^PlatJGUF7Wr(Qo`gmhd@KmN>v_Mc-DG6e9Q|ZbdfU~DknD)1&w@amWO{J;bz|0ru zq&}*jO85N^I8_2)m`cz84p=XNmDA`m22T@&bKeW5W2OX-pGMw^zXi{cz!}qM-0y(X zC2-9&TGb8AgSJm<*qLec=pTR`^mLNJ`YzJAw5?mB_4G?OFn3FaRJUGFu@in>n!$@C zaGsv#{SJ7k1g_H4w%-9~N#I63z5YAkYzb`9(-j7%by3cBnENTeg|ypmP2Xud^a%HohQ}Znns`f4me)|E2fio5=fi=Ysw2Gux2`q`yFtR z1fDaUR{ajRSOOPJr$+&{1p~3owK9^8#kQ^8wTwMo8o_ZKck!*gTy6}K$;)3N@8<3I zkmehh!=E}dJ($WKG{(Et-)*H&M|<)d!%6=F4&rA{<3!b(j(sXg3zkjnXfb~?Vr#wP z2@jiS7@xH>UUO8rD}>mzZpl!HFwZ`H@pKW3X-|Myt(O2B%xVJBGH7O;o zy3O@wk4wHO$HnO&?vs>~u-CY&OD^aNk1Fm?oR>I%E-ic2IDn>4aovNUL?My2S#`!a zayn1O7<$Yn1?=zXwJvneBS;V(wro)B#Cp7 zF4r7>#@NdoLLAgg9e&6re&0#yk}lLtOl%OE}~hC*_(=nMd*E zy@U?v;UMvo0NFa`N!kH${{f;7+W`=F@I18meJIi;dwRT2q0>i=1H~~UonvXIrY=W& zC&N>><@>u~ae&C!)UpkZL6ir2!SUzUTRbZ^AT(hDVl9Y5m2ct15^}`}$Bj)m%49u^ zrz{!#{a0@&hviXEyr$m^9Bnt9Ju6pa35Wit;J7}71Ju^f z0Q1+adJ#%8;{<%Zm*@8Yi|V%(Z2tBHVA+DhLCjh{R51Z9FQjA8n)MPY5y`pDHwmQo zgAa2-if0uLpw;UTw;+22LRn-~pjge18XPgQ$AOz(-4FOINXz0#(;~8V$V7xssO;+l z>*(Au9@KFh3q|U)ILn6kyI~nx4lFThG`#v7{FmOyP!6D7_BWgj$`avwTZCz@>jb2x z6(eRhN1CqQ2I@oJMv0~@OrQeSV$^#Il9Y6g_7Jlgs_bn^K$Xfdz^l1|0p(+E;^ME8)0T3ifV!a|sx1W;@YNd-IkPn#WwpCE z!4l=w1ump~4`;2jr;M(2^IhW|bj*|&Mf2ylxR82>(Z>qVK3V9CnCY`1q+M)wgA0A* z2Xweb=Rwb(Fb<~cCycvyj*OgKd+DU{Nf{~E;;7;@6<-~@+K0cNjlJE%5tJuZ3unmi z``Y@hztzdPT%)9Mqv8?E?6h$XRX#fsN0d<<<1O(4bOx{Qn)kq-)*N4|a?6k;{!0n9Pd@uqh%YP*uqr#x#JPFwFY0#36mc2>at>D)5ZT+lWg zDC#|tDIfrz(>POsFPtY!5W(g_ zIA)hSj|21rW1cv0l7+KqT5%xM_C*AH&4+l+=GW9OOBn096{x!AK7Ta&!9^GahHF2? z;qbu6X}wEmJt%)t5h-VBwSR$BL$ z!Yc*@ujeRn7DV5g_aktI>z{?GS2iIK``ZXQ_r`)4GS71xT087x;{s2lL0I|AJb0D= z(r9*b92GZ|GJ8%O=o~kKqabDKy>VvxD%}rfSG27%6w%nuerwzTznwW2;|Q5E?dL!H z=&Z#!I$$H#JzeQ~h1dx<*PCK=yDq__e!EfSk#|Q@Noz`pOJbdj+I>d!B<)B2-6&&w zkuw#v8=YwGZ4bD~F9p(-Gm`^JF@9JNcimRuT0&QHiZV`*4yM)n5pdz#cB7l~C3?ld ziO$t3{AWi`DLI*1@|Lb7HBy;U@_tImkGhhdb)_4uBqWv`w~^8_W#O&TiORxjuI8XA zn=hMY=nC^Am4kBwFPW0#&RQqQFlpP3N_y%$qxS|UfK!e;MQYH% zOJ2#FZ}}7r#d@Dok`RdoA@Snp_`mR)lh0-r=%>3e{|Tu*(a))v53%> zj_JZ|Ls}w$K1BzCIJNZl=%msa8eL(VBDLgOU8xDQlzfv^ay_}^+AX76pE%u0N#Rj- z$&u7jkb3c5R94bZ*e>(9U7L7Ffwv@|5fIdbtJQ)(R>ZX3-zJ-S!t z;5fTH4)Dcl+Hu4W?r7VM{^=JBez|oksr2^vtZMNV;n517lv_hc^ex;%LKFV?gk0 zpw`-_CCAW{5(z#zPk3UFkNr0FCe1aY zi_>_>0w}F!p&w1TW{mR)!?e|HzU))v<4BoNMFI5aHDkE^tlawY{xxGy+?suR%{V|_ zDAN3C@O5La{?qX}>9!)|8~U)5nz2a4@GCCO)0NIq>NbDkQ#63~+;NvbJ#gKa4AY?# z*NwyADL{V1I7vQJX02lW4P!5PZyDv^Fb;u7w~VNwKzi$jQ7vntuWlHpy02i2iI@-Z z)Nsw{M}2+Se9L(gm)hEOi%0=}H_rGT5pQlDijv$K{hTxJ?%SiF4k zLK9Wq#DHEMI1sYE54Ioz$Og0Inp?XP-rY2LIO1fh?^jjy-=wGV0h^*pd95&mGJ4;y z?E+H$-9Q9nI&WS)aRnoD2zB74iGLEK0eke7 z$R3<5fs?GzPNqMBb~CuY1fDH{ZKt6?Isxz~M+t0}z&3XN2AF-WRJzFSJO#8%>5q}K zvuQ)H7-_SsTrD0sIJU z7wmR4Vgn~(at?g5tq-Yps@h}xo`a@tV>pV=6l<`m`xXdE(wbg0NxDN-Qc^Fvf1jK-^fV)3Ltnvphe>4zJ zo+wbD#ln`)PvZIn96a(qhoY5kI5f0zT)RrY$&r-W4ovw&z@_GI0>7Gi6zp$Vzg}P| z8gY{%f|w=Tyb}?yrlLff>@L*J(Z@un_?De0TX_?KszsD|fvRnSmuhE$3%IGBxK9#E z2|LD1m^!L(bPA=N5Gbh?iDz3E!TUz;CDW?NG}k97xJausw+A zY$97n;>3SLYujP&Po}lZ+l07Z**INT-f{wm_|+0zWR`m0 zN7qyaV5mLAak>|mUoGz>W4!seC?e*Gr>dLq#wR*G%g;8=l)G@`PzS@`Ln_a;rk*(J zh?A2Ds%L%TnOO5cGAKBUP8aAkxj2c5dTV~%1a|k1A?Sla13W9X!B1m-jS}uGza5Q% zycfK1)iB6C%Ch@`^Ulu&0UV{UtFaHIG;V+vaDMYm_Y0i<<{adeFtfp&yE$KQStNUJ-7xnK7cdRL@XF2&%9 zG<-IoUInVemz7$G8Lxi6ms3SBl0*!{>WRRa-r5fi>Vi#usFLFvwz%LMZ{n{rs}K62 zvZWu=Iv_&`IfF@?eh;wMGXjyhEeiR{X5hb$U<|7G9AbLnNkG$kVz24|s-0ONwxB0U zm3`C~NPeEGsNhbi?Cpa_c;i^5p0gSs&BJI|^$>KA$QBZ#0pN#dDPQ?o%oxpgY3Rn_ z63o;GG4aJ0(Nw}@KZ0WUywav}l*r1Sk@)Wjs;z$?-DACTzPuumLO2*?Wg0SzS=pR} z=80Ju;NqW2x6E%4Y;yH)n;!!;bPc6w?6g1~i1P6SP z)AUG#SAZP2-VylC6ydogh!%b357@uQ(J=|wu6b-xVuxoOs6Hpm1Z7@EYo>E`pf%MK zTTJ|M%%Rkc=)$_bcxt-?-OzGs8v2aW5=LVM3Ym?xtOb}z)tpwgXe>%_8g9qYXYJ@I zAx_EXwETX+((!Q|{u_$SA;ae5zh;PIIyj#QyqJ-o@vMC@+;q)})-FowMcZ$4A4RQq zxp|PhuW21(q^7tcU;xBD1%1&Gh<%`dYL$qhnBAh+Qo%7-HHGvu#Zz`cKU@R%Gv(1^ z@91$3H{x=%Z49Ie0}KG_VvD zW+OJM?Nd_E6jdkm`7=Rc=cDBJkT!y9a?Vy&GcxExvwFxCo@@c1VKOQ)n!p z<(E*u;+V6V@?%XZ`2E-s?H5H=6IMa#A{Mn+Rze-_kh%zBCC4bIioqs-bV9&jbY}XU z{tEduS9)}5e?%Y}6*qz+UM!5MeQvNRSq)JM4i(Pf))Z zCLd~b+3q>C9_+F0=!!!`FPt7zO7Gtf(s7)?`SF$>a*MN<9Fya2rIuV1mje{`(3%kx zI~|m%AI~+^;wjjZ7W)oV)>^7_tDr8L>gHdoG?-qK(;1U#4K=UbrmqG6UoI!@Pq9w2 zEXq8vZXnp~%si8yteWE9%pEFgwZ0)J0KY|3JHv1i;x{PAufX zje%Dg-*o`{Q`!+^)>+@ut#9SlH-t1`*ct0voAnJkdFxSb808$z9ZJJKF|l+Du5qAv zjs$qU65ylOw`&D@bnqBpP_E!N zll5)C^{vkO25}w3oG9^l?qJGzGuKHLPqO=vl!_SPYlgzr8U74Lr0XE3fEW2f5I?o} zA15LFZKNIdnMTSTTvCU-yd2mf(Pm+oWKlzCyYADITasby-4DBl=_j=Oh* zDQMbhTsg=bcH^J*XHyH)D6Hx3Qo1d2PXjP={=VJPlaW#G5K5=Kp@i$wnA-z);e88m zpy*Gt_|IJ0j6d?f!--8}ZmjbWoPFe!m^9pvItolG`Birc+-QoGeL%?@k^2mp`Oj*4 zlKQ3HuNUP?wm*_2|q5pnl&;}20Y^q_HEvJzm#>UgOTC1=r|V{3wN^MA7tr?xTZ3Asb2 z)Lxt|r6(U6R0MD$P|6%0?F4J3o_v|+GPnu-C3jfZ3BFHyDx$3n4j0|Fq7$r^o(|A! z0EaFS;Q7A+@5LDp-FMeSKiT2h_IGm;mZN^Z65gQl-Oo_ZEv5@6%IELLLcd`= z@NIN~_{t(SjAfEsEu)9w$j=GC4Z2q$%AIna#z$ONv z&>$=Y)&0>ZUx$+4fS;s$8T4iEnZ zd==5t%S?eiH;T$1_znCfLf`@(d|lMO@i*{XT3LqL*NNI!{|1~#yBYkZsGa4U)}O8A zO>~06vqa^aZBPdr_%z)F*!85Sdjm~7of||$wwihbPZQOx{7r!=GR%w!(RR2&Fy(CO4)Kz>oqwl{cekXO7>+UN#Ty z`3o~ckr5o)PE?+?8c%}wm_R1<4+;9eE!MIFo%^Tg`@bkrxeFuvpLW>)UgomD{RuMu z_cFIt{0TDt_cEvc{ZEkbKh9hkhJ%lCH)dz`20kD2Yh4wVgVe$Jm_%CsC8UXuDRnnU z3)#^h$0F7NsCyYKWaOF@`hxB?baS_n`S5Q&0dJ!I{v%4;Q1CrPMUt0tN$q()!*2@4B_a%+n3RD z6!!)&k)esiE><;oKCTCN zWd52iX`4Ipzv+^u819nUI3xTuWTejfugIw8Vt?TW>pB0wA|s27{WWA%-nt)phku5v zh{^cNDi_R68RPr&A4wY*)2`b5SIr2|L13!>JQ>v-Q0}i83eg*$3(zcmWZ9qG(6YGL zUr0tJMW8)y80pWp2rJ=L<*vBKhd94;x_wR zQ>M^H+}KIk83}+5e}e__u2-P{&}8V1A?8?&EpI#G^s{Xt(n4_QA9D}Vv`_TM<>VyX zLAEg4^OO~T=yBy zWFa5np1YFMnnH2gqFsqAsWt{gm-h7}#Xgj1d<*j{8BRX~R3JEKHLn=|fGi!p2$I7{97 zF(8rw)d4`I+KjZUrf59vXCi-sDoWC3S0!TF0fDCr@*&zE8ZDHyIZN3x{w96~LD!Im zxXK5YjSP}2;Lr3IIOA&LA#39-2}>p_DkdVh?3`ba4Yw&Sc|ja+52PZ2@`pn0q67Hh zV1%CMqUp!y!AR0IPf7W6;3xL{F9Ay7pA$+B5HqK{f|Ry+G*@*iz_YgHsHsLy@9f^> zPTIFjPPH}1O<7)im+2x)A=$=NLGGJfl8mW?7#?y_SFbmZjf$~B|eAo5)Kx$bfXtAs6+FB;U=c2wk*Jj6c793YVEvp zFyQM#03Q|%*?9B46Rm|w`7wge=LJt?m-*L2K$zCOFSNVMQC|HKl-8}~!{?~v(TTJ! z6bO>$K&7aFaD%IE9_&Q>d#q7Y5z^#UiFAWAv<`5^{j4`sy?;295J~zY<-u^9u`VpH zAA-&#ddDD;gf}Khp2e)L_yza;M-yP7vMB5xB`Lz0_91FWWPijB>9sQn>WZOim0UN0 z)`c_e;h?=dHWuRi_s2z&39s_{33P*D7V4|oS%dEOT0dH6k8b=*FQ=6diz;W%S7lMkJJV z5x{fJeK^QV!fitR3S1lKea~8h`#0kI_89I@M~C>L1-*g7;<^bv^dTm|oZAv`qpH}X zl3xRk-spkhw6SuPiU!^PfU6ZjO)BoFAKJx)jATNXhJt0IK#1!swDUIfU_HOKJcjUI z1%2|M2>umpcB&3y_^;(6C|e7^J{E?H+@>+OlvYFnLB?*_F_lMQkfT*-gyjjHN~WT< zk$F+j{IgD<{TTNja=oFv=7Lcy>WMK((sB#>qI_j5u7vwyh$DNVGqrA77kYgYZefyX zU0-xW%XKKnWmKceGv$la6>mZ#PJJW9U#^}+Hvq4g91H@VgsO+dBM$x86C`MnCXb&) z>-wSm`@>*~WJ!e`z}{ZKub+u1;Hu$?{_+|i;0(%)LFfRkAUXtv^>~#xqHq*?5Z=FD z4-KjqS7t2@MGW7atjJ`hMK2m zVbpiyvp;lPjq$>(OhIc0V!W1FtIuA5dvY!fzvjLh(B2ffF_25DU}{va2ErGQt0T#x z$_xf*T?{&^k0^-boeESDkxA+Qk$CjxO zNsNn70iNYmx6us-v=&9F5VJg@50}^+rIH^)iC6$aK7&0;oh%azN^dm0bq}s!GK@X_ zscvVGqGE7fJYrQuM6MYx*WFI*27|7LXvgKipo+)wDT)#`nN0n$P=9&-?Q{bfqP93b-36h{Ly2;IdpLf7FvcD;w31(hGa4}`{+b<0PLr4AP2Ryi+A4R zOZQfJ0!xET%` z8aKI8!5u?kq7%JFRWTUB=rOfNVrpwiHVJEeM1M>v&F5oS3$Ta3e9j$oVWA`~9Lv`?D> z`=XW^{&L-2v~CnKWb`OR;i;%TdLU!(QK*vdx|?n=ETL`$V3Xj2NlSYM0(H3~KKp{Y z5&rTE>9lS%x==^52~2tne+@4|)Np1zmaq7EbOTUo4Ubnr0b!4Ts^g(Jw3kP445m^D zo!&DN1qY#^@;o%dX0`?T%gi>o!0ei?S~ zIVaT0C_$KAoR?_H1^wrZO8w0MWpYU@aui}ZJ~zeR|QdiK|Tg>0zSd21~3l8WSa!038)CM_71EH z@@g0$5BH@(4M_3VroY@nFrx@sD|REB*)b5 zbTbckrUf(C#L7m}#x2UBP&~&1cqjpkyZTG;2uVKX(6KYvkVRuNeE#J1DyU&d*3Ym| zGQp0gLASBNs^U~!0KO4APnYCzpXf@?+E%=E(4p-{fw8>%V71_93C-dupFQC=$){cRdM?C`Ca z^Wyh=W#Dy{%Ova%QH-@O(_}63yJap&FtzkI27fy+^EXA&&r4>9kcRrY(7O8M9;AK@ z_H*SIRQ|rD$OH8xsRU@D%OlO=lCdVS| zm24TF?d{E~E?q|4HjNG_=qR_cHpJ;3&=o4)4ko62H5{MF9GJ5hASZnNd5FQAEnv-Daky?k-v=Gm<+=uI0tqM9I z35V8dfMqLOTcyFy`j1hy-q`l8W__@{S`cnURdqTQipSL)-xxd(+MnqA}z7gB`(W`9NIVj~td>CJj3b__HB0N2_uu%RK|CLv50yF)oBc?=;UU2>Q zw?Q~7^nkW*Yr&jo*ma}JHMgh0CgFraQDK~{s^GIwRRU};u3hw0S3EEQ{p~nZ36K+Y z{L{m~!WFZ%e#8(3#rwd2l~%m=WTwbCSzU1nmOc7nIEPYPfQ!M5*HNwZ5^V7EOq0O{ z4fe#v_Z^ry1t&3C89%jp;TW5aG}#==F;4cYm|G0fdmKmLv~I`q_+o^*EuT-ID4AoP z97XwOaZRcA#~HOi1twMXfEJiN`AcyD3v|tliqxfd!{q&)1(^3nZ?t({2s$GHhwZ8a z81}c^e~S-oZ>%3b8=Gd@VmPSEm>*5L2eIm;_Q&k3{Mm#KA5elU z&*WeroOVFvX{a+QS_0GUr5BRn$jYlPgci-%(xM~4mp8{IIPE-oM*wYAjB}->oRs|p z7|fVQ6JTRCZ3g5*a?sbjc{7gbNBRWNpp0x+Sv>SkJ=M?#9vTl9lxqgjjk1A5$ghX@b(+3D?C(yRoTH5VBLu8 z@uDj!<}~cW^>-c-!lBwzujRfe_Pk4^Y)63Lm?7YN^lvUe^XtHP$GpECn(-<)HdFeW zB|y_kcLiNo35i(NaSt5z0rgUIOYmd;SZL%<^ogWpS0?(n_~RXcC40W;H-NMr%U!6# z3*J=5UKtbQ{3Jl~od=!$=!cPJmGh_kO1{J0{hYftBzc1atuimEZ1<=IA z1|%b?@uiT*jjy|E^PLfH~B|X5r`Hu&{RHt3FXO=+)zhot@1` z^?$hFziSxza^+Tk*`s0~k{LkF9u4*Rt!spo*jqkP$^Vs4x z7|WS}t=9^?tBGrc>a0Gf z^*me~XqOw%@PCh2AG}rbhbUWvc@txl>KRbQ{0~sJW*IP!ud)%M0YcVlodOL`D91dX z>f-b}bv5}R#y7FQgj!SDwwcR%<%P0)gqJL## z^N56`mNzMQI+Qjqb!;SLH(%c^ZBTGJiw#7b9Som;pE)N$xZ7#$QNM4Uf;^pYrqKF8 zoWb@Uyp7>*VQ{2%mumgufoSUnrP&EV^?4Tv60L?W@z}lu>Snfsspq|Ikt?9tQAr@^ zK}10mJ6{dIip}jjL&dgKo)98!eY_*d=Xk(PJm{*)9D=Mat0lbk%SQ#%YkT2H@Vo*g zYeqme)m*X&i_RzaNCaDuCND;DHxw7!PwQ#OEzU1r6EF5TNVz|Kt~i`G>xz@u;toBt z#kyA~ygCkYfPPD{bF~M8@kuBSra@^CG3??^h+P6x!E}6>P2Uby$n^;O_VM%(F7~IIlrmpht62{X;3p9+L@z0#_oIe|&Ouc3NMH19KbXlBT*s#;HY-lN;Pk`T13T;Fh5GC#x5R3P9H^v(4jjs@v%=eFO|)zePyb- zRz@xBu%yH!VM(dnFbdq&6{0R065^Qd(xfPwm{kKBS*z zhI^bN0~EEzv&_Ba)O%uHtaIEj&F~Qvw*-C{`_s60M+b)4?TpypCbF+Bt1}O!uGAP! zJCYyp^Oy*i0cUUNRj=3Mc=1Z9Y6H9EN-6n8Y=7)pgB9sh3hz@m_!O1nv2&Be2&I-> zwL7M=ABVVlUCBhHuEa5=^gehTxMhN$24l3Y@R*OT@GFZ{7M3}-Vw@RUY(PrsB&GxA zJ7KWjfme=!sio@$m8n*zAE_m<=J_t}ZSwsXJ80_%lieu9JGVdGcRtT0OjmLurR2ku zk{?n^Zc22U#=zf!X|!(Cr$#!xSBq#UaVBqi{+QW&+}OBJE{zhgxu$IX$uv0SxG+q) z)GwtpncaJ&mVA|3azj`0@h!cAGq{32M|d2I`vkqQ6UXg_$pPf_LTQiT1K>i$O7$;s z@5Q|><@Z2-R|#p{+gzprT*BKWjlvX39M^-~oMCohrLbvh5JM zwcwm{!F6ZzN?l=|N@>0)W$Vku==j4df}l5!o5Lx3L7s0||4vUHRwoLgMckS2BvuN9mC00HtbwJGE)*w-lpne0ODYS)}K-PYyL<&Ao@!OmQ42qr1a!gLK695GWhm{wxK z;2C3o)%L7PEitNT+B@b@T0M3MLPh7BT{av|DLIu=@_|lx#7Tk^7_Btde2N;;DO(D; zyAlh&l12WKq_7l=SGe*p1*DEzp)t?WZCxJ^-!wMAFYFbgXG&p*r#UmRbh4tPum(6% zN?mm&h5PX&O|4t_7ECMgW#~$&qOyDxMIMg~C2eK78x7Bdj8r*Z?*`w?;V?=r$;VP# zom&7Cio6VA(MGUntE8%j^0dExO&qt{Xv~_A)82e3OvLzxKE_`^3XD1q}TJ0&bzl>`9(m~;JEesByU)iJA8k@U| zKZ~HuT=UtF9JN3a$a~KjK2NRSxMh#=mTKYJHm+tG)p{(B09r-7Yh71 zvIkYAr@+AFJ+uFisaTa{4uc#9OURw1zsXYi4C&n_n@Vt@N9UCVMhunU8zs0{-0-Y| zbr0hUqRhF|1JVaM43#pdrN76}8Jt1t69=0E^>@)CPS5O?|0f)>WDb&i6tF4@z76qh z=9dM^M$qYhnuCHjAzAKVv%o`$B`I4v*fbvw8Q*YVZBX#NXdW!^B$$JPT6&sJGJr$- zfOxq>m%QzO1l|T>A#al@{WAHZv6s}nDrL#yEOrj#VKOLw@8W-Xr*9N|dQy4}nk9GW zlG}YOrN2Qt-ZuxOoEGT%N{J2*Zg}S(7mz#j5zqXeQF{6iy(f3*Ix9_)^3SIBE#@G~ z9=qHLUb{gQHGJ9&j=tZBc;9Lb7p5F_hNkX@UGXa8N)2up4WjDwT-+du z+ZE-tMgDYVAGlQ^+-qL75C`}5gOJY%kx$LfxV2AzW;I?XK# zDmzTUGQ_A($}Q4UA^Epz1X6YH z7sB%idq3#N!++wbxqmUlQ1EHkE(@hi&XZFB3vw% z7eMkUpy~sYC1_R~&bnpZIvgIRIy+VDEJfbw$R_+iqz`~Rvijz1Tuigmj)YHfGOgbX zzX#QPm~1scjHxV6M6*M=?bjj9OJ%1933DLo6EzBtlmgoJ8Zrw{AZ?nM1jK8KL<@RA zkmb1y)V3XiyifRssIG~Hj{|l)Q(YN}5)7?ei^_%5jhc?xsP}tNV0nE74v^L8cCxL<`C@bt)QV&4vqka@!+OiV7ukd?;hNH@4g=a+^jQE?2eQ@uz zypMmyav0<{T}K1T*s)ChP@DusUsSfDFN9BwvWMLw$@A2FxJB@Dhj@hNOj9OE6vL;i zi*kS~cf5`(TPY?&4SRxH~)uu~&%HzC80-S}c4< z#27Iu!e@l0y&psl??mIIJ`u`bO-7KOC0s+C8jQ^B8Y0FB#ku^st0Sr7B&MHm5>fXk zW{+?Z5pxP@)ts;8tNAFwjw6JQTluUhkyP+6$YrY+&Qh^lS#TO;`N|wf-+mn8?7^bu zA@RSH3ZL-5lM1o)@1%+(j&jwo8=lq}ud7rQrG0Il+!^;ObIY~_y6=5257O?qQ`BuM zSz*o#^0JW!O!F6!d)_uh+rRX6 z2jR9*T&D+>1(M#~+ISlQ2o+b@OZh95+@Og3qFz+~@Y-JyOTN8LzmqpEHxJR|9$xFt zo!W_a;|bG1g^j(VwBDw^zr}a@YF;mDeF_V>x?+S=C*he-Z|z0ee$+i=+fd_)Op#JDv(!p(P(J{cYyvNOtkenqCGs9e>?bdox6sLgi7s^X7S_l5(=G~xITA52 z3NB);v`pU)J+MX=(z60zb0HS3n6I~mh#QNFQ4l$D)CsETGYS%fE098I@0|%bRj3l; zoC|Ic4?H#yvXj`2Dz{?EJt$%jBu|3NQni<2XO<5xo}2ugDzb4=;2*@d822u4qZ3cx z2@%G(h*W{VOp`b>q!!frEF>9?L(@=YD5Uf($slc$H+W79>djcO469=lBrOj>B}p5M zONXw!>L@pq`od4j8!~wkoUN8@##$K!DYAb7G~tw6@Y)=f&Y>!HOh%negCUVr9*V+^ z!^_Jd!7>koKtU4*xhVp2(V=!sf)L&RWA9zSqAs)eab_G~&;e#(fI(3Q1wJ)sva1AWH^o`Y|)os{DF=)Y700%x|XT)GRT`Hb!YiF`6VkWkWd z6EO|n0wU8YSx9;Tb)+5!5~2Dk#;z={7>r>c2dSYd+Lh)%C+jYtgRq|r#=EU0UC;zH zA?8t#Gv@9PXxu1S42j9i2o)XZrwX7&l?)@`@~Sst4b+{DMpHikqifM~-~ifoqxcIg zNwk|#rQy^zP+ZBFOi`3zFPS+^u^HJ?kJ#I%u{MJeYpw&+u3+SFt@T|n#unedlLx9nOMMCP(CL2;1?{m5 zqg!z;T}@|?xq?BW+z4=_8J<;!|E0(s&Zse7TGd8~-L4}^Y`|#XkG_E#O~Hall|*g_ zW|XbjqG_*ZFBbUl90p(xO z3$%_WVLcQULq>Hu!T}5EGuPLh_KkvI&U_i?fzA^VHQgX0PS}FEx9!2m)bs*l4~R*a z13HqYWt=yVU-Z-4h3J(_V_%UW7`%g*Eh!&je||s z8_Kjm{MV!f;lI{9KMfSRgMV;I>HOjD_z_o>6QXgl6WH)fR0z0S>3$b@%)kPPE0iGs zTr)jNi7S~F5*hI|Y+gpZH7253q~SO<*HE}V0d_Qt@xQ zBxghm7a%&rDL4V!2*%|oHz!WJei7JvvH9-t< zkC_{P+%NIYpNXqibU_J+h3F&BMJXXy!8J4X2$w5{a_F1h+kU`(4{Sc~JR5#Qdn@yq z!NuGurFTy^^CWMxUUSW9bu?FyvVnX!eOJv`3nfwsxJ+s=o zrwpU8hwF(eNzZEOO3`#MJKswSh%1^1mgq6CL>q0fg!I!rXzi3*IG9mp!QP%cI;$lnz_P&Y)OK zj@}tA0wchsD|X$FlzN3M_I5R10!4b$nEdnLb;cGpnv=cPb0*y>>3aL}dl;R1sQ~GJ zwj{vq)7E((u5(O6iDC~@xP)AipH?U@F5sE)KD>vg;@TUS8kRD~mAuNOpfDbB(J_02 zm}k13c!(jN@2W?`zblAU64;Q>tW6$rsH+_mGBNT7j z_4N_goFjShG=iOLD;#S}?l3{!(vUb_TTgIiUR!^{kN?Y(;rHp^ubDusnf0xUhL`6r zmyNGjve* zmFuvt6zq9OJ#Br6!;ZB5nVZnEn(Q;zx|EDErE@J^iY@NeYy_8jg7LobbIGOPxFTK*gHR}TJjd=GS2!CR*lbKS z9Sb(7*H4GoBi8OFW>7g*sVT+)WvxxJ3TY!`8x8SK8XMd@gs)6jCd4=iunQ=Gyc z!UoE(#T44W?w|d}R3UE}d1vf{ZwR+1(bK`VhOut&gmXgV-s_ca-aWAfCh`LP6AGDF zcoO{P*uwWCzMfe4CgcZ-khqPvl+jf@d=tG#ed#<91mirmD3YgN%QGSq1AfQb$x;Y| z_l`GjqkQ8~Fr*{i+Y+PJM)#Km6v%vIZy%2vdUini*M@>CMY0f&(*PT8JgJP^_@)gz zJHAhGrd8&M>ioC7cT`_;6?--uuS8NrczYcgo73e%V@8j1i5@ex53W0XoWF535Wi`1 zyw^TzXg^d3NH@3?vOqb!J05WNqVV<8{i)B!0p75ewtbySLkHY_ykY%t@881$fcYOF zlb&{=Pd^I?>!v}cui}qC;-wZC!l?p77>h6^$Q9{y`0kwp*6MQ$_5M)!=?eSbL15pW zj|Ov?y`})&6Y;s+H+dx9e|AZ!5XHH)d=GYnb7lN-#y4X*aC#g>;=`+hKOOPoPL^XT zP8a^nCzW}4fGPyV-O02(L%EHL0MgAGD|cmAy%1DKru(Xx^L8gA@@kC?r@T>MM5MCAk0y;uF5Hyh17p$=6qxe_*94;-& z1Bhjhlhp8TJB-2ruw_bP0$?j*nnq(~hF23i_|T??;p#sZH72};3yIxF$#yV*wD*I7 zPI&OO+Qs3?XS;OicXcimTRj}3Q(l5|qf!t6g&sSI*W5KLk#F#`j zi&9+%wA+gA;gnFysp3$f%A8WC<*yYn?%qzW^Q+RV+yNZMpql>AJ?x zGj&DEnvCR>ISUshuU#iuBxA6KfK@&F{Zaq{`vk+;wHLqoE-r97m3SZ0 zur7|ZEE@Ji-yDSN5wvkArwrGgd2^vF)G!yn8omN9ul^<=Gdq479!z~K?ofeLQDXCm zFza$a!?mwPsil`8)|sV+DicE%O-}-*5ZN6|ue>uryVY6kaQmBzJg+Vs?M`V$Sz7Cw zb{g8BTY$yc1u0Uh!2T~^gzMsY1G5ZZ7!+nJkF9AJ06!zaN0cM&5c;cGUcmBZ0Bjla z=K+57iBa!P^ZuEPo=peSp!!o^px2(*0_U3zu;5maSpw!pV4NR&L3D?=n3V-F!R>|u zdN6tV8XfIbZWusG!MH2dm10PnpNP{g!ZD{YTzk_!t@C%@E8G@%N805s3%u9kwp66R zAA2eAj4g7DEt({c^?obX`?URk;qi_Cl*AtUXJqX4k7LCZ21DE!8~kCccll{a?3s(P z5myAc>=j!$79xSyhN;){p=v)m;|iO(+So!k?D&nE^WRDvg|j-Y@QYZ`&)QKXvH|PfLN?&eHpYZ#1s!C^1~^GToR7+hLvO8miyN=m@4f)pLO7eJ;AMR0y&e<<&d6gb zzrT=ambWWeR!epIPg zjtl*nj&Af}NSqHfB(`^>Ll@z$JmG*vN3~yon_%E=KK0cIS*Xt)J|y?rix$E+pBArM zaP>t$?N5Yjp;ch=nAqlc&_rxYLO>x-1L5we;gK!ac-an?kz;etLZ`WG>^LyD6K7+m zy%q?DMW{P;i(h~bkXzpUyA1jH9?&XL<{gKh<_vtuDP-m#v9%zK_SSarrLw=QR;ljX zba)e4M0*RMR-inVF7tBkTlQLL@1;nXfZU=a^}`7!A#}FB10>;z%yw$)fXQH-5CF-_ zagz-YT7}6;6XzF68b)O$T>>8=?=;@Y>hHQ^(EMl0J@k%&QqY;3!SL~8#mj1Yh?npi zCiHqXcCzY^F+0$HkxP?Y==pIegJBd93U}R zFd8>ubJxlZS?Tvn>3*-m&U86D-M!~&^fI<66{s4M1`r(Fo72MLhFRG^q<8)~L`Gj5 zn1G$MsiURODPQ+g3_=l_D{srn;k>OKk;R>O0n)$4~t_$_f6 zE4@gfDi4cW`_w?cqKyX^sE~ z;Rp4Qg9YgULoVT&+of|vJ7v!PD44^e9pO%~@Fj@|r>=`12=E=`lJ$$|5Q;8L?b3;dBfns82txC8$pIz8A~ zg^R`!J)VM#(gR$x5e>)feLDI|*3x8zNMb4%7p1R|lF5BKgm=ql;YfaWG3eejJs7%d zL)75zhpn-?BVNeIalV;9_k}6;O)G(}zHbCh*&6WO>(?y7D>>2!@B3oBbV&oi!L5C6 z8Uz4C@e7A3UT_OQezs?^2Q=KDk5ler=$$IR?X0GtwGikEQd|4r0GUKZlVf~+B}5Vn z8ka&7ca{WDR(&Ff@UB2uR_j7!JI%3bYa;NBhOsy=g>2mN1ndno*Mf;(QH#b`HzKJJ zl?&;r@^7FV%PTA(=h)G@Vdr%0zbpl{du2Ep2vI1@hNIX{zL193?4IFCKSe`?mGD|5 zw&NQbRJ1)k1lj>a%N(llRdEcQ+zCvO%uP}v1U^DU6{!Yzb;AaJ}kZ7@X5L(pX5s>Jk{MUFyh zSlBPj^XFtI!&|_kU|=g&n=osyL(rd4%hWxWC#2gVT}rSU+k$d0D0aiUfKTSYoxJtOc^H-51+Y-@2+|58jKw^9Igj$?<=L4U z>jfNMLUu1KAm%)a$b^lcrN#MXnz9LxESwf@AA)w`SHc|3Qj!%?kg@{cw-qcfFI~3` z+j12|GEr~g^ecV@mobsJIFTplCJL>MKtyv>2u{SWmgC=UaMuk46@%2{g(!gizKAXt zzuX_KeF#%(yos=+A&_6!vttY+`+g`tffh9F;PF1dcYwblLb(fVNgzbjN8qL+{6W~= zT=4vt4(R15FXd2Qbev~c_N6E&5Dn39~EK7uaQnT(W$y0w z9>pq9Zkgd&w^5IzK|l`YJ=WeZ%dS5jiD@2&s&ya0yofLWD&CPAahGH76XmBo0jwzH z89Buh$&Olt7tE-W$f0Ae9ZkpaFNMJyrJJC(B@!Ex0hkbpgV-5~=vi?S2D#Y>E5XtS zV^Ohw8S?T=BG$clU6Q_9>_9=}Fw(zz9X6b#mytuD8-&%)=5>iMWL$}>W71EPKu@fL z@UM1d76vmO4$uszFkBU#oxlXU)y@{^fi5}%gElAw|5*E=p&G*{AQLrgu+LPt8ADP9 zbbeEw9#?~tm`;JO_`@wocm}epHdKzpPoO~tztnrx0%JZ#T%bGdwi(SlYSkakcBQW~ z+riI;Rwa|f+wBcS;aD3+SJ-FB9J|3H4p~6KQiLoPZagTdcovLG7!(k-{&vnZ0oWkR z(^EqrqJ)-5&C^psnI3_BOla`w_F~PZT*lH8Sc_8GSS%>UT0~8sh{=ApkY7Tqk(9J~ z*k&1>QMP6nUXY2HwNehtxqlEMKE{kEBr36dId4MRX1p*P&@*9yNHGXuHEe+>=p52D zRb#0dpWu4g0+Er!Zv0J$Qe=S7D7GPS4u|EuH3;(DBeStkWE(wc&!Vk;sd`KXPTXCC zW%T;K^qf}vIwGuc;Zy1G;`!P^xLrL`R|pQt^rdnbt&jdJuqy=f#aMO?@ZKw=^9`Fj zKs|z036&oyHGqGr4x~dQxP#@$2hzhyyVF}EIl`gvD*Zgv*_w^*K@)J4{!6^|`dY9p zQa^#-oaO-bt*U>lf*o9WB!-r0`}pV6wL8t&qHM#a2(1LKxS}p3F9nrR`#g$hF-<@w zSrLkO0aDI=%kW~EUO;Tc2)H$s$wK|;fGOIYq10aEkzLy*71=pK694+F7IIxpMY@4x zCvoE_%k6>J{=QCf$$pCXcvV*_FN6@a;jc@0pWui%c9UqX_Gp`co(y$G_RY&Fz8ZI_Tl zD9KmUuYyolk8>_%JxW>h0z}~ErGA0HZ}vS@5=ODJklP%EjZ|2{u-xts61{G#+QZVr zPWWl);3w#C?MF)NYK0KAr_RJ~6@Mr_Qo0{yyo55ehAhm!3>G)4iMBvIvOtLu9}n6pNgfJ^Ek{Z;FiaqE1*JG~#8w!SnuJzC;(r7SL9rQP^V8qs z3=q~qv|b&+4cZ)`mZs|H`J*LaxE16opo&@3kP5R0r$P5tL_cIpiPMUPP_-EuvbyAfC)E+7tj*1nOJeDrX+>SFgF*snPvKB^ihb5c z3pbIH(ghlde$y33A6Dz34)d=-yj@>Gr&IF^dXpNDVbJN}zeh>$OfTw6mRE2l9r?0Q z-M)Y^-1ulbXx*kHtrT8xP1D!(sl50~y1$2XNCX}HB0(n`(0`!gQrnQBmeb;s>5EjM z!nw=XMUcKhn0(t5PW}4jcZ8$80(s@2H`Cvj(POFYRCfz|r}OWmFQoFDn@yEve^0NM z(Ed?fd}wPzar??$wdr~(S+*Fk{3A!;?b(dwZ%8awuOEdA7Q>%~)B&AvUiF4L!kxSW zTnWWT?+72_cy@;OaD-2Hggfu5>x9suPm2=2^B#4dJ-mO5Gj(S~FLAl-(*mS+-u-5Z zOC<2ybnN}~nXbv=UbVMpS6}$HiU4#ua3hDf1Uu??X+c|C=vb#Q0fB|$8rKSZe#hBR z0elV|D6Vn8hI@ZR$Ijw9I)<*G4yc3wRJ0`k_OOCKz|&CLZkZU+IU6P2DJPlbC^-Zz zhV7w$dHKQ=N-k%ZQ2D11(!Hgm4I7U8L%>Yvj|RB`%cF%EnVJ!pmvX+`C0z=~m0&Bj zs_Iv_f*;^9U1Rl5(O4H?S1`w8k%}8wt(OOaanXZ>1p8}Ux;pSSDpa}jY#9NY zWOBuoEh!GzSy<(zq-Fw6doqdawT zD9&z1FAK6&+<=r1!zWu(J+jqi;AT_K<%tN(K^CL%{jzST(3ImKZ+{E4 z+|-OKN(y6`Q?^4|XB&xIRsxgy0;;SpXM8UMnN#@wA)v|v|19cA(f5Qge1Y_RCmH4n zqWMa2B^mDO9?s}aQQu%RDn7+2ZO1Ef>~GtGH9x zOo%Pttw19OK|~}j-QrHC%UKoz^gP-Z)e}%AW$sXPe>-$EP1#CZ0QmN--vhgEHg=_1 zFTrCeI|LLB*T0OTPk#ZF#qY!^v%Pn_$Sh-E5|4zj6UDTlfY#AWsD`T(^0IO{O zYP{;kPaNpV80F~#u8fd_PnN)FSo;vl8Hc4SpvtMy8*q>L2JcADnmkO_nD)3b7T{fq zYWBlA9|rQhcu*Kt8AFu?S^P`Sc5IW=?%9s%U;$bdHaYcAmB59=HB71?pPLxwoWdlq zaXoInIZPJUkHy+AW>UG{fVc0+m+2X;6l~>`f2F&*GPl`{EXz!wxw^%uJ<7E9ZDf|i z;oX!jkoWwCDGY5<9+0K=s{r!*8n2MP5(1jkuhYY=r@+KI?Gq2W=W7^xkiP@-e|kum zJmMYaW|lyWS|5WNyf7kpA)!6!8h)%V#;p~lf!=1ksQK|_*a1(2D}Ttp1IU(;xf(j; z2H2)ZB4DDa?KWU9GvIxnHa-SWR(|Z7n+pW!H#o$N&A69Vl=TL!@!@2U1STBemS*fd zwZi~cOsN~=K*b8AXe|u%QN>fRZ&3DLEROma5QQo8hG?u+;CdgqoURZ+QNtGO*kvGv z=!Ok7Bpt-1()7s`Y~}ieg6tMh(fXN#Fc>#`0d*Q@0lIR73e=|r20D~<@CxW3{aSDp z^sAv?eLk%lhz)+MTGA1S*)ni3*Uin9d+c|dQ-kT)d?ZeIz6+ct zF2nMy?va9qeUBk%mPG7>g!)*&C~#mwlYD`w7PRkAvkVTnXqhjrVP$WDFrBuA;i6M9qOsE; z$$Z!^8gSLWYqZv71#a}^mw`T1)een{d{={HJ8-)>;fYIEA0HS?i~Io{H;mJ2cABt( zt1}kky?Ghh+-ZGd0CjMa%cXS=Fz8d#HT^2(H`6!!N{2usw|WuC&7uAE)Hq570)50h z$e*g_%PQqw8R1fIVFxRrMbDXbCuc3Fj8bOwlS$ktMV;{|t!4Se3+vOPt!A)Sp>K(1 zm@yrx>(kBup9(VNrVpxor%T5B5?2jY)p-hjHUd!g1z9q)MFL9aesD!T(_D`V)|DNp<>3DWt5yr{w;ZAW8_l`f0IKmy!?3Sy74GrRQoaH(Y z2re1osxjMTq>Bsv^?=EjzFn2!(-{uvL4^;n7m5E`$FF6mUJ7aAa9>K&MaeozIiKUB zb$s84Dx@xfG$$k@K+Wg3{o^>FTy{w4vfDa;c!14t3mEQz|b*HT#4EOJPPQ*Lqd997i5DoC7uA%Tv_e6(vKJFiikYKtWA?l$m1v=~O0icOj ziT{w{qCkN)7HOOnKFV!!agJzfMK6l?9f!Xzv zxx^`$oICYPE730goTkZP837%yi)K1!)WyXqN_<{QTSI62OO8=4l1Y5%RnL-uAwOb9 zr7olGCE$NQM`2w>DbX$A#g1ROm}w}h(!1^{ewEE(8O>6=^601PIX+m4t~fJeePmR7 z9#^N@3O8_3dV%4D?Hk3E9dx zFH6Iyq9-hArOv>OD(a9wOVV)c)SjIP+GE6U@NBaCAj}tG`oRIo>$NVZhNmMZTSK;oW{0Vo2JFe}FE?2qCY>l8ZD}ceU@p;wo z)+op>t2Tr2+YSOOO903=JJjzT+_KopsrCB@AXkb8KdNFN$O)J}0Ri&SGRG~lMgkH` z{1f&>N*@OA*7gz{)Z08ESyhXEm83tu0G;&Si`?cS?jWi{j%32+y|%M zeX%@5l6pq}i6p`=yOG6(DfuID#Z&+zrC>Rtjms-P<&WFZqfAnB62%N)rVRbyR#8L< zKZ?o-z8A7bMd4AcHb)QRNt`5#l~h|TCDn!iS19C4iVbqmfa0RX7e=E3k{Tg+6VklW zqgZ%JI$)fH=&_vZtyu^hu@2F77ih+*;U$IFY1x^qF%kLk-@FdLv7n6m!;i_^I$u0fmu$iyXk=g=rqCvyH3~8727)77${{%TLK#&u*;->@`6q*`_ZZ4 zh@c_Jmc!YMp;NK`nup+57%D2~u;z6@edvBdSQW$K>p83`9#E3zeb^a{%(H8LOE-s;-5glq_bJ9~v1VF;nAHJp=5{c7m=WN{G6Ho(7+~ zp80_(?20F9!EgoDvF{z>VkhTq9+VSlohwVmWPC26zj|#0%oFAZ;ln7ywK8>F#w0hl zW%HNKOHZXM=h}tP#}hMl+4a;J<4&1B#d%ZyClYV6Ov?GJYoCY?YA)-IHb%>`5JWAt(X~}blGv5Lythztq43iO8jYp5vU^`uUnwAAF=t|Yk zf#Fi%wnRmJo}26rAKV#Q$zhuOjX(SdOwI77tiPZQNzeMignSR!d^b!%IhH&KGv(vw zDCq{rYNupqtQWCZ&TauImxL!WoB@z3s~nN$-OE8zu`ifb74vEit3Kl;w?2>omX=8N zB)FM^=XYoi_hJfog1a8-rEYHsu{Rge+{>L7K+oI_EGT6&$~&E#s!S-W+@ZK$*&-Gq1*@qG-EspWr1CIYauD^|=1jq`XMu#i`q?l*c9QUD5k(wCEmb=; z04@Y0wjvF;xYjZn4#;Fys|H>UP|k}eNBJ+%_cFAE{%p1MGTFl4(r2G#9iVfx*P3*VrcRQ z3-c=G=8pEf3}`~?jrMA4O2dSv9ztTv4G4@X7UV%T+k0&Y)$*gVn2X|A^LDHp^X^U# z3`MD83cSjoGcWP{JcyPgt(c3~a}fB>@x9k#k~qx5*_BhF0e|BqEP>dUAn$KrGsYLJ zdaZTHcx)RlLEdlaw-#+Uj5!#_>h=Ewlth%F*9U8)${zI9VN?>d8tyxSykXi%zYdUa zE&=NTPT*7>*)5DtNty?n$Wd0XKy93)UWN&)cz>~@8>STyv1?tY z_<_Z`!^t{jqreg^gd zGhDJr&3ILMEa(Cgyk{QC*GSyy@z8X*%lHVY997S6Qmaf3p=hLo;qVZ=xpWGU{F!oN zv`~XO3ZEkTLcwjd1%$|G(K7*RRRPoU__XFwUG40b!UyL z+QEZqO~0Mf!)yh%fjJo}I(Qm2)v_mvi-+e2koM)Ca*x);(ckL=VAgW-qaem6CV~08 z$lK3hS~RHwhe+P&Vn158#Mk|fJlpsA1dy?TD;N$-2!?=Rjs}^IM`J}a- zY}vmy|Ev?&;U>#)9qBG;HmW3E_E|7rkI<-;4#r$-p~pC}>D(#|C%k9S*AEsrT5mbG zN~4M$_{-sszQI1Yny~_T_`$IkQw&W5jmqp`TisDO5=#z}WFY*usO%|ijDT00G_|utpdckQ* z5O0%k`a=zel~A*|i7nse8LE`D6K*`H?9yfr+FQDyt0b4sT*XFGUE?M9Fgt9*N$8-d zUx0Po8W{wG$sI@crmMDDgJ`(a8&U)7IKUD=i;`8AF3hNv$k<9LtyrAV&!~wlDLR5> z8$0xLngZ%PMxlBeJ?9OF#xH_iuLEDrX|(}54E1q^r(%nQokbXc6vz_g#KK#bPE=}^ zWK5O{7Zw0zrkk0!pG4+=#X@Rwank)x-hMJoT%KX1{mV0YKU32yPXYm$2bM}6gaMk= zjQyUB`xQv1byxQNsdA4WEiHt1} z>Na$wjVm+!gz>=hv}a{TCJaoqlS#gVt1*aklJ@&z2dh|j3I^+t_)Y}_vm^6#pL{_mNemre%N^U0b;nyFMGI zGn=EZss0WBY%_6)S`K?*4=n(+XV=kuFw_nqoney>@9AuS_Z#*Bpb>Lujat%)JTt*( z&U$ME=#;`n?9x&nqXz=>()f z)cjZg_#X3Ssu;*^z8{zHsB-|7m%XG5qAHQbalfL{ChG6 zlr$VPUWMx(1v2vd!T2d=FT***hN*7a14IdCNWx#V-}p(GloVu_Z0US`5~k zFrOz%YMKqrU&Ae?8y9YbzY(^HZUXNw=;;U0QNG-lG7h7@1T8jRz%OCQPgGsD6H0`( zWw2r_*lIN$!DbR@XYH~gH<9BSPps!{j6Vzw(8B0 zwF~ByS)B$_`w}L`(iP|L4$oQGZ@QxarUdYU^ru$yl>+yVsEY^_O(`AJ8SJ~4f7ssximjDi4`=zO8r0AR^5iegq%!UHOW^}~%dq+GcL8Ls0VAzYPeSAyp%mQG;YXfkkN>%iJjyQd9%(APAI!%ai9z+P1GbpKs*R38*!OFIYIWq$&`-!={SljhK%ksz5PhvKRy zXnf&hq<#;~c2#@?QXua#`l?(2l2tg&6gLus9N63V4NxXlZ-wFKiX#vyoS(2Egp&FJ z&t}*k&E(<3-=HD7$1uF*vkXcyg{_4NC$_d#?GEkiuVxwG^$7SBw$6U*8}}|`NyK2~ zoG*mdVnQ5V%kzbiRKGP+Bv@xd0_9Pdvr0$;7oHt;*g*)UqiC4%n%&6zEu^waP@z0F z5ayk}g2uCY6z(+*(ThDu5~$YD@H24RTBl!&Q||>|70s@n89?v83nJOlIUYAh3lqHg zAR}V0B{~2JvF+V3z5(d3VcT+0E3CI{s>d#_XOr*YA9!O)<57ys&f#y};rH-*A~ds| zCT9UVpF5~4Y_>-NpLiv%cV)sO8JX>*k&%?^YUq8~nlZDzbZCDH9v;&hI^9!b0PkLT zR->ojm4UugQ;#eh1TP?6M>Cc6&z6AeRl~nd}ril#K`pTeNmi$6?Z^`%Ds%%87Y4RJ0j?;tVwxBcTm7m-sENP(yEb%5gd>m04& zuUvW-U#>9_iNF&|%phN~orWvCRpjv&V(+J+{FO|L@g@Dsr%^xPRw{z-& zLd?11SE={YF^)bWqFaFv&W2Uc6^>>MwW`IQw2O-~dKU%1hq_eYW|g2WIZei6V2)_G zU5v{WI#U-@E}~U=qOgUnO(D<2_ji@d7Xu|ZPAeb5cr`WS?9kQ$3|yn!3Nr1p-uS1& zpcWh-pr+yh(;VbnMQ6Fj+8&&OU2|d2??@50GkrQvVEyO4HIg^%W3T@j8}yE~o&D&{ zP84l<9602&JAwJC`E0I6a@n3JvUH_J(ihNZU|XA>fgnw2n+b)+;=W8`?MGM*>slHK ztcR#aaij}^t)G)%6S=B7K=LUR(saVh_a1OI1v&Sh%S@mS*-(wf+v{L8 zP2GQN)&C+#%|^7!bPkfG3qd`q#bMpm!y0C?-;A=n~V%q#@r#($z!LLeSL4qJY-Hn@2K~EXi5doO;O}fj={LNWv$?l>vudlBV}u;yT#aP-hyzXCWw*I3?355rD8@Y zrQCWh z$&M(GaY(|rhJYXm;~D~jRDKzPg(@yUAdZ?CmK60=dp#w5(?wx@X(Vm|GnhDMtWoJK zl$3CrsrJ*U;EcWv=0gsHm8v*N&eJHQSPd+z04C+sLReAGVFmBuimu4SOWX7`qzX-3 zK#eyZqd2Ub(o2ipd>fwX)$e(a>#8ys$h|W%G8m~g8bTl0IC!2gZ%N7tU^>w61+N; zX29l|nE-Xs*7ieIAJkrJVtGmi%)82WfLm`)Z;)Y9rPUC9`&a5XyBFvS9^A3m5nwc83uDMA7< z?d*sUNeoT?D_CWX+|aA)Ox?~3yb>XPs9H|RzTEn`C^v0>EaWP%l}_gpKiK~yhQgC+VMLsD3y zv^p-4bwwN1T#`RZGJn_|O%K2ThEuX1Le(B<_p-C2fh;)+e2jk6W=DRrTF16!>{$c2 z5$@B0G#VcjLe;gfz;VQp|I1F0&>Y01-^lR7q(1|2nr#kGx<5wcss^-8uMM1odnmVZ^zV@uP>1eI;A}{IFv$ep*sCGjy>46}fH`#)CJ$FInQMc|#V}FW)HX|##|f% z=!IY7u3T|2It(99-7-h=>#OBjZK(BeQUN?C`9fra*UHH@f4npzM>phvDU9yOalxJ= z=DJQz``k@n1WA&yVRXa$V3FX>xZrM5v%DmjYwC`CTPZjM`LZav8#nL<^63vkTCV}T z&I<6CJ#WK~UT&0eva_!}=LsZ}theK-K6zlFJH;PK*GjS}Vs~NJ7VpbjDEbEm75PFO zCm*X-;te~))@bzVcn$X~6!o3>0ri>30)e@HJ@lX(CPNUX56i@BiZD!7BPWWviA1&k zz-Wih1;8sf48xZ6;tUP1zc4O@<4p~aBjyZ%*PWCEfHBL)YSH6{RT{iajhsmRoR1np z7ol(*+yf<8W@DR)k{79YkLbb0{D@9vQtnPLUi+v365HPcqgH0_0V#jTEUe@nSa>nb zNc1EHCqulrH=O5B0fDKe-$FGnk#H`CQ%n#@ISTHH6xyYL-8FATiUMln6fwYoSzVW4 zRN?^5+RJGSu1hrh9{1z|5KRrgUhx(aQK^vod3!|*4 z#3IfaJV^<$-rio^y@w`2tA6k#HBW6XF7_6RHSC5t5BV4^WOC2(((a97&AXTJ0&V0( zF}IN@)nfy18hd-AmX&kC*t#ux|4Fp&s<&MG31?!MbDKEl)JVuLGpm(P4&X_(y zRKUIaY3W)Fq%Kn{xlOr#pq-L+T#XExepiQJ*NcbtApfLU6ae$jmM2%&CGhw{?qGPFt$B8w>iDINkl=9|6 z=NjsZLTvAZy3rP|u|B+z`f^Dkkp)ucf=MXpRfdl3=aL#;jS&lp6P*u*YCqAjuDrI_ z05EsGcWVs%4B0kU&C5(TQ$^2IQ~ z6(ce`lUBbb)cy5p&?pyO=|EoW?m>U?hKGAwMCO{2Cib8`$f=25!6N6kE-*>M zUMM=pZaiYVQ3pfm}bgCbCgSMr%>s(p;YQ`}si<&Qy@=Bzdbp2sA z%yb-P8+288S9NE%0q3ge4;g_P@2`lcS=Jse%Q8@ODW^IBkbziFEsEt2!@r;hp1h%l zn+8AOc%kDV-(CWnMy9vdxY2^Ku7Jd^0sUgQJPf*uUqX;B-FeUzGdL?#<9Z&Mq@)@I z54+|78KPhuIMG*n3P`Y3uKunuB06~OQeW3ty99JomalZHRN%y1mx`cZT~FVR+c;s1 zDzrB%pFdQF?@glvZDjbx|JZF8>g~L^@#0uqaE^l4t3R58RtROcLKU z0Tc<0n6(_Zf?7s`Syqq6{^bb|30q)fLkJHItO0B42!@H}5Pp@-55pnNW@&5t^aUd0 zQQ*S__)E7-j)-CD4krrQPeK(`b``pE^=q)-=(FMe%yJGsfOXq3x_1#Fq3@zhpu+F!<7*)<6C7G+RWIj`d~Eo7mci62S|09JDy!DV-1-%;j!bDF}{`KMrFE6$ix=;Z!B7@mKs!a`A}#WOnodcP}y7s;0U8L zr&0AMfV|B6I2k0W!V4D1-|5i5PMCQUCsgpNl6dKKP924K_l7%Y?t z0Ns?o4*Xb?E6|I@(><{upT?s?mV+xN8!|VqMc$;xQHr)-2sStvL!^e!H^VHV6~AiR z!6e3cw?iMl zcO0KA`s6@CSJ(iWqNO9xZP8l!6dD;YjIHZkx#G`O1wlCovnB65rgW!W#lx}s10DoP zQ4Sv*CRbPj0j}xO=L@>rVLPSbYXvCysdBhRaoSEHOJlseh58AjMzD_n{0lq4Y zJUjzh7klDbLqM$T3kPIaI19|0;Da&n1h!0Z7S}kF#{fA<*n?O7y8`kCELg^3wM0V^ z?*_n7hU`8+;FpHl5lfZL<1^=b$olK`{pr~3aqzvcFLnUNQ##tfu-za&5QOOZ7l+eblxqqs(f`LHe{o3N zMUlTau7u6z+9>c)Oq1MXzfo6>Z|a@LR`rhnC^=6oS4v$u1RF+Yyr|RWW~R0tV6Je> zyU=lH;RNe&XAJutZaL0eE34-^k1xXU}Sz=IU4+b zKe(g?D98h6Tw>`|)5D`8ANfzc{zdPeuRg+&ZX@*N|t#1HU-8cADel zKRdQ67&=@1>`L5lW!r=7XP5TPE#b~%>;9lkSc{qM@OF!HD;QkFvdvxHDJ$ZkJI^g; zQ2Sq-Dg)oPmq1 zc`GQMR6J3`OEUuLz}w-NI({^Btbw81sSiO}#KvLO9Hy-70m?K2`7<*$)_Gb07rmJR}y9+4j04nsoviDPt?w#>`}9q|}J)m|g}$Oc9Nm)y9j zonDepGfZg_qUX+vNRmo^>C?9U+UwD!JW zaq*W&fApZKL3m_<{*6{xVRm{plcoeL{`=^(m>|#McxUl*Sia z+wj*rwD---0LgaxX(NEkBk2sDq}|$6-#oy9A0WvoJf85NM1Fh|M)UDl;z3*aaRMdt z<2N1XHGbSf+wth?32GOxZh)vI;g!cuWzKX3qG?dob$@J_Rqm*pHd z^)&_HpH=(~B8GXxm;2chS8VC2LEluHz%UZ7o36f-sg_2$(xf8P zdTpd=JOVJ!2yBR4R&r#DEB&1#4YZdZ54h7Uek`UloVK3&l%OE^0;=)7}a<0Hk*h)PUO}2Jh^lR1MS|f(yWVjJ1D(>y0Ov z#*c^A%681hjV*vqhuA~w-oajJS-S??`CbT9Q(wvj`{YBIj%xlh9#b9zGem%>btj=5 zB}`03ec9WNq=t=9cN_}dkmoWNk_Do23^g=7Uvo?-C0H zc+O5#E&#Bi@xt-Pf3D+yo2`C32DeS^`(NZJ-Nk@-p6$CBu>W4-;z!%ijQ?KZCTkm- z@!v~q+}(y|{NcnxpH{gCt5cYhv#ZyZVLK4&q#}$ju=W?$xCc!OVoPYv?_wvYIt*BZ z@E0XCF3h$NM6f9}-AEuJ%8%h!{hl<~DQA_2`aE1@gE*|5nW%>J1l&U#AwjYu)>-d1 z=O`*l*oJ=!ww6}4MB^x>$x{&m3UU#6yqrUnr(45hDVJv+IRrSA&w-O*|3zfuU#)Ex zznW_!VB~Hh_?SVJYrw5#T&h4}3zVrqgqQvkC7W_Kp%nfn5aBf(CJ^DJ|HwtF7~R^; zzXa;46;YbNIfM>u6aNzI-h|JQ*KRD0!^E{Z=c8Oy-U24QH_d1TleVcDtvJ$q(~MRe zX`7nS0wMjwt!Raiwy6QF=+Qsi0eZ6v0^T-?Niaj z*$m6`@70P>uvSsqn^DfHclTy0>;U_R&@EF)aT^zA3TL~A%_!yae#dAy)pUOA^$E>MEvzsu3E_6JCuE!w!U3;XeQ_m}*0vT)@iLTB1t zU~(wDVTQocH2<6{++d2I3*hgkr!TB4MC7Xj99eQFy4lmsvHJvCMaLdp6#xrOK#L31 zelu&d*1y#b7oe?k5ysGc-2#Le*kY`9Ea1{j93k-g2^=Bt`$5|f7WKAFL0N3RvlYZ2 z#dbZ5*+)=HJ3vW_+0|v$r?{30V1FrxwF3K_I6?sX-&1~jE z1+ZTyLjeNVult-AC0Cvx!fxQ2m%w3+^QRj^Kc7+j#T+Jp{#Bf=73g2Z5d!Gn#1R7M z-^5`8=wCKC)&cY{$OEfO0R4l~@2!4s)v7j#=@5a<1u^)x%o20N@*M2$u}}>$ba_+}bJ2 zV2A%(bVDJu*#c}_dBtRaGe3l>s^U&rY6*C;uCP|vq5~iqN6}lBYj(PJ@Fsasmi`VU z0QsL_sFAIsTG>pfISAI?626=XFpeuAoGrQlu$QKKcnIvP24#)BLjyo$ww-s?NF$>u zyK`2UB-CE>FO&c(j8kEg;;|uqVAkL4oHfD@{=ZrW40}=+;JAaPKY+Tspzf+egCTut z!T&eoQEC`PH@hH{fcxL5gA|l)WJ=>lQFd2Usiuh60B&r7`@;_D|X2C9I8nhK!@c!0Mdc!PJT1T}sX*Au`qPkyz{VkzD-ql_hi-rcH zp+>D4NTi=b{mqXJ1bR}fBbl~+0bK(Mk1#*-LiT}3hhn)Inp2N zP_=%D2CVa&-MIP|n7^|3P(V3jD7!m)JItQ71?dlKh%34KA=-ILl80b!?J$20K&7@u zR}J(F)`XzSf7tW2p#3H90ot9Vfn&s*Az34wP=DwY!~@QqwrP*@G(+0RJG=qxIPsh*g~(jtou5+XKhZ0`J$o zfyeT{PR4Nb%+lMD{lLS{7@(2fK#rbhm=7KE#{2PeTt8X%VESZAt(uHOFnzr+eRfcP zm&{0MK`dqWLe}H<1>OqjulNR1hdfu{l9OsWx?6kmq%)}h$SL5%lX_ze&0oM{Z~^~H zC}NDLBmiKN{; zX~Z)D@ZS3=)Kd0&M*6|nU3Pyopz6vxj{gpF}s2gv`UV zfKnXAE2Mo7(=Qwl0||l+aThj3lrs?JcvJ2OtjMNqo1s?&RR@aF1Zt!OC<3u?q5(*T zb{H^=;bB<(sgEQAcJQ#jT3UBMWe-C3&qy)`*`q>W2zNgxNpgp#QvETln!7Uy-O*2m z#$(;~e7G4l3BPlCgFBgL0KHie4&j$J803x7*pDHAYldLTz99)KTL`^`>c;*M$Qe|?ZeJfO zw?<}ZC0%LnP?XYnnjXu)C)!|nGYJJuvZ$p;W>R(}DtaAG+_(hRF)$2a06(%$=mZ#-k!~7q?-VY{j$mZ&|OwTXm|;y zti^0rOZPuWH;1Cn6(?W~xL^!Y2~`B!iO$#~5-9sVG-CjrVPn3mdm!mcS85k&ppI~p zW9E?ri;(uRR>F>@y|6dWq3mHXZ4%~`S>4!wMPvFIf zb&FCj_H2N-EG`s*t zq7L(TAmhwuL91O|;tTi*9;J(x(#?@*Wc~L5t`x**l~Qwed(PSq^PnwwEeO+}LfHn? zPPEsM6(CIwp{?gPhT(0_jl#;V2kMk|L~Pd5>9~G;jt-5+VymR+`?LX4eHcAH$|Fqj zB2BJ@5%A^oax^M~^Fz=?nXyV~Z5Z`kDDOeRqfqdQ9&{!;&R@LCkmKf>P&(VFCi5t< zK68Um;tiBB3XQo*5y}mS2cpWBI;)AWDyaA`ZJ8CAC-OxCs_K? z7@!>`STeIRTcW%vE>PkCP+u`6U&oEcQ_U{F$@OuY|HT>SW zGVHW~4$jXS03-2mfmbbl3zdZ%6nxdA3w`rFp#2?oWd(W|9LDFS)Aq@*mN;QomLKfr zCGX1e^{_ai%+$EgQ%&0uMly9rY+t&KGRavwx+`m@(5JBW3vr`OrL0bIW-(s$G&gmy zKTNAhTspZpoIJWX5GF33j__#O-n`LoZYP&m`(U~_%>n-iJ87Kpen+?yC-SW$-0AxY zkK*%&Bb+Vx^2b@u%Z~7T%KeMQZ&)W3YX3M4jk?(F2X|@#y#zbrZy_N!z-bmPm{#u2 z3h;c^5j_LZfNFGC`?@Yh5Y$2v-F+hhIn)Kv7RN`p^uq7!4D4`mnlgqzSx0;cZAYOb zE7_v-G$Sv63<3lqJYm~NwJ0mVoo(w$T!QHO?yR2f9(a(t1XT8TEX!R&eLwQi(B%~c zy{I}9T8#P*u>O|xKBK#TOu%kDTL!GxQ-Of1Zvh}8^*NwMlyca& zKbTU}ARw$7xF&>*V<2#}jKmeBX&G_|kHk?40Z77@dWD~9;g&e)asV(B&qFB$hKTP} z3aNM$M`WvOt)|!|Fr%wZLGgaGJ?Whho*m%r0-6#*y-<1Cv`M(@_~C*m9u*TIJvAx7 zC963U4vF9l_}(!4V5sWt*6-Ik?-&#T_>ak$#z~@}C7k`H;t7_RE@rVtuXTs3poRRUM>XzcpV(LE}ycrG? zuDV14QSKN-^IlvIMMTs-v_O#$?0wQcnEH$Q39WD7Skb=v*E~^gcMM|GkRssoI>Pb6 z>rksGe+c1*C-{cxi~KnYkjof?WX7>jDyuCVs)Rq)sS zR33!6Tj!(58ZxOr4l_F%4SHv#FMu+LFHm99ZL(SYjUU?8veWd%`C4{x;i z&2VU4v^hOw+x+Ur`RPc(5 zGE@>3btoX)P(d+4K&R=BB`VszsIZTT7Ue7}E3|1^R+LzpmYA5AtT6x2bN1dvr+xJM z`F;Ms$M5m@?(tCG?{i+~buRC7d7alaoTNX2mMNaMcGTP+7j1*;F&gRsjZE&0FPAbZ z62nd5YHV<^1G=FZG~ioP5ZD$uYZB15s(JEl~ zp;=c8Ba%`q8ZVgmFb`Oa>68+t!_|~3ZZqy%-HHO-_y$!#&*w3i)-dnMYIsj3m9HS8 zbQt9hQLUjvAu!v5GFUW?QTEkpIH66*K}Xie!7*S?9_naQDZ8ldtJTq@axZ#Q>yGx; z-k<}R5QW@VFffgs!S@mE#26P3UnM8i+3S0ejF$_O$@|+^`I8NKg`VW^+Cs1T+LsH5 zx{y~?1HH)fXr&+M^>}~c@mk?hOIVkb!ov2%@LHjntY0_4ojkYJ8xf(~TXvqF%<1yx zP72ceI!>A9njRi}I9@HRfXT{1e0upLSi}~;ffHYBijvyA3ad!mYB4 zRn2-UoQb}wB#1Yi@G){>Qi)yXd8i{#yyFSl!)j8ArRXX|bK};aDp^;25z}#K<7!Me z;_8;q0te$vJCH!R3RmNa{((dl0EGM3UY))FDX#4foeam3AiC zyOdZQLvau%cB_Ja;f?7M^71Zah*uf4IJ%Tj_{`eDx-<8ou$C3d~{T?d9t_)7ZfvFR8O)wH~1rPxjUaQln7lzJcf!y7UH7 z_sj?nj_P{B!*xqaM36At(&R!?vSJ-RS$k0S&2!vfdHN#gKh=21Qsy%oo>39WPuXz~7g@ zC~Wnk*$8~>JFI*Cksk}c>wx#Z2+sb|!k&WOeM#IzI3LNJ>x~Gor|`*SF4`))l5tN3 z&e4Z=bxgk7T`<__u8pc+>8fqxlQUhr`_*50r(m}$wLyKLyJM0lLp+{lkv1A0k8?#; z0bnj37is(8dc}MkKfvShp2-V1H^8kKI6_LR-2w%#xscbJ65)I|1mqOd3&SS_5Sg!5 z%3n+d`f7W*eMk>{7;Q(u0u{-E7#EB8-8u?0n)o!V2TDA<9mcoiv`4?Gm-uN1@QM6Q zEw4B4eh1UP0uEhUm09?&6jVTKC0^AAZ>*eG=i(fE z%NLXXFjfE~6vVe-U|P2m&dSqs$2o>hRqq~!ifo|@>V`rIQ%*H8bu~`Ep>X zDe1}R5X@J9ZD6PneUtE_ERz!dTb<=%zl519{|!yZJ|$Lp~5VIjIAPiGL5rJo_txpa=R8z_QCAikRl29k?lcHXPVYm3ZH4 z5G$+bK@A=|;fxrBlR;Jp%A<}RQ*}lhL@i@Lcoi4Ij+Px*ELtU#8Of70(CKf$B}_D8 z9js@2Wq^X3uJmxbbss9sZCZucrb3Nw4qo9vH2HK$}75_1FUV9zYV@p6q?#Rc1 zPdzCzqbb$}R*{UJw2xGgDIO&rsg8S0o*t<-O*TGlie}v-b}RiI_lN4%T}Ht;`5Boo z9)p-X2Zq`fUr_Y5X&e@vVLa?TnFOh2JDu%Rf+U**?LNB%sai^DxoeqNBqk6MnqSa* zCOk5vi~<&jC&-MBT2BJUMnS|Bp>-u;5!xroF9nq%@_vLi=59Afz3a!ww7G)&IX0?? zVo zsG(wwRy;vHJhZcx^J!$NUKmPl`-OQB*%6QgFLl;RnGnP#%&Q1(`bmwODQ9-_0?-kwK)JQ@VT~<*2Yv+< z(Ey8y(PCY^5rAel_kvp&iirg&s3{%?IyOcNE}CC{BhV%14+jG6RCdygAf7d!@2{x;uwsi_RC-CS>1v^onjbT(Dhq>V3JnBBV~e#O1@4$w)TdErV0F>7TQ|UqtW#%% z@`K1TvD(hYoPnX_D1jC8ksk(vAowMWGJY~o`2~>J9`KFTa1tbbVR}Y95tk%_Ru2Ge zQqu!9i{FATGDf|ySO_+k7GC5~tPls8kw>}NSLhtgG ziP%)kQkbr>1J;l>7Q4s?Fvm6Q(&7Ge84^dkGY1wIJN#P-nz#pdFXkq?VIOY8>Ytb5 zLih1xVBU$CEt=B-mx6d& z$M*(b^keKRb@a8hD2h4>Q2GOf=II5X!I}_Ruz2in$lR#A1Hjde7wxpoX3;l+#> zlFAS1#|)>0{Dvi9)(;E%;wV66%hjVf=F)epH1UwA5sE!%`gno;vv`~nmCqFlmttnc|B8FN{O@?S2oYAyI5oEZ zts&ZE>Jp$|94UD=qX)SeF{%&zP0b1+d#^0TA{eFh#%Zv1ly=l;$`|8Y0o?6q#**{PF4Qpfz&KWJfAo*W3_$j?i|?_G|qsW@Vq6=2$# zPT*rzA6OMln!`YJw7!KYYhQ$nu46Q24)uo1XiT;+TYtkDTMVOd%i3jYvhh4TSFkmy znc726#6`GtTh}CF+>F(Bb2JQR3-jl(wuR}It`(Ed4-4GLj1=u<`UQ=Wvvg87|}53?MxvyY`F&Hs(1cv_<1mLfY?G~S7Sra>hhz;TWrZEW$^NOC*tf^##}M-r__B<> zfuq;_T|1mu2P4z#4QbkVKB*4EoN0~@#O8az0EcdGJ%JTWEk@}1Q7@jRRk&DesMBU> z_aj1R61<>Hq{hwPfiuI5n+<8Rg2?g?9bmt#f(A>?OwdoJ#z0r22Ajy~nfR=lvFX5^ zfhTN>AQ$6t_n{%5jL-J~e1=wT95xriC<-9ku@p0)WFn|3HSnl?LDwbko`8K5uSUUq z_}qCD9MG+5ip=JvvTRCzB;AnWN!*wb-RomAwc7*m-X9wjqAn5P_Z#{lBG5qG(a#Tb z4WGb8Z9I6(f$LEI0d;uQm-tQ23zaD;_nt;sQX=XjpEsYEV%e!y9~P_1Pf!1Vg!>jm zkYNiAxa-X=$Y1$+a`}fzkX*6a zj6Y*&{-3BOY4shk-zs{GR;{`0S9$>tW9Y;8cu4fy_jpcX`H^T>ztUqAw&V_q@|X0p zw5Mta(s(Me@|P%(zh8CrB9_BAd0@1v{7Q29ugT?qCY67E$2_Kd zsIr0LycCPrma6h!lFNS{Q+|sz>r&7NzkQ*fIHjYePZG8E;=rhV)hP4iY43SILvROLUZ%0FfhsAi(7 zA|aZaS=O}N`=pUQi>Cw;aa^9SS2j>x>K6CyC73@KF6&6P%`fl~UlPZeF1caeVL-~C zH1Ub1%bFnaSwKPe9vhLiZg|cJ-c4okPlD*%iNe;h;W?N!dHxti75zHDSgXz^>E&82 zF*oGVmuy00T-qMVDi{|C=@Io@5EC`6Orp}(H$>;TPicM#AD;MrPYH0NBd8(mH3ePxTgjf`okDz6NZE^j^f#GAt`|Y~ zL<2V0hR6taqHNzaghe|Ir$d4tWSWR}>cK@jB_+eV1sHP+T*K8|ehUS9%vY>r%~bUeN98yp^?3c@>PvhR%WWsYQ0QkK2JlcKwvkDd`@yUCY(ZLa4qWLsm z!E$*#t7D(vEak|~m3~3So1#Fs7yt;!#vca-gr*};U~3Tuj~jwsmdL0hDI|Dx)?YFA z5NwHzsJ*CmfmS+3|y>IyMIm|%~Us6MnH+8CM$rp=|HprqRSgG)o>rkcK3jXTZzJ|g4j zXrL@mK=h^rt(Ed2rNy6vSSSi!3tHl~r zIXVDkdjTnHX+mc-*AmG!7iletz>@Phcm%WIQoZBNNui3(J~_ zd77T%c*ZJWYR#xo7KuoG9W1(*cdVDg9C=wd^mruK=0=dpCsB)t%HGty!Q99>g6^2T z@!c4Et>Fb&ySI!%-&xSphEHQKC_B)&%6^?8=jaJ;f*Yr`hy_w80|&g z2u<}0w{E6cY>(}^Br7MgXI@reUQfE+_F7#K9BqZL03>H*JdwX>c18vTux-vn`Jo_G zP?$$H?pxW;qc3WrEjiw!GS~%R*pVZ+zqrbuD0d^RvFp2fa0tlpo|Q4K6dBob6s}!r z=C8-f`69uavJHhqvZi1v@k;~&Gj4nu{97pGe#TE%dXc*RuHFcG8joE@K5IPugzka-P%#iUcUGH*`si%E zLoez-45Sjs+>_o2qPhcHN6H_WATqn-2L0UhaB$n6!WwMd0r5-SNHngc80)eq9R#eo zW&n1QFA#B6eG)2xvOlR`#a-CwOvM@+mQ~q%gp54xgX_4#2kx#8tO; z^dwhLq2}gc*aT(WaN$;mkHW2+#*JnC&l(znK9*26e_piI*bMedVZ}_DF&{f83tOA= zJ=$mZyAbS!b$UE~L!ET?1m#_`b6PZF8&^s_)3_6$m?-;>04JdwLt7IZ4;I#M`M4_5 z*NF*`Z&u!cb8e4CV1kr)1v6(kI3b(m?%!c*2qy)N)12T;2U|0=2cItbF_s(KU7yPKnO1j!XW=sB2NemUPm zWqrPoTz-?$U8?d|PvfvmI(}sg|3Y%rvkJT*`g?NuPb@pR{MBZb@-Ir1Czn4rUa}7U)5?_v8o(&F#c4nrU>z72EV5Tqa52mzlI!qN7#eN zKgBg}?_U1|qTX5nzE;I_ck+|c)t@v!4o>!wtp(AZ)SE5+y-v=)x_+7E*fhexp_ln21#i7mqyid~NF**p`wag#6V zWvoV~9n@3{30~Vd7*L2_Tb}^$d|-jg@2KGJalTe6rZnZ;tVLN%=FMirCy6T^7)-_? zi)`9f;7{`BYr7NE?1Ap2_=r&CLw6D@cp*v6LWJD9C-VJ>JV)zFcSYrq$x`E?e6fAY z^UjAzHdCY^t)AfhM?cpih#c*>7H-5I2isl#C+4_eF>a5sy+LMF|oI#1a0k@v$y&`$d|UxZv&2zyRZm z7!dV<30~y&o8#R{^;+#3axhcwPCVO{1@)xpSLOF5#}^a?xjkO|I5cWDRvYG$bLHCO9!qf3SdgV9x#z3G$c1&< zA!KoRl^Z##T|a@S_b;n?QSo^`p9EHECn7#~H&?9W<85oZ!>Q56Lj@sj^pdfk?5Wa* zc+yK8{lQ~Wo_lAK@NN!A-q$JN2^zYc-zEmY$9(Er{R4aw0GEyxMSt*_MU^P^>$P1i zj;1xw4s|E5i2C{y^^aIW29r3@^A?7K&kMknv1D#kz$E%;)f=>`CJq8Vn%>cZ*5)fq z%8GK@C&;5Knf^xLuYkvSp~br&bV~itlR>Y!_)`@aXiCIHVfUhLpo{lQIck?l3FOa) zVp4t!+EdYl|Kw^PsWDuPjr;LHi0gg==GA`Q-*&ER-X#E5(BgoAWes>pDbZC7ziVPMRAsKqyj`I>w%DOo~JaF}AfPDd3X( zV3#Yt12WiTmSC%+71gxIF>IPl72|tAj*~-G?82wQb$qKoPWqM$0BLZ6XmgI+T5Jr# zRj!nPje@D77{fM@#2wLvki=ta0@?cri|HcGf`_)oA~3l>1p(Cf6!iWK-%_Hr9)g$j z5oox{Ks7FD2qF1xSlP+eK_rm#t59TIHXal{vo`F6);6|b|IPVW=tHWAb}{*M`zkMT zSMQR8wEssArKnl9dv=lcd~>u<^sP<6v$j$ZYU2{ zff2vd3B=YZ5LpT`iGHO@?qm|>J$kaV>nAJUB zf<3NFC(Mbx*xBXhF*93!2!H^EQf9?j!$FxP8Dz!;KdCXkH>P|Ms-$98qWRfVOp0$| zhG}jAD&CJOrcH^9A>%?P3!z;fcL>V1=AEDfg|~6Km>WPpd;%#7l;zN9h-cv6e@}Q? zghlPW=1p|jd=kTO@grPvVroF=m`f8em{0q`rbDgpAQxq>GJYz#>WYK&UB0%9(XF=! z8P!85A@bQ6oA~cxg{JOW7)oZ$0OggJ-v{zrIO+D1a=O!}UC0WFSmq)h(67E^mv(%A z!GM888CHfE=tKPa@Q;uZe<9+JZcMb8|@td>E1to7a6zM`v57P3c;K3jMfa3C_@Oz zcsEka-?Fb+dy>zW)}K17y#TGFZdg1`RNJ-b&2(vf%TL;PgapXO5;}YhvDFP7F~p{w z9*|gF(QYQPlhD_@enqPxHS{U3RjWa(&$nta)fn9A z&?zu06VZ|z_%iCxAWKNu2%dS~4S+Pi4C&pu%{_1>n2YI=@dM^z%MGj$*^}cylz#`+ zGImg7=LLh^jH?B^hveJ@$j-HJetz+5P;52rasRI~&O}+7QTIM2laayakvIW1yoLKE z9wfmN#+!M+Q~q}(KDwpg25)LIasGGhFjD*#*u5-OT{;d&(|d69ZGdZ3l5-0<)x$tz zu-xMDnC*sN{81UrFsMOyu#DD`BcWD11q8ROGt%<@phG|-3nj}Xpxql$OniwJ`vb*N zs^)@5`T`e$y2NQ{e98onK}AtA<7Xh7N9kN7ME1E(xMgAv2qV~Z64M!c-XRSPwXXB4vBHvQ)R%gOD5dKu{(3!?0W)!BZ7;w~dg3Er#q0)W@vs;XC8QFr3H zf6+f+n=>RMN^j=5CYI$RfpThz_|+vrWcUf)M#~PFatcm-6+i1zh-PIzww%pS*sb|l zN9V=*A-XU!KF#-eA|DAF-S7cqUp2j;idy%DE)DiSc#S!!6T4H!;t?L1*-O`%-%4_S zE^OzfLK3W%qp)cYdC^A{FyA)@Y}3blrC^Uf<||bC%14u8SwtWlN}lbd3lM1dWad>} zH;`44a$Nvv_+2UF&mgHMA#1LR4fQ4qdSm8aj4Gr1vp*)@MQNamftXNTDO!1CsC5fkq>FL;*e7mHhwA3Mq1Gr zH;#rIqd9yK`tQ_*2<8gNdv&^C!3_cFaASS22jw4wSxW9~R|Sy-uMN-Pd|B6l{QY;& zB~S?;3i_xc?wGAI{MYOQMxqAV6{N-&PmIH8{=}P_T5xLDsLBjO*o6^9{RbG4W?65X zXjDbRyrY{Xq=)P{PUj{ckVDPK0%*y0T=RH514*4W9h$t9UD=urLQNyWnOXcK)GtiS z3|M=Arz4HZ`s+lvpD{LD?Uh1kPcR~iO6}#Zc+{*+eKJJR}yq?ULZUvi7JVYZy(zZV90hqjH?zED0 z%(AKgk}^b>=GD{2Y9v)dbVETF34KZPj#Xjg{1Dyeq*{je!)8WqSQXOPXQ;J_Gq;L@RZ z5xHjigg_Z$a_bAQoKjjAVzto79jDL3eL>wT9kCeBA>an6V9JbBta}VIr(zy1yf0yk zQ_~Q9Dc_C9Nf+t`7Y>vKSL}f$)|v{l-CIGRz8I-#qG@dtL1R7FZVk3nT`w%am++y| zWZ1gpt&>qq57NLq3JMc#r@$F%Q=m0;jS|B#T%XvLo1xN-!*_3R^%3%4BDr6pNv#(^ zx7PiIBfBsOv}J2gx*fY@`l8BZK zDU*=5!lL|$Y5D?)AXcY|iFiJ^9Gc(Is*4SmQI1jj+oF+6bLsQgk>0p)G zJho5#3B6T+1wFL}_dc+@rbGr~#c77&i&6VYDBo|qHkoqa2KFbrdd%n{=mYBGNp&I| z<3mkrb2!vlK5Sjz)5~ukcY=OQ)+gv=Nx~7xGCw`r-n+eUx^m_R5Ee6?qNU3B=-H!M zbJMSM7akxS$dg9-m9D0V<&GlS1XTs-fhyG<)#^VKOVlJ+mmlTz4ZtqNj)=Q?iAY8* z2ido&P)z*X3_c;3+{;$8lf1lDwfZotQ&BeH10qk-h1aJf>D2AWmFq>GWSCcg7cr~6 zLI2Df4L&UX^Itkom&M~PUb-|V!*T5fb1xZ7v+^=#=M`pXGM8j7Tw4Fy932b;)rB2m zNc8pf;WB!b=indx9j5=?EzfL#!Yk$3X>p}tfwW@QVmoAkw5rE~4yd9^koz9scck@Xft`Xi#Q*o2@8kv%>3&TBuah z$_}xn&t(NWSek(U72MNR{1xzM)GzMGJyN3sSay;P?+Q1N9UI5U$=^%DRpgm@L)FB0 z?O3@*yr_;U!Nw9c8f%<@>tXtrFIG0ytrQOh1J2L~UZh+75v%J}NCz#p5nhlsDnbKY zef%AaC_f{w?duIjRz8-_el1vs>fLTaj|Q~JpXX18&C`Vpw=;6+457cL@z0+pV$bwH ztM%-=Xt}=wgU6MF*g|~zdBML+hu-c1zP3_v+|x3W>6;l6+84v;Z{sm>a{(YPldB~| zLL`4N+?-ei$)6DZTcQYPFXIqWXD<;Mui&B}j~fZYJj!NCIfHAw!4!uLhni1T?!XmT zycwhdJIEXV0Pi+gjmtM)(x%{Kd}0o#?AAs>OjOz^tA||Fq{2~d3c@X4v$V6AgqtAM zv%i`@S&9qFfS$M>o`;#^W3v&m>E%!mMgF*$$)ujHp_J)n9q|F&$YDr$h^H`L7ve^< zV@a+njB{$Kkx6wTB%Iv(5uux_L2=ZM zM1yKqKITJSn>{In99^grxn@vSYU;8|Sn{u1?+q_U>pV&RNoesaHckaob)gQ^V4*IR zg!Mt7k=JGABJ#sRT~D&xV|AG5u01QVsI(n1JPoRX74q+xcMm{ZL18eFJ+1Y!0Q_(? z4~n!l_!GYuh7psp!rw-wD2&Qja^~7_4xxCFZZnzIuMBk0ZdY$&I2XlbG%P|J2aC(( zN_X;W)97F#zlCF8KB1EWv71ZW$?F^a!-(d%3y#~J z3#EeMPUP+4E^s11-QlEM>=a{hj3XWtF62vzvZM=$cgkUsZ&QM+GZ~DKc#j;8jDW%% zqCSq7`xCJnVy>9TAqrmCr5vaD;{$O<--3j$ZWt~>vTsE=nbQ!J5r?Vo4)+cur5Goj zd>Or?XGhA6Pxrz8a~)OzEFiOn56NS3On>l3Bf#;3Mz|}f8KA&y_yS@sgAa)D*&-TJ8zcC(YL>gD)c4?qzOjk>jAS2lgSlA_E4$~;6#TTZz5fJx& z%rK8coR#1;WMrTK`_Sv@5?GEr1=6~B!cZz-Q9g-rWflk2WRl;Wtba?`*KKhwu%Uz9bA)k_p9gs{##7>H;0~fRQbH){Imk~+cJ^LFH9nPPT_X5X zNN(Q}sZeI=@K$p4Vr8UDoSgF%QI@ZJy%S#hkd5C#`*6-S-A8_Sg`VbmRc!s#S9Na% z;dNlW89cN(0N^MeYf+v^DboaI!|9R z_SCwL_24QryEt$e%tiXl`ctpz*7A)%jB+)e)XD3ce$^ET7y}^zckvy%&Ovim1z5fd{ZcmI$6WS12~CN^6xBmGH0P==I;ibFg~fz_9UHT(6@*PJNxi0v z;3p$So^EhZ87IncY(_OXbWPVCJjBRrx&VZ$u$R5X$_k_~okiWj6FEN@j)k+`Eq&O` z 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

y2fYYiyyjGRqgr-hV~$)%^?8 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�nYs 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Ξf+C0iC%*b5FYLWCt{dA7&VZ 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

Blq(>YfOa)lWEWo8?--kPYBj)b%;gHzQi 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 diff --git a/deps/openssl/android/x86_64/usr/local/lib/libssl.a b/deps/openssl/android/x86_64/usr/local/lib/libssl.a index 6cd04443c14a1cc62c1eea2f6927aebd5380f135..42936e7dacc7bd1fc6b2ae7e1e77e45867ee0aae 100644 GIT binary patch literal 1337266 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 }4uG$xL$g>hluZwk`-L@Nu-? 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 Z%0*B7eIcqe4MH5qRxjFa)GTxeuHw16? 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

4c2L{ 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 z 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®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

69H~vFB$ee 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

>& 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 # if defined(BSAES_ASM) @@ -106,7 +106,7 @@ void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); # 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__) +# 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 @@ -114,36 +114,36 @@ void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); # 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__) +# 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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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); @@ -434,7 +434,6 @@ void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out, # elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 64 /* RISC-V 64 support */ # include "riscv_arch.h" -# define RV64I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) int rv64i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); @@ -447,8 +446,6 @@ void rv64i_zknd_decrypt(const unsigned char *in, unsigned char *out, # elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 32 /* RISC-V 32 support */ # include "riscv_arch.h" -# define RV32I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) -# define RV32I_ZBKB_ZKND_ZKNE_CAPABLE (RV32I_ZKND_ZKNE_CAPABLE && RISCV_HAS_ZBKB()) int rv32i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1.h index ec76ae6f..36af1d76 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/asn1.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -142,8 +142,12 @@ 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); +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/bioerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bioerr.h index a0c06099..e38b981a 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bioerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bioerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn.h index 00544d9d..33f979ce 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/bn.h @@ -116,4 +116,13 @@ 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/cmserr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmserr.h index 1de2f9c7..a7fcf11f 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmserr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/cmserr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 8ad16834..7369a730 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/context.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/context.h @@ -24,6 +24,9 @@ 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 *); @@ -40,3 +43,6 @@ 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/decoder.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decoder.h index 6b5ee56a..a0d5de65 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decoder.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/decoder.h @@ -1,5 +1,5 @@ /* - * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -25,16 +25,16 @@ void *ossl_decoder_from_algorithm(int id, const OSSL_ALGORITHM *algodef, 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_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, - EVP_PKEY **pkey, const char *keytype, - OSSL_LIB_CTX *libctx, - const char *propquery); - int ossl_decoder_get_number(const OSSL_DECODER *encoder); int ossl_decoder_store_cache_flush(OSSL_LIB_CTX *libctx); int ossl_decoder_store_remove_all_provided(const OSSL_PROVIDER *prov); +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/dherr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dherr.h index bb24d131..519327f7 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dherr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dherr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 260c30fa..85d92a18 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsa.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/dsa.h @@ -26,7 +26,9 @@ 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 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[]); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ec.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ec.h index 62163b31..da85a7bd 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ec.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ec.h @@ -95,6 +95,12 @@ 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/ecx.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecx.h index 48b95fa5..f35b875f 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecx.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/ecx.h @@ -1,5 +1,5 @@ /* - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -15,7 +15,7 @@ # include -# ifndef OPENSSL_NO_EC +# ifndef OPENSSL_NO_ECX # include # include @@ -72,7 +72,6 @@ struct ecx_key_st { size_t keylen; ECX_KEY_TYPE type; CRYPTO_REF_COUNT references; - CRYPTO_RWLOCK *lock; }; size_t ossl_ecx_key_length(ECX_KEY_TYPE type); @@ -83,6 +82,9 @@ 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]); @@ -94,27 +96,33 @@ ossl_ed25519_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[32], const uint8_t private_key[32], const char *propq); int -ossl_ed25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len, +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 *message, size_t message_len, +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 char *propq); +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, +ossl_ed448_verify(OSSL_LIB_CTX *ctx, + const uint8_t *message, size_t message_len, const uint8_t signature[114], const uint8_t public_key[57], - const uint8_t *context, size_t context_len, const char *propq); + 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], @@ -146,5 +154,5 @@ ECX_KEY *ossl_evp_pkey_get1_X25519(EVP_PKEY *pkey); ECX_KEY *ossl_evp_pkey_get1_X448(EVP_PKEY *pkey); ECX_KEY *ossl_evp_pkey_get1_ED25519(EVP_PKEY *pkey); ECX_KEY *ossl_evp_pkey_get1_ED448(EVP_PKEY *pkey); -# endif /* OPENSSL_NO_EC */ +# endif /* 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 index 5c53bbea..6240438d 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encoder.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/encoder.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evp.h index a0fff7fd..34cea2f9 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evp.h @@ -16,11 +16,21 @@ # 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) @@ -203,7 +213,6 @@ struct evp_mac_st { const char *description; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_mac_newctx_fn *newctx; OSSL_FUNC_mac_dupctx_fn *dupctx; @@ -225,7 +234,6 @@ struct evp_kdf_st { char *type_name; const char *description; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_kdf_newctx_fn *newctx; OSSL_FUNC_kdf_dupctx_fn *dupctx; @@ -270,7 +278,6 @@ struct evp_md_st { const char *description; OSSL_PROVIDER *prov; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_digest_newctx_fn *newctx; OSSL_FUNC_digest_init_fn *dinit; OSSL_FUNC_digest_update_fn *dupdate; @@ -326,7 +333,6 @@ struct evp_cipher_st { const char *description; OSSL_PROVIDER *prov; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_cipher_newctx_fn *newctx; OSSL_FUNC_cipher_encrypt_init_fn *einit; OSSL_FUNC_cipher_decrypt_init_fn *dinit; @@ -646,7 +652,9 @@ union legacy_pkey_st { # endif # ifndef OPENSSL_NO_EC struct ec_key_st *ec; /* ECC */ +# ifndef OPENSSL_NO_ECX ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ +# endif # endif }; @@ -784,7 +792,7 @@ void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, OP_CACHE_ELEM *evp_keymgmt_util_find_operation_cache(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, int selection); -int evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk, int locking); +int evp_keymgmt_util_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); @@ -813,7 +821,7 @@ int evp_keymgmt_set_params(const EVP_KEYMGMT *keymgmt, void *evp_keymgmt_gen_init(const EVP_KEYMGMT *keymgmt, int selection, const OSSL_PARAM params[]); int evp_keymgmt_gen_set_template(const EVP_KEYMGMT *keymgmt, void *genctx, - void *template); + 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, @@ -892,10 +900,6 @@ EVP_MD_CTX *evp_md_ctx_new_ex(EVP_PKEY *pkey, const ASN1_OCTET_STRING *id, int evp_pkey_name2type(const char *name); const char *evp_pkey_type2name(int type); -int evp_pkey_ctx_set1_id_prov(EVP_PKEY_CTX *ctx, const void *id, int len); -int evp_pkey_ctx_get1_id_prov(EVP_PKEY_CTX *ctx, void *id); -int evp_pkey_ctx_get1_id_len_prov(EVP_PKEY_CTX *ctx, size_t *id_len); - int evp_pkey_ctx_use_cached_data(EVP_PKEY_CTX *ctx); # endif /* !defined(FIPS_MODULE) */ @@ -959,4 +963,8 @@ 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 index d90ba83f..4a001107 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evperr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/evperr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/md32_common.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/md32_common.h index 966e2684..46214f32 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/md32_common.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/md32_common.h @@ -63,37 +63,41 @@ * #define HASH_BLOCK_DATA_ORDER md5_block_data_order */ -#include +#ifndef OSSL_CRYPTO_MD32_COMMON_H +# define OSSL_CRYPTO_MD32_COMMON_H +# pragma once -#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) -# error "DATA_ORDER must be defined!" -#endif +# include -#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 +# if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) +# error "DATA_ORDER 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_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_BLOCK_DATA_ORDER -# error "HASH_BLOCK_DATA_ORDER 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 -#define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n)))) +# 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 && \ @@ -117,31 +121,31 @@ # endif #endif -#if defined(DATA_ORDER_IS_BIG_ENDIAN) +# if defined(DATA_ORDER_IS_BIG_ENDIAN) -# define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \ +# 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), \ +# 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) +# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) -# define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++))) ), \ +# 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), \ +# 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 +# endif /* * Time for some action :-) @@ -226,30 +230,30 @@ int HASH_FINAL(unsigned char *md, HASH_CTX *c) memset(p + n, 0, HASH_CBLOCK - 8 - n); p += HASH_CBLOCK - 8; -#if defined(DATA_ORDER_IS_BIG_ENDIAN) +# 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) +# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) (void)HOST_l2c(c->Nl, p); (void)HOST_l2c(c->Nh, p); -#endif +# 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 +# ifndef HASH_MAKE_STRING +# error "HASH_MAKE_STRING must be defined!" +# else HASH_MAKE_STRING(c, md); -#endif +# endif return 1; } -#ifndef MD32_REG_T -# if defined(__alpha) || defined(__sparcv9) || defined(__mips) -# define MD32_REG_T long +# 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, @@ -266,13 +270,15 @@ int HASH_FINAL(unsigned char *md, HASH_CTX *c) * Well, to be honest it should say that this *prevents* * performance degradation. */ -# else +# 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 +# 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 index 573e1197..d03ca83d 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/modes.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/modes.h @@ -138,6 +138,12 @@ struct gcm128_context { #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. @@ -149,6 +155,12 @@ struct xts128_context { 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]; 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 index 662f412e..114971c6 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs12err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/pkcs12err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 4c6e49f5..2e1c85c1 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/punycode.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/punycode.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -22,6 +22,4 @@ int ossl_punycode_decode ( int ossl_a2ulabel(const char *in, char *out, size_t outlen); -int ossl_a2ucompare(const char *a, const char *u); - #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand.h index 215b3b7a..d375c2f9 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rand.h @@ -140,4 +140,15 @@ 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/riscv_arch.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/riscv_arch.h index 89a40bea..95185841 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -56,4 +56,9 @@ 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 index 949873d0..8eddc168 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsa.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/rsa.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -34,8 +34,6 @@ int ossl_rsa_pss_params_30_copy(RSA_PSS_PARAMS_30 *to, int ossl_rsa_pss_params_30_is_unrestricted(const RSA_PSS_PARAMS_30 *rsa_pss_params); int ossl_rsa_pss_params_30_set_hashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, int hashalg_nid); -int ossl_rsa_pss_params_30_set_maskgenalg(RSA_PSS_PARAMS_30 *rsa_pss_params, - int maskgenalg_nid); int ossl_rsa_pss_params_30_set_maskgenhashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, int maskgenhashalg_nid); int ossl_rsa_pss_params_30_set_saltlen(RSA_PSS_PARAMS_30 *rsa_pss_params, @@ -83,6 +81,10 @@ 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, diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sha.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sha.h index 64305d17..99bcf0ff 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sha.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/sha.h @@ -1,5 +1,5 @@ /* - * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -14,6 +14,7 @@ # 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); 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 index 6cc1dfa5..cc4f5142 100644 --- 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 @@ -12,7 +12,7 @@ # pragma once # if defined(OPENSSL_CPUID_OBJ) -# if defined(__aarch64__) +# if defined(__aarch64__) || defined (_M_ARM64) # include "arm_arch.h" extern unsigned int OPENSSL_arm_midr; static inline int vpsm4_capable(void) @@ -21,8 +21,14 @@ static inline int vpsm4_capable(void) (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 @@ -53,7 +59,7 @@ void HWSM4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, const unsigned char ivec[16]); # endif /* HWSM4_CAPABLE */ -#ifdef VPSM4_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, @@ -69,7 +75,37 @@ void vpsm4_ecb_encrypt(const unsigned char *in, unsigned char *out, 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/store.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/store.h index 5645fc92..9b7be71a 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/store.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/store.h @@ -1,5 +1,5 @@ /* - * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509.h b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509.h index 631150b7..5765b9f7 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509.h @@ -278,6 +278,8 @@ struct x509_store_ctx_st { /* X509_STORE_CTX */ SSL_DANE *dane; /* signed via bare TA public key, rather than CA certificate */ int bare_ta_signed; + /* Raw Public Key */ + EVP_PKEY *rpk; OSSL_LIB_CTX *libctx; char *propq; @@ -309,7 +311,7 @@ struct x509_object_st { }; int ossl_a2i_ipadd(unsigned char *ipout, const char *ipasc); -int ossl_x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int ossl_x509_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); @@ -334,7 +336,8 @@ int ossl_x509_PUBKEY_get0_libctx(OSSL_LIB_CTX **plibctx, const char **ppropq, 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); + 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); @@ -364,6 +367,7 @@ 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); 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 index 0a67975b..c7c7d25e 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/crypto/x509err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 3143e340..36dbe0fc 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/asn1.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/asn1.h @@ -11,6 +11,8 @@ # 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 index 547a73d0..9481f4c9 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio.h @@ -27,6 +27,8 @@ struct bio_method_st { 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); @@ -41,16 +43,20 @@ int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); # 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) \ @@ -63,6 +69,8 @@ int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); 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) @@ -70,6 +78,8 @@ int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); 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); 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 new file mode 100644 index 00000000..a6449b7e --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio_addr.h @@ -0,0 +1,29 @@ +/* + * 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 new file mode 100644 index 00000000..64c0d4c3 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/bio_tfo.h @@ -0,0 +1,151 @@ +/* + * 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 new file mode 100644 index 00000000..15666f11 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/common.h @@ -0,0 +1,217 @@ +/* + * 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 index 3ad86fc7..c48c29d5 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/comp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/comp.h @@ -10,3 +10,5 @@ #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/cryptlib.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/cryptlib.h index ac50eb3b..64851fd8 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/cryptlib.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/cryptlib.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,9 +11,6 @@ # define OSSL_INTERNAL_CRYPTLIB_H # pragma once -# include -# include - # ifdef OPENSSL_USE_APPLINK # define BIO_FLAGS_UPLINK_INTERNAL 0x8000 # include "ms/uplink.h" @@ -21,39 +18,13 @@ # define BIO_FLAGS_UPLINK_INTERNAL 0 # endif +# include "internal/common.h" + # include # include # include # include # include -# include "internal/nelem.h" - -#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 - -/* - * Use this inside a union with the field that needs to be aligned to a - * reasonable boundary for the platform. The most pessimistic alignment - * of the listed types will be used by the compiler. - */ -# define OSSL_UNION_ALIGN \ - double align; \ - ossl_uintmax_t align_int; \ - void *align_ptr typedef struct ex_callback_st EX_CALLBACK; DEFINE_STACK_OF(EX_CALLBACK) @@ -61,30 +32,6 @@ DEFINE_STACK_OF(EX_CALLBACK) typedef struct mem_st MEM; DEFINE_LHASH_OF_EX(MEM); -# 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) - void OPENSSL_cpuid_setup(void); #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(__x86_64__) || \ @@ -168,7 +115,9 @@ typedef struct ossl_ex_data_global_st { # define OSSL_LIB_CTX_PROVIDER_CONF_INDEX 16 # define OSSL_LIB_CTX_BIO_CORE_INDEX 17 # define OSSL_LIB_CTX_CHILD_PROVIDER_INDEX 18 -# define OSSL_LIB_CTX_MAX_INDEXES 19 +# 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); @@ -211,34 +160,4 @@ char *ossl_buf2hexstr_sep(const unsigned char *buf, long buflen, char sep); unsigned char *ossl_hexstr2buf_sep(const char *str, long *buflen, const char sep); -static ossl_inline int ossl_ends_with_dirsep(const char *path) -{ - if (*path != '\0') - path += strlen(path) - 1; -# if defined __VMS - if (*path == ']' || *path == '>' || *path == ':') - return 1; -# elif defined _WIN32 - if (*path == '\\') - return 1; -# endif - return *path == '/'; -} - -static ossl_inline int ossl_is_absolute_path(const char *path) -{ -# if defined __VMS - if (strchr(path, ':') != NULL - || ((path[0] == '[' || path[0] == '<') - && path[1] != '.' && path[1] != '-' - && path[1] != ']' && path[1] != '>')) - return 1; -# elif defined _WIN32 - if (path[0] == '\\' - || (path[0] != '\0' && path[1] == ':')) - return 1; -# endif - return path[0] == '/'; -} - #endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/der.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/der.h index f23fabc2..8d6db8f0 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/der.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/der.h @@ -7,8 +7,12 @@ * https://www.openssl.org/source/license.html */ -#include -#include "internal/packet.h" +#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. @@ -22,42 +26,42 @@ * 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 +# 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 +# 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 +# define DER_C_UNIVERSAL 0x00 +# define DER_C_APPLICATION 0x40 +# define DER_C_CONTEXT 0x80 +# define DER_C_PRIVATE 0xC0 /* * Run-time constructors. @@ -67,7 +71,7 @@ */ /* This can be used for all items that don't have a context */ -#define DER_NO_CONTEXT -1 +# define DER_NO_CONTEXT -1 int ossl_DER_w_precompiled(WPACKET *pkt, int tag, const unsigned char *precompiled, @@ -86,3 +90,5 @@ int ossl_DER_w_octet_string_uint32(WPACKET *pkt, int tag, uint32_t value); */ 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 new file mode 100644 index 00000000..5f0313fe --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/deterministic_nonce.h @@ -0,0 +1,24 @@ +/* + * 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/e_os.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/e_os.h index 7fdc3899..d1ed62e8 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -143,7 +143,7 @@ static __inline unsigned int _strlen31(const char *str) # undef stdin # undef stdout # undef stderr -FILE *__iob_func(); +FILE *__iob_func(void); # define stdin (&__iob_func()[0]) # define stdout (&__iob_func()[1]) # define stderr (&__iob_func()[2]) @@ -249,7 +249,7 @@ FILE *__iob_func(); /***********************************************/ # if defined(OPENSSL_SYS_WINDOWS) -# if (_MSC_VER >= 1310) && !defined(_WIN32_WCE) +# if defined(_MSC_VER) && (_MSC_VER >= 1310) && !defined(_WIN32_WCE) # define open _open # define fdopen _fdopen # define close _close @@ -286,54 +286,6 @@ struct servent *getservbyname(const char *name, const char *proto); # endif /* end vxworks */ -/* system-specific variants defining ossl_sleep() */ -#if defined(OPENSSL_SYS_UNIX) || defined(__DJGPP__) -# include -static ossl_inline void ossl_sleep(unsigned long millis) -{ -# ifdef OPENSSL_SYS_VXWORKS - struct timespec ts; - ts.tv_sec = (long int) (millis / 1000); - ts.tv_nsec = (long int) (millis % 1000) * 1000000ul; - nanosleep(&ts, NULL); -# elif defined(__TANDEM) -# if !defined(_REENTRANT) -# include - /* HPNS does not support usleep for non threaded apps */ - PROCESS_DELAY_(millis * 1000); -# elif defined(_SPT_MODEL_) -# include -# include - usleep(millis * 1000); -# else - usleep(millis * 1000); -# endif -# else - usleep(millis * 1000); -# endif -} -#elif defined(_WIN32) -# include -static ossl_inline void ossl_sleep(unsigned long millis) -{ - Sleep(millis); -} -#else -/* Fallback to a busy wait */ -static ossl_inline void ossl_sleep(unsigned long millis) -{ - struct timeval start, now; - unsigned long elapsedms; - - gettimeofday(&start, NULL); - do { - gettimeofday(&now, NULL); - elapsedms = (((now.tv_sec - start.tv_sec) * 1000000) - + now.tv_usec - start.tv_usec) / 1000; - } while (elapsedms < millis); -} -#endif /* defined OPENSSL_SYS_UNIX */ - /* ----------------------------- HP NonStop -------------------------------- */ /* Required to support platform variant without getpid() and pid_t. */ # if defined(__TANDEM) && defined(_GUARDIAN_TARGET) @@ -343,12 +295,12 @@ static ossl_inline void ossl_sleep(unsigned long millis) # define gethostbyname(name) gethostbyname((char*)name) # define ioctlsocket(a,b,c) ioctl(a,b,c) # ifdef NO_GETPID -inline int nssgetpid(); +inline int nssgetpid(void); # ifndef NSSGETPID_MACRO # define NSSGETPID_MACRO # include # include - inline int nssgetpid() + inline int nssgetpid(void) { short phandle[10]={0}; union pseudo_pid { 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 index 8b34e03e..7d5a73b1 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/endian.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/endian.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,7 +12,7 @@ # pragma once /* - * IS_LITTLE_ENDIAN and IS_BIG_ENDIAN can be used to detect the endiannes + * 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. * 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 new file mode 100644 index 00000000..bda1ee6a --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/event_queue.h @@ -0,0 +1,163 @@ +/* + * 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 index c4f09087..edd8381e 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ffc.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ffc.h @@ -58,8 +58,11 @@ # define FFC_CHECK_INVALID_Q_VALUE 0x00020 # define FFC_CHECK_INVALID_J_VALUE 0x00040 -# define FFC_CHECK_BAD_LN_PAIR 0x00080 -# define FFC_CHECK_INVALID_SEED_SIZE 0x00100 +/* + * 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 @@ -68,6 +71,8 @@ # 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 @@ -132,7 +137,7 @@ void ossl_ffc_params_set_h(FFC_PARAMS *params, int index); void ossl_ffc_params_set_flags(FFC_PARAMS *params, unsigned int flags); void ossl_ffc_params_enable_flags(FFC_PARAMS *params, unsigned int flags, int enable); -int ossl_ffc_set_digest(FFC_PARAMS *params, const char *alg, const char *props); +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, 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 new file mode 100644 index 00000000..e1da5e05 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/hpke_util.h @@ -0,0 +1,100 @@ +/* + * 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 index 95492fd0..af27a325 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ktls.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ktls.h @@ -1,5 +1,5 @@ /* - * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -40,6 +40,11 @@ # 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; @@ -209,6 +214,13 @@ static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off, # 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 @@ -288,6 +300,18 @@ static ossl_inline int ktls_start(int fd, ktls_crypto_info_t *crypto_info, 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. 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 new file mode 100644 index 00000000..fdd356c4 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/list.h @@ -0,0 +1,169 @@ +/* + * 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 index fd36883f..6c42a9cd 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/namemap.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/namemap.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/numbers.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/numbers.h index 4f4d3306..47fb1677 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/numbers.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/numbers.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -61,6 +61,31 @@ # 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; 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 index ed761720..7abc6b8b 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -691,6 +691,8 @@ struct wpacket_st { */ #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 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 new file mode 100644 index 00000000..5173b467 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/packet_quic.h @@ -0,0 +1,150 @@ +/* + * 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 index 126211b7..3518f008 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -39,6 +39,11 @@ 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); 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 new file mode 100644 index 00000000..e721d071 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_names.h @@ -0,0 +1,376 @@ +/* + * 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 new file mode 100644 index 00000000..f34db219 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/param_names.h.in @@ -0,0 +1,18 @@ +/* + * {- 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 new file mode 100644 index 00000000..3fbd0cf9 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/params.h @@ -0,0 +1,38 @@ +/* + * 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/priority_queue.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/priority_queue.h new file mode 100644 index 00000000..5be03bf1 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/priority_queue.h @@ -0,0 +1,88 @@ +/* + * 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 index d09274d0..3adff499 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/property.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/property.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 18937f84..ab41d643 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/provider.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/provider.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -32,7 +32,7 @@ OSSL_PROVIDER *ossl_provider_find(OSSL_LIB_CTX *libctx, const char *name, int noconfig); OSSL_PROVIDER *ossl_provider_new(OSSL_LIB_CTX *libctx, const char *name, OSSL_provider_init_fn *init_function, - int noconfig); + OSSL_PARAM *params, int noconfig); int ossl_provider_up_ref(OSSL_PROVIDER *prov); void ossl_provider_free(OSSL_PROVIDER *prov); 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 new file mode 100644 index 00000000..03fc6088 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_ackm.h @@ -0,0 +1,297 @@ +/* + * 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 new file mode 100644 index 00000000..60c710b0 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_cc.h @@ -0,0 +1,219 @@ +/* + * 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 new file mode 100644 index 00000000..22c436dc --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_cfq.h @@ -0,0 +1,154 @@ +/* + * 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 new file mode 100644 index 00000000..f46db063 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_channel.h @@ -0,0 +1,429 @@ +/* + * 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 new file mode 100644 index 00000000..444249e7 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_demux.h @@ -0,0 +1,364 @@ +/* + * 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 new file mode 100644 index 00000000..ae195a5f --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_error.h @@ -0,0 +1,56 @@ +/* + * 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 new file mode 100644 index 00000000..49b448a3 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_fc.h @@ -0,0 +1,277 @@ +/* + * 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 new file mode 100644 index 00000000..a260ec44 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_fifd.h @@ -0,0 +1,80 @@ +/* + * 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 new file mode 100644 index 00000000..57bb551e --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_reactor.h @@ -0,0 +1,188 @@ +/* + * 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 new file mode 100644 index 00000000..e26fd356 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_rx.h @@ -0,0 +1,569 @@ +/* + * 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 new file mode 100644 index 00000000..f3b798fe --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_tx.h @@ -0,0 +1,383 @@ +/* + * 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 new file mode 100644 index 00000000..97e630d9 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_record_util.h @@ -0,0 +1,116 @@ +/* + * 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 new file mode 100644 index 00000000..c90964a7 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_rx_depack.h @@ -0,0 +1,21 @@ +/* + * 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 new file mode 100644 index 00000000..8ed1dcb1 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_sf_list.h @@ -0,0 +1,151 @@ +/* + * 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 new file mode 100644 index 00000000..52d4527c --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_ssl.h @@ -0,0 +1,132 @@ +/* + * 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 new file mode 100644 index 00000000..5b33551b --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_statm.h @@ -0,0 +1,40 @@ +/* + * 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 new file mode 100644 index 00000000..0da8febd --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_stream.h @@ -0,0 +1,429 @@ +/* +* 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 new file mode 100644 index 00000000..ae749061 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_stream_map.h @@ -0,0 +1,878 @@ +/* +* 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 new file mode 100644 index 00000000..592c2ffa --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_thread_assist.h @@ -0,0 +1,102 @@ +/* + * 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 new file mode 100644 index 00000000..0e4a9d33 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_tls.h @@ -0,0 +1,106 @@ +/* + * 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 new file mode 100644 index 00000000..4f358dd4 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_tserver.h @@ -0,0 +1,220 @@ +/* + * 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 new file mode 100644 index 00000000..ae508f23 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_txp.h @@ -0,0 +1,209 @@ +/* + * 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 new file mode 100644 index 00000000..ed6e3875 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_txpim.h @@ -0,0 +1,133 @@ +/* + * 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 new file mode 100644 index 00000000..d42164ba --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_types.h @@ -0,0 +1,116 @@ +/* + * 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 new file mode 100644 index 00000000..d4b70b22 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_vlint.h @@ -0,0 +1,127 @@ +/* +* 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 new file mode 100644 index 00000000..cd01feb0 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_wire.h @@ -0,0 +1,784 @@ +/* +* 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 new file mode 100644 index 00000000..18a483fc --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/quic_wire_pkt.h @@ -0,0 +1,629 @@ +/* + * 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 new file mode 100644 index 00000000..53bd4ca6 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/recordmethod.h @@ -0,0 +1,339 @@ +/* + * 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 index 3392d3b4..4c9ab266 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/refcount.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/refcount.h @@ -12,6 +12,7 @@ # include # include +# include # if defined(OPENSSL_THREADS) && !defined(OPENSSL_DEV_NO_ATOMICS) # if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ @@ -25,12 +26,13 @@ # define HAVE_ATOMICS 1 -typedef _Atomic int CRYPTO_REF_COUNT; +typedef struct { + _Atomic int val; +} CRYPTO_REF_COUNT; -static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, - ossl_unused void *lock) +static inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1; + *ret = atomic_fetch_add_explicit(&refcnt->val, 1, memory_order_relaxed) + 1; return 1; } @@ -44,50 +46,70 @@ static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, * to mutable members doesn't have to be serialized anymore, which would * otherwise imply an acquire fence. Hence conditional acquire fence... */ -static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, - ossl_unused void *lock) +static inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1; + *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 int CRYPTO_REF_COUNT; +typedef struct { + int val; +} CRYPTO_REF_COUNT; -static __inline__ int CRYPTO_UP_REF(int *val, int *ret, ossl_unused void *lock) +static __inline__ int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = __atomic_fetch_add(val, 1, __ATOMIC_RELAXED) + 1; + *ret = __atomic_fetch_add(&refcnt->val, 1, __ATOMIC_RELAXED) + 1; return 1; } -static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, - ossl_unused void *lock) +static __inline__ int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = __atomic_fetch_sub(val, 1, __ATOMIC_RELAXED) - 1; + *ret = __atomic_fetch_sub(&refcnt->val, 1, __ATOMIC_RELAXED) - 1; if (*ret == 0) __atomic_thread_fence(__ATOMIC_ACQUIRE); return 1; } -# elif defined(__ICL) && defined(_WIN32) -# define HAVE_ATOMICS 1 -typedef volatile int CRYPTO_REF_COUNT; -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline__ int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd((void *)val, 1) + 1; + *ret = __atomic_load_n(&refcnt->val, __ATOMIC_RELAXED); return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, - ossl_unused void *lock) +# 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 *)val, -1) - 1; + *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; } @@ -95,7 +117,9 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, # define HAVE_ATOMICS 1 -typedef volatile int CRYPTO_REF_COUNT; +typedef struct { + volatile int val; +} CRYPTO_REF_COUNT; # if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64) # include @@ -103,21 +127,26 @@ typedef volatile int CRYPTO_REF_COUNT; # define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH # endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd_nf(val, 1) + 1; + *ret = _InterlockedExchangeAdd_nf(&refcnt->val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd_nf(val, -1) - 1; + *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) @@ -131,19 +160,24 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, # endif # endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd(val, 1) + 1; + *ret = _InterlockedExchangeAdd(&refcnt->val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd(val, -1) - 1; + *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 @@ -156,13 +190,92 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, */ # ifndef HAVE_ATOMICS -typedef int CRYPTO_REF_COUNT; +typedef struct { + int val; +# ifdef OPENSSL_THREADS + CRYPTO_RWLOCK *lock; +# endif +} CRYPTO_REF_COUNT; -# define CRYPTO_UP_REF(val, ret, lock) CRYPTO_atomic_add(val, 1, ret, lock) -# define CRYPTO_DOWN_REF(val, ret, lock) CRYPTO_atomic_add(val, -1, ret, lock) +# 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) @@ -173,6 +286,6 @@ typedef int CRYPTO_REF_COUNT; # define REF_PRINT_EX(text, count, object) \ OSSL_TRACE3(REF_COUNT, "%p:%4d:%s\n", (object), (count), (text)); # define REF_PRINT_COUNT(text, object) \ - REF_PRINT_EX(text, object->references, (void *)object) + 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 new file mode 100644 index 00000000..436f1ca1 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ring_buf.h @@ -0,0 +1,277 @@ +/* + * 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 new file mode 100644 index 00000000..be37e6ab --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/safe_math.h @@ -0,0 +1,443 @@ +/* + * 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/sockets.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sockets.h index 1f5fefcc..2550c56b 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sockets.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/sockets.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -61,7 +61,25 @@ struct servent *PASCAL getservbyname(const char *, const char *); # 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 @@ -71,6 +89,9 @@ struct servent *PASCAL getservbyname(const char *, const char *); # 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 @@ -95,6 +116,13 @@ struct servent *PASCAL getservbyname(const char *, const char *); # include # endif +# ifdef OPENSSL_SYS_UNIX +# ifndef OPENSSL_SYS_TANDEM +# include +# endif +# include +# endif + # ifndef VMS # include # else @@ -136,12 +164,15 @@ struct servent *PASCAL getservbyname(const char *, const char *); # 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__) 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 new file mode 100644 index 00000000..8a0c7974 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ssl.h @@ -0,0 +1,24 @@ +/* + * 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 new file mode 100644 index 00000000..4fb5da19 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/ssl3_cbc.h @@ -0,0 +1,40 @@ +/* + * 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/statem.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/statem.h new file mode 100644 index 00000000..136e6523 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/statem.h @@ -0,0 +1,171 @@ +/* + * 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/thread.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread.h new file mode 100644 index 00000000..8c5bad77 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread.h @@ -0,0 +1,39 @@ +/* + * 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 new file mode 100644 index 00000000..1bfc0ebb --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/thread_arch.h @@ -0,0 +1,127 @@ +/* + * 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/time.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/time.h new file mode 100644 index 00000000..14d724ab --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/time.h @@ -0,0 +1,242 @@ +/* + * 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 index 8a35ced1..73fb53bc 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tlsgroups.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tlsgroups.h @@ -41,6 +41,16 @@ # 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tsan_assist.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tsan_assist.h index 17205d10..a840df0b 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tsan_assist.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/tsan_assist.h @@ -47,33 +47,37 @@ * can use TSAN_QUALIFIER in cast specifically when it has to count. */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ +#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 +# include -# if defined(ATOMIC_POINTER_LOCK_FREE) \ +# 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 +# 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) +# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) -# if defined(__GCC_ATOMIC_POINTER_LOCK_FREE) \ +# 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 +# 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 \ +# 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))) /* @@ -87,62 +91,63 @@ * 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) \ +# 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)) \ +# 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) __iso_volatile_load32(ptr) -# define tsan_store(ptr, val) __iso_volatile_store32((ptr), (val)) +# define tsan_load(ptr) (*(ptr)) +# define tsan_store(ptr, val) (*(ptr) = (val)) # endif -# else +# 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)) -# 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)) +# 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 - -#define tsan_counter(ptr) tsan_add((ptr), 1) -#define tsan_decr(ptr) tsan_add((ptr), -1) - diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/internal/uint_set.h b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/uint_set.h new file mode 100644 index 00000000..dcb29b33 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/internal/uint_set.h @@ -0,0 +1,63 @@ +/* + * 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/openssl/asn1.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h index 85ae8d58..09712345 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/asn1.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/asn1.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -158,7 +158,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR) -# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +# 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 @@ -999,6 +999,8 @@ 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); 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 index d478bc96..798b2211 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -135,7 +135,7 @@ extern "C" { -} -# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +# 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 @@ -832,6 +832,8 @@ 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); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/async.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/async.h index bc27d5db..826ffb99 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/async.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/async.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -80,6 +80,14 @@ int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); 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); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h index e16cf622..ea584def 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bio.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/bio.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -67,6 +67,8 @@ extern "C" { # 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 @@ -171,6 +173,30 @@ extern "C" { # 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) @@ -208,7 +234,7 @@ extern "C" { # define BIO_FLAGS_NONCLEAR_RST 0x400 # define BIO_FLAGS_IN_EOF 0x800 -/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ +/* 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; @@ -256,12 +282,14 @@ void BIO_clear_flags(BIO *b, int flags); # 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_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 @@ -362,6 +390,34 @@ struct bio_dgram_sctp_prinfo { }; # 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 */ @@ -428,10 +484,17 @@ struct bio_dgram_sctp_prinfo { # 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_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() */ @@ -452,7 +515,11 @@ struct bio_dgram_sctp_prinfo { # 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, \ @@ -469,6 +536,7 @@ struct bio_dgram_sctp_prinfo { (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 @@ -596,8 +664,30 @@ int BIO_ctrl_reset_read_request(BIO *b); (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)) @@ -640,10 +730,18 @@ 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); @@ -667,6 +765,9 @@ 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 @@ -686,6 +787,7 @@ 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); @@ -704,6 +806,7 @@ int BIO_dgram_sctp_msg_waiting(BIO *b); # ifndef OPENSSL_NO_SOCK int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); +int BIO_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); @@ -726,6 +829,8 @@ int BIO_hex_string(BIO *out, int indent, int width, const void *data, # 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 *); @@ -788,6 +893,7 @@ int BIO_sock_info(int sock, # 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); @@ -805,6 +911,11 @@ 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 @@ -856,18 +967,30 @@ 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 (*gets) (BIO *, char *, int)); + 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 *)); 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 index c521e41e..418d1197 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -68,6 +68,8 @@ extern "C" { # 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 @@ -172,6 +174,30 @@ extern "C" { # 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) @@ -209,7 +235,7 @@ extern "C" { # define BIO_FLAGS_NONCLEAR_RST 0x400 # define BIO_FLAGS_IN_EOF 0x800 -/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ +/* 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; @@ -257,12 +283,14 @@ void BIO_clear_flags(BIO *b, int flags); # 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_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 @@ -339,6 +367,34 @@ struct bio_dgram_sctp_prinfo { }; # 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 */ @@ -405,10 +461,17 @@ struct bio_dgram_sctp_prinfo { # 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_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() */ @@ -429,7 +492,11 @@ struct bio_dgram_sctp_prinfo { # 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, \ @@ -446,6 +513,7 @@ struct bio_dgram_sctp_prinfo { (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 @@ -573,8 +641,30 @@ int BIO_ctrl_reset_read_request(BIO *b); (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)) @@ -617,10 +707,18 @@ 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); @@ -644,6 +742,9 @@ 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 @@ -663,6 +764,7 @@ 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); @@ -681,6 +783,7 @@ int BIO_dgram_sctp_msg_waiting(BIO *b); # ifndef OPENSSL_NO_SOCK int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); +int BIO_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); @@ -703,6 +806,8 @@ int BIO_hex_string(BIO *out, int indent, int width, const void *data, # 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 *); @@ -765,6 +870,7 @@ int BIO_sock_info(int sock, # 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); @@ -782,6 +888,11 @@ 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 @@ -833,18 +944,30 @@ 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 (*gets) (BIO *, char *, int)); + 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 *)); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bioerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bioerr.h index 787b30af..e4fdb649 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bioerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bioerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -37,14 +37,18 @@ # 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 @@ -53,6 +57,7 @@ # 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 @@ -61,5 +66,7 @@ # 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/bn.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bn.h index 27b127a5..ea706dca 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bn.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/bn.h @@ -241,12 +241,18 @@ 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); 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 index 49825570..60beffd5 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmp.h @@ -35,7 +35,9 @@ extern "C" { # endif -# define OSSL_CMP_PVNO 2 +# 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 { @@ -137,7 +139,6 @@ extern "C" { # 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) @@ -203,8 +204,8 @@ typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; # 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 @@ -378,18 +379,35 @@ 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_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 @@ -420,9 +438,11 @@ 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); @@ -432,7 +452,9 @@ void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); 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: */ @@ -454,6 +476,7 @@ int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, 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); @@ -477,6 +500,7 @@ 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); @@ -517,8 +541,10 @@ 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; @@ -590,6 +616,12 @@ int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, 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 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 index fb5ae671..5bd8beb5 100644 --- 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 @@ -36,7 +36,9 @@ use OpenSSL::stackhash qw(generate_stack_macros); extern "C" { # endif -# define OSSL_CMP_PVNO 2 +# 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 { @@ -138,7 +140,6 @@ extern "C" { # 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) @@ -204,8 +205,8 @@ typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; # 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 @@ -259,18 +260,35 @@ 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_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 @@ -301,9 +319,11 @@ 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); @@ -313,7 +333,9 @@ void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); 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: */ @@ -335,6 +357,7 @@ int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, 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); @@ -358,6 +381,7 @@ 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); @@ -398,8 +422,10 @@ 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; @@ -471,6 +497,12 @@ int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, 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 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 index 49fd5e39..57a6effb 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmperr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmperr.h @@ -59,8 +59,11 @@ # 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 @@ -94,6 +97,7 @@ # 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h index 3b453e6a..fe86a5c7 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cms.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/cms.h.in * - * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -31,8 +31,10 @@ 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; @@ -147,6 +149,8 @@ SKM_DEFINE_STACK_OF_INTERNAL(CMS_RevocationInfoChoice, CMS_RevocationInfoChoice, #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) @@ -217,13 +221,16 @@ 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 *ctx, + unsigned int flags, OSSL_LIB_CTX *libctx, const char *propq); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, @@ -233,27 +240,26 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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 *ctx, + 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 *ctx, + OSSL_LIB_CTX *libctx, const char *propq); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, @@ -272,7 +278,7 @@ CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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); @@ -291,12 +297,16 @@ int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); CMS_ContentInfo * -CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, +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 *ctx, + 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); @@ -385,6 +395,11 @@ 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, @@ -441,7 +456,7 @@ CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( unsigned char *id, int idlen, int allorfirst, STACK_OF(GENERAL_NAMES) *receiptList, STACK_OF(GENERAL_NAMES) *receiptsTo, - OSSL_LIB_CTX *ctx); + OSSL_LIB_CTX *libctx); int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, 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 index da20ddf2..23966770 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -32,8 +32,10 @@ use OpenSSL::stackhash qw(generate_stack_macros); 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; @@ -49,6 +51,8 @@ typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; .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) @@ -119,13 +123,16 @@ 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 *ctx, + unsigned int flags, OSSL_LIB_CTX *libctx, const char *propq); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, @@ -135,27 +142,26 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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 *ctx, + 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 *ctx, + OSSL_LIB_CTX *libctx, const char *propq); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, @@ -174,7 +180,7 @@ CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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); @@ -193,12 +199,16 @@ int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); CMS_ContentInfo * -CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, +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 *ctx, + 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); @@ -287,6 +297,11 @@ 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, @@ -343,7 +358,7 @@ CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( unsigned char *id, int idlen, int allorfirst, STACK_OF(GENERAL_NAMES) *receiptList, STACK_OF(GENERAL_NAMES) *receiptsTo, - OSSL_LIB_CTX *ctx); + OSSL_LIB_CTX *libctx); int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmserr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmserr.h index f2d7708f..887035b1 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmserr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/cmserr.h @@ -86,6 +86,7 @@ # 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comp.h index 06ff5810..f81ba0f3 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comp.h @@ -40,15 +40,20 @@ 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 -# ifdef ZLIB const BIO_METHOD *BIO_f_zlib(void); -# endif +const BIO_METHOD *BIO_f_brotli(void); +const BIO_METHOD *BIO_f_zstd(void); # endif diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comperr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comperr.h index 01dd3e6b..1948d37f 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comperr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/comperr.h @@ -23,9 +23,16 @@ /* * 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 index e8fcf315..61bb0087 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/conf.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/conf.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 044b3eb5..56632870 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 2a8b7c4d..4bf35903 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/configuration.h @@ -27,7 +27,7 @@ extern "C" { * OpenSSL was configured with the following options: */ -# define OPENSSL_CONFIGURED_API 30100 +# define OPENSSL_CONFIGURED_API 30200 # ifndef OPENSSL_RAND_SEED_OS # define OPENSSL_RAND_SEED_OS # endif @@ -46,6 +46,12 @@ extern "C" { # ifndef OPENSSL_NO_ASYNC # define OPENSSL_NO_ASYNC # 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 @@ -58,6 +64,9 @@ extern "C" { # 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_DEVCRYPTOENG # define OPENSSL_NO_DEVCRYPTOENG # endif @@ -127,6 +136,9 @@ extern "C" { # 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 @@ -145,6 +157,12 @@ extern "C" { # 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 @@ -160,6 +178,21 @@ extern "C" { # 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 @@ -181,6 +214,12 @@ extern "C" { # 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 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 index b84dc1df..86077d0a 100644 --- 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 @@ -62,6 +62,12 @@ extern "C" { # 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 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 index 9683ac70..18c19918 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -42,6 +42,9 @@ struct ossl_dispatch_st { void (*function)(void); }; +# define OSSL_DISPATCH_END \ + { 0, NULL } + /* * Other items, essentially an int<->pointer map element. * 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 index 61d75a38..9b03f20c 100644 --- 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 @@ -661,6 +661,14 @@ OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types, 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 @@ -832,16 +840,24 @@ OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_settable_ctx_params, # 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)) @@ -937,6 +953,8 @@ OSSL_CORE_MAKE_FUNC(int, decoder_export_object, #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, @@ -952,6 +970,12 @@ 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 } 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 index 0a6ec1bb..ffffe90f 100644 --- 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 @@ -1,4 +1,7 @@ /* + * 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 @@ -7,6 +10,7 @@ * https://www.openssl.org/source/license.html */ + #ifndef OPENSSL_CORE_NAMES_H # define OPENSSL_CORE_NAMES_H # pragma once @@ -15,544 +19,454 @@ extern "C" { # endif -/* Well known parameter names that core passes to providers */ -#define OSSL_PROV_PARAM_CORE_VERSION "openssl-version" /* utf8_ptr */ -#define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name" /* utf8_ptr */ -#define OSSL_PROV_PARAM_CORE_MODULE_FILENAME "module-filename" /* utf8_ptr */ - -/* Well known parameter names that Providers can define */ -#define OSSL_PROV_PARAM_NAME "name" /* utf8_ptr */ -#define OSSL_PROV_PARAM_VERSION "version" /* utf8_ptr */ -#define OSSL_PROV_PARAM_BUILDINFO "buildinfo" /* utf8_ptr */ -#define OSSL_PROV_PARAM_STATUS "status" /* uint */ -#define OSSL_PROV_PARAM_SECURITY_CHECKS "security-checks" /* uint */ -#define OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" /* uint */ -#define OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" /* uint */ - -/* Self test callback parameters */ -#define OSSL_PROV_PARAM_SELF_TEST_PHASE "st-phase" /* utf8_string */ -#define OSSL_PROV_PARAM_SELF_TEST_TYPE "st-type" /* utf8_string */ -#define OSSL_PROV_PARAM_SELF_TEST_DESC "st-desc" /* utf8_string */ - -/*- - * Provider-native object abstractions - * - * These are used when a provider wants to pass object data or an object - * reference back to libcrypto. This is only useful for provider functions - * that take a callback to which an OSSL_PARAM array with these parameters - * can be passed. - * - * This set of parameter names is explained in detail in provider-object(7) - * (doc/man7/provider-object.pod) - */ -#define OSSL_OBJECT_PARAM_TYPE "type" /* INTEGER */ -#define OSSL_OBJECT_PARAM_DATA_TYPE "data-type" /* UTF8_STRING */ -#define OSSL_OBJECT_PARAM_DATA_STRUCTURE "data-structure" /* UTF8_STRING */ -#define OSSL_OBJECT_PARAM_REFERENCE "reference" /* OCTET_STRING */ -#define OSSL_OBJECT_PARAM_DATA "data" /* OCTET_STRING or UTF8_STRING */ -#define OSSL_OBJECT_PARAM_DESC "desc" /* UTF8_STRING */ - -/* - * Algorithm parameters - * If "engine" or "properties" are specified, they should always be paired - * with the algorithm type. - * Note these are common names that are shared by many types (such as kdf, mac, - * and pkey) e.g: see OSSL_MAC_PARAM_DIGEST below. - */ -#define OSSL_ALG_PARAM_DIGEST "digest" /* utf8_string */ -#define OSSL_ALG_PARAM_CIPHER "cipher" /* utf8_string */ -#define OSSL_ALG_PARAM_ENGINE "engine" /* utf8_string */ -#define OSSL_ALG_PARAM_MAC "mac" /* utf8_string */ -#define OSSL_ALG_PARAM_PROPERTIES "properties"/* utf8_string */ - -/* cipher parameters */ -#define OSSL_CIPHER_PARAM_PADDING "padding" /* uint */ -#define OSSL_CIPHER_PARAM_USE_BITS "use-bits" /* uint */ -#define OSSL_CIPHER_PARAM_TLS_VERSION "tls-version" /* uint */ -#define OSSL_CIPHER_PARAM_TLS_MAC "tls-mac" /* octet_ptr */ -#define OSSL_CIPHER_PARAM_TLS_MAC_SIZE "tls-mac-size" /* size_t */ -#define OSSL_CIPHER_PARAM_MODE "mode" /* uint */ -#define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize" /* size_t */ -#define OSSL_CIPHER_PARAM_AEAD "aead" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_CTS "cts" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_KEYLEN "keylen" /* size_t */ -#define OSSL_CIPHER_PARAM_IVLEN "ivlen" /* size_t */ -#define OSSL_CIPHER_PARAM_IV "iv" /* octet_string OR octet_ptr */ -#define OSSL_CIPHER_PARAM_UPDATED_IV "updated-iv" /* octet_string OR octet_ptr */ -#define OSSL_CIPHER_PARAM_NUM "num" /* uint */ -#define OSSL_CIPHER_PARAM_ROUNDS "rounds" /* uint */ -#define OSSL_CIPHER_PARAM_AEAD_TAG "tag" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD "tlsaad" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD "tlsaadpad" /* size_t */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN "tlsivgen" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV "tlsivinv" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN -#define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" /* size_t */ -#define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey" /* octet_string */ -#define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" /* octet_string */ -#define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" /* size_t */ -#define OSSL_CIPHER_PARAM_SPEED "speed" /* uint */ -#define OSSL_CIPHER_PARAM_CTS_MODE "cts_mode" /* utf8_string */ -/* For passing the AlgorithmIdentifier parameter in DER form */ -#define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS "alg_id_param" /* octet_string */ - -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT \ - "tls1multi_maxsndfrag" /* uint */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE \ - "tls1multi_maxbufsz" /* size_t */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE \ - "tls1multi_interleave" /* uint */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD \ - "tls1multi_aad" /* octet_string */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN \ - "tls1multi_aadpacklen" /* uint */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC \ - "tls1multi_enc" /* octet_string */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN \ - "tls1multi_encin" /* octet_string */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN \ - "tls1multi_enclen" /* size_t */ - /* OSSL_CIPHER_PARAM_CTS_MODE Values */ -#define OSSL_CIPHER_CTS_MODE_CS1 "CS1" -#define OSSL_CIPHER_CTS_MODE_CS2 "CS2" -#define OSSL_CIPHER_CTS_MODE_CS3 "CS3" +# define OSSL_CIPHER_CTS_MODE_CS1 "CS1" +# define OSSL_CIPHER_CTS_MODE_CS2 "CS2" +# define OSSL_CIPHER_CTS_MODE_CS3 "CS3" -/* digest parameters */ -#define OSSL_DIGEST_PARAM_XOFLEN "xoflen" /* size_t */ -#define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms" /* octet string */ -#define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type" /* uint */ -#define OSSL_DIGEST_PARAM_MICALG "micalg" /* utf8 string */ -#define OSSL_DIGEST_PARAM_BLOCK_SIZE "blocksize" /* size_t */ -#define OSSL_DIGEST_PARAM_SIZE "size" /* size_t */ -#define OSSL_DIGEST_PARAM_XOF "xof" /* int, 0 or 1 */ -#define OSSL_DIGEST_PARAM_ALGID_ABSENT "algid-absent" /* int, 0 or 1 */ +/* Known 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_384 "SHA2-384" -#define OSSL_DIGEST_NAME_SHA2_512 "SHA2-512" -#define OSSL_DIGEST_NAME_SHA2_512_224 "SHA2-512/224" -#define OSSL_DIGEST_NAME_SHA2_512_256 "SHA2-512/256" -#define OSSL_DIGEST_NAME_MD2 "MD2" -#define OSSL_DIGEST_NAME_MD4 "MD4" -#define OSSL_DIGEST_NAME_MDC2 "MDC2" -#define OSSL_DIGEST_NAME_RIPEMD160 "RIPEMD160" -#define OSSL_DIGEST_NAME_SHA3_224 "SHA3-224" -#define OSSL_DIGEST_NAME_SHA3_256 "SHA3-256" -#define OSSL_DIGEST_NAME_SHA3_384 "SHA3-384" -#define OSSL_DIGEST_NAME_SHA3_512 "SHA3-512" -#define OSSL_DIGEST_NAME_KECCAK_KMAC128 "KECCAK-KMAC-128" -#define OSSL_DIGEST_NAME_KECCAK_KMAC256 "KECCAK-KMAC-256" -#define OSSL_DIGEST_NAME_SM3 "SM3" - -/* MAC parameters */ -#define OSSL_MAC_PARAM_KEY "key" /* octet string */ -#define OSSL_MAC_PARAM_IV "iv" /* octet string */ -#define OSSL_MAC_PARAM_CUSTOM "custom" /* utf8 string */ -#define OSSL_MAC_PARAM_SALT "salt" /* octet string */ -#define OSSL_MAC_PARAM_XOF "xof" /* int, 0 or 1 */ -#define OSSL_MAC_PARAM_DIGEST_NOINIT "digest-noinit" /* int, 0 or 1 */ -#define OSSL_MAC_PARAM_DIGEST_ONESHOT "digest-oneshot" /* int, 0 or 1 */ -#define OSSL_MAC_PARAM_C_ROUNDS "c-rounds" /* unsigned int */ -#define OSSL_MAC_PARAM_D_ROUNDS "d-rounds" /* unsigned int */ - -/* - * If "engine" or "properties" are specified, they should always be paired - * with "cipher" or "digest". - */ -#define OSSL_MAC_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ -#define OSSL_MAC_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ -#define OSSL_MAC_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ -#define OSSL_MAC_PARAM_SIZE "size" /* size_t */ -#define OSSL_MAC_PARAM_BLOCK_SIZE "block-size" /* size_t */ -#define OSSL_MAC_PARAM_TLS_DATA_SIZE "tls-data-size" /* size_t */ +# 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" - -/* KDF / PRF parameters */ -#define OSSL_KDF_PARAM_SECRET "secret" /* octet string */ -#define OSSL_KDF_PARAM_KEY "key" /* octet string */ -#define OSSL_KDF_PARAM_SALT "salt" /* octet string */ -#define OSSL_KDF_PARAM_PASSWORD "pass" /* octet string */ -#define OSSL_KDF_PARAM_PREFIX "prefix" /* octet string */ -#define OSSL_KDF_PARAM_LABEL "label" /* octet string */ -#define OSSL_KDF_PARAM_DATA "data" /* octet string */ -#define OSSL_KDF_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ -#define OSSL_KDF_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ -#define OSSL_KDF_PARAM_MAC OSSL_ALG_PARAM_MAC /* utf8 string */ -#define OSSL_KDF_PARAM_MAC_SIZE "maclen" /* size_t */ -#define OSSL_KDF_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ -#define OSSL_KDF_PARAM_ITER "iter" /* unsigned int */ -#define OSSL_KDF_PARAM_MODE "mode" /* utf8 string or int */ -#define OSSL_KDF_PARAM_PKCS5 "pkcs5" /* int */ -#define OSSL_KDF_PARAM_UKM "ukm" /* octet string */ -#define OSSL_KDF_PARAM_CEK_ALG "cekalg" /* utf8 string */ -#define OSSL_KDF_PARAM_SCRYPT_N "n" /* uint64_t */ -#define OSSL_KDF_PARAM_SCRYPT_R "r" /* uint32_t */ -#define OSSL_KDF_PARAM_SCRYPT_P "p" /* uint32_t */ -#define OSSL_KDF_PARAM_SCRYPT_MAXMEM "maxmem_bytes" /* uint64_t */ -#define OSSL_KDF_PARAM_INFO "info" /* octet string */ -#define OSSL_KDF_PARAM_SEED "seed" /* octet string */ -#define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash" /* octet string */ -#define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id" /* octet string */ -#define OSSL_KDF_PARAM_SSHKDF_TYPE "type" /* int */ -#define OSSL_KDF_PARAM_SIZE "size" /* size_t */ -#define OSSL_KDF_PARAM_CONSTANT "constant" /* octet string */ -#define OSSL_KDF_PARAM_PKCS12_ID "id" /* int */ -#define OSSL_KDF_PARAM_KBKDF_USE_L "use-l" /* int */ -#define OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR "use-separator" /* int */ -#define OSSL_KDF_PARAM_KBKDF_R "r" /* int */ -#define OSSL_KDF_PARAM_X942_ACVPINFO "acvp-info" -#define OSSL_KDF_PARAM_X942_PARTYUINFO "partyu-info" -#define OSSL_KDF_PARAM_X942_PARTYVINFO "partyv-info" -#define OSSL_KDF_PARAM_X942_SUPP_PUBINFO "supp-pubinfo" -#define OSSL_KDF_PARAM_X942_SUPP_PRIVINFO "supp-privinfo" -#define OSSL_KDF_PARAM_X942_USE_KEYBITS "use-keybits" +# 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" - -/* Known RAND names */ -#define OSSL_RAND_PARAM_STATE "state" -#define OSSL_RAND_PARAM_STRENGTH "strength" -#define OSSL_RAND_PARAM_MAX_REQUEST "max_request" -#define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy" -#define OSSL_RAND_PARAM_TEST_NONCE "test_nonce" -#define OSSL_RAND_PARAM_GENERATE "generate" - -/* RAND/DRBG names */ -#define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests" -#define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval" -#define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen" -#define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen" -#define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen" -#define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen" -#define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen" -#define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen" -#define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter" -#define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time" -#define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -#define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -#define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -#define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC -#define OSSL_DRBG_PARAM_USE_DF "use_derivation_function" - -/* DRBG call back parameters */ -#define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required" -#define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance" -#define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length" -#define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length" -#define OSSL_DRBG_PARAM_RANDOM_DATA "random_data" -#define OSSL_DRBG_PARAM_SIZE "size" - -/* PKEY parameters */ -/* Common PKEY parameters */ -#define OSSL_PKEY_PARAM_BITS "bits" /* integer */ -#define OSSL_PKEY_PARAM_MAX_SIZE "max-size" /* integer */ -#define OSSL_PKEY_PARAM_SECURITY_BITS "security-bits" /* integer */ -#define OSSL_PKEY_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -#define OSSL_PKEY_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ -#define OSSL_PKEY_PARAM_ENGINE OSSL_ALG_PARAM_ENGINE /* utf8 string */ -#define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -#define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" /* utf8 string */ -#define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest" /* utf8 string */ -#define OSSL_PKEY_PARAM_PAD_MODE "pad-mode" -#define OSSL_PKEY_PARAM_DIGEST_SIZE "digest-size" -#define OSSL_PKEY_PARAM_MASKGENFUNC "mgf" -#define OSSL_PKEY_PARAM_MGF1_DIGEST "mgf1-digest" -#define OSSL_PKEY_PARAM_MGF1_PROPERTIES "mgf1-properties" -#define OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY "encoded-pub-key" -#define OSSL_PKEY_PARAM_GROUP_NAME "group" -#define OSSL_PKEY_PARAM_DIST_ID "distid" -#define OSSL_PKEY_PARAM_PUB_KEY "pub" -#define OSSL_PKEY_PARAM_PRIV_KEY "priv" - -/* Diffie-Hellman/DSA Parameters */ -#define OSSL_PKEY_PARAM_FFC_P "p" -#define OSSL_PKEY_PARAM_FFC_G "g" -#define OSSL_PKEY_PARAM_FFC_Q "q" -#define OSSL_PKEY_PARAM_FFC_GINDEX "gindex" -#define OSSL_PKEY_PARAM_FFC_PCOUNTER "pcounter" -#define OSSL_PKEY_PARAM_FFC_SEED "seed" -#define OSSL_PKEY_PARAM_FFC_COFACTOR "j" -#define OSSL_PKEY_PARAM_FFC_H "hindex" -#define OSSL_PKEY_PARAM_FFC_VALIDATE_PQ "validate-pq" -#define OSSL_PKEY_PARAM_FFC_VALIDATE_G "validate-g" -#define OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY "validate-legacy" - -/* Diffie-Hellman params */ -#define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator" -#define OSSL_PKEY_PARAM_DH_PRIV_LEN "priv_len" - -/* Elliptic Curve Domain Parameters */ -#define OSSL_PKEY_PARAM_EC_PUB_X "qx" -#define OSSL_PKEY_PARAM_EC_PUB_Y "qy" - -/* Elliptic Curve Explicit Domain Parameters */ -#define OSSL_PKEY_PARAM_EC_FIELD_TYPE "field-type" -#define OSSL_PKEY_PARAM_EC_P "p" -#define OSSL_PKEY_PARAM_EC_A "a" -#define OSSL_PKEY_PARAM_EC_B "b" -#define OSSL_PKEY_PARAM_EC_GENERATOR "generator" -#define OSSL_PKEY_PARAM_EC_ORDER "order" -#define OSSL_PKEY_PARAM_EC_COFACTOR "cofactor" -#define OSSL_PKEY_PARAM_EC_SEED "seed" -#define OSSL_PKEY_PARAM_EC_CHAR2_M "m" -#define OSSL_PKEY_PARAM_EC_CHAR2_TYPE "basis-type" -#define OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS "tp" -#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K1 "k1" -#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K2 "k2" -#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K3 "k3" -#define OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS "decoded-from-explicit" - -/* Elliptic Curve Key Parameters */ -#define OSSL_PKEY_PARAM_USE_COFACTOR_FLAG "use-cofactor-flag" -#define OSSL_PKEY_PARAM_USE_COFACTOR_ECDH \ - OSSL_PKEY_PARAM_USE_COFACTOR_FLAG - -/* RSA Keys */ -/* - * n, e, d are the usual public and private key components - * - * rsa-num is the number of factors, including p and q - * rsa-factor is used for each factor: p, q, r_i (i = 3, ...) - * rsa-exponent is used for each exponent: dP, dQ, d_i (i = 3, ...) - * rsa-coefficient is used for each coefficient: qInv, t_i (i = 3, ...) - * - * The number of rsa-factor items must be equal to the number of rsa-exponent - * items, and the number of rsa-coefficients must be one less. - * (the base i for the coefficients is 2, not 1, at least as implied by - * RFC 8017) - */ -#define OSSL_PKEY_PARAM_RSA_N "n" -#define OSSL_PKEY_PARAM_RSA_E "e" -#define OSSL_PKEY_PARAM_RSA_D "d" -#define OSSL_PKEY_PARAM_RSA_FACTOR "rsa-factor" -#define OSSL_PKEY_PARAM_RSA_EXPONENT "rsa-exponent" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient" -#define OSSL_PKEY_PARAM_RSA_FACTOR1 OSSL_PKEY_PARAM_RSA_FACTOR"1" -#define OSSL_PKEY_PARAM_RSA_FACTOR2 OSSL_PKEY_PARAM_RSA_FACTOR"2" -#define OSSL_PKEY_PARAM_RSA_FACTOR3 OSSL_PKEY_PARAM_RSA_FACTOR"3" -#define OSSL_PKEY_PARAM_RSA_FACTOR4 OSSL_PKEY_PARAM_RSA_FACTOR"4" -#define OSSL_PKEY_PARAM_RSA_FACTOR5 OSSL_PKEY_PARAM_RSA_FACTOR"5" -#define OSSL_PKEY_PARAM_RSA_FACTOR6 OSSL_PKEY_PARAM_RSA_FACTOR"6" -#define OSSL_PKEY_PARAM_RSA_FACTOR7 OSSL_PKEY_PARAM_RSA_FACTOR"7" -#define OSSL_PKEY_PARAM_RSA_FACTOR8 OSSL_PKEY_PARAM_RSA_FACTOR"8" -#define OSSL_PKEY_PARAM_RSA_FACTOR9 OSSL_PKEY_PARAM_RSA_FACTOR"9" -#define OSSL_PKEY_PARAM_RSA_FACTOR10 OSSL_PKEY_PARAM_RSA_FACTOR"10" -#define OSSL_PKEY_PARAM_RSA_EXPONENT1 OSSL_PKEY_PARAM_RSA_EXPONENT"1" -#define OSSL_PKEY_PARAM_RSA_EXPONENT2 OSSL_PKEY_PARAM_RSA_EXPONENT"2" -#define OSSL_PKEY_PARAM_RSA_EXPONENT3 OSSL_PKEY_PARAM_RSA_EXPONENT"3" -#define OSSL_PKEY_PARAM_RSA_EXPONENT4 OSSL_PKEY_PARAM_RSA_EXPONENT"4" -#define OSSL_PKEY_PARAM_RSA_EXPONENT5 OSSL_PKEY_PARAM_RSA_EXPONENT"5" -#define OSSL_PKEY_PARAM_RSA_EXPONENT6 OSSL_PKEY_PARAM_RSA_EXPONENT"6" -#define OSSL_PKEY_PARAM_RSA_EXPONENT7 OSSL_PKEY_PARAM_RSA_EXPONENT"7" -#define OSSL_PKEY_PARAM_RSA_EXPONENT8 OSSL_PKEY_PARAM_RSA_EXPONENT"8" -#define OSSL_PKEY_PARAM_RSA_EXPONENT9 OSSL_PKEY_PARAM_RSA_EXPONENT"9" -#define OSSL_PKEY_PARAM_RSA_EXPONENT10 OSSL_PKEY_PARAM_RSA_EXPONENT"10" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 OSSL_PKEY_PARAM_RSA_COEFFICIENT"1" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT2 OSSL_PKEY_PARAM_RSA_COEFFICIENT"2" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT3 OSSL_PKEY_PARAM_RSA_COEFFICIENT"3" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT4 OSSL_PKEY_PARAM_RSA_COEFFICIENT"4" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT5 OSSL_PKEY_PARAM_RSA_COEFFICIENT"5" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT6 OSSL_PKEY_PARAM_RSA_COEFFICIENT"6" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT7 OSSL_PKEY_PARAM_RSA_COEFFICIENT"7" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT8 OSSL_PKEY_PARAM_RSA_COEFFICIENT"8" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT9 OSSL_PKEY_PARAM_RSA_COEFFICIENT"9" +# 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" +# define OSSL_PKEY_RSA_PAD_MODE_NONE "none" +# define OSSL_PKEY_RSA_PAD_MODE_PKCSV15 "pkcs1" +# define OSSL_PKEY_RSA_PAD_MODE_OAEP "oaep" +# define OSSL_PKEY_RSA_PAD_MODE_X931 "x931" +# define OSSL_PKEY_RSA_PAD_MODE_PSS "pss" /* RSA pss padding salt length */ -#define OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST "digest" -#define OSSL_PKEY_RSA_PSS_SALT_LEN_MAX "max" -#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO "auto" -#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX "auto-digestmax" - -/* Key generation parameters */ -#define OSSL_PKEY_PARAM_RSA_BITS OSSL_PKEY_PARAM_BITS -#define OSSL_PKEY_PARAM_RSA_PRIMES "primes" -#define OSSL_PKEY_PARAM_RSA_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_PKEY_PARAM_RSA_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES -#define OSSL_PKEY_PARAM_RSA_MASKGENFUNC OSSL_PKEY_PARAM_MASKGENFUNC -#define OSSL_PKEY_PARAM_RSA_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST -#define OSSL_PKEY_PARAM_RSA_PSS_SALTLEN "saltlen" - -/* Key generation parameters */ -#define OSSL_PKEY_PARAM_FFC_TYPE "type" -#define OSSL_PKEY_PARAM_FFC_PBITS "pbits" -#define OSSL_PKEY_PARAM_FFC_QBITS "qbits" -#define OSSL_PKEY_PARAM_FFC_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_PKEY_PARAM_FFC_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES - -#define OSSL_PKEY_PARAM_EC_ENCODING "encoding" /* utf8_string */ -#define OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT "point-format" -#define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check" -#define OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC "include-public" +# 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_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_POINT_CONVERSION_FORMAT_UNCOMPRESSED "uncompressed" +# define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_COMPRESSED "compressed" +# define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_HYBRID "hybrid" -#define OSSL_PKEY_EC_GROUP_CHECK_DEFAULT "default" -#define OSSL_PKEY_EC_GROUP_CHECK_NAMED "named" -#define OSSL_PKEY_EC_GROUP_CHECK_NAMED_NIST "named-nist" - -/* Key Exchange parameters */ -#define OSSL_EXCHANGE_PARAM_PAD "pad" /* uint */ -#define OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE "ecdh-cofactor-mode" /* int */ -#define OSSL_EXCHANGE_PARAM_KDF_TYPE "kdf-type" /* utf8_string */ -#define OSSL_EXCHANGE_PARAM_KDF_DIGEST "kdf-digest" /* utf8_string */ -#define OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS "kdf-digest-props" /* utf8_string */ -#define OSSL_EXCHANGE_PARAM_KDF_OUTLEN "kdf-outlen" /* size_t */ -/* The following parameter is an octet_string on set and an octet_ptr on get */ -#define OSSL_EXCHANGE_PARAM_KDF_UKM "kdf-ukm" - -/* Signature parameters */ -#define OSSL_SIGNATURE_PARAM_ALGORITHM_ID "algorithm-id" -#define OSSL_SIGNATURE_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE -#define OSSL_SIGNATURE_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_SIGNATURE_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES -#define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen" -#define OSSL_SIGNATURE_PARAM_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST -#define OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES \ - OSSL_PKEY_PARAM_MGF1_PROPERTIES -#define OSSL_SIGNATURE_PARAM_DIGEST_SIZE OSSL_PKEY_PARAM_DIGEST_SIZE - -/* Asym cipher parameters */ -#define OSSL_ASYM_CIPHER_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_ASYM_CIPHER_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES -#define OSSL_ASYM_CIPHER_PARAM_ENGINE OSSL_PKEY_PARAM_ENGINE -#define OSSL_ASYM_CIPHER_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE -#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST \ - OSSL_PKEY_PARAM_MGF1_DIGEST -#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS \ - OSSL_PKEY_PARAM_MGF1_PROPERTIES -#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST OSSL_ALG_PARAM_DIGEST -#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS "digest-props" -/* The following parameter is an octet_string on set and an octet_ptr on get */ -#define OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL "oaep-label" -#define OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION "tls-client-version" -#define OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION "tls-negotiated-version" - -/* - * Encoder / decoder parameters - */ -#define OSSL_ENCODER_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -#define OSSL_ENCODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -/* Currently PVK only, but reusable for others as needed */ -#define OSSL_ENCODER_PARAM_ENCRYPT_LEVEL "encrypt-level" -#define OSSL_ENCODER_PARAM_SAVE_PARAMETERS "save-parameters" /* integer */ - -#define OSSL_DECODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES - -/* Passphrase callback parameters */ -#define OSSL_PASSPHRASE_PARAM_INFO "info" - -/* Keygen callback parameters, from provider to libcrypto */ -#define OSSL_GEN_PARAM_POTENTIAL "potential" /* integer */ -#define OSSL_GEN_PARAM_ITERATION "iteration" /* integer */ - -/* ACVP Test parameters : These should not be used normally */ -#define OSSL_PKEY_PARAM_RSA_TEST_XP1 "xp1" -#define OSSL_PKEY_PARAM_RSA_TEST_XP2 "xp2" -#define OSSL_PKEY_PARAM_RSA_TEST_XP "xp" -#define OSSL_PKEY_PARAM_RSA_TEST_XQ1 "xq1" -#define OSSL_PKEY_PARAM_RSA_TEST_XQ2 "xq2" -#define OSSL_PKEY_PARAM_RSA_TEST_XQ "xq" -#define OSSL_PKEY_PARAM_RSA_TEST_P1 "p1" -#define OSSL_PKEY_PARAM_RSA_TEST_P2 "p2" -#define OSSL_PKEY_PARAM_RSA_TEST_Q1 "q1" -#define OSSL_PKEY_PARAM_RSA_TEST_Q2 "q2" -#define OSSL_SIGNATURE_PARAM_KAT "kat" - -/* KEM parameters */ -#define OSSL_KEM_PARAM_OPERATION "operation" +# 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" -/* Capabilities */ - -/* TLS-GROUP Capability */ -#define OSSL_CAPABILITY_TLS_GROUP_NAME "tls-group-name" -#define OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL "tls-group-name-internal" -#define OSSL_CAPABILITY_TLS_GROUP_ID "tls-group-id" -#define OSSL_CAPABILITY_TLS_GROUP_ALG "tls-group-alg" -#define OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS "tls-group-sec-bits" -#define OSSL_CAPABILITY_TLS_GROUP_IS_KEM "tls-group-is-kem" -#define OSSL_CAPABILITY_TLS_GROUP_MIN_TLS "tls-min-tls" -#define OSSL_CAPABILITY_TLS_GROUP_MAX_TLS "tls-max-tls" -#define OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS "tls-min-dtls" -#define OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS "tls-max-dtls" - -/*- - * storemgmt parameters - */ - -/* - * Used by storemgmt_ctx_set_params(): - * - * - OSSL_STORE_PARAM_EXPECT is an INTEGER, and the value is any of the - * OSSL_STORE_INFO numbers. This is used to set the expected type of - * object loaded. - * - * - OSSL_STORE_PARAM_SUBJECT, OSSL_STORE_PARAM_ISSUER, - * OSSL_STORE_PARAM_SERIAL, OSSL_STORE_PARAM_FINGERPRINT, - * OSSL_STORE_PARAM_DIGEST, OSSL_STORE_PARAM_ALIAS - * are used as search criteria. - * (OSSL_STORE_PARAM_DIGEST is used with OSSL_STORE_PARAM_FINGERPRINT) - */ -#define OSSL_STORE_PARAM_EXPECT "expect" /* INTEGER */ -#define OSSL_STORE_PARAM_SUBJECT "subject" /* DER blob => OCTET_STRING */ -#define OSSL_STORE_PARAM_ISSUER "name" /* DER blob => OCTET_STRING */ -#define OSSL_STORE_PARAM_SERIAL "serial" /* INTEGER */ -#define OSSL_STORE_PARAM_DIGEST "digest" /* UTF8_STRING */ -#define OSSL_STORE_PARAM_FINGERPRINT "fingerprint" /* OCTET_STRING */ -#define OSSL_STORE_PARAM_ALIAS "alias" /* UTF8_STRING */ - -/* You may want to pass properties for the provider implementation to use */ -#define OSSL_STORE_PARAM_PROPERTIES "properties" /* utf8_string */ -/* OSSL_DECODER input type if a decoder is used by the store */ -#define OSSL_STORE_PARAM_INPUT_TYPE "input-type" /* UTF8_STRING */ +/* 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 } 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 new file mode 100644 index 00000000..c14520fe --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/core_names.h.in @@ -0,0 +1,119 @@ +/* + * {- 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/crmf.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h index 71b747ed..1f901f35 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crmf.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/crmf.h.in * - * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. * Copyright Nokia 2007-2019 * Copyright Siemens AG 2015-2019 * @@ -43,8 +43,8 @@ extern "C" { # 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) @@ -198,12 +198,14 @@ int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, int rid, int acceptRAVerified, OSSL_LIB_CTX *libctx, const char *propq); OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); -const ASN1_INTEGER -*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +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 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 index 4d37ea6d..43411fa4 100644 --- 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 @@ -1,7 +1,7 @@ /*- * {- join("\n * ", @autowarntext) -} * - * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. * Copyright Nokia 2007-2019 * Copyright Siemens AG 2015-2019 * @@ -44,8 +44,8 @@ extern "C" { # 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) @@ -151,12 +151,14 @@ int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, int rid, int acceptRAVerified, OSSL_LIB_CTX *libctx, const char *propq); OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); -const ASN1_INTEGER -*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h index ab01aae8..55e00dcc 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/crypto.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/crypto.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -88,6 +88,7 @@ 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 @@ -552,6 +553,8 @@ 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 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 index fb0c7cbb..b2d691b9 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -89,6 +89,7 @@ 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 @@ -529,6 +530,8 @@ 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h index b6dd8c35..e6dd1192 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ct.h @@ -133,7 +133,7 @@ typedef enum { */ 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. 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 index 16086b33..3fc2aaa9 100644 --- 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 @@ -85,7 +85,7 @@ typedef enum { */ 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. diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dh.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dh.h index 8bc17448..f1c0ed06 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dh.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dh.h @@ -144,7 +144,7 @@ DECLARE_ASN1_ITEM(DHparams) # define DH_GENERATOR_3 3 # define DH_GENERATOR_5 5 -/* DH_check error codes */ +/* 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. @@ -154,10 +154,10 @@ DECLARE_ASN1_ITEM(DHparams) # define DH_UNABLE_TO_CHECK_GENERATOR 0x04 # define DH_NOT_SUITABLE_GENERATOR 0x08 # define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_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 +# define DH_MODULUS_TOO_LARGE 0x100 /* +DH_check_pub_key */ /* DH_check_pub_key error codes */ # define DH_CHECK_PUBKEY_TOO_SMALL 0x01 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dherr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dherr.h index 5d2a762a..2997d7d4 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dherr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dherr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -40,6 +40,7 @@ # 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 @@ -50,6 +51,7 @@ # 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsa.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsa.h index 160404cc..109878e6 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsa.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/dsa.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_os2.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_os2.h index 32e142a9..e01f6275 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_os2.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_os2.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -89,7 +89,7 @@ extern "C" { /* * DLL settings. This part is a bit tough, because it's up to the - * application implementor how he or she will link the application, so it + * application implementer how he or she will link the application, so it * requires some macro to be used. */ # ifdef OPENSSL_SYS_WINDOWS 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 new file mode 100644 index 00000000..8a7cc988 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/e_ostime.h @@ -0,0 +1,30 @@ +/* + * 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) +# include +# else +# include +# 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 index be9fb2f0..e1cbe982 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ec.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ec.h @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -460,6 +460,22 @@ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, 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 @@ -1111,7 +1127,7 @@ OSSL_DEPRECATEDIN_3_0 int EC_KEY_check_key(const EC_KEY *key); /** Indicates if an EC_KEY can be used for signing. * \param eckey the EC_KEY object - * \return 1 if can can sign and 0 otherwise. + * \return 1 if can sign and 0 otherwise. */ OSSL_DEPRECATEDIN_3_0 int EC_KEY_can_sign(const EC_KEY *eckey); @@ -1287,7 +1303,7 @@ OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *me OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_method(ENGINE *engine); /** The old name for ecdh_KDF_X9_63 - * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, + * 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 */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h index 2abf2483..b987e31f 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/err.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -496,6 +496,13 @@ 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 } 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 index 11dc2163..1ef09de0 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -485,6 +485,13 @@ 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 } diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evp.h index d0fce0c5..ea7620d6 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evp.h @@ -35,6 +35,7 @@ # 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 */ @@ -228,7 +229,8 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, * if the following flag is set. */ # define EVP_MD_CTX_FLAG_FINALISE 0x0200 -/* NOTE: 0x0400 is reserved for internal usage */ +/* 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); @@ -308,6 +310,7 @@ OSSL_DEPRECATEDIN_3_0 int # 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 @@ -674,7 +677,7 @@ void BIO_set_md(BIO *, const EVP_MD *md); # 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, +__owur int EVP_Cipher(EVP_CIPHER_CTX *c, unsigned char *out, const unsigned char *in, unsigned int inl); @@ -752,7 +755,7 @@ 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, +__owur int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); @@ -760,16 +763,16 @@ __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, +__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, +__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, +__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, +__owur int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); @@ -777,17 +780,17 @@ __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, +__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, +__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, +__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); @@ -821,18 +824,18 @@ __owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, size_t siglen, const unsigned char *tbs, size_t tbslen); -int EVP_DigestSignInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, +__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, +__owur int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); -int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); +__owur int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); __owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen); -int EVP_DigestVerifyInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, +__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[]); @@ -1927,14 +1930,17 @@ 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); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evperr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evperr.h index a5053f6c..11f3faa4 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evperr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/evperr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -110,11 +110,14 @@ # 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 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 new file mode 100644 index 00000000..af637ac6 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/hpke.h @@ -0,0 +1,169 @@ +/* + * 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 index f7ab2142..a3cbf15f 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/http.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/http.h @@ -1,5 +1,5 @@ /* - * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -33,6 +33,8 @@ extern "C" { # 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) @@ -103,6 +105,8 @@ int OSSL_HTTP_parse_url(const char *url, int *pssl, char **puser, char **phost, 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h index f4155df1..8af9edd2 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/lhash.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index dc344a54..c9dbd1f3 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index a614cd66..e9ef9387 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/macros.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/macros.h @@ -158,7 +158,7 @@ /* * Define macros for deprecation and simulated removal purposes. * - * The macros OSSL_DEPRECATED_{major}_{minor} are always defined for + * 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. * @@ -169,6 +169,7 @@ * '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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/obj_mac.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/obj_mac.h index 0e860276..e1b441b3 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/obj_mac.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/obj_mac.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/objects/objects.pl * - * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -886,6 +886,14 @@ #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 @@ -1002,10 +1010,22 @@ #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 @@ -1082,15 +1102,17 @@ #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 1L,3L,6L,1L,4L,1L,311L,17L,1L +#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 1L,3L,6L,1L,4L,1L,311L,17L,2L +#define OBJ_LocalKeySet OBJ_ms_corp,17L,2L #define OBJ_certTypes OBJ_pkcs9,22L @@ -1108,6 +1130,10 @@ #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 @@ -1217,6 +1243,10 @@ #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 @@ -1300,42 +1330,62 @@ #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 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L +#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 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L +#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 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L +#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 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L +#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 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L +#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 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L +#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 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L +#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 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L +#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" @@ -1503,6 +1553,18 @@ #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 @@ -1783,6 +1845,22 @@ #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 @@ -1815,6 +1893,18 @@ #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 @@ -2649,11 +2739,56 @@ #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 @@ -2669,6 +2804,86 @@ #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 @@ -3220,6 +3435,70 @@ #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 @@ -4952,6 +5231,21 @@ #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 @@ -5029,6 +5323,9 @@ #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 @@ -5045,6 +5342,9 @@ #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 @@ -5053,6 +5353,9 @@ #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 @@ -5130,17 +5433,17 @@ #define SN_jurisdictionLocalityName "jurisdictionL" #define LN_jurisdictionLocalityName "jurisdictionLocalityName" #define NID_jurisdictionLocalityName 955 -#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L +#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 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L +#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 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L +#define OBJ_jurisdictionCountryName OBJ_ms_corp,60L,2L,1L,3L #define SN_id_scrypt "id-scrypt" #define LN_id_scrypt "scrypt" @@ -5432,6 +5735,24 @@ #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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h index b87a4aa1..7f1ecf66 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/opensslv.h @@ -28,8 +28,8 @@ extern "C" { * These macros express version number MAJOR.MINOR.PATCH exactly */ # define OPENSSL_VERSION_MAJOR 3 -# define OPENSSL_VERSION_MINOR 1 -# define OPENSSL_VERSION_PATCH 4 +# define OPENSSL_VERSION_MINOR 2 +# define OPENSSL_VERSION_PATCH 0 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.1.4" -# define OPENSSL_FULL_VERSION_STR "3.1.4" +# define OPENSSL_VERSION_STR "3.2.0" +# define OPENSSL_FULL_VERSION_STR "3.2.0" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "24 Oct 2023" +# define OPENSSL_RELEASE_DATE "23 Nov 2023" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.1.4 24 Oct 2023" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.2.0 23 Nov 2023" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem.h index 000d9c89..0446c770 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pem.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -57,6 +57,7 @@ extern "C" { # 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h index 9e20fc1a..b08b0bc2 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/pkcs12.h.in * - * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -44,6 +44,7 @@ extern "C" { # 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... */ @@ -133,7 +134,9 @@ 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); @@ -221,6 +224,7 @@ ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, 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, @@ -308,6 +312,7 @@ 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); @@ -315,6 +320,11 @@ 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, 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 index cf956b41..35759d4d 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -45,6 +45,7 @@ extern "C" { # 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... */ @@ -110,7 +111,9 @@ 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); @@ -198,6 +201,7 @@ ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, 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, @@ -285,6 +289,7 @@ 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); @@ -292,6 +297,11 @@ 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, diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12err.h index 933c8329..abce3736 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs12err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -21,6 +21,7 @@ /* * 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h index f824546c..dc46c511 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/pkcs7.h @@ -134,8 +134,8 @@ SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO, PKCS7_RECIP_INF typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -161,8 +161,8 @@ typedef struct pkcs7_enveloped_st { typedef struct pkcs7_signedandenveloped_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -203,7 +203,7 @@ typedef struct pkcs7_st { /* NID_pkcs7_data */ ASN1_OCTET_STRING *data; /* NID_pkcs7_signed */ - PKCS7_SIGNED *sign; + PKCS7_SIGNED *sign; /* field name 'signed' would clash with C keyword */ /* NID_pkcs7_enveloped */ PKCS7_ENVELOPE *enveloped; /* NID_pkcs7_signedAndEnveloped */ @@ -344,13 +344,13 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, const EVP_MD *dgst); int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); -int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_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 *x509); + X509 *signer); BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); 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 index a346bc74..11a636e1 100644 --- 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 @@ -87,8 +87,8 @@ typedef struct pkcs7_recip_info_st { typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -114,8 +114,8 @@ typedef struct pkcs7_enveloped_st { typedef struct pkcs7_signedandenveloped_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -156,7 +156,7 @@ typedef struct pkcs7_st { /* NID_pkcs7_data */ ASN1_OCTET_STRING *data; /* NID_pkcs7_signed */ - PKCS7_SIGNED *sign; + PKCS7_SIGNED *sign; /* field name 'signed' would clash with C keyword */ /* NID_pkcs7_enveloped */ PKCS7_ENVELOPE *enveloped; /* NID_pkcs7_signedAndEnveloped */ @@ -273,13 +273,13 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, const EVP_MD *dgst); int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); -int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_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 *x509); + X509 *signer); BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); 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 index d3e0896c..76d01e1e 100644 --- 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 @@ -1,5 +1,5 @@ /* - * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -19,6 +19,7 @@ extern "C" { # 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 @@ -28,6 +29,9 @@ extern "C" { # 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 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 index 5d5c16d9..d9ef5681 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/proverr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/proverr.h @@ -52,6 +52,7 @@ # 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 @@ -63,9 +64,11 @@ # 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 @@ -77,6 +80,7 @@ # 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 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 index dc86ff58..24ec0827 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/provider.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/provider.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,13 +17,19 @@ extern "C" { # endif -/* Set the default provider search path */ +/* 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, 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 new file mode 100644 index 00000000..74a6345d --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/quic.h @@ -0,0 +1,37 @@ +/* + * 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 index 90e0f0a0..1fa1129e 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rand.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rand.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsa.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsa.h index d0c95992..167427d3 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsa.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/rsa.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -189,6 +189,8 @@ int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); # 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 @@ -198,6 +200,9 @@ int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); # 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) diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sha.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sha.h index 6e65a040..163a7d58 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sha.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sha.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -81,6 +81,7 @@ OSSL_DEPRECATEDIN_3_0 void SHA256_Transform(SHA256_CTX *c, 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srtp.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srtp.h index d64606e5..2c2c3344 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srtp.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/srtp.h @@ -28,16 +28,28 @@ 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 +# 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 +# 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h index 942f20e6..2b43485f 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/ssl.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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. * @@ -24,6 +24,7 @@ # endif # include +# include # include # include # include @@ -281,28 +282,31 @@ typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, /* Extension context codes */ /* This extension is only allowed in TLS */ -#define SSL_EXT_TLS_ONLY 0x0001 +#define SSL_EXT_TLS_ONLY 0x00001 /* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x0002 +#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 0x0004 +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 /* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x0008 +#define SSL_EXT_SSL3_ALLOWED 0x00008 /* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 /* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x0020 +#define SSL_EXT_TLS1_3_ONLY 0x00020 /* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 -#define SSL_EXT_CLIENT_HELLO 0x0080 +#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 0x0100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 +#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 */ @@ -433,6 +437,17 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); * 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." @@ -577,6 +592,8 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); # 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 @@ -968,6 +985,7 @@ uint32_t SSL_get_recv_max_early_data(const SSL *s); # include /* This is mostly sslv3 with a few tweaks */ # include /* Datagram TLS */ # include /* Support for the use_srtp extension */ +# include #ifdef __cplusplus extern "C" { @@ -1069,6 +1087,7 @@ typedef enum { 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, @@ -1078,6 +1097,7 @@ typedef enum { 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, @@ -1088,10 +1108,12 @@ typedef enum { 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, @@ -1383,6 +1405,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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 @@ -1488,6 +1511,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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) \ @@ -1552,6 +1577,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +const char *SSL_get0_group_name(SSL *s); const char *SSL_group_to_name(SSL *s, int id); /* Backwards compatibility, original 1.1.0 names */ @@ -1786,6 +1812,9 @@ __owur int SSL_has_matching_session_id(const SSL *s, 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); @@ -1843,6 +1872,8 @@ __owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, 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); @@ -1935,6 +1966,8 @@ 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); @@ -1989,6 +2022,7 @@ __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 @@ -2297,6 +2331,105 @@ 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 @@ -2596,6 +2729,36 @@ void SSL_set_allow_early_data_cb(SSL *s, 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 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 index f03f52fb..9f91039f 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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. * @@ -25,6 +25,7 @@ use OpenSSL::stackhash qw(generate_stack_macros generate_const_stack_macros); # endif # include +# include # include # include # include @@ -258,28 +259,31 @@ typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, /* Extension context codes */ /* This extension is only allowed in TLS */ -#define SSL_EXT_TLS_ONLY 0x0001 +#define SSL_EXT_TLS_ONLY 0x00001 /* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x0002 +#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 0x0004 +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 /* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x0008 +#define SSL_EXT_SSL3_ALLOWED 0x00008 /* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 /* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x0020 +#define SSL_EXT_TLS1_3_ONLY 0x00020 /* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 -#define SSL_EXT_CLIENT_HELLO 0x0080 +#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 0x0100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 +#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 */ @@ -410,6 +414,17 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); * 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." @@ -554,6 +569,8 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); # 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 @@ -945,6 +962,7 @@ uint32_t SSL_get_recv_max_early_data(const SSL *s); # include /* This is mostly sslv3 with a few tweaks */ # include /* Datagram TLS */ # include /* Support for the use_srtp extension */ +# include #ifdef __cplusplus extern "C" { @@ -997,6 +1015,7 @@ typedef enum { 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, @@ -1006,6 +1025,7 @@ typedef enum { 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, @@ -1016,10 +1036,12 @@ typedef enum { 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, @@ -1311,6 +1333,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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 @@ -1416,6 +1439,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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) \ @@ -1480,6 +1505,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +const char *SSL_get0_group_name(SSL *s); const char *SSL_group_to_name(SSL *s, int id); /* Backwards compatibility, original 1.1.0 names */ @@ -1714,6 +1740,9 @@ __owur int SSL_has_matching_session_id(const SSL *s, 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); @@ -1771,6 +1800,8 @@ __owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, 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); @@ -1863,6 +1894,8 @@ 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); @@ -1917,6 +1950,7 @@ __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 @@ -2225,6 +2259,105 @@ 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 @@ -2524,6 +2657,36 @@ void SSL_set_allow_early_data_cb(SSL *s, 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl3.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl3.h index 49bd51f2..4f076c6c 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl3.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ssl3.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -239,6 +239,13 @@ extern "C" { # 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 @@ -300,6 +307,8 @@ extern "C" { /* 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 @@ -317,6 +326,7 @@ extern "C" { # 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr.h index f1882558..e1eb9a56 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -25,8 +25,10 @@ # 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 @@ -82,6 +84,7 @@ # 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 @@ -110,6 +113,7 @@ # 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 @@ -119,6 +123,7 @@ # 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 @@ -144,6 +149,8 @@ # 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 @@ -156,6 +163,7 @@ # 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 @@ -196,9 +204,11 @@ # 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 @@ -221,10 +231,16 @@ # 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 @@ -234,6 +250,7 @@ # 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 @@ -273,6 +290,11 @@ # 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 @@ -316,6 +338,7 @@ # 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 @@ -333,6 +356,7 @@ # 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/store.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/store.h index 3c1445e0..e6ea3cf8 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/store.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/store.h @@ -1,5 +1,5 @@ /* - * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -98,6 +98,14 @@ OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, */ 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. @@ -345,7 +353,7 @@ int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, OSSL_DEPRECATEDIN_3_0 const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); OSSL_DEPRECATEDIN_3_0 -const char * OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +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 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 new file mode 100644 index 00000000..3926ce54 --- /dev/null +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/thread.h @@ -0,0 +1,31 @@ +/* + * 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 index 793155e1..7e3d1a72 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tls1.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/tls1.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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. * @@ -28,7 +28,7 @@ extern "C" { /* Default security level if not overridden at config time */ # ifndef OPENSSL_TLS_SECURITY_LEVEL -# define OPENSSL_TLS_SECURITY_LEVEL 1 +# define OPENSSL_TLS_SECURITY_LEVEL 2 # endif /* TLS*_VERSION constants are defined in prov_ssl.h */ @@ -122,6 +122,14 @@ extern "C" { */ # 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 @@ -134,6 +142,9 @@ extern "C" { /* 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 @@ -147,6 +158,7 @@ extern "C" { # 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 @@ -195,6 +207,15 @@ extern "C" { # 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 @@ -211,6 +232,15 @@ extern "C" { # 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); 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 index 97e13857..9a5b56ea 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/trace.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/trace.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -305,6 +305,14 @@ void OSSL_trace_end(int category, BIO *channel); # 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ts.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ts.h index 8ff67332..b09b646d 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ts.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/ts.h @@ -1,5 +1,5 @@ /* - * Copyright 2006-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 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 index 5f9d8c23..c2802868 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/types.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/types.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h index 483cb9d5..ac132633 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/x509.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -606,6 +606,8 @@ 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 @@ -654,6 +656,8 @@ 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) @@ -887,7 +891,7 @@ int X509_REQ_get_signature_nid(const X509_REQ *req); int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); -EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +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); @@ -953,13 +957,14 @@ X509_REVOKED_get0_extensions(const X509_REVOKED *r); X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); -int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); +int X509_REQ_check_private_key(const X509_REQ *req, EVP_PKEY *pkey); -int X509_check_private_key(const X509 *x509, const 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); @@ -1265,6 +1270,8 @@ 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); 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 index d4df2adc..72103913 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -412,6 +412,8 @@ 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 @@ -460,6 +462,8 @@ 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) @@ -693,7 +697,7 @@ int X509_REQ_get_signature_nid(const X509_REQ *req); int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); -EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +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); @@ -759,13 +763,14 @@ X509_REVOKED_get0_extensions(const X509_REVOKED *r); X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); -int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); +int X509_REQ_check_private_key(const X509_REQ *req, EVP_PKEY *pkey); -int X509_check_private_key(const X509 *x509, const 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); @@ -1071,6 +1076,8 @@ 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); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h index 29b0e147..d3dfff8c 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509_vfy.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/x509_vfy.h.in * - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -411,6 +411,7 @@ X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ # 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 @@ -491,71 +492,71 @@ int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); X509_STORE *X509_STORE_new(void); -void X509_STORE_free(X509_STORE *v); -int X509_STORE_lock(X509_STORE *ctx); -int X509_STORE_unlock(X509_STORE *ctx); -int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); -STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, +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 *ctx, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); -int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); +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 *ctx, X509_STORE_CTX_verify_fn verify); +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 *ctx); -void X509_STORE_set_verify_cb(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_issuer(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_issued(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_revocation(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_crl(X509_STORE *ctx, + 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 *ctx); -void X509_STORE_set_check_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cert_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_policy(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_certs(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_crls(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cleanup(X509_STORE *ctx, +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 *ctx); +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 *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); +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); @@ -565,11 +566,14 @@ 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, @@ -579,6 +583,8 @@ 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); @@ -600,7 +606,7 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); # define X509_STORE_get1_crl X509_STORE_CTX_get1_crls #endif -X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP *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); @@ -685,8 +691,8 @@ X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( const X509_LOOKUP_METHOD *method); -int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); -int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); +int X509_STORE_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, @@ -730,23 +736,21 @@ void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); -int X509_STORE_load_file(X509_STORE *ctx, const char *file); -int X509_STORE_load_path(X509_STORE *ctx, const char *path); -int X509_STORE_load_store(X509_STORE *ctx, const char *store); -int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, - const char *dir); -int X509_STORE_set_default_paths(X509_STORE *ctx); +int X509_STORE_load_file(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 *ctx, const char *file, +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 *ctx, const char *store, +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 *ctx, const char *file, - const char *dir, OSSL_LIB_CTX *libctx, - const char *propq); -int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, - const char *propq); +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) @@ -764,6 +768,7 @@ 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); @@ -773,6 +778,8 @@ int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, 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); 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 index 80f18bd7..7a478d11 100644 --- 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 @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -314,6 +314,7 @@ X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ # 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 @@ -394,71 +395,71 @@ int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); X509_STORE *X509_STORE_new(void); -void X509_STORE_free(X509_STORE *v); -int X509_STORE_lock(X509_STORE *ctx); -int X509_STORE_unlock(X509_STORE *ctx); -int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); -STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, +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 *ctx, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); -int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); +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 *ctx, X509_STORE_CTX_verify_fn verify); +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 *ctx); -void X509_STORE_set_verify_cb(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_issuer(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_issued(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_revocation(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_crl(X509_STORE *ctx, + 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 *ctx); -void X509_STORE_set_check_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cert_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_policy(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_certs(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_crls(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cleanup(X509_STORE *ctx, +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 *ctx); +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 *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); +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); @@ -468,11 +469,14 @@ 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, @@ -482,6 +486,8 @@ 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); @@ -503,7 +509,7 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); # define X509_STORE_get1_crl X509_STORE_CTX_get1_crls #endif -X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP *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); @@ -588,8 +594,8 @@ X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( const X509_LOOKUP_METHOD *method); -int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); -int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); +int X509_STORE_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, @@ -633,23 +639,21 @@ void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); -int X509_STORE_load_file(X509_STORE *ctx, const char *file); -int X509_STORE_load_path(X509_STORE *ctx, const char *path); -int X509_STORE_load_store(X509_STORE *ctx, const char *store); -int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, - const char *dir); -int X509_STORE_set_default_paths(X509_STORE *ctx); +int X509_STORE_load_file(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 *ctx, const char *file, +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 *ctx, const char *store, +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 *ctx, const char *file, - const char *dir, OSSL_LIB_CTX *libctx, - const char *propq); -int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, - const char *propq); +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) @@ -667,6 +671,7 @@ 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); @@ -676,6 +681,8 @@ int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, 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); diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509err.h index 34ead4b8..71b557a3 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h index 75016354..e64da7e0 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3.h @@ -742,9 +742,10 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE) # 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 9 +# define X509_PURPOSE_MAX 10 /* Flags for X509V3_EXT_print() */ 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 index e33c9d30..56968037 100644 --- 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 @@ -478,9 +478,10 @@ typedef struct x509_purpose_st { # 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 9 +# define X509_PURPOSE_MAX 10 /* Flags for X509V3_EXT_print() */ diff --git a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3err.h b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3err.h index 1ae3a562..deede279 100644 --- a/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3err.h +++ b/deps/openssl/android/armeabi-v7a/usr/local/include/openssl/x509v3err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -23,6 +23,8 @@ */ # 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 @@ -86,6 +88,7 @@ # 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 diff --git a/deps/openssl/android/x86/usr/local/include/crypto/aes_platform.h b/deps/openssl/android/x86/usr/local/include/crypto/aes_platform.h index 87c35255..e641450b 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/aes_platform.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/aes_platform.h @@ -90,7 +90,7 @@ 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__)) +# if (defined(__arm__) || defined(__arm) || defined(__aarch64__) || defined(_M_ARM64)) # include "arm_arch.h" # if __ARM_MAX_ARCH__>=7 # if defined(BSAES_ASM) @@ -106,7 +106,7 @@ void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); # 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__) +# 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 @@ -114,36 +114,36 @@ void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); # 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__) +# 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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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); @@ -434,7 +434,6 @@ void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out, # elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 64 /* RISC-V 64 support */ # include "riscv_arch.h" -# define RV64I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) int rv64i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); @@ -447,8 +446,6 @@ void rv64i_zknd_decrypt(const unsigned char *in, unsigned char *out, # elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 32 /* RISC-V 32 support */ # include "riscv_arch.h" -# define RV32I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) -# define RV32I_ZBKB_ZKND_ZKNE_CAPABLE (RV32I_ZKND_ZKNE_CAPABLE && RISCV_HAS_ZBKB()) int rv32i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); diff --git a/deps/openssl/android/x86/usr/local/include/crypto/asn1.h b/deps/openssl/android/x86/usr/local/include/crypto/asn1.h index ec76ae6f..36af1d76 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/asn1.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/asn1.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -142,8 +142,12 @@ 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); +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/x86/usr/local/include/crypto/bioerr.h b/deps/openssl/android/x86/usr/local/include/crypto/bioerr.h index a0c06099..e38b981a 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/bioerr.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/bioerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/crypto/bn.h b/deps/openssl/android/x86/usr/local/include/crypto/bn.h index 00544d9d..33f979ce 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/bn.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/bn.h @@ -116,4 +116,13 @@ 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/x86/usr/local/include/crypto/cmserr.h b/deps/openssl/android/x86/usr/local/include/crypto/cmserr.h index 1de2f9c7..a7fcf11f 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/cmserr.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/cmserr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/crypto/context.h b/deps/openssl/android/x86/usr/local/include/crypto/context.h index 8ad16834..7369a730 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/context.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/context.h @@ -24,6 +24,9 @@ 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 *); @@ -40,3 +43,6 @@ 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/x86/usr/local/include/crypto/decoder.h b/deps/openssl/android/x86/usr/local/include/crypto/decoder.h index 6b5ee56a..a0d5de65 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/decoder.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/decoder.h @@ -1,5 +1,5 @@ /* - * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -25,16 +25,16 @@ void *ossl_decoder_from_algorithm(int id, const OSSL_ALGORITHM *algodef, 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_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, - EVP_PKEY **pkey, const char *keytype, - OSSL_LIB_CTX *libctx, - const char *propquery); - int ossl_decoder_get_number(const OSSL_DECODER *encoder); int ossl_decoder_store_cache_flush(OSSL_LIB_CTX *libctx); int ossl_decoder_store_remove_all_provided(const OSSL_PROVIDER *prov); +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/x86/usr/local/include/crypto/dherr.h b/deps/openssl/android/x86/usr/local/include/crypto/dherr.h index bb24d131..519327f7 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/dherr.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/dherr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/crypto/dsa.h b/deps/openssl/android/x86/usr/local/include/crypto/dsa.h index 260c30fa..85d92a18 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/dsa.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/dsa.h @@ -26,7 +26,9 @@ 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 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[]); diff --git a/deps/openssl/android/x86/usr/local/include/crypto/ec.h b/deps/openssl/android/x86/usr/local/include/crypto/ec.h index 62163b31..da85a7bd 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/ec.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/ec.h @@ -95,6 +95,12 @@ 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/x86/usr/local/include/crypto/ecx.h b/deps/openssl/android/x86/usr/local/include/crypto/ecx.h index 48b95fa5..f35b875f 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/ecx.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/ecx.h @@ -1,5 +1,5 @@ /* - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -15,7 +15,7 @@ # include -# ifndef OPENSSL_NO_EC +# ifndef OPENSSL_NO_ECX # include # include @@ -72,7 +72,6 @@ struct ecx_key_st { size_t keylen; ECX_KEY_TYPE type; CRYPTO_REF_COUNT references; - CRYPTO_RWLOCK *lock; }; size_t ossl_ecx_key_length(ECX_KEY_TYPE type); @@ -83,6 +82,9 @@ 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]); @@ -94,27 +96,33 @@ ossl_ed25519_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[32], const uint8_t private_key[32], const char *propq); int -ossl_ed25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len, +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 *message, size_t message_len, +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 char *propq); +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, +ossl_ed448_verify(OSSL_LIB_CTX *ctx, + const uint8_t *message, size_t message_len, const uint8_t signature[114], const uint8_t public_key[57], - const uint8_t *context, size_t context_len, const char *propq); + 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], @@ -146,5 +154,5 @@ ECX_KEY *ossl_evp_pkey_get1_X25519(EVP_PKEY *pkey); ECX_KEY *ossl_evp_pkey_get1_X448(EVP_PKEY *pkey); ECX_KEY *ossl_evp_pkey_get1_ED25519(EVP_PKEY *pkey); ECX_KEY *ossl_evp_pkey_get1_ED448(EVP_PKEY *pkey); -# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_ECX */ #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/encoder.h b/deps/openssl/android/x86/usr/local/include/crypto/encoder.h index 5c53bbea..6240438d 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/encoder.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/encoder.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/crypto/evp.h b/deps/openssl/android/x86/usr/local/include/crypto/evp.h index a0fff7fd..34cea2f9 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/evp.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/evp.h @@ -16,11 +16,21 @@ # 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) @@ -203,7 +213,6 @@ struct evp_mac_st { const char *description; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_mac_newctx_fn *newctx; OSSL_FUNC_mac_dupctx_fn *dupctx; @@ -225,7 +234,6 @@ struct evp_kdf_st { char *type_name; const char *description; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_kdf_newctx_fn *newctx; OSSL_FUNC_kdf_dupctx_fn *dupctx; @@ -270,7 +278,6 @@ struct evp_md_st { const char *description; OSSL_PROVIDER *prov; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_digest_newctx_fn *newctx; OSSL_FUNC_digest_init_fn *dinit; OSSL_FUNC_digest_update_fn *dupdate; @@ -326,7 +333,6 @@ struct evp_cipher_st { const char *description; OSSL_PROVIDER *prov; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_cipher_newctx_fn *newctx; OSSL_FUNC_cipher_encrypt_init_fn *einit; OSSL_FUNC_cipher_decrypt_init_fn *dinit; @@ -646,7 +652,9 @@ union legacy_pkey_st { # endif # ifndef OPENSSL_NO_EC struct ec_key_st *ec; /* ECC */ +# ifndef OPENSSL_NO_ECX ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ +# endif # endif }; @@ -784,7 +792,7 @@ void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, OP_CACHE_ELEM *evp_keymgmt_util_find_operation_cache(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, int selection); -int evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk, int locking); +int evp_keymgmt_util_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); @@ -813,7 +821,7 @@ int evp_keymgmt_set_params(const EVP_KEYMGMT *keymgmt, void *evp_keymgmt_gen_init(const EVP_KEYMGMT *keymgmt, int selection, const OSSL_PARAM params[]); int evp_keymgmt_gen_set_template(const EVP_KEYMGMT *keymgmt, void *genctx, - void *template); + 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, @@ -892,10 +900,6 @@ EVP_MD_CTX *evp_md_ctx_new_ex(EVP_PKEY *pkey, const ASN1_OCTET_STRING *id, int evp_pkey_name2type(const char *name); const char *evp_pkey_type2name(int type); -int evp_pkey_ctx_set1_id_prov(EVP_PKEY_CTX *ctx, const void *id, int len); -int evp_pkey_ctx_get1_id_prov(EVP_PKEY_CTX *ctx, void *id); -int evp_pkey_ctx_get1_id_len_prov(EVP_PKEY_CTX *ctx, size_t *id_len); - int evp_pkey_ctx_use_cached_data(EVP_PKEY_CTX *ctx); # endif /* !defined(FIPS_MODULE) */ @@ -959,4 +963,8 @@ 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/x86/usr/local/include/crypto/evperr.h b/deps/openssl/android/x86/usr/local/include/crypto/evperr.h index d90ba83f..4a001107 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/evperr.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/evperr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/crypto/md32_common.h b/deps/openssl/android/x86/usr/local/include/crypto/md32_common.h index 966e2684..46214f32 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/md32_common.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/md32_common.h @@ -63,37 +63,41 @@ * #define HASH_BLOCK_DATA_ORDER md5_block_data_order */ -#include +#ifndef OSSL_CRYPTO_MD32_COMMON_H +# define OSSL_CRYPTO_MD32_COMMON_H +# pragma once -#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) -# error "DATA_ORDER must be defined!" -#endif +# include -#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 +# if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) +# error "DATA_ORDER 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_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_BLOCK_DATA_ORDER -# error "HASH_BLOCK_DATA_ORDER 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 -#define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n)))) +# 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 && \ @@ -117,31 +121,31 @@ # endif #endif -#if defined(DATA_ORDER_IS_BIG_ENDIAN) +# if defined(DATA_ORDER_IS_BIG_ENDIAN) -# define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \ +# 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), \ +# 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) +# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) -# define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++))) ), \ +# 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), \ +# 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 +# endif /* * Time for some action :-) @@ -226,30 +230,30 @@ int HASH_FINAL(unsigned char *md, HASH_CTX *c) memset(p + n, 0, HASH_CBLOCK - 8 - n); p += HASH_CBLOCK - 8; -#if defined(DATA_ORDER_IS_BIG_ENDIAN) +# 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) +# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) (void)HOST_l2c(c->Nl, p); (void)HOST_l2c(c->Nh, p); -#endif +# 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 +# ifndef HASH_MAKE_STRING +# error "HASH_MAKE_STRING must be defined!" +# else HASH_MAKE_STRING(c, md); -#endif +# endif return 1; } -#ifndef MD32_REG_T -# if defined(__alpha) || defined(__sparcv9) || defined(__mips) -# define MD32_REG_T long +# 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, @@ -266,13 +270,15 @@ int HASH_FINAL(unsigned char *md, HASH_CTX *c) * Well, to be honest it should say that this *prevents* * performance degradation. */ -# else +# 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 +# define MD32_REG_T int +# endif # endif + #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/modes.h b/deps/openssl/android/x86/usr/local/include/crypto/modes.h index 573e1197..d03ca83d 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/modes.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/modes.h @@ -138,6 +138,12 @@ struct gcm128_context { #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. @@ -149,6 +155,12 @@ struct xts128_context { 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]; diff --git a/deps/openssl/android/x86/usr/local/include/crypto/pkcs12err.h b/deps/openssl/android/x86/usr/local/include/crypto/pkcs12err.h index 662f412e..114971c6 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/pkcs12err.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/pkcs12err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/crypto/punycode.h b/deps/openssl/android/x86/usr/local/include/crypto/punycode.h index 4c6e49f5..2e1c85c1 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/punycode.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/punycode.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -22,6 +22,4 @@ int ossl_punycode_decode ( int ossl_a2ulabel(const char *in, char *out, size_t outlen); -int ossl_a2ucompare(const char *a, const char *u); - #endif diff --git a/deps/openssl/android/x86/usr/local/include/crypto/rand.h b/deps/openssl/android/x86/usr/local/include/crypto/rand.h index 215b3b7a..d375c2f9 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/rand.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/rand.h @@ -140,4 +140,15 @@ 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/x86/usr/local/include/crypto/riscv_arch.h b/deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.h index 89a40bea..95185841 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/riscv_arch.h @@ -1,5 +1,5 @@ /* - * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -56,4 +56,9 @@ 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/x86/usr/local/include/crypto/rsa.h b/deps/openssl/android/x86/usr/local/include/crypto/rsa.h index 949873d0..8eddc168 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/rsa.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/rsa.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -34,8 +34,6 @@ int ossl_rsa_pss_params_30_copy(RSA_PSS_PARAMS_30 *to, int ossl_rsa_pss_params_30_is_unrestricted(const RSA_PSS_PARAMS_30 *rsa_pss_params); int ossl_rsa_pss_params_30_set_hashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, int hashalg_nid); -int ossl_rsa_pss_params_30_set_maskgenalg(RSA_PSS_PARAMS_30 *rsa_pss_params, - int maskgenalg_nid); int ossl_rsa_pss_params_30_set_maskgenhashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, int maskgenhashalg_nid); int ossl_rsa_pss_params_30_set_saltlen(RSA_PSS_PARAMS_30 *rsa_pss_params, @@ -83,6 +81,10 @@ 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, diff --git a/deps/openssl/android/x86/usr/local/include/crypto/sha.h b/deps/openssl/android/x86/usr/local/include/crypto/sha.h index 64305d17..99bcf0ff 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/sha.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/sha.h @@ -1,5 +1,5 @@ /* - * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -14,6 +14,7 @@ # 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); diff --git a/deps/openssl/android/x86/usr/local/include/crypto/sm4_platform.h b/deps/openssl/android/x86/usr/local/include/crypto/sm4_platform.h index 6cc1dfa5..cc4f5142 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/sm4_platform.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/sm4_platform.h @@ -12,7 +12,7 @@ # pragma once # if defined(OPENSSL_CPUID_OBJ) -# if defined(__aarch64__) +# if defined(__aarch64__) || defined (_M_ARM64) # include "arm_arch.h" extern unsigned int OPENSSL_arm_midr; static inline int vpsm4_capable(void) @@ -21,8 +21,14 @@ static inline int vpsm4_capable(void) (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 @@ -53,7 +59,7 @@ void HWSM4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, const unsigned char ivec[16]); # endif /* HWSM4_CAPABLE */ -#ifdef VPSM4_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, @@ -69,7 +75,37 @@ void vpsm4_ecb_encrypt(const unsigned char *in, unsigned char *out, 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/x86/usr/local/include/crypto/store.h b/deps/openssl/android/x86/usr/local/include/crypto/store.h index 5645fc92..9b7be71a 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/store.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/store.h @@ -1,5 +1,5 @@ /* - * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/crypto/x509.h b/deps/openssl/android/x86/usr/local/include/crypto/x509.h index 631150b7..5765b9f7 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/x509.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/x509.h @@ -278,6 +278,8 @@ struct x509_store_ctx_st { /* X509_STORE_CTX */ SSL_DANE *dane; /* signed via bare TA public key, rather than CA certificate */ int bare_ta_signed; + /* Raw Public Key */ + EVP_PKEY *rpk; OSSL_LIB_CTX *libctx; char *propq; @@ -309,7 +311,7 @@ struct x509_object_st { }; int ossl_a2i_ipadd(unsigned char *ipout, const char *ipasc); -int ossl_x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int ossl_x509_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); @@ -334,7 +336,8 @@ int ossl_x509_PUBKEY_get0_libctx(OSSL_LIB_CTX **plibctx, const char **ppropq, 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); + 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); @@ -364,6 +367,7 @@ 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); diff --git a/deps/openssl/android/x86/usr/local/include/crypto/x509err.h b/deps/openssl/android/x86/usr/local/include/crypto/x509err.h index 0a67975b..c7c7d25e 100644 --- a/deps/openssl/android/x86/usr/local/include/crypto/x509err.h +++ b/deps/openssl/android/x86/usr/local/include/crypto/x509err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/internal/asn1.h b/deps/openssl/android/x86/usr/local/include/internal/asn1.h index 3143e340..36dbe0fc 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/asn1.h +++ b/deps/openssl/android/x86/usr/local/include/internal/asn1.h @@ -11,6 +11,8 @@ # 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/x86/usr/local/include/internal/bio.h b/deps/openssl/android/x86/usr/local/include/internal/bio.h index 547a73d0..9481f4c9 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/bio.h +++ b/deps/openssl/android/x86/usr/local/include/internal/bio.h @@ -27,6 +27,8 @@ struct bio_method_st { 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); @@ -41,16 +43,20 @@ int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); # 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) \ @@ -63,6 +69,8 @@ int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); 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) @@ -70,6 +78,8 @@ int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); 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); diff --git a/deps/openssl/android/x86/usr/local/include/internal/bio_addr.h b/deps/openssl/android/x86/usr/local/include/internal/bio_addr.h new file mode 100644 index 00000000..a6449b7e --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/bio_addr.h @@ -0,0 +1,29 @@ +/* + * 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/x86/usr/local/include/internal/bio_tfo.h b/deps/openssl/android/x86/usr/local/include/internal/bio_tfo.h new file mode 100644 index 00000000..64c0d4c3 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/bio_tfo.h @@ -0,0 +1,151 @@ +/* + * 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/x86/usr/local/include/internal/common.h b/deps/openssl/android/x86/usr/local/include/internal/common.h new file mode 100644 index 00000000..15666f11 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/common.h @@ -0,0 +1,217 @@ +/* + * 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/x86/usr/local/include/internal/comp.h b/deps/openssl/android/x86/usr/local/include/internal/comp.h index 3ad86fc7..c48c29d5 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/comp.h +++ b/deps/openssl/android/x86/usr/local/include/internal/comp.h @@ -10,3 +10,5 @@ #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/x86/usr/local/include/internal/cryptlib.h b/deps/openssl/android/x86/usr/local/include/internal/cryptlib.h index ac50eb3b..64851fd8 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/cryptlib.h +++ b/deps/openssl/android/x86/usr/local/include/internal/cryptlib.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,9 +11,6 @@ # define OSSL_INTERNAL_CRYPTLIB_H # pragma once -# include -# include - # ifdef OPENSSL_USE_APPLINK # define BIO_FLAGS_UPLINK_INTERNAL 0x8000 # include "ms/uplink.h" @@ -21,39 +18,13 @@ # define BIO_FLAGS_UPLINK_INTERNAL 0 # endif +# include "internal/common.h" + # include # include # include # include # include -# include "internal/nelem.h" - -#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 - -/* - * Use this inside a union with the field that needs to be aligned to a - * reasonable boundary for the platform. The most pessimistic alignment - * of the listed types will be used by the compiler. - */ -# define OSSL_UNION_ALIGN \ - double align; \ - ossl_uintmax_t align_int; \ - void *align_ptr typedef struct ex_callback_st EX_CALLBACK; DEFINE_STACK_OF(EX_CALLBACK) @@ -61,30 +32,6 @@ DEFINE_STACK_OF(EX_CALLBACK) typedef struct mem_st MEM; DEFINE_LHASH_OF_EX(MEM); -# 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) - void OPENSSL_cpuid_setup(void); #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(__x86_64__) || \ @@ -168,7 +115,9 @@ typedef struct ossl_ex_data_global_st { # define OSSL_LIB_CTX_PROVIDER_CONF_INDEX 16 # define OSSL_LIB_CTX_BIO_CORE_INDEX 17 # define OSSL_LIB_CTX_CHILD_PROVIDER_INDEX 18 -# define OSSL_LIB_CTX_MAX_INDEXES 19 +# 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); @@ -211,34 +160,4 @@ char *ossl_buf2hexstr_sep(const unsigned char *buf, long buflen, char sep); unsigned char *ossl_hexstr2buf_sep(const char *str, long *buflen, const char sep); -static ossl_inline int ossl_ends_with_dirsep(const char *path) -{ - if (*path != '\0') - path += strlen(path) - 1; -# if defined __VMS - if (*path == ']' || *path == '>' || *path == ':') - return 1; -# elif defined _WIN32 - if (*path == '\\') - return 1; -# endif - return *path == '/'; -} - -static ossl_inline int ossl_is_absolute_path(const char *path) -{ -# if defined __VMS - if (strchr(path, ':') != NULL - || ((path[0] == '[' || path[0] == '<') - && path[1] != '.' && path[1] != '-' - && path[1] != ']' && path[1] != '>')) - return 1; -# elif defined _WIN32 - if (path[0] == '\\' - || (path[0] != '\0' && path[1] == ':')) - return 1; -# endif - return path[0] == '/'; -} - #endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/der.h b/deps/openssl/android/x86/usr/local/include/internal/der.h index f23fabc2..8d6db8f0 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/der.h +++ b/deps/openssl/android/x86/usr/local/include/internal/der.h @@ -7,8 +7,12 @@ * https://www.openssl.org/source/license.html */ -#include -#include "internal/packet.h" +#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. @@ -22,42 +26,42 @@ * 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 +# 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 +# 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 +# define DER_C_UNIVERSAL 0x00 +# define DER_C_APPLICATION 0x40 +# define DER_C_CONTEXT 0x80 +# define DER_C_PRIVATE 0xC0 /* * Run-time constructors. @@ -67,7 +71,7 @@ */ /* This can be used for all items that don't have a context */ -#define DER_NO_CONTEXT -1 +# define DER_NO_CONTEXT -1 int ossl_DER_w_precompiled(WPACKET *pkt, int tag, const unsigned char *precompiled, @@ -86,3 +90,5 @@ int ossl_DER_w_octet_string_uint32(WPACKET *pkt, int tag, uint32_t value); */ 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/x86/usr/local/include/internal/deterministic_nonce.h b/deps/openssl/android/x86/usr/local/include/internal/deterministic_nonce.h new file mode 100644 index 00000000..5f0313fe --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/deterministic_nonce.h @@ -0,0 +1,24 @@ +/* + * 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/x86/usr/local/include/internal/e_os.h b/deps/openssl/android/x86/usr/local/include/internal/e_os.h index 7fdc3899..d1ed62e8 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/e_os.h +++ b/deps/openssl/android/x86/usr/local/include/internal/e_os.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -143,7 +143,7 @@ static __inline unsigned int _strlen31(const char *str) # undef stdin # undef stdout # undef stderr -FILE *__iob_func(); +FILE *__iob_func(void); # define stdin (&__iob_func()[0]) # define stdout (&__iob_func()[1]) # define stderr (&__iob_func()[2]) @@ -249,7 +249,7 @@ FILE *__iob_func(); /***********************************************/ # if defined(OPENSSL_SYS_WINDOWS) -# if (_MSC_VER >= 1310) && !defined(_WIN32_WCE) +# if defined(_MSC_VER) && (_MSC_VER >= 1310) && !defined(_WIN32_WCE) # define open _open # define fdopen _fdopen # define close _close @@ -286,54 +286,6 @@ struct servent *getservbyname(const char *name, const char *proto); # endif /* end vxworks */ -/* system-specific variants defining ossl_sleep() */ -#if defined(OPENSSL_SYS_UNIX) || defined(__DJGPP__) -# include -static ossl_inline void ossl_sleep(unsigned long millis) -{ -# ifdef OPENSSL_SYS_VXWORKS - struct timespec ts; - ts.tv_sec = (long int) (millis / 1000); - ts.tv_nsec = (long int) (millis % 1000) * 1000000ul; - nanosleep(&ts, NULL); -# elif defined(__TANDEM) -# if !defined(_REENTRANT) -# include - /* HPNS does not support usleep for non threaded apps */ - PROCESS_DELAY_(millis * 1000); -# elif defined(_SPT_MODEL_) -# include -# include - usleep(millis * 1000); -# else - usleep(millis * 1000); -# endif -# else - usleep(millis * 1000); -# endif -} -#elif defined(_WIN32) -# include -static ossl_inline void ossl_sleep(unsigned long millis) -{ - Sleep(millis); -} -#else -/* Fallback to a busy wait */ -static ossl_inline void ossl_sleep(unsigned long millis) -{ - struct timeval start, now; - unsigned long elapsedms; - - gettimeofday(&start, NULL); - do { - gettimeofday(&now, NULL); - elapsedms = (((now.tv_sec - start.tv_sec) * 1000000) - + now.tv_usec - start.tv_usec) / 1000; - } while (elapsedms < millis); -} -#endif /* defined OPENSSL_SYS_UNIX */ - /* ----------------------------- HP NonStop -------------------------------- */ /* Required to support platform variant without getpid() and pid_t. */ # if defined(__TANDEM) && defined(_GUARDIAN_TARGET) @@ -343,12 +295,12 @@ static ossl_inline void ossl_sleep(unsigned long millis) # define gethostbyname(name) gethostbyname((char*)name) # define ioctlsocket(a,b,c) ioctl(a,b,c) # ifdef NO_GETPID -inline int nssgetpid(); +inline int nssgetpid(void); # ifndef NSSGETPID_MACRO # define NSSGETPID_MACRO # include # include - inline int nssgetpid() + inline int nssgetpid(void) { short phandle[10]={0}; union pseudo_pid { diff --git a/deps/openssl/android/x86/usr/local/include/internal/endian.h b/deps/openssl/android/x86/usr/local/include/internal/endian.h index 8b34e03e..7d5a73b1 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/endian.h +++ b/deps/openssl/android/x86/usr/local/include/internal/endian.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,7 +12,7 @@ # pragma once /* - * IS_LITTLE_ENDIAN and IS_BIG_ENDIAN can be used to detect the endiannes + * 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. * diff --git a/deps/openssl/android/x86/usr/local/include/internal/event_queue.h b/deps/openssl/android/x86/usr/local/include/internal/event_queue.h new file mode 100644 index 00000000..bda1ee6a --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/event_queue.h @@ -0,0 +1,163 @@ +/* + * 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/x86/usr/local/include/internal/ffc.h b/deps/openssl/android/x86/usr/local/include/internal/ffc.h index c4f09087..edd8381e 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/ffc.h +++ b/deps/openssl/android/x86/usr/local/include/internal/ffc.h @@ -58,8 +58,11 @@ # define FFC_CHECK_INVALID_Q_VALUE 0x00020 # define FFC_CHECK_INVALID_J_VALUE 0x00040 -# define FFC_CHECK_BAD_LN_PAIR 0x00080 -# define FFC_CHECK_INVALID_SEED_SIZE 0x00100 +/* + * 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 @@ -68,6 +71,8 @@ # 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 @@ -132,7 +137,7 @@ void ossl_ffc_params_set_h(FFC_PARAMS *params, int index); void ossl_ffc_params_set_flags(FFC_PARAMS *params, unsigned int flags); void ossl_ffc_params_enable_flags(FFC_PARAMS *params, unsigned int flags, int enable); -int ossl_ffc_set_digest(FFC_PARAMS *params, const char *alg, const char *props); +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, diff --git a/deps/openssl/android/x86/usr/local/include/internal/hpke_util.h b/deps/openssl/android/x86/usr/local/include/internal/hpke_util.h new file mode 100644 index 00000000..e1da5e05 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/hpke_util.h @@ -0,0 +1,100 @@ +/* + * 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/x86/usr/local/include/internal/ktls.h b/deps/openssl/android/x86/usr/local/include/internal/ktls.h index 95492fd0..af27a325 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/ktls.h +++ b/deps/openssl/android/x86/usr/local/include/internal/ktls.h @@ -1,5 +1,5 @@ /* - * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -40,6 +40,11 @@ # 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; @@ -209,6 +214,13 @@ static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off, # 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 @@ -288,6 +300,18 @@ static ossl_inline int ktls_start(int fd, ktls_crypto_info_t *crypto_info, 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. diff --git a/deps/openssl/android/x86/usr/local/include/internal/list.h b/deps/openssl/android/x86/usr/local/include/internal/list.h new file mode 100644 index 00000000..fdd356c4 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/list.h @@ -0,0 +1,169 @@ +/* + * 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/x86/usr/local/include/internal/namemap.h b/deps/openssl/android/x86/usr/local/include/internal/namemap.h index fd36883f..6c42a9cd 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/namemap.h +++ b/deps/openssl/android/x86/usr/local/include/internal/namemap.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/internal/numbers.h b/deps/openssl/android/x86/usr/local/include/internal/numbers.h index 4f4d3306..47fb1677 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/numbers.h +++ b/deps/openssl/android/x86/usr/local/include/internal/numbers.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -61,6 +61,31 @@ # 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; diff --git a/deps/openssl/android/x86/usr/local/include/internal/packet.h b/deps/openssl/android/x86/usr/local/include/internal/packet.h index ed761720..7abc6b8b 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/packet.h +++ b/deps/openssl/android/x86/usr/local/include/internal/packet.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -691,6 +691,8 @@ struct wpacket_st { */ #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 diff --git a/deps/openssl/android/x86/usr/local/include/internal/packet_quic.h b/deps/openssl/android/x86/usr/local/include/internal/packet_quic.h new file mode 100644 index 00000000..5173b467 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/packet_quic.h @@ -0,0 +1,150 @@ +/* + * 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/x86/usr/local/include/internal/param_build_set.h b/deps/openssl/android/x86/usr/local/include/internal/param_build_set.h index 126211b7..3518f008 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/param_build_set.h +++ b/deps/openssl/android/x86/usr/local/include/internal/param_build_set.h @@ -1,5 +1,5 @@ /* - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -39,6 +39,11 @@ 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); diff --git a/deps/openssl/android/x86/usr/local/include/internal/param_names.h b/deps/openssl/android/x86/usr/local/include/internal/param_names.h new file mode 100644 index 00000000..e721d071 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/param_names.h @@ -0,0 +1,376 @@ +/* + * 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/x86/usr/local/include/internal/param_names.h.in b/deps/openssl/android/x86/usr/local/include/internal/param_names.h.in new file mode 100644 index 00000000..f34db219 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/param_names.h.in @@ -0,0 +1,18 @@ +/* + * {- 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/x86/usr/local/include/internal/params.h b/deps/openssl/android/x86/usr/local/include/internal/params.h new file mode 100644 index 00000000..3fbd0cf9 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/params.h @@ -0,0 +1,38 @@ +/* + * 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/x86/usr/local/include/internal/priority_queue.h b/deps/openssl/android/x86/usr/local/include/internal/priority_queue.h new file mode 100644 index 00000000..5be03bf1 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/priority_queue.h @@ -0,0 +1,88 @@ +/* + * 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/x86/usr/local/include/internal/property.h b/deps/openssl/android/x86/usr/local/include/internal/property.h index d09274d0..3adff499 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/property.h +++ b/deps/openssl/android/x86/usr/local/include/internal/property.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/internal/provider.h b/deps/openssl/android/x86/usr/local/include/internal/provider.h index 18937f84..ab41d643 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/provider.h +++ b/deps/openssl/android/x86/usr/local/include/internal/provider.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -32,7 +32,7 @@ OSSL_PROVIDER *ossl_provider_find(OSSL_LIB_CTX *libctx, const char *name, int noconfig); OSSL_PROVIDER *ossl_provider_new(OSSL_LIB_CTX *libctx, const char *name, OSSL_provider_init_fn *init_function, - int noconfig); + OSSL_PARAM *params, int noconfig); int ossl_provider_up_ref(OSSL_PROVIDER *prov); void ossl_provider_free(OSSL_PROVIDER *prov); diff --git a/deps/openssl/android/x86/usr/local/include/internal/quic_ackm.h b/deps/openssl/android/x86/usr/local/include/internal/quic_ackm.h new file mode 100644 index 00000000..03fc6088 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_ackm.h @@ -0,0 +1,297 @@ +/* + * 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/x86/usr/local/include/internal/quic_cc.h b/deps/openssl/android/x86/usr/local/include/internal/quic_cc.h new file mode 100644 index 00000000..60c710b0 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_cc.h @@ -0,0 +1,219 @@ +/* + * 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/x86/usr/local/include/internal/quic_cfq.h b/deps/openssl/android/x86/usr/local/include/internal/quic_cfq.h new file mode 100644 index 00000000..22c436dc --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_cfq.h @@ -0,0 +1,154 @@ +/* + * 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/x86/usr/local/include/internal/quic_channel.h b/deps/openssl/android/x86/usr/local/include/internal/quic_channel.h new file mode 100644 index 00000000..f46db063 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_channel.h @@ -0,0 +1,429 @@ +/* + * 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/x86/usr/local/include/internal/quic_demux.h b/deps/openssl/android/x86/usr/local/include/internal/quic_demux.h new file mode 100644 index 00000000..444249e7 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_demux.h @@ -0,0 +1,364 @@ +/* + * 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/x86/usr/local/include/internal/quic_error.h b/deps/openssl/android/x86/usr/local/include/internal/quic_error.h new file mode 100644 index 00000000..ae195a5f --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_error.h @@ -0,0 +1,56 @@ +/* + * 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/x86/usr/local/include/internal/quic_fc.h b/deps/openssl/android/x86/usr/local/include/internal/quic_fc.h new file mode 100644 index 00000000..49b448a3 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_fc.h @@ -0,0 +1,277 @@ +/* + * 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/x86/usr/local/include/internal/quic_fifd.h b/deps/openssl/android/x86/usr/local/include/internal/quic_fifd.h new file mode 100644 index 00000000..a260ec44 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_fifd.h @@ -0,0 +1,80 @@ +/* + * 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/x86/usr/local/include/internal/quic_reactor.h b/deps/openssl/android/x86/usr/local/include/internal/quic_reactor.h new file mode 100644 index 00000000..57bb551e --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_reactor.h @@ -0,0 +1,188 @@ +/* + * 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/x86/usr/local/include/internal/quic_record_rx.h b/deps/openssl/android/x86/usr/local/include/internal/quic_record_rx.h new file mode 100644 index 00000000..e26fd356 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_record_rx.h @@ -0,0 +1,569 @@ +/* + * 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/x86/usr/local/include/internal/quic_record_tx.h b/deps/openssl/android/x86/usr/local/include/internal/quic_record_tx.h new file mode 100644 index 00000000..f3b798fe --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_record_tx.h @@ -0,0 +1,383 @@ +/* + * 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/x86/usr/local/include/internal/quic_record_util.h b/deps/openssl/android/x86/usr/local/include/internal/quic_record_util.h new file mode 100644 index 00000000..97e630d9 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_record_util.h @@ -0,0 +1,116 @@ +/* + * 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/x86/usr/local/include/internal/quic_rx_depack.h b/deps/openssl/android/x86/usr/local/include/internal/quic_rx_depack.h new file mode 100644 index 00000000..c90964a7 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_rx_depack.h @@ -0,0 +1,21 @@ +/* + * 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/x86/usr/local/include/internal/quic_sf_list.h b/deps/openssl/android/x86/usr/local/include/internal/quic_sf_list.h new file mode 100644 index 00000000..8ed1dcb1 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_sf_list.h @@ -0,0 +1,151 @@ +/* + * 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/x86/usr/local/include/internal/quic_ssl.h b/deps/openssl/android/x86/usr/local/include/internal/quic_ssl.h new file mode 100644 index 00000000..52d4527c --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_ssl.h @@ -0,0 +1,132 @@ +/* + * 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/x86/usr/local/include/internal/quic_statm.h b/deps/openssl/android/x86/usr/local/include/internal/quic_statm.h new file mode 100644 index 00000000..5b33551b --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_statm.h @@ -0,0 +1,40 @@ +/* + * 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/x86/usr/local/include/internal/quic_stream.h b/deps/openssl/android/x86/usr/local/include/internal/quic_stream.h new file mode 100644 index 00000000..0da8febd --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_stream.h @@ -0,0 +1,429 @@ +/* +* 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/x86/usr/local/include/internal/quic_stream_map.h b/deps/openssl/android/x86/usr/local/include/internal/quic_stream_map.h new file mode 100644 index 00000000..ae749061 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_stream_map.h @@ -0,0 +1,878 @@ +/* +* 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/x86/usr/local/include/internal/quic_thread_assist.h b/deps/openssl/android/x86/usr/local/include/internal/quic_thread_assist.h new file mode 100644 index 00000000..592c2ffa --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_thread_assist.h @@ -0,0 +1,102 @@ +/* + * 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/x86/usr/local/include/internal/quic_tls.h b/deps/openssl/android/x86/usr/local/include/internal/quic_tls.h new file mode 100644 index 00000000..0e4a9d33 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_tls.h @@ -0,0 +1,106 @@ +/* + * 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/x86/usr/local/include/internal/quic_tserver.h b/deps/openssl/android/x86/usr/local/include/internal/quic_tserver.h new file mode 100644 index 00000000..4f358dd4 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_tserver.h @@ -0,0 +1,220 @@ +/* + * 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/x86/usr/local/include/internal/quic_txp.h b/deps/openssl/android/x86/usr/local/include/internal/quic_txp.h new file mode 100644 index 00000000..ae508f23 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_txp.h @@ -0,0 +1,209 @@ +/* + * 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/x86/usr/local/include/internal/quic_txpim.h b/deps/openssl/android/x86/usr/local/include/internal/quic_txpim.h new file mode 100644 index 00000000..ed6e3875 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_txpim.h @@ -0,0 +1,133 @@ +/* + * 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/x86/usr/local/include/internal/quic_types.h b/deps/openssl/android/x86/usr/local/include/internal/quic_types.h new file mode 100644 index 00000000..d42164ba --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_types.h @@ -0,0 +1,116 @@ +/* + * 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/x86/usr/local/include/internal/quic_vlint.h b/deps/openssl/android/x86/usr/local/include/internal/quic_vlint.h new file mode 100644 index 00000000..d4b70b22 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_vlint.h @@ -0,0 +1,127 @@ +/* +* 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/x86/usr/local/include/internal/quic_wire.h b/deps/openssl/android/x86/usr/local/include/internal/quic_wire.h new file mode 100644 index 00000000..cd01feb0 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_wire.h @@ -0,0 +1,784 @@ +/* +* 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/x86/usr/local/include/internal/quic_wire_pkt.h b/deps/openssl/android/x86/usr/local/include/internal/quic_wire_pkt.h new file mode 100644 index 00000000..18a483fc --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/quic_wire_pkt.h @@ -0,0 +1,629 @@ +/* + * 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/x86/usr/local/include/internal/recordmethod.h b/deps/openssl/android/x86/usr/local/include/internal/recordmethod.h new file mode 100644 index 00000000..53bd4ca6 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/recordmethod.h @@ -0,0 +1,339 @@ +/* + * 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/x86/usr/local/include/internal/refcount.h b/deps/openssl/android/x86/usr/local/include/internal/refcount.h index 3392d3b4..4c9ab266 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/refcount.h +++ b/deps/openssl/android/x86/usr/local/include/internal/refcount.h @@ -12,6 +12,7 @@ # include # include +# include # if defined(OPENSSL_THREADS) && !defined(OPENSSL_DEV_NO_ATOMICS) # if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ @@ -25,12 +26,13 @@ # define HAVE_ATOMICS 1 -typedef _Atomic int CRYPTO_REF_COUNT; +typedef struct { + _Atomic int val; +} CRYPTO_REF_COUNT; -static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, - ossl_unused void *lock) +static inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1; + *ret = atomic_fetch_add_explicit(&refcnt->val, 1, memory_order_relaxed) + 1; return 1; } @@ -44,50 +46,70 @@ static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, * to mutable members doesn't have to be serialized anymore, which would * otherwise imply an acquire fence. Hence conditional acquire fence... */ -static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, - ossl_unused void *lock) +static inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1; + *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 int CRYPTO_REF_COUNT; +typedef struct { + int val; +} CRYPTO_REF_COUNT; -static __inline__ int CRYPTO_UP_REF(int *val, int *ret, ossl_unused void *lock) +static __inline__ int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = __atomic_fetch_add(val, 1, __ATOMIC_RELAXED) + 1; + *ret = __atomic_fetch_add(&refcnt->val, 1, __ATOMIC_RELAXED) + 1; return 1; } -static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, - ossl_unused void *lock) +static __inline__ int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = __atomic_fetch_sub(val, 1, __ATOMIC_RELAXED) - 1; + *ret = __atomic_fetch_sub(&refcnt->val, 1, __ATOMIC_RELAXED) - 1; if (*ret == 0) __atomic_thread_fence(__ATOMIC_ACQUIRE); return 1; } -# elif defined(__ICL) && defined(_WIN32) -# define HAVE_ATOMICS 1 -typedef volatile int CRYPTO_REF_COUNT; -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline__ int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd((void *)val, 1) + 1; + *ret = __atomic_load_n(&refcnt->val, __ATOMIC_RELAXED); return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, - ossl_unused void *lock) +# 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 *)val, -1) - 1; + *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; } @@ -95,7 +117,9 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, # define HAVE_ATOMICS 1 -typedef volatile int CRYPTO_REF_COUNT; +typedef struct { + volatile int val; +} CRYPTO_REF_COUNT; # if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64) # include @@ -103,21 +127,26 @@ typedef volatile int CRYPTO_REF_COUNT; # define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH # endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd_nf(val, 1) + 1; + *ret = _InterlockedExchangeAdd_nf(&refcnt->val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd_nf(val, -1) - 1; + *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) @@ -131,19 +160,24 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, # endif # endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd(val, 1) + 1; + *ret = _InterlockedExchangeAdd(&refcnt->val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd(val, -1) - 1; + *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 @@ -156,13 +190,92 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, */ # ifndef HAVE_ATOMICS -typedef int CRYPTO_REF_COUNT; +typedef struct { + int val; +# ifdef OPENSSL_THREADS + CRYPTO_RWLOCK *lock; +# endif +} CRYPTO_REF_COUNT; -# define CRYPTO_UP_REF(val, ret, lock) CRYPTO_atomic_add(val, 1, ret, lock) -# define CRYPTO_DOWN_REF(val, ret, lock) CRYPTO_atomic_add(val, -1, ret, lock) +# 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) @@ -173,6 +286,6 @@ typedef int CRYPTO_REF_COUNT; # define REF_PRINT_EX(text, count, object) \ OSSL_TRACE3(REF_COUNT, "%p:%4d:%s\n", (object), (count), (text)); # define REF_PRINT_COUNT(text, object) \ - REF_PRINT_EX(text, object->references, (void *)object) + REF_PRINT_EX(text, object->references.val, (void *)object) #endif diff --git a/deps/openssl/android/x86/usr/local/include/internal/ring_buf.h b/deps/openssl/android/x86/usr/local/include/internal/ring_buf.h new file mode 100644 index 00000000..436f1ca1 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/ring_buf.h @@ -0,0 +1,277 @@ +/* + * 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/x86/usr/local/include/internal/safe_math.h b/deps/openssl/android/x86/usr/local/include/internal/safe_math.h new file mode 100644 index 00000000..be37e6ab --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/safe_math.h @@ -0,0 +1,443 @@ +/* + * 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/x86/usr/local/include/internal/sockets.h b/deps/openssl/android/x86/usr/local/include/internal/sockets.h index 1f5fefcc..2550c56b 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/sockets.h +++ b/deps/openssl/android/x86/usr/local/include/internal/sockets.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -61,7 +61,25 @@ struct servent *PASCAL getservbyname(const char *, const char *); # 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 @@ -71,6 +89,9 @@ struct servent *PASCAL getservbyname(const char *, const char *); # 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 @@ -95,6 +116,13 @@ struct servent *PASCAL getservbyname(const char *, const char *); # include # endif +# ifdef OPENSSL_SYS_UNIX +# ifndef OPENSSL_SYS_TANDEM +# include +# endif +# include +# endif + # ifndef VMS # include # else @@ -136,12 +164,15 @@ struct servent *PASCAL getservbyname(const char *, const char *); # 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__) diff --git a/deps/openssl/android/x86/usr/local/include/internal/ssl.h b/deps/openssl/android/x86/usr/local/include/internal/ssl.h new file mode 100644 index 00000000..8a0c7974 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/ssl.h @@ -0,0 +1,24 @@ +/* + * 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/x86/usr/local/include/internal/ssl3_cbc.h b/deps/openssl/android/x86/usr/local/include/internal/ssl3_cbc.h new file mode 100644 index 00000000..4fb5da19 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/ssl3_cbc.h @@ -0,0 +1,40 @@ +/* + * 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/x86/usr/local/include/internal/statem.h b/deps/openssl/android/x86/usr/local/include/internal/statem.h new file mode 100644 index 00000000..136e6523 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/statem.h @@ -0,0 +1,171 @@ +/* + * 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/x86/usr/local/include/internal/thread.h b/deps/openssl/android/x86/usr/local/include/internal/thread.h new file mode 100644 index 00000000..8c5bad77 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/thread.h @@ -0,0 +1,39 @@ +/* + * 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/x86/usr/local/include/internal/thread_arch.h b/deps/openssl/android/x86/usr/local/include/internal/thread_arch.h new file mode 100644 index 00000000..1bfc0ebb --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/thread_arch.h @@ -0,0 +1,127 @@ +/* + * 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/x86/usr/local/include/internal/time.h b/deps/openssl/android/x86/usr/local/include/internal/time.h new file mode 100644 index 00000000..14d724ab --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/time.h @@ -0,0 +1,242 @@ +/* + * 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/x86/usr/local/include/internal/tlsgroups.h b/deps/openssl/android/x86/usr/local/include/internal/tlsgroups.h index 8a35ced1..73fb53bc 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/tlsgroups.h +++ b/deps/openssl/android/x86/usr/local/include/internal/tlsgroups.h @@ -41,6 +41,16 @@ # 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 diff --git a/deps/openssl/android/x86/usr/local/include/internal/tsan_assist.h b/deps/openssl/android/x86/usr/local/include/internal/tsan_assist.h index 17205d10..a840df0b 100644 --- a/deps/openssl/android/x86/usr/local/include/internal/tsan_assist.h +++ b/deps/openssl/android/x86/usr/local/include/internal/tsan_assist.h @@ -47,33 +47,37 @@ * can use TSAN_QUALIFIER in cast specifically when it has to count. */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ +#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 +# include -# if defined(ATOMIC_POINTER_LOCK_FREE) \ +# 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 +# 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) +# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) -# if defined(__GCC_ATOMIC_POINTER_LOCK_FREE) \ +# 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 +# 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 \ +# 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))) /* @@ -87,62 +91,63 @@ * 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) \ +# 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)) \ +# 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) __iso_volatile_load32(ptr) -# define tsan_store(ptr, val) __iso_volatile_store32((ptr), (val)) +# define tsan_load(ptr) (*(ptr)) +# define tsan_store(ptr, val) (*(ptr) = (val)) # endif -# else +# 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)) -# 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)) +# 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 - -#define tsan_counter(ptr) tsan_add((ptr), 1) -#define tsan_decr(ptr) tsan_add((ptr), -1) - diff --git a/deps/openssl/android/x86/usr/local/include/internal/uint_set.h b/deps/openssl/android/x86/usr/local/include/internal/uint_set.h new file mode 100644 index 00000000..dcb29b33 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/internal/uint_set.h @@ -0,0 +1,63 @@ +/* + * 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/x86/usr/local/include/openssl/asn1.h b/deps/openssl/android/x86/usr/local/include/openssl/asn1.h index 85ae8d58..09712345 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/asn1.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/asn1.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/asn1.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -158,7 +158,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR) -# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +# 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 @@ -999,6 +999,8 @@ 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); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/asn1.h.in b/deps/openssl/android/x86/usr/local/include/openssl/asn1.h.in index d478bc96..798b2211 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/asn1.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/asn1.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -135,7 +135,7 @@ extern "C" { -} -# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +# 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 @@ -832,6 +832,8 @@ 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); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/async.h b/deps/openssl/android/x86/usr/local/include/openssl/async.h index bc27d5db..826ffb99 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/async.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/async.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -80,6 +80,14 @@ int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); 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); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/bio.h b/deps/openssl/android/x86/usr/local/include/openssl/bio.h index e16cf622..ea584def 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/bio.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/bio.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/bio.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -67,6 +67,8 @@ extern "C" { # 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 @@ -171,6 +173,30 @@ extern "C" { # 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) @@ -208,7 +234,7 @@ extern "C" { # define BIO_FLAGS_NONCLEAR_RST 0x400 # define BIO_FLAGS_IN_EOF 0x800 -/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ +/* 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; @@ -256,12 +282,14 @@ void BIO_clear_flags(BIO *b, int flags); # 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_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 @@ -362,6 +390,34 @@ struct bio_dgram_sctp_prinfo { }; # 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 */ @@ -428,10 +484,17 @@ struct bio_dgram_sctp_prinfo { # 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_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() */ @@ -452,7 +515,11 @@ struct bio_dgram_sctp_prinfo { # 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, \ @@ -469,6 +536,7 @@ struct bio_dgram_sctp_prinfo { (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 @@ -596,8 +664,30 @@ int BIO_ctrl_reset_read_request(BIO *b); (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)) @@ -640,10 +730,18 @@ 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); @@ -667,6 +765,9 @@ 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 @@ -686,6 +787,7 @@ 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); @@ -704,6 +806,7 @@ int BIO_dgram_sctp_msg_waiting(BIO *b); # ifndef OPENSSL_NO_SOCK int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); +int BIO_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); @@ -726,6 +829,8 @@ int BIO_hex_string(BIO *out, int indent, int width, const void *data, # 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 *); @@ -788,6 +893,7 @@ int BIO_sock_info(int sock, # 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); @@ -805,6 +911,11 @@ 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 @@ -856,18 +967,30 @@ 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 (*gets) (BIO *, char *, int)); + 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 *)); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/bio.h.in b/deps/openssl/android/x86/usr/local/include/openssl/bio.h.in index c521e41e..418d1197 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/bio.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/bio.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -68,6 +68,8 @@ extern "C" { # 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 @@ -172,6 +174,30 @@ extern "C" { # 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) @@ -209,7 +235,7 @@ extern "C" { # define BIO_FLAGS_NONCLEAR_RST 0x400 # define BIO_FLAGS_IN_EOF 0x800 -/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ +/* 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; @@ -257,12 +283,14 @@ void BIO_clear_flags(BIO *b, int flags); # 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_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 @@ -339,6 +367,34 @@ struct bio_dgram_sctp_prinfo { }; # 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 */ @@ -405,10 +461,17 @@ struct bio_dgram_sctp_prinfo { # 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_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() */ @@ -429,7 +492,11 @@ struct bio_dgram_sctp_prinfo { # 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, \ @@ -446,6 +513,7 @@ struct bio_dgram_sctp_prinfo { (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 @@ -573,8 +641,30 @@ int BIO_ctrl_reset_read_request(BIO *b); (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)) @@ -617,10 +707,18 @@ 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); @@ -644,6 +742,9 @@ 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 @@ -663,6 +764,7 @@ 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); @@ -681,6 +783,7 @@ int BIO_dgram_sctp_msg_waiting(BIO *b); # ifndef OPENSSL_NO_SOCK int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); +int BIO_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); @@ -703,6 +806,8 @@ int BIO_hex_string(BIO *out, int indent, int width, const void *data, # 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 *); @@ -765,6 +870,7 @@ int BIO_sock_info(int sock, # 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); @@ -782,6 +888,11 @@ 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 @@ -833,18 +944,30 @@ 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 (*gets) (BIO *, char *, int)); + 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 *)); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/bioerr.h b/deps/openssl/android/x86/usr/local/include/openssl/bioerr.h index 787b30af..e4fdb649 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/bioerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/bioerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -37,14 +37,18 @@ # 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 @@ -53,6 +57,7 @@ # 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 @@ -61,5 +66,7 @@ # 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/x86/usr/local/include/openssl/bn.h b/deps/openssl/android/x86/usr/local/include/openssl/bn.h index 27b127a5..ea706dca 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/bn.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/bn.h @@ -241,12 +241,18 @@ 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); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cmp.h b/deps/openssl/android/x86/usr/local/include/openssl/cmp.h index 49825570..60beffd5 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/cmp.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/cmp.h @@ -35,7 +35,9 @@ extern "C" { # endif -# define OSSL_CMP_PVNO 2 +# 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 { @@ -137,7 +139,6 @@ extern "C" { # 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) @@ -203,8 +204,8 @@ typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; # 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 @@ -378,18 +379,35 @@ 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_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 @@ -420,9 +438,11 @@ 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); @@ -432,7 +452,9 @@ void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); 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: */ @@ -454,6 +476,7 @@ int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, 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); @@ -477,6 +500,7 @@ 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); @@ -517,8 +541,10 @@ 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; @@ -590,6 +616,12 @@ int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cmp.h.in b/deps/openssl/android/x86/usr/local/include/openssl/cmp.h.in index fb5ae671..5bd8beb5 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/cmp.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/cmp.h.in @@ -36,7 +36,9 @@ use OpenSSL::stackhash qw(generate_stack_macros); extern "C" { # endif -# define OSSL_CMP_PVNO 2 +# 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 { @@ -138,7 +140,6 @@ extern "C" { # 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) @@ -204,8 +205,8 @@ typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; # 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 @@ -259,18 +260,35 @@ 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_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 @@ -301,9 +319,11 @@ 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); @@ -313,7 +333,9 @@ void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); 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: */ @@ -335,6 +357,7 @@ int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, 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); @@ -358,6 +381,7 @@ 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); @@ -398,8 +422,10 @@ 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; @@ -471,6 +497,12 @@ int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cmperr.h b/deps/openssl/android/x86/usr/local/include/openssl/cmperr.h index 49fd5e39..57a6effb 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/cmperr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/cmperr.h @@ -59,8 +59,11 @@ # 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 @@ -94,6 +97,7 @@ # 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cms.h b/deps/openssl/android/x86/usr/local/include/openssl/cms.h index 3b453e6a..fe86a5c7 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/cms.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/cms.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/cms.h.in * - * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -31,8 +31,10 @@ 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; @@ -147,6 +149,8 @@ SKM_DEFINE_STACK_OF_INTERNAL(CMS_RevocationInfoChoice, CMS_RevocationInfoChoice, #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) @@ -217,13 +221,16 @@ 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 *ctx, + unsigned int flags, OSSL_LIB_CTX *libctx, const char *propq); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, @@ -233,27 +240,26 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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 *ctx, + 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 *ctx, + OSSL_LIB_CTX *libctx, const char *propq); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, @@ -272,7 +278,7 @@ CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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); @@ -291,12 +297,16 @@ int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); CMS_ContentInfo * -CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, +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 *ctx, + 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); @@ -385,6 +395,11 @@ 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, @@ -441,7 +456,7 @@ CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( unsigned char *id, int idlen, int allorfirst, STACK_OF(GENERAL_NAMES) *receiptList, STACK_OF(GENERAL_NAMES) *receiptsTo, - OSSL_LIB_CTX *ctx); + OSSL_LIB_CTX *libctx); int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cms.h.in b/deps/openssl/android/x86/usr/local/include/openssl/cms.h.in index da20ddf2..23966770 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/cms.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/cms.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -32,8 +32,10 @@ use OpenSSL::stackhash qw(generate_stack_macros); 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; @@ -49,6 +51,8 @@ typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; .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) @@ -119,13 +123,16 @@ 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 *ctx, + unsigned int flags, OSSL_LIB_CTX *libctx, const char *propq); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, @@ -135,27 +142,26 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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 *ctx, + 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 *ctx, + OSSL_LIB_CTX *libctx, const char *propq); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, @@ -174,7 +180,7 @@ CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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); @@ -193,12 +199,16 @@ int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); CMS_ContentInfo * -CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, +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 *ctx, + 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); @@ -287,6 +297,11 @@ 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, @@ -343,7 +358,7 @@ CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( unsigned char *id, int idlen, int allorfirst, STACK_OF(GENERAL_NAMES) *receiptList, STACK_OF(GENERAL_NAMES) *receiptsTo, - OSSL_LIB_CTX *ctx); + OSSL_LIB_CTX *libctx); int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, diff --git a/deps/openssl/android/x86/usr/local/include/openssl/cmserr.h b/deps/openssl/android/x86/usr/local/include/openssl/cmserr.h index f2d7708f..887035b1 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/cmserr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/cmserr.h @@ -86,6 +86,7 @@ # 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/comp.h b/deps/openssl/android/x86/usr/local/include/openssl/comp.h index 06ff5810..f81ba0f3 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/comp.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/comp.h @@ -40,15 +40,20 @@ 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 -# ifdef ZLIB const BIO_METHOD *BIO_f_zlib(void); -# endif +const BIO_METHOD *BIO_f_brotli(void); +const BIO_METHOD *BIO_f_zstd(void); # endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/comperr.h b/deps/openssl/android/x86/usr/local/include/openssl/comperr.h index 01dd3e6b..1948d37f 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/comperr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/comperr.h @@ -23,9 +23,16 @@ /* * 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/x86/usr/local/include/openssl/conf.h b/deps/openssl/android/x86/usr/local/include/openssl/conf.h index e8fcf315..61bb0087 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/conf.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/conf.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/conf.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/conf.h.in b/deps/openssl/android/x86/usr/local/include/openssl/conf.h.in index 044b3eb5..56632870 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/conf.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/conf.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/configuration.h b/deps/openssl/android/x86/usr/local/include/openssl/configuration.h index 64de3940..b2e0f519 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/configuration.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/configuration.h @@ -27,7 +27,7 @@ extern "C" { * OpenSSL was configured with the following options: */ -# define OPENSSL_CONFIGURED_API 30100 +# define OPENSSL_CONFIGURED_API 30200 # ifndef OPENSSL_RAND_SEED_OS # define OPENSSL_RAND_SEED_OS # endif @@ -46,6 +46,12 @@ extern "C" { # ifndef OPENSSL_NO_ASYNC # define OPENSSL_NO_ASYNC # 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 @@ -58,6 +64,9 @@ extern "C" { # 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_DEVCRYPTOENG # define OPENSSL_NO_DEVCRYPTOENG # endif @@ -127,6 +136,9 @@ extern "C" { # 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 @@ -145,6 +157,12 @@ extern "C" { # 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 @@ -160,6 +178,21 @@ extern "C" { # 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 @@ -181,6 +214,12 @@ extern "C" { # define RC4_INT unsigned 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/configuration.h.in b/deps/openssl/android/x86/usr/local/include/openssl/configuration.h.in index b84dc1df..86077d0a 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/configuration.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/configuration.h.in @@ -62,6 +62,12 @@ extern "C" { # 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/core.h b/deps/openssl/android/x86/usr/local/include/openssl/core.h index 9683ac70..18c19918 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/core.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/core.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -42,6 +42,9 @@ struct ossl_dispatch_st { void (*function)(void); }; +# define OSSL_DISPATCH_END \ + { 0, NULL } + /* * Other items, essentially an int<->pointer map element. * diff --git a/deps/openssl/android/x86/usr/local/include/openssl/core_dispatch.h b/deps/openssl/android/x86/usr/local/include/openssl/core_dispatch.h index 61d75a38..9b03f20c 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/core_dispatch.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/core_dispatch.h @@ -661,6 +661,14 @@ OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types, 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 @@ -832,16 +840,24 @@ OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_settable_ctx_params, # 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)) @@ -937,6 +953,8 @@ OSSL_CORE_MAKE_FUNC(int, decoder_export_object, #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, @@ -952,6 +970,12 @@ 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 } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/core_names.h b/deps/openssl/android/x86/usr/local/include/openssl/core_names.h index 0a6ec1bb..ffffe90f 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/core_names.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/core_names.h @@ -1,4 +1,7 @@ /* + * 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 @@ -7,6 +10,7 @@ * https://www.openssl.org/source/license.html */ + #ifndef OPENSSL_CORE_NAMES_H # define OPENSSL_CORE_NAMES_H # pragma once @@ -15,544 +19,454 @@ extern "C" { # endif -/* Well known parameter names that core passes to providers */ -#define OSSL_PROV_PARAM_CORE_VERSION "openssl-version" /* utf8_ptr */ -#define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name" /* utf8_ptr */ -#define OSSL_PROV_PARAM_CORE_MODULE_FILENAME "module-filename" /* utf8_ptr */ - -/* Well known parameter names that Providers can define */ -#define OSSL_PROV_PARAM_NAME "name" /* utf8_ptr */ -#define OSSL_PROV_PARAM_VERSION "version" /* utf8_ptr */ -#define OSSL_PROV_PARAM_BUILDINFO "buildinfo" /* utf8_ptr */ -#define OSSL_PROV_PARAM_STATUS "status" /* uint */ -#define OSSL_PROV_PARAM_SECURITY_CHECKS "security-checks" /* uint */ -#define OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" /* uint */ -#define OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" /* uint */ - -/* Self test callback parameters */ -#define OSSL_PROV_PARAM_SELF_TEST_PHASE "st-phase" /* utf8_string */ -#define OSSL_PROV_PARAM_SELF_TEST_TYPE "st-type" /* utf8_string */ -#define OSSL_PROV_PARAM_SELF_TEST_DESC "st-desc" /* utf8_string */ - -/*- - * Provider-native object abstractions - * - * These are used when a provider wants to pass object data or an object - * reference back to libcrypto. This is only useful for provider functions - * that take a callback to which an OSSL_PARAM array with these parameters - * can be passed. - * - * This set of parameter names is explained in detail in provider-object(7) - * (doc/man7/provider-object.pod) - */ -#define OSSL_OBJECT_PARAM_TYPE "type" /* INTEGER */ -#define OSSL_OBJECT_PARAM_DATA_TYPE "data-type" /* UTF8_STRING */ -#define OSSL_OBJECT_PARAM_DATA_STRUCTURE "data-structure" /* UTF8_STRING */ -#define OSSL_OBJECT_PARAM_REFERENCE "reference" /* OCTET_STRING */ -#define OSSL_OBJECT_PARAM_DATA "data" /* OCTET_STRING or UTF8_STRING */ -#define OSSL_OBJECT_PARAM_DESC "desc" /* UTF8_STRING */ - -/* - * Algorithm parameters - * If "engine" or "properties" are specified, they should always be paired - * with the algorithm type. - * Note these are common names that are shared by many types (such as kdf, mac, - * and pkey) e.g: see OSSL_MAC_PARAM_DIGEST below. - */ -#define OSSL_ALG_PARAM_DIGEST "digest" /* utf8_string */ -#define OSSL_ALG_PARAM_CIPHER "cipher" /* utf8_string */ -#define OSSL_ALG_PARAM_ENGINE "engine" /* utf8_string */ -#define OSSL_ALG_PARAM_MAC "mac" /* utf8_string */ -#define OSSL_ALG_PARAM_PROPERTIES "properties"/* utf8_string */ - -/* cipher parameters */ -#define OSSL_CIPHER_PARAM_PADDING "padding" /* uint */ -#define OSSL_CIPHER_PARAM_USE_BITS "use-bits" /* uint */ -#define OSSL_CIPHER_PARAM_TLS_VERSION "tls-version" /* uint */ -#define OSSL_CIPHER_PARAM_TLS_MAC "tls-mac" /* octet_ptr */ -#define OSSL_CIPHER_PARAM_TLS_MAC_SIZE "tls-mac-size" /* size_t */ -#define OSSL_CIPHER_PARAM_MODE "mode" /* uint */ -#define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize" /* size_t */ -#define OSSL_CIPHER_PARAM_AEAD "aead" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_CTS "cts" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_KEYLEN "keylen" /* size_t */ -#define OSSL_CIPHER_PARAM_IVLEN "ivlen" /* size_t */ -#define OSSL_CIPHER_PARAM_IV "iv" /* octet_string OR octet_ptr */ -#define OSSL_CIPHER_PARAM_UPDATED_IV "updated-iv" /* octet_string OR octet_ptr */ -#define OSSL_CIPHER_PARAM_NUM "num" /* uint */ -#define OSSL_CIPHER_PARAM_ROUNDS "rounds" /* uint */ -#define OSSL_CIPHER_PARAM_AEAD_TAG "tag" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD "tlsaad" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD "tlsaadpad" /* size_t */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN "tlsivgen" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV "tlsivinv" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN -#define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" /* size_t */ -#define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey" /* octet_string */ -#define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" /* octet_string */ -#define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" /* size_t */ -#define OSSL_CIPHER_PARAM_SPEED "speed" /* uint */ -#define OSSL_CIPHER_PARAM_CTS_MODE "cts_mode" /* utf8_string */ -/* For passing the AlgorithmIdentifier parameter in DER form */ -#define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS "alg_id_param" /* octet_string */ - -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT \ - "tls1multi_maxsndfrag" /* uint */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE \ - "tls1multi_maxbufsz" /* size_t */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE \ - "tls1multi_interleave" /* uint */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD \ - "tls1multi_aad" /* octet_string */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN \ - "tls1multi_aadpacklen" /* uint */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC \ - "tls1multi_enc" /* octet_string */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN \ - "tls1multi_encin" /* octet_string */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN \ - "tls1multi_enclen" /* size_t */ - /* OSSL_CIPHER_PARAM_CTS_MODE Values */ -#define OSSL_CIPHER_CTS_MODE_CS1 "CS1" -#define OSSL_CIPHER_CTS_MODE_CS2 "CS2" -#define OSSL_CIPHER_CTS_MODE_CS3 "CS3" +# define OSSL_CIPHER_CTS_MODE_CS1 "CS1" +# define OSSL_CIPHER_CTS_MODE_CS2 "CS2" +# define OSSL_CIPHER_CTS_MODE_CS3 "CS3" -/* digest parameters */ -#define OSSL_DIGEST_PARAM_XOFLEN "xoflen" /* size_t */ -#define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms" /* octet string */ -#define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type" /* uint */ -#define OSSL_DIGEST_PARAM_MICALG "micalg" /* utf8 string */ -#define OSSL_DIGEST_PARAM_BLOCK_SIZE "blocksize" /* size_t */ -#define OSSL_DIGEST_PARAM_SIZE "size" /* size_t */ -#define OSSL_DIGEST_PARAM_XOF "xof" /* int, 0 or 1 */ -#define OSSL_DIGEST_PARAM_ALGID_ABSENT "algid-absent" /* int, 0 or 1 */ +/* Known 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_384 "SHA2-384" -#define OSSL_DIGEST_NAME_SHA2_512 "SHA2-512" -#define OSSL_DIGEST_NAME_SHA2_512_224 "SHA2-512/224" -#define OSSL_DIGEST_NAME_SHA2_512_256 "SHA2-512/256" -#define OSSL_DIGEST_NAME_MD2 "MD2" -#define OSSL_DIGEST_NAME_MD4 "MD4" -#define OSSL_DIGEST_NAME_MDC2 "MDC2" -#define OSSL_DIGEST_NAME_RIPEMD160 "RIPEMD160" -#define OSSL_DIGEST_NAME_SHA3_224 "SHA3-224" -#define OSSL_DIGEST_NAME_SHA3_256 "SHA3-256" -#define OSSL_DIGEST_NAME_SHA3_384 "SHA3-384" -#define OSSL_DIGEST_NAME_SHA3_512 "SHA3-512" -#define OSSL_DIGEST_NAME_KECCAK_KMAC128 "KECCAK-KMAC-128" -#define OSSL_DIGEST_NAME_KECCAK_KMAC256 "KECCAK-KMAC-256" -#define OSSL_DIGEST_NAME_SM3 "SM3" - -/* MAC parameters */ -#define OSSL_MAC_PARAM_KEY "key" /* octet string */ -#define OSSL_MAC_PARAM_IV "iv" /* octet string */ -#define OSSL_MAC_PARAM_CUSTOM "custom" /* utf8 string */ -#define OSSL_MAC_PARAM_SALT "salt" /* octet string */ -#define OSSL_MAC_PARAM_XOF "xof" /* int, 0 or 1 */ -#define OSSL_MAC_PARAM_DIGEST_NOINIT "digest-noinit" /* int, 0 or 1 */ -#define OSSL_MAC_PARAM_DIGEST_ONESHOT "digest-oneshot" /* int, 0 or 1 */ -#define OSSL_MAC_PARAM_C_ROUNDS "c-rounds" /* unsigned int */ -#define OSSL_MAC_PARAM_D_ROUNDS "d-rounds" /* unsigned int */ - -/* - * If "engine" or "properties" are specified, they should always be paired - * with "cipher" or "digest". - */ -#define OSSL_MAC_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ -#define OSSL_MAC_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ -#define OSSL_MAC_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ -#define OSSL_MAC_PARAM_SIZE "size" /* size_t */ -#define OSSL_MAC_PARAM_BLOCK_SIZE "block-size" /* size_t */ -#define OSSL_MAC_PARAM_TLS_DATA_SIZE "tls-data-size" /* size_t */ +# 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" - -/* KDF / PRF parameters */ -#define OSSL_KDF_PARAM_SECRET "secret" /* octet string */ -#define OSSL_KDF_PARAM_KEY "key" /* octet string */ -#define OSSL_KDF_PARAM_SALT "salt" /* octet string */ -#define OSSL_KDF_PARAM_PASSWORD "pass" /* octet string */ -#define OSSL_KDF_PARAM_PREFIX "prefix" /* octet string */ -#define OSSL_KDF_PARAM_LABEL "label" /* octet string */ -#define OSSL_KDF_PARAM_DATA "data" /* octet string */ -#define OSSL_KDF_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ -#define OSSL_KDF_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ -#define OSSL_KDF_PARAM_MAC OSSL_ALG_PARAM_MAC /* utf8 string */ -#define OSSL_KDF_PARAM_MAC_SIZE "maclen" /* size_t */ -#define OSSL_KDF_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ -#define OSSL_KDF_PARAM_ITER "iter" /* unsigned int */ -#define OSSL_KDF_PARAM_MODE "mode" /* utf8 string or int */ -#define OSSL_KDF_PARAM_PKCS5 "pkcs5" /* int */ -#define OSSL_KDF_PARAM_UKM "ukm" /* octet string */ -#define OSSL_KDF_PARAM_CEK_ALG "cekalg" /* utf8 string */ -#define OSSL_KDF_PARAM_SCRYPT_N "n" /* uint64_t */ -#define OSSL_KDF_PARAM_SCRYPT_R "r" /* uint32_t */ -#define OSSL_KDF_PARAM_SCRYPT_P "p" /* uint32_t */ -#define OSSL_KDF_PARAM_SCRYPT_MAXMEM "maxmem_bytes" /* uint64_t */ -#define OSSL_KDF_PARAM_INFO "info" /* octet string */ -#define OSSL_KDF_PARAM_SEED "seed" /* octet string */ -#define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash" /* octet string */ -#define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id" /* octet string */ -#define OSSL_KDF_PARAM_SSHKDF_TYPE "type" /* int */ -#define OSSL_KDF_PARAM_SIZE "size" /* size_t */ -#define OSSL_KDF_PARAM_CONSTANT "constant" /* octet string */ -#define OSSL_KDF_PARAM_PKCS12_ID "id" /* int */ -#define OSSL_KDF_PARAM_KBKDF_USE_L "use-l" /* int */ -#define OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR "use-separator" /* int */ -#define OSSL_KDF_PARAM_KBKDF_R "r" /* int */ -#define OSSL_KDF_PARAM_X942_ACVPINFO "acvp-info" -#define OSSL_KDF_PARAM_X942_PARTYUINFO "partyu-info" -#define OSSL_KDF_PARAM_X942_PARTYVINFO "partyv-info" -#define OSSL_KDF_PARAM_X942_SUPP_PUBINFO "supp-pubinfo" -#define OSSL_KDF_PARAM_X942_SUPP_PRIVINFO "supp-privinfo" -#define OSSL_KDF_PARAM_X942_USE_KEYBITS "use-keybits" +# 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" - -/* Known RAND names */ -#define OSSL_RAND_PARAM_STATE "state" -#define OSSL_RAND_PARAM_STRENGTH "strength" -#define OSSL_RAND_PARAM_MAX_REQUEST "max_request" -#define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy" -#define OSSL_RAND_PARAM_TEST_NONCE "test_nonce" -#define OSSL_RAND_PARAM_GENERATE "generate" - -/* RAND/DRBG names */ -#define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests" -#define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval" -#define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen" -#define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen" -#define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen" -#define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen" -#define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen" -#define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen" -#define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter" -#define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time" -#define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -#define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -#define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -#define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC -#define OSSL_DRBG_PARAM_USE_DF "use_derivation_function" - -/* DRBG call back parameters */ -#define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required" -#define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance" -#define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length" -#define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length" -#define OSSL_DRBG_PARAM_RANDOM_DATA "random_data" -#define OSSL_DRBG_PARAM_SIZE "size" - -/* PKEY parameters */ -/* Common PKEY parameters */ -#define OSSL_PKEY_PARAM_BITS "bits" /* integer */ -#define OSSL_PKEY_PARAM_MAX_SIZE "max-size" /* integer */ -#define OSSL_PKEY_PARAM_SECURITY_BITS "security-bits" /* integer */ -#define OSSL_PKEY_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -#define OSSL_PKEY_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ -#define OSSL_PKEY_PARAM_ENGINE OSSL_ALG_PARAM_ENGINE /* utf8 string */ -#define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -#define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" /* utf8 string */ -#define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest" /* utf8 string */ -#define OSSL_PKEY_PARAM_PAD_MODE "pad-mode" -#define OSSL_PKEY_PARAM_DIGEST_SIZE "digest-size" -#define OSSL_PKEY_PARAM_MASKGENFUNC "mgf" -#define OSSL_PKEY_PARAM_MGF1_DIGEST "mgf1-digest" -#define OSSL_PKEY_PARAM_MGF1_PROPERTIES "mgf1-properties" -#define OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY "encoded-pub-key" -#define OSSL_PKEY_PARAM_GROUP_NAME "group" -#define OSSL_PKEY_PARAM_DIST_ID "distid" -#define OSSL_PKEY_PARAM_PUB_KEY "pub" -#define OSSL_PKEY_PARAM_PRIV_KEY "priv" - -/* Diffie-Hellman/DSA Parameters */ -#define OSSL_PKEY_PARAM_FFC_P "p" -#define OSSL_PKEY_PARAM_FFC_G "g" -#define OSSL_PKEY_PARAM_FFC_Q "q" -#define OSSL_PKEY_PARAM_FFC_GINDEX "gindex" -#define OSSL_PKEY_PARAM_FFC_PCOUNTER "pcounter" -#define OSSL_PKEY_PARAM_FFC_SEED "seed" -#define OSSL_PKEY_PARAM_FFC_COFACTOR "j" -#define OSSL_PKEY_PARAM_FFC_H "hindex" -#define OSSL_PKEY_PARAM_FFC_VALIDATE_PQ "validate-pq" -#define OSSL_PKEY_PARAM_FFC_VALIDATE_G "validate-g" -#define OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY "validate-legacy" - -/* Diffie-Hellman params */ -#define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator" -#define OSSL_PKEY_PARAM_DH_PRIV_LEN "priv_len" - -/* Elliptic Curve Domain Parameters */ -#define OSSL_PKEY_PARAM_EC_PUB_X "qx" -#define OSSL_PKEY_PARAM_EC_PUB_Y "qy" - -/* Elliptic Curve Explicit Domain Parameters */ -#define OSSL_PKEY_PARAM_EC_FIELD_TYPE "field-type" -#define OSSL_PKEY_PARAM_EC_P "p" -#define OSSL_PKEY_PARAM_EC_A "a" -#define OSSL_PKEY_PARAM_EC_B "b" -#define OSSL_PKEY_PARAM_EC_GENERATOR "generator" -#define OSSL_PKEY_PARAM_EC_ORDER "order" -#define OSSL_PKEY_PARAM_EC_COFACTOR "cofactor" -#define OSSL_PKEY_PARAM_EC_SEED "seed" -#define OSSL_PKEY_PARAM_EC_CHAR2_M "m" -#define OSSL_PKEY_PARAM_EC_CHAR2_TYPE "basis-type" -#define OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS "tp" -#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K1 "k1" -#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K2 "k2" -#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K3 "k3" -#define OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS "decoded-from-explicit" - -/* Elliptic Curve Key Parameters */ -#define OSSL_PKEY_PARAM_USE_COFACTOR_FLAG "use-cofactor-flag" -#define OSSL_PKEY_PARAM_USE_COFACTOR_ECDH \ - OSSL_PKEY_PARAM_USE_COFACTOR_FLAG - -/* RSA Keys */ -/* - * n, e, d are the usual public and private key components - * - * rsa-num is the number of factors, including p and q - * rsa-factor is used for each factor: p, q, r_i (i = 3, ...) - * rsa-exponent is used for each exponent: dP, dQ, d_i (i = 3, ...) - * rsa-coefficient is used for each coefficient: qInv, t_i (i = 3, ...) - * - * The number of rsa-factor items must be equal to the number of rsa-exponent - * items, and the number of rsa-coefficients must be one less. - * (the base i for the coefficients is 2, not 1, at least as implied by - * RFC 8017) - */ -#define OSSL_PKEY_PARAM_RSA_N "n" -#define OSSL_PKEY_PARAM_RSA_E "e" -#define OSSL_PKEY_PARAM_RSA_D "d" -#define OSSL_PKEY_PARAM_RSA_FACTOR "rsa-factor" -#define OSSL_PKEY_PARAM_RSA_EXPONENT "rsa-exponent" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient" -#define OSSL_PKEY_PARAM_RSA_FACTOR1 OSSL_PKEY_PARAM_RSA_FACTOR"1" -#define OSSL_PKEY_PARAM_RSA_FACTOR2 OSSL_PKEY_PARAM_RSA_FACTOR"2" -#define OSSL_PKEY_PARAM_RSA_FACTOR3 OSSL_PKEY_PARAM_RSA_FACTOR"3" -#define OSSL_PKEY_PARAM_RSA_FACTOR4 OSSL_PKEY_PARAM_RSA_FACTOR"4" -#define OSSL_PKEY_PARAM_RSA_FACTOR5 OSSL_PKEY_PARAM_RSA_FACTOR"5" -#define OSSL_PKEY_PARAM_RSA_FACTOR6 OSSL_PKEY_PARAM_RSA_FACTOR"6" -#define OSSL_PKEY_PARAM_RSA_FACTOR7 OSSL_PKEY_PARAM_RSA_FACTOR"7" -#define OSSL_PKEY_PARAM_RSA_FACTOR8 OSSL_PKEY_PARAM_RSA_FACTOR"8" -#define OSSL_PKEY_PARAM_RSA_FACTOR9 OSSL_PKEY_PARAM_RSA_FACTOR"9" -#define OSSL_PKEY_PARAM_RSA_FACTOR10 OSSL_PKEY_PARAM_RSA_FACTOR"10" -#define OSSL_PKEY_PARAM_RSA_EXPONENT1 OSSL_PKEY_PARAM_RSA_EXPONENT"1" -#define OSSL_PKEY_PARAM_RSA_EXPONENT2 OSSL_PKEY_PARAM_RSA_EXPONENT"2" -#define OSSL_PKEY_PARAM_RSA_EXPONENT3 OSSL_PKEY_PARAM_RSA_EXPONENT"3" -#define OSSL_PKEY_PARAM_RSA_EXPONENT4 OSSL_PKEY_PARAM_RSA_EXPONENT"4" -#define OSSL_PKEY_PARAM_RSA_EXPONENT5 OSSL_PKEY_PARAM_RSA_EXPONENT"5" -#define OSSL_PKEY_PARAM_RSA_EXPONENT6 OSSL_PKEY_PARAM_RSA_EXPONENT"6" -#define OSSL_PKEY_PARAM_RSA_EXPONENT7 OSSL_PKEY_PARAM_RSA_EXPONENT"7" -#define OSSL_PKEY_PARAM_RSA_EXPONENT8 OSSL_PKEY_PARAM_RSA_EXPONENT"8" -#define OSSL_PKEY_PARAM_RSA_EXPONENT9 OSSL_PKEY_PARAM_RSA_EXPONENT"9" -#define OSSL_PKEY_PARAM_RSA_EXPONENT10 OSSL_PKEY_PARAM_RSA_EXPONENT"10" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 OSSL_PKEY_PARAM_RSA_COEFFICIENT"1" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT2 OSSL_PKEY_PARAM_RSA_COEFFICIENT"2" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT3 OSSL_PKEY_PARAM_RSA_COEFFICIENT"3" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT4 OSSL_PKEY_PARAM_RSA_COEFFICIENT"4" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT5 OSSL_PKEY_PARAM_RSA_COEFFICIENT"5" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT6 OSSL_PKEY_PARAM_RSA_COEFFICIENT"6" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT7 OSSL_PKEY_PARAM_RSA_COEFFICIENT"7" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT8 OSSL_PKEY_PARAM_RSA_COEFFICIENT"8" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT9 OSSL_PKEY_PARAM_RSA_COEFFICIENT"9" +# 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" +# define OSSL_PKEY_RSA_PAD_MODE_NONE "none" +# define OSSL_PKEY_RSA_PAD_MODE_PKCSV15 "pkcs1" +# define OSSL_PKEY_RSA_PAD_MODE_OAEP "oaep" +# define OSSL_PKEY_RSA_PAD_MODE_X931 "x931" +# define OSSL_PKEY_RSA_PAD_MODE_PSS "pss" /* RSA pss padding salt length */ -#define OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST "digest" -#define OSSL_PKEY_RSA_PSS_SALT_LEN_MAX "max" -#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO "auto" -#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX "auto-digestmax" - -/* Key generation parameters */ -#define OSSL_PKEY_PARAM_RSA_BITS OSSL_PKEY_PARAM_BITS -#define OSSL_PKEY_PARAM_RSA_PRIMES "primes" -#define OSSL_PKEY_PARAM_RSA_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_PKEY_PARAM_RSA_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES -#define OSSL_PKEY_PARAM_RSA_MASKGENFUNC OSSL_PKEY_PARAM_MASKGENFUNC -#define OSSL_PKEY_PARAM_RSA_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST -#define OSSL_PKEY_PARAM_RSA_PSS_SALTLEN "saltlen" - -/* Key generation parameters */ -#define OSSL_PKEY_PARAM_FFC_TYPE "type" -#define OSSL_PKEY_PARAM_FFC_PBITS "pbits" -#define OSSL_PKEY_PARAM_FFC_QBITS "qbits" -#define OSSL_PKEY_PARAM_FFC_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_PKEY_PARAM_FFC_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES - -#define OSSL_PKEY_PARAM_EC_ENCODING "encoding" /* utf8_string */ -#define OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT "point-format" -#define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check" -#define OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC "include-public" +# 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_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_POINT_CONVERSION_FORMAT_UNCOMPRESSED "uncompressed" +# define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_COMPRESSED "compressed" +# define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_HYBRID "hybrid" -#define OSSL_PKEY_EC_GROUP_CHECK_DEFAULT "default" -#define OSSL_PKEY_EC_GROUP_CHECK_NAMED "named" -#define OSSL_PKEY_EC_GROUP_CHECK_NAMED_NIST "named-nist" - -/* Key Exchange parameters */ -#define OSSL_EXCHANGE_PARAM_PAD "pad" /* uint */ -#define OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE "ecdh-cofactor-mode" /* int */ -#define OSSL_EXCHANGE_PARAM_KDF_TYPE "kdf-type" /* utf8_string */ -#define OSSL_EXCHANGE_PARAM_KDF_DIGEST "kdf-digest" /* utf8_string */ -#define OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS "kdf-digest-props" /* utf8_string */ -#define OSSL_EXCHANGE_PARAM_KDF_OUTLEN "kdf-outlen" /* size_t */ -/* The following parameter is an octet_string on set and an octet_ptr on get */ -#define OSSL_EXCHANGE_PARAM_KDF_UKM "kdf-ukm" - -/* Signature parameters */ -#define OSSL_SIGNATURE_PARAM_ALGORITHM_ID "algorithm-id" -#define OSSL_SIGNATURE_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE -#define OSSL_SIGNATURE_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_SIGNATURE_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES -#define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen" -#define OSSL_SIGNATURE_PARAM_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST -#define OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES \ - OSSL_PKEY_PARAM_MGF1_PROPERTIES -#define OSSL_SIGNATURE_PARAM_DIGEST_SIZE OSSL_PKEY_PARAM_DIGEST_SIZE - -/* Asym cipher parameters */ -#define OSSL_ASYM_CIPHER_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_ASYM_CIPHER_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES -#define OSSL_ASYM_CIPHER_PARAM_ENGINE OSSL_PKEY_PARAM_ENGINE -#define OSSL_ASYM_CIPHER_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE -#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST \ - OSSL_PKEY_PARAM_MGF1_DIGEST -#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS \ - OSSL_PKEY_PARAM_MGF1_PROPERTIES -#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST OSSL_ALG_PARAM_DIGEST -#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS "digest-props" -/* The following parameter is an octet_string on set and an octet_ptr on get */ -#define OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL "oaep-label" -#define OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION "tls-client-version" -#define OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION "tls-negotiated-version" - -/* - * Encoder / decoder parameters - */ -#define OSSL_ENCODER_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -#define OSSL_ENCODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -/* Currently PVK only, but reusable for others as needed */ -#define OSSL_ENCODER_PARAM_ENCRYPT_LEVEL "encrypt-level" -#define OSSL_ENCODER_PARAM_SAVE_PARAMETERS "save-parameters" /* integer */ - -#define OSSL_DECODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES - -/* Passphrase callback parameters */ -#define OSSL_PASSPHRASE_PARAM_INFO "info" - -/* Keygen callback parameters, from provider to libcrypto */ -#define OSSL_GEN_PARAM_POTENTIAL "potential" /* integer */ -#define OSSL_GEN_PARAM_ITERATION "iteration" /* integer */ - -/* ACVP Test parameters : These should not be used normally */ -#define OSSL_PKEY_PARAM_RSA_TEST_XP1 "xp1" -#define OSSL_PKEY_PARAM_RSA_TEST_XP2 "xp2" -#define OSSL_PKEY_PARAM_RSA_TEST_XP "xp" -#define OSSL_PKEY_PARAM_RSA_TEST_XQ1 "xq1" -#define OSSL_PKEY_PARAM_RSA_TEST_XQ2 "xq2" -#define OSSL_PKEY_PARAM_RSA_TEST_XQ "xq" -#define OSSL_PKEY_PARAM_RSA_TEST_P1 "p1" -#define OSSL_PKEY_PARAM_RSA_TEST_P2 "p2" -#define OSSL_PKEY_PARAM_RSA_TEST_Q1 "q1" -#define OSSL_PKEY_PARAM_RSA_TEST_Q2 "q2" -#define OSSL_SIGNATURE_PARAM_KAT "kat" - -/* KEM parameters */ -#define OSSL_KEM_PARAM_OPERATION "operation" +# 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" -/* Capabilities */ - -/* TLS-GROUP Capability */ -#define OSSL_CAPABILITY_TLS_GROUP_NAME "tls-group-name" -#define OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL "tls-group-name-internal" -#define OSSL_CAPABILITY_TLS_GROUP_ID "tls-group-id" -#define OSSL_CAPABILITY_TLS_GROUP_ALG "tls-group-alg" -#define OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS "tls-group-sec-bits" -#define OSSL_CAPABILITY_TLS_GROUP_IS_KEM "tls-group-is-kem" -#define OSSL_CAPABILITY_TLS_GROUP_MIN_TLS "tls-min-tls" -#define OSSL_CAPABILITY_TLS_GROUP_MAX_TLS "tls-max-tls" -#define OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS "tls-min-dtls" -#define OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS "tls-max-dtls" - -/*- - * storemgmt parameters - */ - -/* - * Used by storemgmt_ctx_set_params(): - * - * - OSSL_STORE_PARAM_EXPECT is an INTEGER, and the value is any of the - * OSSL_STORE_INFO numbers. This is used to set the expected type of - * object loaded. - * - * - OSSL_STORE_PARAM_SUBJECT, OSSL_STORE_PARAM_ISSUER, - * OSSL_STORE_PARAM_SERIAL, OSSL_STORE_PARAM_FINGERPRINT, - * OSSL_STORE_PARAM_DIGEST, OSSL_STORE_PARAM_ALIAS - * are used as search criteria. - * (OSSL_STORE_PARAM_DIGEST is used with OSSL_STORE_PARAM_FINGERPRINT) - */ -#define OSSL_STORE_PARAM_EXPECT "expect" /* INTEGER */ -#define OSSL_STORE_PARAM_SUBJECT "subject" /* DER blob => OCTET_STRING */ -#define OSSL_STORE_PARAM_ISSUER "name" /* DER blob => OCTET_STRING */ -#define OSSL_STORE_PARAM_SERIAL "serial" /* INTEGER */ -#define OSSL_STORE_PARAM_DIGEST "digest" /* UTF8_STRING */ -#define OSSL_STORE_PARAM_FINGERPRINT "fingerprint" /* OCTET_STRING */ -#define OSSL_STORE_PARAM_ALIAS "alias" /* UTF8_STRING */ - -/* You may want to pass properties for the provider implementation to use */ -#define OSSL_STORE_PARAM_PROPERTIES "properties" /* utf8_string */ -/* OSSL_DECODER input type if a decoder is used by the store */ -#define OSSL_STORE_PARAM_INPUT_TYPE "input-type" /* UTF8_STRING */ +/* 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 } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/core_names.h.in b/deps/openssl/android/x86/usr/local/include/openssl/core_names.h.in new file mode 100644 index 00000000..c14520fe --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/core_names.h.in @@ -0,0 +1,119 @@ +/* + * {- 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/x86/usr/local/include/openssl/crmf.h b/deps/openssl/android/x86/usr/local/include/openssl/crmf.h index 71b747ed..1f901f35 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/crmf.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/crmf.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/crmf.h.in * - * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. * Copyright Nokia 2007-2019 * Copyright Siemens AG 2015-2019 * @@ -43,8 +43,8 @@ extern "C" { # 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) @@ -198,12 +198,14 @@ int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, int rid, int acceptRAVerified, OSSL_LIB_CTX *libctx, const char *propq); OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); -const ASN1_INTEGER -*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/crmf.h.in b/deps/openssl/android/x86/usr/local/include/openssl/crmf.h.in index 4d37ea6d..43411fa4 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/crmf.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/crmf.h.in @@ -1,7 +1,7 @@ /*- * {- join("\n * ", @autowarntext) -} * - * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. * Copyright Nokia 2007-2019 * Copyright Siemens AG 2015-2019 * @@ -44,8 +44,8 @@ extern "C" { # 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) @@ -151,12 +151,14 @@ int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, int rid, int acceptRAVerified, OSSL_LIB_CTX *libctx, const char *propq); OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); -const ASN1_INTEGER -*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/crypto.h b/deps/openssl/android/x86/usr/local/include/openssl/crypto.h index ab01aae8..55e00dcc 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/crypto.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/crypto.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/crypto.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -88,6 +88,7 @@ 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 @@ -552,6 +553,8 @@ 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/crypto.h.in b/deps/openssl/android/x86/usr/local/include/openssl/crypto.h.in index fb0c7cbb..b2d691b9 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/crypto.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/crypto.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -89,6 +89,7 @@ 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 @@ -529,6 +530,8 @@ 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ct.h b/deps/openssl/android/x86/usr/local/include/openssl/ct.h index b6dd8c35..e6dd1192 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ct.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ct.h @@ -133,7 +133,7 @@ typedef enum { */ 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. diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ct.h.in b/deps/openssl/android/x86/usr/local/include/openssl/ct.h.in index 16086b33..3fc2aaa9 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ct.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/ct.h.in @@ -85,7 +85,7 @@ typedef enum { */ 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. diff --git a/deps/openssl/android/x86/usr/local/include/openssl/dh.h b/deps/openssl/android/x86/usr/local/include/openssl/dh.h index 8bc17448..f1c0ed06 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/dh.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/dh.h @@ -144,7 +144,7 @@ DECLARE_ASN1_ITEM(DHparams) # define DH_GENERATOR_3 3 # define DH_GENERATOR_5 5 -/* DH_check error codes */ +/* 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. @@ -154,10 +154,10 @@ DECLARE_ASN1_ITEM(DHparams) # define DH_UNABLE_TO_CHECK_GENERATOR 0x04 # define DH_NOT_SUITABLE_GENERATOR 0x08 # define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_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 +# define DH_MODULUS_TOO_LARGE 0x100 /* +DH_check_pub_key */ /* DH_check_pub_key error codes */ # define DH_CHECK_PUBKEY_TOO_SMALL 0x01 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/dherr.h b/deps/openssl/android/x86/usr/local/include/openssl/dherr.h index 5d2a762a..2997d7d4 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/dherr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/dherr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -40,6 +40,7 @@ # 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 @@ -50,6 +51,7 @@ # 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/dsa.h b/deps/openssl/android/x86/usr/local/include/openssl/dsa.h index 160404cc..109878e6 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/dsa.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/dsa.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/e_os2.h b/deps/openssl/android/x86/usr/local/include/openssl/e_os2.h index 32e142a9..e01f6275 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/e_os2.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/e_os2.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -89,7 +89,7 @@ extern "C" { /* * DLL settings. This part is a bit tough, because it's up to the - * application implementor how he or she will link the application, so it + * application implementer how he or she will link the application, so it * requires some macro to be used. */ # ifdef OPENSSL_SYS_WINDOWS diff --git a/deps/openssl/android/x86/usr/local/include/openssl/e_ostime.h b/deps/openssl/android/x86/usr/local/include/openssl/e_ostime.h new file mode 100644 index 00000000..8a7cc988 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/e_ostime.h @@ -0,0 +1,30 @@ +/* + * 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) +# include +# else +# include +# endif + +#endif diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ec.h b/deps/openssl/android/x86/usr/local/include/openssl/ec.h index be9fb2f0..e1cbe982 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ec.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ec.h @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -460,6 +460,22 @@ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, 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 @@ -1111,7 +1127,7 @@ OSSL_DEPRECATEDIN_3_0 int EC_KEY_check_key(const EC_KEY *key); /** Indicates if an EC_KEY can be used for signing. * \param eckey the EC_KEY object - * \return 1 if can can sign and 0 otherwise. + * \return 1 if can sign and 0 otherwise. */ OSSL_DEPRECATEDIN_3_0 int EC_KEY_can_sign(const EC_KEY *eckey); @@ -1287,7 +1303,7 @@ OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *me OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_method(ENGINE *engine); /** The old name for ecdh_KDF_X9_63 - * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, + * 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 */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/err.h b/deps/openssl/android/x86/usr/local/include/openssl/err.h index 2abf2483..b987e31f 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/err.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/err.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -496,6 +496,13 @@ 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 } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/err.h.in b/deps/openssl/android/x86/usr/local/include/openssl/err.h.in index 11dc2163..1ef09de0 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/err.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/err.h.in @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -485,6 +485,13 @@ 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 } diff --git a/deps/openssl/android/x86/usr/local/include/openssl/evp.h b/deps/openssl/android/x86/usr/local/include/openssl/evp.h index d0fce0c5..ea7620d6 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/evp.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/evp.h @@ -35,6 +35,7 @@ # 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 */ @@ -228,7 +229,8 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, * if the following flag is set. */ # define EVP_MD_CTX_FLAG_FINALISE 0x0200 -/* NOTE: 0x0400 is reserved for internal usage */ +/* 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); @@ -308,6 +310,7 @@ OSSL_DEPRECATEDIN_3_0 int # 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 @@ -674,7 +677,7 @@ void BIO_set_md(BIO *, const EVP_MD *md); # 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, +__owur int EVP_Cipher(EVP_CIPHER_CTX *c, unsigned char *out, const unsigned char *in, unsigned int inl); @@ -752,7 +755,7 @@ 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, +__owur int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); @@ -760,16 +763,16 @@ __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, +__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, +__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, +__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, +__owur int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); @@ -777,17 +780,17 @@ __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, +__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, +__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, +__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); @@ -821,18 +824,18 @@ __owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, size_t siglen, const unsigned char *tbs, size_t tbslen); -int EVP_DigestSignInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, +__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, +__owur int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); -int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); +__owur int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); __owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen); -int EVP_DigestVerifyInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, +__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[]); @@ -1927,14 +1930,17 @@ 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); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/evperr.h b/deps/openssl/android/x86/usr/local/include/openssl/evperr.h index a5053f6c..11f3faa4 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/evperr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/evperr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -110,11 +110,14 @@ # 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/hpke.h b/deps/openssl/android/x86/usr/local/include/openssl/hpke.h new file mode 100644 index 00000000..af637ac6 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/hpke.h @@ -0,0 +1,169 @@ +/* + * 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/x86/usr/local/include/openssl/http.h b/deps/openssl/android/x86/usr/local/include/openssl/http.h index f7ab2142..a3cbf15f 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/http.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/http.h @@ -1,5 +1,5 @@ /* - * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -33,6 +33,8 @@ extern "C" { # 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) @@ -103,6 +105,8 @@ int OSSL_HTTP_parse_url(const char *url, int *pssl, char **puser, char **phost, 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/lhash.h b/deps/openssl/android/x86/usr/local/include/openssl/lhash.h index f4155df1..8af9edd2 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/lhash.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/lhash.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/lhash.h.in b/deps/openssl/android/x86/usr/local/include/openssl/lhash.h.in index dc344a54..c9dbd1f3 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/lhash.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/lhash.h.in @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/macros.h b/deps/openssl/android/x86/usr/local/include/openssl/macros.h index a614cd66..e9ef9387 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/macros.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/macros.h @@ -158,7 +158,7 @@ /* * Define macros for deprecation and simulated removal purposes. * - * The macros OSSL_DEPRECATED_{major}_{minor} are always defined for + * 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. * @@ -169,6 +169,7 @@ * '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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/obj_mac.h b/deps/openssl/android/x86/usr/local/include/openssl/obj_mac.h index 0e860276..e1b441b3 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/obj_mac.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/obj_mac.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/objects/objects.pl * - * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -886,6 +886,14 @@ #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 @@ -1002,10 +1010,22 @@ #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 @@ -1082,15 +1102,17 @@ #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 1L,3L,6L,1L,4L,1L,311L,17L,1L +#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 1L,3L,6L,1L,4L,1L,311L,17L,2L +#define OBJ_LocalKeySet OBJ_ms_corp,17L,2L #define OBJ_certTypes OBJ_pkcs9,22L @@ -1108,6 +1130,10 @@ #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 @@ -1217,6 +1243,10 @@ #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 @@ -1300,42 +1330,62 @@ #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 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L +#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 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L +#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 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L +#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 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L +#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 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L +#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 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L +#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 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L +#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 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L +#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" @@ -1503,6 +1553,18 @@ #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 @@ -1783,6 +1845,22 @@ #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 @@ -1815,6 +1893,18 @@ #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 @@ -2649,11 +2739,56 @@ #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 @@ -2669,6 +2804,86 @@ #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 @@ -3220,6 +3435,70 @@ #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 @@ -4952,6 +5231,21 @@ #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 @@ -5029,6 +5323,9 @@ #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 @@ -5045,6 +5342,9 @@ #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 @@ -5053,6 +5353,9 @@ #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 @@ -5130,17 +5433,17 @@ #define SN_jurisdictionLocalityName "jurisdictionL" #define LN_jurisdictionLocalityName "jurisdictionLocalityName" #define NID_jurisdictionLocalityName 955 -#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L +#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 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L +#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 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L +#define OBJ_jurisdictionCountryName OBJ_ms_corp,60L,2L,1L,3L #define SN_id_scrypt "id-scrypt" #define LN_id_scrypt "scrypt" @@ -5432,6 +5735,24 @@ #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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/opensslv.h b/deps/openssl/android/x86/usr/local/include/openssl/opensslv.h index b87a4aa1..7f1ecf66 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/opensslv.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/opensslv.h @@ -28,8 +28,8 @@ extern "C" { * These macros express version number MAJOR.MINOR.PATCH exactly */ # define OPENSSL_VERSION_MAJOR 3 -# define OPENSSL_VERSION_MINOR 1 -# define OPENSSL_VERSION_PATCH 4 +# define OPENSSL_VERSION_MINOR 2 +# define OPENSSL_VERSION_PATCH 0 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.1.4" -# define OPENSSL_FULL_VERSION_STR "3.1.4" +# define OPENSSL_VERSION_STR "3.2.0" +# define OPENSSL_FULL_VERSION_STR "3.2.0" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "24 Oct 2023" +# define OPENSSL_RELEASE_DATE "23 Nov 2023" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.1.4 24 Oct 2023" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.2.0 23 Nov 2023" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pem.h b/deps/openssl/android/x86/usr/local/include/openssl/pem.h index 000d9c89..0446c770 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pem.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/pem.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -57,6 +57,7 @@ extern "C" { # 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h b/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h index 9e20fc1a..b08b0bc2 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/pkcs12.h.in * - * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -44,6 +44,7 @@ extern "C" { # 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... */ @@ -133,7 +134,9 @@ 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); @@ -221,6 +224,7 @@ ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, 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, @@ -308,6 +312,7 @@ 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); @@ -315,6 +320,11 @@ 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, diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h.in b/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h.in index cf956b41..35759d4d 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/pkcs12.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -45,6 +45,7 @@ extern "C" { # 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... */ @@ -110,7 +111,9 @@ 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); @@ -198,6 +201,7 @@ ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, 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, @@ -285,6 +289,7 @@ 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); @@ -292,6 +297,11 @@ 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, diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pkcs12err.h b/deps/openssl/android/x86/usr/local/include/openssl/pkcs12err.h index 933c8329..abce3736 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pkcs12err.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/pkcs12err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -21,6 +21,7 @@ /* * 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h b/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h index f824546c..dc46c511 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h @@ -134,8 +134,8 @@ SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO, PKCS7_RECIP_INF typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -161,8 +161,8 @@ typedef struct pkcs7_enveloped_st { typedef struct pkcs7_signedandenveloped_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -203,7 +203,7 @@ typedef struct pkcs7_st { /* NID_pkcs7_data */ ASN1_OCTET_STRING *data; /* NID_pkcs7_signed */ - PKCS7_SIGNED *sign; + PKCS7_SIGNED *sign; /* field name 'signed' would clash with C keyword */ /* NID_pkcs7_enveloped */ PKCS7_ENVELOPE *enveloped; /* NID_pkcs7_signedAndEnveloped */ @@ -344,13 +344,13 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, const EVP_MD *dgst); int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); -int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_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 *x509); + X509 *signer); BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h.in b/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h.in index a346bc74..11a636e1 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/pkcs7.h.in @@ -87,8 +87,8 @@ typedef struct pkcs7_recip_info_st { typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -114,8 +114,8 @@ typedef struct pkcs7_enveloped_st { typedef struct pkcs7_signedandenveloped_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -156,7 +156,7 @@ typedef struct pkcs7_st { /* NID_pkcs7_data */ ASN1_OCTET_STRING *data; /* NID_pkcs7_signed */ - PKCS7_SIGNED *sign; + PKCS7_SIGNED *sign; /* field name 'signed' would clash with C keyword */ /* NID_pkcs7_enveloped */ PKCS7_ENVELOPE *enveloped; /* NID_pkcs7_signedAndEnveloped */ @@ -273,13 +273,13 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, const EVP_MD *dgst); int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); -int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_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 *x509); + X509 *signer); BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/prov_ssl.h b/deps/openssl/android/x86/usr/local/include/openssl/prov_ssl.h index d3e0896c..76d01e1e 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/prov_ssl.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/prov_ssl.h @@ -1,5 +1,5 @@ /* - * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -19,6 +19,7 @@ extern "C" { # 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 @@ -28,6 +29,9 @@ extern "C" { # 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/proverr.h b/deps/openssl/android/x86/usr/local/include/openssl/proverr.h index 5d5c16d9..d9ef5681 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/proverr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/proverr.h @@ -52,6 +52,7 @@ # 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 @@ -63,9 +64,11 @@ # 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 @@ -77,6 +80,7 @@ # 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/provider.h b/deps/openssl/android/x86/usr/local/include/openssl/provider.h index dc86ff58..24ec0827 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/provider.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/provider.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,13 +17,19 @@ extern "C" { # endif -/* Set the default provider search path */ +/* 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, diff --git a/deps/openssl/android/x86/usr/local/include/openssl/quic.h b/deps/openssl/android/x86/usr/local/include/openssl/quic.h new file mode 100644 index 00000000..74a6345d --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/quic.h @@ -0,0 +1,37 @@ +/* + * 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/x86/usr/local/include/openssl/rand.h b/deps/openssl/android/x86/usr/local/include/openssl/rand.h index 90e0f0a0..1fa1129e 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/rand.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/rand.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/rsa.h b/deps/openssl/android/x86/usr/local/include/openssl/rsa.h index d0c95992..167427d3 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/rsa.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/rsa.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -189,6 +189,8 @@ int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); # 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 @@ -198,6 +200,9 @@ int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); # 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) diff --git a/deps/openssl/android/x86/usr/local/include/openssl/sha.h b/deps/openssl/android/x86/usr/local/include/openssl/sha.h index 6e65a040..163a7d58 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/sha.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/sha.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -81,6 +81,7 @@ OSSL_DEPRECATEDIN_3_0 void SHA256_Transform(SHA256_CTX *c, 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/srtp.h b/deps/openssl/android/x86/usr/local/include/openssl/srtp.h index d64606e5..2c2c3344 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/srtp.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/srtp.h @@ -28,16 +28,28 @@ 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 +# 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 +# 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ssl.h b/deps/openssl/android/x86/usr/local/include/openssl/ssl.h index 942f20e6..2b43485f 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ssl.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ssl.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/ssl.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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. * @@ -24,6 +24,7 @@ # endif # include +# include # include # include # include @@ -281,28 +282,31 @@ typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, /* Extension context codes */ /* This extension is only allowed in TLS */ -#define SSL_EXT_TLS_ONLY 0x0001 +#define SSL_EXT_TLS_ONLY 0x00001 /* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x0002 +#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 0x0004 +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 /* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x0008 +#define SSL_EXT_SSL3_ALLOWED 0x00008 /* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 /* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x0020 +#define SSL_EXT_TLS1_3_ONLY 0x00020 /* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 -#define SSL_EXT_CLIENT_HELLO 0x0080 +#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 0x0100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 +#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 */ @@ -433,6 +437,17 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); * 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." @@ -577,6 +592,8 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); # 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 @@ -968,6 +985,7 @@ uint32_t SSL_get_recv_max_early_data(const SSL *s); # include /* This is mostly sslv3 with a few tweaks */ # include /* Datagram TLS */ # include /* Support for the use_srtp extension */ +# include #ifdef __cplusplus extern "C" { @@ -1069,6 +1087,7 @@ typedef enum { 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, @@ -1078,6 +1097,7 @@ typedef enum { 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, @@ -1088,10 +1108,12 @@ typedef enum { 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, @@ -1383,6 +1405,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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 @@ -1488,6 +1511,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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) \ @@ -1552,6 +1577,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +const char *SSL_get0_group_name(SSL *s); const char *SSL_group_to_name(SSL *s, int id); /* Backwards compatibility, original 1.1.0 names */ @@ -1786,6 +1812,9 @@ __owur int SSL_has_matching_session_id(const SSL *s, 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); @@ -1843,6 +1872,8 @@ __owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, 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); @@ -1935,6 +1966,8 @@ 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); @@ -1989,6 +2022,7 @@ __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 @@ -2297,6 +2331,105 @@ 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 @@ -2596,6 +2729,36 @@ void SSL_set_allow_early_data_cb(SSL *s, 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ssl.h.in b/deps/openssl/android/x86/usr/local/include/openssl/ssl.h.in index f03f52fb..9f91039f 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ssl.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/ssl.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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. * @@ -25,6 +25,7 @@ use OpenSSL::stackhash qw(generate_stack_macros generate_const_stack_macros); # endif # include +# include # include # include # include @@ -258,28 +259,31 @@ typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, /* Extension context codes */ /* This extension is only allowed in TLS */ -#define SSL_EXT_TLS_ONLY 0x0001 +#define SSL_EXT_TLS_ONLY 0x00001 /* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x0002 +#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 0x0004 +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 /* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x0008 +#define SSL_EXT_SSL3_ALLOWED 0x00008 /* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 /* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x0020 +#define SSL_EXT_TLS1_3_ONLY 0x00020 /* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 -#define SSL_EXT_CLIENT_HELLO 0x0080 +#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 0x0100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 +#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 */ @@ -410,6 +414,17 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); * 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." @@ -554,6 +569,8 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); # 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 @@ -945,6 +962,7 @@ uint32_t SSL_get_recv_max_early_data(const SSL *s); # include /* This is mostly sslv3 with a few tweaks */ # include /* Datagram TLS */ # include /* Support for the use_srtp extension */ +# include #ifdef __cplusplus extern "C" { @@ -997,6 +1015,7 @@ typedef enum { 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, @@ -1006,6 +1025,7 @@ typedef enum { 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, @@ -1016,10 +1036,12 @@ typedef enum { 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, @@ -1311,6 +1333,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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 @@ -1416,6 +1439,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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) \ @@ -1480,6 +1505,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +const char *SSL_get0_group_name(SSL *s); const char *SSL_group_to_name(SSL *s, int id); /* Backwards compatibility, original 1.1.0 names */ @@ -1714,6 +1740,9 @@ __owur int SSL_has_matching_session_id(const SSL *s, 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); @@ -1771,6 +1800,8 @@ __owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, 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); @@ -1863,6 +1894,8 @@ 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); @@ -1917,6 +1950,7 @@ __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 @@ -2225,6 +2259,105 @@ 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 @@ -2524,6 +2657,36 @@ void SSL_set_allow_early_data_cb(SSL *s, 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ssl3.h b/deps/openssl/android/x86/usr/local/include/openssl/ssl3.h index 49bd51f2..4f076c6c 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ssl3.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ssl3.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -239,6 +239,13 @@ extern "C" { # 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 @@ -300,6 +307,8 @@ extern "C" { /* 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 @@ -317,6 +326,7 @@ extern "C" { # 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/sslerr.h b/deps/openssl/android/x86/usr/local/include/openssl/sslerr.h index f1882558..e1eb9a56 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/sslerr.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -25,8 +25,10 @@ # 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 @@ -82,6 +84,7 @@ # 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 @@ -110,6 +113,7 @@ # 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 @@ -119,6 +123,7 @@ # 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 @@ -144,6 +149,8 @@ # 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 @@ -156,6 +163,7 @@ # 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 @@ -196,9 +204,11 @@ # 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 @@ -221,10 +231,16 @@ # 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 @@ -234,6 +250,7 @@ # 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 @@ -273,6 +290,11 @@ # 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 @@ -316,6 +338,7 @@ # 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 @@ -333,6 +356,7 @@ # 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/store.h b/deps/openssl/android/x86/usr/local/include/openssl/store.h index 3c1445e0..e6ea3cf8 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/store.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/store.h @@ -1,5 +1,5 @@ /* - * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -98,6 +98,14 @@ OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, */ 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. @@ -345,7 +353,7 @@ int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, OSSL_DEPRECATEDIN_3_0 const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); OSSL_DEPRECATEDIN_3_0 -const char * OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/thread.h b/deps/openssl/android/x86/usr/local/include/openssl/thread.h new file mode 100644 index 00000000..3926ce54 --- /dev/null +++ b/deps/openssl/android/x86/usr/local/include/openssl/thread.h @@ -0,0 +1,31 @@ +/* + * 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/x86/usr/local/include/openssl/tls1.h b/deps/openssl/android/x86/usr/local/include/openssl/tls1.h index 793155e1..7e3d1a72 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/tls1.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/tls1.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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. * @@ -28,7 +28,7 @@ extern "C" { /* Default security level if not overridden at config time */ # ifndef OPENSSL_TLS_SECURITY_LEVEL -# define OPENSSL_TLS_SECURITY_LEVEL 1 +# define OPENSSL_TLS_SECURITY_LEVEL 2 # endif /* TLS*_VERSION constants are defined in prov_ssl.h */ @@ -122,6 +122,14 @@ extern "C" { */ # 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 @@ -134,6 +142,9 @@ extern "C" { /* 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 @@ -147,6 +158,7 @@ extern "C" { # 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 @@ -195,6 +207,15 @@ extern "C" { # 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 @@ -211,6 +232,15 @@ extern "C" { # 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); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/trace.h b/deps/openssl/android/x86/usr/local/include/openssl/trace.h index 97e13857..9a5b56ea 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/trace.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/trace.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -305,6 +305,14 @@ void OSSL_trace_end(int category, BIO *channel); # 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/ts.h b/deps/openssl/android/x86/usr/local/include/openssl/ts.h index 8ff67332..b09b646d 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/ts.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/ts.h @@ -1,5 +1,5 @@ /* - * Copyright 2006-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/types.h b/deps/openssl/android/x86/usr/local/include/openssl/types.h index 5f9d8c23..c2802868 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/types.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/types.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509.h b/deps/openssl/android/x86/usr/local/include/openssl/x509.h index 483cb9d5..ac132633 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/x509.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -606,6 +606,8 @@ 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 @@ -654,6 +656,8 @@ 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) @@ -887,7 +891,7 @@ int X509_REQ_get_signature_nid(const X509_REQ *req); int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); -EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +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); @@ -953,13 +957,14 @@ X509_REVOKED_get0_extensions(const X509_REVOKED *r); X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); -int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); +int X509_REQ_check_private_key(const X509_REQ *req, EVP_PKEY *pkey); -int X509_check_private_key(const X509 *x509, const 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); @@ -1265,6 +1270,8 @@ 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); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509.h.in b/deps/openssl/android/x86/usr/local/include/openssl/x509.h.in index d4df2adc..72103913 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -412,6 +412,8 @@ 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 @@ -460,6 +462,8 @@ 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) @@ -693,7 +697,7 @@ int X509_REQ_get_signature_nid(const X509_REQ *req); int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); -EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +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); @@ -759,13 +763,14 @@ X509_REVOKED_get0_extensions(const X509_REVOKED *r); X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); -int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); +int X509_REQ_check_private_key(const X509_REQ *req, EVP_PKEY *pkey); -int X509_check_private_key(const X509 *x509, const 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); @@ -1071,6 +1076,8 @@ 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); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h b/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h index 29b0e147..d3dfff8c 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/x509_vfy.h.in * - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -411,6 +411,7 @@ X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ # 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 @@ -491,71 +492,71 @@ int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); X509_STORE *X509_STORE_new(void); -void X509_STORE_free(X509_STORE *v); -int X509_STORE_lock(X509_STORE *ctx); -int X509_STORE_unlock(X509_STORE *ctx); -int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); -STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, +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 *ctx, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); -int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); +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 *ctx, X509_STORE_CTX_verify_fn verify); +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 *ctx); -void X509_STORE_set_verify_cb(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_issuer(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_issued(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_revocation(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_crl(X509_STORE *ctx, + 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 *ctx); -void X509_STORE_set_check_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cert_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_policy(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_certs(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_crls(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cleanup(X509_STORE *ctx, +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 *ctx); +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 *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); +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); @@ -565,11 +566,14 @@ 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, @@ -579,6 +583,8 @@ 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); @@ -600,7 +606,7 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); # define X509_STORE_get1_crl X509_STORE_CTX_get1_crls #endif -X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP *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); @@ -685,8 +691,8 @@ X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( const X509_LOOKUP_METHOD *method); -int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); -int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); +int X509_STORE_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, @@ -730,23 +736,21 @@ void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); -int X509_STORE_load_file(X509_STORE *ctx, const char *file); -int X509_STORE_load_path(X509_STORE *ctx, const char *path); -int X509_STORE_load_store(X509_STORE *ctx, const char *store); -int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, - const char *dir); -int X509_STORE_set_default_paths(X509_STORE *ctx); +int X509_STORE_load_file(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 *ctx, const char *file, +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 *ctx, const char *store, +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 *ctx, const char *file, - const char *dir, OSSL_LIB_CTX *libctx, - const char *propq); -int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, - const char *propq); +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) @@ -764,6 +768,7 @@ 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); @@ -773,6 +778,8 @@ int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, 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); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h.in b/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h.in index 80f18bd7..7a478d11 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509_vfy.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -314,6 +314,7 @@ X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ # 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 @@ -394,71 +395,71 @@ int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); X509_STORE *X509_STORE_new(void); -void X509_STORE_free(X509_STORE *v); -int X509_STORE_lock(X509_STORE *ctx); -int X509_STORE_unlock(X509_STORE *ctx); -int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); -STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, +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 *ctx, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); -int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); +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 *ctx, X509_STORE_CTX_verify_fn verify); +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 *ctx); -void X509_STORE_set_verify_cb(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_issuer(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_issued(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_revocation(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_crl(X509_STORE *ctx, + 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 *ctx); -void X509_STORE_set_check_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cert_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_policy(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_certs(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_crls(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cleanup(X509_STORE *ctx, +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 *ctx); +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 *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); +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); @@ -468,11 +469,14 @@ 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, @@ -482,6 +486,8 @@ 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); @@ -503,7 +509,7 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); # define X509_STORE_get1_crl X509_STORE_CTX_get1_crls #endif -X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP *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); @@ -588,8 +594,8 @@ X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( const X509_LOOKUP_METHOD *method); -int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); -int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); +int X509_STORE_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, @@ -633,23 +639,21 @@ void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); -int X509_STORE_load_file(X509_STORE *ctx, const char *file); -int X509_STORE_load_path(X509_STORE *ctx, const char *path); -int X509_STORE_load_store(X509_STORE *ctx, const char *store); -int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, - const char *dir); -int X509_STORE_set_default_paths(X509_STORE *ctx); +int X509_STORE_load_file(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 *ctx, const char *file, +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 *ctx, const char *store, +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 *ctx, const char *file, - const char *dir, OSSL_LIB_CTX *libctx, - const char *propq); -int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, - const char *propq); +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) @@ -667,6 +671,7 @@ 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); @@ -676,6 +681,8 @@ int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, 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); diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509err.h b/deps/openssl/android/x86/usr/local/include/openssl/x509err.h index 34ead4b8..71b557a3 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509err.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h b/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h index 75016354..e64da7e0 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h @@ -742,9 +742,10 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE) # 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 9 +# define X509_PURPOSE_MAX 10 /* Flags for X509V3_EXT_print() */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h.in b/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h.in index e33c9d30..56968037 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h.in +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509v3.h.in @@ -478,9 +478,10 @@ typedef struct x509_purpose_st { # 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 9 +# define X509_PURPOSE_MAX 10 /* Flags for X509V3_EXT_print() */ diff --git a/deps/openssl/android/x86/usr/local/include/openssl/x509v3err.h b/deps/openssl/android/x86/usr/local/include/openssl/x509v3err.h index 1ae3a562..deede279 100644 --- a/deps/openssl/android/x86/usr/local/include/openssl/x509v3err.h +++ b/deps/openssl/android/x86/usr/local/include/openssl/x509v3err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -23,6 +23,8 @@ */ # 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 @@ -86,6 +88,7 @@ # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/aes_platform.h b/deps/openssl/android/x86_64/usr/local/include/crypto/aes_platform.h index 87c35255..e641450b 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/aes_platform.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/aes_platform.h @@ -90,7 +90,7 @@ 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__)) +# if (defined(__arm__) || defined(__arm) || defined(__aarch64__) || defined(_M_ARM64)) # include "arm_arch.h" # if __ARM_MAX_ARCH__>=7 # if defined(BSAES_ASM) @@ -106,7 +106,7 @@ void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); # 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__) +# 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 @@ -114,36 +114,36 @@ void gcm_ghash_p8(u64 Xi[2],const u128 Htable[16],const u8 *inp, size_t len); # 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__) +# 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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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, +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); @@ -434,7 +434,6 @@ void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out, # elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 64 /* RISC-V 64 support */ # include "riscv_arch.h" -# define RV64I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) int rv64i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); @@ -447,8 +446,6 @@ void rv64i_zknd_decrypt(const unsigned char *in, unsigned char *out, # elif defined(OPENSSL_CPUID_OBJ) && defined(__riscv) && __riscv_xlen == 32 /* RISC-V 32 support */ # include "riscv_arch.h" -# define RV32I_ZKND_ZKNE_CAPABLE (RISCV_HAS_ZKND() && RISCV_HAS_ZKNE()) -# define RV32I_ZBKB_ZKND_ZKNE_CAPABLE (RV32I_ZKND_ZKNE_CAPABLE && RISCV_HAS_ZBKB()) int rv32i_zkne_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/asn1.h b/deps/openssl/android/x86_64/usr/local/include/crypto/asn1.h index ec76ae6f..36af1d76 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/asn1.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/asn1.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -142,8 +142,12 @@ 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); +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/x86_64/usr/local/include/crypto/bioerr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/bioerr.h index a0c06099..e38b981a 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/bioerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/bioerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/bn.h b/deps/openssl/android/x86_64/usr/local/include/crypto/bn.h index 00544d9d..33f979ce 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/bn.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/bn.h @@ -116,4 +116,13 @@ 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/x86_64/usr/local/include/crypto/cmserr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/cmserr.h index 1de2f9c7..a7fcf11f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/cmserr.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/cmserr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/context.h b/deps/openssl/android/x86_64/usr/local/include/crypto/context.h index 8ad16834..7369a730 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/context.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/context.h @@ -24,6 +24,9 @@ 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 *); @@ -40,3 +43,6 @@ 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/x86_64/usr/local/include/crypto/decoder.h b/deps/openssl/android/x86_64/usr/local/include/crypto/decoder.h index 6b5ee56a..a0d5de65 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/decoder.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/decoder.h @@ -1,5 +1,5 @@ /* - * Copyright 2020-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -25,16 +25,16 @@ void *ossl_decoder_from_algorithm(int id, const OSSL_ALGORITHM *algodef, 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_ctx_setup_for_pkey(OSSL_DECODER_CTX *ctx, - EVP_PKEY **pkey, const char *keytype, - OSSL_LIB_CTX *libctx, - const char *propquery); - int ossl_decoder_get_number(const OSSL_DECODER *encoder); int ossl_decoder_store_cache_flush(OSSL_LIB_CTX *libctx); int ossl_decoder_store_remove_all_provided(const OSSL_PROVIDER *prov); +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/x86_64/usr/local/include/crypto/dherr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/dherr.h index bb24d131..519327f7 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/dherr.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/dherr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/dsa.h b/deps/openssl/android/x86_64/usr/local/include/crypto/dsa.h index 260c30fa..85d92a18 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/dsa.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/dsa.h @@ -26,7 +26,9 @@ 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 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[]); diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/ec.h b/deps/openssl/android/x86_64/usr/local/include/crypto/ec.h index 62163b31..da85a7bd 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/ec.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/ec.h @@ -95,6 +95,12 @@ 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/x86_64/usr/local/include/crypto/ecx.h b/deps/openssl/android/x86_64/usr/local/include/crypto/ecx.h index 48b95fa5..f35b875f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/ecx.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/ecx.h @@ -1,5 +1,5 @@ /* - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -15,7 +15,7 @@ # include -# ifndef OPENSSL_NO_EC +# ifndef OPENSSL_NO_ECX # include # include @@ -72,7 +72,6 @@ struct ecx_key_st { size_t keylen; ECX_KEY_TYPE type; CRYPTO_REF_COUNT references; - CRYPTO_RWLOCK *lock; }; size_t ossl_ecx_key_length(ECX_KEY_TYPE type); @@ -83,6 +82,9 @@ 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]); @@ -94,27 +96,33 @@ ossl_ed25519_public_from_private(OSSL_LIB_CTX *ctx, uint8_t out_public_key[32], const uint8_t private_key[32], const char *propq); int -ossl_ed25519_sign(uint8_t *out_sig, const uint8_t *message, size_t message_len, +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 *message, size_t message_len, +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 char *propq); +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, +ossl_ed448_verify(OSSL_LIB_CTX *ctx, + const uint8_t *message, size_t message_len, const uint8_t signature[114], const uint8_t public_key[57], - const uint8_t *context, size_t context_len, const char *propq); + 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], @@ -146,5 +154,5 @@ ECX_KEY *ossl_evp_pkey_get1_X25519(EVP_PKEY *pkey); ECX_KEY *ossl_evp_pkey_get1_X448(EVP_PKEY *pkey); ECX_KEY *ossl_evp_pkey_get1_ED25519(EVP_PKEY *pkey); ECX_KEY *ossl_evp_pkey_get1_ED448(EVP_PKEY *pkey); -# endif /* OPENSSL_NO_EC */ +# endif /* OPENSSL_NO_ECX */ #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/encoder.h b/deps/openssl/android/x86_64/usr/local/include/crypto/encoder.h index 5c53bbea..6240438d 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/encoder.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/encoder.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/evp.h b/deps/openssl/android/x86_64/usr/local/include/crypto/evp.h index a0fff7fd..34cea2f9 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/evp.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/evp.h @@ -16,11 +16,21 @@ # 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) @@ -203,7 +213,6 @@ struct evp_mac_st { const char *description; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_mac_newctx_fn *newctx; OSSL_FUNC_mac_dupctx_fn *dupctx; @@ -225,7 +234,6 @@ struct evp_kdf_st { char *type_name; const char *description; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_kdf_newctx_fn *newctx; OSSL_FUNC_kdf_dupctx_fn *dupctx; @@ -270,7 +278,6 @@ struct evp_md_st { const char *description; OSSL_PROVIDER *prov; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_digest_newctx_fn *newctx; OSSL_FUNC_digest_init_fn *dinit; OSSL_FUNC_digest_update_fn *dupdate; @@ -326,7 +333,6 @@ struct evp_cipher_st { const char *description; OSSL_PROVIDER *prov; CRYPTO_REF_COUNT refcnt; - CRYPTO_RWLOCK *lock; OSSL_FUNC_cipher_newctx_fn *newctx; OSSL_FUNC_cipher_encrypt_init_fn *einit; OSSL_FUNC_cipher_decrypt_init_fn *dinit; @@ -646,7 +652,9 @@ union legacy_pkey_st { # endif # ifndef OPENSSL_NO_EC struct ec_key_st *ec; /* ECC */ +# ifndef OPENSSL_NO_ECX ECX_KEY *ecx; /* X25519, X448, Ed25519, Ed448 */ +# endif # endif }; @@ -784,7 +792,7 @@ void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, OP_CACHE_ELEM *evp_keymgmt_util_find_operation_cache(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt, int selection); -int evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk, int locking); +int evp_keymgmt_util_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); @@ -813,7 +821,7 @@ int evp_keymgmt_set_params(const EVP_KEYMGMT *keymgmt, void *evp_keymgmt_gen_init(const EVP_KEYMGMT *keymgmt, int selection, const OSSL_PARAM params[]); int evp_keymgmt_gen_set_template(const EVP_KEYMGMT *keymgmt, void *genctx, - void *template); + 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, @@ -892,10 +900,6 @@ EVP_MD_CTX *evp_md_ctx_new_ex(EVP_PKEY *pkey, const ASN1_OCTET_STRING *id, int evp_pkey_name2type(const char *name); const char *evp_pkey_type2name(int type); -int evp_pkey_ctx_set1_id_prov(EVP_PKEY_CTX *ctx, const void *id, int len); -int evp_pkey_ctx_get1_id_prov(EVP_PKEY_CTX *ctx, void *id); -int evp_pkey_ctx_get1_id_len_prov(EVP_PKEY_CTX *ctx, size_t *id_len); - int evp_pkey_ctx_use_cached_data(EVP_PKEY_CTX *ctx); # endif /* !defined(FIPS_MODULE) */ @@ -959,4 +963,8 @@ 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/x86_64/usr/local/include/crypto/evperr.h b/deps/openssl/android/x86_64/usr/local/include/crypto/evperr.h index d90ba83f..4a001107 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/evperr.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/evperr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/md32_common.h b/deps/openssl/android/x86_64/usr/local/include/crypto/md32_common.h index 966e2684..46214f32 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/md32_common.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/md32_common.h @@ -63,37 +63,41 @@ * #define HASH_BLOCK_DATA_ORDER md5_block_data_order */ -#include +#ifndef OSSL_CRYPTO_MD32_COMMON_H +# define OSSL_CRYPTO_MD32_COMMON_H +# pragma once -#if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) -# error "DATA_ORDER must be defined!" -#endif +# include -#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 +# if !defined(DATA_ORDER_IS_BIG_ENDIAN) && !defined(DATA_ORDER_IS_LITTLE_ENDIAN) +# error "DATA_ORDER 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_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_BLOCK_DATA_ORDER -# error "HASH_BLOCK_DATA_ORDER 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 -#define ROTATE(a,n) (((a)<<(n))|(((a)&0xffffffff)>>(32-(n)))) +# 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 && \ @@ -117,31 +121,31 @@ # endif #endif -#if defined(DATA_ORDER_IS_BIG_ENDIAN) +# if defined(DATA_ORDER_IS_BIG_ENDIAN) -# define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++)))<<24), \ +# 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), \ +# 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) +# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) -# define HOST_c2l(c,l) (l =(((unsigned long)(*((c)++))) ), \ +# 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), \ +# 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 +# endif /* * Time for some action :-) @@ -226,30 +230,30 @@ int HASH_FINAL(unsigned char *md, HASH_CTX *c) memset(p + n, 0, HASH_CBLOCK - 8 - n); p += HASH_CBLOCK - 8; -#if defined(DATA_ORDER_IS_BIG_ENDIAN) +# 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) +# elif defined(DATA_ORDER_IS_LITTLE_ENDIAN) (void)HOST_l2c(c->Nl, p); (void)HOST_l2c(c->Nh, p); -#endif +# 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 +# ifndef HASH_MAKE_STRING +# error "HASH_MAKE_STRING must be defined!" +# else HASH_MAKE_STRING(c, md); -#endif +# endif return 1; } -#ifndef MD32_REG_T -# if defined(__alpha) || defined(__sparcv9) || defined(__mips) -# define MD32_REG_T long +# 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, @@ -266,13 +270,15 @@ int HASH_FINAL(unsigned char *md, HASH_CTX *c) * Well, to be honest it should say that this *prevents* * performance degradation. */ -# else +# 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 +# define MD32_REG_T int +# endif # endif + #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/modes.h b/deps/openssl/android/x86_64/usr/local/include/crypto/modes.h index 573e1197..d03ca83d 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/modes.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/modes.h @@ -138,6 +138,12 @@ struct gcm128_context { #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. @@ -149,6 +155,12 @@ struct xts128_context { 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]; diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs12err.h b/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs12err.h index 662f412e..114971c6 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs12err.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/pkcs12err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/punycode.h b/deps/openssl/android/x86_64/usr/local/include/crypto/punycode.h index 4c6e49f5..2e1c85c1 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/punycode.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/punycode.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -22,6 +22,4 @@ int ossl_punycode_decode ( int ossl_a2ulabel(const char *in, char *out, size_t outlen); -int ossl_a2ucompare(const char *a, const char *u); - #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/rand.h b/deps/openssl/android/x86_64/usr/local/include/crypto/rand.h index 215b3b7a..d375c2f9 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/rand.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/rand.h @@ -140,4 +140,15 @@ 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/x86_64/usr/local/include/crypto/riscv_arch.h b/deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.h index 89a40bea..95185841 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/riscv_arch.h @@ -1,5 +1,5 @@ /* - * Copyright 2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -56,4 +56,9 @@ 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/x86_64/usr/local/include/crypto/rsa.h b/deps/openssl/android/x86_64/usr/local/include/crypto/rsa.h index 949873d0..8eddc168 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/rsa.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/rsa.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -34,8 +34,6 @@ int ossl_rsa_pss_params_30_copy(RSA_PSS_PARAMS_30 *to, int ossl_rsa_pss_params_30_is_unrestricted(const RSA_PSS_PARAMS_30 *rsa_pss_params); int ossl_rsa_pss_params_30_set_hashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, int hashalg_nid); -int ossl_rsa_pss_params_30_set_maskgenalg(RSA_PSS_PARAMS_30 *rsa_pss_params, - int maskgenalg_nid); int ossl_rsa_pss_params_30_set_maskgenhashalg(RSA_PSS_PARAMS_30 *rsa_pss_params, int maskgenhashalg_nid); int ossl_rsa_pss_params_30_set_saltlen(RSA_PSS_PARAMS_30 *rsa_pss_params, @@ -83,6 +81,10 @@ 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, diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/sha.h b/deps/openssl/android/x86_64/usr/local/include/crypto/sha.h index 64305d17..99bcf0ff 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/sha.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/sha.h @@ -1,5 +1,5 @@ /* - * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -14,6 +14,7 @@ # 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/sm4_platform.h b/deps/openssl/android/x86_64/usr/local/include/crypto/sm4_platform.h index 6cc1dfa5..cc4f5142 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/sm4_platform.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/sm4_platform.h @@ -12,7 +12,7 @@ # pragma once # if defined(OPENSSL_CPUID_OBJ) -# if defined(__aarch64__) +# if defined(__aarch64__) || defined (_M_ARM64) # include "arm_arch.h" extern unsigned int OPENSSL_arm_midr; static inline int vpsm4_capable(void) @@ -21,8 +21,14 @@ static inline int vpsm4_capable(void) (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 @@ -53,7 +59,7 @@ void HWSM4_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out, const unsigned char ivec[16]); # endif /* HWSM4_CAPABLE */ -#ifdef VPSM4_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, @@ -69,7 +75,37 @@ void vpsm4_ecb_encrypt(const unsigned char *in, unsigned char *out, 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/x86_64/usr/local/include/crypto/store.h b/deps/openssl/android/x86_64/usr/local/include/crypto/store.h index 5645fc92..9b7be71a 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/store.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/store.h @@ -1,5 +1,5 @@ /* - * Copyright 2016-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/x509.h b/deps/openssl/android/x86_64/usr/local/include/crypto/x509.h index 631150b7..5765b9f7 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/x509.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/x509.h @@ -278,6 +278,8 @@ struct x509_store_ctx_st { /* X509_STORE_CTX */ SSL_DANE *dane; /* signed via bare TA public key, rather than CA certificate */ int bare_ta_signed; + /* Raw Public Key */ + EVP_PKEY *rpk; OSSL_LIB_CTX *libctx; char *propq; @@ -309,7 +311,7 @@ struct x509_object_st { }; int ossl_a2i_ipadd(unsigned char *ipout, const char *ipasc); -int ossl_x509_set1_time(ASN1_TIME **ptm, const ASN1_TIME *tm); +int ossl_x509_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); @@ -334,7 +336,8 @@ int ossl_x509_PUBKEY_get0_libctx(OSSL_LIB_CTX **plibctx, const char **ppropq, 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); + 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); @@ -364,6 +367,7 @@ 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/crypto/x509err.h b/deps/openssl/android/x86_64/usr/local/include/crypto/x509err.h index 0a67975b..c7c7d25e 100644 --- a/deps/openssl/android/x86_64/usr/local/include/crypto/x509err.h +++ b/deps/openssl/android/x86_64/usr/local/include/crypto/x509err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 2020-2023 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/asn1.h b/deps/openssl/android/x86_64/usr/local/include/internal/asn1.h index 3143e340..36dbe0fc 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/asn1.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/asn1.h @@ -11,6 +11,8 @@ # 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/x86_64/usr/local/include/internal/bio.h b/deps/openssl/android/x86_64/usr/local/include/internal/bio.h index 547a73d0..9481f4c9 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/bio.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/bio.h @@ -27,6 +27,8 @@ struct bio_method_st { 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); @@ -41,16 +43,20 @@ int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); # 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) \ @@ -63,6 +69,8 @@ int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); 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) @@ -70,6 +78,8 @@ int bread_conv(BIO *bio, char *data, size_t datal, size_t *read); 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/bio_addr.h b/deps/openssl/android/x86_64/usr/local/include/internal/bio_addr.h new file mode 100644 index 00000000..a6449b7e --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/bio_addr.h @@ -0,0 +1,29 @@ +/* + * 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/x86_64/usr/local/include/internal/bio_tfo.h b/deps/openssl/android/x86_64/usr/local/include/internal/bio_tfo.h new file mode 100644 index 00000000..64c0d4c3 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/bio_tfo.h @@ -0,0 +1,151 @@ +/* + * 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/x86_64/usr/local/include/internal/common.h b/deps/openssl/android/x86_64/usr/local/include/internal/common.h new file mode 100644 index 00000000..15666f11 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/common.h @@ -0,0 +1,217 @@ +/* + * 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/x86_64/usr/local/include/internal/comp.h b/deps/openssl/android/x86_64/usr/local/include/internal/comp.h index 3ad86fc7..c48c29d5 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/comp.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/comp.h @@ -10,3 +10,5 @@ #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/x86_64/usr/local/include/internal/cryptlib.h b/deps/openssl/android/x86_64/usr/local/include/internal/cryptlib.h index ac50eb3b..64851fd8 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/cryptlib.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/cryptlib.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -11,9 +11,6 @@ # define OSSL_INTERNAL_CRYPTLIB_H # pragma once -# include -# include - # ifdef OPENSSL_USE_APPLINK # define BIO_FLAGS_UPLINK_INTERNAL 0x8000 # include "ms/uplink.h" @@ -21,39 +18,13 @@ # define BIO_FLAGS_UPLINK_INTERNAL 0 # endif +# include "internal/common.h" + # include # include # include # include # include -# include "internal/nelem.h" - -#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 - -/* - * Use this inside a union with the field that needs to be aligned to a - * reasonable boundary for the platform. The most pessimistic alignment - * of the listed types will be used by the compiler. - */ -# define OSSL_UNION_ALIGN \ - double align; \ - ossl_uintmax_t align_int; \ - void *align_ptr typedef struct ex_callback_st EX_CALLBACK; DEFINE_STACK_OF(EX_CALLBACK) @@ -61,30 +32,6 @@ DEFINE_STACK_OF(EX_CALLBACK) typedef struct mem_st MEM; DEFINE_LHASH_OF_EX(MEM); -# 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) - void OPENSSL_cpuid_setup(void); #if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \ defined(__x86_64) || defined(__x86_64__) || \ @@ -168,7 +115,9 @@ typedef struct ossl_ex_data_global_st { # define OSSL_LIB_CTX_PROVIDER_CONF_INDEX 16 # define OSSL_LIB_CTX_BIO_CORE_INDEX 17 # define OSSL_LIB_CTX_CHILD_PROVIDER_INDEX 18 -# define OSSL_LIB_CTX_MAX_INDEXES 19 +# 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); @@ -211,34 +160,4 @@ char *ossl_buf2hexstr_sep(const unsigned char *buf, long buflen, char sep); unsigned char *ossl_hexstr2buf_sep(const char *str, long *buflen, const char sep); -static ossl_inline int ossl_ends_with_dirsep(const char *path) -{ - if (*path != '\0') - path += strlen(path) - 1; -# if defined __VMS - if (*path == ']' || *path == '>' || *path == ':') - return 1; -# elif defined _WIN32 - if (*path == '\\') - return 1; -# endif - return *path == '/'; -} - -static ossl_inline int ossl_is_absolute_path(const char *path) -{ -# if defined __VMS - if (strchr(path, ':') != NULL - || ((path[0] == '[' || path[0] == '<') - && path[1] != '.' && path[1] != '-' - && path[1] != ']' && path[1] != '>')) - return 1; -# elif defined _WIN32 - if (path[0] == '\\' - || (path[0] != '\0' && path[1] == ':')) - return 1; -# endif - return path[0] == '/'; -} - #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/der.h b/deps/openssl/android/x86_64/usr/local/include/internal/der.h index f23fabc2..8d6db8f0 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/der.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/der.h @@ -7,8 +7,12 @@ * https://www.openssl.org/source/license.html */ -#include -#include "internal/packet.h" +#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. @@ -22,42 +26,42 @@ * 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 +# 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 +# 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 +# define DER_C_UNIVERSAL 0x00 +# define DER_C_APPLICATION 0x40 +# define DER_C_CONTEXT 0x80 +# define DER_C_PRIVATE 0xC0 /* * Run-time constructors. @@ -67,7 +71,7 @@ */ /* This can be used for all items that don't have a context */ -#define DER_NO_CONTEXT -1 +# define DER_NO_CONTEXT -1 int ossl_DER_w_precompiled(WPACKET *pkt, int tag, const unsigned char *precompiled, @@ -86,3 +90,5 @@ int ossl_DER_w_octet_string_uint32(WPACKET *pkt, int tag, uint32_t value); */ 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/x86_64/usr/local/include/internal/deterministic_nonce.h b/deps/openssl/android/x86_64/usr/local/include/internal/deterministic_nonce.h new file mode 100644 index 00000000..5f0313fe --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/deterministic_nonce.h @@ -0,0 +1,24 @@ +/* + * 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/x86_64/usr/local/include/internal/e_os.h b/deps/openssl/android/x86_64/usr/local/include/internal/e_os.h index 7fdc3899..d1ed62e8 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/e_os.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/e_os.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -143,7 +143,7 @@ static __inline unsigned int _strlen31(const char *str) # undef stdin # undef stdout # undef stderr -FILE *__iob_func(); +FILE *__iob_func(void); # define stdin (&__iob_func()[0]) # define stdout (&__iob_func()[1]) # define stderr (&__iob_func()[2]) @@ -249,7 +249,7 @@ FILE *__iob_func(); /***********************************************/ # if defined(OPENSSL_SYS_WINDOWS) -# if (_MSC_VER >= 1310) && !defined(_WIN32_WCE) +# if defined(_MSC_VER) && (_MSC_VER >= 1310) && !defined(_WIN32_WCE) # define open _open # define fdopen _fdopen # define close _close @@ -286,54 +286,6 @@ struct servent *getservbyname(const char *name, const char *proto); # endif /* end vxworks */ -/* system-specific variants defining ossl_sleep() */ -#if defined(OPENSSL_SYS_UNIX) || defined(__DJGPP__) -# include -static ossl_inline void ossl_sleep(unsigned long millis) -{ -# ifdef OPENSSL_SYS_VXWORKS - struct timespec ts; - ts.tv_sec = (long int) (millis / 1000); - ts.tv_nsec = (long int) (millis % 1000) * 1000000ul; - nanosleep(&ts, NULL); -# elif defined(__TANDEM) -# if !defined(_REENTRANT) -# include - /* HPNS does not support usleep for non threaded apps */ - PROCESS_DELAY_(millis * 1000); -# elif defined(_SPT_MODEL_) -# include -# include - usleep(millis * 1000); -# else - usleep(millis * 1000); -# endif -# else - usleep(millis * 1000); -# endif -} -#elif defined(_WIN32) -# include -static ossl_inline void ossl_sleep(unsigned long millis) -{ - Sleep(millis); -} -#else -/* Fallback to a busy wait */ -static ossl_inline void ossl_sleep(unsigned long millis) -{ - struct timeval start, now; - unsigned long elapsedms; - - gettimeofday(&start, NULL); - do { - gettimeofday(&now, NULL); - elapsedms = (((now.tv_sec - start.tv_sec) * 1000000) - + now.tv_usec - start.tv_usec) / 1000; - } while (elapsedms < millis); -} -#endif /* defined OPENSSL_SYS_UNIX */ - /* ----------------------------- HP NonStop -------------------------------- */ /* Required to support platform variant without getpid() and pid_t. */ # if defined(__TANDEM) && defined(_GUARDIAN_TARGET) @@ -343,12 +295,12 @@ static ossl_inline void ossl_sleep(unsigned long millis) # define gethostbyname(name) gethostbyname((char*)name) # define ioctlsocket(a,b,c) ioctl(a,b,c) # ifdef NO_GETPID -inline int nssgetpid(); +inline int nssgetpid(void); # ifndef NSSGETPID_MACRO # define NSSGETPID_MACRO # include # include - inline int nssgetpid() + inline int nssgetpid(void) { short phandle[10]={0}; union pseudo_pid { diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/endian.h b/deps/openssl/android/x86_64/usr/local/include/internal/endian.h index 8b34e03e..7d5a73b1 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/endian.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/endian.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -12,7 +12,7 @@ # pragma once /* - * IS_LITTLE_ENDIAN and IS_BIG_ENDIAN can be used to detect the endiannes + * 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. * diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/event_queue.h b/deps/openssl/android/x86_64/usr/local/include/internal/event_queue.h new file mode 100644 index 00000000..bda1ee6a --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/event_queue.h @@ -0,0 +1,163 @@ +/* + * 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/x86_64/usr/local/include/internal/ffc.h b/deps/openssl/android/x86_64/usr/local/include/internal/ffc.h index c4f09087..edd8381e 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/ffc.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/ffc.h @@ -58,8 +58,11 @@ # define FFC_CHECK_INVALID_Q_VALUE 0x00020 # define FFC_CHECK_INVALID_J_VALUE 0x00040 -# define FFC_CHECK_BAD_LN_PAIR 0x00080 -# define FFC_CHECK_INVALID_SEED_SIZE 0x00100 +/* + * 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 @@ -68,6 +71,8 @@ # 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 @@ -132,7 +137,7 @@ void ossl_ffc_params_set_h(FFC_PARAMS *params, int index); void ossl_ffc_params_set_flags(FFC_PARAMS *params, unsigned int flags); void ossl_ffc_params_enable_flags(FFC_PARAMS *params, unsigned int flags, int enable); -int ossl_ffc_set_digest(FFC_PARAMS *params, const char *alg, const char *props); +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, diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/hpke_util.h b/deps/openssl/android/x86_64/usr/local/include/internal/hpke_util.h new file mode 100644 index 00000000..e1da5e05 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/hpke_util.h @@ -0,0 +1,100 @@ +/* + * 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/x86_64/usr/local/include/internal/ktls.h b/deps/openssl/android/x86_64/usr/local/include/internal/ktls.h index 95492fd0..af27a325 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/ktls.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/ktls.h @@ -1,5 +1,5 @@ /* - * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -40,6 +40,11 @@ # 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; @@ -209,6 +214,13 @@ static ossl_inline ossl_ssize_t ktls_sendfile(int s, int fd, off_t off, # 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 @@ -288,6 +300,18 @@ static ossl_inline int ktls_start(int fd, ktls_crypto_info_t *crypto_info, 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. diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/list.h b/deps/openssl/android/x86_64/usr/local/include/internal/list.h new file mode 100644 index 00000000..fdd356c4 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/list.h @@ -0,0 +1,169 @@ +/* + * 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/x86_64/usr/local/include/internal/namemap.h b/deps/openssl/android/x86_64/usr/local/include/internal/namemap.h index fd36883f..6c42a9cd 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/namemap.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/namemap.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/numbers.h b/deps/openssl/android/x86_64/usr/local/include/internal/numbers.h index 4f4d3306..47fb1677 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/numbers.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/numbers.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -61,6 +61,31 @@ # 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; diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/packet.h b/deps/openssl/android/x86_64/usr/local/include/internal/packet.h index ed761720..7abc6b8b 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/packet.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/packet.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -691,6 +691,8 @@ struct wpacket_st { */ #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 diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/packet_quic.h b/deps/openssl/android/x86_64/usr/local/include/internal/packet_quic.h new file mode 100644 index 00000000..5173b467 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/packet_quic.h @@ -0,0 +1,150 @@ +/* + * 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/x86_64/usr/local/include/internal/param_build_set.h b/deps/openssl/android/x86_64/usr/local/include/internal/param_build_set.h index 126211b7..3518f008 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/param_build_set.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/param_build_set.h @@ -1,5 +1,5 @@ /* - * Copyright 2020-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -39,6 +39,11 @@ 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/param_names.h b/deps/openssl/android/x86_64/usr/local/include/internal/param_names.h new file mode 100644 index 00000000..e721d071 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/param_names.h @@ -0,0 +1,376 @@ +/* + * 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/x86_64/usr/local/include/internal/param_names.h.in b/deps/openssl/android/x86_64/usr/local/include/internal/param_names.h.in new file mode 100644 index 00000000..f34db219 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/param_names.h.in @@ -0,0 +1,18 @@ +/* + * {- 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/x86_64/usr/local/include/internal/params.h b/deps/openssl/android/x86_64/usr/local/include/internal/params.h new file mode 100644 index 00000000..3fbd0cf9 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/params.h @@ -0,0 +1,38 @@ +/* + * 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/x86_64/usr/local/include/internal/priority_queue.h b/deps/openssl/android/x86_64/usr/local/include/internal/priority_queue.h new file mode 100644 index 00000000..5be03bf1 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/priority_queue.h @@ -0,0 +1,88 @@ +/* + * 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/x86_64/usr/local/include/internal/property.h b/deps/openssl/android/x86_64/usr/local/include/internal/property.h index d09274d0..3adff499 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/property.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/property.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/provider.h b/deps/openssl/android/x86_64/usr/local/include/internal/provider.h index 18937f84..ab41d643 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/provider.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/provider.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -32,7 +32,7 @@ OSSL_PROVIDER *ossl_provider_find(OSSL_LIB_CTX *libctx, const char *name, int noconfig); OSSL_PROVIDER *ossl_provider_new(OSSL_LIB_CTX *libctx, const char *name, OSSL_provider_init_fn *init_function, - int noconfig); + OSSL_PARAM *params, int noconfig); int ossl_provider_up_ref(OSSL_PROVIDER *prov); void ossl_provider_free(OSSL_PROVIDER *prov); diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/quic_ackm.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_ackm.h new file mode 100644 index 00000000..03fc6088 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_ackm.h @@ -0,0 +1,297 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_cc.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_cc.h new file mode 100644 index 00000000..60c710b0 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_cc.h @@ -0,0 +1,219 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_cfq.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_cfq.h new file mode 100644 index 00000000..22c436dc --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_cfq.h @@ -0,0 +1,154 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_channel.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_channel.h new file mode 100644 index 00000000..f46db063 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_channel.h @@ -0,0 +1,429 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_demux.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_demux.h new file mode 100644 index 00000000..444249e7 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_demux.h @@ -0,0 +1,364 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_error.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_error.h new file mode 100644 index 00000000..ae195a5f --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_error.h @@ -0,0 +1,56 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_fc.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_fc.h new file mode 100644 index 00000000..49b448a3 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_fc.h @@ -0,0 +1,277 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_fifd.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_fifd.h new file mode 100644 index 00000000..a260ec44 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_fifd.h @@ -0,0 +1,80 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_reactor.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_reactor.h new file mode 100644 index 00000000..57bb551e --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_reactor.h @@ -0,0 +1,188 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_record_rx.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_record_rx.h new file mode 100644 index 00000000..e26fd356 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_record_rx.h @@ -0,0 +1,569 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_record_tx.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_record_tx.h new file mode 100644 index 00000000..f3b798fe --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_record_tx.h @@ -0,0 +1,383 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_record_util.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_record_util.h new file mode 100644 index 00000000..97e630d9 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_record_util.h @@ -0,0 +1,116 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_rx_depack.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_rx_depack.h new file mode 100644 index 00000000..c90964a7 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_rx_depack.h @@ -0,0 +1,21 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_sf_list.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_sf_list.h new file mode 100644 index 00000000..8ed1dcb1 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_sf_list.h @@ -0,0 +1,151 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_ssl.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_ssl.h new file mode 100644 index 00000000..52d4527c --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_ssl.h @@ -0,0 +1,132 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_statm.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_statm.h new file mode 100644 index 00000000..5b33551b --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_statm.h @@ -0,0 +1,40 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_stream.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_stream.h new file mode 100644 index 00000000..0da8febd --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_stream.h @@ -0,0 +1,429 @@ +/* +* 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/x86_64/usr/local/include/internal/quic_stream_map.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_stream_map.h new file mode 100644 index 00000000..ae749061 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_stream_map.h @@ -0,0 +1,878 @@ +/* +* 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/x86_64/usr/local/include/internal/quic_thread_assist.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_thread_assist.h new file mode 100644 index 00000000..592c2ffa --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_thread_assist.h @@ -0,0 +1,102 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_tls.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_tls.h new file mode 100644 index 00000000..0e4a9d33 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_tls.h @@ -0,0 +1,106 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_tserver.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_tserver.h new file mode 100644 index 00000000..4f358dd4 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_tserver.h @@ -0,0 +1,220 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_txp.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_txp.h new file mode 100644 index 00000000..ae508f23 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_txp.h @@ -0,0 +1,209 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_txpim.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_txpim.h new file mode 100644 index 00000000..ed6e3875 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_txpim.h @@ -0,0 +1,133 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_types.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_types.h new file mode 100644 index 00000000..d42164ba --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_types.h @@ -0,0 +1,116 @@ +/* + * 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/x86_64/usr/local/include/internal/quic_vlint.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_vlint.h new file mode 100644 index 00000000..d4b70b22 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_vlint.h @@ -0,0 +1,127 @@ +/* +* 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/x86_64/usr/local/include/internal/quic_wire.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_wire.h new file mode 100644 index 00000000..cd01feb0 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_wire.h @@ -0,0 +1,784 @@ +/* +* 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/x86_64/usr/local/include/internal/quic_wire_pkt.h b/deps/openssl/android/x86_64/usr/local/include/internal/quic_wire_pkt.h new file mode 100644 index 00000000..18a483fc --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/quic_wire_pkt.h @@ -0,0 +1,629 @@ +/* + * 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/x86_64/usr/local/include/internal/recordmethod.h b/deps/openssl/android/x86_64/usr/local/include/internal/recordmethod.h new file mode 100644 index 00000000..53bd4ca6 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/recordmethod.h @@ -0,0 +1,339 @@ +/* + * 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/x86_64/usr/local/include/internal/refcount.h b/deps/openssl/android/x86_64/usr/local/include/internal/refcount.h index 3392d3b4..4c9ab266 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/refcount.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/refcount.h @@ -12,6 +12,7 @@ # include # include +# include # if defined(OPENSSL_THREADS) && !defined(OPENSSL_DEV_NO_ATOMICS) # if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ @@ -25,12 +26,13 @@ # define HAVE_ATOMICS 1 -typedef _Atomic int CRYPTO_REF_COUNT; +typedef struct { + _Atomic int val; +} CRYPTO_REF_COUNT; -static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, - ossl_unused void *lock) +static inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = atomic_fetch_add_explicit(val, 1, memory_order_relaxed) + 1; + *ret = atomic_fetch_add_explicit(&refcnt->val, 1, memory_order_relaxed) + 1; return 1; } @@ -44,50 +46,70 @@ static inline int CRYPTO_UP_REF(_Atomic int *val, int *ret, * to mutable members doesn't have to be serialized anymore, which would * otherwise imply an acquire fence. Hence conditional acquire fence... */ -static inline int CRYPTO_DOWN_REF(_Atomic int *val, int *ret, - ossl_unused void *lock) +static inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = atomic_fetch_sub_explicit(val, 1, memory_order_relaxed) - 1; + *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 int CRYPTO_REF_COUNT; +typedef struct { + int val; +} CRYPTO_REF_COUNT; -static __inline__ int CRYPTO_UP_REF(int *val, int *ret, ossl_unused void *lock) +static __inline__ int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = __atomic_fetch_add(val, 1, __ATOMIC_RELAXED) + 1; + *ret = __atomic_fetch_add(&refcnt->val, 1, __ATOMIC_RELAXED) + 1; return 1; } -static __inline__ int CRYPTO_DOWN_REF(int *val, int *ret, - ossl_unused void *lock) +static __inline__ int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = __atomic_fetch_sub(val, 1, __ATOMIC_RELAXED) - 1; + *ret = __atomic_fetch_sub(&refcnt->val, 1, __ATOMIC_RELAXED) - 1; if (*ret == 0) __atomic_thread_fence(__ATOMIC_ACQUIRE); return 1; } -# elif defined(__ICL) && defined(_WIN32) -# define HAVE_ATOMICS 1 -typedef volatile int CRYPTO_REF_COUNT; -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline__ int CRYPTO_GET_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd((void *)val, 1) + 1; + *ret = __atomic_load_n(&refcnt->val, __ATOMIC_RELAXED); return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, - ossl_unused void *lock) +# 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 *)val, -1) - 1; + *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; } @@ -95,7 +117,9 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, # define HAVE_ATOMICS 1 -typedef volatile int CRYPTO_REF_COUNT; +typedef struct { + volatile int val; +} CRYPTO_REF_COUNT; # if (defined(_M_ARM) && _M_ARM>=7 && !defined(_WIN32_WCE)) || defined(_M_ARM64) # include @@ -103,21 +127,26 @@ typedef volatile int CRYPTO_REF_COUNT; # define _ARM_BARRIER_ISH _ARM64_BARRIER_ISH # endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd_nf(val, 1) + 1; + *ret = _InterlockedExchangeAdd_nf(&refcnt->val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd_nf(val, -1) - 1; + *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) @@ -131,19 +160,24 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, # endif # endif -static __inline int CRYPTO_UP_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_UP_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd(val, 1) + 1; + *ret = _InterlockedExchangeAdd(&refcnt->val, 1) + 1; return 1; } -static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, - ossl_unused void *lock) +static __inline int CRYPTO_DOWN_REF(CRYPTO_REF_COUNT *refcnt, int *ret) { - *ret = _InterlockedExchangeAdd(val, -1) - 1; + *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 @@ -156,13 +190,92 @@ static __inline int CRYPTO_DOWN_REF(volatile int *val, int *ret, */ # ifndef HAVE_ATOMICS -typedef int CRYPTO_REF_COUNT; +typedef struct { + int val; +# ifdef OPENSSL_THREADS + CRYPTO_RWLOCK *lock; +# endif +} CRYPTO_REF_COUNT; -# define CRYPTO_UP_REF(val, ret, lock) CRYPTO_atomic_add(val, 1, ret, lock) -# define CRYPTO_DOWN_REF(val, ret, lock) CRYPTO_atomic_add(val, -1, ret, lock) +# 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) @@ -173,6 +286,6 @@ typedef int CRYPTO_REF_COUNT; # define REF_PRINT_EX(text, count, object) \ OSSL_TRACE3(REF_COUNT, "%p:%4d:%s\n", (object), (count), (text)); # define REF_PRINT_COUNT(text, object) \ - REF_PRINT_EX(text, object->references, (void *)object) + REF_PRINT_EX(text, object->references.val, (void *)object) #endif diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/ring_buf.h b/deps/openssl/android/x86_64/usr/local/include/internal/ring_buf.h new file mode 100644 index 00000000..436f1ca1 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/ring_buf.h @@ -0,0 +1,277 @@ +/* + * 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/x86_64/usr/local/include/internal/safe_math.h b/deps/openssl/android/x86_64/usr/local/include/internal/safe_math.h new file mode 100644 index 00000000..be37e6ab --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/safe_math.h @@ -0,0 +1,443 @@ +/* + * 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/x86_64/usr/local/include/internal/sockets.h b/deps/openssl/android/x86_64/usr/local/include/internal/sockets.h index 1f5fefcc..2550c56b 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/sockets.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/sockets.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -61,7 +61,25 @@ struct servent *PASCAL getservbyname(const char *, const char *); # 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 @@ -71,6 +89,9 @@ struct servent *PASCAL getservbyname(const char *, const char *); # 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 @@ -95,6 +116,13 @@ struct servent *PASCAL getservbyname(const char *, const char *); # include # endif +# ifdef OPENSSL_SYS_UNIX +# ifndef OPENSSL_SYS_TANDEM +# include +# endif +# include +# endif + # ifndef VMS # include # else @@ -136,12 +164,15 @@ struct servent *PASCAL getservbyname(const char *, const char *); # 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__) diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/ssl.h b/deps/openssl/android/x86_64/usr/local/include/internal/ssl.h new file mode 100644 index 00000000..8a0c7974 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/ssl.h @@ -0,0 +1,24 @@ +/* + * 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/x86_64/usr/local/include/internal/ssl3_cbc.h b/deps/openssl/android/x86_64/usr/local/include/internal/ssl3_cbc.h new file mode 100644 index 00000000..4fb5da19 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/ssl3_cbc.h @@ -0,0 +1,40 @@ +/* + * 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/x86_64/usr/local/include/internal/statem.h b/deps/openssl/android/x86_64/usr/local/include/internal/statem.h new file mode 100644 index 00000000..136e6523 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/statem.h @@ -0,0 +1,171 @@ +/* + * 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/x86_64/usr/local/include/internal/thread.h b/deps/openssl/android/x86_64/usr/local/include/internal/thread.h new file mode 100644 index 00000000..8c5bad77 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/thread.h @@ -0,0 +1,39 @@ +/* + * 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/x86_64/usr/local/include/internal/thread_arch.h b/deps/openssl/android/x86_64/usr/local/include/internal/thread_arch.h new file mode 100644 index 00000000..1bfc0ebb --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/thread_arch.h @@ -0,0 +1,127 @@ +/* + * 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/x86_64/usr/local/include/internal/time.h b/deps/openssl/android/x86_64/usr/local/include/internal/time.h new file mode 100644 index 00000000..14d724ab --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/time.h @@ -0,0 +1,242 @@ +/* + * 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/x86_64/usr/local/include/internal/tlsgroups.h b/deps/openssl/android/x86_64/usr/local/include/internal/tlsgroups.h index 8a35ced1..73fb53bc 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/tlsgroups.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/tlsgroups.h @@ -41,6 +41,16 @@ # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/tsan_assist.h b/deps/openssl/android/x86_64/usr/local/include/internal/tsan_assist.h index 17205d10..a840df0b 100644 --- a/deps/openssl/android/x86_64/usr/local/include/internal/tsan_assist.h +++ b/deps/openssl/android/x86_64/usr/local/include/internal/tsan_assist.h @@ -47,33 +47,37 @@ * can use TSAN_QUALIFIER in cast specifically when it has to count. */ -#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L \ +#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 +# include -# if defined(ATOMIC_POINTER_LOCK_FREE) \ +# 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 +# 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) +# elif defined(__GNUC__) && defined(__ATOMIC_RELAXED) -# if defined(__GCC_ATOMIC_POINTER_LOCK_FREE) \ +# 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 +# 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 \ +# 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))) /* @@ -87,62 +91,63 @@ * 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) \ +# 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)) \ +# 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) __iso_volatile_load32(ptr) -# define tsan_store(ptr, val) __iso_volatile_store32((ptr), (val)) +# define tsan_load(ptr) (*(ptr)) +# define tsan_store(ptr, val) (*(ptr) = (val)) # endif -# else +# 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)) -# 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)) +# 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 - -#define tsan_counter(ptr) tsan_add((ptr), 1) -#define tsan_decr(ptr) tsan_add((ptr), -1) - diff --git a/deps/openssl/android/x86_64/usr/local/include/internal/uint_set.h b/deps/openssl/android/x86_64/usr/local/include/internal/uint_set.h new file mode 100644 index 00000000..dcb29b33 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/internal/uint_set.h @@ -0,0 +1,63 @@ +/* + * 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/x86_64/usr/local/include/openssl/asn1.h b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h index 85ae8d58..09712345 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/asn1.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -158,7 +158,7 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_ALGOR, X509_ALGOR, X509_ALGOR) -# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +# 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 @@ -999,6 +999,8 @@ 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h.in index d478bc96..798b2211 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/asn1.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -135,7 +135,7 @@ extern "C" { -} -# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */ +# 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 @@ -832,6 +832,8 @@ 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/async.h b/deps/openssl/android/x86_64/usr/local/include/openssl/async.h index bc27d5db..826ffb99 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/async.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/async.h @@ -1,5 +1,5 @@ /* - * Copyright 2015-2018 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -80,6 +80,14 @@ int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key); 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h b/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h index e16cf622..ea584def 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/bio.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -67,6 +67,8 @@ extern "C" { # 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 @@ -171,6 +173,30 @@ extern "C" { # 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) @@ -208,7 +234,7 @@ extern "C" { # define BIO_FLAGS_NONCLEAR_RST 0x400 # define BIO_FLAGS_IN_EOF 0x800 -/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ +/* 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; @@ -256,12 +282,14 @@ void BIO_clear_flags(BIO *b, int flags); # 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_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 @@ -362,6 +390,34 @@ struct bio_dgram_sctp_prinfo { }; # 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 */ @@ -428,10 +484,17 @@ struct bio_dgram_sctp_prinfo { # 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_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() */ @@ -452,7 +515,11 @@ struct bio_dgram_sctp_prinfo { # 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, \ @@ -469,6 +536,7 @@ struct bio_dgram_sctp_prinfo { (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 @@ -596,8 +664,30 @@ int BIO_ctrl_reset_read_request(BIO *b); (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)) @@ -640,10 +730,18 @@ 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); @@ -667,6 +765,9 @@ 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 @@ -686,6 +787,7 @@ 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); @@ -704,6 +806,7 @@ int BIO_dgram_sctp_msg_waiting(BIO *b); # ifndef OPENSSL_NO_SOCK int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); +int BIO_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); @@ -726,6 +829,8 @@ int BIO_hex_string(BIO *out, int indent, int width, const void *data, # 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 *); @@ -788,6 +893,7 @@ int BIO_sock_info(int sock, # 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); @@ -805,6 +911,11 @@ 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 @@ -856,18 +967,30 @@ 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 (*gets) (BIO *, char *, int)); + 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 *)); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h.in index c521e41e..418d1197 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/bio.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -68,6 +68,8 @@ extern "C" { # 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 @@ -172,6 +174,30 @@ extern "C" { # 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) @@ -209,7 +235,7 @@ extern "C" { # define BIO_FLAGS_NONCLEAR_RST 0x400 # define BIO_FLAGS_IN_EOF 0x800 -/* the BIO FLAGS values 0x1000 to 0x4000 are reserved for internal KTLS flags */ +/* 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; @@ -257,12 +283,14 @@ void BIO_clear_flags(BIO *b, int flags); # 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_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 @@ -339,6 +367,34 @@ struct bio_dgram_sctp_prinfo { }; # 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 */ @@ -405,10 +461,17 @@ struct bio_dgram_sctp_prinfo { # 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_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() */ @@ -429,7 +492,11 @@ struct bio_dgram_sctp_prinfo { # 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, \ @@ -446,6 +513,7 @@ struct bio_dgram_sctp_prinfo { (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 @@ -573,8 +641,30 @@ int BIO_ctrl_reset_read_request(BIO *b); (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)) @@ -617,10 +707,18 @@ 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); @@ -644,6 +742,9 @@ 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 @@ -663,6 +764,7 @@ 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); @@ -681,6 +783,7 @@ int BIO_dgram_sctp_msg_waiting(BIO *b); # ifndef OPENSSL_NO_SOCK int BIO_sock_should_retry(int i); int BIO_sock_non_fatal_error(int error); +int BIO_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); @@ -703,6 +806,8 @@ int BIO_hex_string(BIO *out, int indent, int width, const void *data, # 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 *); @@ -765,6 +870,7 @@ int BIO_sock_info(int sock, # 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); @@ -782,6 +888,11 @@ 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 @@ -833,18 +944,30 @@ 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 (*gets) (BIO *, char *, int)); + 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 *)); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/bioerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/bioerr.h index 787b30af..e4fdb649 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/bioerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/bioerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -37,14 +37,18 @@ # 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 @@ -53,6 +57,7 @@ # 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 @@ -61,5 +66,7 @@ # 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/x86_64/usr/local/include/openssl/bn.h b/deps/openssl/android/x86_64/usr/local/include/openssl/bn.h index 27b127a5..ea706dca 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/bn.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/bn.h @@ -241,12 +241,18 @@ 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h index 49825570..60beffd5 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h @@ -35,7 +35,9 @@ extern "C" { # endif -# define OSSL_CMP_PVNO 2 +# 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 { @@ -137,7 +139,6 @@ extern "C" { # 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) @@ -203,8 +204,8 @@ typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; # 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 @@ -378,18 +379,35 @@ 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_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 @@ -420,9 +438,11 @@ 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); @@ -432,7 +452,9 @@ void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); 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: */ @@ -454,6 +476,7 @@ int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, 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); @@ -477,6 +500,7 @@ 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); @@ -517,8 +541,10 @@ 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; @@ -590,6 +616,12 @@ int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h.in index fb5ae671..5bd8beb5 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cmp.h.in @@ -36,7 +36,9 @@ use OpenSSL::stackhash qw(generate_stack_macros); extern "C" { # endif -# define OSSL_CMP_PVNO 2 +# 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 { @@ -138,7 +140,6 @@ extern "C" { # 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) @@ -204,8 +205,8 @@ typedef ASN1_BIT_STRING OSSL_CMP_PKIFAILUREINFO; # 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 @@ -259,18 +260,35 @@ 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_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 @@ -301,9 +319,11 @@ 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); @@ -313,7 +333,9 @@ void *OSSL_CMP_CTX_get_transfer_cb_arg(const OSSL_CMP_CTX *ctx); 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: */ @@ -335,6 +357,7 @@ int OSSL_CMP_CTX_set1_extraCertsOut(OSSL_CMP_CTX *ctx, 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); @@ -358,6 +381,7 @@ 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); @@ -398,8 +422,10 @@ 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; @@ -471,6 +497,12 @@ int OSSL_CMP_try_certreq(OSSL_CMP_CTX *ctx, int req_type, 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cmperr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cmperr.h index 49fd5e39..57a6effb 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/cmperr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cmperr.h @@ -59,8 +59,11 @@ # 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 @@ -94,6 +97,7 @@ # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h index 3b453e6a..fe86a5c7 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/cms.h.in * - * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -31,8 +31,10 @@ 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; @@ -147,6 +149,8 @@ SKM_DEFINE_STACK_OF_INTERNAL(CMS_RevocationInfoChoice, CMS_RevocationInfoChoice, #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) @@ -217,13 +221,16 @@ 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 *ctx, + unsigned int flags, OSSL_LIB_CTX *libctx, const char *propq); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, @@ -233,27 +240,26 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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 *ctx, + 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 *ctx, + OSSL_LIB_CTX *libctx, const char *propq); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, @@ -272,7 +278,7 @@ CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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); @@ -291,12 +297,16 @@ int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); CMS_ContentInfo * -CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, +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 *ctx, + 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); @@ -385,6 +395,11 @@ 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, @@ -441,7 +456,7 @@ CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( unsigned char *id, int idlen, int allorfirst, STACK_OF(GENERAL_NAMES) *receiptList, STACK_OF(GENERAL_NAMES) *receiptsTo, - OSSL_LIB_CTX *ctx); + OSSL_LIB_CTX *libctx); int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h.in index da20ddf2..23966770 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cms.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 2008-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -32,8 +32,10 @@ use OpenSSL::stackhash qw(generate_stack_macros); 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; @@ -49,6 +51,8 @@ typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute; .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) @@ -119,13 +123,16 @@ 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 *ctx, + unsigned int flags, OSSL_LIB_CTX *libctx, const char *propq); CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, @@ -135,27 +142,26 @@ CMS_ContentInfo *CMS_sign_receipt(CMS_SignerInfo *si, int CMS_data(CMS_ContentInfo *cms, BIO *out, unsigned int flags); CMS_ContentInfo *CMS_data_create(BIO *in, unsigned int flags); CMS_ContentInfo *CMS_data_create_ex(BIO *in, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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 *ctx, + 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 *ctx, + OSSL_LIB_CTX *libctx, const char *propq); int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph, @@ -174,7 +180,7 @@ CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags); CMS_ContentInfo *CMS_encrypt_ex(STACK_OF(X509) *certs, BIO *in, const EVP_CIPHER *cipher, unsigned int flags, - OSSL_LIB_CTX *ctx, const char *propq); + 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); @@ -193,12 +199,16 @@ int CMS_RecipientInfo_type(CMS_RecipientInfo *ri); EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri); CMS_ContentInfo *CMS_AuthEnvelopedData_create(const EVP_CIPHER *cipher); CMS_ContentInfo * -CMS_AuthEnvelopedData_create_ex(const EVP_CIPHER *cipher, OSSL_LIB_CTX *ctx, +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 *ctx, + 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); @@ -287,6 +297,11 @@ 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, @@ -343,7 +358,7 @@ CMS_ReceiptRequest *CMS_ReceiptRequest_create0_ex( unsigned char *id, int idlen, int allorfirst, STACK_OF(GENERAL_NAMES) *receiptList, STACK_OF(GENERAL_NAMES) *receiptsTo, - OSSL_LIB_CTX *ctx); + OSSL_LIB_CTX *libctx); int CMS_add1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest *rr); void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr, diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/cmserr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/cmserr.h index f2d7708f..887035b1 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/cmserr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/cmserr.h @@ -86,6 +86,7 @@ # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/comp.h b/deps/openssl/android/x86_64/usr/local/include/openssl/comp.h index 06ff5810..f81ba0f3 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/comp.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/comp.h @@ -40,15 +40,20 @@ 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 -# ifdef ZLIB const BIO_METHOD *BIO_f_zlib(void); -# endif +const BIO_METHOD *BIO_f_brotli(void); +const BIO_METHOD *BIO_f_zstd(void); # endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/comperr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/comperr.h index 01dd3e6b..1948d37f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/comperr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/comperr.h @@ -23,9 +23,16 @@ /* * 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/x86_64/usr/local/include/openssl/conf.h b/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h index e8fcf315..61bb0087 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/conf.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h.in index 044b3eb5..56632870 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/conf.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h b/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h index 87e4c921..4e23c4a3 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h @@ -27,7 +27,7 @@ extern "C" { * OpenSSL was configured with the following options: */ -# define OPENSSL_CONFIGURED_API 30100 +# define OPENSSL_CONFIGURED_API 30200 # ifndef OPENSSL_RAND_SEED_OS # define OPENSSL_RAND_SEED_OS # endif @@ -46,6 +46,12 @@ extern "C" { # ifndef OPENSSL_NO_ASYNC # define OPENSSL_NO_ASYNC # 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 @@ -58,6 +64,9 @@ extern "C" { # 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_DEVCRYPTOENG # define OPENSSL_NO_DEVCRYPTOENG # endif @@ -127,6 +136,9 @@ extern "C" { # 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 @@ -145,6 +157,12 @@ extern "C" { # 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 @@ -160,6 +178,21 @@ extern "C" { # 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 @@ -181,6 +214,12 @@ extern "C" { # define RC4_INT unsigned 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h.in index b84dc1df..86077d0a 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/configuration.h.in @@ -62,6 +62,12 @@ extern "C" { # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/core.h b/deps/openssl/android/x86_64/usr/local/include/openssl/core.h index 9683ac70..18c19918 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/core.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/core.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -42,6 +42,9 @@ struct ossl_dispatch_st { void (*function)(void); }; +# define OSSL_DISPATCH_END \ + { 0, NULL } + /* * Other items, essentially an int<->pointer map element. * diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/core_dispatch.h b/deps/openssl/android/x86_64/usr/local/include/openssl/core_dispatch.h index 61d75a38..9b03f20c 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/core_dispatch.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/core_dispatch.h @@ -661,6 +661,14 @@ OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, keymgmt_export_types, 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 @@ -832,16 +840,24 @@ OSSL_CORE_MAKE_FUNC(const OSSL_PARAM *, asym_cipher_settable_ctx_params, # 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)) @@ -937,6 +953,8 @@ OSSL_CORE_MAKE_FUNC(int, decoder_export_object, #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, @@ -952,6 +970,12 @@ 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 } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h b/deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h index 0a6ec1bb..ffffe90f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h @@ -1,4 +1,7 @@ /* + * 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 @@ -7,6 +10,7 @@ * https://www.openssl.org/source/license.html */ + #ifndef OPENSSL_CORE_NAMES_H # define OPENSSL_CORE_NAMES_H # pragma once @@ -15,544 +19,454 @@ extern "C" { # endif -/* Well known parameter names that core passes to providers */ -#define OSSL_PROV_PARAM_CORE_VERSION "openssl-version" /* utf8_ptr */ -#define OSSL_PROV_PARAM_CORE_PROV_NAME "provider-name" /* utf8_ptr */ -#define OSSL_PROV_PARAM_CORE_MODULE_FILENAME "module-filename" /* utf8_ptr */ - -/* Well known parameter names that Providers can define */ -#define OSSL_PROV_PARAM_NAME "name" /* utf8_ptr */ -#define OSSL_PROV_PARAM_VERSION "version" /* utf8_ptr */ -#define OSSL_PROV_PARAM_BUILDINFO "buildinfo" /* utf8_ptr */ -#define OSSL_PROV_PARAM_STATUS "status" /* uint */ -#define OSSL_PROV_PARAM_SECURITY_CHECKS "security-checks" /* uint */ -#define OSSL_PROV_PARAM_TLS1_PRF_EMS_CHECK "tls1-prf-ems-check" /* uint */ -#define OSSL_PROV_PARAM_DRBG_TRUNC_DIGEST "drbg-no-trunc-md" /* uint */ - -/* Self test callback parameters */ -#define OSSL_PROV_PARAM_SELF_TEST_PHASE "st-phase" /* utf8_string */ -#define OSSL_PROV_PARAM_SELF_TEST_TYPE "st-type" /* utf8_string */ -#define OSSL_PROV_PARAM_SELF_TEST_DESC "st-desc" /* utf8_string */ - -/*- - * Provider-native object abstractions - * - * These are used when a provider wants to pass object data or an object - * reference back to libcrypto. This is only useful for provider functions - * that take a callback to which an OSSL_PARAM array with these parameters - * can be passed. - * - * This set of parameter names is explained in detail in provider-object(7) - * (doc/man7/provider-object.pod) - */ -#define OSSL_OBJECT_PARAM_TYPE "type" /* INTEGER */ -#define OSSL_OBJECT_PARAM_DATA_TYPE "data-type" /* UTF8_STRING */ -#define OSSL_OBJECT_PARAM_DATA_STRUCTURE "data-structure" /* UTF8_STRING */ -#define OSSL_OBJECT_PARAM_REFERENCE "reference" /* OCTET_STRING */ -#define OSSL_OBJECT_PARAM_DATA "data" /* OCTET_STRING or UTF8_STRING */ -#define OSSL_OBJECT_PARAM_DESC "desc" /* UTF8_STRING */ - -/* - * Algorithm parameters - * If "engine" or "properties" are specified, they should always be paired - * with the algorithm type. - * Note these are common names that are shared by many types (such as kdf, mac, - * and pkey) e.g: see OSSL_MAC_PARAM_DIGEST below. - */ -#define OSSL_ALG_PARAM_DIGEST "digest" /* utf8_string */ -#define OSSL_ALG_PARAM_CIPHER "cipher" /* utf8_string */ -#define OSSL_ALG_PARAM_ENGINE "engine" /* utf8_string */ -#define OSSL_ALG_PARAM_MAC "mac" /* utf8_string */ -#define OSSL_ALG_PARAM_PROPERTIES "properties"/* utf8_string */ - -/* cipher parameters */ -#define OSSL_CIPHER_PARAM_PADDING "padding" /* uint */ -#define OSSL_CIPHER_PARAM_USE_BITS "use-bits" /* uint */ -#define OSSL_CIPHER_PARAM_TLS_VERSION "tls-version" /* uint */ -#define OSSL_CIPHER_PARAM_TLS_MAC "tls-mac" /* octet_ptr */ -#define OSSL_CIPHER_PARAM_TLS_MAC_SIZE "tls-mac-size" /* size_t */ -#define OSSL_CIPHER_PARAM_MODE "mode" /* uint */ -#define OSSL_CIPHER_PARAM_BLOCK_SIZE "blocksize" /* size_t */ -#define OSSL_CIPHER_PARAM_AEAD "aead" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_CUSTOM_IV "custom-iv" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_CTS "cts" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK "tls-multi" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_HAS_RAND_KEY "has-randkey" /* int, 0 or 1 */ -#define OSSL_CIPHER_PARAM_KEYLEN "keylen" /* size_t */ -#define OSSL_CIPHER_PARAM_IVLEN "ivlen" /* size_t */ -#define OSSL_CIPHER_PARAM_IV "iv" /* octet_string OR octet_ptr */ -#define OSSL_CIPHER_PARAM_UPDATED_IV "updated-iv" /* octet_string OR octet_ptr */ -#define OSSL_CIPHER_PARAM_NUM "num" /* uint */ -#define OSSL_CIPHER_PARAM_ROUNDS "rounds" /* uint */ -#define OSSL_CIPHER_PARAM_AEAD_TAG "tag" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD "tlsaad" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_AAD_PAD "tlsaadpad" /* size_t */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_IV_FIXED "tlsivfixed" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_GET_IV_GEN "tlsivgen" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_TLS1_SET_IV_INV "tlsivinv" /* octet_string */ -#define OSSL_CIPHER_PARAM_AEAD_IVLEN OSSL_CIPHER_PARAM_IVLEN -#define OSSL_CIPHER_PARAM_AEAD_TAGLEN "taglen" /* size_t */ -#define OSSL_CIPHER_PARAM_AEAD_MAC_KEY "mackey" /* octet_string */ -#define OSSL_CIPHER_PARAM_RANDOM_KEY "randkey" /* octet_string */ -#define OSSL_CIPHER_PARAM_RC2_KEYBITS "keybits" /* size_t */ -#define OSSL_CIPHER_PARAM_SPEED "speed" /* uint */ -#define OSSL_CIPHER_PARAM_CTS_MODE "cts_mode" /* utf8_string */ -/* For passing the AlgorithmIdentifier parameter in DER form */ -#define OSSL_CIPHER_PARAM_ALGORITHM_ID_PARAMS "alg_id_param" /* octet_string */ - -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_SEND_FRAGMENT \ - "tls1multi_maxsndfrag" /* uint */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_MAX_BUFSIZE \ - "tls1multi_maxbufsz" /* size_t */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_INTERLEAVE \ - "tls1multi_interleave" /* uint */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD \ - "tls1multi_aad" /* octet_string */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_AAD_PACKLEN \ - "tls1multi_aadpacklen" /* uint */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC \ - "tls1multi_enc" /* octet_string */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_IN \ - "tls1multi_encin" /* octet_string */ -#define OSSL_CIPHER_PARAM_TLS1_MULTIBLOCK_ENC_LEN \ - "tls1multi_enclen" /* size_t */ - /* OSSL_CIPHER_PARAM_CTS_MODE Values */ -#define OSSL_CIPHER_CTS_MODE_CS1 "CS1" -#define OSSL_CIPHER_CTS_MODE_CS2 "CS2" -#define OSSL_CIPHER_CTS_MODE_CS3 "CS3" +# define OSSL_CIPHER_CTS_MODE_CS1 "CS1" +# define OSSL_CIPHER_CTS_MODE_CS2 "CS2" +# define OSSL_CIPHER_CTS_MODE_CS3 "CS3" -/* digest parameters */ -#define OSSL_DIGEST_PARAM_XOFLEN "xoflen" /* size_t */ -#define OSSL_DIGEST_PARAM_SSL3_MS "ssl3-ms" /* octet string */ -#define OSSL_DIGEST_PARAM_PAD_TYPE "pad-type" /* uint */ -#define OSSL_DIGEST_PARAM_MICALG "micalg" /* utf8 string */ -#define OSSL_DIGEST_PARAM_BLOCK_SIZE "blocksize" /* size_t */ -#define OSSL_DIGEST_PARAM_SIZE "size" /* size_t */ -#define OSSL_DIGEST_PARAM_XOF "xof" /* int, 0 or 1 */ -#define OSSL_DIGEST_PARAM_ALGID_ABSENT "algid-absent" /* int, 0 or 1 */ +/* Known 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_384 "SHA2-384" -#define OSSL_DIGEST_NAME_SHA2_512 "SHA2-512" -#define OSSL_DIGEST_NAME_SHA2_512_224 "SHA2-512/224" -#define OSSL_DIGEST_NAME_SHA2_512_256 "SHA2-512/256" -#define OSSL_DIGEST_NAME_MD2 "MD2" -#define OSSL_DIGEST_NAME_MD4 "MD4" -#define OSSL_DIGEST_NAME_MDC2 "MDC2" -#define OSSL_DIGEST_NAME_RIPEMD160 "RIPEMD160" -#define OSSL_DIGEST_NAME_SHA3_224 "SHA3-224" -#define OSSL_DIGEST_NAME_SHA3_256 "SHA3-256" -#define OSSL_DIGEST_NAME_SHA3_384 "SHA3-384" -#define OSSL_DIGEST_NAME_SHA3_512 "SHA3-512" -#define OSSL_DIGEST_NAME_KECCAK_KMAC128 "KECCAK-KMAC-128" -#define OSSL_DIGEST_NAME_KECCAK_KMAC256 "KECCAK-KMAC-256" -#define OSSL_DIGEST_NAME_SM3 "SM3" - -/* MAC parameters */ -#define OSSL_MAC_PARAM_KEY "key" /* octet string */ -#define OSSL_MAC_PARAM_IV "iv" /* octet string */ -#define OSSL_MAC_PARAM_CUSTOM "custom" /* utf8 string */ -#define OSSL_MAC_PARAM_SALT "salt" /* octet string */ -#define OSSL_MAC_PARAM_XOF "xof" /* int, 0 or 1 */ -#define OSSL_MAC_PARAM_DIGEST_NOINIT "digest-noinit" /* int, 0 or 1 */ -#define OSSL_MAC_PARAM_DIGEST_ONESHOT "digest-oneshot" /* int, 0 or 1 */ -#define OSSL_MAC_PARAM_C_ROUNDS "c-rounds" /* unsigned int */ -#define OSSL_MAC_PARAM_D_ROUNDS "d-rounds" /* unsigned int */ - -/* - * If "engine" or "properties" are specified, they should always be paired - * with "cipher" or "digest". - */ -#define OSSL_MAC_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ -#define OSSL_MAC_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ -#define OSSL_MAC_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ -#define OSSL_MAC_PARAM_SIZE "size" /* size_t */ -#define OSSL_MAC_PARAM_BLOCK_SIZE "block-size" /* size_t */ -#define OSSL_MAC_PARAM_TLS_DATA_SIZE "tls-data-size" /* size_t */ +# 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" - -/* KDF / PRF parameters */ -#define OSSL_KDF_PARAM_SECRET "secret" /* octet string */ -#define OSSL_KDF_PARAM_KEY "key" /* octet string */ -#define OSSL_KDF_PARAM_SALT "salt" /* octet string */ -#define OSSL_KDF_PARAM_PASSWORD "pass" /* octet string */ -#define OSSL_KDF_PARAM_PREFIX "prefix" /* octet string */ -#define OSSL_KDF_PARAM_LABEL "label" /* octet string */ -#define OSSL_KDF_PARAM_DATA "data" /* octet string */ -#define OSSL_KDF_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST /* utf8 string */ -#define OSSL_KDF_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ -#define OSSL_KDF_PARAM_MAC OSSL_ALG_PARAM_MAC /* utf8 string */ -#define OSSL_KDF_PARAM_MAC_SIZE "maclen" /* size_t */ -#define OSSL_KDF_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES /* utf8 string */ -#define OSSL_KDF_PARAM_ITER "iter" /* unsigned int */ -#define OSSL_KDF_PARAM_MODE "mode" /* utf8 string or int */ -#define OSSL_KDF_PARAM_PKCS5 "pkcs5" /* int */ -#define OSSL_KDF_PARAM_UKM "ukm" /* octet string */ -#define OSSL_KDF_PARAM_CEK_ALG "cekalg" /* utf8 string */ -#define OSSL_KDF_PARAM_SCRYPT_N "n" /* uint64_t */ -#define OSSL_KDF_PARAM_SCRYPT_R "r" /* uint32_t */ -#define OSSL_KDF_PARAM_SCRYPT_P "p" /* uint32_t */ -#define OSSL_KDF_PARAM_SCRYPT_MAXMEM "maxmem_bytes" /* uint64_t */ -#define OSSL_KDF_PARAM_INFO "info" /* octet string */ -#define OSSL_KDF_PARAM_SEED "seed" /* octet string */ -#define OSSL_KDF_PARAM_SSHKDF_XCGHASH "xcghash" /* octet string */ -#define OSSL_KDF_PARAM_SSHKDF_SESSION_ID "session_id" /* octet string */ -#define OSSL_KDF_PARAM_SSHKDF_TYPE "type" /* int */ -#define OSSL_KDF_PARAM_SIZE "size" /* size_t */ -#define OSSL_KDF_PARAM_CONSTANT "constant" /* octet string */ -#define OSSL_KDF_PARAM_PKCS12_ID "id" /* int */ -#define OSSL_KDF_PARAM_KBKDF_USE_L "use-l" /* int */ -#define OSSL_KDF_PARAM_KBKDF_USE_SEPARATOR "use-separator" /* int */ -#define OSSL_KDF_PARAM_KBKDF_R "r" /* int */ -#define OSSL_KDF_PARAM_X942_ACVPINFO "acvp-info" -#define OSSL_KDF_PARAM_X942_PARTYUINFO "partyu-info" -#define OSSL_KDF_PARAM_X942_PARTYVINFO "partyv-info" -#define OSSL_KDF_PARAM_X942_SUPP_PUBINFO "supp-pubinfo" -#define OSSL_KDF_PARAM_X942_SUPP_PRIVINFO "supp-privinfo" -#define OSSL_KDF_PARAM_X942_USE_KEYBITS "use-keybits" +# 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" - -/* Known RAND names */ -#define OSSL_RAND_PARAM_STATE "state" -#define OSSL_RAND_PARAM_STRENGTH "strength" -#define OSSL_RAND_PARAM_MAX_REQUEST "max_request" -#define OSSL_RAND_PARAM_TEST_ENTROPY "test_entropy" -#define OSSL_RAND_PARAM_TEST_NONCE "test_nonce" -#define OSSL_RAND_PARAM_GENERATE "generate" - -/* RAND/DRBG names */ -#define OSSL_DRBG_PARAM_RESEED_REQUESTS "reseed_requests" -#define OSSL_DRBG_PARAM_RESEED_TIME_INTERVAL "reseed_time_interval" -#define OSSL_DRBG_PARAM_MIN_ENTROPYLEN "min_entropylen" -#define OSSL_DRBG_PARAM_MAX_ENTROPYLEN "max_entropylen" -#define OSSL_DRBG_PARAM_MIN_NONCELEN "min_noncelen" -#define OSSL_DRBG_PARAM_MAX_NONCELEN "max_noncelen" -#define OSSL_DRBG_PARAM_MAX_PERSLEN "max_perslen" -#define OSSL_DRBG_PARAM_MAX_ADINLEN "max_adinlen" -#define OSSL_DRBG_PARAM_RESEED_COUNTER "reseed_counter" -#define OSSL_DRBG_PARAM_RESEED_TIME "reseed_time" -#define OSSL_DRBG_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -#define OSSL_DRBG_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -#define OSSL_DRBG_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -#define OSSL_DRBG_PARAM_MAC OSSL_ALG_PARAM_MAC -#define OSSL_DRBG_PARAM_USE_DF "use_derivation_function" - -/* DRBG call back parameters */ -#define OSSL_DRBG_PARAM_ENTROPY_REQUIRED "entropy_required" -#define OSSL_DRBG_PARAM_PREDICTION_RESISTANCE "prediction_resistance" -#define OSSL_DRBG_PARAM_MIN_LENGTH "minium_length" -#define OSSL_DRBG_PARAM_MAX_LENGTH "maxium_length" -#define OSSL_DRBG_PARAM_RANDOM_DATA "random_data" -#define OSSL_DRBG_PARAM_SIZE "size" - -/* PKEY parameters */ -/* Common PKEY parameters */ -#define OSSL_PKEY_PARAM_BITS "bits" /* integer */ -#define OSSL_PKEY_PARAM_MAX_SIZE "max-size" /* integer */ -#define OSSL_PKEY_PARAM_SECURITY_BITS "security-bits" /* integer */ -#define OSSL_PKEY_PARAM_DIGEST OSSL_ALG_PARAM_DIGEST -#define OSSL_PKEY_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER /* utf8 string */ -#define OSSL_PKEY_PARAM_ENGINE OSSL_ALG_PARAM_ENGINE /* utf8 string */ -#define OSSL_PKEY_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -#define OSSL_PKEY_PARAM_DEFAULT_DIGEST "default-digest" /* utf8 string */ -#define OSSL_PKEY_PARAM_MANDATORY_DIGEST "mandatory-digest" /* utf8 string */ -#define OSSL_PKEY_PARAM_PAD_MODE "pad-mode" -#define OSSL_PKEY_PARAM_DIGEST_SIZE "digest-size" -#define OSSL_PKEY_PARAM_MASKGENFUNC "mgf" -#define OSSL_PKEY_PARAM_MGF1_DIGEST "mgf1-digest" -#define OSSL_PKEY_PARAM_MGF1_PROPERTIES "mgf1-properties" -#define OSSL_PKEY_PARAM_ENCODED_PUBLIC_KEY "encoded-pub-key" -#define OSSL_PKEY_PARAM_GROUP_NAME "group" -#define OSSL_PKEY_PARAM_DIST_ID "distid" -#define OSSL_PKEY_PARAM_PUB_KEY "pub" -#define OSSL_PKEY_PARAM_PRIV_KEY "priv" - -/* Diffie-Hellman/DSA Parameters */ -#define OSSL_PKEY_PARAM_FFC_P "p" -#define OSSL_PKEY_PARAM_FFC_G "g" -#define OSSL_PKEY_PARAM_FFC_Q "q" -#define OSSL_PKEY_PARAM_FFC_GINDEX "gindex" -#define OSSL_PKEY_PARAM_FFC_PCOUNTER "pcounter" -#define OSSL_PKEY_PARAM_FFC_SEED "seed" -#define OSSL_PKEY_PARAM_FFC_COFACTOR "j" -#define OSSL_PKEY_PARAM_FFC_H "hindex" -#define OSSL_PKEY_PARAM_FFC_VALIDATE_PQ "validate-pq" -#define OSSL_PKEY_PARAM_FFC_VALIDATE_G "validate-g" -#define OSSL_PKEY_PARAM_FFC_VALIDATE_LEGACY "validate-legacy" - -/* Diffie-Hellman params */ -#define OSSL_PKEY_PARAM_DH_GENERATOR "safeprime-generator" -#define OSSL_PKEY_PARAM_DH_PRIV_LEN "priv_len" - -/* Elliptic Curve Domain Parameters */ -#define OSSL_PKEY_PARAM_EC_PUB_X "qx" -#define OSSL_PKEY_PARAM_EC_PUB_Y "qy" - -/* Elliptic Curve Explicit Domain Parameters */ -#define OSSL_PKEY_PARAM_EC_FIELD_TYPE "field-type" -#define OSSL_PKEY_PARAM_EC_P "p" -#define OSSL_PKEY_PARAM_EC_A "a" -#define OSSL_PKEY_PARAM_EC_B "b" -#define OSSL_PKEY_PARAM_EC_GENERATOR "generator" -#define OSSL_PKEY_PARAM_EC_ORDER "order" -#define OSSL_PKEY_PARAM_EC_COFACTOR "cofactor" -#define OSSL_PKEY_PARAM_EC_SEED "seed" -#define OSSL_PKEY_PARAM_EC_CHAR2_M "m" -#define OSSL_PKEY_PARAM_EC_CHAR2_TYPE "basis-type" -#define OSSL_PKEY_PARAM_EC_CHAR2_TP_BASIS "tp" -#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K1 "k1" -#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K2 "k2" -#define OSSL_PKEY_PARAM_EC_CHAR2_PP_K3 "k3" -#define OSSL_PKEY_PARAM_EC_DECODED_FROM_EXPLICIT_PARAMS "decoded-from-explicit" - -/* Elliptic Curve Key Parameters */ -#define OSSL_PKEY_PARAM_USE_COFACTOR_FLAG "use-cofactor-flag" -#define OSSL_PKEY_PARAM_USE_COFACTOR_ECDH \ - OSSL_PKEY_PARAM_USE_COFACTOR_FLAG - -/* RSA Keys */ -/* - * n, e, d are the usual public and private key components - * - * rsa-num is the number of factors, including p and q - * rsa-factor is used for each factor: p, q, r_i (i = 3, ...) - * rsa-exponent is used for each exponent: dP, dQ, d_i (i = 3, ...) - * rsa-coefficient is used for each coefficient: qInv, t_i (i = 3, ...) - * - * The number of rsa-factor items must be equal to the number of rsa-exponent - * items, and the number of rsa-coefficients must be one less. - * (the base i for the coefficients is 2, not 1, at least as implied by - * RFC 8017) - */ -#define OSSL_PKEY_PARAM_RSA_N "n" -#define OSSL_PKEY_PARAM_RSA_E "e" -#define OSSL_PKEY_PARAM_RSA_D "d" -#define OSSL_PKEY_PARAM_RSA_FACTOR "rsa-factor" -#define OSSL_PKEY_PARAM_RSA_EXPONENT "rsa-exponent" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT "rsa-coefficient" -#define OSSL_PKEY_PARAM_RSA_FACTOR1 OSSL_PKEY_PARAM_RSA_FACTOR"1" -#define OSSL_PKEY_PARAM_RSA_FACTOR2 OSSL_PKEY_PARAM_RSA_FACTOR"2" -#define OSSL_PKEY_PARAM_RSA_FACTOR3 OSSL_PKEY_PARAM_RSA_FACTOR"3" -#define OSSL_PKEY_PARAM_RSA_FACTOR4 OSSL_PKEY_PARAM_RSA_FACTOR"4" -#define OSSL_PKEY_PARAM_RSA_FACTOR5 OSSL_PKEY_PARAM_RSA_FACTOR"5" -#define OSSL_PKEY_PARAM_RSA_FACTOR6 OSSL_PKEY_PARAM_RSA_FACTOR"6" -#define OSSL_PKEY_PARAM_RSA_FACTOR7 OSSL_PKEY_PARAM_RSA_FACTOR"7" -#define OSSL_PKEY_PARAM_RSA_FACTOR8 OSSL_PKEY_PARAM_RSA_FACTOR"8" -#define OSSL_PKEY_PARAM_RSA_FACTOR9 OSSL_PKEY_PARAM_RSA_FACTOR"9" -#define OSSL_PKEY_PARAM_RSA_FACTOR10 OSSL_PKEY_PARAM_RSA_FACTOR"10" -#define OSSL_PKEY_PARAM_RSA_EXPONENT1 OSSL_PKEY_PARAM_RSA_EXPONENT"1" -#define OSSL_PKEY_PARAM_RSA_EXPONENT2 OSSL_PKEY_PARAM_RSA_EXPONENT"2" -#define OSSL_PKEY_PARAM_RSA_EXPONENT3 OSSL_PKEY_PARAM_RSA_EXPONENT"3" -#define OSSL_PKEY_PARAM_RSA_EXPONENT4 OSSL_PKEY_PARAM_RSA_EXPONENT"4" -#define OSSL_PKEY_PARAM_RSA_EXPONENT5 OSSL_PKEY_PARAM_RSA_EXPONENT"5" -#define OSSL_PKEY_PARAM_RSA_EXPONENT6 OSSL_PKEY_PARAM_RSA_EXPONENT"6" -#define OSSL_PKEY_PARAM_RSA_EXPONENT7 OSSL_PKEY_PARAM_RSA_EXPONENT"7" -#define OSSL_PKEY_PARAM_RSA_EXPONENT8 OSSL_PKEY_PARAM_RSA_EXPONENT"8" -#define OSSL_PKEY_PARAM_RSA_EXPONENT9 OSSL_PKEY_PARAM_RSA_EXPONENT"9" -#define OSSL_PKEY_PARAM_RSA_EXPONENT10 OSSL_PKEY_PARAM_RSA_EXPONENT"10" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT1 OSSL_PKEY_PARAM_RSA_COEFFICIENT"1" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT2 OSSL_PKEY_PARAM_RSA_COEFFICIENT"2" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT3 OSSL_PKEY_PARAM_RSA_COEFFICIENT"3" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT4 OSSL_PKEY_PARAM_RSA_COEFFICIENT"4" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT5 OSSL_PKEY_PARAM_RSA_COEFFICIENT"5" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT6 OSSL_PKEY_PARAM_RSA_COEFFICIENT"6" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT7 OSSL_PKEY_PARAM_RSA_COEFFICIENT"7" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT8 OSSL_PKEY_PARAM_RSA_COEFFICIENT"8" -#define OSSL_PKEY_PARAM_RSA_COEFFICIENT9 OSSL_PKEY_PARAM_RSA_COEFFICIENT"9" +# 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" +# define OSSL_PKEY_RSA_PAD_MODE_NONE "none" +# define OSSL_PKEY_RSA_PAD_MODE_PKCSV15 "pkcs1" +# define OSSL_PKEY_RSA_PAD_MODE_OAEP "oaep" +# define OSSL_PKEY_RSA_PAD_MODE_X931 "x931" +# define OSSL_PKEY_RSA_PAD_MODE_PSS "pss" /* RSA pss padding salt length */ -#define OSSL_PKEY_RSA_PSS_SALT_LEN_DIGEST "digest" -#define OSSL_PKEY_RSA_PSS_SALT_LEN_MAX "max" -#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO "auto" -#define OSSL_PKEY_RSA_PSS_SALT_LEN_AUTO_DIGEST_MAX "auto-digestmax" - -/* Key generation parameters */ -#define OSSL_PKEY_PARAM_RSA_BITS OSSL_PKEY_PARAM_BITS -#define OSSL_PKEY_PARAM_RSA_PRIMES "primes" -#define OSSL_PKEY_PARAM_RSA_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_PKEY_PARAM_RSA_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES -#define OSSL_PKEY_PARAM_RSA_MASKGENFUNC OSSL_PKEY_PARAM_MASKGENFUNC -#define OSSL_PKEY_PARAM_RSA_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST -#define OSSL_PKEY_PARAM_RSA_PSS_SALTLEN "saltlen" - -/* Key generation parameters */ -#define OSSL_PKEY_PARAM_FFC_TYPE "type" -#define OSSL_PKEY_PARAM_FFC_PBITS "pbits" -#define OSSL_PKEY_PARAM_FFC_QBITS "qbits" -#define OSSL_PKEY_PARAM_FFC_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_PKEY_PARAM_FFC_DIGEST_PROPS OSSL_PKEY_PARAM_PROPERTIES - -#define OSSL_PKEY_PARAM_EC_ENCODING "encoding" /* utf8_string */ -#define OSSL_PKEY_PARAM_EC_POINT_CONVERSION_FORMAT "point-format" -#define OSSL_PKEY_PARAM_EC_GROUP_CHECK_TYPE "group-check" -#define OSSL_PKEY_PARAM_EC_INCLUDE_PUBLIC "include-public" +# 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_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_POINT_CONVERSION_FORMAT_UNCOMPRESSED "uncompressed" +# define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_COMPRESSED "compressed" +# define OSSL_PKEY_EC_POINT_CONVERSION_FORMAT_HYBRID "hybrid" -#define OSSL_PKEY_EC_GROUP_CHECK_DEFAULT "default" -#define OSSL_PKEY_EC_GROUP_CHECK_NAMED "named" -#define OSSL_PKEY_EC_GROUP_CHECK_NAMED_NIST "named-nist" - -/* Key Exchange parameters */ -#define OSSL_EXCHANGE_PARAM_PAD "pad" /* uint */ -#define OSSL_EXCHANGE_PARAM_EC_ECDH_COFACTOR_MODE "ecdh-cofactor-mode" /* int */ -#define OSSL_EXCHANGE_PARAM_KDF_TYPE "kdf-type" /* utf8_string */ -#define OSSL_EXCHANGE_PARAM_KDF_DIGEST "kdf-digest" /* utf8_string */ -#define OSSL_EXCHANGE_PARAM_KDF_DIGEST_PROPS "kdf-digest-props" /* utf8_string */ -#define OSSL_EXCHANGE_PARAM_KDF_OUTLEN "kdf-outlen" /* size_t */ -/* The following parameter is an octet_string on set and an octet_ptr on get */ -#define OSSL_EXCHANGE_PARAM_KDF_UKM "kdf-ukm" - -/* Signature parameters */ -#define OSSL_SIGNATURE_PARAM_ALGORITHM_ID "algorithm-id" -#define OSSL_SIGNATURE_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE -#define OSSL_SIGNATURE_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_SIGNATURE_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES -#define OSSL_SIGNATURE_PARAM_PSS_SALTLEN "saltlen" -#define OSSL_SIGNATURE_PARAM_MGF1_DIGEST OSSL_PKEY_PARAM_MGF1_DIGEST -#define OSSL_SIGNATURE_PARAM_MGF1_PROPERTIES \ - OSSL_PKEY_PARAM_MGF1_PROPERTIES -#define OSSL_SIGNATURE_PARAM_DIGEST_SIZE OSSL_PKEY_PARAM_DIGEST_SIZE - -/* Asym cipher parameters */ -#define OSSL_ASYM_CIPHER_PARAM_DIGEST OSSL_PKEY_PARAM_DIGEST -#define OSSL_ASYM_CIPHER_PARAM_PROPERTIES OSSL_PKEY_PARAM_PROPERTIES -#define OSSL_ASYM_CIPHER_PARAM_ENGINE OSSL_PKEY_PARAM_ENGINE -#define OSSL_ASYM_CIPHER_PARAM_PAD_MODE OSSL_PKEY_PARAM_PAD_MODE -#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST \ - OSSL_PKEY_PARAM_MGF1_DIGEST -#define OSSL_ASYM_CIPHER_PARAM_MGF1_DIGEST_PROPS \ - OSSL_PKEY_PARAM_MGF1_PROPERTIES -#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST OSSL_ALG_PARAM_DIGEST -#define OSSL_ASYM_CIPHER_PARAM_OAEP_DIGEST_PROPS "digest-props" -/* The following parameter is an octet_string on set and an octet_ptr on get */ -#define OSSL_ASYM_CIPHER_PARAM_OAEP_LABEL "oaep-label" -#define OSSL_ASYM_CIPHER_PARAM_TLS_CLIENT_VERSION "tls-client-version" -#define OSSL_ASYM_CIPHER_PARAM_TLS_NEGOTIATED_VERSION "tls-negotiated-version" - -/* - * Encoder / decoder parameters - */ -#define OSSL_ENCODER_PARAM_CIPHER OSSL_ALG_PARAM_CIPHER -#define OSSL_ENCODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES -/* Currently PVK only, but reusable for others as needed */ -#define OSSL_ENCODER_PARAM_ENCRYPT_LEVEL "encrypt-level" -#define OSSL_ENCODER_PARAM_SAVE_PARAMETERS "save-parameters" /* integer */ - -#define OSSL_DECODER_PARAM_PROPERTIES OSSL_ALG_PARAM_PROPERTIES - -/* Passphrase callback parameters */ -#define OSSL_PASSPHRASE_PARAM_INFO "info" - -/* Keygen callback parameters, from provider to libcrypto */ -#define OSSL_GEN_PARAM_POTENTIAL "potential" /* integer */ -#define OSSL_GEN_PARAM_ITERATION "iteration" /* integer */ - -/* ACVP Test parameters : These should not be used normally */ -#define OSSL_PKEY_PARAM_RSA_TEST_XP1 "xp1" -#define OSSL_PKEY_PARAM_RSA_TEST_XP2 "xp2" -#define OSSL_PKEY_PARAM_RSA_TEST_XP "xp" -#define OSSL_PKEY_PARAM_RSA_TEST_XQ1 "xq1" -#define OSSL_PKEY_PARAM_RSA_TEST_XQ2 "xq2" -#define OSSL_PKEY_PARAM_RSA_TEST_XQ "xq" -#define OSSL_PKEY_PARAM_RSA_TEST_P1 "p1" -#define OSSL_PKEY_PARAM_RSA_TEST_P2 "p2" -#define OSSL_PKEY_PARAM_RSA_TEST_Q1 "q1" -#define OSSL_PKEY_PARAM_RSA_TEST_Q2 "q2" -#define OSSL_SIGNATURE_PARAM_KAT "kat" - -/* KEM parameters */ -#define OSSL_KEM_PARAM_OPERATION "operation" +# 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" -/* Capabilities */ - -/* TLS-GROUP Capability */ -#define OSSL_CAPABILITY_TLS_GROUP_NAME "tls-group-name" -#define OSSL_CAPABILITY_TLS_GROUP_NAME_INTERNAL "tls-group-name-internal" -#define OSSL_CAPABILITY_TLS_GROUP_ID "tls-group-id" -#define OSSL_CAPABILITY_TLS_GROUP_ALG "tls-group-alg" -#define OSSL_CAPABILITY_TLS_GROUP_SECURITY_BITS "tls-group-sec-bits" -#define OSSL_CAPABILITY_TLS_GROUP_IS_KEM "tls-group-is-kem" -#define OSSL_CAPABILITY_TLS_GROUP_MIN_TLS "tls-min-tls" -#define OSSL_CAPABILITY_TLS_GROUP_MAX_TLS "tls-max-tls" -#define OSSL_CAPABILITY_TLS_GROUP_MIN_DTLS "tls-min-dtls" -#define OSSL_CAPABILITY_TLS_GROUP_MAX_DTLS "tls-max-dtls" - -/*- - * storemgmt parameters - */ - -/* - * Used by storemgmt_ctx_set_params(): - * - * - OSSL_STORE_PARAM_EXPECT is an INTEGER, and the value is any of the - * OSSL_STORE_INFO numbers. This is used to set the expected type of - * object loaded. - * - * - OSSL_STORE_PARAM_SUBJECT, OSSL_STORE_PARAM_ISSUER, - * OSSL_STORE_PARAM_SERIAL, OSSL_STORE_PARAM_FINGERPRINT, - * OSSL_STORE_PARAM_DIGEST, OSSL_STORE_PARAM_ALIAS - * are used as search criteria. - * (OSSL_STORE_PARAM_DIGEST is used with OSSL_STORE_PARAM_FINGERPRINT) - */ -#define OSSL_STORE_PARAM_EXPECT "expect" /* INTEGER */ -#define OSSL_STORE_PARAM_SUBJECT "subject" /* DER blob => OCTET_STRING */ -#define OSSL_STORE_PARAM_ISSUER "name" /* DER blob => OCTET_STRING */ -#define OSSL_STORE_PARAM_SERIAL "serial" /* INTEGER */ -#define OSSL_STORE_PARAM_DIGEST "digest" /* UTF8_STRING */ -#define OSSL_STORE_PARAM_FINGERPRINT "fingerprint" /* OCTET_STRING */ -#define OSSL_STORE_PARAM_ALIAS "alias" /* UTF8_STRING */ - -/* You may want to pass properties for the provider implementation to use */ -#define OSSL_STORE_PARAM_PROPERTIES "properties" /* utf8_string */ -/* OSSL_DECODER input type if a decoder is used by the store */ -#define OSSL_STORE_PARAM_INPUT_TYPE "input-type" /* UTF8_STRING */ +/* 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 } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h.in new file mode 100644 index 00000000..c14520fe --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/core_names.h.in @@ -0,0 +1,119 @@ +/* + * {- 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/x86_64/usr/local/include/openssl/crmf.h b/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h index 71b747ed..1f901f35 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/crmf.h.in * - * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. * Copyright Nokia 2007-2019 * Copyright Siemens AG 2015-2019 * @@ -43,8 +43,8 @@ extern "C" { # 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) @@ -198,12 +198,14 @@ int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, int rid, int acceptRAVerified, OSSL_LIB_CTX *libctx, const char *propq); OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); -const ASN1_INTEGER -*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h.in index 4d37ea6d..43411fa4 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/crmf.h.in @@ -1,7 +1,7 @@ /*- * {- join("\n * ", @autowarntext) -} * - * Copyright 2007-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 2007-2023 The OpenSSL Project Authors. All Rights Reserved. * Copyright Nokia 2007-2019 * Copyright Siemens AG 2015-2019 * @@ -44,8 +44,8 @@ extern "C" { # 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) @@ -151,12 +151,14 @@ int OSSL_CRMF_MSGS_verify_popo(const OSSL_CRMF_MSGS *reqs, int rid, int acceptRAVerified, OSSL_LIB_CTX *libctx, const char *propq); OSSL_CRMF_CERTTEMPLATE *OSSL_CRMF_MSG_get0_tmpl(const OSSL_CRMF_MSG *crm); -const ASN1_INTEGER -*OSSL_CRMF_CERTTEMPLATE_get0_serialNumber(const OSSL_CRMF_CERTTEMPLATE *tmpl); +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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h b/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h index ab01aae8..55e00dcc 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/crypto.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -88,6 +88,7 @@ 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 @@ -552,6 +553,8 @@ 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h.in index fb0c7cbb..b2d691b9 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/crypto.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -89,6 +89,7 @@ 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 @@ -529,6 +530,8 @@ 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h index b6dd8c35..e6dd1192 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h @@ -133,7 +133,7 @@ typedef enum { */ 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. diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h.in index 16086b33..3fc2aaa9 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ct.h.in @@ -85,7 +85,7 @@ typedef enum { */ 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. diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/dh.h b/deps/openssl/android/x86_64/usr/local/include/openssl/dh.h index 8bc17448..f1c0ed06 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/dh.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/dh.h @@ -144,7 +144,7 @@ DECLARE_ASN1_ITEM(DHparams) # define DH_GENERATOR_3 3 # define DH_GENERATOR_5 5 -/* DH_check error codes */ +/* 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. @@ -154,10 +154,10 @@ DECLARE_ASN1_ITEM(DHparams) # define DH_UNABLE_TO_CHECK_GENERATOR 0x04 # define DH_NOT_SUITABLE_GENERATOR 0x08 # define DH_CHECK_Q_NOT_PRIME 0x10 -# define DH_CHECK_INVALID_Q_VALUE 0x20 +# define DH_CHECK_INVALID_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 +# define DH_MODULUS_TOO_LARGE 0x100 /* +DH_check_pub_key */ /* DH_check_pub_key error codes */ # define DH_CHECK_PUBKEY_TOO_SMALL 0x01 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/dherr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/dherr.h index 5d2a762a..2997d7d4 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/dherr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/dherr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -40,6 +40,7 @@ # 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 @@ -50,6 +51,7 @@ # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/dsa.h b/deps/openssl/android/x86_64/usr/local/include/openssl/dsa.h index 160404cc..109878e6 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/dsa.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/dsa.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/e_os2.h b/deps/openssl/android/x86_64/usr/local/include/openssl/e_os2.h index 32e142a9..e01f6275 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/e_os2.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/e_os2.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -89,7 +89,7 @@ extern "C" { /* * DLL settings. This part is a bit tough, because it's up to the - * application implementor how he or she will link the application, so it + * application implementer how he or she will link the application, so it * requires some macro to be used. */ # ifdef OPENSSL_SYS_WINDOWS diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/e_ostime.h b/deps/openssl/android/x86_64/usr/local/include/openssl/e_ostime.h new file mode 100644 index 00000000..8a7cc988 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/e_ostime.h @@ -0,0 +1,30 @@ +/* + * 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) +# include +# else +# include +# endif + +#endif diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ec.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ec.h index be9fb2f0..e1cbe982 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ec.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ec.h @@ -1,5 +1,5 @@ /* - * Copyright 2002-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -460,6 +460,22 @@ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, 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 @@ -1111,7 +1127,7 @@ OSSL_DEPRECATEDIN_3_0 int EC_KEY_check_key(const EC_KEY *key); /** Indicates if an EC_KEY can be used for signing. * \param eckey the EC_KEY object - * \return 1 if can can sign and 0 otherwise. + * \return 1 if can sign and 0 otherwise. */ OSSL_DEPRECATEDIN_3_0 int EC_KEY_can_sign(const EC_KEY *eckey); @@ -1287,7 +1303,7 @@ OSSL_DEPRECATEDIN_3_0 int EC_KEY_set_method(EC_KEY *key, const EC_KEY_METHOD *me OSSL_DEPRECATEDIN_3_0 EC_KEY *EC_KEY_new_method(ENGINE *engine); /** The old name for ecdh_KDF_X9_63 - * The ECDH KDF specification has been mistakingly attributed to ANSI X9.62, + * 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 */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/err.h b/deps/openssl/android/x86_64/usr/local/include/openssl/err.h index 2abf2483..b987e31f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/err.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/err.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -496,6 +496,13 @@ 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 } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/err.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/err.h.in index 11dc2163..1ef09de0 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/err.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/err.h.in @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -485,6 +485,13 @@ 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 } diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/evp.h b/deps/openssl/android/x86_64/usr/local/include/openssl/evp.h index d0fce0c5..ea7620d6 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/evp.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/evp.h @@ -35,6 +35,7 @@ # 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 */ @@ -228,7 +229,8 @@ int (*EVP_MD_meth_get_ctrl(const EVP_MD *md))(EVP_MD_CTX *ctx, int cmd, * if the following flag is set. */ # define EVP_MD_CTX_FLAG_FINALISE 0x0200 -/* NOTE: 0x0400 is reserved for internal usage */ +/* 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); @@ -308,6 +310,7 @@ OSSL_DEPRECATEDIN_3_0 int # 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 @@ -674,7 +677,7 @@ void BIO_set_md(BIO *, const EVP_MD *md); # 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, +__owur int EVP_Cipher(EVP_CIPHER_CTX *c, unsigned char *out, const unsigned char *in, unsigned int inl); @@ -752,7 +755,7 @@ 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, +__owur int EVP_EncryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); @@ -760,16 +763,16 @@ __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, +__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, +__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, +__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, +__owur int EVP_DecryptInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher, ENGINE *impl, const unsigned char *key, const unsigned char *iv); @@ -777,17 +780,17 @@ __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, +__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, +__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, +__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); @@ -821,18 +824,18 @@ __owur int EVP_DigestVerify(EVP_MD_CTX *ctx, const unsigned char *sigret, size_t siglen, const unsigned char *tbs, size_t tbslen); -int EVP_DigestSignInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, +__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, +__owur int EVP_DigestSignInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey); -int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); +__owur int EVP_DigestSignUpdate(EVP_MD_CTX *ctx, const void *data, size_t dsize); __owur int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret, size_t *siglen); -int EVP_DigestVerifyInit_ex(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx, +__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[]); @@ -1927,14 +1930,17 @@ 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/evperr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/evperr.h index a5053f6c..11f3faa4 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/evperr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/evperr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -110,11 +110,14 @@ # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/hpke.h b/deps/openssl/android/x86_64/usr/local/include/openssl/hpke.h new file mode 100644 index 00000000..af637ac6 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/hpke.h @@ -0,0 +1,169 @@ +/* + * 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/x86_64/usr/local/include/openssl/http.h b/deps/openssl/android/x86_64/usr/local/include/openssl/http.h index f7ab2142..a3cbf15f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/http.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/http.h @@ -1,5 +1,5 @@ /* - * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -33,6 +33,8 @@ extern "C" { # 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) @@ -103,6 +105,8 @@ int OSSL_HTTP_parse_url(const char *url, int *pssl, char **puser, char **phost, 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h b/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h index f4155df1..8af9edd2 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h.in index dc344a54..c9dbd1f3 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/lhash.h.in @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/macros.h b/deps/openssl/android/x86_64/usr/local/include/openssl/macros.h index a614cd66..e9ef9387 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/macros.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/macros.h @@ -158,7 +158,7 @@ /* * Define macros for deprecation and simulated removal purposes. * - * The macros OSSL_DEPRECATED_{major}_{minor} are always defined for + * 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. * @@ -169,6 +169,7 @@ * '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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/obj_mac.h b/deps/openssl/android/x86_64/usr/local/include/openssl/obj_mac.h index 0e860276..e1b441b3 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/obj_mac.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/obj_mac.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by crypto/objects/objects.pl * - * Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -886,6 +886,14 @@ #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 @@ -1002,10 +1010,22 @@ #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 @@ -1082,15 +1102,17 @@ #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 1L,3L,6L,1L,4L,1L,311L,17L,1L +#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 1L,3L,6L,1L,4L,1L,311L,17L,2L +#define OBJ_LocalKeySet OBJ_ms_corp,17L,2L #define OBJ_certTypes OBJ_pkcs9,22L @@ -1108,6 +1130,10 @@ #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 @@ -1217,6 +1243,10 @@ #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 @@ -1300,42 +1330,62 @@ #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 1L,3L,6L,1L,4L,1L,311L,2L,1L,14L +#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 1L,3L,6L,1L,4L,1L,311L,2L,1L,21L +#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 1L,3L,6L,1L,4L,1L,311L,2L,1L,22L +#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 1L,3L,6L,1L,4L,1L,311L,10L,3L,1L +#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 1L,3L,6L,1L,4L,1L,311L,10L,3L,3L +#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 1L,3L,6L,1L,4L,1L,311L,10L,3L,4L +#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 1L,3L,6L,1L,4L,1L,311L,20L,2L,2L +#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 1L,3L,6L,1L,4L,1L,311L,20L,2L,3L +#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" @@ -1503,6 +1553,18 @@ #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 @@ -1783,6 +1845,22 @@ #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 @@ -1815,6 +1893,18 @@ #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 @@ -2649,11 +2739,56 @@ #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 @@ -2669,6 +2804,86 @@ #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 @@ -3220,6 +3435,70 @@ #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 @@ -4952,6 +5231,21 @@ #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 @@ -5029,6 +5323,9 @@ #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 @@ -5045,6 +5342,9 @@ #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 @@ -5053,6 +5353,9 @@ #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 @@ -5130,17 +5433,17 @@ #define SN_jurisdictionLocalityName "jurisdictionL" #define LN_jurisdictionLocalityName "jurisdictionLocalityName" #define NID_jurisdictionLocalityName 955 -#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L +#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 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L +#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 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L +#define OBJ_jurisdictionCountryName OBJ_ms_corp,60L,2L,1L,3L #define SN_id_scrypt "id-scrypt" #define LN_id_scrypt "scrypt" @@ -5432,6 +5735,24 @@ #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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h b/deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h index b87a4aa1..7f1ecf66 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/opensslv.h @@ -28,8 +28,8 @@ extern "C" { * These macros express version number MAJOR.MINOR.PATCH exactly */ # define OPENSSL_VERSION_MAJOR 3 -# define OPENSSL_VERSION_MINOR 1 -# define OPENSSL_VERSION_PATCH 4 +# define OPENSSL_VERSION_MINOR 2 +# define OPENSSL_VERSION_PATCH 0 /* * Additional version information @@ -74,21 +74,21 @@ extern "C" { * longer variant with OPENSSL_VERSION_PRE_RELEASE_STR and * OPENSSL_VERSION_BUILD_METADATA_STR appended. */ -# define OPENSSL_VERSION_STR "3.1.4" -# define OPENSSL_FULL_VERSION_STR "3.1.4" +# define OPENSSL_VERSION_STR "3.2.0" +# define OPENSSL_FULL_VERSION_STR "3.2.0" /* * SECTION 3: ADDITIONAL METADATA * * These strings are defined separately to allow them to be parsable. */ -# define OPENSSL_RELEASE_DATE "24 Oct 2023" +# define OPENSSL_RELEASE_DATE "23 Nov 2023" /* * SECTION 4: BACKWARD COMPATIBILITY */ -# define OPENSSL_VERSION_TEXT "OpenSSL 3.1.4 24 Oct 2023" +# define OPENSSL_VERSION_TEXT "OpenSSL 3.2.0 23 Nov 2023" /* Synthesize OPENSSL_VERSION_NUMBER with the layout 0xMNN00PPSL */ # ifdef OPENSSL_VERSION_PRE_RELEASE diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pem.h b/deps/openssl/android/x86_64/usr/local/include/openssl/pem.h index 000d9c89..0446c770 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pem.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pem.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -57,6 +57,7 @@ extern "C" { # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h index 9e20fc1a..b08b0bc2 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/pkcs12.h.in * - * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -44,6 +44,7 @@ extern "C" { # 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... */ @@ -133,7 +134,9 @@ 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); @@ -221,6 +224,7 @@ ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, 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, @@ -308,6 +312,7 @@ 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); @@ -315,6 +320,11 @@ 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, diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h.in index cf956b41..35759d4d 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1999-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -45,6 +45,7 @@ extern "C" { # 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... */ @@ -110,7 +111,9 @@ 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); @@ -198,6 +201,7 @@ ASN1_TYPE *PKCS12_get_attr_gen(const STACK_OF(X509_ATTRIBUTE) *attrs, 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, @@ -285,6 +289,7 @@ 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); @@ -292,6 +297,11 @@ 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, diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12err.h b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12err.h index 933c8329..abce3736 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12err.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs12err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -21,6 +21,7 @@ /* * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h index f824546c..dc46c511 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h @@ -134,8 +134,8 @@ SKM_DEFINE_STACK_OF_INTERNAL(PKCS7_RECIP_INFO, PKCS7_RECIP_INFO, PKCS7_RECIP_INF typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -161,8 +161,8 @@ typedef struct pkcs7_enveloped_st { typedef struct pkcs7_signedandenveloped_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -203,7 +203,7 @@ typedef struct pkcs7_st { /* NID_pkcs7_data */ ASN1_OCTET_STRING *data; /* NID_pkcs7_signed */ - PKCS7_SIGNED *sign; + PKCS7_SIGNED *sign; /* field name 'signed' would clash with C keyword */ /* NID_pkcs7_enveloped */ PKCS7_ENVELOPE *enveloped; /* NID_pkcs7_signedAndEnveloped */ @@ -344,13 +344,13 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, const EVP_MD *dgst); int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); -int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_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 *x509); + X509 *signer); BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h.in index a346bc74..11a636e1 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/pkcs7.h.in @@ -87,8 +87,8 @@ typedef struct pkcs7_recip_info_st { typedef struct pkcs7_signed_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -114,8 +114,8 @@ typedef struct pkcs7_enveloped_st { typedef struct pkcs7_signedandenveloped_st { ASN1_INTEGER *version; /* version 1 */ STACK_OF(X509_ALGOR) *md_algs; /* md used */ - STACK_OF(X509) *cert; /* [ 0 ] */ - STACK_OF(X509_CRL) *crl; /* [ 1 ] */ + STACK_OF(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; @@ -156,7 +156,7 @@ typedef struct pkcs7_st { /* NID_pkcs7_data */ ASN1_OCTET_STRING *data; /* NID_pkcs7_signed */ - PKCS7_SIGNED *sign; + PKCS7_SIGNED *sign; /* field name 'signed' would clash with C keyword */ /* NID_pkcs7_enveloped */ PKCS7_ENVELOPE *enveloped; /* NID_pkcs7_signedAndEnveloped */ @@ -273,13 +273,13 @@ int PKCS7_SIGNER_INFO_set(PKCS7_SIGNER_INFO *p7i, X509 *x509, EVP_PKEY *pkey, const EVP_MD *dgst); int PKCS7_SIGNER_INFO_sign(PKCS7_SIGNER_INFO *si); int PKCS7_add_signer(PKCS7 *p7, PKCS7_SIGNER_INFO *p7i); -int PKCS7_add_certificate(PKCS7 *p7, X509 *x509); -int PKCS7_add_crl(PKCS7 *p7, X509_CRL *x509); +int PKCS7_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 *x509); + X509 *signer); BIO *PKCS7_dataInit(PKCS7 *p7, BIO *bio); int PKCS7_dataFinal(PKCS7 *p7, BIO *bio); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/prov_ssl.h b/deps/openssl/android/x86_64/usr/local/include/openssl/prov_ssl.h index d3e0896c..76d01e1e 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/prov_ssl.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/prov_ssl.h @@ -1,5 +1,5 @@ /* - * Copyright 2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -19,6 +19,7 @@ extern "C" { # 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 @@ -28,6 +29,9 @@ extern "C" { # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/proverr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/proverr.h index 5d5c16d9..d9ef5681 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/proverr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/proverr.h @@ -52,6 +52,7 @@ # 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 @@ -63,9 +64,11 @@ # 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 @@ -77,6 +80,7 @@ # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/provider.h b/deps/openssl/android/x86_64/usr/local/include/openssl/provider.h index dc86ff58..24ec0827 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/provider.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/provider.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -17,13 +17,19 @@ extern "C" { # endif -/* Set the default provider search path */ +/* 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, diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/quic.h b/deps/openssl/android/x86_64/usr/local/include/openssl/quic.h new file mode 100644 index 00000000..74a6345d --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/quic.h @@ -0,0 +1,37 @@ +/* + * 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/x86_64/usr/local/include/openssl/rand.h b/deps/openssl/android/x86_64/usr/local/include/openssl/rand.h index 90e0f0a0..1fa1129e 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/rand.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/rand.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/rsa.h b/deps/openssl/android/x86_64/usr/local/include/openssl/rsa.h index d0c95992..167427d3 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/rsa.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/rsa.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -189,6 +189,8 @@ int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); # 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 @@ -198,6 +200,9 @@ int EVP_PKEY_CTX_get0_rsa_oaep_label(EVP_PKEY_CTX *ctx, unsigned char **label); # 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) diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/sha.h b/deps/openssl/android/x86_64/usr/local/include/openssl/sha.h index 6e65a040..163a7d58 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/sha.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/sha.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -81,6 +81,7 @@ OSSL_DEPRECATEDIN_3_0 void SHA256_Transform(SHA256_CTX *c, 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/srtp.h b/deps/openssl/android/x86_64/usr/local/include/openssl/srtp.h index d64606e5..2c2c3344 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/srtp.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/srtp.h @@ -28,16 +28,28 @@ 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 +# 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 +# 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h index 942f20e6..2b43485f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/ssl.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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. * @@ -24,6 +24,7 @@ # endif # include +# include # include # include # include @@ -281,28 +282,31 @@ typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, /* Extension context codes */ /* This extension is only allowed in TLS */ -#define SSL_EXT_TLS_ONLY 0x0001 +#define SSL_EXT_TLS_ONLY 0x00001 /* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x0002 +#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 0x0004 +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 /* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x0008 +#define SSL_EXT_SSL3_ALLOWED 0x00008 /* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 /* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x0020 +#define SSL_EXT_TLS1_3_ONLY 0x00020 /* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 -#define SSL_EXT_CLIENT_HELLO 0x0080 +#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 0x0100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 +#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 */ @@ -433,6 +437,17 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); * 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." @@ -577,6 +592,8 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); # 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 @@ -968,6 +985,7 @@ uint32_t SSL_get_recv_max_early_data(const SSL *s); # include /* This is mostly sslv3 with a few tweaks */ # include /* Datagram TLS */ # include /* Support for the use_srtp extension */ +# include #ifdef __cplusplus extern "C" { @@ -1069,6 +1087,7 @@ typedef enum { 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, @@ -1078,6 +1097,7 @@ typedef enum { 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, @@ -1088,10 +1108,12 @@ typedef enum { 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, @@ -1383,6 +1405,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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 @@ -1488,6 +1511,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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) \ @@ -1552,6 +1577,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +const char *SSL_get0_group_name(SSL *s); const char *SSL_group_to_name(SSL *s, int id); /* Backwards compatibility, original 1.1.0 names */ @@ -1786,6 +1812,9 @@ __owur int SSL_has_matching_session_id(const SSL *s, 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); @@ -1843,6 +1872,8 @@ __owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, 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); @@ -1935,6 +1966,8 @@ 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); @@ -1989,6 +2022,7 @@ __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 @@ -2297,6 +2331,105 @@ 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 @@ -2596,6 +2729,36 @@ void SSL_set_allow_early_data_cb(SSL *s, 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h.in index f03f52fb..9f91039f 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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. * @@ -25,6 +25,7 @@ use OpenSSL::stackhash qw(generate_stack_macros generate_const_stack_macros); # endif # include +# include # include # include # include @@ -258,28 +259,31 @@ typedef int (*tls_session_secret_cb_fn)(SSL *s, void *secret, int *secret_len, /* Extension context codes */ /* This extension is only allowed in TLS */ -#define SSL_EXT_TLS_ONLY 0x0001 +#define SSL_EXT_TLS_ONLY 0x00001 /* This extension is only allowed in DTLS */ -#define SSL_EXT_DTLS_ONLY 0x0002 +#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 0x0004 +#define SSL_EXT_TLS_IMPLEMENTATION_ONLY 0x00004 /* Most extensions are not defined for SSLv3 but EXT_TYPE_renegotiate is */ -#define SSL_EXT_SSL3_ALLOWED 0x0008 +#define SSL_EXT_SSL3_ALLOWED 0x00008 /* Extension is only defined for TLS1.2 and below */ -#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x0010 +#define SSL_EXT_TLS1_2_AND_BELOW_ONLY 0x00010 /* Extension is only defined for TLS1.3 and above */ -#define SSL_EXT_TLS1_3_ONLY 0x0020 +#define SSL_EXT_TLS1_3_ONLY 0x00020 /* Ignore this extension during parsing if we are resuming */ -#define SSL_EXT_IGNORE_ON_RESUMPTION 0x0040 -#define SSL_EXT_CLIENT_HELLO 0x0080 +#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 0x0100 -#define SSL_EXT_TLS1_3_SERVER_HELLO 0x0200 -#define SSL_EXT_TLS1_3_ENCRYPTED_EXTENSIONS 0x0400 -#define SSL_EXT_TLS1_3_HELLO_RETRY_REQUEST 0x0800 -#define SSL_EXT_TLS1_3_CERTIFICATE 0x1000 -#define SSL_EXT_TLS1_3_NEW_SESSION_TICKET 0x2000 -#define SSL_EXT_TLS1_3_CERTIFICATE_REQUEST 0x4000 +#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 */ @@ -410,6 +414,17 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); * 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." @@ -554,6 +569,8 @@ typedef int (*SSL_async_callback_fn)(SSL *s, void *arg); # 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 @@ -945,6 +962,7 @@ uint32_t SSL_get_recv_max_early_data(const SSL *s); # include /* This is mostly sslv3 with a few tweaks */ # include /* Datagram TLS */ # include /* Support for the use_srtp extension */ +# include #ifdef __cplusplus extern "C" { @@ -997,6 +1015,7 @@ typedef enum { 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, @@ -1006,6 +1025,7 @@ typedef enum { 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, @@ -1016,10 +1036,12 @@ typedef enum { 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, @@ -1311,6 +1333,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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 @@ -1416,6 +1439,8 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # 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) \ @@ -1480,6 +1505,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION) # define SSL_get_max_proto_version(s) \ SSL_ctrl(s, SSL_CTRL_GET_MAX_PROTO_VERSION, 0, NULL) +const char *SSL_get0_group_name(SSL *s); const char *SSL_group_to_name(SSL *s, int id); /* Backwards compatibility, original 1.1.0 names */ @@ -1714,6 +1740,9 @@ __owur int SSL_has_matching_session_id(const SSL *s, 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); @@ -1771,6 +1800,8 @@ __owur int SSL_CTX_set_session_id_context(SSL_CTX *ctx, 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); @@ -1863,6 +1894,8 @@ 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); @@ -1917,6 +1950,7 @@ __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 @@ -2225,6 +2259,105 @@ 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 @@ -2524,6 +2657,36 @@ void SSL_set_allow_early_data_cb(SSL *s, 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl3.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl3.h index 49bd51f2..4f076c6c 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ssl3.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ssl3.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -239,6 +239,13 @@ extern "C" { # 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 @@ -300,6 +307,8 @@ extern "C" { /* 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 @@ -317,6 +326,7 @@ extern "C" { # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/sslerr.h b/deps/openssl/android/x86_64/usr/local/include/openssl/sslerr.h index f1882558..e1eb9a56 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/sslerr.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/sslerr.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -25,8 +25,10 @@ # 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 @@ -82,6 +84,7 @@ # 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 @@ -110,6 +113,7 @@ # 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 @@ -119,6 +123,7 @@ # 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 @@ -144,6 +149,8 @@ # 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 @@ -156,6 +163,7 @@ # 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 @@ -196,9 +204,11 @@ # 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 @@ -221,10 +231,16 @@ # 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 @@ -234,6 +250,7 @@ # 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 @@ -273,6 +290,11 @@ # 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 @@ -316,6 +338,7 @@ # 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 @@ -333,6 +356,7 @@ # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/store.h b/deps/openssl/android/x86_64/usr/local/include/openssl/store.h index 3c1445e0..e6ea3cf8 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/store.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/store.h @@ -1,5 +1,5 @@ /* - * Copyright 2016-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -98,6 +98,14 @@ OSSL_DEPRECATEDIN_3_0 int OSSL_STORE_vctrl(OSSL_STORE_CTX *ctx, int cmd, */ 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. @@ -345,7 +353,7 @@ int OSSL_STORE_LOADER_set_close(OSSL_STORE_LOADER *loader, OSSL_DEPRECATEDIN_3_0 const ENGINE *OSSL_STORE_LOADER_get0_engine(const OSSL_STORE_LOADER *loader); OSSL_DEPRECATEDIN_3_0 -const char * OSSL_STORE_LOADER_get0_scheme(const OSSL_STORE_LOADER *loader); +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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/thread.h b/deps/openssl/android/x86_64/usr/local/include/openssl/thread.h new file mode 100644 index 00000000..3926ce54 --- /dev/null +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/thread.h @@ -0,0 +1,31 @@ +/* + * 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/x86_64/usr/local/include/openssl/tls1.h b/deps/openssl/android/x86_64/usr/local/include/openssl/tls1.h index 793155e1..7e3d1a72 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/tls1.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/tls1.h @@ -1,5 +1,5 @@ /* - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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. * @@ -28,7 +28,7 @@ extern "C" { /* Default security level if not overridden at config time */ # ifndef OPENSSL_TLS_SECURITY_LEVEL -# define OPENSSL_TLS_SECURITY_LEVEL 1 +# define OPENSSL_TLS_SECURITY_LEVEL 2 # endif /* TLS*_VERSION constants are defined in prov_ssl.h */ @@ -122,6 +122,14 @@ extern "C" { */ # 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 @@ -134,6 +142,9 @@ extern "C" { /* 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 @@ -147,6 +158,7 @@ extern "C" { # 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 @@ -195,6 +207,15 @@ extern "C" { # 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 @@ -211,6 +232,15 @@ extern "C" { # 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/trace.h b/deps/openssl/android/x86_64/usr/local/include/openssl/trace.h index 97e13857..9a5b56ea 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/trace.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/trace.h @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -305,6 +305,14 @@ void OSSL_trace_end(int category, BIO *channel); # 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/ts.h b/deps/openssl/android/x86_64/usr/local/include/openssl/ts.h index 8ff67332..b09b646d 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/ts.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/ts.h @@ -1,5 +1,5 @@ /* - * Copyright 2006-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/types.h b/deps/openssl/android/x86_64/usr/local/include/openssl/types.h index 5f9d8c23..c2802868 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/types.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/types.h @@ -1,5 +1,5 @@ /* - * Copyright 2001-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h b/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h index 483cb9d5..ac132633 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/x509.h.in * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -606,6 +606,8 @@ 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 @@ -654,6 +656,8 @@ 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) @@ -887,7 +891,7 @@ int X509_REQ_get_signature_nid(const X509_REQ *req); int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); -EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +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); @@ -953,13 +957,14 @@ X509_REVOKED_get0_extensions(const X509_REVOKED *r); X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); -int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); +int X509_REQ_check_private_key(const X509_REQ *req, EVP_PKEY *pkey); -int X509_check_private_key(const X509 *x509, const 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); @@ -1265,6 +1270,8 @@ 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h.in index d4df2adc..72103913 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -412,6 +412,8 @@ 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 @@ -460,6 +462,8 @@ 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) @@ -693,7 +697,7 @@ int X509_REQ_get_signature_nid(const X509_REQ *req); int i2d_re_X509_REQ_tbs(X509_REQ *req, unsigned char **pp); int X509_REQ_set_pubkey(X509_REQ *x, EVP_PKEY *pkey); EVP_PKEY *X509_REQ_get_pubkey(X509_REQ *req); -EVP_PKEY *X509_REQ_get0_pubkey(X509_REQ *req); +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); @@ -759,13 +763,14 @@ X509_REVOKED_get0_extensions(const X509_REVOKED *r); X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer, EVP_PKEY *skey, const EVP_MD *md, unsigned int flags); -int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey); +int X509_REQ_check_private_key(const X509_REQ *req, EVP_PKEY *pkey); -int X509_check_private_key(const X509 *x509, const 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); @@ -1071,6 +1076,8 @@ 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h b/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h index 29b0e147..d3dfff8c 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h @@ -2,7 +2,7 @@ * WARNING: do not edit! * Generated by Makefile from include/openssl/x509_vfy.h.in * - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -411,6 +411,7 @@ X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ # 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 @@ -491,71 +492,71 @@ int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); X509_STORE *X509_STORE_new(void); -void X509_STORE_free(X509_STORE *v); -int X509_STORE_lock(X509_STORE *ctx); -int X509_STORE_unlock(X509_STORE *ctx); -int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); -STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, +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 *ctx, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); -int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); +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 *ctx, X509_STORE_CTX_verify_fn verify); +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 *ctx); -void X509_STORE_set_verify_cb(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_issuer(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_issued(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_revocation(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_crl(X509_STORE *ctx, + 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 *ctx); -void X509_STORE_set_check_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cert_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_policy(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_certs(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_crls(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cleanup(X509_STORE *ctx, +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 *ctx); +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 *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); +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); @@ -565,11 +566,14 @@ 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, @@ -579,6 +583,8 @@ 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); @@ -600,7 +606,7 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); # define X509_STORE_get1_crl X509_STORE_CTX_get1_crls #endif -X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP *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); @@ -685,8 +691,8 @@ X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( const X509_LOOKUP_METHOD *method); -int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); -int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); +int X509_STORE_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, @@ -730,23 +736,21 @@ void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); -int X509_STORE_load_file(X509_STORE *ctx, const char *file); -int X509_STORE_load_path(X509_STORE *ctx, const char *path); -int X509_STORE_load_store(X509_STORE *ctx, const char *store); -int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, - const char *dir); -int X509_STORE_set_default_paths(X509_STORE *ctx); +int X509_STORE_load_file(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 *ctx, const char *file, +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 *ctx, const char *store, +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 *ctx, const char *file, - const char *dir, OSSL_LIB_CTX *libctx, - const char *propq); -int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, - const char *propq); +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) @@ -764,6 +768,7 @@ 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); @@ -773,6 +778,8 @@ int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h.in index 80f18bd7..7a478d11 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509_vfy.h.in @@ -1,7 +1,7 @@ /* * {- join("\n * ", @autowarntext) -} * - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * 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 @@ -314,6 +314,7 @@ X509_LOOKUP_ctrl_ex((x), X509_L_ADD_STORE, (name), 0, NULL, \ # 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 @@ -394,71 +395,71 @@ int X509_OBJECT_set1_X509(X509_OBJECT *a, X509 *obj); X509_CRL *X509_OBJECT_get0_X509_CRL(const X509_OBJECT *a); int X509_OBJECT_set1_X509_CRL(X509_OBJECT *a, X509_CRL *obj); X509_STORE *X509_STORE_new(void); -void X509_STORE_free(X509_STORE *v); -int X509_STORE_lock(X509_STORE *ctx); -int X509_STORE_unlock(X509_STORE *ctx); -int X509_STORE_up_ref(X509_STORE *v); -STACK_OF(X509_OBJECT) *X509_STORE_get0_objects(const X509_STORE *v); -STACK_OF(X509) *X509_STORE_get1_all_certs(X509_STORE *st); -STACK_OF(X509) *X509_STORE_CTX_get1_certs(X509_STORE_CTX *st, +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 *ctx, unsigned long flags); -int X509_STORE_set_purpose(X509_STORE *ctx, int purpose); -int X509_STORE_set_trust(X509_STORE *ctx, int trust); -int X509_STORE_set1_param(X509_STORE *ctx, const X509_VERIFY_PARAM *pm); -X509_VERIFY_PARAM *X509_STORE_get0_param(const X509_STORE *ctx); +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 *ctx, X509_STORE_CTX_verify_fn verify); +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 *ctx); -void X509_STORE_set_verify_cb(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_issuer(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_issued(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_revocation(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_get_crl(X509_STORE *ctx, + 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 *ctx); -void X509_STORE_set_check_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cert_crl(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_check_policy(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_certs(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_lookup_crls(X509_STORE *ctx, +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 *ctx); -void X509_STORE_set_cleanup(X509_STORE *ctx, +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 *ctx); +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 *ctx, int idx, void *data); -void *X509_STORE_get_ex_data(const X509_STORE *ctx, int idx); +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); @@ -468,11 +469,14 @@ 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, @@ -482,6 +486,8 @@ 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); @@ -503,7 +509,7 @@ X509_STORE_CTX_cleanup_fn X509_STORE_CTX_get_cleanup(const X509_STORE_CTX *ctx); # define X509_STORE_get1_crl X509_STORE_CTX_get1_crls #endif -X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m); +X509_LOOKUP *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); @@ -588,8 +594,8 @@ X509_LOOKUP_get_by_alias_fn X509_LOOKUP_meth_get_get_by_alias( const X509_LOOKUP_METHOD *method); -int X509_STORE_add_cert(X509_STORE *ctx, X509 *x); -int X509_STORE_add_crl(X509_STORE *ctx, X509_CRL *x); +int X509_STORE_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, @@ -633,23 +639,21 @@ void *X509_LOOKUP_get_method_data(const X509_LOOKUP *ctx); X509_STORE *X509_LOOKUP_get_store(const X509_LOOKUP *ctx); int X509_LOOKUP_shutdown(X509_LOOKUP *ctx); -int X509_STORE_load_file(X509_STORE *ctx, const char *file); -int X509_STORE_load_path(X509_STORE *ctx, const char *path); -int X509_STORE_load_store(X509_STORE *ctx, const char *store); -int X509_STORE_load_locations(X509_STORE *ctx, - const char *file, - const char *dir); -int X509_STORE_set_default_paths(X509_STORE *ctx); +int X509_STORE_load_file(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 *ctx, const char *file, +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 *ctx, const char *store, +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 *ctx, const char *file, - const char *dir, OSSL_LIB_CTX *libctx, - const char *propq); -int X509_STORE_set_default_paths_ex(X509_STORE *ctx, OSSL_LIB_CTX *libctx, - const char *propq); +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) @@ -667,6 +671,7 @@ 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); @@ -676,6 +681,8 @@ int X509_STORE_CTX_purpose_inherit(X509_STORE_CTX *ctx, int def_purpose, 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); diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509err.h b/deps/openssl/android/x86_64/usr/local/include/openssl/x509err.h index 34ead4b8..71b557a3 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509err.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2023 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h b/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h index 75016354..e64da7e0 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h @@ -742,9 +742,10 @@ SKM_DEFINE_STACK_OF_INTERNAL(X509_PURPOSE, X509_PURPOSE, X509_PURPOSE) # 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 9 +# define X509_PURPOSE_MAX 10 /* Flags for X509V3_EXT_print() */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h.in b/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h.in index e33c9d30..56968037 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h.in +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3.h.in @@ -478,9 +478,10 @@ typedef struct x509_purpose_st { # 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 9 +# define X509_PURPOSE_MAX 10 /* Flags for X509V3_EXT_print() */ diff --git a/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3err.h b/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3err.h index 1ae3a562..deede279 100644 --- a/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3err.h +++ b/deps/openssl/android/x86_64/usr/local/include/openssl/x509v3err.h @@ -1,6 +1,6 @@ /* * Generated by util/mkerr.pl DO NOT EDIT - * Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2022 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the Apache License 2.0 (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -23,6 +23,8 @@ */ # 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 @@ -86,6 +88,7 @@ # 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 diff --git a/deps/openssl/android/x86_64/usr/local/lib/libcrypto.a b/deps/openssl/android/x86_64/usr/local/lib/libcrypto.a index 055f5a46c7cb8b947108d55f05a04215a82d0e91..3730c20c6ba761a04fb93b31cebbd9419864c946 100644 GIT binary patch delta 1527109 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