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
@@ -48,6 +48,7 @@
|
|
48
48
|
|
49
49
|
#include <openssl/aes.h>
|
50
50
|
|
51
|
+
#include <assert.h>
|
51
52
|
#include <limits.h>
|
52
53
|
#include <string.h>
|
53
54
|
|
@@ -65,9 +66,10 @@ static const unsigned kBound = 6;
|
|
65
66
|
|
66
67
|
int AES_wrap_key(const AES_KEY *key, const uint8_t *iv, uint8_t *out,
|
67
68
|
const uint8_t *in, size_t in_len) {
|
68
|
-
// See RFC 3394, section 2.2.1.
|
69
|
+
// See RFC 3394, section 2.2.1. Additionally, note that section 2 requires the
|
70
|
+
// plaintext be at least two 8-byte blocks.
|
69
71
|
|
70
|
-
if (in_len > INT_MAX - 8 || in_len <
|
72
|
+
if (in_len > INT_MAX - 8 || in_len < 16 || in_len % 8 != 0) {
|
71
73
|
return -1;
|
72
74
|
}
|
73
75
|
|
@@ -99,16 +101,17 @@ int AES_wrap_key(const AES_KEY *key, const uint8_t *iv, uint8_t *out,
|
|
99
101
|
return (int)in_len + 8;
|
100
102
|
}
|
101
103
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
104
|
+
// aes_unwrap_key_inner performs steps one and two from
|
105
|
+
// https://tools.ietf.org/html/rfc3394#section-2.2.2
|
106
|
+
static int aes_unwrap_key_inner(const AES_KEY *key, uint8_t *out,
|
107
|
+
uint8_t out_iv[8], const uint8_t *in,
|
108
|
+
size_t in_len) {
|
109
|
+
// See RFC 3394, section 2.2.2. Additionally, note that section 2 requires the
|
110
|
+
// plaintext be at least two 8-byte blocks, so the ciphertext must be at least
|
111
|
+
// three blocks.
|
112
|
+
|
113
|
+
if (in_len > INT_MAX || in_len < 24 || in_len % 8 != 0) {
|
114
|
+
return 0;
|
112
115
|
}
|
113
116
|
|
114
117
|
uint8_t A[AES_BLOCK_SIZE];
|
@@ -130,9 +133,104 @@ int AES_unwrap_key(const AES_KEY *key, const uint8_t *iv, uint8_t *out,
|
|
130
133
|
}
|
131
134
|
}
|
132
135
|
|
133
|
-
|
136
|
+
memcpy(out_iv, A, 8);
|
137
|
+
return 1;
|
138
|
+
}
|
139
|
+
|
140
|
+
int AES_unwrap_key(const AES_KEY *key, const uint8_t *iv, uint8_t *out,
|
141
|
+
const uint8_t *in, size_t in_len) {
|
142
|
+
uint8_t calculated_iv[8];
|
143
|
+
if (!aes_unwrap_key_inner(key, out, calculated_iv, in, in_len)) {
|
144
|
+
return -1;
|
145
|
+
}
|
146
|
+
|
147
|
+
if (iv == NULL) {
|
148
|
+
iv = kDefaultIV;
|
149
|
+
}
|
150
|
+
if (CRYPTO_memcmp(calculated_iv, iv, 8) != 0) {
|
134
151
|
return -1;
|
135
152
|
}
|
136
153
|
|
137
154
|
return (int)in_len - 8;
|
138
155
|
}
|
156
|
+
|
157
|
+
// kPaddingConstant is used in Key Wrap with Padding. See
|
158
|
+
// https://tools.ietf.org/html/rfc5649#section-3
|
159
|
+
static const uint8_t kPaddingConstant[4] = {0xa6, 0x59, 0x59, 0xa6};
|
160
|
+
|
161
|
+
int AES_wrap_key_padded(const AES_KEY *key, uint8_t *out, size_t *out_len,
|
162
|
+
size_t max_out, const uint8_t *in, size_t in_len) {
|
163
|
+
// See https://tools.ietf.org/html/rfc5649#section-4.1
|
164
|
+
const uint32_t in_len32_be = CRYPTO_bswap4(in_len);
|
165
|
+
const uint64_t in_len64 = in_len;
|
166
|
+
const size_t padded_len = (in_len + 7) & ~7;
|
167
|
+
|
168
|
+
*out_len = 0;
|
169
|
+
if (in_len == 0 || in_len64 > 0xffffffffu || in_len + 7 < in_len ||
|
170
|
+
padded_len + 8 < padded_len || max_out < padded_len + 8) {
|
171
|
+
return 0;
|
172
|
+
}
|
173
|
+
|
174
|
+
uint8_t block[AES_BLOCK_SIZE];
|
175
|
+
memcpy(block, kPaddingConstant, sizeof(kPaddingConstant));
|
176
|
+
memcpy(block + 4, &in_len32_be, sizeof(in_len32_be));
|
177
|
+
|
178
|
+
if (in_len <= 8) {
|
179
|
+
memset(block + 8, 0, 8);
|
180
|
+
memcpy(block + 8, in, in_len);
|
181
|
+
AES_encrypt(block, out, key);
|
182
|
+
*out_len = AES_BLOCK_SIZE;
|
183
|
+
return 1;
|
184
|
+
}
|
185
|
+
|
186
|
+
uint8_t *padded_in = OPENSSL_malloc(padded_len);
|
187
|
+
if (padded_in == NULL) {
|
188
|
+
return 0;
|
189
|
+
}
|
190
|
+
assert(padded_len >= 8);
|
191
|
+
memset(padded_in + padded_len - 8, 0, 8);
|
192
|
+
memcpy(padded_in, in, in_len);
|
193
|
+
const int ret = AES_wrap_key(key, block, out, padded_in, padded_len);
|
194
|
+
OPENSSL_free(padded_in);
|
195
|
+
if (ret < 0) {
|
196
|
+
return 0;
|
197
|
+
}
|
198
|
+
*out_len = ret;
|
199
|
+
return 1;
|
200
|
+
}
|
201
|
+
|
202
|
+
int AES_unwrap_key_padded(const AES_KEY *key, uint8_t *out, size_t *out_len,
|
203
|
+
size_t max_out, const uint8_t *in, size_t in_len) {
|
204
|
+
*out_len = 0;
|
205
|
+
if (in_len < AES_BLOCK_SIZE || max_out < in_len - 8) {
|
206
|
+
return 0;
|
207
|
+
}
|
208
|
+
|
209
|
+
uint8_t iv[8];
|
210
|
+
if (in_len == AES_BLOCK_SIZE) {
|
211
|
+
uint8_t block[AES_BLOCK_SIZE];
|
212
|
+
AES_decrypt(in, block, key);
|
213
|
+
memcpy(iv, block, sizeof(iv));
|
214
|
+
memcpy(out, block + 8, 8);
|
215
|
+
} else if (!aes_unwrap_key_inner(key, out, iv, in, in_len)) {
|
216
|
+
return 0;
|
217
|
+
}
|
218
|
+
assert(in_len % 8 == 0);
|
219
|
+
|
220
|
+
crypto_word_t ok = constant_time_eq_int(
|
221
|
+
CRYPTO_memcmp(iv, kPaddingConstant, sizeof(kPaddingConstant)), 0);
|
222
|
+
|
223
|
+
uint32_t claimed_len32;
|
224
|
+
memcpy(&claimed_len32, iv + 4, sizeof(claimed_len32));
|
225
|
+
const size_t claimed_len = CRYPTO_bswap4(claimed_len32);
|
226
|
+
ok &= ~constant_time_is_zero_w(claimed_len);
|
227
|
+
ok &= constant_time_eq_w((claimed_len - 1) >> 3, (in_len - 9) >> 3);
|
228
|
+
|
229
|
+
// Check that padding bytes are all zero.
|
230
|
+
for (size_t i = in_len - 15; i < in_len - 8; i++) {
|
231
|
+
ok &= constant_time_is_zero_w(constant_time_ge_8(i, claimed_len) & out[i]);
|
232
|
+
}
|
233
|
+
|
234
|
+
*out_len = constant_time_select_w(ok, claimed_len, 0);
|
235
|
+
return ok & 1;
|
236
|
+
}
|
@@ -6,7 +6,7 @@
|
|
6
6
|
* are met:
|
7
7
|
*
|
8
8
|
* 1. Redistributions of source code must retain the above copyright
|
9
|
-
* notice, this list of conditions and the following disclaimer.
|
9
|
+
* notice, this list of conditions and the following disclaimer.
|
10
10
|
*
|
11
11
|
* 2. Redistributions in binary form must reproduce the above copyright
|
12
12
|
* notice, this list of conditions and the following disclaimer in
|
@@ -50,14 +50,14 @@
|
|
50
50
|
|
51
51
|
#include <assert.h>
|
52
52
|
|
53
|
+
#include "../aes/internal.h"
|
53
54
|
#include "../modes/internal.h"
|
54
55
|
|
55
56
|
|
56
57
|
void AES_ctr128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
57
58
|
const AES_KEY *key, uint8_t ivec[AES_BLOCK_SIZE],
|
58
59
|
uint8_t ecount_buf[AES_BLOCK_SIZE], unsigned int *num) {
|
59
|
-
CRYPTO_ctr128_encrypt(in, out, len, key, ivec, ecount_buf, num,
|
60
|
-
(block128_f)AES_encrypt);
|
60
|
+
CRYPTO_ctr128_encrypt(in, out, len, key, ivec, ecount_buf, num, AES_encrypt);
|
61
61
|
}
|
62
62
|
|
63
63
|
void AES_ecb_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key,
|
@@ -72,33 +72,30 @@ void AES_ecb_encrypt(const uint8_t *in, uint8_t *out, const AES_KEY *key,
|
|
72
72
|
}
|
73
73
|
}
|
74
74
|
|
75
|
-
#if defined(OPENSSL_NO_ASM) || \
|
76
|
-
(!defined(OPENSSL_X86_64) && !defined(OPENSSL_X86))
|
77
75
|
void AES_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
78
76
|
const AES_KEY *key, uint8_t *ivec, const int enc) {
|
77
|
+
if (hwaes_capable()) {
|
78
|
+
aes_hw_cbc_encrypt(in, out, len, key, ivec, enc);
|
79
|
+
return;
|
80
|
+
}
|
79
81
|
|
82
|
+
#if defined(AES_NOHW_CBC)
|
83
|
+
if (!vpaes_capable()) {
|
84
|
+
aes_nohw_cbc_encrypt(in, out, len, key, ivec, enc);
|
85
|
+
return;
|
86
|
+
}
|
87
|
+
#endif
|
80
88
|
if (enc) {
|
81
|
-
CRYPTO_cbc128_encrypt(in, out, len, key, ivec,
|
89
|
+
CRYPTO_cbc128_encrypt(in, out, len, key, ivec, AES_encrypt);
|
82
90
|
} else {
|
83
|
-
CRYPTO_cbc128_decrypt(in, out, len, key, ivec,
|
91
|
+
CRYPTO_cbc128_decrypt(in, out, len, key, ivec, AES_decrypt);
|
84
92
|
}
|
85
93
|
}
|
86
|
-
#else
|
87
|
-
|
88
|
-
void asm_AES_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
89
|
-
const AES_KEY *key, uint8_t *ivec, const int enc);
|
90
|
-
void AES_cbc_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
91
|
-
const AES_KEY *key, uint8_t *ivec, const int enc) {
|
92
|
-
asm_AES_cbc_encrypt(in, out, len, key, ivec, enc);
|
93
|
-
}
|
94
|
-
|
95
|
-
#endif // OPENSSL_NO_ASM || (!OPENSSL_X86_64 && !OPENSSL_X86)
|
96
94
|
|
97
95
|
void AES_ofb128_encrypt(const uint8_t *in, uint8_t *out, size_t length,
|
98
96
|
const AES_KEY *key, uint8_t *ivec, int *num) {
|
99
97
|
unsigned num_u = (unsigned)(*num);
|
100
|
-
CRYPTO_ofb128_encrypt(in, out, length, key, ivec, &num_u,
|
101
|
-
(block128_f)AES_encrypt);
|
98
|
+
CRYPTO_ofb128_encrypt(in, out, length, key, ivec, &num_u, AES_encrypt);
|
102
99
|
*num = (int)num_u;
|
103
100
|
}
|
104
101
|
|
@@ -106,7 +103,6 @@ void AES_cfb128_encrypt(const uint8_t *in, uint8_t *out, size_t length,
|
|
106
103
|
const AES_KEY *key, uint8_t *ivec, int *num,
|
107
104
|
int enc) {
|
108
105
|
unsigned num_u = (unsigned)(*num);
|
109
|
-
CRYPTO_cfb128_encrypt(in, out, length, key, ivec, &num_u, enc,
|
110
|
-
(block128_f)AES_encrypt);
|
106
|
+
CRYPTO_cfb128_encrypt(in, out, length, key, ivec, &num_u, enc, AES_encrypt);
|
111
107
|
*num = (int)num_u;
|
112
108
|
}
|
@@ -19,6 +19,10 @@
|
|
19
19
|
#include <openssl/crypto.h>
|
20
20
|
|
21
21
|
#include <stdlib.h>
|
22
|
+
#if defined(BORINGSSL_FIPS)
|
23
|
+
#include <sys/mman.h>
|
24
|
+
#include <unistd.h>
|
25
|
+
#endif
|
22
26
|
|
23
27
|
#include <openssl/digest.h>
|
24
28
|
#include <openssl/hmac.h>
|
@@ -36,8 +40,10 @@
|
|
36
40
|
#include "bn/cmp.c"
|
37
41
|
#include "bn/ctx.c"
|
38
42
|
#include "bn/div.c"
|
43
|
+
#include "bn/div_extra.c"
|
39
44
|
#include "bn/exponentiation.c"
|
40
45
|
#include "bn/gcd.c"
|
46
|
+
#include "bn/gcd_extra.c"
|
41
47
|
#include "bn/generic.c"
|
42
48
|
#include "bn/jacobi.c"
|
43
49
|
#include "bn/montgomery.c"
|
@@ -55,22 +61,25 @@
|
|
55
61
|
#include "des/des.c"
|
56
62
|
#include "digest/digest.c"
|
57
63
|
#include "digest/digests.c"
|
64
|
+
#include "ecdh/ecdh.c"
|
58
65
|
#include "ecdsa/ecdsa.c"
|
59
66
|
#include "ec/ec.c"
|
60
67
|
#include "ec/ec_key.c"
|
61
68
|
#include "ec/ec_montgomery.c"
|
69
|
+
#include "ec/felem.c"
|
62
70
|
#include "ec/oct.c"
|
63
71
|
#include "ec/p224-64.c"
|
64
72
|
#include "../../third_party/fiat/p256.c"
|
65
73
|
#include "ec/p256-x86_64.c"
|
74
|
+
#include "ec/scalar.c"
|
66
75
|
#include "ec/simple.c"
|
76
|
+
#include "ec/simple_mul.c"
|
67
77
|
#include "ec/util.c"
|
68
78
|
#include "ec/wnaf.c"
|
69
79
|
#include "hmac/hmac.c"
|
70
80
|
#include "md4/md4.c"
|
71
81
|
#include "md5/md5.c"
|
72
82
|
#include "modes/cbc.c"
|
73
|
-
#include "modes/ccm.c"
|
74
83
|
#include "modes/cfb.c"
|
75
84
|
#include "modes/ctr.c"
|
76
85
|
#include "modes/gcm.c"
|
@@ -94,13 +103,61 @@
|
|
94
103
|
#if defined(BORINGSSL_FIPS)
|
95
104
|
|
96
105
|
#if !defined(OPENSSL_ASAN)
|
97
|
-
|
98
|
-
//
|
106
|
+
|
107
|
+
// These symbols are filled in by delocate.go (in static builds) or a linker
|
108
|
+
// script (in shared builds). They point to the start and end of the module, and
|
109
|
+
// the location of the integrity hash, respectively.
|
99
110
|
extern const uint8_t BORINGSSL_bcm_text_start[];
|
100
111
|
extern const uint8_t BORINGSSL_bcm_text_end[];
|
101
112
|
extern const uint8_t BORINGSSL_bcm_text_hash[];
|
113
|
+
#if defined(BORINGSSL_SHARED_LIBRARY)
|
114
|
+
extern const uint8_t BORINGSSL_bcm_rodata_start[];
|
115
|
+
extern const uint8_t BORINGSSL_bcm_rodata_end[];
|
102
116
|
#endif
|
103
117
|
|
118
|
+
// assert_within is used to sanity check that certain symbols are within the
|
119
|
+
// bounds of the integrity check. It checks that start <= symbol < end and
|
120
|
+
// aborts otherwise.
|
121
|
+
static void assert_within(const void *start, const void *symbol,
|
122
|
+
const void *end) {
|
123
|
+
const uintptr_t start_val = (uintptr_t) start;
|
124
|
+
const uintptr_t symbol_val = (uintptr_t) symbol;
|
125
|
+
const uintptr_t end_val = (uintptr_t) end;
|
126
|
+
|
127
|
+
if (start_val <= symbol_val && symbol_val < end_val) {
|
128
|
+
return;
|
129
|
+
}
|
130
|
+
|
131
|
+
fprintf(
|
132
|
+
stderr,
|
133
|
+
"FIPS module doesn't span expected symbol. Expected %p <= %p < %p\n",
|
134
|
+
start, symbol, end);
|
135
|
+
BORINGSSL_FIPS_abort();
|
136
|
+
}
|
137
|
+
|
138
|
+
#if defined(OPENSSL_ANDROID) && defined(OPENSSL_AARCH64)
|
139
|
+
static void BORINGSSL_maybe_set_module_text_permissions(int permission) {
|
140
|
+
// Android may be compiled in execute-only-memory mode, in which case the
|
141
|
+
// .text segment cannot be read. That conflicts with the need for a FIPS
|
142
|
+
// module to hash its own contents, therefore |mprotect| is used to make
|
143
|
+
// the module's .text readable for the duration of the hashing process. In
|
144
|
+
// other build configurations this is a no-op.
|
145
|
+
const uintptr_t page_size = getpagesize();
|
146
|
+
const uintptr_t page_start =
|
147
|
+
((uintptr_t)BORINGSSL_bcm_text_start) & ~(page_size - 1);
|
148
|
+
|
149
|
+
if (mprotect((void *)page_start,
|
150
|
+
((uintptr_t)BORINGSSL_bcm_text_end) - page_start,
|
151
|
+
permission) != 0) {
|
152
|
+
perror("BoringSSL: mprotect");
|
153
|
+
}
|
154
|
+
}
|
155
|
+
#else
|
156
|
+
static void BORINGSSL_maybe_set_module_text_permissions(int permission) {}
|
157
|
+
#endif // !ANDROID
|
158
|
+
|
159
|
+
#endif // !ASAN
|
160
|
+
|
104
161
|
static void __attribute__((constructor))
|
105
162
|
BORINGSSL_bcm_power_on_self_test(void) {
|
106
163
|
CRYPTO_library_init();
|
@@ -111,26 +168,81 @@ BORINGSSL_bcm_power_on_self_test(void) {
|
|
111
168
|
const uint8_t *const start = BORINGSSL_bcm_text_start;
|
112
169
|
const uint8_t *const end = BORINGSSL_bcm_text_end;
|
113
170
|
|
114
|
-
|
171
|
+
assert_within(start, AES_encrypt, end);
|
172
|
+
assert_within(start, RSA_sign, end);
|
173
|
+
assert_within(start, RAND_bytes, end);
|
174
|
+
assert_within(start, EC_GROUP_cmp, end);
|
175
|
+
assert_within(start, SHA256_Update, end);
|
176
|
+
assert_within(start, ECDSA_do_verify, end);
|
177
|
+
assert_within(start, EVP_AEAD_CTX_seal, end);
|
178
|
+
|
179
|
+
#if defined(BORINGSSL_SHARED_LIBRARY)
|
180
|
+
const uint8_t *const rodata_start = BORINGSSL_bcm_rodata_start;
|
181
|
+
const uint8_t *const rodata_end = BORINGSSL_bcm_rodata_end;
|
182
|
+
#else
|
183
|
+
// In the static build, read-only data is placed within the .text segment.
|
184
|
+
const uint8_t *const rodata_start = BORINGSSL_bcm_text_start;
|
185
|
+
const uint8_t *const rodata_end = BORINGSSL_bcm_text_end;
|
186
|
+
#endif
|
187
|
+
|
188
|
+
assert_within(rodata_start, kPrimes, rodata_end);
|
189
|
+
assert_within(rodata_start, des_skb, rodata_end);
|
190
|
+
assert_within(rodata_start, kP256Params, rodata_end);
|
191
|
+
assert_within(rodata_start, kPKCS1SigPrefixes, rodata_end);
|
192
|
+
|
193
|
+
#if defined(OPENSSL_ANDROID)
|
194
|
+
uint8_t result[SHA256_DIGEST_LENGTH];
|
195
|
+
const EVP_MD *const kHashFunction = EVP_sha256();
|
196
|
+
#else
|
115
197
|
uint8_t result[SHA512_DIGEST_LENGTH];
|
198
|
+
const EVP_MD *const kHashFunction = EVP_sha512();
|
199
|
+
#endif
|
116
200
|
|
201
|
+
static const uint8_t kHMACKey[64] = {0};
|
117
202
|
unsigned result_len;
|
118
|
-
|
119
|
-
|
203
|
+
HMAC_CTX hmac_ctx;
|
204
|
+
HMAC_CTX_init(&hmac_ctx);
|
205
|
+
if (!HMAC_Init_ex(&hmac_ctx, kHMACKey, sizeof(kHMACKey), kHashFunction,
|
206
|
+
NULL /* no ENGINE */)) {
|
207
|
+
fprintf(stderr, "HMAC_Init_ex failed.\n");
|
208
|
+
goto err;
|
209
|
+
}
|
210
|
+
|
211
|
+
BORINGSSL_maybe_set_module_text_permissions(PROT_READ | PROT_EXEC);
|
212
|
+
#if defined(BORINGSSL_SHARED_LIBRARY)
|
213
|
+
uint64_t length = end - start;
|
214
|
+
HMAC_Update(&hmac_ctx, (const uint8_t *) &length, sizeof(length));
|
215
|
+
HMAC_Update(&hmac_ctx, start, length);
|
216
|
+
|
217
|
+
length = rodata_end - rodata_start;
|
218
|
+
HMAC_Update(&hmac_ctx, (const uint8_t *) &length, sizeof(length));
|
219
|
+
HMAC_Update(&hmac_ctx, rodata_start, length);
|
220
|
+
#else
|
221
|
+
HMAC_Update(&hmac_ctx, start, end - start);
|
222
|
+
#endif
|
223
|
+
BORINGSSL_maybe_set_module_text_permissions(PROT_EXEC);
|
224
|
+
|
225
|
+
if (!HMAC_Final(&hmac_ctx, result, &result_len) ||
|
120
226
|
result_len != sizeof(result)) {
|
227
|
+
fprintf(stderr, "HMAC failed.\n");
|
121
228
|
goto err;
|
122
229
|
}
|
230
|
+
HMAC_CTX_cleanup(&hmac_ctx);
|
123
231
|
|
124
232
|
const uint8_t *expected = BORINGSSL_bcm_text_hash;
|
125
233
|
|
126
234
|
if (!check_test(expected, result, sizeof(result), "FIPS integrity test")) {
|
127
235
|
goto err;
|
128
236
|
}
|
129
|
-
#endif
|
130
237
|
|
238
|
+
if (!boringssl_fips_self_test(BORINGSSL_bcm_text_hash, sizeof(result))) {
|
239
|
+
goto err;
|
240
|
+
}
|
241
|
+
#else
|
131
242
|
if (!BORINGSSL_self_test()) {
|
132
243
|
goto err;
|
133
244
|
}
|
245
|
+
#endif // OPENSSL_ASAN
|
134
246
|
|
135
247
|
return;
|
136
248
|
|
@@ -384,6 +384,23 @@ int bn_expand(BIGNUM *bn, size_t bits) {
|
|
384
384
|
}
|
385
385
|
|
386
386
|
int bn_resize_words(BIGNUM *bn, size_t words) {
|
387
|
+
#if defined(OPENSSL_PPC64LE)
|
388
|
+
// This is a workaround for a miscompilation bug in Clang 7.0.1 on POWER.
|
389
|
+
// The unittests catch the miscompilation, if it occurs, and it manifests
|
390
|
+
// as a crash in |bn_fits_in_words|.
|
391
|
+
//
|
392
|
+
// The bug only triggers if building in FIPS mode and with -O3. Clang 8.0.1
|
393
|
+
// has the same bug but this workaround is not effective there---I've not
|
394
|
+
// been able to find a workaround for 8.0.1.
|
395
|
+
//
|
396
|
+
// At the time of writing (2019-08-08), Clang git does *not* have this bug
|
397
|
+
// and does not need this workaroud. The current git version should go on to
|
398
|
+
// be Clang 10 thus, once we can depend on that, this can be removed.
|
399
|
+
if (value_barrier_w((size_t)bn->width == words)) {
|
400
|
+
return 1;
|
401
|
+
}
|
402
|
+
#endif
|
403
|
+
|
387
404
|
if ((size_t)bn->width <= words) {
|
388
405
|
if (!bn_wexpand(bn, words)) {
|
389
406
|
return 0;
|
@@ -406,8 +423,8 @@ int bn_resize_words(BIGNUM *bn, size_t words) {
|
|
406
423
|
void bn_select_words(BN_ULONG *r, BN_ULONG mask, const BN_ULONG *a,
|
407
424
|
const BN_ULONG *b, size_t num) {
|
408
425
|
for (size_t i = 0; i < num; i++) {
|
409
|
-
|
410
|
-
|
426
|
+
OPENSSL_STATIC_ASSERT(sizeof(BN_ULONG) <= sizeof(crypto_word_t),
|
427
|
+
"crypto_word_t is too small");
|
411
428
|
r[i] = constant_time_select_w(mask, a[i], b[i]);
|
412
429
|
}
|
413
430
|
}
|