grpc 1.9.1 → 1.10.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 +2654 -953
- data/etc/roots.pem +282 -683
- data/include/grpc/compression.h +9 -26
- data/include/grpc/grpc.h +10 -24
- data/include/grpc/grpc_security.h +7 -1
- data/include/grpc/impl/codegen/compression_types.h +5 -62
- data/include/grpc/impl/codegen/grpc_types.h +10 -6
- data/include/grpc/module.modulemap +1 -10
- data/include/grpc/support/alloc.h +3 -2
- data/include/grpc/support/log.h +1 -2
- data/{src/core/lib/gpr/thd_internal.h → include/grpc/support/thd_id.h} +23 -9
- data/src/boringssl/err_data.c +550 -496
- data/src/core/ext/census/grpc_context.cc +2 -1
- data/src/core/ext/filters/client_channel/backup_poller.cc +5 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -7
- data/src/core/ext/filters/client_channel/client_channel.cc +162 -172
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +4 -2
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +10 -10
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +18 -14
- data/src/core/ext/filters/client_channel/http_proxy.cc +3 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +21 -105
- data/src/core/ext/filters/client_channel/lb_policy.h +166 -170
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -36
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1452 -1459
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +7 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +27 -27
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +279 -304
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +358 -330
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +30 -41
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +7 -14
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -21
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +23 -27
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +58 -33
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +25 -12
- data/src/core/ext/filters/client_channel/parse_address.cc +10 -8
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver.cc +6 -52
- data/src/core/ext/filters/client_channel/resolver.h +98 -55
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +266 -237
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +31 -27
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +244 -207
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +161 -148
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +47 -31
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +126 -126
- data/src/core/ext/filters/client_channel/resolver_factory.h +33 -32
- data/src/core/ext/filters/client_channel/resolver_registry.cc +110 -90
- data/src/core/ext/filters/client_channel/resolver_registry.h +49 -36
- data/src/core/ext/filters/client_channel/retry_throttle.cc +29 -22
- data/src/core/ext/filters/client_channel/subchannel.cc +173 -173
- data/src/core/ext/filters/client_channel/subchannel.h +38 -45
- data/src/core/ext/filters/client_channel/subchannel_index.cc +44 -40
- data/src/core/ext/filters/client_channel/uri_parser.cc +3 -3
- data/src/core/ext/filters/deadline/deadline_filter.cc +27 -18
- data/src/core/ext/filters/http/client/http_client_filter.cc +26 -23
- data/src/core/ext/filters/http/http_filters_plugin.cc +3 -2
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +78 -110
- data/src/core/ext/filters/http/server/http_server_filter.cc +29 -26
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +9 -11
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +2 -1
- data/src/core/ext/filters/max_age/max_age_filter.cc +14 -14
- data/src/core/ext/filters/message_size/message_size_filter.cc +20 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -4
- data/src/core/ext/filters/workarounds/workaround_utils.cc +4 -4
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -10
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +4 -4
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +11 -12
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +16 -13
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +36 -9
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +3 -0
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +17 -14
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -145
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +16 -14
- data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -7
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -33
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +27 -25
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -12
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +16 -15
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +11 -11
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +23 -22
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +35 -35
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +35 -39
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +8 -7
- data/src/core/ext/transport/chttp2/transport/varint.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -18
- data/src/core/ext/transport/inproc/inproc_transport.cc +43 -23
- data/src/core/lib/{gpr → avl}/avl.cc +61 -57
- data/{include/grpc/support → src/core/lib/avl}/avl.h +25 -35
- data/src/core/lib/backoff/backoff.cc +6 -5
- data/src/core/lib/channel/channel_args.cc +23 -109
- data/src/core/lib/channel/channel_args.h +5 -31
- data/src/core/lib/channel/channel_stack.cc +11 -8
- data/src/core/lib/channel/channel_stack_builder.cc +10 -7
- data/src/core/lib/channel/connected_channel.cc +18 -17
- data/src/core/lib/channel/handshaker.cc +8 -8
- data/src/core/lib/channel/handshaker_registry.cc +3 -2
- data/src/core/lib/compression/algorithm_metadata.h +13 -6
- data/src/core/lib/compression/compression.cc +72 -183
- data/src/core/lib/compression/compression_internal.cc +274 -0
- data/src/core/lib/compression/compression_internal.h +86 -0
- data/src/core/lib/compression/message_compress.cc +15 -15
- data/src/core/lib/compression/message_compress.h +4 -3
- data/src/core/lib/compression/stream_compression_gzip.cc +8 -8
- data/src/core/lib/compression/stream_compression_identity.cc +1 -1
- data/src/core/lib/debug/stats.cc +10 -8
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/trace.cc +3 -3
- data/src/core/lib/gpr/alloc.cc +7 -11
- data/src/core/lib/gpr/arena.cc +34 -12
- data/src/core/lib/gpr/atm.cc +2 -1
- data/src/core/lib/gpr/cpu_linux.cc +3 -3
- data/src/core/lib/gpr/cpu_posix.cc +2 -1
- data/src/core/lib/gpr/env.h +1 -1
- data/src/core/lib/gpr/env_linux.cc +1 -1
- data/src/core/lib/gpr/env_windows.cc +4 -4
- data/src/core/lib/gpr/fork.cc +16 -2
- data/src/core/lib/gpr/host_port.cc +5 -4
- data/{include/grpc/support → src/core/lib/gpr}/host_port.h +5 -13
- data/src/core/lib/gpr/log.cc +5 -4
- data/src/core/lib/gpr/log_linux.cc +1 -1
- data/src/core/lib/gpr/mpscq.cc +1 -0
- data/src/core/lib/gpr/murmur_hash.cc +4 -4
- data/src/core/lib/gpr/string.cc +19 -16
- data/src/core/lib/gpr/string_posix.cc +3 -3
- data/src/core/lib/gpr/sync_posix.cc +5 -9
- data/src/core/lib/gpr/thd.cc +3 -3
- data/{include/grpc/support → src/core/lib/gpr}/thd.h +20 -28
- data/src/core/lib/gpr/thd_posix.cc +6 -4
- data/src/core/lib/gpr/thd_windows.cc +3 -1
- data/src/core/lib/gpr/time.cc +6 -4
- data/src/core/lib/gpr/time_posix.cc +2 -2
- data/{include/grpc/support → src/core/lib/gpr}/tls.h +6 -6
- data/{include/grpc/support → src/core/lib/gpr}/tls_gcc.h +3 -3
- data/{include/grpc/support → src/core/lib/gpr}/tls_msvc.h +3 -3
- data/src/core/lib/gpr/tls_pthread.cc +1 -1
- data/{include/grpc/support → src/core/lib/gpr}/tls_pthread.h +3 -3
- data/{include/grpc/support → src/core/lib/gpr}/useful.h +3 -3
- data/src/core/lib/{gpr++ → gprpp}/abstract.h +3 -3
- data/src/core/lib/{gpr++ → gprpp}/atomic.h +5 -5
- data/src/core/lib/{gpr++ → gprpp}/atomic_with_atm.h +3 -3
- data/src/core/lib/{gpr++ → gprpp}/atomic_with_std.h +3 -3
- data/src/core/lib/{gpr++ → gprpp}/debug_location.h +3 -3
- data/src/core/lib/{gpr++ → gprpp}/inlined_vector.h +44 -22
- data/src/core/lib/{gpr++ → gprpp}/manual_constructor.h +2 -2
- data/src/core/lib/{gpr++ → gprpp}/memory.h +14 -5
- data/src/core/lib/{gpr++ → gprpp}/orphanable.h +39 -14
- data/src/core/lib/{gpr++ → gprpp}/ref_counted.h +42 -10
- data/src/core/lib/{gpr++ → gprpp}/ref_counted_ptr.h +18 -8
- data/src/core/lib/http/format_request.cc +3 -3
- data/src/core/lib/http/httpcli.cc +6 -7
- data/src/core/lib/http/httpcli_security_connector.cc +10 -10
- data/src/core/lib/http/parser.cc +16 -12
- data/src/core/lib/iomgr/call_combiner.cc +12 -13
- data/src/core/lib/iomgr/closure.h +4 -6
- data/src/core/lib/iomgr/combiner.cc +10 -21
- data/src/core/lib/iomgr/error.cc +50 -55
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +41 -52
- data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -28
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +23 -30
- data/src/core/lib/iomgr/ev_poll_posix.cc +52 -46
- data/src/core/lib/iomgr/ev_posix.cc +47 -6
- data/src/core/lib/iomgr/exec_ctx.cc +10 -10
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +16 -13
- data/src/core/lib/iomgr/fork_posix.cc +1 -3
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +1 -2
- data/src/core/lib/iomgr/iomgr.cc +2 -2
- data/src/core/lib/iomgr/iomgr_uv.cc +2 -0
- data/src/core/lib/iomgr/iomgr_uv.h +1 -1
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +5 -4
- data/src/core/lib/iomgr/load_file.cc +3 -3
- data/src/core/lib/iomgr/pollset_windows.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_uv.cc +2 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
- data/src/core/lib/iomgr/resource_quota.cc +36 -34
- data/src/core/lib/iomgr/sockaddr_utils.cc +39 -23
- data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
- data/src/core/lib/iomgr/socket_mutator.cc +7 -7
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -4
- data/src/core/lib/iomgr/socket_utils_linux.cc +3 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +7 -6
- data/src/core/lib/iomgr/tcp_client_windows.cc +0 -1
- data/src/core/lib/iomgr/tcp_posix.cc +47 -55
- data/src/core/lib/iomgr/tcp_server_posix.cc +12 -10
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -5
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -3
- data/src/core/lib/iomgr/tcp_windows.cc +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +16 -14
- data/src/core/lib/iomgr/timer_heap.cc +8 -7
- data/src/core/lib/iomgr/timer_manager.cc +4 -3
- data/src/core/lib/iomgr/udp_server.cc +24 -16
- data/src/core/lib/iomgr/unix_sockets_posix.cc +15 -10
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +6 -5
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +1 -2
- data/src/core/lib/json/json.cc +1 -1
- data/src/core/lib/json/json_reader.cc +8 -6
- data/src/core/lib/json/json_string.cc +19 -18
- data/src/core/lib/json/json_writer.cc +10 -8
- data/src/core/lib/profiling/basic_timers.cc +1 -1
- data/src/core/lib/profiling/timers.h +3 -20
- data/src/core/lib/security/context/security_context.cc +16 -14
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +17 -14
- data/src/core/lib/security/credentials/credentials.cc +9 -8
- data/src/core/lib/security/credentials/credentials.h +1 -1
- data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +12 -13
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -4
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -3
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -7
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +21 -18
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +23 -18
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +11 -7
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +22 -21
- data/src/core/lib/security/{transport → security_connector}/security_connector.cc +46 -43
- data/src/core/lib/security/{transport → security_connector}/security_connector.h +3 -3
- data/src/core/lib/security/transport/client_auth_filter.cc +32 -34
- data/src/core/lib/security/transport/lb_targets_info.cc +7 -5
- data/src/core/lib/security/transport/secure_endpoint.cc +21 -21
- data/src/core/lib/security/transport/security_handshaker.cc +19 -18
- data/src/core/lib/security/transport/security_handshaker.h +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
- data/src/core/lib/slice/b64.cc +19 -16
- data/src/core/lib/slice/percent_encoding.cc +5 -5
- data/src/core/lib/slice/slice.cc +35 -33
- data/src/core/lib/slice/slice_buffer.cc +16 -14
- data/src/core/lib/slice/slice_hash_table.cc +3 -2
- data/src/core/lib/slice/slice_intern.cc +21 -25
- data/src/core/lib/slice/slice_string_helpers.cc +45 -9
- data/src/core/lib/slice/slice_string_helpers.h +6 -0
- data/src/core/lib/surface/byte_buffer.cc +2 -2
- data/src/core/lib/surface/byte_buffer_reader.cc +6 -3
- data/src/core/lib/surface/call.cc +171 -260
- data/src/core/lib/surface/call_test_only.h +1 -13
- data/src/core/lib/surface/channel.cc +20 -43
- data/src/core/lib/surface/channel_init.cc +7 -7
- data/src/core/lib/surface/channel_ping.cc +2 -2
- data/src/core/lib/surface/completion_queue.cc +69 -75
- data/src/core/lib/surface/init.cc +4 -5
- data/src/core/lib/surface/init_secure.cc +1 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/server.cc +64 -59
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +6 -5
- data/src/core/lib/transport/byte_stream.cc +23 -14
- data/src/core/lib/transport/byte_stream.h +1 -1
- data/src/core/lib/transport/connectivity_state.cc +9 -13
- data/src/core/lib/transport/error_utils.cc +10 -7
- data/src/core/lib/transport/metadata.cc +27 -26
- data/src/core/lib/transport/metadata.h +1 -1
- data/src/core/lib/transport/pid_controller.cc +2 -1
- data/src/core/lib/transport/service_config.cc +5 -5
- data/src/core/lib/transport/static_metadata.cc +225 -222
- data/src/core/lib/transport/static_metadata.h +77 -76
- data/src/core/lib/transport/timeout_encoding.cc +3 -2
- data/src/core/lib/transport/transport.cc +6 -5
- data/src/core/lib/transport/transport_op_string.cc +0 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
- data/src/core/tsi/alts_transport_security.cc +61 -0
- data/src/core/tsi/{gts_transport_security.h → alts_transport_security.h} +16 -8
- data/src/core/tsi/fake_transport_security.cc +59 -43
- data/src/core/tsi/ssl_transport_security.cc +122 -107
- data/src/core/tsi/transport_security.cc +3 -3
- data/src/core/tsi/transport_security_adapter.cc +16 -10
- data/src/ruby/bin/apis/pubsub_demo.rb +1 -1
- data/src/ruby/ext/grpc/rb_channel.c +3 -4
- data/src/ruby/ext/grpc/rb_compression_options.c +13 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -76
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +8 -120
- data/src/ruby/ext/grpc/rb_server.c +52 -28
- data/src/ruby/lib/grpc/generic/rpc_server.rb +7 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/test/client.rb +1 -1
- data/src/ruby/pb/test/server.rb +1 -1
- data/src/ruby/spec/client_server_spec.rb +4 -2
- data/src/ruby/spec/generic/active_call_spec.rb +2 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +32 -8
- data/src/ruby/spec/server_spec.rb +26 -7
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +7 -2
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +15 -0
- data/third_party/boringssl/crypto/asn1/a_gentm.c +1 -1
- data/third_party/boringssl/crypto/asn1/a_print.c +0 -28
- data/third_party/boringssl/crypto/asn1/a_strnid.c +3 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +17 -9
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -1
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -49
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +1 -1
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +9 -9
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -6
- data/third_party/boringssl/crypto/asn1/time_support.c +5 -5
- data/third_party/boringssl/crypto/base64/base64.c +65 -43
- data/third_party/boringssl/crypto/bio/bio.c +134 -110
- data/third_party/boringssl/crypto/bio/bio_mem.c +9 -9
- data/third_party/boringssl/crypto/bio/connect.c +17 -17
- data/third_party/boringssl/crypto/bio/fd.c +2 -1
- data/third_party/boringssl/crypto/bio/file.c +14 -14
- data/third_party/boringssl/crypto/bio/hexdump.c +15 -16
- data/third_party/boringssl/crypto/bio/internal.h +14 -14
- data/third_party/boringssl/crypto/bio/pair.c +45 -45
- data/third_party/boringssl/crypto/bio/printf.c +6 -10
- data/third_party/boringssl/crypto/{bn → bn_extra}/bn_asn1.c +9 -9
- data/third_party/boringssl/crypto/{bn → bn_extra}/convert.c +18 -223
- data/third_party/boringssl/crypto/buf/buf.c +20 -44
- data/third_party/boringssl/crypto/bytestring/ber.c +35 -35
- data/third_party/boringssl/crypto/bytestring/cbb.c +24 -24
- data/third_party/boringssl/crypto/bytestring/cbs.c +33 -37
- data/third_party/boringssl/crypto/bytestring/internal.h +38 -38
- data/third_party/boringssl/crypto/chacha/chacha.c +7 -7
- data/third_party/boringssl/crypto/{asn1/t_bitst.c → cipher_extra/cipher_extra.c} +49 -38
- data/third_party/boringssl/crypto/{cipher → cipher_extra}/derive_key.c +0 -2
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +281 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +867 -0
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +326 -0
- data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_null.c +0 -1
- data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc2.c +22 -10
- data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc4.c +0 -0
- data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_ssl3.c +120 -64
- data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_tls.c +220 -141
- data/third_party/boringssl/crypto/{asn1/x_bignum.c → cipher_extra/internal.h} +61 -86
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +482 -0
- data/third_party/boringssl/crypto/cmac/cmac.c +20 -20
- data/third_party/boringssl/crypto/conf/conf.c +32 -20
- data/third_party/boringssl/crypto/conf/internal.h +3 -3
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +5 -5
- data/third_party/boringssl/crypto/cpu-arm-linux.c +44 -41
- data/third_party/boringssl/crypto/cpu-intel.c +68 -43
- data/third_party/boringssl/crypto/cpu-ppc64le.c +5 -7
- data/third_party/boringssl/crypto/crypto.c +54 -32
- data/third_party/boringssl/crypto/curve25519/curve25519.c +269 -269
- data/third_party/boringssl/crypto/curve25519/internal.h +28 -8
- data/third_party/boringssl/crypto/curve25519/spake25519.c +180 -106
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +9 -9
- data/third_party/boringssl/crypto/dh/check.c +33 -34
- data/third_party/boringssl/crypto/dh/dh.c +72 -36
- data/third_party/boringssl/crypto/dh/dh_asn1.c +1 -1
- data/third_party/boringssl/crypto/dh/params.c +1 -161
- data/third_party/boringssl/crypto/digest_extra/digest_extra.c +240 -0
- data/third_party/boringssl/crypto/dsa/dsa.c +127 -87
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +1 -1
- data/third_party/boringssl/crypto/{ec → ec_extra}/ec_asn1.c +83 -70
- data/third_party/boringssl/crypto/ecdh/ecdh.c +1 -1
- data/third_party/boringssl/crypto/{ecdsa → ecdsa_extra}/ecdsa_asn1.c +86 -31
- data/third_party/boringssl/crypto/engine/engine.c +6 -6
- data/third_party/boringssl/crypto/err/err.c +197 -106
- data/third_party/boringssl/crypto/err/internal.h +58 -0
- data/third_party/boringssl/crypto/evp/digestsign.c +86 -14
- data/third_party/boringssl/crypto/evp/evp.c +6 -11
- data/third_party/boringssl/crypto/evp/evp_asn1.c +17 -17
- data/third_party/boringssl/crypto/evp/evp_ctx.c +15 -11
- data/third_party/boringssl/crypto/evp/internal.h +66 -51
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +11 -11
- data/third_party/boringssl/crypto/evp/p_ec.c +10 -8
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +11 -12
- data/third_party/boringssl/crypto/evp/p_ed25519.c +71 -0
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +190 -0
- data/third_party/boringssl/crypto/evp/p_rsa.c +50 -95
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +28 -18
- data/third_party/boringssl/crypto/evp/pbkdf.c +49 -56
- data/third_party/boringssl/crypto/evp/print.c +5 -36
- data/third_party/boringssl/crypto/evp/scrypt.c +209 -0
- data/third_party/boringssl/crypto/ex_data.c +15 -45
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +100 -0
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +679 -0
- data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/internal.h +40 -27
- data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/rsaz_exp.h +0 -0
- data/third_party/boringssl/crypto/{cipher → fipsmodule/cipher}/internal.h +34 -67
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +88 -0
- data/third_party/boringssl/crypto/{des → fipsmodule/des}/internal.h +18 -4
- data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/internal.h +18 -18
- data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/md32_common.h +58 -64
- data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/internal.h +58 -52
- data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64-table.h +11 -11
- data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64.h +32 -32
- data/third_party/boringssl/crypto/{rand/internal.h → fipsmodule/is_fips.c} +10 -15
- data/third_party/boringssl/crypto/{modes → fipsmodule/modes}/internal.h +112 -119
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +92 -0
- data/third_party/boringssl/crypto/{rsa → fipsmodule/rsa}/internal.h +36 -49
- data/third_party/boringssl/crypto/hkdf/hkdf.c +6 -6
- data/third_party/boringssl/crypto/internal.h +301 -233
- data/third_party/boringssl/crypto/lhash/lhash.c +26 -45
- data/third_party/boringssl/crypto/mem.c +76 -33
- data/third_party/boringssl/crypto/obj/obj.c +44 -28
- data/third_party/boringssl/crypto/obj/obj_dat.h +102 -34
- data/third_party/boringssl/crypto/obj/obj_xref.c +6 -6
- data/third_party/boringssl/crypto/pem/pem_info.c +3 -5
- data/third_party/boringssl/crypto/pem/pem_lib.c +1 -6
- data/third_party/boringssl/crypto/pem/pem_pk8.c +1 -0
- data/third_party/boringssl/crypto/pem/pem_pkey.c +1 -1
- data/third_party/boringssl/crypto/pem/pem_xaux.c +0 -2
- data/third_party/boringssl/crypto/pkcs7/internal.h +49 -0
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +166 -0
- data/third_party/boringssl/crypto/{x509/pkcs7.c → pkcs7/pkcs7_x509.c} +27 -147
- data/third_party/boringssl/crypto/pkcs8/internal.h +34 -16
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +120 -39
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +144 -857
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +789 -0
- data/third_party/boringssl/crypto/poly1305/internal.h +4 -3
- data/third_party/boringssl/crypto/poly1305/poly1305.c +14 -14
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +11 -11
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +41 -41
- data/third_party/boringssl/crypto/pool/internal.h +2 -2
- data/third_party/boringssl/crypto/pool/pool.c +15 -15
- data/third_party/boringssl/crypto/{rand → rand_extra}/deterministic.c +7 -7
- data/third_party/boringssl/crypto/rand_extra/forkunsafe.c +46 -0
- data/third_party/boringssl/crypto/{rand → rand_extra}/fuchsia.c +7 -7
- data/third_party/boringssl/crypto/rand_extra/rand_extra.c +70 -0
- data/third_party/boringssl/crypto/{rand → rand_extra}/windows.c +5 -5
- data/third_party/boringssl/crypto/refcount_c11.c +2 -2
- data/third_party/boringssl/crypto/refcount_lock.c +1 -1
- data/third_party/boringssl/crypto/{rsa → rsa_extra}/rsa_asn1.c +12 -120
- data/third_party/boringssl/crypto/stack/stack.c +13 -13
- data/third_party/boringssl/crypto/thread_none.c +1 -1
- data/third_party/boringssl/crypto/thread_pthread.c +1 -1
- data/third_party/boringssl/crypto/thread_win.c +40 -40
- data/third_party/boringssl/crypto/x509/a_sign.c +5 -12
- data/third_party/boringssl/crypto/x509/a_verify.c +6 -18
- data/third_party/boringssl/crypto/x509/algorithm.c +22 -6
- data/third_party/boringssl/crypto/x509/asn1_gen.c +30 -7
- data/third_party/boringssl/crypto/x509/by_dir.c +2 -2
- data/third_party/boringssl/crypto/x509/by_file.c +2 -2
- data/third_party/boringssl/crypto/x509/rsa_pss.c +5 -5
- data/third_party/boringssl/crypto/x509/t_x509.c +2 -1
- data/third_party/boringssl/crypto/x509/x509_def.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_lu.c +35 -4
- data/third_party/boringssl/crypto/x509/x509_set.c +10 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +20 -17
- data/third_party/boringssl/crypto/x509/x_name.c +13 -16
- data/third_party/boringssl/crypto/x509/x_x509.c +3 -3
- data/third_party/boringssl/crypto/x509/x_x509a.c +0 -7
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +8 -0
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_lib.c +0 -9
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -1
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +25 -15
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +21 -11
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +9 -3
- data/third_party/boringssl/crypto/x509v3/v3_info.c +22 -14
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +27 -11
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -33
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +4 -4
- data/third_party/boringssl/include/openssl/aead.h +280 -191
- data/third_party/boringssl/include/openssl/aes.h +50 -50
- data/third_party/boringssl/include/openssl/arm_arch.h +12 -12
- data/third_party/boringssl/include/openssl/asn1.h +14 -77
- data/third_party/boringssl/include/openssl/asn1t.h +11 -15
- data/third_party/boringssl/include/openssl/base.h +78 -51
- data/third_party/boringssl/include/openssl/base64.h +68 -68
- data/third_party/boringssl/include/openssl/bio.h +472 -406
- data/third_party/boringssl/include/openssl/blowfish.h +1 -1
- data/third_party/boringssl/include/openssl/bn.h +454 -435
- data/third_party/boringssl/include/openssl/buf.h +27 -27
- data/third_party/boringssl/include/openssl/bytestring.h +282 -267
- data/third_party/boringssl/include/openssl/cast.h +2 -2
- data/third_party/boringssl/include/openssl/chacha.h +5 -5
- data/third_party/boringssl/include/openssl/cipher.h +209 -200
- data/third_party/boringssl/include/openssl/cmac.h +27 -27
- data/third_party/boringssl/include/openssl/conf.h +49 -46
- data/third_party/boringssl/include/openssl/cpu.h +60 -45
- data/third_party/boringssl/include/openssl/crypto.h +59 -35
- data/third_party/boringssl/include/openssl/curve25519.h +97 -92
- data/third_party/boringssl/include/openssl/des.h +25 -25
- data/third_party/boringssl/include/openssl/dh.h +98 -97
- data/third_party/boringssl/include/openssl/digest.h +143 -114
- data/third_party/boringssl/include/openssl/dsa.h +217 -202
- data/third_party/boringssl/include/openssl/ec.h +132 -131
- data/third_party/boringssl/include/openssl/ec_key.h +132 -128
- data/third_party/boringssl/include/openssl/ecdh.h +9 -9
- data/third_party/boringssl/include/openssl/ecdsa.h +66 -66
- data/third_party/boringssl/include/openssl/engine.h +38 -38
- data/third_party/boringssl/include/openssl/err.h +189 -219
- data/third_party/boringssl/include/openssl/evp.h +473 -397
- data/third_party/boringssl/include/openssl/ex_data.h +46 -56
- data/third_party/boringssl/include/openssl/hkdf.h +17 -17
- data/third_party/boringssl/include/openssl/hmac.h +55 -43
- data/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
- data/third_party/boringssl/include/openssl/lhash.h +67 -67
- data/third_party/boringssl/include/openssl/lhash_macros.h +4 -4
- data/third_party/boringssl/include/openssl/md4.h +14 -14
- data/third_party/boringssl/include/openssl/md5.h +14 -14
- data/third_party/boringssl/include/openssl/mem.h +39 -33
- data/third_party/boringssl/include/openssl/nid.h +43 -0
- data/third_party/boringssl/include/openssl/obj.h +93 -87
- data/third_party/boringssl/include/openssl/opensslconf.h +8 -1
- data/third_party/boringssl/include/openssl/pem.h +2 -122
- data/third_party/boringssl/include/openssl/pkcs7.h +68 -2
- data/third_party/boringssl/include/openssl/pkcs8.h +81 -66
- data/third_party/boringssl/include/openssl/poly1305.h +11 -11
- data/third_party/boringssl/include/openssl/pool.h +29 -25
- data/third_party/boringssl/include/openssl/rand.h +48 -45
- data/third_party/boringssl/include/openssl/rc4.h +9 -9
- data/third_party/boringssl/include/openssl/ripemd.h +13 -13
- data/third_party/boringssl/include/openssl/rsa.h +371 -340
- data/third_party/boringssl/include/openssl/sha.h +71 -71
- data/third_party/boringssl/include/openssl/span.h +191 -0
- data/third_party/boringssl/include/openssl/ssl.h +2639 -2519
- data/third_party/boringssl/include/openssl/ssl3.h +39 -122
- data/third_party/boringssl/include/openssl/stack.h +355 -164
- data/third_party/boringssl/include/openssl/thread.h +43 -43
- data/third_party/boringssl/include/openssl/tls1.h +60 -63
- data/third_party/boringssl/include/openssl/type_check.h +10 -14
- data/third_party/boringssl/include/openssl/x509.h +41 -116
- data/third_party/boringssl/include/openssl/x509_vfy.h +17 -25
- data/third_party/boringssl/include/openssl/x509v3.h +27 -21
- data/third_party/boringssl/ssl/{bio_ssl.c → bio_ssl.cc} +9 -5
- data/third_party/boringssl/ssl/{custom_extensions.c → custom_extensions.cc} +19 -12
- data/third_party/boringssl/ssl/{d1_both.c → d1_both.cc} +224 -193
- data/third_party/boringssl/ssl/{d1_lib.c → d1_lib.cc} +86 -79
- data/third_party/boringssl/ssl/{d1_pkt.c → d1_pkt.cc} +55 -87
- data/third_party/boringssl/ssl/{d1_srtp.c → d1_srtp.cc} +12 -16
- data/third_party/boringssl/ssl/{dtls_method.c → dtls_method.cc} +33 -50
- data/third_party/boringssl/ssl/{dtls_record.c → dtls_record.cc} +76 -64
- data/third_party/boringssl/ssl/handshake.cc +547 -0
- data/third_party/boringssl/ssl/handshake_client.cc +1828 -0
- data/third_party/boringssl/ssl/handshake_server.cc +1672 -0
- data/third_party/boringssl/ssl/internal.h +2027 -1280
- data/third_party/boringssl/ssl/s3_both.cc +603 -0
- data/third_party/boringssl/ssl/{s3_lib.c → s3_lib.cc} +22 -10
- data/third_party/boringssl/ssl/{s3_pkt.c → s3_pkt.cc} +171 -75
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +415 -0
- data/third_party/boringssl/ssl/{ssl_asn1.c → ssl_asn1.cc} +257 -261
- data/third_party/boringssl/ssl/{ssl_buffer.c → ssl_buffer.cc} +81 -97
- data/third_party/boringssl/ssl/{ssl_cert.c → ssl_cert.cc} +304 -414
- data/third_party/boringssl/ssl/{ssl_cipher.c → ssl_cipher.cc} +427 -505
- data/third_party/boringssl/ssl/{ssl_file.c → ssl_file.cc} +24 -16
- data/third_party/boringssl/ssl/ssl_key_share.cc +245 -0
- data/third_party/boringssl/ssl/{ssl_lib.c → ssl_lib.cc} +665 -828
- data/third_party/boringssl/ssl/ssl_privkey.cc +518 -0
- data/third_party/boringssl/ssl/{ssl_session.c → ssl_session.cc} +596 -471
- data/third_party/boringssl/ssl/{ssl_stat.c → ssl_stat.cc} +5 -224
- data/third_party/boringssl/ssl/{ssl_transcript.c → ssl_transcript.cc} +117 -140
- data/third_party/boringssl/ssl/ssl_versions.cc +439 -0
- data/third_party/boringssl/ssl/{ssl_x509.c → ssl_x509.cc} +751 -267
- data/third_party/boringssl/ssl/{t1_enc.c → t1_enc.cc} +120 -161
- data/third_party/boringssl/ssl/{t1_lib.c → t1_lib.cc} +859 -966
- data/third_party/boringssl/ssl/{tls13_both.c → tls13_both.cc} +202 -284
- data/third_party/boringssl/ssl/tls13_client.cc +842 -0
- data/third_party/boringssl/ssl/{tls13_enc.c → tls13_enc.cc} +108 -90
- data/third_party/boringssl/ssl/tls13_server.cc +967 -0
- data/third_party/boringssl/ssl/{tls_method.c → tls_method.cc} +94 -73
- data/third_party/boringssl/ssl/tls_record.cc +675 -0
- metadata +117 -168
- data/include/grpc/support/cmdline.h +0 -88
- data/include/grpc/support/subprocess.h +0 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -29
- data/src/core/ext/filters/client_channel/resolver_factory.cc +0 -40
- data/src/core/lib/gpr/cmdline.cc +0 -330
- data/src/core/lib/gpr/subprocess_posix.cc +0 -99
- data/src/core/lib/gpr/subprocess_windows.cc +0 -126
- data/src/core/lib/surface/alarm.cc +0 -137
- data/src/core/lib/surface/alarm_internal.h +0 -40
- data/src/core/tsi/gts_transport_security.cc +0 -40
- data/third_party/boringssl/crypto/aes/aes.c +0 -1142
- data/third_party/boringssl/crypto/aes/internal.h +0 -87
- data/third_party/boringssl/crypto/aes/key_wrap.c +0 -138
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +0 -112
- data/third_party/boringssl/crypto/asn1/x_long.c +0 -200
- data/third_party/boringssl/crypto/bn/add.c +0 -377
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -532
- data/third_party/boringssl/crypto/bn/bn.c +0 -365
- data/third_party/boringssl/crypto/bn/cmp.c +0 -239
- data/third_party/boringssl/crypto/bn/ctx.c +0 -313
- data/third_party/boringssl/crypto/bn/div.c +0 -728
- data/third_party/boringssl/crypto/bn/exponentiation.c +0 -1240
- data/third_party/boringssl/crypto/bn/gcd.c +0 -635
- data/third_party/boringssl/crypto/bn/generic.c +0 -707
- data/third_party/boringssl/crypto/bn/kronecker.c +0 -176
- data/third_party/boringssl/crypto/bn/montgomery.c +0 -409
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +0 -207
- data/third_party/boringssl/crypto/bn/mul.c +0 -871
- data/third_party/boringssl/crypto/bn/prime.c +0 -861
- data/third_party/boringssl/crypto/bn/random.c +0 -343
- data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -254
- data/third_party/boringssl/crypto/bn/shift.c +0 -307
- data/third_party/boringssl/crypto/bn/sqrt.c +0 -506
- data/third_party/boringssl/crypto/cipher/aead.c +0 -156
- data/third_party/boringssl/crypto/cipher/cipher.c +0 -657
- data/third_party/boringssl/crypto/cipher/e_aes.c +0 -1771
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +0 -276
- data/third_party/boringssl/crypto/cipher/e_des.c +0 -205
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +0 -482
- data/third_party/boringssl/crypto/des/des.c +0 -771
- data/third_party/boringssl/crypto/digest/digest.c +0 -251
- data/third_party/boringssl/crypto/digest/digests.c +0 -358
- data/third_party/boringssl/crypto/ec/ec.c +0 -847
- data/third_party/boringssl/crypto/ec/ec_key.c +0 -479
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -303
- data/third_party/boringssl/crypto/ec/oct.c +0 -416
- data/third_party/boringssl/crypto/ec/p224-64.c +0 -1143
- data/third_party/boringssl/crypto/ec/p256-64.c +0 -1701
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +0 -561
- data/third_party/boringssl/crypto/ec/simple.c +0 -1118
- data/third_party/boringssl/crypto/ec/util-64.c +0 -109
- data/third_party/boringssl/crypto/ec/wnaf.c +0 -458
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +0 -479
- data/third_party/boringssl/crypto/hmac/hmac.c +0 -215
- data/third_party/boringssl/crypto/md4/md4.c +0 -236
- data/third_party/boringssl/crypto/md5/md5.c +0 -285
- data/third_party/boringssl/crypto/modes/cbc.c +0 -212
- data/third_party/boringssl/crypto/modes/cfb.c +0 -230
- data/third_party/boringssl/crypto/modes/ctr.c +0 -219
- data/third_party/boringssl/crypto/modes/gcm.c +0 -1071
- data/third_party/boringssl/crypto/modes/ofb.c +0 -95
- data/third_party/boringssl/crypto/modes/polyval.c +0 -94
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +0 -85
- data/third_party/boringssl/crypto/rand/rand.c +0 -244
- data/third_party/boringssl/crypto/rand/urandom.c +0 -335
- data/third_party/boringssl/crypto/rsa/blinding.c +0 -265
- data/third_party/boringssl/crypto/rsa/padding.c +0 -708
- data/third_party/boringssl/crypto/rsa/rsa.c +0 -830
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +0 -1100
- data/third_party/boringssl/crypto/sha/sha1-altivec.c +0 -346
- data/third_party/boringssl/crypto/sha/sha1.c +0 -355
- data/third_party/boringssl/crypto/sha/sha256.c +0 -329
- data/third_party/boringssl/crypto/sha/sha512.c +0 -609
- data/third_party/boringssl/crypto/x509/x509type.c +0 -126
- data/third_party/boringssl/include/openssl/stack_macros.h +0 -3987
- data/third_party/boringssl/ssl/handshake_client.c +0 -1883
- data/third_party/boringssl/ssl/handshake_server.c +0 -1950
- data/third_party/boringssl/ssl/s3_both.c +0 -895
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +0 -335
- data/third_party/boringssl/ssl/ssl_ecdh.c +0 -465
- data/third_party/boringssl/ssl/ssl_privkey.c +0 -683
- data/third_party/boringssl/ssl/ssl_privkey_cc.cc +0 -76
- data/third_party/boringssl/ssl/tls13_client.c +0 -712
- data/third_party/boringssl/ssl/tls13_server.c +0 -680
- data/third_party/boringssl/ssl/tls_record.c +0 -556
@@ -60,13 +60,13 @@
|
|
60
60
|
|
61
61
|
struct cmac_ctx_st {
|
62
62
|
EVP_CIPHER_CTX cipher_ctx;
|
63
|
-
|
64
|
-
|
63
|
+
// k1 and k2 are the CMAC subkeys. See
|
64
|
+
// https://tools.ietf.org/html/rfc4493#section-2.3
|
65
65
|
uint8_t k1[AES_BLOCK_SIZE];
|
66
66
|
uint8_t k2[AES_BLOCK_SIZE];
|
67
|
-
|
67
|
+
// Last (possibly partial) scratch
|
68
68
|
uint8_t block[AES_BLOCK_SIZE];
|
69
|
-
|
69
|
+
// block_used contains the number of valid bytes in |block|.
|
70
70
|
unsigned block_used;
|
71
71
|
};
|
72
72
|
|
@@ -124,20 +124,20 @@ void CMAC_CTX_free(CMAC_CTX *ctx) {
|
|
124
124
|
OPENSSL_free(ctx);
|
125
125
|
}
|
126
126
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
127
|
+
// binary_field_mul_x treats the 128 bits at |in| as an element of GF(2¹²⁸)
|
128
|
+
// with a hard-coded reduction polynomial and sets |out| as x times the
|
129
|
+
// input.
|
130
|
+
//
|
131
|
+
// See https://tools.ietf.org/html/rfc4493#section-2.3
|
132
132
|
static void binary_field_mul_x(uint8_t out[16], const uint8_t in[16]) {
|
133
133
|
unsigned i;
|
134
134
|
|
135
|
-
|
135
|
+
// Shift |in| to left, including carry.
|
136
136
|
for (i = 0; i < 15; i++) {
|
137
137
|
out[i] = (in[i] << 1) | (in[i+1] >> 7);
|
138
138
|
}
|
139
139
|
|
140
|
-
|
140
|
+
// If MSB set fixup with R.
|
141
141
|
const uint8_t carry = in[0] >> 7;
|
142
142
|
out[i] = (in[i] << 1) ^ ((0 - carry) & 0x87);
|
143
143
|
}
|
@@ -152,7 +152,7 @@ int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t key_len,
|
|
152
152
|
EVP_CIPHER_key_length(cipher) != key_len ||
|
153
153
|
!EVP_EncryptInit_ex(&ctx->cipher_ctx, cipher, NULL, key, kZeroIV) ||
|
154
154
|
!EVP_Cipher(&ctx->cipher_ctx, scratch, kZeroIV, AES_BLOCK_SIZE) ||
|
155
|
-
|
155
|
+
// Reset context again ready for first data.
|
156
156
|
!EVP_EncryptInit_ex(&ctx->cipher_ctx, NULL, NULL, NULL, kZeroIV)) {
|
157
157
|
return 0;
|
158
158
|
}
|
@@ -183,11 +183,11 @@ int CMAC_Update(CMAC_CTX *ctx, const uint8_t *in, size_t in_len) {
|
|
183
183
|
in_len -= todo;
|
184
184
|
ctx->block_used += todo;
|
185
185
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
186
|
+
// If |in_len| is zero then either |ctx->block_used| is less than
|
187
|
+
// |AES_BLOCK_SIZE|, in which case we can stop here, or |ctx->block_used|
|
188
|
+
// is exactly |AES_BLOCK_SIZE| but there's no more data to process. In the
|
189
|
+
// latter case we don't want to process this block now because it might be
|
190
|
+
// the last block and that block is treated specially.
|
191
191
|
if (in_len == 0) {
|
192
192
|
return 1;
|
193
193
|
}
|
@@ -199,7 +199,7 @@ int CMAC_Update(CMAC_CTX *ctx, const uint8_t *in, size_t in_len) {
|
|
199
199
|
}
|
200
200
|
}
|
201
201
|
|
202
|
-
|
202
|
+
// Encrypt all but one of the remaining blocks.
|
203
203
|
while (in_len > AES_BLOCK_SIZE) {
|
204
204
|
if (!EVP_Cipher(&ctx->cipher_ctx, scratch, in, AES_BLOCK_SIZE)) {
|
205
205
|
return 0;
|
@@ -223,8 +223,8 @@ int CMAC_Final(CMAC_CTX *ctx, uint8_t *out, size_t *out_len) {
|
|
223
223
|
const uint8_t *mask = ctx->k1;
|
224
224
|
|
225
225
|
if (ctx->block_used != AES_BLOCK_SIZE) {
|
226
|
-
|
227
|
-
|
226
|
+
// If the last block is incomplete, terminate it with a single 'one' bit
|
227
|
+
// followed by zeros.
|
228
228
|
ctx->block[ctx->block_used] = 0x80;
|
229
229
|
OPENSSL_memset(ctx->block + ctx->block_used + 1, 0,
|
230
230
|
AES_BLOCK_SIZE - (ctx->block_used + 1));
|
@@ -69,6 +69,10 @@
|
|
69
69
|
#include "../internal.h"
|
70
70
|
|
71
71
|
|
72
|
+
// The maximum length we can grow a value to after variable expansion. 64k
|
73
|
+
// should be more than enough for all reasonable uses.
|
74
|
+
#define MAX_CONF_VALUE_LENGTH 65536
|
75
|
+
|
72
76
|
static uint32_t conf_value_hash(const CONF_VALUE *v) {
|
73
77
|
return (lh_strhash(v->section) << 2) ^ lh_strhash(v->name);
|
74
78
|
}
|
@@ -259,7 +263,7 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from) {
|
|
259
263
|
} else if (IS_EOF(conf, *from)) {
|
260
264
|
break;
|
261
265
|
} else if (*from == '$') {
|
262
|
-
|
266
|
+
// try to expand it
|
263
267
|
rrp = NULL;
|
264
268
|
s = &(from[1]);
|
265
269
|
if (*s == '{') {
|
@@ -299,14 +303,14 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from) {
|
|
299
303
|
}
|
300
304
|
e++;
|
301
305
|
}
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
306
|
+
// So at this point we have
|
307
|
+
// np which is the start of the name string which is
|
308
|
+
// '\0' terminated.
|
309
|
+
// cp which is the start of the section string which is
|
310
|
+
// '\0' terminated.
|
311
|
+
// e is the 'next point after'.
|
312
|
+
// r and rr are the chars replaced by the '\0'
|
313
|
+
// rp and rrp is where 'r' and 'rr' came from.
|
310
314
|
p = NCONF_get_string(conf, cp, np);
|
311
315
|
if (rrp != NULL) {
|
312
316
|
*rrp = rr;
|
@@ -316,7 +320,15 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from) {
|
|
316
320
|
OPENSSL_PUT_ERROR(CONF, CONF_R_VARIABLE_HAS_NO_VALUE);
|
317
321
|
goto err;
|
318
322
|
}
|
319
|
-
|
323
|
+
size_t newsize = strlen(p) + buf->length - (e - from);
|
324
|
+
if (newsize > MAX_CONF_VALUE_LENGTH) {
|
325
|
+
OPENSSL_PUT_ERROR(CONF, CONF_R_VARIABLE_EXPANSION_TOO_LONG);
|
326
|
+
goto err;
|
327
|
+
}
|
328
|
+
if (!BUF_MEM_grow_clean(buf, newsize)) {
|
329
|
+
OPENSSL_PUT_ERROR(CONF, ERR_R_MALLOC_FAILURE);
|
330
|
+
goto err;
|
331
|
+
}
|
320
332
|
while (*p) {
|
321
333
|
buf->data[to++] = *(p++);
|
322
334
|
}
|
@@ -554,25 +566,25 @@ static int def_load_bio(CONF *conf, BIO *in, long *out_error_line) {
|
|
554
566
|
i--;
|
555
567
|
}
|
556
568
|
}
|
557
|
-
|
558
|
-
|
569
|
+
// we removed some trailing stuff so there is a new
|
570
|
+
// line on the end.
|
559
571
|
if (ii && i == ii) {
|
560
|
-
again = 1;
|
572
|
+
again = 1; // long line
|
561
573
|
} else {
|
562
574
|
p[i] = '\0';
|
563
|
-
eline++;
|
575
|
+
eline++; // another input line
|
564
576
|
}
|
565
577
|
|
566
|
-
|
578
|
+
// we now have a line with trailing \r\n removed
|
567
579
|
|
568
|
-
|
580
|
+
// i is the number of bytes
|
569
581
|
bufnum += i;
|
570
582
|
|
571
583
|
v = NULL;
|
572
|
-
|
584
|
+
// check for line continuation
|
573
585
|
if (bufnum >= 1) {
|
574
|
-
|
575
|
-
|
586
|
+
// If we have bytes and the last char '\\' and
|
587
|
+
// second last char is not '\\'
|
576
588
|
p = &(buff->data[bufnum - 1]);
|
577
589
|
if (IS_ESC(conf, p[0]) && ((bufnum <= 1) || !IS_ESC(conf, p[-1]))) {
|
578
590
|
bufnum--;
|
@@ -588,7 +600,7 @@ static int def_load_bio(CONF *conf, BIO *in, long *out_error_line) {
|
|
588
600
|
clear_comments(conf, buf);
|
589
601
|
s = eat_ws(conf, buf);
|
590
602
|
if (IS_EOF(conf, *s)) {
|
591
|
-
continue;
|
603
|
+
continue; // blank line
|
592
604
|
}
|
593
605
|
if (*s == '[') {
|
594
606
|
char *ss;
|
@@ -20,12 +20,12 @@ extern "C" {
|
|
20
20
|
#endif
|
21
21
|
|
22
22
|
|
23
|
-
|
23
|
+
// CONF_VALUE_new returns a freshly allocated and zeroed |CONF_VALUE|.
|
24
24
|
CONF_VALUE *CONF_VALUE_new(void);
|
25
25
|
|
26
26
|
|
27
27
|
#if defined(__cplusplus)
|
28
|
-
}
|
28
|
+
} // extern C
|
29
29
|
#endif
|
30
30
|
|
31
|
-
#endif
|
31
|
+
#endif // OPENSSL_HEADER_CRYPTO_CONF_INTERNAL_H
|
@@ -28,8 +28,8 @@ extern uint32_t OPENSSL_armcap_P;
|
|
28
28
|
void OPENSSL_cpuid_setup(void) {
|
29
29
|
unsigned long hwcap = getauxval(AT_HWCAP);
|
30
30
|
|
31
|
-
|
32
|
-
|
31
|
+
// See /usr/include/asm/hwcap.h on an aarch64 installation for the source of
|
32
|
+
// these values.
|
33
33
|
static const unsigned long kNEON = 1 << 1;
|
34
34
|
static const unsigned long kAES = 1 << 3;
|
35
35
|
static const unsigned long kPMULL = 1 << 4;
|
@@ -37,8 +37,8 @@ void OPENSSL_cpuid_setup(void) {
|
|
37
37
|
static const unsigned long kSHA256 = 1 << 6;
|
38
38
|
|
39
39
|
if ((hwcap & kNEON) == 0) {
|
40
|
-
|
41
|
-
|
40
|
+
// Matching OpenSSL, if NEON is missing, don't report other features
|
41
|
+
// either.
|
42
42
|
return;
|
43
43
|
}
|
44
44
|
|
@@ -58,4 +58,4 @@ void OPENSSL_cpuid_setup(void) {
|
|
58
58
|
}
|
59
59
|
}
|
60
60
|
|
61
|
-
#endif
|
61
|
+
#endif // OPENSSL_AARCH64 && !OPENSSL_STATIC_ARMCAP
|
@@ -34,15 +34,15 @@
|
|
34
34
|
|
35
35
|
#define HWCAP_NEON (1 << 12)
|
36
36
|
|
37
|
-
|
38
|
-
|
37
|
+
// See /usr/include/asm/hwcap.h on an ARM installation for the source of
|
38
|
+
// these values.
|
39
39
|
#define HWCAP2_AES (1 << 0)
|
40
40
|
#define HWCAP2_PMULL (1 << 1)
|
41
41
|
#define HWCAP2_SHA1 (1 << 2)
|
42
42
|
#define HWCAP2_SHA2 (1 << 3)
|
43
43
|
|
44
|
-
|
45
|
-
|
44
|
+
// |getauxval| is not available on Android until API level 20. Link it as a weak
|
45
|
+
// symbol and use other methods as fallback.
|
46
46
|
unsigned long getauxval(unsigned long type) __attribute__((weak));
|
47
47
|
|
48
48
|
static int open_eintr(const char *path, int flags) {
|
@@ -61,8 +61,8 @@ static ssize_t read_eintr(int fd, void *out, size_t len) {
|
|
61
61
|
return ret;
|
62
62
|
}
|
63
63
|
|
64
|
-
|
65
|
-
|
64
|
+
// read_full reads exactly |len| bytes from |fd| to |out|. On error or end of
|
65
|
+
// file, it returns zero.
|
66
66
|
static int read_full(int fd, void *out, size_t len) {
|
67
67
|
char *outp = out;
|
68
68
|
while (len > 0) {
|
@@ -76,9 +76,9 @@ static int read_full(int fd, void *out, size_t len) {
|
|
76
76
|
return 1;
|
77
77
|
}
|
78
78
|
|
79
|
-
|
80
|
-
|
81
|
-
|
79
|
+
// read_file opens |path| and reads until end-of-file. On success, it returns
|
80
|
+
// one and sets |*out_ptr| and |*out_len| to a newly-allocated buffer with the
|
81
|
+
// contents. Otherwise, it returns zero.
|
82
82
|
static int read_file(char **out_ptr, size_t *out_len, const char *path) {
|
83
83
|
int fd = open_eintr(path, O_RDONLY);
|
84
84
|
if (fd < 0) {
|
@@ -128,7 +128,7 @@ err:
|
|
128
128
|
return ret;
|
129
129
|
}
|
130
130
|
|
131
|
-
|
131
|
+
// getauxval_proc behaves like |getauxval| but reads from /proc/self/auxv.
|
132
132
|
static unsigned long getauxval_proc(unsigned long type) {
|
133
133
|
int fd = open_eintr("/proc/self/auxv", O_RDONLY);
|
134
134
|
if (fd < 0) {
|
@@ -164,16 +164,16 @@ static int STRING_PIECE_equals(const STRING_PIECE *a, const char *b) {
|
|
164
164
|
return a->len == b_len && OPENSSL_memcmp(a->data, b, b_len) == 0;
|
165
165
|
}
|
166
166
|
|
167
|
-
|
168
|
-
|
169
|
-
|
167
|
+
// STRING_PIECE_split finds the first occurence of |sep| in |in| and, if found,
|
168
|
+
// sets |*out_left| and |*out_right| to |in| split before and after it. It
|
169
|
+
// returns one if |sep| was found and zero otherwise.
|
170
170
|
static int STRING_PIECE_split(STRING_PIECE *out_left, STRING_PIECE *out_right,
|
171
171
|
const STRING_PIECE *in, char sep) {
|
172
172
|
const char *p = OPENSSL_memchr(in->data, sep, in->len);
|
173
173
|
if (p == NULL) {
|
174
174
|
return 0;
|
175
175
|
}
|
176
|
-
|
176
|
+
// |out_left| or |out_right| may alias |in|, so make a copy.
|
177
177
|
STRING_PIECE in_copy = *in;
|
178
178
|
out_left->data = in_copy.data;
|
179
179
|
out_left->len = p - in_copy.data;
|
@@ -182,7 +182,7 @@ static int STRING_PIECE_split(STRING_PIECE *out_left, STRING_PIECE *out_right,
|
|
182
182
|
return 1;
|
183
183
|
}
|
184
184
|
|
185
|
-
|
185
|
+
// STRING_PIECE_trim removes leading and trailing whitespace from |s|.
|
186
186
|
static void STRING_PIECE_trim(STRING_PIECE *s) {
|
187
187
|
while (s->len != 0 && (s->data[0] == ' ' || s->data[0] == '\t')) {
|
188
188
|
s->data++;
|
@@ -194,12 +194,12 @@ static void STRING_PIECE_trim(STRING_PIECE *s) {
|
|
194
194
|
}
|
195
195
|
}
|
196
196
|
|
197
|
-
|
198
|
-
|
199
|
-
|
197
|
+
// extract_cpuinfo_field extracts a /proc/cpuinfo field named |field| from
|
198
|
+
// |in|. If found, it sets |*out| to the value and returns one. Otherwise, it
|
199
|
+
// returns zero.
|
200
200
|
static int extract_cpuinfo_field(STRING_PIECE *out, const STRING_PIECE *in,
|
201
201
|
const char *field) {
|
202
|
-
|
202
|
+
// Process |in| one line at a time.
|
203
203
|
STRING_PIECE remaining = *in, line;
|
204
204
|
while (STRING_PIECE_split(&line, &remaining, &remaining, '\n')) {
|
205
205
|
STRING_PIECE key, value;
|
@@ -224,8 +224,8 @@ static int cpuinfo_field_equals(const STRING_PIECE *cpuinfo, const char *field,
|
|
224
224
|
STRING_PIECE_equals(&extracted, value);
|
225
225
|
}
|
226
226
|
|
227
|
-
|
228
|
-
|
227
|
+
// has_list_item treats |list| as a space-separated list of items and returns
|
228
|
+
// one if |item| is contained in |list| and zero otherwise.
|
229
229
|
static int has_list_item(const STRING_PIECE *list, const char *item) {
|
230
230
|
STRING_PIECE remaining = *list, feature;
|
231
231
|
while (STRING_PIECE_split(&feature, &remaining, &remaining, ' ')) {
|
@@ -238,11 +238,11 @@ static int has_list_item(const STRING_PIECE *list, const char *item) {
|
|
238
238
|
|
239
239
|
static unsigned long get_hwcap_cpuinfo(const STRING_PIECE *cpuinfo) {
|
240
240
|
if (cpuinfo_field_equals(cpuinfo, "CPU architecture", "8")) {
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
241
|
+
// This is a 32-bit ARM binary running on a 64-bit kernel. NEON is always
|
242
|
+
// available on ARMv8. Linux omits required features, so reading the
|
243
|
+
// "Features" line does not work. (For simplicity, use strict equality. We
|
244
|
+
// assume everything running on future ARM architectures will have a
|
245
|
+
// working |getauxval|.)
|
246
246
|
return HWCAP_NEON;
|
247
247
|
}
|
248
248
|
|
@@ -276,8 +276,8 @@ static unsigned long get_hwcap2_cpuinfo(const STRING_PIECE *cpuinfo) {
|
|
276
276
|
return ret;
|
277
277
|
}
|
278
278
|
|
279
|
-
|
280
|
-
|
279
|
+
// has_broken_neon returns one if |in| matches a CPU known to have a broken
|
280
|
+
// NEON unit. See https://crbug.com/341598.
|
281
281
|
static int has_broken_neon(const STRING_PIECE *cpuinfo) {
|
282
282
|
return cpuinfo_field_equals(cpuinfo, "CPU implementer", "0x51") &&
|
283
283
|
cpuinfo_field_equals(cpuinfo, "CPU architecture", "7") &&
|
@@ -288,7 +288,7 @@ static int has_broken_neon(const STRING_PIECE *cpuinfo) {
|
|
288
288
|
|
289
289
|
extern uint32_t OPENSSL_armcap_P;
|
290
290
|
|
291
|
-
static int g_has_broken_neon;
|
291
|
+
static int g_has_broken_neon, g_needs_hwcap2_workaround;
|
292
292
|
|
293
293
|
void OPENSSL_cpuid_setup(void) {
|
294
294
|
char *cpuinfo_data;
|
@@ -300,13 +300,13 @@ void OPENSSL_cpuid_setup(void) {
|
|
300
300
|
cpuinfo.data = cpuinfo_data;
|
301
301
|
cpuinfo.len = cpuinfo_len;
|
302
302
|
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
303
|
+
// |getauxval| is not available on Android until API level 20. If it is
|
304
|
+
// unavailable, read from /proc/self/auxv as a fallback. This is unreadable
|
305
|
+
// on some versions of Android, so further fall back to /proc/cpuinfo.
|
306
|
+
//
|
307
|
+
// See
|
308
|
+
// https://android.googlesource.com/platform/ndk/+/882ac8f3392858991a0e1af33b4b7387ec856bd2
|
309
|
+
// and b/13679666 (Google-internal) for details.
|
310
310
|
unsigned long hwcap = 0;
|
311
311
|
if (getauxval != NULL) {
|
312
312
|
hwcap = getauxval(AT_HWCAP);
|
@@ -318,24 +318,25 @@ void OPENSSL_cpuid_setup(void) {
|
|
318
318
|
hwcap = get_hwcap_cpuinfo(&cpuinfo);
|
319
319
|
}
|
320
320
|
|
321
|
-
|
321
|
+
// Clear NEON support if known broken.
|
322
322
|
g_has_broken_neon = has_broken_neon(&cpuinfo);
|
323
323
|
if (g_has_broken_neon) {
|
324
324
|
hwcap &= ~HWCAP_NEON;
|
325
325
|
}
|
326
326
|
|
327
|
-
|
327
|
+
// Matching OpenSSL, only report other features if NEON is present.
|
328
328
|
if (hwcap & HWCAP_NEON) {
|
329
329
|
OPENSSL_armcap_P |= ARMV7_NEON;
|
330
330
|
|
331
|
-
|
332
|
-
|
331
|
+
// Some ARMv8 Android devices don't expose AT_HWCAP2. Fall back to
|
332
|
+
// /proc/cpuinfo. See https://crbug.com/596156.
|
333
333
|
unsigned long hwcap2 = 0;
|
334
334
|
if (getauxval != NULL) {
|
335
335
|
hwcap2 = getauxval(AT_HWCAP2);
|
336
336
|
}
|
337
337
|
if (hwcap2 == 0) {
|
338
338
|
hwcap2 = get_hwcap2_cpuinfo(&cpuinfo);
|
339
|
+
g_needs_hwcap2_workaround = hwcap2 != 0;
|
339
340
|
}
|
340
341
|
|
341
342
|
if (hwcap2 & HWCAP2_AES) {
|
@@ -357,4 +358,6 @@ void OPENSSL_cpuid_setup(void) {
|
|
357
358
|
|
358
359
|
int CRYPTO_has_broken_NEON(void) { return g_has_broken_neon; }
|
359
360
|
|
360
|
-
|
361
|
+
int CRYPTO_needs_hwcap2_workaround(void) { return g_needs_hwcap2_workaround; }
|
362
|
+
|
363
|
+
#endif // OPENSSL_ARM && !OPENSSL_STATIC_ARMCAP
|
@@ -68,7 +68,7 @@
|
|
68
68
|
#include <stdlib.h>
|
69
69
|
#include <string.h>
|
70
70
|
|
71
|
-
#if defined(
|
71
|
+
#if defined(_MSC_VER)
|
72
72
|
OPENSSL_MSVC_PRAGMA(warning(push, 3))
|
73
73
|
#include <immintrin.h>
|
74
74
|
#include <intrin.h>
|
@@ -78,12 +78,12 @@ OPENSSL_MSVC_PRAGMA(warning(pop))
|
|
78
78
|
#include "internal.h"
|
79
79
|
|
80
80
|
|
81
|
-
|
82
|
-
|
83
|
-
|
81
|
+
// OPENSSL_cpuid runs the cpuid instruction. |leaf| is passed in as EAX and ECX
|
82
|
+
// is set to zero. It writes EAX, EBX, ECX, and EDX to |*out_eax| through
|
83
|
+
// |*out_edx|.
|
84
84
|
static void OPENSSL_cpuid(uint32_t *out_eax, uint32_t *out_ebx,
|
85
85
|
uint32_t *out_ecx, uint32_t *out_edx, uint32_t leaf) {
|
86
|
-
#if defined(
|
86
|
+
#if defined(_MSC_VER)
|
87
87
|
int tmp[4];
|
88
88
|
__cpuid(tmp, (int)leaf);
|
89
89
|
*out_eax = (uint32_t)tmp[0];
|
@@ -91,8 +91,8 @@ static void OPENSSL_cpuid(uint32_t *out_eax, uint32_t *out_ebx,
|
|
91
91
|
*out_ecx = (uint32_t)tmp[2];
|
92
92
|
*out_edx = (uint32_t)tmp[3];
|
93
93
|
#elif defined(__pic__) && defined(OPENSSL_32_BIT)
|
94
|
-
|
95
|
-
|
94
|
+
// Inline assembly may not clobber the PIC register. For 32-bit, this is EBX.
|
95
|
+
// See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47602.
|
96
96
|
__asm__ volatile (
|
97
97
|
"xor %%ecx, %%ecx\n"
|
98
98
|
"mov %%ebx, %%edi\n"
|
@@ -111,10 +111,10 @@ static void OPENSSL_cpuid(uint32_t *out_eax, uint32_t *out_ebx,
|
|
111
111
|
#endif
|
112
112
|
}
|
113
113
|
|
114
|
-
|
115
|
-
|
114
|
+
// OPENSSL_xgetbv returns the value of an Intel Extended Control Register (XCR).
|
115
|
+
// Currently only XCR0 is defined by Intel so |xcr| should always be zero.
|
116
116
|
static uint64_t OPENSSL_xgetbv(uint32_t xcr) {
|
117
|
-
#if defined(
|
117
|
+
#if defined(_MSC_VER)
|
118
118
|
return (uint64_t)_xgetbv(xcr);
|
119
119
|
#else
|
120
120
|
uint32_t eax, edx;
|
@@ -123,8 +123,8 @@ static uint64_t OPENSSL_xgetbv(uint32_t xcr) {
|
|
123
123
|
#endif
|
124
124
|
}
|
125
125
|
|
126
|
-
|
127
|
-
|
126
|
+
// handle_cpu_env applies the value from |in| to the CPUID values in |out[0]|
|
127
|
+
// and |out[1]|. See the comment in |OPENSSL_cpuid_setup| about this.
|
128
128
|
static void handle_cpu_env(uint32_t *out, const char *in) {
|
129
129
|
const int invert = in[0] == '~';
|
130
130
|
uint64_t v;
|
@@ -143,7 +143,7 @@ static void handle_cpu_env(uint32_t *out, const char *in) {
|
|
143
143
|
}
|
144
144
|
|
145
145
|
void OPENSSL_cpuid_setup(void) {
|
146
|
-
|
146
|
+
// Determine the vendor and maximum input value.
|
147
147
|
uint32_t eax, ebx, ecx, edx;
|
148
148
|
OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 0);
|
149
149
|
|
@@ -158,8 +158,8 @@ void OPENSSL_cpuid_setup(void) {
|
|
158
158
|
|
159
159
|
int has_amd_xop = 0;
|
160
160
|
if (is_amd) {
|
161
|
-
|
162
|
-
|
161
|
+
// AMD-specific logic.
|
162
|
+
// See http://developer.amd.com/wordpress/media/2012/10/254811.pdf
|
163
163
|
OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 0x80000000);
|
164
164
|
uint32_t num_extended_ids = eax;
|
165
165
|
if (num_extended_ids >= 0x80000001) {
|
@@ -176,23 +176,23 @@ void OPENSSL_cpuid_setup(void) {
|
|
176
176
|
extended_features = ebx;
|
177
177
|
}
|
178
178
|
|
179
|
-
|
180
|
-
|
179
|
+
// Determine the number of cores sharing an L1 data cache to adjust the
|
180
|
+
// hyper-threading bit.
|
181
181
|
uint32_t cores_per_cache = 0;
|
182
182
|
if (is_amd) {
|
183
|
-
|
184
|
-
|
183
|
+
// AMD CPUs never share an L1 data cache between threads but do set the HTT
|
184
|
+
// bit on multi-core CPUs.
|
185
185
|
cores_per_cache = 1;
|
186
186
|
} else if (num_ids >= 4) {
|
187
|
-
|
188
|
-
|
187
|
+
// TODO(davidben): The Intel manual says this CPUID leaf enumerates all
|
188
|
+
// caches using ECX and doesn't say which is first. Does this matter?
|
189
189
|
OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 4);
|
190
190
|
cores_per_cache = 1 + ((eax >> 14) & 0xfff);
|
191
191
|
}
|
192
192
|
|
193
193
|
OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 1);
|
194
194
|
|
195
|
-
|
195
|
+
// Adjust the hyper-threading bit.
|
196
196
|
if (edx & (1 << 28)) {
|
197
197
|
uint32_t num_logical_cores = (ebx >> 16) & 0xff;
|
198
198
|
if (cores_per_cache == 1 || num_logical_cores <= 1) {
|
@@ -200,18 +200,26 @@ void OPENSSL_cpuid_setup(void) {
|
|
200
200
|
}
|
201
201
|
}
|
202
202
|
|
203
|
-
|
204
|
-
|
203
|
+
// Reserved bit #20 was historically repurposed to control the in-memory
|
204
|
+
// representation of RC4 state. Always set it to zero.
|
205
205
|
edx &= ~(1 << 20);
|
206
206
|
|
207
|
-
|
207
|
+
// Reserved bit #30 is repurposed to signal an Intel CPU.
|
208
208
|
if (is_intel) {
|
209
209
|
edx |= (1 << 30);
|
210
|
+
|
211
|
+
// Clear the XSAVE bit on Knights Landing to mimic Silvermont. This enables
|
212
|
+
// some Silvermont-specific codepaths which perform better. See OpenSSL
|
213
|
+
// commit 64d92d74985ebb3d0be58a9718f9e080a14a8e7f.
|
214
|
+
if ((eax & 0x0fff0ff0) == 0x00050670 /* Knights Landing */ ||
|
215
|
+
(eax & 0x0fff0ff0) == 0x00080650 /* Knights Mill (per SDE) */) {
|
216
|
+
ecx &= ~(1 << 26);
|
217
|
+
}
|
210
218
|
} else {
|
211
219
|
edx &= ~(1 << 30);
|
212
220
|
}
|
213
221
|
|
214
|
-
|
222
|
+
// The SDBG bit is repurposed to denote AMD XOP support.
|
215
223
|
if (has_amd_xop) {
|
216
224
|
ecx |= (1 << 11);
|
217
225
|
} else {
|
@@ -220,16 +228,33 @@ void OPENSSL_cpuid_setup(void) {
|
|
220
228
|
|
221
229
|
uint64_t xcr0 = 0;
|
222
230
|
if (ecx & (1 << 27)) {
|
223
|
-
|
231
|
+
// XCR0 may only be queried if the OSXSAVE bit is set.
|
224
232
|
xcr0 = OPENSSL_xgetbv(0);
|
225
233
|
}
|
226
|
-
|
234
|
+
// See Intel manual, volume 1, section 14.3.
|
227
235
|
if ((xcr0 & 6) != 6) {
|
228
|
-
|
229
|
-
ecx &= ~(1 << 28);
|
230
|
-
ecx &= ~(1 << 12);
|
231
|
-
ecx &= ~(1 << 11);
|
232
|
-
|
236
|
+
// YMM registers cannot be used.
|
237
|
+
ecx &= ~(1 << 28); // AVX
|
238
|
+
ecx &= ~(1 << 12); // FMA
|
239
|
+
ecx &= ~(1 << 11); // AMD XOP
|
240
|
+
// Clear AVX2 and AVX512* bits.
|
241
|
+
//
|
242
|
+
// TODO(davidben): Should bits 17 and 26-28 also be cleared? Upstream
|
243
|
+
// doesn't clear those.
|
244
|
+
extended_features &=
|
245
|
+
~((1 << 5) | (1 << 16) | (1 << 21) | (1 << 30) | (1 << 31));
|
246
|
+
}
|
247
|
+
// See Intel manual, volume 1, section 15.2.
|
248
|
+
if ((xcr0 & 0xe6) != 0xe6) {
|
249
|
+
// Clear AVX512F. Note we don't touch other AVX512 extensions because they
|
250
|
+
// can be used with YMM.
|
251
|
+
extended_features &= ~(1 << 16);
|
252
|
+
}
|
253
|
+
|
254
|
+
// Disable ADX instructions on Knights Landing. See OpenSSL commit
|
255
|
+
// 64d92d74985ebb3d0be58a9718f9e080a14a8e7f.
|
256
|
+
if ((ecx & (1 << 26)) == 0) {
|
257
|
+
extended_features &= ~(1 << 19);
|
233
258
|
}
|
234
259
|
|
235
260
|
OPENSSL_ia32cap_P[0] = edx;
|
@@ -243,15 +268,15 @@ void OPENSSL_cpuid_setup(void) {
|
|
243
268
|
return;
|
244
269
|
}
|
245
270
|
|
246
|
-
|
247
|
-
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
271
|
+
// OPENSSL_ia32cap can contain zero, one or two values, separated with a ':'.
|
272
|
+
// Each value is a 64-bit, unsigned value which may start with "0x" to
|
273
|
+
// indicate a hex value. Prior to the 64-bit value, a '~' may be given.
|
274
|
+
//
|
275
|
+
// If '~' isn't present, then the value is taken as the result of the CPUID.
|
276
|
+
// Otherwise the value is inverted and ANDed with the probed CPUID result.
|
277
|
+
//
|
278
|
+
// The first value determines OPENSSL_ia32cap_P[0] and [1]. The second [2]
|
279
|
+
// and [3].
|
255
280
|
|
256
281
|
handle_cpu_env(&OPENSSL_ia32cap_P[0], env1);
|
257
282
|
env2 = strchr(env1, ':');
|
@@ -260,4 +285,4 @@ void OPENSSL_cpuid_setup(void) {
|
|
260
285
|
}
|
261
286
|
}
|
262
287
|
|
263
|
-
#endif
|
288
|
+
#endif // !OPENSSL_NO_ASM && (OPENSSL_X86 || OPENSSL_X86_64)
|