grpc 1.24.0 → 1.25.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +306 -243
- data/etc/roots.pem +0 -100
- data/include/grpc/grpc_security.h +44 -18
- data/include/grpc/impl/codegen/grpc_types.h +15 -0
- data/include/grpc/impl/codegen/port_platform.h +27 -11
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/src/boringssl/err_data.c +695 -650
- data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
- data/src/core/ext/filters/client_channel/client_channel.h +24 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
- data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
- data/src/core/ext/filters/client_channel/resolver.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver.h +8 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
- data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
- data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
- data/src/core/ext/filters/client_channel/service_config.h +8 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
- data/src/core/ext/filters/client_channel/subchannel.h +7 -9
- data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
- data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
- data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
- data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
- data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
- data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
- data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
- data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
- data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
- data/src/core/lib/channel/channel_args.cc +16 -0
- data/src/core/lib/channel/channel_args.h +22 -0
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +20 -20
- data/src/core/lib/channel/handshaker.h +3 -4
- data/src/core/lib/channel/handshaker_factory.h +1 -3
- data/src/core/lib/debug/trace.h +3 -2
- data/src/core/lib/gprpp/arena.cc +3 -3
- data/src/core/lib/gprpp/arena.h +2 -3
- data/src/core/lib/gprpp/inlined_vector.h +9 -0
- data/src/core/lib/gprpp/map.h +3 -501
- data/src/core/lib/gprpp/memory.h +45 -41
- data/src/core/lib/gprpp/mpscq.cc +108 -0
- data/src/core/lib/gprpp/mpscq.h +98 -0
- data/src/core/lib/gprpp/orphanable.h +6 -11
- data/src/core/lib/gprpp/ref_counted.h +25 -19
- data/src/core/lib/gprpp/set.h +33 -0
- data/src/core/lib/gprpp/thd.h +2 -4
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli_security_connector.cc +15 -11
- data/src/core/lib/http/parser.cc +1 -1
- data/src/core/lib/iomgr/buffer_list.cc +4 -5
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +4 -5
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.h +3 -5
- data/src/core/lib/iomgr/closure.h +8 -3
- data/src/core/lib/iomgr/combiner.cc +45 -82
- data/src/core/lib/iomgr/combiner.h +32 -8
- data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
- data/src/core/lib/iomgr/ev_poll_posix.cc +3 -1
- data/src/core/lib/iomgr/exec_ctx.h +4 -3
- data/src/core/lib/iomgr/executor.cc +4 -2
- data/src/core/lib/iomgr/executor.h +3 -0
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
- data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
- data/src/core/lib/iomgr/executor/threadpool.h +7 -11
- data/src/core/lib/iomgr/resource_quota.cc +55 -51
- data/src/core/lib/iomgr/resource_quota.h +13 -9
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
- data/src/core/lib/iomgr/tcp_custom.cc +9 -7
- data/src/core/lib/iomgr/tcp_posix.cc +20 -16
- data/src/core/lib/iomgr/tcp_server.h +1 -4
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/udp_server.cc +3 -2
- data/src/core/lib/iomgr/udp_server.h +6 -12
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_string.cc +2 -2
- data/src/core/lib/profiling/basic_timers.cc +2 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +4 -20
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/security_connector.h +19 -17
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
- data/src/core/lib/security/transport/security_handshaker.cc +29 -13
- data/src/core/lib/security/transport/security_handshaker.h +4 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
- data/src/core/lib/slice/slice.cc +2 -10
- data/src/core/lib/slice/slice_hash_table.h +4 -6
- data/src/core/lib/slice/slice_intern.cc +42 -39
- data/src/core/lib/slice/slice_internal.h +3 -3
- data/src/core/lib/slice/slice_utils.h +21 -4
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
- data/src/core/lib/surface/call.cc +3 -3
- data/src/core/lib/surface/channel.cc +7 -0
- data/src/core/lib/surface/completion_queue.cc +12 -11
- data/src/core/lib/surface/completion_queue.h +4 -2
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/lame_client.cc +33 -18
- data/src/core/lib/surface/server.cc +77 -76
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -7
- data/src/core/lib/transport/connectivity_state.cc +112 -98
- data/src/core/lib/transport/connectivity_state.h +100 -50
- data/src/core/lib/transport/static_metadata.cc +276 -288
- data/src/core/lib/transport/static_metadata.h +73 -76
- data/src/core/lib/transport/status_conversion.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +1 -1
- data/src/core/lib/transport/transport.cc +2 -2
- data/src/core/lib/transport/transport.h +12 -4
- data/src/core/lib/transport/transport_op_string.cc +14 -11
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
- data/src/core/tsi/fake_transport_security.cc +7 -5
- data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
- data/src/core/tsi/local_transport_security.cc +8 -6
- data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +12 -12
- data/src/core/tsi/ssl_transport_security.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +7 -0
- data/src/core/tsi/transport_security_grpc.h +6 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -1
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
- data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
- data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
- data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
- data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
- data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
- data/third_party/boringssl/crypto/base64/base64.c +2 -2
- data/third_party/boringssl/crypto/bio/bio.c +73 -9
- data/third_party/boringssl/crypto/bio/connect.c +4 -0
- data/third_party/boringssl/crypto/bio/fd.c +4 -0
- data/third_party/boringssl/crypto/bio/file.c +5 -2
- data/third_party/boringssl/crypto/bio/socket.c +4 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
- data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
- data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
- data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
- data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
- data/third_party/boringssl/crypto/chacha/internal.h +45 -0
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
- data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
- data/third_party/boringssl/crypto/conf/conf.c +7 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
- data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
- data/third_party/boringssl/crypto/cpu-intel.c +45 -51
- data/third_party/boringssl/crypto/crypto.c +39 -22
- data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
- data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
- data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
- data/third_party/boringssl/crypto/engine/engine.c +2 -1
- data/third_party/boringssl/crypto/err/err.c +2 -0
- data/third_party/boringssl/crypto/err/internal.h +2 -2
- data/third_party/boringssl/crypto/evp/evp.c +89 -8
- data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
- data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
- data/third_party/boringssl/crypto/evp/internal.h +18 -1
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
- data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
- data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
- data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
- data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
- data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
- data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
- data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
- data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
- data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
- data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
- data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
- data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
- data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
- data/third_party/boringssl/crypto/hrss/internal.h +62 -0
- data/third_party/boringssl/crypto/internal.h +95 -20
- data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
- data/third_party/boringssl/crypto/mem.c +39 -2
- data/third_party/boringssl/crypto/obj/obj.c +4 -4
- data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
- data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
- data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
- data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
- data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
- data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
- data/third_party/boringssl/crypto/pool/internal.h +1 -1
- data/third_party/boringssl/crypto/pool/pool.c +21 -0
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
- data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
- data/third_party/boringssl/crypto/stack/stack.c +83 -32
- data/third_party/boringssl/crypto/thread_none.c +2 -2
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +38 -19
- data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
- data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
- data/third_party/boringssl/crypto/x509/by_file.c +12 -10
- data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
- data/third_party/boringssl/crypto/x509/t_req.c +1 -3
- data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
- data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
- data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
- data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
- data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
- data/third_party/boringssl/crypto/x509/x509name.c +2 -3
- data/third_party/boringssl/crypto/x509/x_all.c +109 -210
- data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
- data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
- data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
- data/third_party/boringssl/include/openssl/aead.h +45 -19
- data/third_party/boringssl/include/openssl/aes.h +32 -7
- data/third_party/boringssl/include/openssl/asn1.h +7 -77
- data/third_party/boringssl/include/openssl/base.h +120 -6
- data/third_party/boringssl/include/openssl/base64.h +4 -1
- data/third_party/boringssl/include/openssl/bio.h +112 -81
- data/third_party/boringssl/include/openssl/blowfish.h +3 -3
- data/third_party/boringssl/include/openssl/bn.h +55 -29
- data/third_party/boringssl/include/openssl/buf.h +2 -2
- data/third_party/boringssl/include/openssl/bytestring.h +54 -32
- data/third_party/boringssl/include/openssl/cast.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +46 -16
- data/third_party/boringssl/include/openssl/cmac.h +6 -2
- data/third_party/boringssl/include/openssl/conf.h +3 -6
- data/third_party/boringssl/include/openssl/cpu.h +25 -9
- data/third_party/boringssl/include/openssl/crypto.h +32 -10
- data/third_party/boringssl/include/openssl/curve25519.h +4 -4
- data/third_party/boringssl/include/openssl/dh.h +3 -2
- data/third_party/boringssl/include/openssl/digest.h +21 -7
- data/third_party/boringssl/include/openssl/dsa.h +8 -2
- data/third_party/boringssl/include/openssl/e_os2.h +18 -0
- data/third_party/boringssl/include/openssl/ec.h +25 -21
- data/third_party/boringssl/include/openssl/ec_key.h +36 -8
- data/third_party/boringssl/include/openssl/ecdh.h +17 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
- data/third_party/boringssl/include/openssl/engine.h +4 -4
- data/third_party/boringssl/include/openssl/err.h +3 -0
- data/third_party/boringssl/include/openssl/evp.h +199 -42
- data/third_party/boringssl/include/openssl/hmac.h +4 -4
- data/third_party/boringssl/include/openssl/hrss.h +100 -0
- data/third_party/boringssl/include/openssl/lhash.h +131 -23
- data/third_party/boringssl/include/openssl/md4.h +6 -4
- data/third_party/boringssl/include/openssl/md5.h +6 -4
- data/third_party/boringssl/include/openssl/mem.h +6 -2
- data/third_party/boringssl/include/openssl/nid.h +3 -0
- data/third_party/boringssl/include/openssl/obj.h +3 -0
- data/third_party/boringssl/include/openssl/pem.h +102 -64
- data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
- data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
- data/third_party/boringssl/include/openssl/pool.h +13 -2
- data/third_party/boringssl/include/openssl/ripemd.h +5 -4
- data/third_party/boringssl/include/openssl/rsa.h +46 -15
- data/third_party/boringssl/include/openssl/sha.h +40 -28
- data/third_party/boringssl/include/openssl/siphash.h +37 -0
- data/third_party/boringssl/include/openssl/span.h +17 -9
- data/third_party/boringssl/include/openssl/ssl.h +766 -393
- data/third_party/boringssl/include/openssl/ssl3.h +4 -3
- data/third_party/boringssl/include/openssl/stack.h +134 -77
- data/third_party/boringssl/include/openssl/thread.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +25 -9
- data/third_party/boringssl/include/openssl/type_check.h +14 -15
- data/third_party/boringssl/include/openssl/x509.h +28 -3
- data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
- data/third_party/boringssl/include/openssl/x509v3.h +17 -13
- data/third_party/boringssl/ssl/d1_both.cc +9 -18
- data/third_party/boringssl/ssl/d1_lib.cc +4 -3
- data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
- data/third_party/boringssl/ssl/dtls_method.cc +0 -1
- data/third_party/boringssl/ssl/dtls_record.cc +28 -28
- data/third_party/boringssl/ssl/handoff.cc +295 -91
- data/third_party/boringssl/ssl/handshake.cc +133 -72
- data/third_party/boringssl/ssl/handshake_client.cc +218 -189
- data/third_party/boringssl/ssl/handshake_server.cc +399 -272
- data/third_party/boringssl/ssl/internal.h +1413 -928
- data/third_party/boringssl/ssl/s3_both.cc +175 -36
- data/third_party/boringssl/ssl/s3_lib.cc +9 -13
- data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
- data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
- data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
- data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
- data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
- data/third_party/boringssl/ssl/ssl_file.cc +2 -0
- data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
- data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
- data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
- data/third_party/boringssl/ssl/ssl_session.cc +230 -178
- data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
- data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
- data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
- data/third_party/boringssl/ssl/t1_enc.cc +5 -96
- data/third_party/boringssl/ssl/t1_lib.cc +931 -678
- data/third_party/boringssl/ssl/tls13_both.cc +251 -121
- data/third_party/boringssl/ssl/tls13_client.cc +129 -73
- data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
- data/third_party/boringssl/ssl/tls13_server.cc +259 -192
- data/third_party/boringssl/ssl/tls_method.cc +26 -21
- data/third_party/boringssl/ssl/tls_record.cc +42 -47
- data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
- data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
- data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
- data/third_party/boringssl/third_party/fiat/p256.c +238 -999
- data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
- data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +2 -1
- metadata +72 -44
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
- data/src/core/lib/gpr/mpscq.cc +0 -117
- data/src/core/lib/gpr/mpscq.h +0 -88
- data/src/core/lib/gprpp/abstract.h +0 -47
- data/src/core/lib/gprpp/pair.h +0 -38
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
- data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
- data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -65,8 +65,8 @@
|
|
65
65
|
|
66
66
|
static int bn_cmp_words_consttime(const BN_ULONG *a, size_t a_len,
|
67
67
|
const BN_ULONG *b, size_t b_len) {
|
68
|
-
|
69
|
-
|
68
|
+
OPENSSL_STATIC_ASSERT(sizeof(BN_ULONG) <= sizeof(crypto_word_t),
|
69
|
+
"crypto_word_t is too small");
|
70
70
|
int ret = 0;
|
71
71
|
// Process the common words in little-endian order.
|
72
72
|
size_t min = a_len < b_len ? a_len : b_len;
|
@@ -54,6 +54,7 @@
|
|
54
54
|
|
55
55
|
#include <openssl/bn.h>
|
56
56
|
|
57
|
+
#include <assert.h>
|
57
58
|
#include <string.h>
|
58
59
|
|
59
60
|
#include <openssl/err.h>
|
@@ -62,63 +63,46 @@
|
|
62
63
|
#include "../../internal.h"
|
63
64
|
|
64
65
|
|
65
|
-
// How many bignums are in each "pool item";
|
66
|
-
#define BN_CTX_POOL_SIZE 16
|
67
66
|
// The stack frame info is resizing, set a first-time expansion size;
|
68
67
|
#define BN_CTX_START_FRAMES 32
|
69
68
|
|
70
|
-
// A bundle of bignums that can be linked with other bundles
|
71
|
-
typedef struct bignum_pool_item {
|
72
|
-
// The bignum values
|
73
|
-
BIGNUM vals[BN_CTX_POOL_SIZE];
|
74
|
-
// Linked-list admin
|
75
|
-
struct bignum_pool_item *prev, *next;
|
76
|
-
} BN_POOL_ITEM;
|
77
|
-
|
78
|
-
|
79
|
-
typedef struct bignum_pool {
|
80
|
-
// Linked-list admin
|
81
|
-
BN_POOL_ITEM *head, *current, *tail;
|
82
|
-
// Stack depth and allocation size
|
83
|
-
unsigned used, size;
|
84
|
-
} BN_POOL;
|
85
|
-
|
86
|
-
static void BN_POOL_init(BN_POOL *);
|
87
|
-
static void BN_POOL_finish(BN_POOL *);
|
88
|
-
static BIGNUM *BN_POOL_get(BN_POOL *);
|
89
|
-
static void BN_POOL_release(BN_POOL *, unsigned int);
|
90
|
-
|
91
69
|
|
92
70
|
// BN_STACK
|
93
71
|
|
94
|
-
// A
|
95
|
-
typedef struct
|
96
|
-
// Array of indexes into
|
97
|
-
|
72
|
+
// A |BN_STACK| is a stack of |size_t| values.
|
73
|
+
typedef struct {
|
74
|
+
// Array of indexes into |ctx->bignums|.
|
75
|
+
size_t *indexes;
|
98
76
|
// Number of stack frames, and the size of the allocated array
|
99
|
-
|
77
|
+
size_t depth, size;
|
100
78
|
} BN_STACK;
|
101
79
|
|
102
|
-
static void
|
103
|
-
static void
|
104
|
-
static int
|
105
|
-
static
|
80
|
+
static void BN_STACK_init(BN_STACK *);
|
81
|
+
static void BN_STACK_cleanup(BN_STACK *);
|
82
|
+
static int BN_STACK_push(BN_STACK *, size_t idx);
|
83
|
+
static size_t BN_STACK_pop(BN_STACK *);
|
106
84
|
|
107
85
|
|
108
86
|
// BN_CTX
|
109
87
|
|
88
|
+
DEFINE_STACK_OF(BIGNUM)
|
89
|
+
|
110
90
|
// The opaque BN_CTX type
|
111
91
|
struct bignum_ctx {
|
112
|
-
//
|
113
|
-
|
114
|
-
//
|
92
|
+
// bignums is the stack of |BIGNUM|s managed by this |BN_CTX|.
|
93
|
+
STACK_OF(BIGNUM) *bignums;
|
94
|
+
// stack is the stack of |BN_CTX_start| frames. It is the value of |used| at
|
95
|
+
// the time |BN_CTX_start| was called.
|
115
96
|
BN_STACK stack;
|
116
|
-
//
|
117
|
-
|
118
|
-
//
|
119
|
-
|
120
|
-
|
121
|
-
|
97
|
+
// used is the number of |BIGNUM|s from |bignums| that have been used.
|
98
|
+
size_t used;
|
99
|
+
// error is one if any operation on this |BN_CTX| failed. All subsequent
|
100
|
+
// operations will fail.
|
101
|
+
char error;
|
102
|
+
// defer_error is one if an operation on this |BN_CTX| has failed, but no
|
103
|
+
// error has been pushed to the queue yet. This is used to defer errors from
|
104
|
+
// |BN_CTX_start| to |BN_CTX_get|.
|
105
|
+
char defer_error;
|
122
106
|
};
|
123
107
|
|
124
108
|
BN_CTX *BN_CTX_new(void) {
|
@@ -129,11 +113,11 @@ BN_CTX *BN_CTX_new(void) {
|
|
129
113
|
}
|
130
114
|
|
131
115
|
// Initialise the structure
|
132
|
-
|
116
|
+
ret->bignums = NULL;
|
133
117
|
BN_STACK_init(&ret->stack);
|
134
118
|
ret->used = 0;
|
135
|
-
ret->
|
136
|
-
ret->
|
119
|
+
ret->error = 0;
|
120
|
+
ret->defer_error = 0;
|
137
121
|
return ret;
|
138
122
|
}
|
139
123
|
|
@@ -142,57 +126,73 @@ void BN_CTX_free(BN_CTX *ctx) {
|
|
142
126
|
return;
|
143
127
|
}
|
144
128
|
|
145
|
-
|
146
|
-
|
129
|
+
// All |BN_CTX_start| calls must be matched with |BN_CTX_end|, otherwise the
|
130
|
+
// function may use more memory than expected, potentially without bound if
|
131
|
+
// done in a loop. Assert that all |BIGNUM|s have been released.
|
132
|
+
assert(ctx->used == 0 || ctx->error);
|
133
|
+
sk_BIGNUM_pop_free(ctx->bignums, BN_free);
|
134
|
+
BN_STACK_cleanup(&ctx->stack);
|
147
135
|
OPENSSL_free(ctx);
|
148
136
|
}
|
149
137
|
|
150
138
|
void BN_CTX_start(BN_CTX *ctx) {
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
139
|
+
if (ctx->error) {
|
140
|
+
// Once an operation has failed, |ctx->stack| no longer matches the number
|
141
|
+
// of |BN_CTX_end| calls to come. Do nothing.
|
142
|
+
return;
|
143
|
+
}
|
144
|
+
|
145
|
+
if (!BN_STACK_push(&ctx->stack, ctx->used)) {
|
146
|
+
ctx->error = 1;
|
147
|
+
// |BN_CTX_start| cannot fail, so defer the error to |BN_CTX_get|.
|
148
|
+
ctx->defer_error = 1;
|
158
149
|
}
|
159
150
|
}
|
160
151
|
|
161
152
|
BIGNUM *BN_CTX_get(BN_CTX *ctx) {
|
162
|
-
|
163
|
-
if (ctx->
|
153
|
+
// Once any operation has failed, they all do.
|
154
|
+
if (ctx->error) {
|
155
|
+
if (ctx->defer_error) {
|
156
|
+
OPENSSL_PUT_ERROR(BN, BN_R_TOO_MANY_TEMPORARY_VARIABLES);
|
157
|
+
ctx->defer_error = 0;
|
158
|
+
}
|
164
159
|
return NULL;
|
165
160
|
}
|
166
161
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
173
|
-
|
162
|
+
if (ctx->bignums == NULL) {
|
163
|
+
ctx->bignums = sk_BIGNUM_new_null();
|
164
|
+
if (ctx->bignums == NULL) {
|
165
|
+
OPENSSL_PUT_ERROR(BN, ERR_R_MALLOC_FAILURE);
|
166
|
+
ctx->error = 1;
|
167
|
+
return NULL;
|
168
|
+
}
|
174
169
|
}
|
175
170
|
|
176
|
-
|
171
|
+
if (ctx->used == sk_BIGNUM_num(ctx->bignums)) {
|
172
|
+
BIGNUM *bn = BN_new();
|
173
|
+
if (bn == NULL || !sk_BIGNUM_push(ctx->bignums, bn)) {
|
174
|
+
OPENSSL_PUT_ERROR(BN, BN_R_TOO_MANY_TEMPORARY_VARIABLES);
|
175
|
+
BN_free(bn);
|
176
|
+
ctx->error = 1;
|
177
|
+
return NULL;
|
178
|
+
}
|
179
|
+
}
|
180
|
+
|
181
|
+
BIGNUM *ret = sk_BIGNUM_value(ctx->bignums, ctx->used);
|
177
182
|
BN_zero(ret);
|
183
|
+
// This is bounded by |sk_BIGNUM_num|, so it cannot overflow.
|
178
184
|
ctx->used++;
|
179
185
|
return ret;
|
180
186
|
}
|
181
187
|
|
182
188
|
void BN_CTX_end(BN_CTX *ctx) {
|
183
|
-
if (ctx->
|
184
|
-
ctx->
|
185
|
-
|
186
|
-
|
187
|
-
// Does this stack frame have anything to release?
|
188
|
-
if (fp < ctx->used) {
|
189
|
-
BN_POOL_release(&ctx->pool, ctx->used - fp);
|
190
|
-
}
|
191
|
-
|
192
|
-
ctx->used = fp;
|
193
|
-
// Unjam "too_many" in case "get" had failed
|
194
|
-
ctx->too_many = 0;
|
189
|
+
if (ctx->error) {
|
190
|
+
// Once an operation has failed, |ctx->stack| no longer matches the number
|
191
|
+
// of |BN_CTX_end| calls to come. Do nothing.
|
192
|
+
return;
|
195
193
|
}
|
194
|
+
|
195
|
+
ctx->used = BN_STACK_pop(&ctx->stack);
|
196
196
|
}
|
197
197
|
|
198
198
|
|
@@ -203,101 +203,34 @@ static void BN_STACK_init(BN_STACK *st) {
|
|
203
203
|
st->depth = st->size = 0;
|
204
204
|
}
|
205
205
|
|
206
|
-
static void
|
206
|
+
static void BN_STACK_cleanup(BN_STACK *st) {
|
207
207
|
OPENSSL_free(st->indexes);
|
208
208
|
}
|
209
209
|
|
210
|
-
static int BN_STACK_push(BN_STACK *st,
|
210
|
+
static int BN_STACK_push(BN_STACK *st, size_t idx) {
|
211
211
|
if (st->depth == st->size) {
|
212
|
-
//
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
if (!newitems) {
|
212
|
+
// This function intentionally does not push to the error queue on error.
|
213
|
+
// Error-reporting is deferred to |BN_CTX_get|.
|
214
|
+
size_t new_size = st->size != 0 ? st->size * 3 / 2 : BN_CTX_START_FRAMES;
|
215
|
+
if (new_size <= st->size || new_size > ((size_t)-1) / sizeof(size_t)) {
|
217
216
|
return 0;
|
218
217
|
}
|
219
|
-
|
220
|
-
|
218
|
+
size_t *new_indexes =
|
219
|
+
OPENSSL_realloc(st->indexes, new_size * sizeof(size_t));
|
220
|
+
if (new_indexes == NULL) {
|
221
|
+
return 0;
|
221
222
|
}
|
222
|
-
|
223
|
-
st->
|
224
|
-
st->size = newsize;
|
223
|
+
st->indexes = new_indexes;
|
224
|
+
st->size = new_size;
|
225
225
|
}
|
226
226
|
|
227
|
-
st->indexes[
|
227
|
+
st->indexes[st->depth] = idx;
|
228
|
+
st->depth++;
|
228
229
|
return 1;
|
229
230
|
}
|
230
231
|
|
231
|
-
static
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
static void BN_POOL_init(BN_POOL *p) {
|
237
|
-
p->head = p->current = p->tail = NULL;
|
238
|
-
p->used = p->size = 0;
|
239
|
-
}
|
240
|
-
|
241
|
-
static void BN_POOL_finish(BN_POOL *p) {
|
242
|
-
while (p->head) {
|
243
|
-
for (size_t i = 0; i < BN_CTX_POOL_SIZE; i++) {
|
244
|
-
BN_clear_free(&p->head->vals[i]);
|
245
|
-
}
|
246
|
-
|
247
|
-
p->current = p->head->next;
|
248
|
-
OPENSSL_free(p->head);
|
249
|
-
p->head = p->current;
|
250
|
-
}
|
251
|
-
}
|
252
|
-
|
253
|
-
static BIGNUM *BN_POOL_get(BN_POOL *p) {
|
254
|
-
if (p->used == p->size) {
|
255
|
-
BN_POOL_ITEM *item = OPENSSL_malloc(sizeof(BN_POOL_ITEM));
|
256
|
-
if (!item) {
|
257
|
-
return NULL;
|
258
|
-
}
|
259
|
-
|
260
|
-
// Initialise the structure
|
261
|
-
for (size_t i = 0; i < BN_CTX_POOL_SIZE; i++) {
|
262
|
-
BN_init(&item->vals[i]);
|
263
|
-
}
|
264
|
-
|
265
|
-
item->prev = p->tail;
|
266
|
-
item->next = NULL;
|
267
|
-
// Link it in
|
268
|
-
if (!p->head) {
|
269
|
-
p->head = p->current = p->tail = item;
|
270
|
-
} else {
|
271
|
-
p->tail->next = item;
|
272
|
-
p->tail = item;
|
273
|
-
p->current = item;
|
274
|
-
}
|
275
|
-
|
276
|
-
p->size += BN_CTX_POOL_SIZE;
|
277
|
-
p->used++;
|
278
|
-
// Return the first bignum from the new pool
|
279
|
-
return item->vals;
|
280
|
-
}
|
281
|
-
|
282
|
-
if (!p->used) {
|
283
|
-
p->current = p->head;
|
284
|
-
} else if ((p->used % BN_CTX_POOL_SIZE) == 0) {
|
285
|
-
p->current = p->current->next;
|
286
|
-
}
|
287
|
-
|
288
|
-
return p->current->vals + ((p->used++) % BN_CTX_POOL_SIZE);
|
289
|
-
}
|
290
|
-
|
291
|
-
static void BN_POOL_release(BN_POOL *p, unsigned int num) {
|
292
|
-
unsigned int offset = (p->used - 1) % BN_CTX_POOL_SIZE;
|
293
|
-
p->used -= num;
|
294
|
-
|
295
|
-
while (num--) {
|
296
|
-
if (!offset) {
|
297
|
-
offset = BN_CTX_POOL_SIZE - 1;
|
298
|
-
p->current = p->current->prev;
|
299
|
-
} else {
|
300
|
-
offset--;
|
301
|
-
}
|
302
|
-
}
|
232
|
+
static size_t BN_STACK_pop(BN_STACK *st) {
|
233
|
+
assert(st->depth > 0);
|
234
|
+
st->depth--;
|
235
|
+
return st->indexes[st->depth];
|
303
236
|
}
|
@@ -64,7 +64,7 @@
|
|
64
64
|
#include "internal.h"
|
65
65
|
|
66
66
|
|
67
|
-
#if !defined(
|
67
|
+
#if !defined(BN_CAN_DIVIDE_ULLONG) && !defined(BN_CAN_USE_INLINE_ASM)
|
68
68
|
// bn_div_words divides a double-width |h|,|l| by |d| and returns the result,
|
69
69
|
// which must fit in a |BN_ULONG|.
|
70
70
|
static BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d) {
|
@@ -135,7 +135,7 @@ static BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d) {
|
|
135
135
|
ret |= q;
|
136
136
|
return ret;
|
137
137
|
}
|
138
|
-
#endif // !defined(
|
138
|
+
#endif // !defined(BN_CAN_DIVIDE_ULLONG) && !defined(BN_CAN_USE_INLINE_ASM)
|
139
139
|
|
140
140
|
static inline void bn_div_rem_words(BN_ULONG *quotient_out, BN_ULONG *rem_out,
|
141
141
|
BN_ULONG n0, BN_ULONG n1, BN_ULONG d0) {
|
@@ -155,20 +155,18 @@ static inline void bn_div_rem_words(BN_ULONG *quotient_out, BN_ULONG *rem_out,
|
|
155
155
|
//
|
156
156
|
// These issues aren't specific to x86 and x86_64, so it might be worthwhile
|
157
157
|
// to add more assembly language implementations.
|
158
|
-
#if
|
159
|
-
(defined(__GNUC__) || defined(__clang__))
|
158
|
+
#if defined(BN_CAN_USE_INLINE_ASM) && defined(OPENSSL_X86)
|
160
159
|
__asm__ volatile("divl %4"
|
161
160
|
: "=a"(*quotient_out), "=d"(*rem_out)
|
162
161
|
: "a"(n1), "d"(n0), "rm"(d0)
|
163
162
|
: "cc");
|
164
|
-
#elif
|
165
|
-
(defined(__GNUC__) || defined(__clang__))
|
163
|
+
#elif defined(BN_CAN_USE_INLINE_ASM) && defined(OPENSSL_X86_64)
|
166
164
|
__asm__ volatile("divq %4"
|
167
165
|
: "=a"(*quotient_out), "=d"(*rem_out)
|
168
166
|
: "a"(n1), "d"(n0), "rm"(d0)
|
169
167
|
: "cc");
|
170
168
|
#else
|
171
|
-
#if defined(
|
169
|
+
#if defined(BN_CAN_DIVIDE_ULLONG)
|
172
170
|
BN_ULLONG n = (((BN_ULLONG)n0) << BN_BITS2) | n1;
|
173
171
|
*quotient_out = (BN_ULONG)(n / d0);
|
174
172
|
#else
|
@@ -414,11 +412,37 @@ int BN_nnmod(BIGNUM *r, const BIGNUM *m, const BIGNUM *d, BN_CTX *ctx) {
|
|
414
412
|
return (d->neg ? BN_sub : BN_add)(r, r, d);
|
415
413
|
}
|
416
414
|
|
417
|
-
|
418
|
-
|
419
|
-
|
420
|
-
|
421
|
-
|
415
|
+
BN_ULONG bn_reduce_once(BN_ULONG *r, const BN_ULONG *a, BN_ULONG carry,
|
416
|
+
const BN_ULONG *m, size_t num) {
|
417
|
+
assert(r != a);
|
418
|
+
// |r| = |a| - |m|. |bn_sub_words| performs the bulk of the subtraction, and
|
419
|
+
// then we apply the borrow to |carry|.
|
420
|
+
carry -= bn_sub_words(r, a, m, num);
|
421
|
+
// We know 0 <= |a| < 2*|m|, so -|m| <= |r| < |m|.
|
422
|
+
//
|
423
|
+
// If 0 <= |r| < |m|, |r| fits in |num| words and |carry| is zero. We then
|
424
|
+
// wish to select |r| as the answer. Otherwise -m <= r < 0 and we wish to
|
425
|
+
// return |r| + |m|, or |a|. |carry| must then be -1 or all ones. In both
|
426
|
+
// cases, |carry| is a suitable input to |bn_select_words|.
|
427
|
+
//
|
428
|
+
// Although |carry| may be one if it was one on input and |bn_sub_words|
|
429
|
+
// returns zero, this would give |r| > |m|, violating our input assumptions.
|
430
|
+
assert(carry == 0 || carry == (BN_ULONG)-1);
|
431
|
+
bn_select_words(r, carry, a /* r < 0 */, r /* r >= 0 */, num);
|
432
|
+
return carry;
|
433
|
+
}
|
434
|
+
|
435
|
+
BN_ULONG bn_reduce_once_in_place(BN_ULONG *r, BN_ULONG carry, const BN_ULONG *m,
|
436
|
+
BN_ULONG *tmp, size_t num) {
|
437
|
+
// See |bn_reduce_once| for why this logic works.
|
438
|
+
carry -= bn_sub_words(tmp, r, m, num);
|
439
|
+
assert(carry == 0 || carry == (BN_ULONG)-1);
|
440
|
+
bn_select_words(r, carry, r /* tmp < 0 */, tmp /* tmp >= 0 */, num);
|
441
|
+
return carry;
|
442
|
+
}
|
443
|
+
|
444
|
+
void bn_mod_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b,
|
445
|
+
const BN_ULONG *m, BN_ULONG *tmp, size_t num) {
|
422
446
|
// r = a - b
|
423
447
|
BN_ULONG borrow = bn_sub_words(r, a, b, num);
|
424
448
|
// tmp = a - b + m
|
@@ -426,32 +450,10 @@ static void bn_mod_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b,
|
|
426
450
|
bn_select_words(r, 0 - borrow, tmp /* r < 0 */, r /* r >= 0 */, num);
|
427
451
|
}
|
428
452
|
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
const BN_ULONG *m, BN_ULONG *tmp, size_t num) {
|
434
|
-
// tmp = a + b. Note the result fits in |num|+1 words. We store the extra word
|
435
|
-
// in |carry|.
|
436
|
-
BN_ULONG carry = bn_add_words(tmp, a, b, num);
|
437
|
-
// r = a + b - m. We use |bn_sub_words| to perform the bulk of the
|
438
|
-
// subtraction, and then apply the borrow to |carry|.
|
439
|
-
carry -= bn_sub_words(r, tmp, m, num);
|
440
|
-
// |a| and |b| were both fully-reduced, so we know:
|
441
|
-
//
|
442
|
-
// 0 + 0 - m <= r < m + m - m
|
443
|
-
// -m <= r < m
|
444
|
-
//
|
445
|
-
// If 0 <= |r| < |m|, |r| fits in |num| words and |carry| is zero. We then
|
446
|
-
// wish to select |r| as the answer. Otherwise -m <= r < 0 and we wish to
|
447
|
-
// return |r| + |m|, or |tmp|. |carry| must then be -1 or all ones. In both
|
448
|
-
// cases, |carry| is a suitable input to |bn_select_words|.
|
449
|
-
//
|
450
|
-
// Although |carry| may be one if |bn_add_words| returns one and
|
451
|
-
// |bn_sub_words| returns zero, this would give |r| > |m|, which violates are
|
452
|
-
// input assumptions.
|
453
|
-
assert(carry == 0 || carry == (BN_ULONG)-1);
|
454
|
-
bn_select_words(r, carry, tmp /* r < 0 */, r /* r >= 0 */, num);
|
453
|
+
void bn_mod_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b,
|
454
|
+
const BN_ULONG *m, BN_ULONG *tmp, size_t num) {
|
455
|
+
BN_ULONG carry = bn_add_words(r, a, b, num);
|
456
|
+
bn_reduce_once_in_place(r, carry, m, tmp, num);
|
455
457
|
}
|
456
458
|
|
457
459
|
int bn_div_consttime(BIGNUM *quotient, BIGNUM *remainder,
|
@@ -504,27 +506,14 @@ int bn_div_consttime(BIGNUM *quotient, BIGNUM *remainder,
|
|
504
506
|
// extra word in |carry|.
|
505
507
|
BN_ULONG carry = bn_add_words(r->d, r->d, r->d, divisor->width);
|
506
508
|
r->d[0] |= (numerator->d[i] >> bit) & 1;
|
507
|
-
// tmp = r - divisor. We use |bn_sub_words| to perform the bulk of the
|
508
|
-
// subtraction, and then apply the borrow to |carry|.
|
509
|
-
carry -= bn_sub_words(tmp->d, r->d, divisor->d, divisor->width);
|
510
509
|
// |r| was previously fully-reduced, so we know:
|
511
|
-
//
|
512
|
-
//
|
513
|
-
//
|
514
|
-
|
515
|
-
|
516
|
-
// is zero. We then wish to select |tmp|. Otherwise,
|
517
|
-
// -|divisor| <= |tmp| < 0 and we wish to select |tmp| + |divisor|, which
|
518
|
-
// is |r|. |carry| must then be -1 (all ones). In both cases, |carry| is a
|
519
|
-
// suitable input to |bn_select_words|.
|
520
|
-
//
|
521
|
-
// Although |carry| may be one if |bn_add_words| returns one and
|
522
|
-
// |bn_sub_words| returns zero, this would give |r| > |d|, which violates
|
523
|
-
// the loop invariant.
|
524
|
-
bn_select_words(r->d, carry, r->d /* tmp < 0 */, tmp->d /* tmp >= 0 */,
|
525
|
-
divisor->width);
|
510
|
+
// 2*0 <= r <= 2*(divisor-1) + 1
|
511
|
+
// 0 <= r <= 2*divisor - 1 < 2*divisor.
|
512
|
+
// Thus |r| satisfies the preconditions for |bn_reduce_once_in_place|.
|
513
|
+
BN_ULONG subtracted = bn_reduce_once_in_place(r->d, carry, divisor->d,
|
514
|
+
tmp->d, divisor->width);
|
526
515
|
// The corresponding bit of the quotient is set iff we needed to subtract.
|
527
|
-
q->d[i] |= (~
|
516
|
+
q->d[i] |= (~subtracted & 1) << bit;
|
528
517
|
}
|
529
518
|
}
|
530
519
|
|
@@ -600,6 +589,7 @@ int bn_mod_add_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
|
600
589
|
if (ok) {
|
601
590
|
bn_mod_add_words(r->d, a->d, b->d, m->d, tmp->d, m->width);
|
602
591
|
r->width = m->width;
|
592
|
+
r->neg = 0;
|
603
593
|
}
|
604
594
|
BN_CTX_end(ctx);
|
605
595
|
return ok;
|
@@ -624,6 +614,7 @@ int bn_mod_sub_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
|
624
614
|
if (ok) {
|
625
615
|
bn_mod_sub_words(r->d, a->d, b->d, m->d, tmp->d, m->width);
|
626
616
|
r->width = m->width;
|
617
|
+
r->neg = 0;
|
627
618
|
}
|
628
619
|
BN_CTX_end(ctx);
|
629
620
|
return ok;
|