grpc 1.24.0 → 1.25.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +306 -243
- data/etc/roots.pem +0 -100
- data/include/grpc/grpc_security.h +44 -18
- data/include/grpc/impl/codegen/grpc_types.h +15 -0
- data/include/grpc/impl/codegen/port_platform.h +27 -11
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/src/boringssl/err_data.c +695 -650
- data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
- data/src/core/ext/filters/client_channel/client_channel.h +24 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
- data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
- data/src/core/ext/filters/client_channel/resolver.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver.h +8 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
- data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
- data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
- data/src/core/ext/filters/client_channel/service_config.h +8 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
- data/src/core/ext/filters/client_channel/subchannel.h +7 -9
- data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
- data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
- data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
- data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
- data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
- data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
- data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
- data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
- data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
- data/src/core/lib/channel/channel_args.cc +16 -0
- data/src/core/lib/channel/channel_args.h +22 -0
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +20 -20
- data/src/core/lib/channel/handshaker.h +3 -4
- data/src/core/lib/channel/handshaker_factory.h +1 -3
- data/src/core/lib/debug/trace.h +3 -2
- data/src/core/lib/gprpp/arena.cc +3 -3
- data/src/core/lib/gprpp/arena.h +2 -3
- data/src/core/lib/gprpp/inlined_vector.h +9 -0
- data/src/core/lib/gprpp/map.h +3 -501
- data/src/core/lib/gprpp/memory.h +45 -41
- data/src/core/lib/gprpp/mpscq.cc +108 -0
- data/src/core/lib/gprpp/mpscq.h +98 -0
- data/src/core/lib/gprpp/orphanable.h +6 -11
- data/src/core/lib/gprpp/ref_counted.h +25 -19
- data/src/core/lib/gprpp/set.h +33 -0
- data/src/core/lib/gprpp/thd.h +2 -4
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli_security_connector.cc +15 -11
- data/src/core/lib/http/parser.cc +1 -1
- data/src/core/lib/iomgr/buffer_list.cc +4 -5
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +4 -5
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.h +3 -5
- data/src/core/lib/iomgr/closure.h +8 -3
- data/src/core/lib/iomgr/combiner.cc +45 -82
- data/src/core/lib/iomgr/combiner.h +32 -8
- data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
- data/src/core/lib/iomgr/exec_ctx.h +4 -3
- data/src/core/lib/iomgr/executor.cc +4 -2
- data/src/core/lib/iomgr/executor.h +3 -0
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
- data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
- data/src/core/lib/iomgr/executor/threadpool.h +7 -11
- data/src/core/lib/iomgr/resource_quota.cc +55 -51
- data/src/core/lib/iomgr/resource_quota.h +13 -9
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
- data/src/core/lib/iomgr/tcp_custom.cc +9 -7
- data/src/core/lib/iomgr/tcp_posix.cc +20 -16
- data/src/core/lib/iomgr/tcp_server.h +1 -4
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/udp_server.cc +3 -2
- data/src/core/lib/iomgr/udp_server.h +6 -12
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_string.cc +2 -2
- data/src/core/lib/profiling/basic_timers.cc +2 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +4 -20
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/security_connector.h +19 -17
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
- data/src/core/lib/security/transport/security_handshaker.cc +29 -13
- data/src/core/lib/security/transport/security_handshaker.h +4 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
- data/src/core/lib/slice/slice.cc +2 -10
- data/src/core/lib/slice/slice_hash_table.h +4 -6
- data/src/core/lib/slice/slice_intern.cc +42 -39
- data/src/core/lib/slice/slice_internal.h +3 -3
- data/src/core/lib/slice/slice_utils.h +21 -4
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
- data/src/core/lib/surface/call.cc +3 -3
- data/src/core/lib/surface/channel.cc +7 -0
- data/src/core/lib/surface/completion_queue.cc +12 -11
- data/src/core/lib/surface/completion_queue.h +4 -2
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/lame_client.cc +33 -18
- data/src/core/lib/surface/server.cc +77 -76
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -7
- data/src/core/lib/transport/connectivity_state.cc +112 -98
- data/src/core/lib/transport/connectivity_state.h +100 -50
- data/src/core/lib/transport/static_metadata.cc +276 -288
- data/src/core/lib/transport/static_metadata.h +73 -76
- data/src/core/lib/transport/status_conversion.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +1 -1
- data/src/core/lib/transport/transport.cc +2 -2
- data/src/core/lib/transport/transport.h +12 -4
- data/src/core/lib/transport/transport_op_string.cc +14 -11
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
- data/src/core/tsi/fake_transport_security.cc +7 -5
- data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
- data/src/core/tsi/local_transport_security.cc +8 -6
- data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +12 -12
- data/src/core/tsi/ssl_transport_security.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +7 -0
- data/src/core/tsi/transport_security_grpc.h +6 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -1
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
- data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
- data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
- data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
- data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
- data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
- data/third_party/boringssl/crypto/base64/base64.c +2 -2
- data/third_party/boringssl/crypto/bio/bio.c +73 -9
- data/third_party/boringssl/crypto/bio/connect.c +4 -0
- data/third_party/boringssl/crypto/bio/fd.c +4 -0
- data/third_party/boringssl/crypto/bio/file.c +5 -2
- data/third_party/boringssl/crypto/bio/socket.c +4 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
- data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
- data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
- data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
- data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
- data/third_party/boringssl/crypto/chacha/internal.h +45 -0
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
- data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
- data/third_party/boringssl/crypto/conf/conf.c +7 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
- data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
- data/third_party/boringssl/crypto/cpu-intel.c +45 -51
- data/third_party/boringssl/crypto/crypto.c +39 -22
- data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
- data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
- data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
- data/third_party/boringssl/crypto/engine/engine.c +2 -1
- data/third_party/boringssl/crypto/err/err.c +2 -0
- data/third_party/boringssl/crypto/err/internal.h +2 -2
- data/third_party/boringssl/crypto/evp/evp.c +89 -8
- data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
- data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
- data/third_party/boringssl/crypto/evp/internal.h +18 -1
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
- data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
- data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
- data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
- data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
- data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
- data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
- data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
- data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
- data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
- data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
- data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
- data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
- data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
- data/third_party/boringssl/crypto/hrss/internal.h +62 -0
- data/third_party/boringssl/crypto/internal.h +95 -20
- data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
- data/third_party/boringssl/crypto/mem.c +39 -2
- data/third_party/boringssl/crypto/obj/obj.c +4 -4
- data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
- data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
- data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
- data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
- data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
- data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
- data/third_party/boringssl/crypto/pool/internal.h +1 -1
- data/third_party/boringssl/crypto/pool/pool.c +21 -0
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
- data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
- data/third_party/boringssl/crypto/stack/stack.c +83 -32
- data/third_party/boringssl/crypto/thread_none.c +2 -2
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +38 -19
- data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
- data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
- data/third_party/boringssl/crypto/x509/by_file.c +12 -10
- data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
- data/third_party/boringssl/crypto/x509/t_req.c +1 -3
- data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
- data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
- data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
- data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
- data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
- data/third_party/boringssl/crypto/x509/x509name.c +2 -3
- data/third_party/boringssl/crypto/x509/x_all.c +109 -210
- data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
- data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
- data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
- data/third_party/boringssl/include/openssl/aead.h +45 -19
- data/third_party/boringssl/include/openssl/aes.h +32 -7
- data/third_party/boringssl/include/openssl/asn1.h +7 -77
- data/third_party/boringssl/include/openssl/base.h +120 -6
- data/third_party/boringssl/include/openssl/base64.h +4 -1
- data/third_party/boringssl/include/openssl/bio.h +112 -81
- data/third_party/boringssl/include/openssl/blowfish.h +3 -3
- data/third_party/boringssl/include/openssl/bn.h +55 -29
- data/third_party/boringssl/include/openssl/buf.h +2 -2
- data/third_party/boringssl/include/openssl/bytestring.h +54 -32
- data/third_party/boringssl/include/openssl/cast.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +46 -16
- data/third_party/boringssl/include/openssl/cmac.h +6 -2
- data/third_party/boringssl/include/openssl/conf.h +3 -6
- data/third_party/boringssl/include/openssl/cpu.h +25 -9
- data/third_party/boringssl/include/openssl/crypto.h +32 -10
- data/third_party/boringssl/include/openssl/curve25519.h +4 -4
- data/third_party/boringssl/include/openssl/dh.h +3 -2
- data/third_party/boringssl/include/openssl/digest.h +21 -7
- data/third_party/boringssl/include/openssl/dsa.h +8 -2
- data/third_party/boringssl/include/openssl/e_os2.h +18 -0
- data/third_party/boringssl/include/openssl/ec.h +25 -21
- data/third_party/boringssl/include/openssl/ec_key.h +36 -8
- data/third_party/boringssl/include/openssl/ecdh.h +17 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
- data/third_party/boringssl/include/openssl/engine.h +4 -4
- data/third_party/boringssl/include/openssl/err.h +3 -0
- data/third_party/boringssl/include/openssl/evp.h +199 -42
- data/third_party/boringssl/include/openssl/hmac.h +4 -4
- data/third_party/boringssl/include/openssl/hrss.h +100 -0
- data/third_party/boringssl/include/openssl/lhash.h +131 -23
- data/third_party/boringssl/include/openssl/md4.h +6 -4
- data/third_party/boringssl/include/openssl/md5.h +6 -4
- data/third_party/boringssl/include/openssl/mem.h +6 -2
- data/third_party/boringssl/include/openssl/nid.h +3 -0
- data/third_party/boringssl/include/openssl/obj.h +3 -0
- data/third_party/boringssl/include/openssl/pem.h +102 -64
- data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
- data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
- data/third_party/boringssl/include/openssl/pool.h +13 -2
- data/third_party/boringssl/include/openssl/ripemd.h +5 -4
- data/third_party/boringssl/include/openssl/rsa.h +46 -15
- data/third_party/boringssl/include/openssl/sha.h +40 -28
- data/third_party/boringssl/include/openssl/siphash.h +37 -0
- data/third_party/boringssl/include/openssl/span.h +17 -9
- data/third_party/boringssl/include/openssl/ssl.h +766 -393
- data/third_party/boringssl/include/openssl/ssl3.h +4 -3
- data/third_party/boringssl/include/openssl/stack.h +134 -77
- data/third_party/boringssl/include/openssl/thread.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +25 -9
- data/third_party/boringssl/include/openssl/type_check.h +14 -15
- data/third_party/boringssl/include/openssl/x509.h +28 -3
- data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
- data/third_party/boringssl/include/openssl/x509v3.h +17 -13
- data/third_party/boringssl/ssl/d1_both.cc +9 -18
- data/third_party/boringssl/ssl/d1_lib.cc +4 -3
- data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
- data/third_party/boringssl/ssl/dtls_method.cc +0 -1
- data/third_party/boringssl/ssl/dtls_record.cc +28 -28
- data/third_party/boringssl/ssl/handoff.cc +295 -91
- data/third_party/boringssl/ssl/handshake.cc +133 -72
- data/third_party/boringssl/ssl/handshake_client.cc +218 -189
- data/third_party/boringssl/ssl/handshake_server.cc +399 -272
- data/third_party/boringssl/ssl/internal.h +1413 -928
- data/third_party/boringssl/ssl/s3_both.cc +175 -36
- data/third_party/boringssl/ssl/s3_lib.cc +9 -13
- data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
- data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
- data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
- data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
- data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
- data/third_party/boringssl/ssl/ssl_file.cc +2 -0
- data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
- data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
- data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
- data/third_party/boringssl/ssl/ssl_session.cc +230 -178
- data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
- data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
- data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
- data/third_party/boringssl/ssl/t1_enc.cc +5 -96
- data/third_party/boringssl/ssl/t1_lib.cc +931 -678
- data/third_party/boringssl/ssl/tls13_both.cc +251 -121
- data/third_party/boringssl/ssl/tls13_client.cc +129 -73
- data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
- data/third_party/boringssl/ssl/tls13_server.cc +259 -192
- data/third_party/boringssl/ssl/tls_method.cc +26 -21
- data/third_party/boringssl/ssl/tls_record.cc +42 -47
- data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
- data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
- data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
- data/third_party/boringssl/third_party/fiat/p256.c +238 -999
- data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
- data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +2 -1
- metadata +71 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
- data/src/core/lib/gpr/mpscq.cc +0 -117
- data/src/core/lib/gpr/mpscq.h +0 -88
- data/src/core/lib/gprpp/abstract.h +0 -47
- data/src/core/lib/gprpp/pair.h +0 -38
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
- data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
- data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -159,8 +159,8 @@ EC_KEY *EC_KEY_parse_private_key(CBS *cbs, const EC_GROUP *group) {
|
|
159
159
|
(point_conversion_form_t)(CBS_data(&public_key)[0] & ~0x01);
|
160
160
|
} else {
|
161
161
|
// Compute the public key instead.
|
162
|
-
if (!
|
163
|
-
|
162
|
+
if (!ec_point_mul_scalar_base(group, &ret->pub_key->raw,
|
163
|
+
&ret->priv_key->scalar)) {
|
164
164
|
goto err;
|
165
165
|
}
|
166
166
|
// Remember the original private-key-only encoding.
|
@@ -264,7 +264,8 @@ static int parse_explicit_prime_curve(CBS *in, CBS *out_prime, CBS *out_a,
|
|
264
264
|
CBS *out_base_y, CBS *out_order) {
|
265
265
|
// See RFC 3279, section 2.3.5. Note that RFC 3279 calls this structure an
|
266
266
|
// ECParameters while RFC 5480 calls it a SpecifiedECDomain.
|
267
|
-
CBS params, field_id, field_type, curve, base;
|
267
|
+
CBS params, field_id, field_type, curve, base, cofactor;
|
268
|
+
int has_cofactor;
|
268
269
|
uint64_t version;
|
269
270
|
if (!CBS_get_asn1(in, ¶ms, CBS_ASN1_SEQUENCE) ||
|
270
271
|
!CBS_get_asn1_uint64(¶ms, &version) ||
|
@@ -272,7 +273,8 @@ static int parse_explicit_prime_curve(CBS *in, CBS *out_prime, CBS *out_a,
|
|
272
273
|
!CBS_get_asn1(¶ms, &field_id, CBS_ASN1_SEQUENCE) ||
|
273
274
|
!CBS_get_asn1(&field_id, &field_type, CBS_ASN1_OBJECT) ||
|
274
275
|
CBS_len(&field_type) != sizeof(kPrimeField) ||
|
275
|
-
OPENSSL_memcmp(CBS_data(&field_type), kPrimeField, sizeof(kPrimeField)) !=
|
276
|
+
OPENSSL_memcmp(CBS_data(&field_type), kPrimeField, sizeof(kPrimeField)) !=
|
277
|
+
0 ||
|
276
278
|
!CBS_get_asn1(&field_id, out_prime, CBS_ASN1_INTEGER) ||
|
277
279
|
!is_unsigned_integer(out_prime) ||
|
278
280
|
CBS_len(&field_id) != 0 ||
|
@@ -280,16 +282,26 @@ static int parse_explicit_prime_curve(CBS *in, CBS *out_prime, CBS *out_a,
|
|
280
282
|
!CBS_get_asn1(&curve, out_a, CBS_ASN1_OCTETSTRING) ||
|
281
283
|
!CBS_get_asn1(&curve, out_b, CBS_ASN1_OCTETSTRING) ||
|
282
284
|
// |curve| has an optional BIT STRING seed which we ignore.
|
285
|
+
!CBS_get_optional_asn1(&curve, NULL, NULL, CBS_ASN1_BITSTRING) ||
|
286
|
+
CBS_len(&curve) != 0 ||
|
283
287
|
!CBS_get_asn1(¶ms, &base, CBS_ASN1_OCTETSTRING) ||
|
284
288
|
!CBS_get_asn1(¶ms, out_order, CBS_ASN1_INTEGER) ||
|
285
|
-
!is_unsigned_integer(out_order)
|
289
|
+
!is_unsigned_integer(out_order) ||
|
290
|
+
!CBS_get_optional_asn1(¶ms, &cofactor, &has_cofactor,
|
291
|
+
CBS_ASN1_INTEGER) ||
|
292
|
+
CBS_len(¶ms) != 0) {
|
286
293
|
OPENSSL_PUT_ERROR(EC, EC_R_DECODE_ERROR);
|
287
294
|
return 0;
|
288
295
|
}
|
289
296
|
|
290
|
-
|
291
|
-
|
292
|
-
|
297
|
+
if (has_cofactor) {
|
298
|
+
// We only support prime-order curves so the cofactor must be one.
|
299
|
+
if (CBS_len(&cofactor) != 1 ||
|
300
|
+
CBS_data(&cofactor)[0] != 1) {
|
301
|
+
OPENSSL_PUT_ERROR(EC, EC_R_UNKNOWN_GROUP);
|
302
|
+
return 0;
|
303
|
+
}
|
304
|
+
}
|
293
305
|
|
294
306
|
// Require that the base point use uncompressed form.
|
295
307
|
uint8_t form;
|
@@ -0,0 +1,96 @@
|
|
1
|
+
/* Copyright (c) 2019, Google Inc.
|
2
|
+
*
|
3
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
4
|
+
* purpose with or without fee is hereby granted, provided that the above
|
5
|
+
* copyright notice and this permission notice appear in all copies.
|
6
|
+
*
|
7
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
10
|
+
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
12
|
+
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
|
+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
|
+
|
15
|
+
#include <openssl/ec_key.h>
|
16
|
+
|
17
|
+
#include <string.h>
|
18
|
+
|
19
|
+
#include <openssl/buf.h>
|
20
|
+
#include <openssl/ec.h>
|
21
|
+
#include <openssl/err.h>
|
22
|
+
#include <openssl/digest.h>
|
23
|
+
#include <openssl/hkdf.h>
|
24
|
+
#include <openssl/mem.h>
|
25
|
+
|
26
|
+
#include "../fipsmodule/ec/internal.h"
|
27
|
+
|
28
|
+
|
29
|
+
EC_KEY *EC_KEY_derive_from_secret(const EC_GROUP *group, const uint8_t *secret,
|
30
|
+
size_t secret_len) {
|
31
|
+
#define EC_KEY_DERIVE_MAX_NAME_LEN 16
|
32
|
+
const char *name = EC_curve_nid2nist(EC_GROUP_get_curve_name(group));
|
33
|
+
if (name == NULL || strlen(name) > EC_KEY_DERIVE_MAX_NAME_LEN) {
|
34
|
+
OPENSSL_PUT_ERROR(EC, EC_R_UNKNOWN_GROUP);
|
35
|
+
return NULL;
|
36
|
+
}
|
37
|
+
|
38
|
+
// Assemble a label string to provide some key separation in case |secret| is
|
39
|
+
// misused, but ultimately it's on the caller to ensure |secret| is suitably
|
40
|
+
// separated.
|
41
|
+
static const char kLabel[] = "derive EC key ";
|
42
|
+
char info[sizeof(kLabel) + EC_KEY_DERIVE_MAX_NAME_LEN];
|
43
|
+
BUF_strlcpy(info, kLabel, sizeof(info));
|
44
|
+
BUF_strlcat(info, name, sizeof(info));
|
45
|
+
|
46
|
+
// Generate 128 bits beyond the group order so the bias is at most 2^-128.
|
47
|
+
#define EC_KEY_DERIVE_EXTRA_BITS 128
|
48
|
+
#define EC_KEY_DERIVE_EXTRA_BYTES (EC_KEY_DERIVE_EXTRA_BITS / 8)
|
49
|
+
|
50
|
+
if (EC_GROUP_order_bits(group) <= EC_KEY_DERIVE_EXTRA_BITS + 8) {
|
51
|
+
// The reduction strategy below requires the group order be large enough.
|
52
|
+
// (The actual bound is a bit tighter, but our curves are much larger than
|
53
|
+
// 128-bit.)
|
54
|
+
OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
|
55
|
+
return NULL;
|
56
|
+
}
|
57
|
+
|
58
|
+
uint8_t derived[EC_KEY_DERIVE_EXTRA_BYTES + EC_MAX_BYTES];
|
59
|
+
size_t derived_len = BN_num_bytes(&group->order) + EC_KEY_DERIVE_EXTRA_BYTES;
|
60
|
+
assert(derived_len <= sizeof(derived));
|
61
|
+
if (!HKDF(derived, derived_len, EVP_sha256(), secret, secret_len,
|
62
|
+
/*salt=*/NULL, /*salt_len=*/0, (const uint8_t *)info,
|
63
|
+
strlen(info))) {
|
64
|
+
return NULL;
|
65
|
+
}
|
66
|
+
|
67
|
+
EC_KEY *key = EC_KEY_new();
|
68
|
+
BN_CTX *ctx = BN_CTX_new();
|
69
|
+
BIGNUM *priv = BN_bin2bn(derived, derived_len, NULL);
|
70
|
+
EC_POINT *pub = EC_POINT_new(group);
|
71
|
+
if (key == NULL || ctx == NULL || priv == NULL || pub == NULL ||
|
72
|
+
// Reduce |priv| with Montgomery reduction. First, convert "from"
|
73
|
+
// Montgomery form to compute |priv| * R^-1 mod |order|. This requires
|
74
|
+
// |priv| be under order * R, which is true if the group order is large
|
75
|
+
// enough. 2^(num_bytes(order)) < 2^8 * order, so:
|
76
|
+
//
|
77
|
+
// priv < 2^8 * order * 2^128 < order * order < order * R
|
78
|
+
!BN_from_montgomery(priv, priv, group->order_mont, ctx) ||
|
79
|
+
// Multiply by R^2 and do another Montgomery reduction to compute
|
80
|
+
// priv * R^-1 * R^2 * R^-1 = priv mod order.
|
81
|
+
!BN_to_montgomery(priv, priv, group->order_mont, ctx) ||
|
82
|
+
!EC_POINT_mul(group, pub, priv, NULL, NULL, ctx) ||
|
83
|
+
!EC_KEY_set_group(key, group) || !EC_KEY_set_public_key(key, pub) ||
|
84
|
+
!EC_KEY_set_private_key(key, priv)) {
|
85
|
+
EC_KEY_free(key);
|
86
|
+
key = NULL;
|
87
|
+
goto err;
|
88
|
+
}
|
89
|
+
|
90
|
+
err:
|
91
|
+
OPENSSL_cleanse(derived, sizeof(derived));
|
92
|
+
BN_CTX_free(ctx);
|
93
|
+
BN_free(priv);
|
94
|
+
EC_POINT_free(pub);
|
95
|
+
return key;
|
96
|
+
}
|
@@ -69,7 +69,6 @@
|
|
69
69
|
#include <limits.h>
|
70
70
|
#include <string.h>
|
71
71
|
|
72
|
-
#include <openssl/bn.h>
|
73
72
|
#include <openssl/digest.h>
|
74
73
|
#include <openssl/err.h>
|
75
74
|
#include <openssl/mem.h>
|
@@ -78,85 +77,48 @@
|
|
78
77
|
#include "../internal.h"
|
79
78
|
|
80
79
|
|
81
|
-
int ECDH_compute_key(void *out, size_t
|
80
|
+
int ECDH_compute_key(void *out, size_t out_len, const EC_POINT *pub_key,
|
82
81
|
const EC_KEY *priv_key,
|
83
82
|
void *(*kdf)(const void *in, size_t inlen, void *out,
|
84
|
-
size_t *
|
83
|
+
size_t *out_len)) {
|
85
84
|
if (priv_key->priv_key == NULL) {
|
86
85
|
OPENSSL_PUT_ERROR(ECDH, ECDH_R_NO_PRIVATE_VALUE);
|
87
86
|
return -1;
|
88
87
|
}
|
89
88
|
const EC_SCALAR *const priv = &priv_key->priv_key->scalar;
|
90
|
-
|
91
|
-
BN_CTX *ctx = BN_CTX_new();
|
92
|
-
if (ctx == NULL) {
|
93
|
-
return -1;
|
94
|
-
}
|
95
|
-
BN_CTX_start(ctx);
|
96
|
-
|
97
|
-
int ret = -1;
|
98
|
-
size_t buflen = 0;
|
99
|
-
uint8_t *buf = NULL;
|
100
|
-
|
101
89
|
const EC_GROUP *const group = EC_KEY_get0_group(priv_key);
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
goto err;
|
106
|
-
}
|
107
|
-
|
108
|
-
if (!ec_point_mul_scalar(group, tmp, NULL, pub_key, priv, ctx)) {
|
109
|
-
OPENSSL_PUT_ERROR(ECDH, ECDH_R_POINT_ARITHMETIC_FAILURE);
|
110
|
-
goto err;
|
111
|
-
}
|
112
|
-
|
113
|
-
BIGNUM *x = BN_CTX_get(ctx);
|
114
|
-
if (!x) {
|
115
|
-
OPENSSL_PUT_ERROR(ECDH, ERR_R_MALLOC_FAILURE);
|
116
|
-
goto err;
|
90
|
+
if (EC_GROUP_cmp(group, pub_key->group, NULL) != 0) {
|
91
|
+
OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS);
|
92
|
+
return -1;
|
117
93
|
}
|
118
94
|
|
119
|
-
|
95
|
+
EC_RAW_POINT shared_point;
|
96
|
+
uint8_t buf[EC_MAX_BYTES];
|
97
|
+
size_t buf_len;
|
98
|
+
if (!ec_point_mul_scalar(group, &shared_point, &pub_key->raw, priv) ||
|
99
|
+
!ec_point_get_affine_coordinate_bytes(group, buf, NULL, &buf_len,
|
100
|
+
sizeof(buf), &shared_point)) {
|
120
101
|
OPENSSL_PUT_ERROR(ECDH, ECDH_R_POINT_ARITHMETIC_FAILURE);
|
121
|
-
|
122
|
-
}
|
123
|
-
|
124
|
-
buflen = (EC_GROUP_get_degree(group) + 7) / 8;
|
125
|
-
buf = OPENSSL_malloc(buflen);
|
126
|
-
if (buf == NULL) {
|
127
|
-
OPENSSL_PUT_ERROR(ECDH, ERR_R_MALLOC_FAILURE);
|
128
|
-
goto err;
|
129
|
-
}
|
130
|
-
|
131
|
-
if (!BN_bn2bin_padded(buf, buflen, x)) {
|
132
|
-
OPENSSL_PUT_ERROR(ECDH, ERR_R_INTERNAL_ERROR);
|
133
|
-
goto err;
|
102
|
+
return -1;
|
134
103
|
}
|
135
104
|
|
136
105
|
if (kdf != NULL) {
|
137
|
-
if (kdf(buf,
|
106
|
+
if (kdf(buf, buf_len, out, &out_len) == NULL) {
|
138
107
|
OPENSSL_PUT_ERROR(ECDH, ECDH_R_KDF_FAILED);
|
139
|
-
|
108
|
+
return -1;
|
140
109
|
}
|
141
110
|
} else {
|
142
111
|
// no KDF, just copy as much as we can
|
143
|
-
if (
|
144
|
-
|
112
|
+
if (buf_len < out_len) {
|
113
|
+
out_len = buf_len;
|
145
114
|
}
|
146
|
-
OPENSSL_memcpy(out, buf,
|
115
|
+
OPENSSL_memcpy(out, buf, out_len);
|
147
116
|
}
|
148
117
|
|
149
|
-
if (
|
118
|
+
if (out_len > INT_MAX) {
|
150
119
|
OPENSSL_PUT_ERROR(ECDH, ERR_R_OVERFLOW);
|
151
|
-
|
120
|
+
return -1;
|
152
121
|
}
|
153
122
|
|
154
|
-
|
155
|
-
|
156
|
-
err:
|
157
|
-
OPENSSL_free(buf);
|
158
|
-
EC_POINT_free(tmp);
|
159
|
-
BN_CTX_end(ctx);
|
160
|
-
BN_CTX_free(ctx);
|
161
|
-
return ret;
|
123
|
+
return (int)out_len;
|
162
124
|
}
|
@@ -74,15 +74,7 @@ int ECDSA_sign(int type, const uint8_t *digest, size_t digest_len, uint8_t *sig,
|
|
74
74
|
}
|
75
75
|
|
76
76
|
int ret = 0;
|
77
|
-
ECDSA_SIG *s =
|
78
|
-
|
79
|
-
if (eckey->ecdsa_meth && eckey->ecdsa_meth->sign) {
|
80
|
-
OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_NOT_IMPLEMENTED);
|
81
|
-
*sig_len = 0;
|
82
|
-
goto err;
|
83
|
-
}
|
84
|
-
|
85
|
-
s = ECDSA_do_sign(digest, digest_len, eckey);
|
77
|
+
ECDSA_SIG *s = ECDSA_do_sign(digest, digest_len, eckey);
|
86
78
|
if (s == NULL) {
|
87
79
|
*sig_len = 0;
|
88
80
|
goto err;
|
@@ -41,9 +41,10 @@ ENGINE *ENGINE_new(void) {
|
|
41
41
|
return engine;
|
42
42
|
}
|
43
43
|
|
44
|
-
|
44
|
+
int ENGINE_free(ENGINE *engine) {
|
45
45
|
// Methods are currently required to be static so are not unref'ed.
|
46
46
|
OPENSSL_free(engine);
|
47
|
+
return 1;
|
47
48
|
}
|
48
49
|
|
49
50
|
// set_method takes a pointer to a method and its given size and sets
|
@@ -46,11 +46,11 @@ OPENSSL_EXPORT void ERR_restore_state(const ERR_SAVE_STATE *state);
|
|
46
46
|
|
47
47
|
extern "C++" {
|
48
48
|
|
49
|
-
|
49
|
+
BSSL_NAMESPACE_BEGIN
|
50
50
|
|
51
51
|
BORINGSSL_MAKE_DELETER(ERR_SAVE_STATE, ERR_SAVE_STATE_free)
|
52
52
|
|
53
|
-
|
53
|
+
BSSL_NAMESPACE_END
|
54
54
|
|
55
55
|
} // extern C++
|
56
56
|
#endif
|
@@ -71,6 +71,11 @@
|
|
71
71
|
#include "../internal.h"
|
72
72
|
|
73
73
|
|
74
|
+
// Node depends on |EVP_R_NOT_XOF_OR_INVALID_LENGTH|.
|
75
|
+
//
|
76
|
+
// TODO(davidben): Fix Node to not touch the error queue itself and remove this.
|
77
|
+
OPENSSL_DECLARE_ERROR_REASON(EVP, NOT_XOF_OR_INVALID_LENGTH)
|
78
|
+
|
74
79
|
EVP_PKEY *EVP_PKEY_new(void) {
|
75
80
|
EVP_PKEY *ret;
|
76
81
|
|
@@ -176,7 +181,7 @@ int EVP_PKEY_size(const EVP_PKEY *pkey) {
|
|
176
181
|
return 0;
|
177
182
|
}
|
178
183
|
|
179
|
-
int EVP_PKEY_bits(EVP_PKEY *pkey) {
|
184
|
+
int EVP_PKEY_bits(const EVP_PKEY *pkey) {
|
180
185
|
if (pkey && pkey->ameth && pkey->ameth->pkey_bits) {
|
181
186
|
return pkey->ameth->pkey_bits(pkey);
|
182
187
|
}
|
@@ -200,6 +205,8 @@ static const EVP_PKEY_ASN1_METHOD *evp_pkey_asn1_find(int nid) {
|
|
200
205
|
return &dsa_asn1_meth;
|
201
206
|
case EVP_PKEY_ED25519:
|
202
207
|
return &ed25519_asn1_meth;
|
208
|
+
case EVP_PKEY_X25519:
|
209
|
+
return &x25519_asn1_meth;
|
203
210
|
default:
|
204
211
|
return NULL;
|
205
212
|
}
|
@@ -225,7 +232,7 @@ int EVP_PKEY_assign_RSA(EVP_PKEY *pkey, RSA *key) {
|
|
225
232
|
return EVP_PKEY_assign(pkey, EVP_PKEY_RSA, key);
|
226
233
|
}
|
227
234
|
|
228
|
-
RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey) {
|
235
|
+
RSA *EVP_PKEY_get0_RSA(const EVP_PKEY *pkey) {
|
229
236
|
if (pkey->type != EVP_PKEY_RSA) {
|
230
237
|
OPENSSL_PUT_ERROR(EVP, EVP_R_EXPECTING_AN_RSA_KEY);
|
231
238
|
return NULL;
|
@@ -233,7 +240,7 @@ RSA *EVP_PKEY_get0_RSA(EVP_PKEY *pkey) {
|
|
233
240
|
return pkey->pkey.rsa;
|
234
241
|
}
|
235
242
|
|
236
|
-
RSA *EVP_PKEY_get1_RSA(EVP_PKEY *pkey) {
|
243
|
+
RSA *EVP_PKEY_get1_RSA(const EVP_PKEY *pkey) {
|
237
244
|
RSA *rsa = EVP_PKEY_get0_RSA(pkey);
|
238
245
|
if (rsa != NULL) {
|
239
246
|
RSA_up_ref(rsa);
|
@@ -253,7 +260,7 @@ int EVP_PKEY_assign_DSA(EVP_PKEY *pkey, DSA *key) {
|
|
253
260
|
return EVP_PKEY_assign(pkey, EVP_PKEY_DSA, key);
|
254
261
|
}
|
255
262
|
|
256
|
-
DSA *EVP_PKEY_get0_DSA(EVP_PKEY *pkey) {
|
263
|
+
DSA *EVP_PKEY_get0_DSA(const EVP_PKEY *pkey) {
|
257
264
|
if (pkey->type != EVP_PKEY_DSA) {
|
258
265
|
OPENSSL_PUT_ERROR(EVP, EVP_R_EXPECTING_A_DSA_KEY);
|
259
266
|
return NULL;
|
@@ -261,7 +268,7 @@ DSA *EVP_PKEY_get0_DSA(EVP_PKEY *pkey) {
|
|
261
268
|
return pkey->pkey.dsa;
|
262
269
|
}
|
263
270
|
|
264
|
-
DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey) {
|
271
|
+
DSA *EVP_PKEY_get1_DSA(const EVP_PKEY *pkey) {
|
265
272
|
DSA *dsa = EVP_PKEY_get0_DSA(pkey);
|
266
273
|
if (dsa != NULL) {
|
267
274
|
DSA_up_ref(dsa);
|
@@ -281,7 +288,7 @@ int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key) {
|
|
281
288
|
return EVP_PKEY_assign(pkey, EVP_PKEY_EC, key);
|
282
289
|
}
|
283
290
|
|
284
|
-
EC_KEY *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey) {
|
291
|
+
EC_KEY *EVP_PKEY_get0_EC_KEY(const EVP_PKEY *pkey) {
|
285
292
|
if (pkey->type != EVP_PKEY_EC) {
|
286
293
|
OPENSSL_PUT_ERROR(EVP, EVP_R_EXPECTING_AN_EC_KEY_KEY);
|
287
294
|
return NULL;
|
@@ -289,7 +296,7 @@ EC_KEY *EVP_PKEY_get0_EC_KEY(EVP_PKEY *pkey) {
|
|
289
296
|
return pkey->pkey.ec;
|
290
297
|
}
|
291
298
|
|
292
|
-
EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey) {
|
299
|
+
EC_KEY *EVP_PKEY_get1_EC_KEY(const EVP_PKEY *pkey) {
|
293
300
|
EC_KEY *ec_key = EVP_PKEY_get0_EC_KEY(pkey);
|
294
301
|
if (ec_key != NULL) {
|
295
302
|
EC_KEY_up_ref(ec_key);
|
@@ -297,7 +304,8 @@ EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey) {
|
|
297
304
|
return ec_key;
|
298
305
|
}
|
299
306
|
|
300
|
-
DH *EVP_PKEY_get0_DH(EVP_PKEY *pkey) { return NULL; }
|
307
|
+
DH *EVP_PKEY_get0_DH(const EVP_PKEY *pkey) { return NULL; }
|
308
|
+
DH *EVP_PKEY_get1_DH(const EVP_PKEY *pkey) { return NULL; }
|
301
309
|
|
302
310
|
int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key) {
|
303
311
|
if (!EVP_PKEY_set_type(pkey, type)) {
|
@@ -329,7 +337,73 @@ int EVP_PKEY_set_type(EVP_PKEY *pkey, int type) {
|
|
329
337
|
return 1;
|
330
338
|
}
|
331
339
|
|
340
|
+
EVP_PKEY *EVP_PKEY_new_raw_private_key(int type, ENGINE *unused,
|
341
|
+
const uint8_t *in, size_t len) {
|
342
|
+
EVP_PKEY *ret = EVP_PKEY_new();
|
343
|
+
if (ret == NULL ||
|
344
|
+
!EVP_PKEY_set_type(ret, type)) {
|
345
|
+
goto err;
|
346
|
+
}
|
347
|
+
|
348
|
+
if (ret->ameth->set_priv_raw == NULL) {
|
349
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
|
350
|
+
goto err;
|
351
|
+
}
|
352
|
+
|
353
|
+
if (!ret->ameth->set_priv_raw(ret, in, len)) {
|
354
|
+
goto err;
|
355
|
+
}
|
356
|
+
|
357
|
+
return ret;
|
358
|
+
|
359
|
+
err:
|
360
|
+
EVP_PKEY_free(ret);
|
361
|
+
return NULL;
|
362
|
+
}
|
363
|
+
|
364
|
+
EVP_PKEY *EVP_PKEY_new_raw_public_key(int type, ENGINE *unused,
|
365
|
+
const uint8_t *in, size_t len) {
|
366
|
+
EVP_PKEY *ret = EVP_PKEY_new();
|
367
|
+
if (ret == NULL ||
|
368
|
+
!EVP_PKEY_set_type(ret, type)) {
|
369
|
+
goto err;
|
370
|
+
}
|
332
371
|
|
372
|
+
if (ret->ameth->set_pub_raw == NULL) {
|
373
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
|
374
|
+
goto err;
|
375
|
+
}
|
376
|
+
|
377
|
+
if (!ret->ameth->set_pub_raw(ret, in, len)) {
|
378
|
+
goto err;
|
379
|
+
}
|
380
|
+
|
381
|
+
return ret;
|
382
|
+
|
383
|
+
err:
|
384
|
+
EVP_PKEY_free(ret);
|
385
|
+
return NULL;
|
386
|
+
}
|
387
|
+
|
388
|
+
int EVP_PKEY_get_raw_private_key(const EVP_PKEY *pkey, uint8_t *out,
|
389
|
+
size_t *out_len) {
|
390
|
+
if (pkey->ameth->get_priv_raw == NULL) {
|
391
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
|
392
|
+
return 0;
|
393
|
+
}
|
394
|
+
|
395
|
+
return pkey->ameth->get_priv_raw(pkey, out, out_len);
|
396
|
+
}
|
397
|
+
|
398
|
+
int EVP_PKEY_get_raw_public_key(const EVP_PKEY *pkey, uint8_t *out,
|
399
|
+
size_t *out_len) {
|
400
|
+
if (pkey->ameth->get_pub_raw == NULL) {
|
401
|
+
OPENSSL_PUT_ERROR(EVP, EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
|
402
|
+
return 0;
|
403
|
+
}
|
404
|
+
|
405
|
+
return pkey->ameth->get_pub_raw(pkey, out, out_len);
|
406
|
+
}
|
333
407
|
|
334
408
|
int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b) {
|
335
409
|
if (a->type != b->type) {
|
@@ -360,3 +434,10 @@ void OpenSSL_add_all_ciphers(void) {}
|
|
360
434
|
void OpenSSL_add_all_digests(void) {}
|
361
435
|
|
362
436
|
void EVP_cleanup(void) {}
|
437
|
+
|
438
|
+
int EVP_PKEY_base_id(const EVP_PKEY *pkey) {
|
439
|
+
// OpenSSL has two notions of key type because it supports multiple OIDs for
|
440
|
+
// the same algorithm: NID_rsa vs NID_rsaEncryption and five distinct spelling
|
441
|
+
// of DSA. We do not support these, so the base ID is simply the ID.
|
442
|
+
return EVP_PKEY_id(pkey);
|
443
|
+
}
|