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
@@ -1,4 +1,4 @@
|
|
1
|
-
/* Copyright (c)
|
1
|
+
/* Copyright (c) 2017, Google Inc.
|
2
2
|
*
|
3
3
|
* Permission to use, copy, modify, and/or distribute this software for any
|
4
4
|
* purpose with or without fee is hereby granted, provided that the above
|
@@ -12,7 +12,7 @@
|
|
12
12
|
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
13
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
14
|
|
15
|
-
#include <openssl/
|
15
|
+
#include <openssl/pkcs7.h>
|
16
16
|
|
17
17
|
#include <assert.h>
|
18
18
|
#include <limits.h>
|
@@ -20,113 +20,28 @@
|
|
20
20
|
#include <openssl/bytestring.h>
|
21
21
|
#include <openssl/err.h>
|
22
22
|
#include <openssl/mem.h>
|
23
|
-
#include <openssl/obj.h>
|
24
23
|
#include <openssl/pem.h>
|
24
|
+
#include <openssl/pool.h>
|
25
25
|
#include <openssl/stack.h>
|
26
|
+
#include <openssl/x509.h>
|
26
27
|
|
27
|
-
#include "
|
28
|
-
|
29
|
-
|
30
|
-
/* pkcs7_parse_header reads the non-certificate/non-CRL prefix of a PKCS#7
|
31
|
-
* SignedData blob from |cbs| and sets |*out| to point to the rest of the
|
32
|
-
* input. If the input is in BER format, then |*der_bytes| will be set to a
|
33
|
-
* pointer that needs to be freed by the caller once they have finished
|
34
|
-
* processing |*out| (which will be pointing into |*der_bytes|).
|
35
|
-
*
|
36
|
-
* It returns one on success or zero on error. On error, |*der_bytes| is
|
37
|
-
* NULL. */
|
38
|
-
static int pkcs7_parse_header(uint8_t **der_bytes, CBS *out, CBS *cbs) {
|
39
|
-
size_t der_len;
|
40
|
-
CBS in, content_info, content_type, wrapped_signed_data, signed_data;
|
41
|
-
uint64_t version;
|
42
|
-
|
43
|
-
/* The input may be in BER format. */
|
44
|
-
*der_bytes = NULL;
|
45
|
-
if (!CBS_asn1_ber_to_der(cbs, der_bytes, &der_len)) {
|
46
|
-
return 0;
|
47
|
-
}
|
48
|
-
if (*der_bytes != NULL) {
|
49
|
-
CBS_init(&in, *der_bytes, der_len);
|
50
|
-
} else {
|
51
|
-
CBS_init(&in, CBS_data(cbs), CBS_len(cbs));
|
52
|
-
}
|
53
|
-
|
54
|
-
/* See https://tools.ietf.org/html/rfc2315#section-7 */
|
55
|
-
if (!CBS_get_asn1(&in, &content_info, CBS_ASN1_SEQUENCE) ||
|
56
|
-
!CBS_get_asn1(&content_info, &content_type, CBS_ASN1_OBJECT)) {
|
57
|
-
goto err;
|
58
|
-
}
|
59
|
-
|
60
|
-
if (OBJ_cbs2nid(&content_type) != NID_pkcs7_signed) {
|
61
|
-
OPENSSL_PUT_ERROR(X509, X509_R_NOT_PKCS7_SIGNED_DATA);
|
62
|
-
goto err;
|
63
|
-
}
|
64
|
-
|
65
|
-
/* See https://tools.ietf.org/html/rfc2315#section-9.1 */
|
66
|
-
if (!CBS_get_asn1(&content_info, &wrapped_signed_data,
|
67
|
-
CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) ||
|
68
|
-
!CBS_get_asn1(&wrapped_signed_data, &signed_data, CBS_ASN1_SEQUENCE) ||
|
69
|
-
!CBS_get_asn1_uint64(&signed_data, &version) ||
|
70
|
-
!CBS_get_asn1(&signed_data, NULL /* digests */, CBS_ASN1_SET) ||
|
71
|
-
!CBS_get_asn1(&signed_data, NULL /* content */, CBS_ASN1_SEQUENCE)) {
|
72
|
-
goto err;
|
73
|
-
}
|
74
|
-
|
75
|
-
if (version < 1) {
|
76
|
-
OPENSSL_PUT_ERROR(X509, X509_R_BAD_PKCS7_VERSION);
|
77
|
-
goto err;
|
78
|
-
}
|
79
|
-
|
80
|
-
CBS_init(out, CBS_data(&signed_data), CBS_len(&signed_data));
|
81
|
-
return 1;
|
82
|
-
|
83
|
-
err:
|
84
|
-
if (*der_bytes) {
|
85
|
-
OPENSSL_free(*der_bytes);
|
86
|
-
*der_bytes = NULL;
|
87
|
-
}
|
28
|
+
#include "internal.h"
|
88
29
|
|
89
|
-
return 0;
|
90
|
-
}
|
91
30
|
|
92
31
|
int PKCS7_get_certificates(STACK_OF(X509) *out_certs, CBS *cbs) {
|
93
|
-
CBS signed_data, certificates;
|
94
|
-
uint8_t *der_bytes = NULL;
|
95
32
|
int ret = 0;
|
96
33
|
const size_t initial_certs_len = sk_X509_num(out_certs);
|
97
|
-
|
98
|
-
if (
|
99
|
-
|
100
|
-
}
|
101
|
-
|
102
|
-
/* See https://tools.ietf.org/html/rfc2315#section-9.1 */
|
103
|
-
if (!CBS_get_asn1(&signed_data, &certificates,
|
104
|
-
CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0)) {
|
105
|
-
OPENSSL_PUT_ERROR(X509, X509_R_NO_CERTIFICATES_INCLUDED);
|
34
|
+
STACK_OF(CRYPTO_BUFFER) *raw = sk_CRYPTO_BUFFER_new_null();
|
35
|
+
if (raw == NULL ||
|
36
|
+
!PKCS7_get_raw_certificates(raw, cbs, NULL)) {
|
106
37
|
goto err;
|
107
38
|
}
|
108
39
|
|
109
|
-
|
110
|
-
|
111
|
-
X509 *x509;
|
112
|
-
|
113
|
-
|
114
|
-
if (!CBS_get_asn1_element(&certificates, &cert, CBS_ASN1_SEQUENCE)) {
|
115
|
-
goto err;
|
116
|
-
}
|
117
|
-
|
118
|
-
if (CBS_len(&cert) > LONG_MAX) {
|
119
|
-
goto err;
|
120
|
-
}
|
121
|
-
inp = CBS_data(&cert);
|
122
|
-
x509 = d2i_X509(NULL, &inp, (long)CBS_len(&cert));
|
123
|
-
if (!x509) {
|
124
|
-
goto err;
|
125
|
-
}
|
126
|
-
|
127
|
-
assert(inp == CBS_data(&cert) + CBS_len(&cert));
|
128
|
-
|
129
|
-
if (sk_X509_push(out_certs, x509) == 0) {
|
40
|
+
for (size_t i = 0; i < sk_CRYPTO_BUFFER_num(raw); i++) {
|
41
|
+
CRYPTO_BUFFER *buf = sk_CRYPTO_BUFFER_value(raw, i);
|
42
|
+
X509 *x509 = X509_parse_from_buffer(buf);
|
43
|
+
if (x509 == NULL ||
|
44
|
+
!sk_X509_push(out_certs, x509)) {
|
130
45
|
X509_free(x509);
|
131
46
|
goto err;
|
132
47
|
}
|
@@ -135,10 +50,7 @@ int PKCS7_get_certificates(STACK_OF(X509) *out_certs, CBS *cbs) {
|
|
135
50
|
ret = 1;
|
136
51
|
|
137
52
|
err:
|
138
|
-
|
139
|
-
OPENSSL_free(der_bytes);
|
140
|
-
}
|
141
|
-
|
53
|
+
sk_CRYPTO_BUFFER_pop_free(raw, CRYPTO_BUFFER_free);
|
142
54
|
if (!ret) {
|
143
55
|
while (sk_X509_num(out_certs) != initial_certs_len) {
|
144
56
|
X509 *x509 = sk_X509_pop(out_certs);
|
@@ -159,10 +71,10 @@ int PKCS7_get_CRLs(STACK_OF(X509_CRL) *out_crls, CBS *cbs) {
|
|
159
71
|
return 0;
|
160
72
|
}
|
161
73
|
|
162
|
-
|
74
|
+
// See https://tools.ietf.org/html/rfc2315#section-9.1
|
163
75
|
|
164
|
-
|
165
|
-
|
76
|
+
// Even if only CRLs are included, there may be an empty certificates block.
|
77
|
+
// OpenSSL does this, for example.
|
166
78
|
if (CBS_peek_asn1_tag(&signed_data,
|
167
79
|
CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) &&
|
168
80
|
!CBS_get_asn1(&signed_data, NULL /* certificates */,
|
@@ -172,7 +84,7 @@ int PKCS7_get_CRLs(STACK_OF(X509_CRL) *out_crls, CBS *cbs) {
|
|
172
84
|
|
173
85
|
if (!CBS_get_asn1(&signed_data, &crls,
|
174
86
|
CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 1)) {
|
175
|
-
OPENSSL_PUT_ERROR(
|
87
|
+
OPENSSL_PUT_ERROR(PKCS7, PKCS7_R_NO_CRLS_INCLUDED);
|
176
88
|
goto err;
|
177
89
|
}
|
178
90
|
|
@@ -205,9 +117,7 @@ int PKCS7_get_CRLs(STACK_OF(X509_CRL) *out_crls, CBS *cbs) {
|
|
205
117
|
ret = 1;
|
206
118
|
|
207
119
|
err:
|
208
|
-
|
209
|
-
OPENSSL_free(der_bytes);
|
210
|
-
}
|
120
|
+
OPENSSL_free(der_bytes);
|
211
121
|
|
212
122
|
if (!ret) {
|
213
123
|
while (sk_X509_CRL_num(out_crls) != initial_crls_len) {
|
@@ -223,9 +133,9 @@ int PKCS7_get_PEM_certificates(STACK_OF(X509) *out_certs, BIO *pem_bio) {
|
|
223
133
|
long len;
|
224
134
|
int ret;
|
225
135
|
|
226
|
-
|
227
|
-
|
228
|
-
|
136
|
+
// Even though we pass PEM_STRING_PKCS7 as the expected PEM type here, PEM
|
137
|
+
// internally will actually allow several other values too, including
|
138
|
+
// "CERTIFICATE".
|
229
139
|
if (!PEM_bytes_read_bio(&data, &len, NULL /* PEM type output */,
|
230
140
|
PEM_STRING_PKCS7, pem_bio,
|
231
141
|
NULL /* password callback */,
|
@@ -245,9 +155,9 @@ int PKCS7_get_PEM_CRLs(STACK_OF(X509_CRL) *out_crls, BIO *pem_bio) {
|
|
245
155
|
long len;
|
246
156
|
int ret;
|
247
157
|
|
248
|
-
|
249
|
-
|
250
|
-
|
158
|
+
// Even though we pass PEM_STRING_PKCS7 as the expected PEM type here, PEM
|
159
|
+
// internally will actually allow several other values too, including
|
160
|
+
// "CERTIFICATE".
|
251
161
|
if (!PEM_bytes_read_bio(&data, &len, NULL /* PEM type output */,
|
252
162
|
PEM_STRING_PKCS7, pem_bio,
|
253
163
|
NULL /* password callback */,
|
@@ -262,42 +172,12 @@ int PKCS7_get_PEM_CRLs(STACK_OF(X509_CRL) *out_crls, BIO *pem_bio) {
|
|
262
172
|
return ret;
|
263
173
|
}
|
264
174
|
|
265
|
-
/* pkcs7_bundle writes a PKCS#7, SignedData structure to |out| and then calls
|
266
|
-
* |cb| with a CBB to which certificate or CRL data can be written, and the
|
267
|
-
* opaque context pointer, |arg|. The callback can return zero to indicate an
|
268
|
-
* error.
|
269
|
-
*
|
270
|
-
* pkcs7_bundle returns one on success or zero on error. */
|
271
|
-
static int pkcs7_bundle(CBB *out, int (*cb)(CBB *out, const void *arg),
|
272
|
-
const void *arg) {
|
273
|
-
CBB outer_seq, wrapped_seq, seq, version_bytes, digest_algos_set,
|
274
|
-
content_info;
|
275
|
-
|
276
|
-
/* See https://tools.ietf.org/html/rfc2315#section-7 */
|
277
|
-
if (!CBB_add_asn1(out, &outer_seq, CBS_ASN1_SEQUENCE) ||
|
278
|
-
!OBJ_nid2cbb(&outer_seq, NID_pkcs7_signed) ||
|
279
|
-
!CBB_add_asn1(&outer_seq, &wrapped_seq,
|
280
|
-
CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0) ||
|
281
|
-
/* See https://tools.ietf.org/html/rfc2315#section-9.1 */
|
282
|
-
!CBB_add_asn1(&wrapped_seq, &seq, CBS_ASN1_SEQUENCE) ||
|
283
|
-
!CBB_add_asn1(&seq, &version_bytes, CBS_ASN1_INTEGER) ||
|
284
|
-
!CBB_add_u8(&version_bytes, 1) ||
|
285
|
-
!CBB_add_asn1(&seq, &digest_algos_set, CBS_ASN1_SET) ||
|
286
|
-
!CBB_add_asn1(&seq, &content_info, CBS_ASN1_SEQUENCE) ||
|
287
|
-
!OBJ_nid2cbb(&content_info, NID_pkcs7_data) ||
|
288
|
-
!cb(&seq, arg)) {
|
289
|
-
return 0;
|
290
|
-
}
|
291
|
-
|
292
|
-
return CBB_flush(out);
|
293
|
-
}
|
294
|
-
|
295
175
|
static int pkcs7_bundle_certificates_cb(CBB *out, const void *arg) {
|
296
176
|
const STACK_OF(X509) *certs = arg;
|
297
177
|
size_t i;
|
298
178
|
CBB certificates;
|
299
179
|
|
300
|
-
|
180
|
+
// See https://tools.ietf.org/html/rfc2315#section-9.1
|
301
181
|
if (!CBB_add_asn1(out, &certificates,
|
302
182
|
CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 0)) {
|
303
183
|
return 0;
|
@@ -327,7 +207,7 @@ static int pkcs7_bundle_crls_cb(CBB *out, const void *arg) {
|
|
327
207
|
size_t i;
|
328
208
|
CBB crl_data;
|
329
209
|
|
330
|
-
|
210
|
+
// See https://tools.ietf.org/html/rfc2315#section-9.1
|
331
211
|
if (!CBB_add_asn1(out, &crl_data,
|
332
212
|
CBS_ASN1_CONTEXT_SPECIFIC | CBS_ASN1_CONSTRUCTED | 1)) {
|
333
213
|
return 0;
|
@@ -63,40 +63,58 @@ extern "C" {
|
|
63
63
|
#endif
|
64
64
|
|
65
65
|
|
66
|
-
|
66
|
+
// pkcs8_pbe_decrypt decrypts |in| using the PBE scheme described by
|
67
|
+
// |algorithm|, which should be a serialized AlgorithmIdentifier structure. On
|
68
|
+
// success, it sets |*out| to a newly-allocated buffer containing the decrypted
|
69
|
+
// result and returns one. Otherwise, it returns zero.
|
70
|
+
int pkcs8_pbe_decrypt(uint8_t **out, size_t *out_len, CBS *algorithm,
|
71
|
+
const char *pass, size_t pass_len, const uint8_t *in,
|
72
|
+
size_t in_len);
|
73
|
+
|
74
|
+
#define PKCS12_KEY_ID 1
|
75
|
+
#define PKCS12_IV_ID 2
|
76
|
+
#define PKCS12_MAC_ID 3
|
77
|
+
|
78
|
+
// pkcs12_key_gen runs the PKCS#12 key derivation function as specified in
|
79
|
+
// RFC 7292, appendix B. On success, it writes the resulting |out_len| bytes of
|
80
|
+
// key material to |out| and returns one. Otherwise, it returns zero. |id|
|
81
|
+
// should be one of the |PKCS12_*_ID| values.
|
82
|
+
int pkcs12_key_gen(const char *pass, size_t pass_len, const uint8_t *salt,
|
83
|
+
size_t salt_len, uint8_t id, unsigned iterations,
|
84
|
+
size_t out_len, uint8_t *out, const EVP_MD *md);
|
67
85
|
|
68
86
|
struct pbe_suite {
|
69
87
|
int pbe_nid;
|
88
|
+
uint8_t oid[10];
|
89
|
+
uint8_t oid_len;
|
70
90
|
const EVP_CIPHER *(*cipher_func)(void);
|
71
91
|
const EVP_MD *(*md_func)(void);
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
92
|
+
// decrypt_init initialize |ctx| for decrypting. The password is specified by
|
93
|
+
// |pass| and |pass_len|. |param| contains the serialized parameters field of
|
94
|
+
// the AlgorithmIdentifier.
|
95
|
+
//
|
96
|
+
// It returns one on success and zero on error.
|
77
97
|
int (*decrypt_init)(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
|
78
|
-
const
|
79
|
-
int flags;
|
98
|
+
const char *pass, size_t pass_len, CBS *param);
|
80
99
|
};
|
81
100
|
|
82
101
|
#define PKCS5_DEFAULT_ITERATIONS 2048
|
83
102
|
#define PKCS5_SALT_LEN 8
|
84
103
|
|
85
104
|
int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
|
86
|
-
const
|
87
|
-
CBS *param);
|
105
|
+
const char *pass, size_t pass_len, CBS *param);
|
88
106
|
|
89
|
-
|
90
|
-
|
91
|
-
|
107
|
+
// PKCS5_pbe2_encrypt_init configures |ctx| for encrypting with PKCS #5 PBES2,
|
108
|
+
// as defined in RFC 2998, with the specified parameters. It writes the
|
109
|
+
// corresponding AlgorithmIdentifier to |out|.
|
92
110
|
int PKCS5_pbe2_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx,
|
93
111
|
const EVP_CIPHER *cipher, unsigned iterations,
|
94
|
-
const
|
112
|
+
const char *pass, size_t pass_len,
|
95
113
|
const uint8_t *salt, size_t salt_len);
|
96
114
|
|
97
115
|
|
98
116
|
#if defined(__cplusplus)
|
99
|
-
}
|
117
|
+
} // extern C
|
100
118
|
#endif
|
101
119
|
|
102
|
-
#endif
|
120
|
+
#endif // OPENSSL_HEADER_PKCS8_INTERNAL_H
|
@@ -62,16 +62,86 @@
|
|
62
62
|
#include <openssl/cipher.h>
|
63
63
|
#include <openssl/err.h>
|
64
64
|
#include <openssl/mem.h>
|
65
|
-
#include <openssl/
|
65
|
+
#include <openssl/nid.h>
|
66
66
|
#include <openssl/rand.h>
|
67
67
|
|
68
68
|
#include "internal.h"
|
69
69
|
#include "../internal.h"
|
70
70
|
|
71
71
|
|
72
|
+
// 1.2.840.113549.1.5.12
|
73
|
+
static const uint8_t kPBKDF2[] = {0x2a, 0x86, 0x48, 0x86, 0xf7,
|
74
|
+
0x0d, 0x01, 0x05, 0x0c};
|
75
|
+
|
76
|
+
// 1.2.840.113549.1.5.13
|
77
|
+
static const uint8_t kPBES2[] = {0x2a, 0x86, 0x48, 0x86, 0xf7,
|
78
|
+
0x0d, 0x01, 0x05, 0x0d};
|
79
|
+
|
80
|
+
// 1.2.840.113549.2.7
|
81
|
+
static const uint8_t kHMACWithSHA1[] = {0x2a, 0x86, 0x48, 0x86,
|
82
|
+
0xf7, 0x0d, 0x02, 0x07};
|
83
|
+
|
84
|
+
static const struct {
|
85
|
+
uint8_t oid[9];
|
86
|
+
uint8_t oid_len;
|
87
|
+
int nid;
|
88
|
+
const EVP_CIPHER *(*cipher_func)(void);
|
89
|
+
} kCipherOIDs[] = {
|
90
|
+
// 1.2.840.113549.3.2
|
91
|
+
{{0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x03, 0x02},
|
92
|
+
8,
|
93
|
+
NID_rc2_cbc,
|
94
|
+
&EVP_rc2_cbc},
|
95
|
+
// 1.2.840.113549.3.7
|
96
|
+
{{0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x03, 0x07},
|
97
|
+
8,
|
98
|
+
NID_des_ede3_cbc,
|
99
|
+
&EVP_des_ede3_cbc},
|
100
|
+
// 2.16.840.1.101.3.4.1.2
|
101
|
+
{{0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x01, 0x02},
|
102
|
+
9,
|
103
|
+
NID_aes_128_cbc,
|
104
|
+
&EVP_aes_128_cbc},
|
105
|
+
// 2.16.840.1.101.3.4.1.22
|
106
|
+
{{0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x01, 0x16},
|
107
|
+
9,
|
108
|
+
NID_aes_192_cbc,
|
109
|
+
&EVP_aes_192_cbc},
|
110
|
+
// 2.16.840.1.101.3.4.1.42
|
111
|
+
{{0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x01, 0x2a},
|
112
|
+
9,
|
113
|
+
NID_aes_256_cbc,
|
114
|
+
&EVP_aes_256_cbc},
|
115
|
+
};
|
116
|
+
|
117
|
+
static const EVP_CIPHER *cbs_to_cipher(const CBS *cbs) {
|
118
|
+
for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kCipherOIDs); i++) {
|
119
|
+
if (CBS_mem_equal(cbs, kCipherOIDs[i].oid, kCipherOIDs[i].oid_len)) {
|
120
|
+
return kCipherOIDs[i].cipher_func();
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
124
|
+
return NULL;
|
125
|
+
}
|
126
|
+
|
127
|
+
static int add_cipher_oid(CBB *out, int nid) {
|
128
|
+
for (size_t i = 0; i < OPENSSL_ARRAY_SIZE(kCipherOIDs); i++) {
|
129
|
+
if (kCipherOIDs[i].nid == nid) {
|
130
|
+
CBB child;
|
131
|
+
return CBB_add_asn1(out, &child, CBS_ASN1_OBJECT) &&
|
132
|
+
CBB_add_bytes(&child, kCipherOIDs[i].oid,
|
133
|
+
kCipherOIDs[i].oid_len) &&
|
134
|
+
CBB_flush(out);
|
135
|
+
}
|
136
|
+
}
|
137
|
+
|
138
|
+
OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNSUPPORTED_CIPHER);
|
139
|
+
return 0;
|
140
|
+
}
|
141
|
+
|
72
142
|
static int pkcs5_pbe2_cipher_init(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
|
73
|
-
unsigned iterations, const
|
74
|
-
size_t
|
143
|
+
unsigned iterations, const char *pass,
|
144
|
+
size_t pass_len, const uint8_t *salt,
|
75
145
|
size_t salt_len, const uint8_t *iv,
|
76
146
|
size_t iv_len, int enc) {
|
77
147
|
if (iv_len != EVP_CIPHER_iv_length(cipher)) {
|
@@ -80,8 +150,7 @@ static int pkcs5_pbe2_cipher_init(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
|
|
80
150
|
}
|
81
151
|
|
82
152
|
uint8_t key[EVP_MAX_KEY_LENGTH];
|
83
|
-
int ret = PKCS5_PBKDF2_HMAC_SHA1(
|
84
|
-
salt_len, iterations,
|
153
|
+
int ret = PKCS5_PBKDF2_HMAC_SHA1(pass, pass_len, salt, salt_len, iterations,
|
85
154
|
EVP_CIPHER_key_length(cipher), key) &&
|
86
155
|
EVP_CipherInit_ex(ctx, cipher, NULL /* engine */, key, iv, enc);
|
87
156
|
OPENSSL_cleanse(key, EVP_MAX_KEY_LENGTH);
|
@@ -90,7 +159,7 @@ static int pkcs5_pbe2_cipher_init(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
|
|
90
159
|
|
91
160
|
int PKCS5_pbe2_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx,
|
92
161
|
const EVP_CIPHER *cipher, unsigned iterations,
|
93
|
-
const
|
162
|
+
const char *pass, size_t pass_len,
|
94
163
|
const uint8_t *salt, size_t salt_len) {
|
95
164
|
int cipher_nid = EVP_CIPHER_nid(cipher);
|
96
165
|
if (cipher_nid == NID_undef) {
|
@@ -98,45 +167,47 @@ int PKCS5_pbe2_encrypt_init(CBB *out, EVP_CIPHER_CTX *ctx,
|
|
98
167
|
return 0;
|
99
168
|
}
|
100
169
|
|
101
|
-
|
170
|
+
// Generate a random IV.
|
102
171
|
uint8_t iv[EVP_MAX_IV_LENGTH];
|
103
172
|
if (!RAND_bytes(iv, EVP_CIPHER_iv_length(cipher))) {
|
104
173
|
return 0;
|
105
174
|
}
|
106
175
|
|
107
|
-
|
108
|
-
CBB algorithm, param, kdf, kdf_param, salt_cbb, cipher_cbb,
|
176
|
+
// See RFC 2898, appendix A.
|
177
|
+
CBB algorithm, oid, param, kdf, kdf_oid, kdf_param, salt_cbb, cipher_cbb,
|
178
|
+
iv_cbb;
|
109
179
|
if (!CBB_add_asn1(out, &algorithm, CBS_ASN1_SEQUENCE) ||
|
110
|
-
!
|
180
|
+
!CBB_add_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
|
181
|
+
!CBB_add_bytes(&oid, kPBES2, sizeof(kPBES2)) ||
|
111
182
|
!CBB_add_asn1(&algorithm, ¶m, CBS_ASN1_SEQUENCE) ||
|
112
183
|
!CBB_add_asn1(¶m, &kdf, CBS_ASN1_SEQUENCE) ||
|
113
|
-
!
|
184
|
+
!CBB_add_asn1(&kdf, &kdf_oid, CBS_ASN1_OBJECT) ||
|
185
|
+
!CBB_add_bytes(&kdf_oid, kPBKDF2, sizeof(kPBKDF2)) ||
|
114
186
|
!CBB_add_asn1(&kdf, &kdf_param, CBS_ASN1_SEQUENCE) ||
|
115
187
|
!CBB_add_asn1(&kdf_param, &salt_cbb, CBS_ASN1_OCTETSTRING) ||
|
116
188
|
!CBB_add_bytes(&salt_cbb, salt, salt_len) ||
|
117
189
|
!CBB_add_asn1_uint64(&kdf_param, iterations) ||
|
118
|
-
|
190
|
+
// Specify a key length for RC2.
|
119
191
|
(cipher_nid == NID_rc2_cbc &&
|
120
192
|
!CBB_add_asn1_uint64(&kdf_param, EVP_CIPHER_key_length(cipher))) ||
|
121
|
-
|
193
|
+
// Omit the PRF. We use the default hmacWithSHA1.
|
122
194
|
!CBB_add_asn1(¶m, &cipher_cbb, CBS_ASN1_SEQUENCE) ||
|
123
|
-
!
|
124
|
-
|
125
|
-
|
195
|
+
!add_cipher_oid(&cipher_cbb, cipher_nid) ||
|
196
|
+
// RFC 2898 says RC2-CBC and RC5-CBC-Pad use a SEQUENCE with version and
|
197
|
+
// IV, but OpenSSL always uses an OCTET STRING IV, so we do the same.
|
126
198
|
!CBB_add_asn1(&cipher_cbb, &iv_cbb, CBS_ASN1_OCTETSTRING) ||
|
127
199
|
!CBB_add_bytes(&iv_cbb, iv, EVP_CIPHER_iv_length(cipher)) ||
|
128
200
|
!CBB_flush(out)) {
|
129
201
|
return 0;
|
130
202
|
}
|
131
203
|
|
132
|
-
return pkcs5_pbe2_cipher_init(ctx, cipher, iterations,
|
133
|
-
|
134
|
-
|
204
|
+
return pkcs5_pbe2_cipher_init(ctx, cipher, iterations, pass, pass_len, salt,
|
205
|
+
salt_len, iv, EVP_CIPHER_iv_length(cipher),
|
206
|
+
1 /* encrypt */);
|
135
207
|
}
|
136
208
|
|
137
209
|
int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
|
138
|
-
const
|
139
|
-
CBS *param) {
|
210
|
+
const char *pass, size_t pass_len, CBS *param) {
|
140
211
|
CBS pbe_param, kdf, kdf_obj, enc_scheme, enc_obj;
|
141
212
|
if (!CBS_get_asn1(param, &pbe_param, CBS_ASN1_SEQUENCE) ||
|
142
213
|
CBS_len(param) != 0 ||
|
@@ -149,20 +220,20 @@ int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
|
|
149
220
|
return 0;
|
150
221
|
}
|
151
222
|
|
152
|
-
|
153
|
-
if (
|
223
|
+
// Only PBKDF2 is supported.
|
224
|
+
if (!CBS_mem_equal(&kdf_obj, kPBKDF2, sizeof(kPBKDF2))) {
|
154
225
|
OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNSUPPORTED_KEY_DERIVATION_FUNCTION);
|
155
226
|
return 0;
|
156
227
|
}
|
157
228
|
|
158
|
-
|
159
|
-
const EVP_CIPHER *cipher =
|
229
|
+
// See if we recognise the encryption algorithm.
|
230
|
+
const EVP_CIPHER *cipher = cbs_to_cipher(&enc_obj);
|
160
231
|
if (cipher == NULL) {
|
161
232
|
OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNSUPPORTED_CIPHER);
|
162
233
|
return 0;
|
163
234
|
}
|
164
235
|
|
165
|
-
|
236
|
+
// Parse the KDF parameters. See RFC 8018, appendix A.2.
|
166
237
|
CBS pbkdf2_params, salt;
|
167
238
|
uint64_t iterations;
|
168
239
|
if (!CBS_get_asn1(&kdf, &pbkdf2_params, CBS_ASN1_SEQUENCE) ||
|
@@ -178,8 +249,8 @@ int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
|
|
178
249
|
return 0;
|
179
250
|
}
|
180
251
|
|
181
|
-
|
182
|
-
|
252
|
+
// The optional keyLength parameter, if present, must match the key length of
|
253
|
+
// the cipher.
|
183
254
|
if (CBS_peek_asn1_tag(&pbkdf2_params, CBS_ASN1_INTEGER)) {
|
184
255
|
uint64_t key_len;
|
185
256
|
if (!CBS_get_asn1_uint64(&pbkdf2_params, &key_len)) {
|
@@ -194,25 +265,35 @@ int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
|
|
194
265
|
}
|
195
266
|
|
196
267
|
if (CBS_len(&pbkdf2_params) != 0) {
|
197
|
-
CBS prf;
|
198
|
-
if (!CBS_get_asn1(&pbkdf2_params, &
|
268
|
+
CBS alg_id, prf;
|
269
|
+
if (!CBS_get_asn1(&pbkdf2_params, &alg_id, CBS_ASN1_SEQUENCE) ||
|
270
|
+
!CBS_get_asn1(&alg_id, &prf, CBS_ASN1_OBJECT) ||
|
199
271
|
CBS_len(&pbkdf2_params) != 0) {
|
200
272
|
OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
|
201
273
|
return 0;
|
202
274
|
}
|
203
275
|
|
204
|
-
|
205
|
-
|
206
|
-
if (
|
276
|
+
// We only support hmacWithSHA1. It is the DEFAULT, so DER requires it be
|
277
|
+
// omitted, but we match OpenSSL in tolerating it being present.
|
278
|
+
if (!CBS_mem_equal(&prf, kHMACWithSHA1, sizeof(kHMACWithSHA1))) {
|
207
279
|
OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_UNSUPPORTED_PRF);
|
208
280
|
return 0;
|
209
281
|
}
|
282
|
+
|
283
|
+
// hmacWithSHA1 has a NULL parameter.
|
284
|
+
CBS null;
|
285
|
+
if (!CBS_get_asn1(&alg_id, &null, CBS_ASN1_NULL) ||
|
286
|
+
CBS_len(&null) != 0 ||
|
287
|
+
CBS_len(&alg_id) != 0) {
|
288
|
+
OPENSSL_PUT_ERROR(PKCS8, PKCS8_R_DECODE_ERROR);
|
289
|
+
return 0;
|
290
|
+
}
|
210
291
|
}
|
211
292
|
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
293
|
+
// Parse the encryption scheme parameters. Note OpenSSL does not match the
|
294
|
+
// specification. Per RFC 2898, this should depend on the encryption scheme.
|
295
|
+
// In particular, RC2-CBC uses a SEQUENCE with version and IV. We align with
|
296
|
+
// OpenSSL.
|
216
297
|
CBS iv;
|
217
298
|
if (!CBS_get_asn1(&enc_scheme, &iv, CBS_ASN1_OCTETSTRING) ||
|
218
299
|
CBS_len(&enc_scheme) != 0) {
|
@@ -220,7 +301,7 @@ int PKCS5_pbe2_decrypt_init(const struct pbe_suite *suite, EVP_CIPHER_CTX *ctx,
|
|
220
301
|
return 0;
|
221
302
|
}
|
222
303
|
|
223
|
-
return pkcs5_pbe2_cipher_init(ctx, cipher, (unsigned)iterations,
|
224
|
-
|
304
|
+
return pkcs5_pbe2_cipher_init(ctx, cipher, (unsigned)iterations, pass,
|
305
|
+
pass_len, CBS_data(&salt), CBS_len(&salt),
|
225
306
|
CBS_data(&iv), CBS_len(&iv), 0 /* decrypt */);
|
226
307
|
}
|