grpc 1.24.0 → 1.25.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +306 -243
- data/etc/roots.pem +0 -100
- data/include/grpc/grpc_security.h +44 -18
- data/include/grpc/impl/codegen/grpc_types.h +15 -0
- data/include/grpc/impl/codegen/port_platform.h +27 -11
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/src/boringssl/err_data.c +695 -650
- data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
- data/src/core/ext/filters/client_channel/client_channel.h +24 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
- data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
- data/src/core/ext/filters/client_channel/resolver.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver.h +8 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
- data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
- data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
- data/src/core/ext/filters/client_channel/service_config.h +8 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
- data/src/core/ext/filters/client_channel/subchannel.h +7 -9
- data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
- data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
- data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
- data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
- data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
- data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
- data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
- data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
- data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
- data/src/core/lib/channel/channel_args.cc +16 -0
- data/src/core/lib/channel/channel_args.h +22 -0
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +20 -20
- data/src/core/lib/channel/handshaker.h +3 -4
- data/src/core/lib/channel/handshaker_factory.h +1 -3
- data/src/core/lib/debug/trace.h +3 -2
- data/src/core/lib/gprpp/arena.cc +3 -3
- data/src/core/lib/gprpp/arena.h +2 -3
- data/src/core/lib/gprpp/inlined_vector.h +9 -0
- data/src/core/lib/gprpp/map.h +3 -501
- data/src/core/lib/gprpp/memory.h +45 -41
- data/src/core/lib/gprpp/mpscq.cc +108 -0
- data/src/core/lib/gprpp/mpscq.h +98 -0
- data/src/core/lib/gprpp/orphanable.h +6 -11
- data/src/core/lib/gprpp/ref_counted.h +25 -19
- data/src/core/lib/gprpp/set.h +33 -0
- data/src/core/lib/gprpp/thd.h +2 -4
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli_security_connector.cc +15 -11
- data/src/core/lib/http/parser.cc +1 -1
- data/src/core/lib/iomgr/buffer_list.cc +4 -5
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +4 -5
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.h +3 -5
- data/src/core/lib/iomgr/closure.h +8 -3
- data/src/core/lib/iomgr/combiner.cc +45 -82
- data/src/core/lib/iomgr/combiner.h +32 -8
- data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -1
- data/src/core/lib/iomgr/exec_ctx.h +4 -3
- data/src/core/lib/iomgr/executor.cc +4 -2
- data/src/core/lib/iomgr/executor.h +3 -0
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
- data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
- data/src/core/lib/iomgr/executor/threadpool.h +7 -11
- data/src/core/lib/iomgr/resource_quota.cc +55 -51
- data/src/core/lib/iomgr/resource_quota.h +13 -9
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
- data/src/core/lib/iomgr/tcp_custom.cc +9 -7
- data/src/core/lib/iomgr/tcp_posix.cc +20 -16
- data/src/core/lib/iomgr/tcp_server.h +1 -4
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/udp_server.cc +3 -2
- data/src/core/lib/iomgr/udp_server.h +6 -12
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_string.cc +2 -2
- data/src/core/lib/profiling/basic_timers.cc +2 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +4 -20
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/security_connector.h +19 -17
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
- data/src/core/lib/security/transport/security_handshaker.cc +29 -13
- data/src/core/lib/security/transport/security_handshaker.h +4 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
- data/src/core/lib/slice/slice.cc +2 -10
- data/src/core/lib/slice/slice_hash_table.h +4 -6
- data/src/core/lib/slice/slice_intern.cc +42 -39
- data/src/core/lib/slice/slice_internal.h +3 -3
- data/src/core/lib/slice/slice_utils.h +21 -4
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
- data/src/core/lib/surface/call.cc +3 -3
- data/src/core/lib/surface/channel.cc +7 -0
- data/src/core/lib/surface/completion_queue.cc +12 -11
- data/src/core/lib/surface/completion_queue.h +4 -2
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/lame_client.cc +33 -18
- data/src/core/lib/surface/server.cc +77 -76
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -7
- data/src/core/lib/transport/connectivity_state.cc +112 -98
- data/src/core/lib/transport/connectivity_state.h +100 -50
- data/src/core/lib/transport/static_metadata.cc +276 -288
- data/src/core/lib/transport/static_metadata.h +73 -76
- data/src/core/lib/transport/status_conversion.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +1 -1
- data/src/core/lib/transport/transport.cc +2 -2
- data/src/core/lib/transport/transport.h +12 -4
- data/src/core/lib/transport/transport_op_string.cc +14 -11
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
- data/src/core/tsi/fake_transport_security.cc +7 -5
- data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
- data/src/core/tsi/local_transport_security.cc +8 -6
- data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +12 -12
- data/src/core/tsi/ssl_transport_security.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +7 -0
- data/src/core/tsi/transport_security_grpc.h +6 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -1
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
- data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
- data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
- data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
- data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
- data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
- data/third_party/boringssl/crypto/base64/base64.c +2 -2
- data/third_party/boringssl/crypto/bio/bio.c +73 -9
- data/third_party/boringssl/crypto/bio/connect.c +4 -0
- data/third_party/boringssl/crypto/bio/fd.c +4 -0
- data/third_party/boringssl/crypto/bio/file.c +5 -2
- data/third_party/boringssl/crypto/bio/socket.c +4 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
- data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
- data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
- data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
- data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
- data/third_party/boringssl/crypto/chacha/internal.h +45 -0
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
- data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
- data/third_party/boringssl/crypto/conf/conf.c +7 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
- data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
- data/third_party/boringssl/crypto/cpu-intel.c +45 -51
- data/third_party/boringssl/crypto/crypto.c +39 -22
- data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
- data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
- data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
- data/third_party/boringssl/crypto/engine/engine.c +2 -1
- data/third_party/boringssl/crypto/err/err.c +2 -0
- data/third_party/boringssl/crypto/err/internal.h +2 -2
- data/third_party/boringssl/crypto/evp/evp.c +89 -8
- data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
- data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
- data/third_party/boringssl/crypto/evp/internal.h +18 -1
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
- data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
- data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
- data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
- data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
- data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
- data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
- data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
- data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
- data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
- data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
- data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
- data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
- data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
- data/third_party/boringssl/crypto/hrss/internal.h +62 -0
- data/third_party/boringssl/crypto/internal.h +95 -20
- data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
- data/third_party/boringssl/crypto/mem.c +39 -2
- data/third_party/boringssl/crypto/obj/obj.c +4 -4
- data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
- data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
- data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
- data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
- data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
- data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
- data/third_party/boringssl/crypto/pool/internal.h +1 -1
- data/third_party/boringssl/crypto/pool/pool.c +21 -0
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
- data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
- data/third_party/boringssl/crypto/stack/stack.c +83 -32
- data/third_party/boringssl/crypto/thread_none.c +2 -2
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +38 -19
- data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
- data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
- data/third_party/boringssl/crypto/x509/by_file.c +12 -10
- data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
- data/third_party/boringssl/crypto/x509/t_req.c +1 -3
- data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
- data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
- data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
- data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
- data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
- data/third_party/boringssl/crypto/x509/x509name.c +2 -3
- data/third_party/boringssl/crypto/x509/x_all.c +109 -210
- data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
- data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
- data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
- data/third_party/boringssl/include/openssl/aead.h +45 -19
- data/third_party/boringssl/include/openssl/aes.h +32 -7
- data/third_party/boringssl/include/openssl/asn1.h +7 -77
- data/third_party/boringssl/include/openssl/base.h +120 -6
- data/third_party/boringssl/include/openssl/base64.h +4 -1
- data/third_party/boringssl/include/openssl/bio.h +112 -81
- data/third_party/boringssl/include/openssl/blowfish.h +3 -3
- data/third_party/boringssl/include/openssl/bn.h +55 -29
- data/third_party/boringssl/include/openssl/buf.h +2 -2
- data/third_party/boringssl/include/openssl/bytestring.h +54 -32
- data/third_party/boringssl/include/openssl/cast.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +46 -16
- data/third_party/boringssl/include/openssl/cmac.h +6 -2
- data/third_party/boringssl/include/openssl/conf.h +3 -6
- data/third_party/boringssl/include/openssl/cpu.h +25 -9
- data/third_party/boringssl/include/openssl/crypto.h +32 -10
- data/third_party/boringssl/include/openssl/curve25519.h +4 -4
- data/third_party/boringssl/include/openssl/dh.h +3 -2
- data/third_party/boringssl/include/openssl/digest.h +21 -7
- data/third_party/boringssl/include/openssl/dsa.h +8 -2
- data/third_party/boringssl/include/openssl/e_os2.h +18 -0
- data/third_party/boringssl/include/openssl/ec.h +25 -21
- data/third_party/boringssl/include/openssl/ec_key.h +36 -8
- data/third_party/boringssl/include/openssl/ecdh.h +17 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
- data/third_party/boringssl/include/openssl/engine.h +4 -4
- data/third_party/boringssl/include/openssl/err.h +3 -0
- data/third_party/boringssl/include/openssl/evp.h +199 -42
- data/third_party/boringssl/include/openssl/hmac.h +4 -4
- data/third_party/boringssl/include/openssl/hrss.h +100 -0
- data/third_party/boringssl/include/openssl/lhash.h +131 -23
- data/third_party/boringssl/include/openssl/md4.h +6 -4
- data/third_party/boringssl/include/openssl/md5.h +6 -4
- data/third_party/boringssl/include/openssl/mem.h +6 -2
- data/third_party/boringssl/include/openssl/nid.h +3 -0
- data/third_party/boringssl/include/openssl/obj.h +3 -0
- data/third_party/boringssl/include/openssl/pem.h +102 -64
- data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
- data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
- data/third_party/boringssl/include/openssl/pool.h +13 -2
- data/third_party/boringssl/include/openssl/ripemd.h +5 -4
- data/third_party/boringssl/include/openssl/rsa.h +46 -15
- data/third_party/boringssl/include/openssl/sha.h +40 -28
- data/third_party/boringssl/include/openssl/siphash.h +37 -0
- data/third_party/boringssl/include/openssl/span.h +17 -9
- data/third_party/boringssl/include/openssl/ssl.h +766 -393
- data/third_party/boringssl/include/openssl/ssl3.h +4 -3
- data/third_party/boringssl/include/openssl/stack.h +134 -77
- data/third_party/boringssl/include/openssl/thread.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +25 -9
- data/third_party/boringssl/include/openssl/type_check.h +14 -15
- data/third_party/boringssl/include/openssl/x509.h +28 -3
- data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
- data/third_party/boringssl/include/openssl/x509v3.h +17 -13
- data/third_party/boringssl/ssl/d1_both.cc +9 -18
- data/third_party/boringssl/ssl/d1_lib.cc +4 -3
- data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
- data/third_party/boringssl/ssl/dtls_method.cc +0 -1
- data/third_party/boringssl/ssl/dtls_record.cc +28 -28
- data/third_party/boringssl/ssl/handoff.cc +295 -91
- data/third_party/boringssl/ssl/handshake.cc +133 -72
- data/third_party/boringssl/ssl/handshake_client.cc +218 -189
- data/third_party/boringssl/ssl/handshake_server.cc +399 -272
- data/third_party/boringssl/ssl/internal.h +1413 -928
- data/third_party/boringssl/ssl/s3_both.cc +175 -36
- data/third_party/boringssl/ssl/s3_lib.cc +9 -13
- data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
- data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
- data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
- data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
- data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
- data/third_party/boringssl/ssl/ssl_file.cc +2 -0
- data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
- data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
- data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
- data/third_party/boringssl/ssl/ssl_session.cc +230 -178
- data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
- data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
- data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
- data/third_party/boringssl/ssl/t1_enc.cc +5 -96
- data/third_party/boringssl/ssl/t1_lib.cc +931 -678
- data/third_party/boringssl/ssl/tls13_both.cc +251 -121
- data/third_party/boringssl/ssl/tls13_client.cc +129 -73
- data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
- data/third_party/boringssl/ssl/tls13_server.cc +259 -192
- data/third_party/boringssl/ssl/tls_method.cc +26 -21
- data/third_party/boringssl/ssl/tls_record.cc +42 -47
- data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
- data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
- data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
- data/third_party/boringssl/third_party/fiat/p256.c +238 -999
- data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
- data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +2 -1
- metadata +72 -44
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
- data/src/core/lib/gpr/mpscq.cc +0 -117
- data/src/core/lib/gpr/mpscq.h +0 -88
- data/src/core/lib/gprpp/abstract.h +0 -47
- data/src/core/lib/gprpp/pair.h +0 -38
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
- data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
- data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -69,31 +69,28 @@
|
|
69
69
|
#include "../crypto/internal.h"
|
70
70
|
|
71
71
|
|
72
|
-
|
72
|
+
BSSL_NAMESPACE_BEGIN
|
73
73
|
|
74
|
-
|
74
|
+
bool ssl_is_key_type_supported(int key_type) {
|
75
75
|
return key_type == EVP_PKEY_RSA || key_type == EVP_PKEY_EC ||
|
76
76
|
key_type == EVP_PKEY_ED25519;
|
77
77
|
}
|
78
78
|
|
79
|
-
static
|
79
|
+
static bool ssl_set_pkey(CERT *cert, EVP_PKEY *pkey) {
|
80
80
|
if (!ssl_is_key_type_supported(pkey->type)) {
|
81
81
|
OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE);
|
82
|
-
return
|
82
|
+
return false;
|
83
83
|
}
|
84
84
|
|
85
|
-
if (cert->chain !=
|
86
|
-
sk_CRYPTO_BUFFER_value(cert->chain, 0) !=
|
85
|
+
if (cert->chain != nullptr &&
|
86
|
+
sk_CRYPTO_BUFFER_value(cert->chain.get(), 0) != nullptr &&
|
87
87
|
// Sanity-check that the private key and the certificate match.
|
88
88
|
!ssl_cert_check_private_key(cert, pkey)) {
|
89
|
-
return
|
89
|
+
return false;
|
90
90
|
}
|
91
91
|
|
92
|
-
|
93
|
-
|
94
|
-
cert->privatekey = pkey;
|
95
|
-
|
96
|
-
return 1;
|
92
|
+
cert->privatekey = UpRef(pkey);
|
93
|
+
return true;
|
97
94
|
}
|
98
95
|
|
99
96
|
typedef struct {
|
@@ -101,29 +98,30 @@ typedef struct {
|
|
101
98
|
int pkey_type;
|
102
99
|
int curve;
|
103
100
|
const EVP_MD *(*digest_func)(void);
|
104
|
-
|
101
|
+
bool is_rsa_pss;
|
105
102
|
} SSL_SIGNATURE_ALGORITHM;
|
106
103
|
|
107
104
|
static const SSL_SIGNATURE_ALGORITHM kSignatureAlgorithms[] = {
|
108
|
-
{SSL_SIGN_RSA_PKCS1_MD5_SHA1, EVP_PKEY_RSA, NID_undef, &EVP_md5_sha1,
|
109
|
-
|
110
|
-
{
|
111
|
-
{
|
112
|
-
{
|
113
|
-
|
114
|
-
|
115
|
-
{
|
116
|
-
{
|
117
|
-
|
118
|
-
|
105
|
+
{SSL_SIGN_RSA_PKCS1_MD5_SHA1, EVP_PKEY_RSA, NID_undef, &EVP_md5_sha1,
|
106
|
+
false},
|
107
|
+
{SSL_SIGN_RSA_PKCS1_SHA1, EVP_PKEY_RSA, NID_undef, &EVP_sha1, false},
|
108
|
+
{SSL_SIGN_RSA_PKCS1_SHA256, EVP_PKEY_RSA, NID_undef, &EVP_sha256, false},
|
109
|
+
{SSL_SIGN_RSA_PKCS1_SHA384, EVP_PKEY_RSA, NID_undef, &EVP_sha384, false},
|
110
|
+
{SSL_SIGN_RSA_PKCS1_SHA512, EVP_PKEY_RSA, NID_undef, &EVP_sha512, false},
|
111
|
+
|
112
|
+
{SSL_SIGN_RSA_PSS_RSAE_SHA256, EVP_PKEY_RSA, NID_undef, &EVP_sha256, true},
|
113
|
+
{SSL_SIGN_RSA_PSS_RSAE_SHA384, EVP_PKEY_RSA, NID_undef, &EVP_sha384, true},
|
114
|
+
{SSL_SIGN_RSA_PSS_RSAE_SHA512, EVP_PKEY_RSA, NID_undef, &EVP_sha512, true},
|
115
|
+
|
116
|
+
{SSL_SIGN_ECDSA_SHA1, EVP_PKEY_EC, NID_undef, &EVP_sha1, false},
|
119
117
|
{SSL_SIGN_ECDSA_SECP256R1_SHA256, EVP_PKEY_EC, NID_X9_62_prime256v1,
|
120
|
-
&EVP_sha256,
|
118
|
+
&EVP_sha256, false},
|
121
119
|
{SSL_SIGN_ECDSA_SECP384R1_SHA384, EVP_PKEY_EC, NID_secp384r1, &EVP_sha384,
|
122
|
-
|
120
|
+
false},
|
123
121
|
{SSL_SIGN_ECDSA_SECP521R1_SHA512, EVP_PKEY_EC, NID_secp521r1, &EVP_sha512,
|
124
|
-
|
122
|
+
false},
|
125
123
|
|
126
|
-
{SSL_SIGN_ED25519, EVP_PKEY_ED25519, NID_undef,
|
124
|
+
{SSL_SIGN_ED25519, EVP_PKEY_ED25519, NID_undef, nullptr, false},
|
127
125
|
};
|
128
126
|
|
129
127
|
static const SSL_SIGNATURE_ALGORITHM *get_signature_algorithm(uint16_t sigalg) {
|
@@ -135,22 +133,28 @@ static const SSL_SIGNATURE_ALGORITHM *get_signature_algorithm(uint16_t sigalg) {
|
|
135
133
|
return NULL;
|
136
134
|
}
|
137
135
|
|
138
|
-
|
139
|
-
|
136
|
+
bool ssl_has_private_key(const SSL_HANDSHAKE *hs) {
|
137
|
+
if (hs->config->cert->privatekey != nullptr ||
|
138
|
+
hs->config->cert->key_method != nullptr ||
|
139
|
+
ssl_signing_with_dc(hs)) {
|
140
|
+
return true;
|
141
|
+
}
|
142
|
+
|
143
|
+
return false;
|
140
144
|
}
|
141
145
|
|
142
|
-
static
|
143
|
-
|
146
|
+
static bool pkey_supports_algorithm(const SSL *ssl, EVP_PKEY *pkey,
|
147
|
+
uint16_t sigalg) {
|
144
148
|
const SSL_SIGNATURE_ALGORITHM *alg = get_signature_algorithm(sigalg);
|
145
149
|
if (alg == NULL ||
|
146
150
|
EVP_PKEY_id(pkey) != alg->pkey_type) {
|
147
|
-
return
|
151
|
+
return false;
|
148
152
|
}
|
149
153
|
|
150
154
|
if (ssl_protocol_version(ssl) >= TLS1_3_VERSION) {
|
151
155
|
// RSA keys may only be used with RSA-PSS.
|
152
156
|
if (alg->pkey_type == EVP_PKEY_RSA && !alg->is_rsa_pss) {
|
153
|
-
return
|
157
|
+
return false;
|
154
158
|
}
|
155
159
|
|
156
160
|
// EC keys have a curve requirement.
|
@@ -158,18 +162,18 @@ static int pkey_supports_algorithm(const SSL *ssl, EVP_PKEY *pkey,
|
|
158
162
|
(alg->curve == NID_undef ||
|
159
163
|
EC_GROUP_get_curve_name(
|
160
164
|
EC_KEY_get0_group(EVP_PKEY_get0_EC_KEY(pkey))) != alg->curve)) {
|
161
|
-
return
|
165
|
+
return false;
|
162
166
|
}
|
163
167
|
}
|
164
168
|
|
165
|
-
return
|
169
|
+
return true;
|
166
170
|
}
|
167
171
|
|
168
|
-
static
|
169
|
-
|
172
|
+
static bool setup_ctx(SSL *ssl, EVP_MD_CTX *ctx, EVP_PKEY *pkey,
|
173
|
+
uint16_t sigalg, bool is_verify) {
|
170
174
|
if (!pkey_supports_algorithm(ssl, pkey, sigalg)) {
|
171
175
|
OPENSSL_PUT_ERROR(SSL, SSL_R_WRONG_SIGNATURE_TYPE);
|
172
|
-
return
|
176
|
+
return false;
|
173
177
|
}
|
174
178
|
|
175
179
|
const SSL_SIGNATURE_ALGORITHM *alg = get_signature_algorithm(sigalg);
|
@@ -177,33 +181,40 @@ static int setup_ctx(SSL *ssl, EVP_MD_CTX *ctx, EVP_PKEY *pkey, uint16_t sigalg,
|
|
177
181
|
EVP_PKEY_CTX *pctx;
|
178
182
|
if (is_verify) {
|
179
183
|
if (!EVP_DigestVerifyInit(ctx, &pctx, digest, NULL, pkey)) {
|
180
|
-
return
|
184
|
+
return false;
|
181
185
|
}
|
182
186
|
} else if (!EVP_DigestSignInit(ctx, &pctx, digest, NULL, pkey)) {
|
183
|
-
return
|
187
|
+
return false;
|
184
188
|
}
|
185
189
|
|
186
190
|
if (alg->is_rsa_pss) {
|
187
191
|
if (!EVP_PKEY_CTX_set_rsa_padding(pctx, RSA_PKCS1_PSS_PADDING) ||
|
188
192
|
!EVP_PKEY_CTX_set_rsa_pss_saltlen(pctx, -1 /* salt len = hash len */)) {
|
189
|
-
return
|
193
|
+
return false;
|
190
194
|
}
|
191
195
|
}
|
192
196
|
|
193
|
-
return
|
197
|
+
return true;
|
194
198
|
}
|
195
199
|
|
196
200
|
enum ssl_private_key_result_t ssl_private_key_sign(
|
197
201
|
SSL_HANDSHAKE *hs, uint8_t *out, size_t *out_len, size_t max_out,
|
198
202
|
uint16_t sigalg, Span<const uint8_t> in) {
|
199
203
|
SSL *const ssl = hs->ssl;
|
200
|
-
|
204
|
+
const SSL_PRIVATE_KEY_METHOD *key_method = hs->config->cert->key_method;
|
205
|
+
EVP_PKEY *privatekey = hs->config->cert->privatekey.get();
|
206
|
+
if (ssl_signing_with_dc(hs)) {
|
207
|
+
key_method = hs->config->cert->dc_key_method;
|
208
|
+
privatekey = hs->config->cert->dc_privatekey.get();
|
209
|
+
}
|
210
|
+
|
211
|
+
if (key_method != NULL) {
|
201
212
|
enum ssl_private_key_result_t ret;
|
202
213
|
if (hs->pending_private_key_op) {
|
203
|
-
ret =
|
214
|
+
ret = key_method->complete(ssl, out, out_len, max_out);
|
204
215
|
} else {
|
205
|
-
ret =
|
206
|
-
|
216
|
+
ret = key_method->sign(ssl, out, out_len, max_out,
|
217
|
+
sigalg, in.data(), in.size());
|
207
218
|
}
|
208
219
|
if (ret == ssl_private_key_failure) {
|
209
220
|
OPENSSL_PUT_ERROR(SSL, SSL_R_PRIVATE_KEY_OPERATION_FAILED);
|
@@ -214,7 +225,7 @@ enum ssl_private_key_result_t ssl_private_key_sign(
|
|
214
225
|
|
215
226
|
*out_len = max_out;
|
216
227
|
ScopedEVP_MD_CTX ctx;
|
217
|
-
if (!setup_ctx(ssl, ctx.get(),
|
228
|
+
if (!setup_ctx(ssl, ctx.get(), privatekey, sigalg, false /* sign */) ||
|
218
229
|
!EVP_DigestSign(ctx.get(), out, out_len, in.data(), in.size())) {
|
219
230
|
return ssl_private_key_failure;
|
220
231
|
}
|
@@ -225,9 +236,16 @@ bool ssl_public_key_verify(SSL *ssl, Span<const uint8_t> signature,
|
|
225
236
|
uint16_t sigalg, EVP_PKEY *pkey,
|
226
237
|
Span<const uint8_t> in) {
|
227
238
|
ScopedEVP_MD_CTX ctx;
|
228
|
-
|
229
|
-
|
230
|
-
|
239
|
+
if (!setup_ctx(ssl, ctx.get(), pkey, sigalg, true /* verify */)) {
|
240
|
+
return false;
|
241
|
+
}
|
242
|
+
bool ok = EVP_DigestVerify(ctx.get(), signature.data(), signature.size(),
|
243
|
+
in.data(), in.size());
|
244
|
+
#if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
|
245
|
+
ok = true;
|
246
|
+
ERR_clear_error();
|
247
|
+
#endif
|
248
|
+
return ok;
|
231
249
|
}
|
232
250
|
|
233
251
|
enum ssl_private_key_result_t ssl_private_key_decrypt(SSL_HANDSHAKE *hs,
|
@@ -236,13 +254,13 @@ enum ssl_private_key_result_t ssl_private_key_decrypt(SSL_HANDSHAKE *hs,
|
|
236
254
|
size_t max_out,
|
237
255
|
Span<const uint8_t> in) {
|
238
256
|
SSL *const ssl = hs->ssl;
|
239
|
-
if (
|
257
|
+
if (hs->config->cert->key_method != NULL) {
|
240
258
|
enum ssl_private_key_result_t ret;
|
241
259
|
if (hs->pending_private_key_op) {
|
242
|
-
ret =
|
260
|
+
ret = hs->config->cert->key_method->complete(ssl, out, out_len, max_out);
|
243
261
|
} else {
|
244
|
-
ret =
|
245
|
-
|
262
|
+
ret = hs->config->cert->key_method->decrypt(ssl, out, out_len, max_out,
|
263
|
+
in.data(), in.size());
|
246
264
|
}
|
247
265
|
if (ret == ssl_private_key_failure) {
|
248
266
|
OPENSSL_PUT_ERROR(SSL, SSL_R_PRIVATE_KEY_OPERATION_FAILED);
|
@@ -251,7 +269,7 @@ enum ssl_private_key_result_t ssl_private_key_decrypt(SSL_HANDSHAKE *hs,
|
|
251
269
|
return ret;
|
252
270
|
}
|
253
271
|
|
254
|
-
RSA *rsa = EVP_PKEY_get0_RSA(
|
272
|
+
RSA *rsa = EVP_PKEY_get0_RSA(hs->config->cert->privatekey.get());
|
255
273
|
if (rsa == NULL) {
|
256
274
|
// Decrypt operations are only supported for RSA keys.
|
257
275
|
OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
|
@@ -289,12 +307,12 @@ bool ssl_private_key_supports_signature_algorithm(SSL_HANDSHAKE *hs,
|
|
289
307
|
return true;
|
290
308
|
}
|
291
309
|
|
292
|
-
|
310
|
+
BSSL_NAMESPACE_END
|
293
311
|
|
294
312
|
using namespace bssl;
|
295
313
|
|
296
314
|
int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa) {
|
297
|
-
if (rsa == NULL) {
|
315
|
+
if (rsa == NULL || ssl->config == NULL) {
|
298
316
|
OPENSSL_PUT_ERROR(SSL, ERR_R_PASSED_NULL_PARAMETER);
|
299
317
|
return 0;
|
300
318
|
}
|
@@ -306,7 +324,7 @@ int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa) {
|
|
306
324
|
return 0;
|
307
325
|
}
|
308
326
|
|
309
|
-
return ssl_set_pkey(ssl->cert, pkey.get());
|
327
|
+
return ssl_set_pkey(ssl->config->cert.get(), pkey.get());
|
310
328
|
}
|
311
329
|
|
312
330
|
int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const uint8_t *der, size_t der_len) {
|
@@ -320,12 +338,12 @@ int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const uint8_t *der, size_t der_len) {
|
|
320
338
|
}
|
321
339
|
|
322
340
|
int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey) {
|
323
|
-
if (pkey == NULL) {
|
341
|
+
if (pkey == NULL || ssl->config == NULL) {
|
324
342
|
OPENSSL_PUT_ERROR(SSL, ERR_R_PASSED_NULL_PARAMETER);
|
325
343
|
return 0;
|
326
344
|
}
|
327
345
|
|
328
|
-
return ssl_set_pkey(ssl->cert, pkey);
|
346
|
+
return ssl_set_pkey(ssl->config->cert.get(), pkey);
|
329
347
|
}
|
330
348
|
|
331
349
|
int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const uint8_t *der,
|
@@ -358,7 +376,7 @@ int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa) {
|
|
358
376
|
return 0;
|
359
377
|
}
|
360
378
|
|
361
|
-
return ssl_set_pkey(ctx->cert, pkey.get());
|
379
|
+
return ssl_set_pkey(ctx->cert.get(), pkey.get());
|
362
380
|
}
|
363
381
|
|
364
382
|
int SSL_CTX_use_RSAPrivateKey_ASN1(SSL_CTX *ctx, const uint8_t *der,
|
@@ -378,7 +396,7 @@ int SSL_CTX_use_PrivateKey(SSL_CTX *ctx, EVP_PKEY *pkey) {
|
|
378
396
|
return 0;
|
379
397
|
}
|
380
398
|
|
381
|
-
return ssl_set_pkey(ctx->cert, pkey);
|
399
|
+
return ssl_set_pkey(ctx->cert.get(), pkey);
|
382
400
|
}
|
383
401
|
|
384
402
|
int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const uint8_t *der,
|
@@ -400,7 +418,10 @@ int SSL_CTX_use_PrivateKey_ASN1(int type, SSL_CTX *ctx, const uint8_t *der,
|
|
400
418
|
|
401
419
|
void SSL_set_private_key_method(SSL *ssl,
|
402
420
|
const SSL_PRIVATE_KEY_METHOD *key_method) {
|
403
|
-
ssl->
|
421
|
+
if (!ssl->config) {
|
422
|
+
return;
|
423
|
+
}
|
424
|
+
ssl->config->cert->key_method = key_method;
|
404
425
|
}
|
405
426
|
|
406
427
|
void SSL_CTX_set_private_key_method(SSL_CTX *ctx,
|
@@ -408,38 +429,49 @@ void SSL_CTX_set_private_key_method(SSL_CTX *ctx,
|
|
408
429
|
ctx->cert->key_method = key_method;
|
409
430
|
}
|
410
431
|
|
432
|
+
static constexpr size_t kMaxSignatureAlgorithmNameLen = 23;
|
433
|
+
|
434
|
+
// This was "constexpr" rather than "const", but that triggered a bug in MSVC
|
435
|
+
// where it didn't pad the strings to the correct length.
|
436
|
+
static const struct {
|
437
|
+
uint16_t signature_algorithm;
|
438
|
+
const char name[kMaxSignatureAlgorithmNameLen];
|
439
|
+
} kSignatureAlgorithmNames[] = {
|
440
|
+
{SSL_SIGN_RSA_PKCS1_MD5_SHA1, "rsa_pkcs1_md5_sha1"},
|
441
|
+
{SSL_SIGN_RSA_PKCS1_SHA1, "rsa_pkcs1_sha1"},
|
442
|
+
{SSL_SIGN_RSA_PKCS1_SHA256, "rsa_pkcs1_sha256"},
|
443
|
+
{SSL_SIGN_RSA_PKCS1_SHA384, "rsa_pkcs1_sha384"},
|
444
|
+
{SSL_SIGN_RSA_PKCS1_SHA512, "rsa_pkcs1_sha512"},
|
445
|
+
{SSL_SIGN_ECDSA_SHA1, "ecdsa_sha1"},
|
446
|
+
{SSL_SIGN_ECDSA_SECP256R1_SHA256, "ecdsa_secp256r1_sha256"},
|
447
|
+
{SSL_SIGN_ECDSA_SECP384R1_SHA384, "ecdsa_secp384r1_sha384"},
|
448
|
+
{SSL_SIGN_ECDSA_SECP521R1_SHA512, "ecdsa_secp521r1_sha512"},
|
449
|
+
{SSL_SIGN_RSA_PSS_RSAE_SHA256, "rsa_pss_rsae_sha256"},
|
450
|
+
{SSL_SIGN_RSA_PSS_RSAE_SHA384, "rsa_pss_rsae_sha384"},
|
451
|
+
{SSL_SIGN_RSA_PSS_RSAE_SHA512, "rsa_pss_rsae_sha512"},
|
452
|
+
{SSL_SIGN_ED25519, "ed25519"},
|
453
|
+
};
|
454
|
+
|
411
455
|
const char *SSL_get_signature_algorithm_name(uint16_t sigalg,
|
412
456
|
int include_curve) {
|
413
|
-
|
414
|
-
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
422
|
-
case SSL_SIGN_RSA_PKCS1_SHA512:
|
423
|
-
return "rsa_pkcs1_sha512";
|
424
|
-
case SSL_SIGN_ECDSA_SHA1:
|
425
|
-
return "ecdsa_sha1";
|
426
|
-
case SSL_SIGN_ECDSA_SECP256R1_SHA256:
|
427
|
-
return include_curve ? "ecdsa_secp256r1_sha256" : "ecdsa_sha256";
|
428
|
-
case SSL_SIGN_ECDSA_SECP384R1_SHA384:
|
429
|
-
return include_curve ? "ecdsa_secp384r1_sha384" : "ecdsa_sha384";
|
430
|
-
case SSL_SIGN_ECDSA_SECP521R1_SHA512:
|
431
|
-
return include_curve ? "ecdsa_secp521r1_sha512" : "ecdsa_sha512";
|
432
|
-
case SSL_SIGN_RSA_PSS_SHA256:
|
433
|
-
return "rsa_pss_sha256";
|
434
|
-
case SSL_SIGN_RSA_PSS_SHA384:
|
435
|
-
return "rsa_pss_sha384";
|
436
|
-
case SSL_SIGN_RSA_PSS_SHA512:
|
437
|
-
return "rsa_pss_sha512";
|
438
|
-
case SSL_SIGN_ED25519:
|
439
|
-
return "ed25519";
|
440
|
-
default:
|
441
|
-
return NULL;
|
457
|
+
if (!include_curve) {
|
458
|
+
switch (sigalg) {
|
459
|
+
case SSL_SIGN_ECDSA_SECP256R1_SHA256:
|
460
|
+
return "ecdsa_sha256";
|
461
|
+
case SSL_SIGN_ECDSA_SECP384R1_SHA384:
|
462
|
+
return "ecdsa_sha384";
|
463
|
+
case SSL_SIGN_ECDSA_SECP521R1_SHA512:
|
464
|
+
return "ecdsa_sha512";
|
465
|
+
}
|
442
466
|
}
|
467
|
+
|
468
|
+
for (const auto &candidate : kSignatureAlgorithmNames) {
|
469
|
+
if (candidate.signature_algorithm == sigalg) {
|
470
|
+
return candidate.name;
|
471
|
+
}
|
472
|
+
}
|
473
|
+
|
474
|
+
return NULL;
|
443
475
|
}
|
444
476
|
|
445
477
|
int SSL_get_signature_algorithm_key_type(uint16_t sigalg) {
|
@@ -460,35 +492,333 @@ int SSL_is_signature_algorithm_rsa_pss(uint16_t sigalg) {
|
|
460
492
|
return alg != nullptr && alg->is_rsa_pss;
|
461
493
|
}
|
462
494
|
|
463
|
-
|
464
|
-
|
465
|
-
|
495
|
+
int SSL_CTX_set_signing_algorithm_prefs(SSL_CTX *ctx, const uint16_t *prefs,
|
496
|
+
size_t num_prefs) {
|
497
|
+
return ctx->cert->sigalgs.CopyFrom(MakeConstSpan(prefs, num_prefs));
|
498
|
+
}
|
466
499
|
|
467
|
-
|
468
|
-
|
469
|
-
if (
|
470
|
-
|
500
|
+
int SSL_set_signing_algorithm_prefs(SSL *ssl, const uint16_t *prefs,
|
501
|
+
size_t num_prefs) {
|
502
|
+
if (!ssl->config) {
|
503
|
+
return 0;
|
504
|
+
}
|
505
|
+
return ssl->config->cert->sigalgs.CopyFrom(MakeConstSpan(prefs, num_prefs));
|
506
|
+
}
|
507
|
+
|
508
|
+
static constexpr struct {
|
509
|
+
int pkey_type;
|
510
|
+
int hash_nid;
|
511
|
+
uint16_t signature_algorithm;
|
512
|
+
} kSignatureAlgorithmsMapping[] = {
|
513
|
+
{EVP_PKEY_RSA, NID_sha1, SSL_SIGN_RSA_PKCS1_SHA1},
|
514
|
+
{EVP_PKEY_RSA, NID_sha256, SSL_SIGN_RSA_PKCS1_SHA256},
|
515
|
+
{EVP_PKEY_RSA, NID_sha384, SSL_SIGN_RSA_PKCS1_SHA384},
|
516
|
+
{EVP_PKEY_RSA, NID_sha512, SSL_SIGN_RSA_PKCS1_SHA512},
|
517
|
+
{EVP_PKEY_RSA_PSS, NID_sha256, SSL_SIGN_RSA_PSS_RSAE_SHA256},
|
518
|
+
{EVP_PKEY_RSA_PSS, NID_sha384, SSL_SIGN_RSA_PSS_RSAE_SHA384},
|
519
|
+
{EVP_PKEY_RSA_PSS, NID_sha512, SSL_SIGN_RSA_PSS_RSAE_SHA512},
|
520
|
+
{EVP_PKEY_EC, NID_sha1, SSL_SIGN_ECDSA_SHA1},
|
521
|
+
{EVP_PKEY_EC, NID_sha256, SSL_SIGN_ECDSA_SECP256R1_SHA256},
|
522
|
+
{EVP_PKEY_EC, NID_sha384, SSL_SIGN_ECDSA_SECP384R1_SHA384},
|
523
|
+
{EVP_PKEY_EC, NID_sha512, SSL_SIGN_ECDSA_SECP521R1_SHA512},
|
524
|
+
{EVP_PKEY_ED25519, NID_undef, SSL_SIGN_ED25519},
|
525
|
+
};
|
526
|
+
|
527
|
+
static bool parse_sigalg_pairs(Array<uint16_t> *out, const int *values,
|
528
|
+
size_t num_values) {
|
529
|
+
if ((num_values & 1) == 1) {
|
530
|
+
return false;
|
531
|
+
}
|
532
|
+
|
533
|
+
const size_t num_pairs = num_values / 2;
|
534
|
+
if (!out->Init(num_pairs)) {
|
535
|
+
return false;
|
536
|
+
}
|
537
|
+
|
538
|
+
for (size_t i = 0; i < num_values; i += 2) {
|
539
|
+
const int hash_nid = values[i];
|
540
|
+
const int pkey_type = values[i+1];
|
541
|
+
|
542
|
+
bool found = false;
|
543
|
+
for (const auto &candidate : kSignatureAlgorithmsMapping) {
|
544
|
+
if (candidate.pkey_type == pkey_type && candidate.hash_nid == hash_nid) {
|
545
|
+
(*out)[i / 2] = candidate.signature_algorithm;
|
546
|
+
found = true;
|
547
|
+
break;
|
548
|
+
}
|
549
|
+
}
|
550
|
+
|
551
|
+
if (!found) {
|
552
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SIGNATURE_ALGORITHM);
|
553
|
+
ERR_add_error_dataf("unknown hash:%d pkey:%d", hash_nid, pkey_type);
|
554
|
+
return false;
|
555
|
+
}
|
556
|
+
}
|
557
|
+
|
558
|
+
return true;
|
559
|
+
}
|
560
|
+
|
561
|
+
static int compare_uint16_t(const void *p1, const void *p2) {
|
562
|
+
uint16_t u1 = *((const uint16_t *)p1);
|
563
|
+
uint16_t u2 = *((const uint16_t *)p2);
|
564
|
+
if (u1 < u2) {
|
565
|
+
return -1;
|
566
|
+
} else if (u1 > u2) {
|
567
|
+
return 1;
|
568
|
+
} else {
|
569
|
+
return 0;
|
570
|
+
}
|
571
|
+
}
|
572
|
+
|
573
|
+
static bool sigalgs_unique(Span<const uint16_t> in_sigalgs) {
|
574
|
+
if (in_sigalgs.size() < 2) {
|
575
|
+
return true;
|
576
|
+
}
|
577
|
+
|
578
|
+
Array<uint16_t> sigalgs;
|
579
|
+
if (!sigalgs.CopyFrom(in_sigalgs)) {
|
580
|
+
return false;
|
581
|
+
}
|
582
|
+
|
583
|
+
qsort(sigalgs.data(), sigalgs.size(), sizeof(uint16_t), compare_uint16_t);
|
584
|
+
|
585
|
+
for (size_t i = 1; i < sigalgs.size(); i++) {
|
586
|
+
if (sigalgs[i - 1] == sigalgs[i]) {
|
587
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_DUPLICATE_SIGNATURE_ALGORITHM);
|
588
|
+
return false;
|
589
|
+
}
|
590
|
+
}
|
591
|
+
|
592
|
+
return true;
|
593
|
+
}
|
594
|
+
|
595
|
+
int SSL_CTX_set1_sigalgs(SSL_CTX *ctx, const int *values, size_t num_values) {
|
596
|
+
Array<uint16_t> sigalgs;
|
597
|
+
if (!parse_sigalg_pairs(&sigalgs, values, num_values) ||
|
598
|
+
!sigalgs_unique(sigalgs)) {
|
599
|
+
return 0;
|
600
|
+
}
|
601
|
+
|
602
|
+
if (!SSL_CTX_set_signing_algorithm_prefs(ctx, sigalgs.data(),
|
603
|
+
sigalgs.size()) ||
|
604
|
+
!ctx->verify_sigalgs.CopyFrom(sigalgs)) {
|
471
605
|
return 0;
|
472
606
|
}
|
473
|
-
*out_num_prefs = num_prefs;
|
474
607
|
|
475
608
|
return 1;
|
476
609
|
}
|
477
610
|
|
478
|
-
int
|
479
|
-
|
480
|
-
|
481
|
-
|
611
|
+
int SSL_set1_sigalgs(SSL *ssl, const int *values, size_t num_values) {
|
612
|
+
if (!ssl->config) {
|
613
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
614
|
+
return 0;
|
615
|
+
}
|
616
|
+
|
617
|
+
Array<uint16_t> sigalgs;
|
618
|
+
if (!parse_sigalg_pairs(&sigalgs, values, num_values) ||
|
619
|
+
!sigalgs_unique(sigalgs)) {
|
620
|
+
return 0;
|
621
|
+
}
|
622
|
+
|
623
|
+
if (!SSL_set_signing_algorithm_prefs(ssl, sigalgs.data(), sigalgs.size()) ||
|
624
|
+
!ssl->config->verify_sigalgs.CopyFrom(sigalgs)) {
|
625
|
+
return 0;
|
626
|
+
}
|
627
|
+
|
628
|
+
return 1;
|
482
629
|
}
|
483
630
|
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
631
|
+
static bool parse_sigalgs_list(Array<uint16_t> *out, const char *str) {
|
632
|
+
// str looks like "RSA+SHA1:ECDSA+SHA256:ecdsa_secp256r1_sha256".
|
633
|
+
|
634
|
+
// Count colons to give the number of output elements from any successful
|
635
|
+
// parse.
|
636
|
+
size_t num_elements = 1;
|
637
|
+
size_t len = 0;
|
638
|
+
for (const char *p = str; *p; p++) {
|
639
|
+
len++;
|
640
|
+
if (*p == ':') {
|
641
|
+
num_elements++;
|
642
|
+
}
|
643
|
+
}
|
644
|
+
|
645
|
+
if (!out->Init(num_elements)) {
|
646
|
+
return false;
|
647
|
+
}
|
648
|
+
size_t out_i = 0;
|
649
|
+
|
650
|
+
enum {
|
651
|
+
pkey_or_name,
|
652
|
+
hash_name,
|
653
|
+
} state = pkey_or_name;
|
654
|
+
|
655
|
+
char buf[kMaxSignatureAlgorithmNameLen];
|
656
|
+
// buf_used is always < sizeof(buf). I.e. it's always safe to write
|
657
|
+
// buf[buf_used] = 0.
|
658
|
+
size_t buf_used = 0;
|
659
|
+
|
660
|
+
int pkey_type = 0, hash_nid = 0;
|
661
|
+
|
662
|
+
// Note that the loop runs to len+1, i.e. it'll process the terminating NUL.
|
663
|
+
for (size_t offset = 0; offset < len+1; offset++) {
|
664
|
+
const char c = str[offset];
|
665
|
+
|
666
|
+
switch (c) {
|
667
|
+
case '+':
|
668
|
+
if (state == hash_name) {
|
669
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SIGNATURE_ALGORITHM);
|
670
|
+
ERR_add_error_dataf("+ found in hash name at offset %zu", offset);
|
671
|
+
return false;
|
672
|
+
}
|
673
|
+
if (buf_used == 0) {
|
674
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SIGNATURE_ALGORITHM);
|
675
|
+
ERR_add_error_dataf("empty public key type at offset %zu", offset);
|
676
|
+
return false;
|
677
|
+
}
|
678
|
+
buf[buf_used] = 0;
|
679
|
+
|
680
|
+
if (strcmp(buf, "RSA") == 0) {
|
681
|
+
pkey_type = EVP_PKEY_RSA;
|
682
|
+
} else if (strcmp(buf, "RSA-PSS") == 0 ||
|
683
|
+
strcmp(buf, "PSS") == 0) {
|
684
|
+
pkey_type = EVP_PKEY_RSA_PSS;
|
685
|
+
} else if (strcmp(buf, "ECDSA") == 0) {
|
686
|
+
pkey_type = EVP_PKEY_EC;
|
687
|
+
} else {
|
688
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SIGNATURE_ALGORITHM);
|
689
|
+
ERR_add_error_dataf("unknown public key type '%s'", buf);
|
690
|
+
return false;
|
691
|
+
}
|
692
|
+
|
693
|
+
state = hash_name;
|
694
|
+
buf_used = 0;
|
695
|
+
break;
|
696
|
+
|
697
|
+
case ':':
|
698
|
+
OPENSSL_FALLTHROUGH;
|
699
|
+
case 0:
|
700
|
+
if (buf_used == 0) {
|
701
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SIGNATURE_ALGORITHM);
|
702
|
+
ERR_add_error_dataf("empty element at offset %zu", offset);
|
703
|
+
return false;
|
704
|
+
}
|
705
|
+
|
706
|
+
buf[buf_used] = 0;
|
707
|
+
|
708
|
+
if (state == pkey_or_name) {
|
709
|
+
// No '+' was seen thus this is a TLS 1.3-style name.
|
710
|
+
bool found = false;
|
711
|
+
for (const auto &candidate : kSignatureAlgorithmNames) {
|
712
|
+
if (strcmp(candidate.name, buf) == 0) {
|
713
|
+
assert(out_i < num_elements);
|
714
|
+
(*out)[out_i++] = candidate.signature_algorithm;
|
715
|
+
found = true;
|
716
|
+
break;
|
717
|
+
}
|
718
|
+
}
|
719
|
+
|
720
|
+
if (!found) {
|
721
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SIGNATURE_ALGORITHM);
|
722
|
+
ERR_add_error_dataf("unknown signature algorithm '%s'", buf);
|
723
|
+
return false;
|
724
|
+
}
|
725
|
+
} else {
|
726
|
+
if (strcmp(buf, "SHA1") == 0) {
|
727
|
+
hash_nid = NID_sha1;
|
728
|
+
} else if (strcmp(buf, "SHA256") == 0) {
|
729
|
+
hash_nid = NID_sha256;
|
730
|
+
} else if (strcmp(buf, "SHA384") == 0) {
|
731
|
+
hash_nid = NID_sha384;
|
732
|
+
} else if (strcmp(buf, "SHA512") == 0) {
|
733
|
+
hash_nid = NID_sha512;
|
734
|
+
} else {
|
735
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SIGNATURE_ALGORITHM);
|
736
|
+
ERR_add_error_dataf("unknown hash function '%s'", buf);
|
737
|
+
return false;
|
738
|
+
}
|
739
|
+
|
740
|
+
bool found = false;
|
741
|
+
for (const auto &candidate : kSignatureAlgorithmsMapping) {
|
742
|
+
if (candidate.pkey_type == pkey_type &&
|
743
|
+
candidate.hash_nid == hash_nid) {
|
744
|
+
assert(out_i < num_elements);
|
745
|
+
(*out)[out_i++] = candidate.signature_algorithm;
|
746
|
+
found = true;
|
747
|
+
break;
|
748
|
+
}
|
749
|
+
}
|
750
|
+
|
751
|
+
if (!found) {
|
752
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SIGNATURE_ALGORITHM);
|
753
|
+
ERR_add_error_dataf("unknown pkey:%d hash:%s", pkey_type, buf);
|
754
|
+
return false;
|
755
|
+
}
|
756
|
+
}
|
757
|
+
|
758
|
+
state = pkey_or_name;
|
759
|
+
buf_used = 0;
|
760
|
+
break;
|
761
|
+
|
762
|
+
default:
|
763
|
+
if (buf_used == sizeof(buf) - 1) {
|
764
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SIGNATURE_ALGORITHM);
|
765
|
+
ERR_add_error_dataf("substring too long at offset %zu", offset);
|
766
|
+
return false;
|
767
|
+
}
|
768
|
+
|
769
|
+
if ((c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') ||
|
770
|
+
(c >= 'A' && c <= 'Z') || c == '-' || c == '_') {
|
771
|
+
buf[buf_used++] = c;
|
772
|
+
} else {
|
773
|
+
OPENSSL_PUT_ERROR(SSL, SSL_R_INVALID_SIGNATURE_ALGORITHM);
|
774
|
+
ERR_add_error_dataf("invalid character 0x%02x at offest %zu", c,
|
775
|
+
offset);
|
776
|
+
return false;
|
777
|
+
}
|
778
|
+
}
|
779
|
+
}
|
780
|
+
|
781
|
+
assert(out_i == out->size());
|
782
|
+
return true;
|
783
|
+
}
|
784
|
+
|
785
|
+
int SSL_CTX_set1_sigalgs_list(SSL_CTX *ctx, const char *str) {
|
786
|
+
Array<uint16_t> sigalgs;
|
787
|
+
if (!parse_sigalgs_list(&sigalgs, str) ||
|
788
|
+
!sigalgs_unique(sigalgs)) {
|
789
|
+
return 0;
|
790
|
+
}
|
791
|
+
|
792
|
+
if (!SSL_CTX_set_signing_algorithm_prefs(ctx, sigalgs.data(),
|
793
|
+
sigalgs.size()) ||
|
794
|
+
!ctx->verify_sigalgs.CopyFrom(sigalgs)) {
|
795
|
+
return 0;
|
796
|
+
}
|
797
|
+
|
798
|
+
return 1;
|
799
|
+
}
|
800
|
+
|
801
|
+
int SSL_set1_sigalgs_list(SSL *ssl, const char *str) {
|
802
|
+
if (!ssl->config) {
|
803
|
+
OPENSSL_PUT_ERROR(SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
|
804
|
+
return 0;
|
805
|
+
}
|
806
|
+
|
807
|
+
Array<uint16_t> sigalgs;
|
808
|
+
if (!parse_sigalgs_list(&sigalgs, str) ||
|
809
|
+
!sigalgs_unique(sigalgs)) {
|
810
|
+
return 0;
|
811
|
+
}
|
812
|
+
|
813
|
+
if (!SSL_set_signing_algorithm_prefs(ssl, sigalgs.data(), sigalgs.size()) ||
|
814
|
+
!ssl->config->verify_sigalgs.CopyFrom(sigalgs)) {
|
815
|
+
return 0;
|
816
|
+
}
|
817
|
+
|
818
|
+
return 1;
|
488
819
|
}
|
489
820
|
|
490
821
|
int SSL_CTX_set_verify_algorithm_prefs(SSL_CTX *ctx, const uint16_t *prefs,
|
491
822
|
size_t num_prefs) {
|
492
|
-
return
|
493
|
-
prefs, num_prefs);
|
823
|
+
return ctx->verify_sigalgs.CopyFrom(MakeConstSpan(prefs, num_prefs));
|
494
824
|
}
|