grpc 1.24.0 → 1.25.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +306 -243
- data/etc/roots.pem +0 -100
- data/include/grpc/grpc_security.h +44 -18
- data/include/grpc/impl/codegen/grpc_types.h +15 -0
- data/include/grpc/impl/codegen/port_platform.h +27 -11
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/src/boringssl/err_data.c +695 -650
- data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
- data/src/core/ext/filters/client_channel/client_channel.h +24 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
- data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
- data/src/core/ext/filters/client_channel/resolver.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver.h +8 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
- data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
- data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
- data/src/core/ext/filters/client_channel/service_config.h +8 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
- data/src/core/ext/filters/client_channel/subchannel.h +7 -9
- data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
- data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
- data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
- data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
- data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
- data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
- data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
- data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
- data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
- data/src/core/lib/channel/channel_args.cc +16 -0
- data/src/core/lib/channel/channel_args.h +22 -0
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +20 -20
- data/src/core/lib/channel/handshaker.h +3 -4
- data/src/core/lib/channel/handshaker_factory.h +1 -3
- data/src/core/lib/debug/trace.h +3 -2
- data/src/core/lib/gprpp/arena.cc +3 -3
- data/src/core/lib/gprpp/arena.h +2 -3
- data/src/core/lib/gprpp/inlined_vector.h +9 -0
- data/src/core/lib/gprpp/map.h +3 -501
- data/src/core/lib/gprpp/memory.h +45 -41
- data/src/core/lib/gprpp/mpscq.cc +108 -0
- data/src/core/lib/gprpp/mpscq.h +98 -0
- data/src/core/lib/gprpp/orphanable.h +6 -11
- data/src/core/lib/gprpp/ref_counted.h +25 -19
- data/src/core/lib/gprpp/set.h +33 -0
- data/src/core/lib/gprpp/thd.h +2 -4
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli_security_connector.cc +15 -11
- data/src/core/lib/http/parser.cc +1 -1
- data/src/core/lib/iomgr/buffer_list.cc +4 -5
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +4 -5
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.h +3 -5
- data/src/core/lib/iomgr/closure.h +8 -3
- data/src/core/lib/iomgr/combiner.cc +45 -82
- data/src/core/lib/iomgr/combiner.h +32 -8
- data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
- data/src/core/lib/iomgr/exec_ctx.h +4 -3
- data/src/core/lib/iomgr/executor.cc +4 -2
- data/src/core/lib/iomgr/executor.h +3 -0
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
- data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
- data/src/core/lib/iomgr/executor/threadpool.h +7 -11
- data/src/core/lib/iomgr/resource_quota.cc +55 -51
- data/src/core/lib/iomgr/resource_quota.h +13 -9
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
- data/src/core/lib/iomgr/tcp_custom.cc +9 -7
- data/src/core/lib/iomgr/tcp_posix.cc +20 -16
- data/src/core/lib/iomgr/tcp_server.h +1 -4
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/udp_server.cc +3 -2
- data/src/core/lib/iomgr/udp_server.h +6 -12
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_string.cc +2 -2
- data/src/core/lib/profiling/basic_timers.cc +2 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +4 -20
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/security_connector.h +19 -17
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
- data/src/core/lib/security/transport/security_handshaker.cc +29 -13
- data/src/core/lib/security/transport/security_handshaker.h +4 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
- data/src/core/lib/slice/slice.cc +2 -10
- data/src/core/lib/slice/slice_hash_table.h +4 -6
- data/src/core/lib/slice/slice_intern.cc +42 -39
- data/src/core/lib/slice/slice_internal.h +3 -3
- data/src/core/lib/slice/slice_utils.h +21 -4
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
- data/src/core/lib/surface/call.cc +3 -3
- data/src/core/lib/surface/channel.cc +7 -0
- data/src/core/lib/surface/completion_queue.cc +12 -11
- data/src/core/lib/surface/completion_queue.h +4 -2
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/lame_client.cc +33 -18
- data/src/core/lib/surface/server.cc +77 -76
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -7
- data/src/core/lib/transport/connectivity_state.cc +112 -98
- data/src/core/lib/transport/connectivity_state.h +100 -50
- data/src/core/lib/transport/static_metadata.cc +276 -288
- data/src/core/lib/transport/static_metadata.h +73 -76
- data/src/core/lib/transport/status_conversion.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +1 -1
- data/src/core/lib/transport/transport.cc +2 -2
- data/src/core/lib/transport/transport.h +12 -4
- data/src/core/lib/transport/transport_op_string.cc +14 -11
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
- data/src/core/tsi/fake_transport_security.cc +7 -5
- data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
- data/src/core/tsi/local_transport_security.cc +8 -6
- data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +12 -12
- data/src/core/tsi/ssl_transport_security.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +7 -0
- data/src/core/tsi/transport_security_grpc.h +6 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -1
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
- data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
- data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
- data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
- data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
- data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
- data/third_party/boringssl/crypto/base64/base64.c +2 -2
- data/third_party/boringssl/crypto/bio/bio.c +73 -9
- data/third_party/boringssl/crypto/bio/connect.c +4 -0
- data/third_party/boringssl/crypto/bio/fd.c +4 -0
- data/third_party/boringssl/crypto/bio/file.c +5 -2
- data/third_party/boringssl/crypto/bio/socket.c +4 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
- data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
- data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
- data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
- data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
- data/third_party/boringssl/crypto/chacha/internal.h +45 -0
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
- data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
- data/third_party/boringssl/crypto/conf/conf.c +7 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
- data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
- data/third_party/boringssl/crypto/cpu-intel.c +45 -51
- data/third_party/boringssl/crypto/crypto.c +39 -22
- data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
- data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
- data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
- data/third_party/boringssl/crypto/engine/engine.c +2 -1
- data/third_party/boringssl/crypto/err/err.c +2 -0
- data/third_party/boringssl/crypto/err/internal.h +2 -2
- data/third_party/boringssl/crypto/evp/evp.c +89 -8
- data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
- data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
- data/third_party/boringssl/crypto/evp/internal.h +18 -1
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
- data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
- data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
- data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
- data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
- data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
- data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
- data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
- data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
- data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
- data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
- data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
- data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
- data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
- data/third_party/boringssl/crypto/hrss/internal.h +62 -0
- data/third_party/boringssl/crypto/internal.h +95 -20
- data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
- data/third_party/boringssl/crypto/mem.c +39 -2
- data/third_party/boringssl/crypto/obj/obj.c +4 -4
- data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
- data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
- data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
- data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
- data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
- data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
- data/third_party/boringssl/crypto/pool/internal.h +1 -1
- data/third_party/boringssl/crypto/pool/pool.c +21 -0
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
- data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
- data/third_party/boringssl/crypto/stack/stack.c +83 -32
- data/third_party/boringssl/crypto/thread_none.c +2 -2
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +38 -19
- data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
- data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
- data/third_party/boringssl/crypto/x509/by_file.c +12 -10
- data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
- data/third_party/boringssl/crypto/x509/t_req.c +1 -3
- data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
- data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
- data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
- data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
- data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
- data/third_party/boringssl/crypto/x509/x509name.c +2 -3
- data/third_party/boringssl/crypto/x509/x_all.c +109 -210
- data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
- data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
- data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
- data/third_party/boringssl/include/openssl/aead.h +45 -19
- data/third_party/boringssl/include/openssl/aes.h +32 -7
- data/third_party/boringssl/include/openssl/asn1.h +7 -77
- data/third_party/boringssl/include/openssl/base.h +120 -6
- data/third_party/boringssl/include/openssl/base64.h +4 -1
- data/third_party/boringssl/include/openssl/bio.h +112 -81
- data/third_party/boringssl/include/openssl/blowfish.h +3 -3
- data/third_party/boringssl/include/openssl/bn.h +55 -29
- data/third_party/boringssl/include/openssl/buf.h +2 -2
- data/third_party/boringssl/include/openssl/bytestring.h +54 -32
- data/third_party/boringssl/include/openssl/cast.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +46 -16
- data/third_party/boringssl/include/openssl/cmac.h +6 -2
- data/third_party/boringssl/include/openssl/conf.h +3 -6
- data/third_party/boringssl/include/openssl/cpu.h +25 -9
- data/third_party/boringssl/include/openssl/crypto.h +32 -10
- data/third_party/boringssl/include/openssl/curve25519.h +4 -4
- data/third_party/boringssl/include/openssl/dh.h +3 -2
- data/third_party/boringssl/include/openssl/digest.h +21 -7
- data/third_party/boringssl/include/openssl/dsa.h +8 -2
- data/third_party/boringssl/include/openssl/e_os2.h +18 -0
- data/third_party/boringssl/include/openssl/ec.h +25 -21
- data/third_party/boringssl/include/openssl/ec_key.h +36 -8
- data/third_party/boringssl/include/openssl/ecdh.h +17 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
- data/third_party/boringssl/include/openssl/engine.h +4 -4
- data/third_party/boringssl/include/openssl/err.h +3 -0
- data/third_party/boringssl/include/openssl/evp.h +199 -42
- data/third_party/boringssl/include/openssl/hmac.h +4 -4
- data/third_party/boringssl/include/openssl/hrss.h +100 -0
- data/third_party/boringssl/include/openssl/lhash.h +131 -23
- data/third_party/boringssl/include/openssl/md4.h +6 -4
- data/third_party/boringssl/include/openssl/md5.h +6 -4
- data/third_party/boringssl/include/openssl/mem.h +6 -2
- data/third_party/boringssl/include/openssl/nid.h +3 -0
- data/third_party/boringssl/include/openssl/obj.h +3 -0
- data/third_party/boringssl/include/openssl/pem.h +102 -64
- data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
- data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
- data/third_party/boringssl/include/openssl/pool.h +13 -2
- data/third_party/boringssl/include/openssl/ripemd.h +5 -4
- data/third_party/boringssl/include/openssl/rsa.h +46 -15
- data/third_party/boringssl/include/openssl/sha.h +40 -28
- data/third_party/boringssl/include/openssl/siphash.h +37 -0
- data/third_party/boringssl/include/openssl/span.h +17 -9
- data/third_party/boringssl/include/openssl/ssl.h +766 -393
- data/third_party/boringssl/include/openssl/ssl3.h +4 -3
- data/third_party/boringssl/include/openssl/stack.h +134 -77
- data/third_party/boringssl/include/openssl/thread.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +25 -9
- data/third_party/boringssl/include/openssl/type_check.h +14 -15
- data/third_party/boringssl/include/openssl/x509.h +28 -3
- data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
- data/third_party/boringssl/include/openssl/x509v3.h +17 -13
- data/third_party/boringssl/ssl/d1_both.cc +9 -18
- data/third_party/boringssl/ssl/d1_lib.cc +4 -3
- data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
- data/third_party/boringssl/ssl/dtls_method.cc +0 -1
- data/third_party/boringssl/ssl/dtls_record.cc +28 -28
- data/third_party/boringssl/ssl/handoff.cc +295 -91
- data/third_party/boringssl/ssl/handshake.cc +133 -72
- data/third_party/boringssl/ssl/handshake_client.cc +218 -189
- data/third_party/boringssl/ssl/handshake_server.cc +399 -272
- data/third_party/boringssl/ssl/internal.h +1413 -928
- data/third_party/boringssl/ssl/s3_both.cc +175 -36
- data/third_party/boringssl/ssl/s3_lib.cc +9 -13
- data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
- data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
- data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
- data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
- data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
- data/third_party/boringssl/ssl/ssl_file.cc +2 -0
- data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
- data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
- data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
- data/third_party/boringssl/ssl/ssl_session.cc +230 -178
- data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
- data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
- data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
- data/third_party/boringssl/ssl/t1_enc.cc +5 -96
- data/third_party/boringssl/ssl/t1_lib.cc +931 -678
- data/third_party/boringssl/ssl/tls13_both.cc +251 -121
- data/third_party/boringssl/ssl/tls13_client.cc +129 -73
- data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
- data/third_party/boringssl/ssl/tls13_server.cc +259 -192
- data/third_party/boringssl/ssl/tls_method.cc +26 -21
- data/third_party/boringssl/ssl/tls_record.cc +42 -47
- data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
- data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
- data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
- data/third_party/boringssl/third_party/fiat/p256.c +238 -999
- data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
- data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +2 -1
- metadata +71 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
- data/src/core/lib/gpr/mpscq.cc +0 -117
- data/src/core/lib/gpr/mpscq.h +0 -88
- data/src/core/lib/gprpp/abstract.h +0 -47
- data/src/core/lib/gprpp/pair.h +0 -38
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
- data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
- data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -151,7 +151,7 @@
|
|
151
151
|
#include "../crypto/internal.h"
|
152
152
|
|
153
153
|
|
154
|
-
|
154
|
+
BSSL_NAMESPACE_BEGIN
|
155
155
|
|
156
156
|
// The address of this is a magic value, a pointer to which is returned by
|
157
157
|
// SSL_magic_pending_session_ptr(). It allows a session callback to indicate
|
@@ -166,22 +166,27 @@ static void SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *session);
|
|
166
166
|
static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *session, int lock);
|
167
167
|
|
168
168
|
UniquePtr<SSL_SESSION> ssl_session_new(const SSL_X509_METHOD *x509_method) {
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
169
|
+
return MakeUnique<SSL_SESSION>(x509_method);
|
170
|
+
}
|
171
|
+
|
172
|
+
uint32_t ssl_hash_session_id(Span<const uint8_t> session_id) {
|
173
|
+
// Take the first four bytes of |session_id|. Session IDs are generated by the
|
174
|
+
// server randomly, so we can assume even using the first four bytes results
|
175
|
+
// in a good distribution.
|
176
|
+
uint8_t tmp_storage[sizeof(uint32_t)];
|
177
|
+
if (session_id.size() < sizeof(tmp_storage)) {
|
178
|
+
OPENSSL_memset(tmp_storage, 0, sizeof(tmp_storage));
|
179
|
+
OPENSSL_memcpy(tmp_storage, session_id.data(), session_id.size());
|
180
|
+
session_id = tmp_storage;
|
174
181
|
}
|
175
|
-
OPENSSL_memset(session.get(), 0, sizeof(SSL_SESSION));
|
176
182
|
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
return session;
|
183
|
+
uint32_t hash =
|
184
|
+
((uint32_t)session_id[0]) |
|
185
|
+
((uint32_t)session_id[1] << 8) |
|
186
|
+
((uint32_t)session_id[2] << 16) |
|
187
|
+
((uint32_t)session_id[3] << 24);
|
188
|
+
|
189
|
+
return hash;
|
185
190
|
}
|
186
191
|
|
187
192
|
UniquePtr<SSL_SESSION> SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
|
@@ -202,24 +207,22 @@ UniquePtr<SSL_SESSION> SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
|
|
202
207
|
new_session->cipher = session->cipher;
|
203
208
|
|
204
209
|
// Copy authentication state.
|
205
|
-
if (session->psk_identity !=
|
206
|
-
new_session->psk_identity
|
207
|
-
if (new_session->psk_identity ==
|
210
|
+
if (session->psk_identity != nullptr) {
|
211
|
+
new_session->psk_identity.reset(BUF_strdup(session->psk_identity.get()));
|
212
|
+
if (new_session->psk_identity == nullptr) {
|
208
213
|
return nullptr;
|
209
214
|
}
|
210
215
|
}
|
211
|
-
if (session->certs !=
|
212
|
-
|
213
|
-
|
216
|
+
if (session->certs != nullptr) {
|
217
|
+
auto buf_up_ref = [](CRYPTO_BUFFER *buf) {
|
218
|
+
CRYPTO_BUFFER_up_ref(buf);
|
219
|
+
return buf;
|
220
|
+
};
|
221
|
+
new_session->certs.reset(sk_CRYPTO_BUFFER_deep_copy(
|
222
|
+
session->certs.get(), buf_up_ref, CRYPTO_BUFFER_free));
|
223
|
+
if (new_session->certs == nullptr) {
|
214
224
|
return nullptr;
|
215
225
|
}
|
216
|
-
for (size_t i = 0; i < sk_CRYPTO_BUFFER_num(session->certs); i++) {
|
217
|
-
CRYPTO_BUFFER *buffer = sk_CRYPTO_BUFFER_value(session->certs, i);
|
218
|
-
if (!sk_CRYPTO_BUFFER_push(new_session->certs, buffer)) {
|
219
|
-
return nullptr;
|
220
|
-
}
|
221
|
-
CRYPTO_BUFFER_up_ref(buffer);
|
222
|
-
}
|
223
226
|
}
|
224
227
|
|
225
228
|
if (!session->x509_method->session_dup(new_session.get(), session)) {
|
@@ -228,16 +231,9 @@ UniquePtr<SSL_SESSION> SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
|
|
228
231
|
|
229
232
|
new_session->verify_result = session->verify_result;
|
230
233
|
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
}
|
235
|
-
|
236
|
-
if (session->signed_cert_timestamp_list != NULL) {
|
237
|
-
new_session->signed_cert_timestamp_list =
|
238
|
-
session->signed_cert_timestamp_list;
|
239
|
-
CRYPTO_BUFFER_up_ref(new_session->signed_cert_timestamp_list);
|
240
|
-
}
|
234
|
+
new_session->ocsp_response = UpRef(session->ocsp_response);
|
235
|
+
new_session->signed_cert_timestamp_list =
|
236
|
+
UpRef(session->signed_cert_timestamp_list);
|
241
237
|
|
242
238
|
OPENSSL_memcpy(new_session->peer_sha256, session->peer_sha256,
|
243
239
|
SHA256_DIGEST_LENGTH);
|
@@ -262,36 +258,25 @@ UniquePtr<SSL_SESSION> SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
|
|
262
258
|
session->original_handshake_hash_len);
|
263
259
|
new_session->original_handshake_hash_len =
|
264
260
|
session->original_handshake_hash_len;
|
265
|
-
new_session->
|
261
|
+
new_session->ticket_lifetime_hint = session->ticket_lifetime_hint;
|
266
262
|
new_session->ticket_age_add = session->ticket_age_add;
|
267
263
|
new_session->ticket_max_early_data = session->ticket_max_early_data;
|
268
264
|
new_session->extended_master_secret = session->extended_master_secret;
|
269
265
|
|
270
|
-
if (session->early_alpn
|
271
|
-
|
272
|
-
(uint8_t *)BUF_memdup(session->early_alpn, session->early_alpn_len);
|
273
|
-
if (new_session->early_alpn == NULL) {
|
274
|
-
return nullptr;
|
275
|
-
}
|
266
|
+
if (!new_session->early_alpn.CopyFrom(session->early_alpn)) {
|
267
|
+
return nullptr;
|
276
268
|
}
|
277
|
-
new_session->early_alpn_len = session->early_alpn_len;
|
278
269
|
}
|
279
270
|
|
280
271
|
// Copy the ticket.
|
281
|
-
if (dup_flags & SSL_SESSION_INCLUDE_TICKET
|
282
|
-
|
283
|
-
|
284
|
-
(uint8_t *)BUF_memdup(session->tlsext_tick, session->tlsext_ticklen);
|
285
|
-
if (new_session->tlsext_tick == NULL) {
|
286
|
-
return nullptr;
|
287
|
-
}
|
288
|
-
}
|
289
|
-
new_session->tlsext_ticklen = session->tlsext_ticklen;
|
272
|
+
if (dup_flags & SSL_SESSION_INCLUDE_TICKET &&
|
273
|
+
!new_session->ticket.CopyFrom(session->ticket)) {
|
274
|
+
return nullptr;
|
290
275
|
}
|
291
276
|
|
292
277
|
// The new_session does not get a copy of the ex_data.
|
293
278
|
|
294
|
-
new_session->not_resumable =
|
279
|
+
new_session->not_resumable = true;
|
295
280
|
return new_session;
|
296
281
|
}
|
297
282
|
|
@@ -405,16 +390,16 @@ int ssl_get_new_session(SSL_HANDSHAKE *hs, int is_server) {
|
|
405
390
|
session->session_id_length = 0;
|
406
391
|
}
|
407
392
|
|
408
|
-
if (
|
393
|
+
if (hs->config->cert->sid_ctx_length > sizeof(session->sid_ctx)) {
|
409
394
|
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
410
395
|
return 0;
|
411
396
|
}
|
412
|
-
OPENSSL_memcpy(session->sid_ctx,
|
413
|
-
|
414
|
-
session->sid_ctx_length =
|
397
|
+
OPENSSL_memcpy(session->sid_ctx, hs->config->cert->sid_ctx,
|
398
|
+
hs->config->cert->sid_ctx_length);
|
399
|
+
session->sid_ctx_length = hs->config->cert->sid_ctx_length;
|
415
400
|
|
416
401
|
// The session is marked not resumable until it is completely filled in.
|
417
|
-
session->not_resumable =
|
402
|
+
session->not_resumable = true;
|
418
403
|
session->verify_result = X509_V_ERR_INVALID_CALL;
|
419
404
|
|
420
405
|
hs->new_session = std::move(session);
|
@@ -429,53 +414,50 @@ int ssl_ctx_rotate_ticket_encryption_key(SSL_CTX *ctx) {
|
|
429
414
|
// Avoid acquiring a write lock in the common case (i.e. a non-default key
|
430
415
|
// is used or the default keys have not expired yet).
|
431
416
|
MutexReadLock lock(&ctx->lock);
|
432
|
-
if (ctx->
|
433
|
-
(ctx->
|
434
|
-
ctx->
|
435
|
-
(!ctx->
|
436
|
-
ctx->
|
417
|
+
if (ctx->ticket_key_current &&
|
418
|
+
(ctx->ticket_key_current->next_rotation_tv_sec == 0 ||
|
419
|
+
ctx->ticket_key_current->next_rotation_tv_sec > now.tv_sec) &&
|
420
|
+
(!ctx->ticket_key_prev ||
|
421
|
+
ctx->ticket_key_prev->next_rotation_tv_sec > now.tv_sec)) {
|
437
422
|
return 1;
|
438
423
|
}
|
439
424
|
}
|
440
425
|
|
441
426
|
MutexWriteLock lock(&ctx->lock);
|
442
|
-
if (!ctx->
|
443
|
-
(ctx->
|
444
|
-
ctx->
|
427
|
+
if (!ctx->ticket_key_current ||
|
428
|
+
(ctx->ticket_key_current->next_rotation_tv_sec != 0 &&
|
429
|
+
ctx->ticket_key_current->next_rotation_tv_sec <= now.tv_sec)) {
|
445
430
|
// The current key has not been initialized or it is expired.
|
446
|
-
auto new_key = bssl::MakeUnique<
|
431
|
+
auto new_key = bssl::MakeUnique<TicketKey>();
|
447
432
|
if (!new_key) {
|
448
433
|
return 0;
|
449
434
|
}
|
450
|
-
|
451
|
-
|
435
|
+
RAND_bytes(new_key->name, 16);
|
436
|
+
RAND_bytes(new_key->hmac_key, 16);
|
437
|
+
RAND_bytes(new_key->aes_key, 16);
|
438
|
+
new_key->next_rotation_tv_sec =
|
439
|
+
now.tv_sec + SSL_DEFAULT_TICKET_KEY_ROTATION_INTERVAL;
|
440
|
+
if (ctx->ticket_key_current) {
|
452
441
|
// The current key expired. Rotate it to prev and bump up its rotation
|
453
442
|
// timestamp. Note that even with the new rotation time it may still be
|
454
|
-
// expired and get
|
455
|
-
ctx->
|
443
|
+
// expired and get dropped below.
|
444
|
+
ctx->ticket_key_current->next_rotation_tv_sec +=
|
456
445
|
SSL_DEFAULT_TICKET_KEY_ROTATION_INTERVAL;
|
457
|
-
|
458
|
-
ctx->tlsext_ticket_key_prev = ctx->tlsext_ticket_key_current;
|
446
|
+
ctx->ticket_key_prev = std::move(ctx->ticket_key_current);
|
459
447
|
}
|
460
|
-
ctx->
|
461
|
-
RAND_bytes(ctx->tlsext_ticket_key_current->name, 16);
|
462
|
-
RAND_bytes(ctx->tlsext_ticket_key_current->hmac_key, 16);
|
463
|
-
RAND_bytes(ctx->tlsext_ticket_key_current->aes_key, 16);
|
464
|
-
ctx->tlsext_ticket_key_current->next_rotation_tv_sec =
|
465
|
-
now.tv_sec + SSL_DEFAULT_TICKET_KEY_ROTATION_INTERVAL;
|
448
|
+
ctx->ticket_key_current = std::move(new_key);
|
466
449
|
}
|
467
450
|
|
468
451
|
// Drop an expired prev key.
|
469
|
-
if (ctx->
|
470
|
-
ctx->
|
471
|
-
|
472
|
-
ctx->tlsext_ticket_key_prev = nullptr;
|
452
|
+
if (ctx->ticket_key_prev &&
|
453
|
+
ctx->ticket_key_prev->next_rotation_tv_sec <= now.tv_sec) {
|
454
|
+
ctx->ticket_key_prev.reset();
|
473
455
|
}
|
474
456
|
|
475
457
|
return 1;
|
476
458
|
}
|
477
459
|
|
478
|
-
static int ssl_encrypt_ticket_with_cipher_ctx(
|
460
|
+
static int ssl_encrypt_ticket_with_cipher_ctx(SSL_HANDSHAKE *hs, CBB *out,
|
479
461
|
const uint8_t *session_buf,
|
480
462
|
size_t session_len) {
|
481
463
|
ScopedEVP_CIPHER_CTX ctx;
|
@@ -493,12 +475,12 @@ static int ssl_encrypt_ticket_with_cipher_ctx(SSL *ssl, CBB *out,
|
|
493
475
|
|
494
476
|
// Initialize HMAC and cipher contexts. If callback present it does all the
|
495
477
|
// work otherwise use generated values from parent ctx.
|
496
|
-
SSL_CTX *tctx = ssl->session_ctx;
|
478
|
+
SSL_CTX *tctx = hs->ssl->session_ctx.get();
|
497
479
|
uint8_t iv[EVP_MAX_IV_LENGTH];
|
498
480
|
uint8_t key_name[16];
|
499
|
-
if (tctx->
|
500
|
-
if (tctx->
|
501
|
-
|
481
|
+
if (tctx->ticket_key_cb != NULL) {
|
482
|
+
if (tctx->ticket_key_cb(hs->ssl, key_name, iv, ctx.get(), hctx.get(),
|
483
|
+
1 /* encrypt */) < 0) {
|
502
484
|
return 0;
|
503
485
|
}
|
504
486
|
} else {
|
@@ -509,12 +491,12 @@ static int ssl_encrypt_ticket_with_cipher_ctx(SSL *ssl, CBB *out,
|
|
509
491
|
MutexReadLock lock(&tctx->lock);
|
510
492
|
if (!RAND_bytes(iv, 16) ||
|
511
493
|
!EVP_EncryptInit_ex(ctx.get(), EVP_aes_128_cbc(), NULL,
|
512
|
-
tctx->
|
513
|
-
!HMAC_Init_ex(hctx.get(), tctx->
|
494
|
+
tctx->ticket_key_current->aes_key, iv) ||
|
495
|
+
!HMAC_Init_ex(hctx.get(), tctx->ticket_key_current->hmac_key, 16,
|
514
496
|
tlsext_tick_md(), NULL)) {
|
515
497
|
return 0;
|
516
498
|
}
|
517
|
-
OPENSSL_memcpy(key_name, tctx->
|
499
|
+
OPENSSL_memcpy(key_name, tctx->ticket_key_current->name, 16);
|
518
500
|
}
|
519
501
|
|
520
502
|
uint8_t *ptr;
|
@@ -554,9 +536,10 @@ static int ssl_encrypt_ticket_with_cipher_ctx(SSL *ssl, CBB *out,
|
|
554
536
|
return 1;
|
555
537
|
}
|
556
538
|
|
557
|
-
static int ssl_encrypt_ticket_with_method(
|
539
|
+
static int ssl_encrypt_ticket_with_method(SSL_HANDSHAKE *hs, CBB *out,
|
558
540
|
const uint8_t *session_buf,
|
559
541
|
size_t session_len) {
|
542
|
+
SSL *const ssl = hs->ssl;
|
560
543
|
const SSL_TICKET_AEAD_METHOD *method = ssl->session_ctx->ticket_aead_method;
|
561
544
|
const size_t max_overhead = method->max_overhead(ssl);
|
562
545
|
const size_t max_out = session_len + max_overhead;
|
@@ -571,7 +554,8 @@ static int ssl_encrypt_ticket_with_method(SSL *ssl, CBB *out,
|
|
571
554
|
}
|
572
555
|
|
573
556
|
size_t out_len;
|
574
|
-
if (!method->seal(ssl, ptr, &out_len, max_out, session_buf,
|
557
|
+
if (!method->seal(ssl, ptr, &out_len, max_out, session_buf,
|
558
|
+
session_len)) {
|
575
559
|
OPENSSL_PUT_ERROR(SSL, SSL_R_TICKET_ENCRYPTION_FAILED);
|
576
560
|
return 0;
|
577
561
|
}
|
@@ -583,7 +567,8 @@ static int ssl_encrypt_ticket_with_method(SSL *ssl, CBB *out,
|
|
583
567
|
return 1;
|
584
568
|
}
|
585
569
|
|
586
|
-
int ssl_encrypt_ticket(
|
570
|
+
int ssl_encrypt_ticket(SSL_HANDSHAKE *hs, CBB *out,
|
571
|
+
const SSL_SESSION *session) {
|
587
572
|
// Serialize the SSL_SESSION to be encoded into the ticket.
|
588
573
|
uint8_t *session_buf = NULL;
|
589
574
|
size_t session_len;
|
@@ -592,25 +577,25 @@ int ssl_encrypt_ticket(SSL *ssl, CBB *out, const SSL_SESSION *session) {
|
|
592
577
|
}
|
593
578
|
|
594
579
|
int ret = 0;
|
595
|
-
if (ssl->session_ctx->ticket_aead_method) {
|
596
|
-
ret = ssl_encrypt_ticket_with_method(
|
580
|
+
if (hs->ssl->session_ctx->ticket_aead_method) {
|
581
|
+
ret = ssl_encrypt_ticket_with_method(hs, out, session_buf, session_len);
|
597
582
|
} else {
|
598
|
-
ret =
|
599
|
-
ssl_encrypt_ticket_with_cipher_ctx(ssl, out, session_buf, session_len);
|
583
|
+
ret = ssl_encrypt_ticket_with_cipher_ctx(hs, out, session_buf, session_len);
|
600
584
|
}
|
601
585
|
|
602
586
|
OPENSSL_free(session_buf);
|
603
587
|
return ret;
|
604
588
|
}
|
605
589
|
|
606
|
-
int ssl_session_is_context_valid(const
|
590
|
+
int ssl_session_is_context_valid(const SSL_HANDSHAKE *hs,
|
591
|
+
const SSL_SESSION *session) {
|
607
592
|
if (session == NULL) {
|
608
593
|
return 0;
|
609
594
|
}
|
610
595
|
|
611
|
-
return session->sid_ctx_length ==
|
612
|
-
OPENSSL_memcmp(session->sid_ctx,
|
613
|
-
|
596
|
+
return session->sid_ctx_length == hs->config->cert->sid_ctx_length &&
|
597
|
+
OPENSSL_memcmp(session->sid_ctx, hs->config->cert->sid_ctx,
|
598
|
+
hs->config->cert->sid_ctx_length) == 0;
|
614
599
|
}
|
615
600
|
|
616
601
|
int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session) {
|
@@ -632,34 +617,35 @@ int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session) {
|
|
632
617
|
int ssl_session_is_resumable(const SSL_HANDSHAKE *hs,
|
633
618
|
const SSL_SESSION *session) {
|
634
619
|
const SSL *const ssl = hs->ssl;
|
635
|
-
return ssl_session_is_context_valid(
|
620
|
+
return ssl_session_is_context_valid(hs, session) &&
|
636
621
|
// The session must have been created by the same type of end point as
|
637
622
|
// we're now using it with.
|
638
623
|
ssl->server == session->is_server &&
|
639
624
|
// The session must not be expired.
|
640
625
|
ssl_session_is_time_valid(ssl, session) &&
|
641
626
|
/* Only resume if the session's version matches the negotiated
|
642
|
-
|
627
|
+
* version. */
|
643
628
|
ssl->version == session->ssl_version &&
|
644
629
|
// Only resume if the session's cipher matches the negotiated one.
|
645
630
|
hs->new_cipher == session->cipher &&
|
646
631
|
// If the session contains a client certificate (either the full
|
647
632
|
// certificate or just the hash) then require that the form of the
|
648
633
|
// certificate matches the current configuration.
|
649
|
-
((sk_CRYPTO_BUFFER_num(session->certs) == 0 &&
|
634
|
+
((sk_CRYPTO_BUFFER_num(session->certs.get()) == 0 &&
|
650
635
|
!session->peer_sha256_valid) ||
|
651
636
|
session->peer_sha256_valid ==
|
652
|
-
|
637
|
+
hs->config->retain_only_sha256_of_client_certs);
|
653
638
|
}
|
654
639
|
|
655
640
|
// ssl_lookup_session looks up |session_id| in the session cache and sets
|
656
641
|
// |*out_session| to an |SSL_SESSION| object if found.
|
657
642
|
static enum ssl_hs_wait_t ssl_lookup_session(
|
658
|
-
|
659
|
-
|
643
|
+
SSL_HANDSHAKE *hs, UniquePtr<SSL_SESSION> *out_session,
|
644
|
+
Span<const uint8_t> session_id) {
|
645
|
+
SSL *const ssl = hs->ssl;
|
660
646
|
out_session->reset();
|
661
647
|
|
662
|
-
if (
|
648
|
+
if (session_id.empty() || session_id.size() > SSL_MAX_SSL_SESSION_ID_LENGTH) {
|
663
649
|
return ssl_hs_ok;
|
664
650
|
}
|
665
651
|
|
@@ -667,32 +653,26 @@ static enum ssl_hs_wait_t ssl_lookup_session(
|
|
667
653
|
// Try the internal cache, if it exists.
|
668
654
|
if (!(ssl->session_ctx->session_cache_mode &
|
669
655
|
SSL_SESS_CACHE_NO_INTERNAL_LOOKUP)) {
|
670
|
-
|
671
|
-
|
672
|
-
|
673
|
-
|
674
|
-
|
656
|
+
uint32_t hash = ssl_hash_session_id(session_id);
|
657
|
+
auto cmp = [](const void *key, const SSL_SESSION *sess) -> int {
|
658
|
+
Span<const uint8_t> key_id =
|
659
|
+
*reinterpret_cast<const Span<const uint8_t> *>(key);
|
660
|
+
Span<const uint8_t> sess_id =
|
661
|
+
MakeConstSpan(sess->session_id, sess->session_id_length);
|
662
|
+
return key_id == sess_id ? 0 : 1;
|
663
|
+
};
|
675
664
|
MutexReadLock lock(&ssl->session_ctx->lock);
|
676
|
-
|
677
|
-
|
678
|
-
|
679
|
-
SSL_SESSION_up_ref(session.get());
|
680
|
-
}
|
665
|
+
// |lh_SSL_SESSION_retrieve_key| returns a non-owning pointer.
|
666
|
+
session = UpRef(lh_SSL_SESSION_retrieve_key(ssl->session_ctx->sessions,
|
667
|
+
&session_id, hash, cmp));
|
681
668
|
// TODO(davidben): This should probably move it to the front of the list.
|
682
669
|
}
|
683
670
|
|
684
671
|
// Fall back to the external cache, if it exists.
|
685
|
-
if (!session &&
|
686
|
-
ssl->session_ctx->get_session_cb_legacy != nullptr)) {
|
672
|
+
if (!session && ssl->session_ctx->get_session_cb != nullptr) {
|
687
673
|
int copy = 1;
|
688
|
-
|
689
|
-
|
690
|
-
session_id_len, ©));
|
691
|
-
} else {
|
692
|
-
session.reset(ssl->session_ctx->get_session_cb_legacy(
|
693
|
-
ssl, const_cast<uint8_t *>(session_id), session_id_len, ©));
|
694
|
-
}
|
695
|
-
|
674
|
+
session.reset(ssl->session_ctx->get_session_cb(ssl, session_id.data(),
|
675
|
+
session_id.size(), ©));
|
696
676
|
if (!session) {
|
697
677
|
return ssl_hs_ok;
|
698
678
|
}
|
@@ -713,13 +693,13 @@ static enum ssl_hs_wait_t ssl_lookup_session(
|
|
713
693
|
// Add the externally cached session to the internal cache if necessary.
|
714
694
|
if (!(ssl->session_ctx->session_cache_mode &
|
715
695
|
SSL_SESS_CACHE_NO_INTERNAL_STORE)) {
|
716
|
-
SSL_CTX_add_session(ssl->session_ctx, session.get());
|
696
|
+
SSL_CTX_add_session(ssl->session_ctx.get(), session.get());
|
717
697
|
}
|
718
698
|
}
|
719
699
|
|
720
700
|
if (session && !ssl_session_is_time_valid(ssl, session.get())) {
|
721
701
|
// The session was from the cache, so remove it.
|
722
|
-
SSL_CTX_remove_session(ssl->session_ctx, session.get());
|
702
|
+
SSL_CTX_remove_session(ssl->session_ctx.get(), session.get());
|
723
703
|
session.reset();
|
724
704
|
}
|
725
705
|
|
@@ -727,28 +707,26 @@ static enum ssl_hs_wait_t ssl_lookup_session(
|
|
727
707
|
return ssl_hs_ok;
|
728
708
|
}
|
729
709
|
|
730
|
-
enum ssl_hs_wait_t ssl_get_prev_session(
|
710
|
+
enum ssl_hs_wait_t ssl_get_prev_session(SSL_HANDSHAKE *hs,
|
731
711
|
UniquePtr<SSL_SESSION> *out_session,
|
732
712
|
bool *out_tickets_supported,
|
733
713
|
bool *out_renew_ticket,
|
734
714
|
const SSL_CLIENT_HELLO *client_hello) {
|
735
715
|
// This is used only by servers.
|
736
|
-
assert(ssl->server);
|
716
|
+
assert(hs->ssl->server);
|
737
717
|
UniquePtr<SSL_SESSION> session;
|
738
718
|
bool renew_ticket = false;
|
739
719
|
|
740
720
|
// If tickets are disabled, always behave as if no tickets are present.
|
741
|
-
|
742
|
-
size_t ticket_len = 0;
|
721
|
+
CBS ticket;
|
743
722
|
const bool tickets_supported =
|
744
|
-
!(SSL_get_options(ssl) & SSL_OP_NO_TICKET) &&
|
745
|
-
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
client_hello->session_id_len)) {
|
723
|
+
!(SSL_get_options(hs->ssl) & SSL_OP_NO_TICKET) &&
|
724
|
+
ssl_client_hello_get_extension(client_hello, &ticket,
|
725
|
+
TLSEXT_TYPE_session_ticket);
|
726
|
+
if (tickets_supported && CBS_len(&ticket) != 0) {
|
727
|
+
switch (ssl_process_ticket(hs, &session, &renew_ticket, ticket,
|
728
|
+
MakeConstSpan(client_hello->session_id,
|
729
|
+
client_hello->session_id_len))) {
|
752
730
|
case ssl_ticket_aead_success:
|
753
731
|
break;
|
754
732
|
case ssl_ticket_aead_ignore_ticket:
|
@@ -762,7 +740,8 @@ enum ssl_hs_wait_t ssl_get_prev_session(SSL *ssl,
|
|
762
740
|
} else {
|
763
741
|
// The client didn't send a ticket, so the session ID is a real ID.
|
764
742
|
enum ssl_hs_wait_t lookup_ret = ssl_lookup_session(
|
765
|
-
|
743
|
+
hs, &session,
|
744
|
+
MakeConstSpan(client_hello->session_id, client_hello->session_id_len));
|
766
745
|
if (lookup_ret != ssl_hs_ok) {
|
767
746
|
return lookup_ret;
|
768
747
|
}
|
@@ -805,15 +784,11 @@ static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *session, int lock) {
|
|
805
784
|
}
|
806
785
|
|
807
786
|
void ssl_set_session(SSL *ssl, SSL_SESSION *session) {
|
808
|
-
if (ssl->session == session) {
|
787
|
+
if (ssl->session.get() == session) {
|
809
788
|
return;
|
810
789
|
}
|
811
790
|
|
812
|
-
|
813
|
-
ssl->session = session;
|
814
|
-
if (session != NULL) {
|
815
|
-
SSL_SESSION_up_ref(session);
|
816
|
-
}
|
791
|
+
ssl->session = UpRef(session);
|
817
792
|
}
|
818
793
|
|
819
794
|
// locked by SSL_CTX in the calling function
|
@@ -863,10 +838,26 @@ static void SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *session) {
|
|
863
838
|
}
|
864
839
|
}
|
865
840
|
|
866
|
-
|
841
|
+
BSSL_NAMESPACE_END
|
867
842
|
|
868
843
|
using namespace bssl;
|
869
844
|
|
845
|
+
ssl_session_st::ssl_session_st(const SSL_X509_METHOD *method)
|
846
|
+
: x509_method(method),
|
847
|
+
extended_master_secret(false),
|
848
|
+
peer_sha256_valid(false),
|
849
|
+
not_resumable(false),
|
850
|
+
ticket_age_add_valid(false),
|
851
|
+
is_server(false) {
|
852
|
+
CRYPTO_new_ex_data(&ex_data);
|
853
|
+
time = ::time(nullptr);
|
854
|
+
}
|
855
|
+
|
856
|
+
ssl_session_st::~ssl_session_st() {
|
857
|
+
CRYPTO_free_ex_data(&g_ex_data_class, this, &ex_data);
|
858
|
+
x509_method->session_clear(this);
|
859
|
+
}
|
860
|
+
|
870
861
|
SSL_SESSION *SSL_SESSION_new(const SSL_CTX *ctx) {
|
871
862
|
return ssl_session_new(ctx->x509_method).release();
|
872
863
|
}
|
@@ -882,17 +873,7 @@ void SSL_SESSION_free(SSL_SESSION *session) {
|
|
882
873
|
return;
|
883
874
|
}
|
884
875
|
|
885
|
-
|
886
|
-
|
887
|
-
OPENSSL_cleanse(session->master_key, sizeof(session->master_key));
|
888
|
-
OPENSSL_cleanse(session->session_id, sizeof(session->session_id));
|
889
|
-
sk_CRYPTO_BUFFER_pop_free(session->certs, CRYPTO_BUFFER_free);
|
890
|
-
session->x509_method->session_clear(session);
|
891
|
-
OPENSSL_free(session->tlsext_tick);
|
892
|
-
CRYPTO_BUFFER_free(session->signed_cert_timestamp_list);
|
893
|
-
CRYPTO_BUFFER_free(session->ocsp_response);
|
894
|
-
OPENSSL_free(session->psk_identity);
|
895
|
-
OPENSSL_free(session->early_alpn);
|
876
|
+
session->~ssl_session_st();
|
896
877
|
OPENSSL_free(session);
|
897
878
|
}
|
898
879
|
|
@@ -904,6 +885,19 @@ const uint8_t *SSL_SESSION_get_id(const SSL_SESSION *session,
|
|
904
885
|
return session->session_id;
|
905
886
|
}
|
906
887
|
|
888
|
+
int SSL_SESSION_set1_id(SSL_SESSION *session, const uint8_t *sid,
|
889
|
+
size_t sid_len) {
|
890
|
+
if (sid_len > SSL_MAX_SSL_SESSION_ID_LENGTH) {
|
891
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_SESSION_ID_TOO_LONG);
|
892
|
+
return 0;
|
893
|
+
}
|
894
|
+
|
895
|
+
// Use memmove in case someone passes in the output of |SSL_SESSION_get_id|.
|
896
|
+
OPENSSL_memmove(session->session_id, sid, sid_len);
|
897
|
+
session->session_id_length = sid_len;
|
898
|
+
return 1;
|
899
|
+
}
|
900
|
+
|
907
901
|
uint32_t SSL_SESSION_get_timeout(const SSL_SESSION *session) {
|
908
902
|
return session->timeout;
|
909
903
|
}
|
@@ -920,6 +914,34 @@ X509 *SSL_SESSION_get0_peer(const SSL_SESSION *session) {
|
|
920
914
|
return session->x509_peer;
|
921
915
|
}
|
922
916
|
|
917
|
+
const STACK_OF(CRYPTO_BUFFER) *
|
918
|
+
SSL_SESSION_get0_peer_certificates(const SSL_SESSION *session) {
|
919
|
+
return session->certs.get();
|
920
|
+
}
|
921
|
+
|
922
|
+
void SSL_SESSION_get0_signed_cert_timestamp_list(const SSL_SESSION *session,
|
923
|
+
const uint8_t **out,
|
924
|
+
size_t *out_len) {
|
925
|
+
if (session->signed_cert_timestamp_list) {
|
926
|
+
*out = CRYPTO_BUFFER_data(session->signed_cert_timestamp_list.get());
|
927
|
+
*out_len = CRYPTO_BUFFER_len(session->signed_cert_timestamp_list.get());
|
928
|
+
} else {
|
929
|
+
*out = nullptr;
|
930
|
+
*out_len = 0;
|
931
|
+
}
|
932
|
+
}
|
933
|
+
|
934
|
+
void SSL_SESSION_get0_ocsp_response(const SSL_SESSION *session,
|
935
|
+
const uint8_t **out, size_t *out_len) {
|
936
|
+
if (session->ocsp_response) {
|
937
|
+
*out = CRYPTO_BUFFER_data(session->ocsp_response.get());
|
938
|
+
*out_len = CRYPTO_BUFFER_len(session->ocsp_response.get());
|
939
|
+
} else {
|
940
|
+
*out = nullptr;
|
941
|
+
*out_len = 0;
|
942
|
+
}
|
943
|
+
}
|
944
|
+
|
923
945
|
size_t SSL_SESSION_get_master_key(const SSL_SESSION *session, uint8_t *out,
|
924
946
|
size_t max_out) {
|
925
947
|
// TODO(davidben): Fix master_key_length's type and remove these casts.
|
@@ -952,6 +974,14 @@ uint32_t SSL_SESSION_set_timeout(SSL_SESSION *session, uint32_t timeout) {
|
|
952
974
|
return 1;
|
953
975
|
}
|
954
976
|
|
977
|
+
const uint8_t *SSL_SESSION_get0_id_context(const SSL_SESSION *session,
|
978
|
+
unsigned *out_len) {
|
979
|
+
if (out_len != NULL) {
|
980
|
+
*out_len = session->sid_ctx_length;
|
981
|
+
}
|
982
|
+
return session->sid_ctx;
|
983
|
+
}
|
984
|
+
|
955
985
|
int SSL_SESSION_set1_id_context(SSL_SESSION *session, const uint8_t *sid_ctx,
|
956
986
|
size_t sid_ctx_len) {
|
957
987
|
if (sid_ctx_len > sizeof(session->sid_ctx)) {
|
@@ -975,19 +1005,48 @@ int SSL_SESSION_is_resumable(const SSL_SESSION *session) {
|
|
975
1005
|
}
|
976
1006
|
|
977
1007
|
int SSL_SESSION_has_ticket(const SSL_SESSION *session) {
|
978
|
-
return session->
|
1008
|
+
return !session->ticket.empty();
|
979
1009
|
}
|
980
1010
|
|
981
1011
|
void SSL_SESSION_get0_ticket(const SSL_SESSION *session,
|
982
1012
|
const uint8_t **out_ticket, size_t *out_len) {
|
983
1013
|
if (out_ticket != nullptr) {
|
984
|
-
*out_ticket = session->
|
1014
|
+
*out_ticket = session->ticket.data();
|
985
1015
|
}
|
986
|
-
*out_len = session->
|
1016
|
+
*out_len = session->ticket.size();
|
1017
|
+
}
|
1018
|
+
|
1019
|
+
int SSL_SESSION_set_ticket(SSL_SESSION *session, const uint8_t *ticket,
|
1020
|
+
size_t ticket_len) {
|
1021
|
+
return session->ticket.CopyFrom(MakeConstSpan(ticket, ticket_len));
|
987
1022
|
}
|
988
1023
|
|
989
1024
|
uint32_t SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *session) {
|
990
|
-
return session->
|
1025
|
+
return session->ticket_lifetime_hint;
|
1026
|
+
}
|
1027
|
+
|
1028
|
+
const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *session) {
|
1029
|
+
return session->cipher;
|
1030
|
+
}
|
1031
|
+
|
1032
|
+
int SSL_SESSION_has_peer_sha256(const SSL_SESSION *session) {
|
1033
|
+
return session->peer_sha256_valid;
|
1034
|
+
}
|
1035
|
+
|
1036
|
+
void SSL_SESSION_get0_peer_sha256(const SSL_SESSION *session,
|
1037
|
+
const uint8_t **out_ptr, size_t *out_len) {
|
1038
|
+
if (session->peer_sha256_valid) {
|
1039
|
+
*out_ptr = session->peer_sha256;
|
1040
|
+
*out_len = sizeof(session->peer_sha256);
|
1041
|
+
} else {
|
1042
|
+
*out_ptr = nullptr;
|
1043
|
+
*out_len = 0;
|
1044
|
+
}
|
1045
|
+
}
|
1046
|
+
|
1047
|
+
int SSL_SESSION_early_data_capable(const SSL_SESSION *session) {
|
1048
|
+
return ssl_session_protocol_version(session) >= TLS1_3_VERSION &&
|
1049
|
+
session->ticket_max_early_data != 0;
|
991
1050
|
}
|
992
1051
|
|
993
1052
|
SSL_SESSION *SSL_magic_pending_session_ptr(void) {
|
@@ -1008,7 +1067,7 @@ SSL_SESSION *SSL_get_session(const SSL *ssl) {
|
|
1008
1067
|
if (hs->new_session) {
|
1009
1068
|
return hs->new_session.get();
|
1010
1069
|
}
|
1011
|
-
return ssl->session;
|
1070
|
+
return ssl->session.get();
|
1012
1071
|
}
|
1013
1072
|
|
1014
1073
|
SSL_SESSION *SSL_get1_session(SSL *ssl) {
|
@@ -1042,8 +1101,7 @@ void *SSL_SESSION_get_ex_data(const SSL_SESSION *session, int idx) {
|
|
1042
1101
|
int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session) {
|
1043
1102
|
// Although |session| is inserted into two structures (a doubly-linked list
|
1044
1103
|
// and the hash table), |ctx| only takes one reference.
|
1045
|
-
|
1046
|
-
UniquePtr<SSL_SESSION> owned_session(session);
|
1104
|
+
UniquePtr<SSL_SESSION> owned_session = UpRef(session);
|
1047
1105
|
|
1048
1106
|
SSL_SESSION *old_session;
|
1049
1107
|
MutexWriteLock lock(&ctx->lock);
|
@@ -1188,12 +1246,6 @@ void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
|
|
1188
1246
|
ctx->get_session_cb = cb;
|
1189
1247
|
}
|
1190
1248
|
|
1191
|
-
void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
|
1192
|
-
SSL_SESSION *(*cb)(SSL *ssl, uint8_t *id,
|
1193
|
-
int id_len, int *out_copy)) {
|
1194
|
-
ctx->get_session_cb_legacy = cb;
|
1195
|
-
}
|
1196
|
-
|
1197
1249
|
SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl,
|
1198
1250
|
const uint8_t *id,
|
1199
1251
|
int id_len,
|