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
@@ -26,6 +26,8 @@
|
|
26
26
|
#include "internal.h"
|
27
27
|
|
28
28
|
|
29
|
+
DEFINE_LHASH_OF(CRYPTO_BUFFER)
|
30
|
+
|
29
31
|
static uint32_t CRYPTO_BUFFER_hash(const CRYPTO_BUFFER *buf) {
|
30
32
|
return OPENSSL_hash32(buf->data, buf->len);
|
31
33
|
}
|
@@ -135,6 +137,25 @@ CRYPTO_BUFFER *CRYPTO_BUFFER_new(const uint8_t *data, size_t len,
|
|
135
137
|
return buf;
|
136
138
|
}
|
137
139
|
|
140
|
+
CRYPTO_BUFFER *CRYPTO_BUFFER_alloc(uint8_t **out_data, size_t len) {
|
141
|
+
CRYPTO_BUFFER *const buf = OPENSSL_malloc(sizeof(CRYPTO_BUFFER));
|
142
|
+
if (buf == NULL) {
|
143
|
+
return NULL;
|
144
|
+
}
|
145
|
+
OPENSSL_memset(buf, 0, sizeof(CRYPTO_BUFFER));
|
146
|
+
|
147
|
+
buf->data = OPENSSL_malloc(len);
|
148
|
+
if (len != 0 && buf->data == NULL) {
|
149
|
+
OPENSSL_free(buf);
|
150
|
+
return NULL;
|
151
|
+
}
|
152
|
+
buf->len = len;
|
153
|
+
buf->references = 1;
|
154
|
+
|
155
|
+
*out_data = buf->data;
|
156
|
+
return buf;
|
157
|
+
}
|
158
|
+
|
138
159
|
CRYPTO_BUFFER* CRYPTO_BUFFER_new_from_CBS(CBS *cbs, CRYPTO_BUFFER_POOL *pool) {
|
139
160
|
return CRYPTO_BUFFER_new(CBS_data(cbs), CBS_len(cbs), pool);
|
140
161
|
}
|
@@ -45,4 +45,12 @@ void CRYPTO_sysrand(uint8_t *out, size_t requested) {
|
|
45
45
|
g_num_calls++;
|
46
46
|
}
|
47
47
|
|
48
|
+
void CRYPTO_sysrand_for_seed(uint8_t *out, size_t requested) {
|
49
|
+
CRYPTO_sysrand(out, requested);
|
50
|
+
}
|
51
|
+
|
52
|
+
void CRYPTO_sysrand_if_available(uint8_t *out, size_t requested) {
|
53
|
+
CRYPTO_sysrand(out, requested);
|
54
|
+
}
|
55
|
+
|
48
56
|
#endif // BORINGSSL_UNSAFE_DETERMINISTIC_MODE
|
@@ -24,20 +24,7 @@
|
|
24
24
|
#include "../fipsmodule/rand/internal.h"
|
25
25
|
|
26
26
|
void CRYPTO_sysrand(uint8_t *out, size_t requested) {
|
27
|
-
|
28
|
-
size_t output_bytes_this_pass = ZX_CPRNG_DRAW_MAX_LEN;
|
29
|
-
if (requested < output_bytes_this_pass) {
|
30
|
-
output_bytes_this_pass = requested;
|
31
|
-
}
|
32
|
-
size_t bytes_drawn;
|
33
|
-
zx_status_t status =
|
34
|
-
zx_cprng_draw(out, output_bytes_this_pass, &bytes_drawn);
|
35
|
-
if (status != ZX_OK) {
|
36
|
-
abort();
|
37
|
-
}
|
38
|
-
requested -= bytes_drawn;
|
39
|
-
out += bytes_drawn;
|
40
|
-
}
|
27
|
+
zx_cprng_draw(out, requested);
|
41
28
|
}
|
42
29
|
|
43
30
|
#endif // OPENSSL_FUCHSIA && !BORINGSSL_UNSAFE_DETERMINISTIC_MODE
|
@@ -21,8 +21,8 @@
|
|
21
21
|
|
22
22
|
#if !defined(OPENSSL_C11_ATOMIC)
|
23
23
|
|
24
|
-
|
25
|
-
|
24
|
+
OPENSSL_STATIC_ASSERT((CRYPTO_refcount_t)-1 == CRYPTO_REFCOUNT_MAX,
|
25
|
+
"CRYPTO_REFCOUNT_MAX is incorrect");
|
26
26
|
|
27
27
|
static struct CRYPTO_STATIC_MUTEX g_refcount_lock = CRYPTO_STATIC_MUTEX_INIT;
|
28
28
|
|
@@ -0,0 +1,22 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved.
|
3
|
+
*
|
4
|
+
* Licensed under the OpenSSL license (the "License"). You may not use
|
5
|
+
* this file except in compliance with the License. You can obtain a copy
|
6
|
+
* in the file LICENSE in the source distribution or at
|
7
|
+
* https://www.openssl.org/source/license.html
|
8
|
+
*/
|
9
|
+
|
10
|
+
#include <openssl/rsa.h>
|
11
|
+
|
12
|
+
#include <openssl/evp.h>
|
13
|
+
|
14
|
+
|
15
|
+
int RSA_print(BIO *bio, const RSA *rsa, int indent) {
|
16
|
+
EVP_PKEY *pkey = EVP_PKEY_new();
|
17
|
+
int ret = pkey != NULL &&
|
18
|
+
EVP_PKEY_set1_RSA(pkey, (RSA *)rsa) &&
|
19
|
+
EVP_PKEY_print_private(bio, pkey, indent, NULL);
|
20
|
+
EVP_PKEY_free(pkey);
|
21
|
+
return ret;
|
22
|
+
}
|
@@ -0,0 +1,80 @@
|
|
1
|
+
/* Copyright (c) 2019, Google Inc.
|
2
|
+
*
|
3
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
4
|
+
* purpose with or without fee is hereby granted, provided that the above
|
5
|
+
* copyright notice and this permission notice appear in all copies.
|
6
|
+
*
|
7
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
10
|
+
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
12
|
+
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
|
+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
|
+
|
15
|
+
#include <stdint.h>
|
16
|
+
#include <string.h>
|
17
|
+
|
18
|
+
#include <openssl/siphash.h>
|
19
|
+
|
20
|
+
|
21
|
+
static void siphash_round(uint64_t v[4]) {
|
22
|
+
v[0] += v[1];
|
23
|
+
v[2] += v[3];
|
24
|
+
v[1] = (v[1] << 13) | (v[1] >> (64 - 13));
|
25
|
+
v[3] = (v[3] << 16) | (v[3] >> (64 - 16));
|
26
|
+
v[1] ^= v[0];
|
27
|
+
v[3] ^= v[2];
|
28
|
+
v[0] = (v[0] << 32) | (v[0] >> 32);
|
29
|
+
v[2] += v[1];
|
30
|
+
v[0] += v[3];
|
31
|
+
v[1] = (v[1] << 17) | (v[1] >> (64 - 17));
|
32
|
+
v[3] = (v[3] << 21) | (v[3] >> (64 - 21));
|
33
|
+
v[1] ^= v[2];
|
34
|
+
v[3] ^= v[0];
|
35
|
+
v[2] = (v[2] << 32) | (v[2] >> 32);
|
36
|
+
}
|
37
|
+
|
38
|
+
uint64_t SIPHASH_24(const uint64_t key[2], const uint8_t *input,
|
39
|
+
size_t input_len) {
|
40
|
+
const size_t orig_input_len = input_len;
|
41
|
+
|
42
|
+
uint64_t v[4];
|
43
|
+
v[0] = key[0] ^ UINT64_C(0x736f6d6570736575);
|
44
|
+
v[1] = key[1] ^ UINT64_C(0x646f72616e646f6d);
|
45
|
+
v[2] = key[0] ^ UINT64_C(0x6c7967656e657261);
|
46
|
+
v[3] = key[1] ^ UINT64_C(0x7465646279746573);
|
47
|
+
|
48
|
+
while (input_len >= sizeof(uint64_t)) {
|
49
|
+
uint64_t m;
|
50
|
+
memcpy(&m, input, sizeof(m));
|
51
|
+
v[3] ^= m;
|
52
|
+
siphash_round(v);
|
53
|
+
siphash_round(v);
|
54
|
+
v[0] ^= m;
|
55
|
+
|
56
|
+
input += sizeof(uint64_t);
|
57
|
+
input_len -= sizeof(uint64_t);
|
58
|
+
}
|
59
|
+
|
60
|
+
union {
|
61
|
+
uint8_t bytes[8];
|
62
|
+
uint64_t word;
|
63
|
+
} last_block;
|
64
|
+
last_block.word = 0;
|
65
|
+
memcpy(last_block.bytes, input, input_len);
|
66
|
+
last_block.bytes[7] = orig_input_len & 0xff;
|
67
|
+
|
68
|
+
v[3] ^= last_block.word;
|
69
|
+
siphash_round(v);
|
70
|
+
siphash_round(v);
|
71
|
+
v[0] ^= last_block.word;
|
72
|
+
|
73
|
+
v[2] ^= 0xff;
|
74
|
+
siphash_round(v);
|
75
|
+
siphash_round(v);
|
76
|
+
siphash_round(v);
|
77
|
+
siphash_round(v);
|
78
|
+
|
79
|
+
return v[0] ^ v[1] ^ v[2] ^ v[3];
|
80
|
+
}
|
@@ -56,6 +56,7 @@
|
|
56
56
|
|
57
57
|
#include <openssl/stack.h>
|
58
58
|
|
59
|
+
#include <assert.h>
|
59
60
|
#include <string.h>
|
60
61
|
|
61
62
|
#include <openssl/mem.h>
|
@@ -133,19 +134,31 @@ void sk_free(_STACK *sk) {
|
|
133
134
|
OPENSSL_free(sk);
|
134
135
|
}
|
135
136
|
|
136
|
-
void
|
137
|
+
void sk_pop_free_ex(_STACK *sk, void (*call_free_func)(stack_free_func, void *),
|
138
|
+
stack_free_func free_func) {
|
137
139
|
if (sk == NULL) {
|
138
140
|
return;
|
139
141
|
}
|
140
142
|
|
141
143
|
for (size_t i = 0; i < sk->num; i++) {
|
142
144
|
if (sk->data[i] != NULL) {
|
143
|
-
|
145
|
+
call_free_func(free_func, sk->data[i]);
|
144
146
|
}
|
145
147
|
}
|
146
148
|
sk_free(sk);
|
147
149
|
}
|
148
150
|
|
151
|
+
// Historically, |sk_pop_free| called the function as |stack_free_func|
|
152
|
+
// directly. This is undefined in C. Some callers called |sk_pop_free| directly,
|
153
|
+
// so we must maintain a compatibility version for now.
|
154
|
+
static void call_free_func_legacy(stack_free_func func, void *ptr) {
|
155
|
+
func(ptr);
|
156
|
+
}
|
157
|
+
|
158
|
+
void sk_pop_free(_STACK *sk, stack_free_func free_func) {
|
159
|
+
sk_pop_free_ex(sk, call_free_func_legacy, free_func);
|
160
|
+
}
|
161
|
+
|
149
162
|
size_t sk_insert(_STACK *sk, void *p, size_t where) {
|
150
163
|
if (sk == NULL) {
|
151
164
|
return 0;
|
@@ -209,7 +222,7 @@ void *sk_delete(_STACK *sk, size_t where) {
|
|
209
222
|
return ret;
|
210
223
|
}
|
211
224
|
|
212
|
-
void *sk_delete_ptr(_STACK *sk, void *p) {
|
225
|
+
void *sk_delete_ptr(_STACK *sk, const void *p) {
|
213
226
|
if (sk == NULL) {
|
214
227
|
return NULL;
|
215
228
|
}
|
@@ -223,7 +236,9 @@ void *sk_delete_ptr(_STACK *sk, void *p) {
|
|
223
236
|
return NULL;
|
224
237
|
}
|
225
238
|
|
226
|
-
int sk_find(_STACK *sk, size_t *out_index, void *p
|
239
|
+
int sk_find(const _STACK *sk, size_t *out_index, const void *p,
|
240
|
+
int (*call_cmp_func)(stack_cmp_func, const void **,
|
241
|
+
const void **)) {
|
227
242
|
if (sk == NULL) {
|
228
243
|
return 0;
|
229
244
|
}
|
@@ -245,28 +260,52 @@ int sk_find(_STACK *sk, size_t *out_index, void *p) {
|
|
245
260
|
return 0;
|
246
261
|
}
|
247
262
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
263
|
+
if (!sk_is_sorted(sk)) {
|
264
|
+
for (size_t i = 0; i < sk->num; i++) {
|
265
|
+
const void *elem = sk->data[i];
|
266
|
+
if (call_cmp_func(sk->comp, &p, &elem) == 0) {
|
267
|
+
if (out_index) {
|
268
|
+
*out_index = i;
|
269
|
+
}
|
270
|
+
return 1;
|
271
|
+
}
|
272
|
+
}
|
258
273
|
return 0;
|
259
274
|
}
|
260
|
-
|
261
|
-
//
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
275
|
+
|
276
|
+
// The stack is sorted, so binary search to find the element.
|
277
|
+
//
|
278
|
+
// |lo| and |hi| maintain a half-open interval of where the answer may be. All
|
279
|
+
// indices such that |lo <= idx < hi| are candidates.
|
280
|
+
size_t lo = 0, hi = sk->num;
|
281
|
+
while (lo < hi) {
|
282
|
+
// Bias |mid| towards |lo|. See the |r == 0| case below.
|
283
|
+
size_t mid = lo + (hi - lo - 1) / 2;
|
284
|
+
assert(lo <= mid && mid < hi);
|
285
|
+
const void *elem = sk->data[mid];
|
286
|
+
int r = call_cmp_func(sk->comp, &p, &elem);
|
287
|
+
if (r > 0) {
|
288
|
+
lo = mid + 1; // |mid| is too low.
|
289
|
+
} else if (r < 0) {
|
290
|
+
hi = mid; // |mid| is too high.
|
291
|
+
} else {
|
292
|
+
// |mid| matches. However, this function returns the earliest match, so we
|
293
|
+
// can only return if the range has size one.
|
294
|
+
if (hi - lo == 1) {
|
295
|
+
if (out_index != NULL) {
|
296
|
+
*out_index = mid;
|
297
|
+
}
|
298
|
+
return 1;
|
299
|
+
}
|
300
|
+
// The sample is biased towards |lo|. |mid| can only be |hi - 1| if
|
301
|
+
// |hi - lo| was one, so this makes forward progress.
|
302
|
+
assert(mid + 1 < hi);
|
303
|
+
hi = mid + 1;
|
304
|
+
}
|
268
305
|
}
|
269
|
-
|
306
|
+
|
307
|
+
assert(lo == hi);
|
308
|
+
return 0; // Not found.
|
270
309
|
}
|
271
310
|
|
272
311
|
void *sk_shift(_STACK *sk) {
|
@@ -323,15 +362,24 @@ err:
|
|
323
362
|
}
|
324
363
|
|
325
364
|
void sk_sort(_STACK *sk) {
|
326
|
-
int (*comp_func)(const void *,const void *);
|
327
|
-
|
328
365
|
if (sk == NULL || sk->comp == NULL || sk->sorted) {
|
329
366
|
return;
|
330
367
|
}
|
331
368
|
|
332
|
-
//
|
333
|
-
|
334
|
-
|
369
|
+
// sk->comp is a function that takes pointers to pointers to elements, but
|
370
|
+
// qsort take a comparison function that just takes pointers to elements.
|
371
|
+
// However, since we're passing an array of pointers to qsort, we can just
|
372
|
+
// cast the comparison function and everything works.
|
373
|
+
//
|
374
|
+
// TODO(davidben): This is undefined behavior, but the call is in libc so,
|
375
|
+
// e.g., CFI does not notice. Unfortunately, |qsort| is missing a void*
|
376
|
+
// parameter in its callback and |qsort_s| / |qsort_r| are a mess of
|
377
|
+
// incompatibility.
|
378
|
+
if (sk->num >= 2) {
|
379
|
+
int (*comp_func)(const void *, const void *) =
|
380
|
+
(int (*)(const void *, const void *))(sk->comp);
|
381
|
+
qsort(sk->data, sk->num, sizeof(void *), comp_func);
|
382
|
+
}
|
335
383
|
sk->sorted = 1;
|
336
384
|
}
|
337
385
|
|
@@ -353,8 +401,11 @@ stack_cmp_func sk_set_cmp_func(_STACK *sk, stack_cmp_func comp) {
|
|
353
401
|
return old;
|
354
402
|
}
|
355
403
|
|
356
|
-
_STACK *sk_deep_copy(const _STACK *sk,
|
357
|
-
void (*
|
404
|
+
_STACK *sk_deep_copy(const _STACK *sk,
|
405
|
+
void *(*call_copy_func)(stack_copy_func, void *),
|
406
|
+
stack_copy_func copy_func,
|
407
|
+
void (*call_free_func)(stack_free_func, void *),
|
408
|
+
stack_free_func free_func) {
|
358
409
|
_STACK *ret = sk_dup(sk);
|
359
410
|
if (ret == NULL) {
|
360
411
|
return NULL;
|
@@ -364,11 +415,11 @@ _STACK *sk_deep_copy(const _STACK *sk, void *(*copy_func)(void *),
|
|
364
415
|
if (ret->data[i] == NULL) {
|
365
416
|
continue;
|
366
417
|
}
|
367
|
-
ret->data[i] = copy_func
|
418
|
+
ret->data[i] = call_copy_func(copy_func, ret->data[i]);
|
368
419
|
if (ret->data[i] == NULL) {
|
369
420
|
for (size_t j = 0; j < i; j++) {
|
370
421
|
if (ret->data[j] != NULL) {
|
371
|
-
free_func
|
422
|
+
call_free_func(free_func, ret->data[j]);
|
372
423
|
}
|
373
424
|
}
|
374
425
|
sk_free(ret);
|
@@ -14,7 +14,7 @@
|
|
14
14
|
|
15
15
|
#include "internal.h"
|
16
16
|
|
17
|
-
#if defined(
|
17
|
+
#if !defined(OPENSSL_THREADS)
|
18
18
|
|
19
19
|
void CRYPTO_MUTEX_init(CRYPTO_MUTEX *lock) {}
|
20
20
|
|
@@ -56,4 +56,4 @@ int CRYPTO_set_thread_local(thread_local_data_t index, void *value,
|
|
56
56
|
return 1;
|
57
57
|
}
|
58
58
|
|
59
|
-
#endif //
|
59
|
+
#endif // !OPENSSL_THREADS
|
@@ -24,8 +24,8 @@
|
|
24
24
|
#include <openssl/type_check.h>
|
25
25
|
|
26
26
|
|
27
|
-
|
28
|
-
|
27
|
+
OPENSSL_STATIC_ASSERT(sizeof(CRYPTO_MUTEX) >= sizeof(pthread_rwlock_t),
|
28
|
+
"CRYPTO_MUTEX is too small");
|
29
29
|
|
30
30
|
void CRYPTO_MUTEX_init(CRYPTO_MUTEX *lock) {
|
31
31
|
if (pthread_rwlock_init((pthread_rwlock_t *) lock, NULL) != 0) {
|
@@ -27,8 +27,8 @@ OPENSSL_MSVC_PRAGMA(warning(pop))
|
|
27
27
|
#include <openssl/type_check.h>
|
28
28
|
|
29
29
|
|
30
|
-
|
31
|
-
|
30
|
+
OPENSSL_STATIC_ASSERT(sizeof(CRYPTO_MUTEX) >= sizeof(SRWLOCK),
|
31
|
+
"CRYPTO_MUTEX is too small");
|
32
32
|
|
33
33
|
static BOOL CALLBACK call_once_init(INIT_ONCE *once, void *arg, void **out) {
|
34
34
|
void (**init)(void) = (void (**)(void))arg;
|
@@ -82,7 +82,7 @@ void CRYPTO_STATIC_MUTEX_unlock_write(struct CRYPTO_STATIC_MUTEX *lock) {
|
|
82
82
|
ReleaseSRWLockExclusive(&lock->lock);
|
83
83
|
}
|
84
84
|
|
85
|
-
static
|
85
|
+
static SRWLOCK g_destructors_lock = SRWLOCK_INIT;
|
86
86
|
static thread_local_destructor_t g_destructors[NUM_OPENSSL_THREAD_LOCALS];
|
87
87
|
|
88
88
|
static CRYPTO_once_t g_thread_local_init_once = CRYPTO_ONCE_INIT;
|
@@ -90,10 +90,6 @@ static DWORD g_thread_local_key;
|
|
90
90
|
static int g_thread_local_failed;
|
91
91
|
|
92
92
|
static void thread_local_init(void) {
|
93
|
-
if (!InitializeCriticalSectionAndSpinCount(&g_destructors_lock, 0x400)) {
|
94
|
-
g_thread_local_failed = 1;
|
95
|
-
return;
|
96
|
-
}
|
97
93
|
g_thread_local_key = TlsAlloc();
|
98
94
|
g_thread_local_failed = (g_thread_local_key == TLS_OUT_OF_INDEXES);
|
99
95
|
}
|
@@ -121,12 +117,11 @@ static void NTAPI thread_local_destructor(PVOID module, DWORD reason,
|
|
121
117
|
|
122
118
|
thread_local_destructor_t destructors[NUM_OPENSSL_THREAD_LOCALS];
|
123
119
|
|
124
|
-
|
120
|
+
AcquireSRWLockExclusive(&g_destructors_lock);
|
125
121
|
OPENSSL_memcpy(destructors, g_destructors, sizeof(destructors));
|
126
|
-
|
122
|
+
ReleaseSRWLockExclusive(&g_destructors_lock);
|
127
123
|
|
128
|
-
unsigned i;
|
129
|
-
for (i = 0; i < NUM_OPENSSL_THREAD_LOCALS; i++) {
|
124
|
+
for (unsigned i = 0; i < NUM_OPENSSL_THREAD_LOCALS; i++) {
|
130
125
|
if (destructors[i] != NULL) {
|
131
126
|
destructors[i](pointers[i]);
|
132
127
|
}
|
@@ -146,12 +141,18 @@ static void NTAPI thread_local_destructor(PVOID module, DWORD reason,
|
|
146
141
|
// if it's not already there. (E.g. if __declspec(thread) is not used). Force
|
147
142
|
// a reference to p_thread_callback_boringssl to prevent whole program
|
148
143
|
// optimization from discarding the variable.
|
144
|
+
//
|
145
|
+
// Note, in the prefixed build, |p_thread_callback_boringssl| may be a macro.
|
146
|
+
#define STRINGIFY(x) #x
|
147
|
+
#define EXPAND_AND_STRINGIFY(x) STRINGIFY(x)
|
149
148
|
#ifdef _WIN64
|
150
|
-
|
151
|
-
|
149
|
+
__pragma(comment(linker, "/INCLUDE:_tls_used"))
|
150
|
+
__pragma(comment(
|
151
|
+
linker, "/INCLUDE:" EXPAND_AND_STRINGIFY(p_thread_callback_boringssl)))
|
152
152
|
#else
|
153
|
-
|
154
|
-
|
153
|
+
__pragma(comment(linker, "/INCLUDE:__tls_used"))
|
154
|
+
__pragma(comment(
|
155
|
+
linker, "/INCLUDE:_" EXPAND_AND_STRINGIFY(p_thread_callback_boringssl)))
|
155
156
|
#endif
|
156
157
|
|
157
158
|
// .CRT$XLA to .CRT$XLZ is an array of PIMAGE_TLS_CALLBACK pointers that are
|
@@ -190,13 +191,31 @@ PIMAGE_TLS_CALLBACK p_thread_callback_boringssl = thread_local_destructor;
|
|
190
191
|
|
191
192
|
#endif // _WIN64
|
192
193
|
|
194
|
+
static void **get_thread_locals(void) {
|
195
|
+
// |TlsGetValue| clears the last error even on success, so that callers may
|
196
|
+
// distinguish it successfully returning NULL or failing. It is documented to
|
197
|
+
// never fail if the argument is a valid index from |TlsAlloc|, so we do not
|
198
|
+
// need to handle this.
|
199
|
+
//
|
200
|
+
// However, this error-mangling behavior interferes with the caller's use of
|
201
|
+
// |GetLastError|. In particular |SSL_get_error| queries the error queue to
|
202
|
+
// determine whether the caller should look at the OS's errors. To avoid
|
203
|
+
// destroying state, save and restore the Windows error.
|
204
|
+
//
|
205
|
+
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms686812(v=vs.85).aspx
|
206
|
+
DWORD last_error = GetLastError();
|
207
|
+
void **ret = TlsGetValue(g_thread_local_key);
|
208
|
+
SetLastError(last_error);
|
209
|
+
return ret;
|
210
|
+
}
|
211
|
+
|
193
212
|
void *CRYPTO_get_thread_local(thread_local_data_t index) {
|
194
213
|
CRYPTO_once(&g_thread_local_init_once, thread_local_init);
|
195
214
|
if (g_thread_local_failed) {
|
196
215
|
return NULL;
|
197
216
|
}
|
198
217
|
|
199
|
-
void **pointers =
|
218
|
+
void **pointers = get_thread_locals();
|
200
219
|
if (pointers == NULL) {
|
201
220
|
return NULL;
|
202
221
|
}
|
@@ -211,7 +230,7 @@ int CRYPTO_set_thread_local(thread_local_data_t index, void *value,
|
|
211
230
|
return 0;
|
212
231
|
}
|
213
232
|
|
214
|
-
void **pointers =
|
233
|
+
void **pointers = get_thread_locals();
|
215
234
|
if (pointers == NULL) {
|
216
235
|
pointers = OPENSSL_malloc(sizeof(void *) * NUM_OPENSSL_THREAD_LOCALS);
|
217
236
|
if (pointers == NULL) {
|
@@ -226,9 +245,9 @@ int CRYPTO_set_thread_local(thread_local_data_t index, void *value,
|
|
226
245
|
}
|
227
246
|
}
|
228
247
|
|
229
|
-
|
248
|
+
AcquireSRWLockExclusive(&g_destructors_lock);
|
230
249
|
g_destructors[index] = destructor;
|
231
|
-
|
250
|
+
ReleaseSRWLockExclusive(&g_destructors_lock);
|
232
251
|
|
233
252
|
pointers[index] = value;
|
234
253
|
return 1;
|