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
@@ -0,0 +1,122 @@
|
|
1
|
+
/* ====================================================================
|
2
|
+
* Copyright 2002 Sun Microsystems, Inc. ALL RIGHTS RESERVED.
|
3
|
+
*
|
4
|
+
* The Elliptic Curve Public-Key Crypto Library (ECC Code) included
|
5
|
+
* herein is developed by SUN MICROSYSTEMS, INC., and is contributed
|
6
|
+
* to the OpenSSL project.
|
7
|
+
*
|
8
|
+
* The ECC Code is licensed pursuant to the OpenSSL open source
|
9
|
+
* license provided below.
|
10
|
+
*
|
11
|
+
* The ECDH software is originally written by Douglas Stebila of
|
12
|
+
* Sun Microsystems Laboratories.
|
13
|
+
*
|
14
|
+
*/
|
15
|
+
/* ====================================================================
|
16
|
+
* Copyright (c) 2000-2002 The OpenSSL Project. All rights reserved.
|
17
|
+
*
|
18
|
+
* Redistribution and use in source and binary forms, with or without
|
19
|
+
* modification, are permitted provided that the following conditions
|
20
|
+
* are met:
|
21
|
+
*
|
22
|
+
* 1. Redistributions of source code must retain the above copyright
|
23
|
+
* notice, this list of conditions and the following disclaimer.
|
24
|
+
*
|
25
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
26
|
+
* notice, this list of conditions and the following disclaimer in
|
27
|
+
* the documentation and/or other materials provided with the
|
28
|
+
* distribution.
|
29
|
+
*
|
30
|
+
* 3. All advertising materials mentioning features or use of this
|
31
|
+
* software must display the following acknowledgment:
|
32
|
+
* "This product includes software developed by the OpenSSL Project
|
33
|
+
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
|
34
|
+
*
|
35
|
+
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
|
36
|
+
* endorse or promote products derived from this software without
|
37
|
+
* prior written permission. For written permission, please contact
|
38
|
+
* licensing@OpenSSL.org.
|
39
|
+
*
|
40
|
+
* 5. Products derived from this software may not be called "OpenSSL"
|
41
|
+
* nor may "OpenSSL" appear in their names without prior written
|
42
|
+
* permission of the OpenSSL Project.
|
43
|
+
*
|
44
|
+
* 6. Redistributions of any form whatsoever must retain the following
|
45
|
+
* acknowledgment:
|
46
|
+
* "This product includes software developed by the OpenSSL Project
|
47
|
+
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
|
48
|
+
*
|
49
|
+
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
|
50
|
+
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
51
|
+
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
52
|
+
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
|
53
|
+
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
54
|
+
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
55
|
+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
56
|
+
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
57
|
+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
58
|
+
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
59
|
+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
60
|
+
* OF THE POSSIBILITY OF SUCH DAMAGE.
|
61
|
+
* ====================================================================
|
62
|
+
*
|
63
|
+
* This product includes cryptographic software written by Eric Young
|
64
|
+
* (eay@cryptsoft.com). This product includes software written by Tim
|
65
|
+
* Hudson (tjh@cryptsoft.com). */
|
66
|
+
|
67
|
+
#include <openssl/ecdh.h>
|
68
|
+
|
69
|
+
#include <string.h>
|
70
|
+
|
71
|
+
#include <openssl/ec.h>
|
72
|
+
#include <openssl/ec_key.h>
|
73
|
+
#include <openssl/err.h>
|
74
|
+
#include <openssl/mem.h>
|
75
|
+
#include <openssl/sha.h>
|
76
|
+
|
77
|
+
#include "../ec/internal.h"
|
78
|
+
|
79
|
+
|
80
|
+
int ECDH_compute_key_fips(uint8_t *out, size_t out_len, const EC_POINT *pub_key,
|
81
|
+
const EC_KEY *priv_key) {
|
82
|
+
if (priv_key->priv_key == NULL) {
|
83
|
+
OPENSSL_PUT_ERROR(ECDH, ECDH_R_NO_PRIVATE_VALUE);
|
84
|
+
return 0;
|
85
|
+
}
|
86
|
+
const EC_SCALAR *const priv = &priv_key->priv_key->scalar;
|
87
|
+
const EC_GROUP *const group = EC_KEY_get0_group(priv_key);
|
88
|
+
if (EC_GROUP_cmp(group, pub_key->group, NULL) != 0) {
|
89
|
+
OPENSSL_PUT_ERROR(EC, EC_R_INCOMPATIBLE_OBJECTS);
|
90
|
+
return 0;
|
91
|
+
}
|
92
|
+
|
93
|
+
EC_RAW_POINT shared_point;
|
94
|
+
uint8_t buf[EC_MAX_BYTES];
|
95
|
+
size_t buflen;
|
96
|
+
if (!ec_point_mul_scalar(group, &shared_point, &pub_key->raw, priv) ||
|
97
|
+
!ec_point_get_affine_coordinate_bytes(group, buf, NULL, &buflen,
|
98
|
+
sizeof(buf), &shared_point)) {
|
99
|
+
OPENSSL_PUT_ERROR(ECDH, ECDH_R_POINT_ARITHMETIC_FAILURE);
|
100
|
+
return 0;
|
101
|
+
}
|
102
|
+
|
103
|
+
switch (out_len) {
|
104
|
+
case SHA224_DIGEST_LENGTH:
|
105
|
+
SHA224(buf, buflen, out);
|
106
|
+
break;
|
107
|
+
case SHA256_DIGEST_LENGTH:
|
108
|
+
SHA256(buf, buflen, out);
|
109
|
+
break;
|
110
|
+
case SHA384_DIGEST_LENGTH:
|
111
|
+
SHA384(buf, buflen, out);
|
112
|
+
break;
|
113
|
+
case SHA512_DIGEST_LENGTH:
|
114
|
+
SHA512(buf, buflen, out);
|
115
|
+
break;
|
116
|
+
default:
|
117
|
+
OPENSSL_PUT_ERROR(ECDH, ECDH_R_UNKNOWN_DIGEST_LENGTH);
|
118
|
+
return 0;
|
119
|
+
}
|
120
|
+
|
121
|
+
return 1;
|
122
|
+
}
|
@@ -66,107 +66,36 @@
|
|
66
66
|
#include "../../internal.h"
|
67
67
|
|
68
68
|
|
69
|
-
// EC_LOOSE_SCALAR is like |EC_SCALAR| but is bounded by 2^|BN_num_bits(order)|
|
70
|
-
// rather than |order|.
|
71
|
-
typedef union {
|
72
|
-
// bytes is the representation of the scalar in little-endian order.
|
73
|
-
uint8_t bytes[EC_MAX_SCALAR_BYTES];
|
74
|
-
BN_ULONG words[EC_MAX_SCALAR_WORDS];
|
75
|
-
} EC_LOOSE_SCALAR;
|
76
|
-
|
77
|
-
static void scalar_add_loose(const EC_GROUP *group, EC_LOOSE_SCALAR *r,
|
78
|
-
const EC_LOOSE_SCALAR *a, const EC_SCALAR *b) {
|
79
|
-
// Add and subtract one copy of |order| if necessary. We have:
|
80
|
-
// |a| + |b| < 2^BN_num_bits(order) + order
|
81
|
-
// so this leaves |r| < 2^BN_num_bits(order).
|
82
|
-
const BIGNUM *order = &group->order;
|
83
|
-
BN_ULONG carry = bn_add_words(r->words, a->words, b->words, order->width);
|
84
|
-
EC_LOOSE_SCALAR tmp;
|
85
|
-
BN_ULONG v =
|
86
|
-
bn_sub_words(tmp.words, r->words, order->d, order->width) - carry;
|
87
|
-
bn_select_words(r->words, 0u - v, r->words /* tmp < 0 */,
|
88
|
-
tmp.words /* tmp >= 0 */, order->width);
|
89
|
-
}
|
90
|
-
|
91
|
-
static int scalar_mod_mul_montgomery(const EC_GROUP *group, EC_SCALAR *r,
|
92
|
-
const EC_SCALAR *a, const EC_SCALAR *b) {
|
93
|
-
const BIGNUM *order = &group->order;
|
94
|
-
return bn_mod_mul_montgomery_small(r->words, order->width, a->words,
|
95
|
-
order->width, b->words, order->width,
|
96
|
-
group->order_mont);
|
97
|
-
}
|
98
|
-
|
99
|
-
static int scalar_mod_mul_montgomery_loose(const EC_GROUP *group, EC_SCALAR *r,
|
100
|
-
const EC_LOOSE_SCALAR *a,
|
101
|
-
const EC_SCALAR *b) {
|
102
|
-
// Although |a| is loose, |bn_mod_mul_montgomery_small| only requires the
|
103
|
-
// product not exceed R * |order|. |b| is fully reduced and |a| <
|
104
|
-
// 2^BN_num_bits(order) <= R, so this holds.
|
105
|
-
const BIGNUM *order = &group->order;
|
106
|
-
return bn_mod_mul_montgomery_small(r->words, order->width, a->words,
|
107
|
-
order->width, b->words, order->width,
|
108
|
-
group->order_mont);
|
109
|
-
}
|
110
|
-
|
111
69
|
// digest_to_scalar interprets |digest_len| bytes from |digest| as a scalar for
|
112
70
|
// ECDSA. Note this value is not fully reduced modulo the order, only the
|
113
71
|
// correct number of bits.
|
114
|
-
static void digest_to_scalar(const EC_GROUP *group,
|
72
|
+
static void digest_to_scalar(const EC_GROUP *group, EC_SCALAR *out,
|
115
73
|
const uint8_t *digest, size_t digest_len) {
|
116
74
|
const BIGNUM *order = &group->order;
|
117
75
|
size_t num_bits = BN_num_bits(order);
|
118
76
|
// Need to truncate digest if it is too long: first truncate whole bytes.
|
119
|
-
|
120
|
-
|
77
|
+
size_t num_bytes = (num_bits + 7) / 8;
|
78
|
+
if (digest_len > num_bytes) {
|
79
|
+
digest_len = num_bytes;
|
121
80
|
}
|
122
81
|
OPENSSL_memset(out, 0, sizeof(EC_SCALAR));
|
123
82
|
for (size_t i = 0; i < digest_len; i++) {
|
124
83
|
out->bytes[i] = digest[digest_len - 1 - i];
|
125
84
|
}
|
126
85
|
|
127
|
-
// If still too long truncate remaining bits with a shift
|
86
|
+
// If it is still too long, truncate remaining bits with a shift.
|
128
87
|
if (8 * digest_len > num_bits) {
|
129
|
-
|
130
|
-
for (int i = 0; i < order->width - 1; i++) {
|
131
|
-
out->words[i] =
|
132
|
-
(out->words[i] >> shift) | (out->words[i + 1] << (BN_BITS2 - shift));
|
133
|
-
}
|
134
|
-
out->words[order->width - 1] >>= shift;
|
88
|
+
bn_rshift_words(out->words, out->words, 8 - (num_bits & 0x7), order->width);
|
135
89
|
}
|
136
|
-
}
|
137
90
|
|
138
|
-
//
|
139
|
-
//
|
140
|
-
static int field_element_to_scalar(const EC_GROUP *group, BIGNUM *r) {
|
141
|
-
// We must have p < 2×order, assuming p is not tiny (p >= 17). Thus rather we
|
142
|
-
// can reduce by performing at most one subtraction.
|
91
|
+
// |out| now has the same bit width as |order|, but this only bounds by
|
92
|
+
// 2*|order|. Subtract the order if out of range.
|
143
93
|
//
|
144
|
-
//
|
145
|
-
//
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
// p + 1 - 2×sqrt(p) <= order
|
150
|
-
// p + 1 - 2×(p/4) < order (p/4 > sqrt(p) for p >= 17)
|
151
|
-
// p/2 < p/2 + 1 < order
|
152
|
-
// p < 2×order
|
153
|
-
//
|
154
|
-
// Additionally, one can manually check this property for built-in curves. It
|
155
|
-
// is enforced for legacy custom curves in |EC_GROUP_set_generator|.
|
156
|
-
//
|
157
|
-
// TODO(davidben): Introduce |EC_FIELD_ELEMENT|, make this a function from
|
158
|
-
// |EC_FIELD_ELEMENT| to |EC_SCALAR|, and cut out the |BIGNUM|. Does this need
|
159
|
-
// to be constant-time for signing? |r| is the x-coordinate for kG, which is
|
160
|
-
// public unless k was rerolled because |s| was zero.
|
161
|
-
assert(!BN_is_negative(r));
|
162
|
-
assert(BN_cmp(r, &group->field) < 0);
|
163
|
-
if (BN_cmp(r, &group->order) >= 0 &&
|
164
|
-
!BN_sub(r, r, &group->order)) {
|
165
|
-
return 0;
|
166
|
-
}
|
167
|
-
assert(!BN_is_negative(r));
|
168
|
-
assert(BN_cmp(r, &group->order) < 0);
|
169
|
-
return 1;
|
94
|
+
// Montgomery multiplication accepts the looser bounds, so this isn't strictly
|
95
|
+
// necessary, but it is a cleaner abstraction and has no performance impact.
|
96
|
+
BN_ULONG tmp[EC_MAX_WORDS];
|
97
|
+
bn_reduce_once_in_place(out->words, 0 /* no carry */, order->d, tmp,
|
98
|
+
order->width);
|
170
99
|
}
|
171
100
|
|
172
101
|
ECDSA_SIG *ECDSA_SIG_new(void) {
|
@@ -223,111 +152,56 @@ int ECDSA_do_verify(const uint8_t *digest, size_t digest_len,
|
|
223
152
|
return 0;
|
224
153
|
}
|
225
154
|
|
226
|
-
|
227
|
-
if (!ctx) {
|
228
|
-
OPENSSL_PUT_ERROR(ECDSA, ERR_R_MALLOC_FAILURE);
|
229
|
-
return 0;
|
230
|
-
}
|
231
|
-
int ret = 0;
|
232
|
-
EC_POINT *point = NULL;
|
233
|
-
BN_CTX_start(ctx);
|
234
|
-
BIGNUM *X = BN_CTX_get(ctx);
|
235
|
-
if (X == NULL) {
|
236
|
-
OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
|
237
|
-
goto err;
|
238
|
-
}
|
239
|
-
|
240
|
-
EC_SCALAR r, s, u1, u2, s_inv_mont;
|
241
|
-
EC_LOOSE_SCALAR m;
|
242
|
-
const BIGNUM *order = EC_GROUP_get0_order(group);
|
155
|
+
EC_SCALAR r, s, u1, u2, s_inv_mont, m;
|
243
156
|
if (BN_is_zero(sig->r) ||
|
244
157
|
!ec_bignum_to_scalar(group, &r, sig->r) ||
|
245
158
|
BN_is_zero(sig->s) ||
|
246
159
|
!ec_bignum_to_scalar(group, &s, sig->s)) {
|
247
160
|
OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_BAD_SIGNATURE);
|
248
|
-
|
249
|
-
}
|
250
|
-
// s_inv_mont = s^-1 mod order. We convert the result to Montgomery form for
|
251
|
-
// the products below.
|
252
|
-
int no_inverse;
|
253
|
-
if (!BN_mod_inverse_odd(X, &no_inverse, sig->s, order, ctx) ||
|
254
|
-
// TODO(davidben): Add a words version of |BN_mod_inverse_odd| and write
|
255
|
-
// into |s_inv_mont| directly.
|
256
|
-
!ec_bignum_to_scalar_unchecked(group, &s_inv_mont, X) ||
|
257
|
-
!bn_to_montgomery_small(s_inv_mont.words, order->width, s_inv_mont.words,
|
258
|
-
order->width, group->order_mont)) {
|
259
|
-
goto err;
|
161
|
+
return 0;
|
260
162
|
}
|
163
|
+
|
164
|
+
// s_inv_mont = s^-1 in the Montgomery domain. This is
|
165
|
+
ec_scalar_inv_montgomery_vartime(group, &s_inv_mont, &s);
|
166
|
+
|
261
167
|
// u1 = m * s^-1 mod order
|
262
168
|
// u2 = r * s^-1 mod order
|
263
169
|
//
|
264
170
|
// |s_inv_mont| is in Montgomery form while |m| and |r| are not, so |u1| and
|
265
171
|
// |u2| will be taken out of Montgomery form, as desired.
|
266
172
|
digest_to_scalar(group, &m, digest, digest_len);
|
267
|
-
|
268
|
-
|
269
|
-
goto err;
|
270
|
-
}
|
173
|
+
ec_scalar_mul_montgomery(group, &u1, &m, &s_inv_mont);
|
174
|
+
ec_scalar_mul_montgomery(group, &u2, &r, &s_inv_mont);
|
271
175
|
|
272
|
-
point
|
273
|
-
if (point
|
274
|
-
OPENSSL_PUT_ERROR(ECDSA, ERR_R_MALLOC_FAILURE);
|
275
|
-
goto err;
|
276
|
-
}
|
277
|
-
if (!ec_point_mul_scalar_public(group, point, &u1, pub_key, &u2, ctx)) {
|
176
|
+
EC_RAW_POINT point;
|
177
|
+
if (!ec_point_mul_scalar_public(group, &point, &u1, &pub_key->raw, &u2)) {
|
278
178
|
OPENSSL_PUT_ERROR(ECDSA, ERR_R_EC_LIB);
|
279
|
-
|
280
|
-
}
|
281
|
-
if (!EC_POINT_get_affine_coordinates_GFp(group, point, X, NULL, ctx)) {
|
282
|
-
OPENSSL_PUT_ERROR(ECDSA, ERR_R_EC_LIB);
|
283
|
-
goto err;
|
284
|
-
}
|
285
|
-
if (!field_element_to_scalar(group, X)) {
|
286
|
-
OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
|
287
|
-
goto err;
|
179
|
+
return 0;
|
288
180
|
}
|
289
|
-
|
290
|
-
if (
|
181
|
+
|
182
|
+
if (!ec_cmp_x_coordinate(group, &point, &r)) {
|
291
183
|
OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_BAD_SIGNATURE);
|
292
|
-
|
184
|
+
return 0;
|
293
185
|
}
|
294
186
|
|
295
|
-
|
296
|
-
|
297
|
-
err:
|
298
|
-
BN_CTX_end(ctx);
|
299
|
-
BN_CTX_free(ctx);
|
300
|
-
EC_POINT_free(point);
|
301
|
-
return ret;
|
187
|
+
return 1;
|
302
188
|
}
|
303
189
|
|
304
|
-
static int ecdsa_sign_setup(const EC_KEY *eckey,
|
305
|
-
EC_SCALAR *
|
306
|
-
const
|
307
|
-
const EC_SCALAR *priv_key) {
|
308
|
-
EC_POINT *tmp_point = NULL;
|
309
|
-
int ret = 0;
|
310
|
-
EC_SCALAR k;
|
311
|
-
BIGNUM *r = BN_new(); // this value is later returned in *rp
|
312
|
-
if (r == NULL) {
|
313
|
-
OPENSSL_PUT_ERROR(ECDSA, ERR_R_MALLOC_FAILURE);
|
314
|
-
goto err;
|
315
|
-
}
|
316
|
-
const EC_GROUP *group = EC_KEY_get0_group(eckey);
|
317
|
-
const BIGNUM *order = EC_GROUP_get0_order(group);
|
318
|
-
tmp_point = EC_POINT_new(group);
|
319
|
-
if (tmp_point == NULL) {
|
320
|
-
OPENSSL_PUT_ERROR(ECDSA, ERR_R_EC_LIB);
|
321
|
-
goto err;
|
322
|
-
}
|
323
|
-
|
190
|
+
static int ecdsa_sign_setup(const EC_KEY *eckey, EC_SCALAR *out_kinv_mont,
|
191
|
+
EC_SCALAR *out_r, const uint8_t *digest,
|
192
|
+
size_t digest_len, const EC_SCALAR *priv_key) {
|
324
193
|
// Check that the size of the group order is FIPS compliant (FIPS 186-4
|
325
194
|
// B.5.2).
|
195
|
+
const EC_GROUP *group = EC_KEY_get0_group(eckey);
|
196
|
+
const BIGNUM *order = EC_GROUP_get0_order(group);
|
326
197
|
if (BN_num_bits(order) < 160) {
|
327
198
|
OPENSSL_PUT_ERROR(ECDSA, EC_R_INVALID_GROUP_ORDER);
|
328
|
-
|
199
|
+
return 0;
|
329
200
|
}
|
330
201
|
|
202
|
+
int ret = 0;
|
203
|
+
EC_SCALAR k;
|
204
|
+
EC_RAW_POINT tmp_point;
|
331
205
|
do {
|
332
206
|
// Include the private key and message digest in the k generation.
|
333
207
|
if (eckey->fixed_k != NULL) {
|
@@ -337,8 +211,8 @@ static int ecdsa_sign_setup(const EC_KEY *eckey, BN_CTX *ctx,
|
|
337
211
|
} else {
|
338
212
|
// Pass a SHA512 hash of the private key and digest as additional data
|
339
213
|
// into the RBG. This is a hardening measure against entropy failure.
|
340
|
-
|
341
|
-
|
214
|
+
OPENSSL_STATIC_ASSERT(SHA512_DIGEST_LENGTH >= 32,
|
215
|
+
"additional_data is too large for SHA-512");
|
342
216
|
SHA512_CTX sha;
|
343
217
|
uint8_t additional_data[SHA512_DIGEST_LENGTH];
|
344
218
|
SHA512_Init(&sha);
|
@@ -350,37 +224,24 @@ static int ecdsa_sign_setup(const EC_KEY *eckey, BN_CTX *ctx,
|
|
350
224
|
}
|
351
225
|
}
|
352
226
|
|
353
|
-
// Compute k^-1
|
354
|
-
//
|
355
|
-
|
356
|
-
|
357
|
-
|
358
|
-
|
359
|
-
group->order_mont)) {
|
360
|
-
goto err;
|
361
|
-
}
|
227
|
+
// Compute k^-1 in the Montgomery domain. This is |ec_scalar_to_montgomery|
|
228
|
+
// followed by |ec_scalar_inv_montgomery|, but |ec_scalar_inv_montgomery|
|
229
|
+
// followed by |ec_scalar_from_montgomery| is equivalent and slightly more
|
230
|
+
// efficient.
|
231
|
+
ec_scalar_inv_montgomery(group, out_kinv_mont, &k);
|
232
|
+
ec_scalar_from_montgomery(group, out_kinv_mont, out_kinv_mont);
|
362
233
|
|
363
234
|
// Compute r, the x-coordinate of generator * k.
|
364
|
-
if (!
|
365
|
-
!
|
366
|
-
ctx)) {
|
367
|
-
goto err;
|
368
|
-
}
|
369
|
-
|
370
|
-
if (!field_element_to_scalar(group, r)) {
|
235
|
+
if (!ec_point_mul_scalar_base(group, &tmp_point, &k) ||
|
236
|
+
!ec_get_x_coordinate_as_scalar(group, out_r, &tmp_point)) {
|
371
237
|
goto err;
|
372
238
|
}
|
373
|
-
} while (
|
239
|
+
} while (ec_scalar_is_zero(group, out_r));
|
374
240
|
|
375
|
-
BN_clear_free(*rp);
|
376
|
-
*rp = r;
|
377
|
-
r = NULL;
|
378
241
|
ret = 1;
|
379
242
|
|
380
243
|
err:
|
381
244
|
OPENSSL_cleanse(&k, sizeof(k));
|
382
|
-
BN_clear_free(r);
|
383
|
-
EC_POINT_free(tmp_point);
|
384
245
|
return ret;
|
385
246
|
}
|
386
247
|
|
@@ -401,38 +262,33 @@ ECDSA_SIG *ECDSA_do_sign(const uint8_t *digest, size_t digest_len,
|
|
401
262
|
|
402
263
|
int ok = 0;
|
403
264
|
ECDSA_SIG *ret = ECDSA_SIG_new();
|
404
|
-
|
405
|
-
|
406
|
-
EC_LOOSE_SCALAR m, tmp;
|
407
|
-
if (ret == NULL || ctx == NULL) {
|
265
|
+
EC_SCALAR kinv_mont, r_mont, s, m, tmp;
|
266
|
+
if (ret == NULL) {
|
408
267
|
OPENSSL_PUT_ERROR(ECDSA, ERR_R_MALLOC_FAILURE);
|
409
268
|
return NULL;
|
410
269
|
}
|
411
270
|
|
412
271
|
digest_to_scalar(group, &m, digest, digest_len);
|
413
272
|
for (;;) {
|
414
|
-
if (!ecdsa_sign_setup(eckey,
|
415
|
-
priv_key)
|
273
|
+
if (!ecdsa_sign_setup(eckey, &kinv_mont, &r_mont, digest, digest_len,
|
274
|
+
priv_key) ||
|
275
|
+
!bn_set_words(ret->r, r_mont.words, order->width)) {
|
416
276
|
goto err;
|
417
277
|
}
|
418
278
|
|
419
279
|
// Compute priv_key * r (mod order). Note if only one parameter is in the
|
420
|
-
// Montgomery domain, |
|
421
|
-
// the normal domain.
|
422
|
-
|
423
|
-
|
424
|
-
order->width, group->order_mont) ||
|
425
|
-
!scalar_mod_mul_montgomery(group, &s, priv_key, &r_mont)) {
|
426
|
-
goto err;
|
427
|
-
}
|
280
|
+
// Montgomery domain, |ec_scalar_mod_mul_montgomery| will compute the answer
|
281
|
+
// in the normal domain.
|
282
|
+
ec_scalar_to_montgomery(group, &r_mont, &r_mont);
|
283
|
+
ec_scalar_mul_montgomery(group, &s, priv_key, &r_mont);
|
428
284
|
|
429
285
|
// Compute tmp = m + priv_key * r.
|
430
|
-
|
286
|
+
ec_scalar_add(group, &tmp, &m, &s);
|
431
287
|
|
432
288
|
// Finally, multiply s by k^-1. That was retained in Montgomery form, so the
|
433
289
|
// same technique as the previous multiplication works.
|
434
|
-
|
435
|
-
|
290
|
+
ec_scalar_mul_montgomery(group, &s, &tmp, &kinv_mont);
|
291
|
+
if (!bn_set_words(ret->s, s.words, order->width)) {
|
436
292
|
goto err;
|
437
293
|
}
|
438
294
|
if (!BN_is_zero(ret->s)) {
|
@@ -448,7 +304,6 @@ err:
|
|
448
304
|
ECDSA_SIG_free(ret);
|
449
305
|
ret = NULL;
|
450
306
|
}
|
451
|
-
BN_CTX_free(ctx);
|
452
307
|
OPENSSL_cleanse(&kinv_mont, sizeof(kinv_mont));
|
453
308
|
OPENSSL_cleanse(&r_mont, sizeof(r_mont));
|
454
309
|
OPENSSL_cleanse(&s, sizeof(s));
|