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
@@ -75,7 +75,7 @@ static int parse_integer(CBS *cbs, BIGNUM **out) {
|
|
75
75
|
|
76
76
|
static int marshal_integer(CBB *cbb, BIGNUM *bn) {
|
77
77
|
if (bn == NULL) {
|
78
|
-
|
78
|
+
// A DSA object may be missing some components.
|
79
79
|
OPENSSL_PUT_ERROR(DSA, ERR_R_PASSED_NULL_PARAMETER);
|
80
80
|
return 0;
|
81
81
|
}
|
@@ -62,7 +62,7 @@
|
|
62
62
|
#include <openssl/mem.h>
|
63
63
|
#include <openssl/nid.h>
|
64
64
|
|
65
|
-
#include "internal.h"
|
65
|
+
#include "../fipsmodule/ec/internal.h"
|
66
66
|
#include "../bytestring/internal.h"
|
67
67
|
#include "../internal.h"
|
68
68
|
|
@@ -83,14 +83,14 @@ EC_KEY *EC_KEY_parse_private_key(CBS *cbs, const EC_GROUP *group) {
|
|
83
83
|
return NULL;
|
84
84
|
}
|
85
85
|
|
86
|
-
|
86
|
+
// Parse the optional parameters field.
|
87
87
|
EC_GROUP *inner_group = NULL;
|
88
88
|
EC_KEY *ret = NULL;
|
89
89
|
if (CBS_peek_asn1_tag(&ec_private_key, kParametersTag)) {
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
90
|
+
// Per SEC 1, as an alternative to omitting it, one is allowed to specify
|
91
|
+
// this field and put in a NULL to mean inheriting this value. This was
|
92
|
+
// omitted in a previous version of this logic without problems, so leave it
|
93
|
+
// unimplemented.
|
94
94
|
CBS child;
|
95
95
|
if (!CBS_get_asn1(&ec_private_key, &child, kParametersTag)) {
|
96
96
|
OPENSSL_PUT_ERROR(EC, EC_R_DECODE_ERROR);
|
@@ -103,7 +103,7 @@ EC_KEY *EC_KEY_parse_private_key(CBS *cbs, const EC_GROUP *group) {
|
|
103
103
|
if (group == NULL) {
|
104
104
|
group = inner_group;
|
105
105
|
} else if (EC_GROUP_cmp(group, inner_group, NULL) != 0) {
|
106
|
-
|
106
|
+
// If a group was supplied externally, it must match.
|
107
107
|
OPENSSL_PUT_ERROR(EC, EC_R_GROUP_MISMATCH);
|
108
108
|
goto err;
|
109
109
|
}
|
@@ -123,9 +123,9 @@ EC_KEY *EC_KEY_parse_private_key(CBS *cbs, const EC_GROUP *group) {
|
|
123
123
|
goto err;
|
124
124
|
}
|
125
125
|
|
126
|
-
|
127
|
-
|
128
|
-
|
126
|
+
// Although RFC 5915 specifies the length of the key, OpenSSL historically
|
127
|
+
// got this wrong, so accept any length. See upstream's
|
128
|
+
// 30cd4ff294252c4b6a4b69cbef6a5b4117705d22.
|
129
129
|
ret->priv_key =
|
130
130
|
BN_bin2bn(CBS_data(&private_key), CBS_len(&private_key), NULL);
|
131
131
|
ret->pub_key = EC_POINT_new(group);
|
@@ -143,12 +143,12 @@ EC_KEY *EC_KEY_parse_private_key(CBS *cbs, const EC_GROUP *group) {
|
|
143
143
|
uint8_t padding;
|
144
144
|
if (!CBS_get_asn1(&ec_private_key, &child, kPublicKeyTag) ||
|
145
145
|
!CBS_get_asn1(&child, &public_key, CBS_ASN1_BITSTRING) ||
|
146
|
-
|
147
|
-
|
146
|
+
// As in a SubjectPublicKeyInfo, the byte-encoded public key is then
|
147
|
+
// encoded as a BIT STRING with bits ordered as in the DER encoding.
|
148
148
|
!CBS_get_u8(&public_key, &padding) ||
|
149
149
|
padding != 0 ||
|
150
|
-
|
151
|
-
|
150
|
+
// Explicitly check |public_key| is non-empty to save the conversion
|
151
|
+
// form later.
|
152
152
|
CBS_len(&public_key) == 0 ||
|
153
153
|
!EC_POINT_oct2point(group, ret->pub_key, CBS_data(&public_key),
|
154
154
|
CBS_len(&public_key), NULL) ||
|
@@ -157,16 +157,17 @@ EC_KEY *EC_KEY_parse_private_key(CBS *cbs, const EC_GROUP *group) {
|
|
157
157
|
goto err;
|
158
158
|
}
|
159
159
|
|
160
|
-
|
161
|
-
|
162
|
-
ret->conv_form =
|
160
|
+
// Save the point conversion form.
|
161
|
+
// TODO(davidben): Consider removing this.
|
162
|
+
ret->conv_form =
|
163
|
+
(point_conversion_form_t)(CBS_data(&public_key)[0] & ~0x01);
|
163
164
|
} else {
|
164
|
-
|
165
|
+
// Compute the public key instead.
|
165
166
|
if (!EC_POINT_mul(group, ret->pub_key, ret->priv_key, NULL, NULL, NULL)) {
|
166
167
|
goto err;
|
167
168
|
}
|
168
|
-
|
169
|
-
|
169
|
+
// Remember the original private-key-only encoding.
|
170
|
+
// TODO(davidben): Consider removing this.
|
170
171
|
ret->enc_flag |= EC_PKEY_NO_PUBKEY;
|
171
172
|
}
|
172
173
|
|
@@ -175,7 +176,7 @@ EC_KEY *EC_KEY_parse_private_key(CBS *cbs, const EC_GROUP *group) {
|
|
175
176
|
goto err;
|
176
177
|
}
|
177
178
|
|
178
|
-
|
179
|
+
// Ensure the resulting key is valid.
|
179
180
|
if (!EC_KEY_check_key(ret)) {
|
180
181
|
goto err;
|
181
182
|
}
|
@@ -217,13 +218,13 @@ int EC_KEY_marshal_private_key(CBB *cbb, const EC_KEY *key,
|
|
217
218
|
}
|
218
219
|
}
|
219
220
|
|
220
|
-
|
221
|
+
// TODO(fork): replace this flexibility with sensible default?
|
221
222
|
if (!(enc_flags & EC_PKEY_NO_PUBKEY) && key->pub_key != NULL) {
|
222
223
|
CBB child, public_key;
|
223
224
|
if (!CBB_add_asn1(&ec_private_key, &child, kPublicKeyTag) ||
|
224
225
|
!CBB_add_asn1(&child, &public_key, CBS_ASN1_BITSTRING) ||
|
225
|
-
|
226
|
-
|
226
|
+
// As in a SubjectPublicKeyInfo, the byte-encoded public key is then
|
227
|
+
// encoded as a BIT STRING with bits ordered as in the DER encoding.
|
227
228
|
!CBB_add_u8(&public_key, 0 /* padding */) ||
|
228
229
|
!EC_POINT_point2cbb(&public_key, key->group, key->pub_key,
|
229
230
|
key->conv_form, NULL) ||
|
@@ -241,8 +242,8 @@ int EC_KEY_marshal_private_key(CBB *cbb, const EC_KEY *key,
|
|
241
242
|
return 1;
|
242
243
|
}
|
243
244
|
|
244
|
-
|
245
|
-
|
245
|
+
// is_unsigned_integer returns one if |cbs| is a valid unsigned DER INTEGER and
|
246
|
+
// zero otherwise.
|
246
247
|
static int is_unsigned_integer(const CBS *cbs) {
|
247
248
|
if (CBS_len(cbs) == 0) {
|
248
249
|
return 0;
|
@@ -250,20 +251,20 @@ static int is_unsigned_integer(const CBS *cbs) {
|
|
250
251
|
uint8_t byte = CBS_data(cbs)[0];
|
251
252
|
if ((byte & 0x80) ||
|
252
253
|
(byte == 0 && CBS_len(cbs) > 1 && (CBS_data(cbs)[1] & 0x80) == 0)) {
|
253
|
-
|
254
|
+
// Negative or not minimally-encoded.
|
254
255
|
return 0;
|
255
256
|
}
|
256
257
|
return 1;
|
257
258
|
}
|
258
259
|
|
259
|
-
|
260
|
+
// kPrimeFieldOID is the encoding of 1.2.840.10045.1.1.
|
260
261
|
static const uint8_t kPrimeField[] = {0x2a, 0x86, 0x48, 0xce, 0x3d, 0x01, 0x01};
|
261
262
|
|
262
263
|
static int parse_explicit_prime_curve(CBS *in, CBS *out_prime, CBS *out_a,
|
263
264
|
CBS *out_b, CBS *out_base_x,
|
264
265
|
CBS *out_base_y, CBS *out_order) {
|
265
|
-
|
266
|
-
|
266
|
+
// See RFC 3279, section 2.3.5. Note that RFC 3279 calls this structure an
|
267
|
+
// ECParameters while RFC 5480 calls it a SpecifiedECDomain.
|
267
268
|
CBS params, field_id, field_type, curve, base;
|
268
269
|
uint64_t version;
|
269
270
|
if (!CBS_get_asn1(in, ¶ms, CBS_ASN1_SEQUENCE) ||
|
@@ -279,7 +280,7 @@ static int parse_explicit_prime_curve(CBS *in, CBS *out_prime, CBS *out_a,
|
|
279
280
|
!CBS_get_asn1(¶ms, &curve, CBS_ASN1_SEQUENCE) ||
|
280
281
|
!CBS_get_asn1(&curve, out_a, CBS_ASN1_OCTETSTRING) ||
|
281
282
|
!CBS_get_asn1(&curve, out_b, CBS_ASN1_OCTETSTRING) ||
|
282
|
-
|
283
|
+
// |curve| has an optional BIT STRING seed which we ignore.
|
283
284
|
!CBS_get_asn1(¶ms, &base, CBS_ASN1_OCTETSTRING) ||
|
284
285
|
!CBS_get_asn1(¶ms, out_order, CBS_ASN1_INTEGER) ||
|
285
286
|
!is_unsigned_integer(out_order)) {
|
@@ -287,11 +288,11 @@ static int parse_explicit_prime_curve(CBS *in, CBS *out_prime, CBS *out_a,
|
|
287
288
|
return 0;
|
288
289
|
}
|
289
290
|
|
290
|
-
|
291
|
-
|
292
|
-
|
291
|
+
// |params| has an optional cofactor which we ignore. With the optional seed
|
292
|
+
// in |curve|, a group already has arbitrarily many encodings. Parse enough to
|
293
|
+
// uniquely determine the curve.
|
293
294
|
|
294
|
-
|
295
|
+
// Require that the base point use uncompressed form.
|
295
296
|
uint8_t form;
|
296
297
|
if (!CBS_get_u8(&base, &form) || form != POINT_CONVERSION_UNCOMPRESSED) {
|
297
298
|
OPENSSL_PUT_ERROR(EC, EC_R_INVALID_FORM);
|
@@ -309,10 +310,10 @@ static int parse_explicit_prime_curve(CBS *in, CBS *out_prime, CBS *out_a,
|
|
309
310
|
return 1;
|
310
311
|
}
|
311
312
|
|
312
|
-
|
313
|
-
|
313
|
+
// integers_equal returns one if |a| and |b| are equal, up to leading zeros, and
|
314
|
+
// zero otherwise.
|
314
315
|
static int integers_equal(const CBS *a, const uint8_t *b, size_t b_len) {
|
315
|
-
|
316
|
+
// Remove leading zeros from |a| and |b|.
|
316
317
|
CBS a_copy = *a;
|
317
318
|
while (CBS_len(&a_copy) > 0 && CBS_data(&a_copy)[0] == 0) {
|
318
319
|
CBS_skip(&a_copy, 1);
|
@@ -331,12 +332,13 @@ EC_GROUP *EC_KEY_parse_curve_name(CBS *cbs) {
|
|
331
332
|
return NULL;
|
332
333
|
}
|
333
334
|
|
334
|
-
|
335
|
-
|
336
|
-
for (i = 0;
|
337
|
-
const struct built_in_curve *curve = &
|
335
|
+
// Look for a matching curve.
|
336
|
+
const struct built_in_curves *const curves = OPENSSL_built_in_curves();
|
337
|
+
for (size_t i = 0; i < OPENSSL_NUM_BUILT_IN_CURVES; i++) {
|
338
|
+
const struct built_in_curve *curve = &curves->curves[i];
|
338
339
|
if (CBS_len(&named_curve) == curve->oid_len &&
|
339
|
-
OPENSSL_memcmp(CBS_data(&named_curve), curve->oid, curve->oid_len) ==
|
340
|
+
OPENSSL_memcmp(CBS_data(&named_curve), curve->oid, curve->oid_len) ==
|
341
|
+
0) {
|
340
342
|
return EC_GROUP_new_by_curve_name(curve->nid);
|
341
343
|
}
|
342
344
|
}
|
@@ -352,9 +354,9 @@ int EC_KEY_marshal_curve_name(CBB *cbb, const EC_GROUP *group) {
|
|
352
354
|
return 0;
|
353
355
|
}
|
354
356
|
|
355
|
-
|
356
|
-
for (i = 0;
|
357
|
-
const struct built_in_curve *curve = &
|
357
|
+
const struct built_in_curves *const curves = OPENSSL_built_in_curves();
|
358
|
+
for (size_t i = 0; i < OPENSSL_NUM_BUILT_IN_CURVES; i++) {
|
359
|
+
const struct built_in_curve *curve = &curves->curves[i];
|
358
360
|
if (curve->nid == nid) {
|
359
361
|
CBB child;
|
360
362
|
return CBB_add_asn1(cbb, &child, CBS_ASN1_OBJECT) &&
|
@@ -372,32 +374,32 @@ EC_GROUP *EC_KEY_parse_parameters(CBS *cbs) {
|
|
372
374
|
return EC_KEY_parse_curve_name(cbs);
|
373
375
|
}
|
374
376
|
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
377
|
+
// OpenSSL sometimes produces ECPrivateKeys with explicitly-encoded versions
|
378
|
+
// of named curves.
|
379
|
+
//
|
380
|
+
// TODO(davidben): Remove support for this.
|
379
381
|
CBS prime, a, b, base_x, base_y, order;
|
380
382
|
if (!parse_explicit_prime_curve(cbs, &prime, &a, &b, &base_x, &base_y,
|
381
383
|
&order)) {
|
382
384
|
return NULL;
|
383
385
|
}
|
384
386
|
|
385
|
-
|
386
|
-
|
387
|
-
for (i = 0;
|
388
|
-
const struct built_in_curve *curve = &
|
389
|
-
const unsigned param_len = curve->
|
390
|
-
|
391
|
-
|
392
|
-
|
393
|
-
|
394
|
-
|
395
|
-
if (integers_equal(&prime, curve->
|
396
|
-
integers_equal(&a, curve->
|
397
|
-
integers_equal(&b, curve->
|
398
|
-
integers_equal(&base_x, curve->
|
399
|
-
integers_equal(&base_y, curve->
|
400
|
-
integers_equal(&order, curve->
|
387
|
+
// Look for a matching prime curve.
|
388
|
+
const struct built_in_curves *const curves = OPENSSL_built_in_curves();
|
389
|
+
for (size_t i = 0; i < OPENSSL_NUM_BUILT_IN_CURVES; i++) {
|
390
|
+
const struct built_in_curve *curve = &curves->curves[i];
|
391
|
+
const unsigned param_len = curve->param_len;
|
392
|
+
// |curve->params| is ordered p, a, b, x, y, order, each component
|
393
|
+
// zero-padded up to the field length. Although SEC 1 states that the
|
394
|
+
// Field-Element-to-Octet-String conversion also pads, OpenSSL mis-encodes
|
395
|
+
// |a| and |b|, so this comparison must allow omitting leading zeros. (This
|
396
|
+
// is relevant for P-521 whose |b| has a leading 0.)
|
397
|
+
if (integers_equal(&prime, curve->params, param_len) &&
|
398
|
+
integers_equal(&a, curve->params + param_len, param_len) &&
|
399
|
+
integers_equal(&b, curve->params + param_len * 2, param_len) &&
|
400
|
+
integers_equal(&base_x, curve->params + param_len * 3, param_len) &&
|
401
|
+
integers_equal(&base_y, curve->params + param_len * 4, param_len) &&
|
402
|
+
integers_equal(&order, curve->params + param_len * 5, param_len)) {
|
401
403
|
return EC_GROUP_new_by_curve_name(curve->nid);
|
402
404
|
}
|
403
405
|
}
|
@@ -406,9 +408,20 @@ EC_GROUP *EC_KEY_parse_parameters(CBS *cbs) {
|
|
406
408
|
return NULL;
|
407
409
|
}
|
408
410
|
|
411
|
+
int EC_POINT_point2cbb(CBB *out, const EC_GROUP *group, const EC_POINT *point,
|
412
|
+
point_conversion_form_t form, BN_CTX *ctx) {
|
413
|
+
size_t len = EC_POINT_point2oct(group, point, form, NULL, 0, ctx);
|
414
|
+
if (len == 0) {
|
415
|
+
return 0;
|
416
|
+
}
|
417
|
+
uint8_t *p;
|
418
|
+
return CBB_add_space(out, &p, len) &&
|
419
|
+
EC_POINT_point2oct(group, point, form, p, len, ctx) == len;
|
420
|
+
}
|
421
|
+
|
409
422
|
EC_KEY *d2i_ECPrivateKey(EC_KEY **out, const uint8_t **inp, long len) {
|
410
|
-
|
411
|
-
|
423
|
+
// This function treats its |out| parameter differently from other |d2i|
|
424
|
+
// functions. If supplied, take the group from |*out|.
|
412
425
|
const EC_GROUP *group = NULL;
|
413
426
|
if (out != NULL && *out != NULL) {
|
414
427
|
group = EC_KEY_get0_group(*out);
|
@@ -502,7 +515,7 @@ EC_KEY *o2i_ECPublicKey(EC_KEY **keyp, const uint8_t **inp, long len) {
|
|
502
515
|
OPENSSL_PUT_ERROR(EC, ERR_R_EC_LIB);
|
503
516
|
return NULL;
|
504
517
|
}
|
505
|
-
|
518
|
+
// save the point conversion form
|
506
519
|
ret->conv_form = (point_conversion_form_t)(*inp[0] & ~0x01);
|
507
520
|
*inp += len;
|
508
521
|
return ret;
|
@@ -521,7 +534,7 @@ int i2o_ECPublicKey(const EC_KEY *key, uint8_t **outp) {
|
|
521
534
|
0, NULL);
|
522
535
|
|
523
536
|
if (outp == NULL || buf_len == 0) {
|
524
|
-
|
537
|
+
// out == NULL => just return the length of the octet string
|
525
538
|
return buf_len;
|
526
539
|
}
|
527
540
|
|
@@ -62,7 +62,86 @@
|
|
62
62
|
#include <openssl/mem.h>
|
63
63
|
|
64
64
|
#include "../bytestring/internal.h"
|
65
|
-
#include "../ec/internal.h"
|
65
|
+
#include "../fipsmodule/ec/internal.h"
|
66
|
+
#include "../internal.h"
|
67
|
+
|
68
|
+
|
69
|
+
int ECDSA_sign(int type, const uint8_t *digest, size_t digest_len, uint8_t *sig,
|
70
|
+
unsigned int *sig_len, const EC_KEY *eckey) {
|
71
|
+
if (eckey->ecdsa_meth && eckey->ecdsa_meth->sign) {
|
72
|
+
return eckey->ecdsa_meth->sign(digest, digest_len, sig, sig_len,
|
73
|
+
(EC_KEY*) eckey /* cast away const */);
|
74
|
+
}
|
75
|
+
|
76
|
+
return ECDSA_sign_ex(type, digest, digest_len, sig, sig_len, NULL, NULL,
|
77
|
+
eckey);
|
78
|
+
}
|
79
|
+
|
80
|
+
int ECDSA_sign_ex(int type, const uint8_t *digest, size_t digest_len,
|
81
|
+
uint8_t *sig, unsigned int *sig_len, const BIGNUM *kinv,
|
82
|
+
const BIGNUM *r, const EC_KEY *eckey) {
|
83
|
+
int ret = 0;
|
84
|
+
ECDSA_SIG *s = NULL;
|
85
|
+
|
86
|
+
if (eckey->ecdsa_meth && eckey->ecdsa_meth->sign) {
|
87
|
+
OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_NOT_IMPLEMENTED);
|
88
|
+
*sig_len = 0;
|
89
|
+
goto err;
|
90
|
+
}
|
91
|
+
|
92
|
+
s = ECDSA_do_sign_ex(digest, digest_len, kinv, r, eckey);
|
93
|
+
if (s == NULL) {
|
94
|
+
*sig_len = 0;
|
95
|
+
goto err;
|
96
|
+
}
|
97
|
+
|
98
|
+
CBB cbb;
|
99
|
+
CBB_zero(&cbb);
|
100
|
+
size_t len;
|
101
|
+
if (!CBB_init_fixed(&cbb, sig, ECDSA_size(eckey)) ||
|
102
|
+
!ECDSA_SIG_marshal(&cbb, s) ||
|
103
|
+
!CBB_finish(&cbb, NULL, &len)) {
|
104
|
+
OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_ENCODE_ERROR);
|
105
|
+
CBB_cleanup(&cbb);
|
106
|
+
*sig_len = 0;
|
107
|
+
goto err;
|
108
|
+
}
|
109
|
+
*sig_len = (unsigned)len;
|
110
|
+
ret = 1;
|
111
|
+
|
112
|
+
err:
|
113
|
+
ECDSA_SIG_free(s);
|
114
|
+
return ret;
|
115
|
+
}
|
116
|
+
|
117
|
+
int ECDSA_verify(int type, const uint8_t *digest, size_t digest_len,
|
118
|
+
const uint8_t *sig, size_t sig_len, const EC_KEY *eckey) {
|
119
|
+
ECDSA_SIG *s;
|
120
|
+
int ret = 0;
|
121
|
+
uint8_t *der = NULL;
|
122
|
+
|
123
|
+
// Decode the ECDSA signature.
|
124
|
+
s = ECDSA_SIG_from_bytes(sig, sig_len);
|
125
|
+
if (s == NULL) {
|
126
|
+
goto err;
|
127
|
+
}
|
128
|
+
|
129
|
+
// Defend against potential laxness in the DER parser.
|
130
|
+
size_t der_len;
|
131
|
+
if (!ECDSA_SIG_to_bytes(&der, &der_len, s) ||
|
132
|
+
der_len != sig_len || OPENSSL_memcmp(sig, der, sig_len) != 0) {
|
133
|
+
// This should never happen. crypto/bytestring is strictly DER.
|
134
|
+
OPENSSL_PUT_ERROR(ECDSA, ERR_R_INTERNAL_ERROR);
|
135
|
+
goto err;
|
136
|
+
}
|
137
|
+
|
138
|
+
ret = ECDSA_do_verify(digest, digest_len, s, eckey);
|
139
|
+
|
140
|
+
err:
|
141
|
+
OPENSSL_free(der);
|
142
|
+
ECDSA_SIG_free(s);
|
143
|
+
return ret;
|
144
|
+
}
|
66
145
|
|
67
146
|
|
68
147
|
size_t ECDSA_size(const EC_KEY *key) {
|
@@ -85,30 +164,6 @@ size_t ECDSA_size(const EC_KEY *key) {
|
|
85
164
|
return ECDSA_SIG_max_len(group_order_size);
|
86
165
|
}
|
87
166
|
|
88
|
-
ECDSA_SIG *ECDSA_SIG_new(void) {
|
89
|
-
ECDSA_SIG *sig = OPENSSL_malloc(sizeof(ECDSA_SIG));
|
90
|
-
if (sig == NULL) {
|
91
|
-
return NULL;
|
92
|
-
}
|
93
|
-
sig->r = BN_new();
|
94
|
-
sig->s = BN_new();
|
95
|
-
if (sig->r == NULL || sig->s == NULL) {
|
96
|
-
ECDSA_SIG_free(sig);
|
97
|
-
return NULL;
|
98
|
-
}
|
99
|
-
return sig;
|
100
|
-
}
|
101
|
-
|
102
|
-
void ECDSA_SIG_free(ECDSA_SIG *sig) {
|
103
|
-
if (sig == NULL) {
|
104
|
-
return;
|
105
|
-
}
|
106
|
-
|
107
|
-
BN_free(sig->r);
|
108
|
-
BN_free(sig->s);
|
109
|
-
OPENSSL_free(sig);
|
110
|
-
}
|
111
|
-
|
112
167
|
ECDSA_SIG *ECDSA_SIG_parse(CBS *cbs) {
|
113
168
|
ECDSA_SIG *ret = ECDSA_SIG_new();
|
114
169
|
if (ret == NULL) {
|
@@ -164,8 +219,8 @@ int ECDSA_SIG_to_bytes(uint8_t **out_bytes, size_t *out_len,
|
|
164
219
|
return 1;
|
165
220
|
}
|
166
221
|
|
167
|
-
|
168
|
-
|
222
|
+
// der_len_len returns the number of bytes needed to represent a length of |len|
|
223
|
+
// in DER.
|
169
224
|
static size_t der_len_len(size_t len) {
|
170
225
|
if (len < 0x80) {
|
171
226
|
return 1;
|
@@ -179,18 +234,18 @@ static size_t der_len_len(size_t len) {
|
|
179
234
|
}
|
180
235
|
|
181
236
|
size_t ECDSA_SIG_max_len(size_t order_len) {
|
182
|
-
|
183
|
-
|
237
|
+
// Compute the maximum length of an |order_len| byte integer. Defensively
|
238
|
+
// assume that the leading 0x00 is included.
|
184
239
|
size_t integer_len = 1 /* tag */ + der_len_len(order_len + 1) + 1 + order_len;
|
185
240
|
if (integer_len < order_len) {
|
186
241
|
return 0;
|
187
242
|
}
|
188
|
-
|
243
|
+
// An ECDSA signature is two INTEGERs.
|
189
244
|
size_t value_len = 2 * integer_len;
|
190
245
|
if (value_len < integer_len) {
|
191
246
|
return 0;
|
192
247
|
}
|
193
|
-
|
248
|
+
// Add the header.
|
194
249
|
size_t ret = 1 /* tag */ + der_len_len(value_len) + value_len;
|
195
250
|
if (ret < value_len) {
|
196
251
|
return 0;
|