grpc 1.24.0 → 1.25.0.pre1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +306 -243
- data/etc/roots.pem +0 -100
- data/include/grpc/grpc_security.h +44 -18
- data/include/grpc/impl/codegen/grpc_types.h +15 -0
- data/include/grpc/impl/codegen/port_platform.h +27 -11
- data/include/grpc/impl/codegen/sync_generic.h +1 -1
- data/src/boringssl/err_data.c +695 -650
- data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
- data/src/core/ext/filters/client_channel/client_channel.h +24 -0
- data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
- data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
- data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
- data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
- data/src/core/ext/filters/client_channel/resolver.cc +1 -2
- data/src/core/ext/filters/client_channel/resolver.h +8 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
- data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
- data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
- data/src/core/ext/filters/client_channel/service_config.h +8 -8
- data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
- data/src/core/ext/filters/client_channel/subchannel.h +7 -9
- data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
- data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
- data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
- data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
- data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
- data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
- data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
- data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
- data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
- data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
- data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
- data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
- data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
- data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
- data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
- data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
- data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
- data/src/core/lib/channel/channel_args.cc +16 -0
- data/src/core/lib/channel/channel_args.h +22 -0
- data/src/core/lib/channel/channelz.cc +5 -6
- data/src/core/lib/channel/channelz.h +1 -1
- data/src/core/lib/channel/connected_channel.cc +20 -20
- data/src/core/lib/channel/handshaker.h +3 -4
- data/src/core/lib/channel/handshaker_factory.h +1 -3
- data/src/core/lib/debug/trace.h +3 -2
- data/src/core/lib/gprpp/arena.cc +3 -3
- data/src/core/lib/gprpp/arena.h +2 -3
- data/src/core/lib/gprpp/inlined_vector.h +9 -0
- data/src/core/lib/gprpp/map.h +3 -501
- data/src/core/lib/gprpp/memory.h +45 -41
- data/src/core/lib/gprpp/mpscq.cc +108 -0
- data/src/core/lib/gprpp/mpscq.h +98 -0
- data/src/core/lib/gprpp/orphanable.h +6 -11
- data/src/core/lib/gprpp/ref_counted.h +25 -19
- data/src/core/lib/gprpp/set.h +33 -0
- data/src/core/lib/gprpp/thd.h +2 -4
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli_security_connector.cc +15 -11
- data/src/core/lib/http/parser.cc +1 -1
- data/src/core/lib/iomgr/buffer_list.cc +4 -5
- data/src/core/lib/iomgr/buffer_list.h +5 -6
- data/src/core/lib/iomgr/call_combiner.cc +4 -5
- data/src/core/lib/iomgr/call_combiner.h +2 -2
- data/src/core/lib/iomgr/cfstream_handle.h +3 -5
- data/src/core/lib/iomgr/closure.h +8 -3
- data/src/core/lib/iomgr/combiner.cc +45 -82
- data/src/core/lib/iomgr/combiner.h +32 -8
- data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
- data/src/core/lib/iomgr/exec_ctx.h +4 -3
- data/src/core/lib/iomgr/executor.cc +4 -2
- data/src/core/lib/iomgr/executor.h +3 -0
- data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
- data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
- data/src/core/lib/iomgr/executor/threadpool.h +7 -11
- data/src/core/lib/iomgr/resource_quota.cc +55 -51
- data/src/core/lib/iomgr/resource_quota.h +13 -9
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
- data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
- data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
- data/src/core/lib/iomgr/tcp_custom.cc +9 -7
- data/src/core/lib/iomgr/tcp_posix.cc +20 -16
- data/src/core/lib/iomgr/tcp_server.h +1 -4
- data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
- data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/udp_server.cc +3 -2
- data/src/core/lib/iomgr/udp_server.h +6 -12
- data/src/core/lib/json/json.h +1 -1
- data/src/core/lib/json/json_string.cc +2 -2
- data/src/core/lib/profiling/basic_timers.cc +2 -2
- data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
- data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +4 -20
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
- data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/security_connector.cc +1 -0
- data/src/core/lib/security/security_connector/security_connector.h +19 -17
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
- data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
- data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
- data/src/core/lib/security/transport/security_handshaker.cc +29 -13
- data/src/core/lib/security/transport/security_handshaker.h +4 -2
- data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
- data/src/core/lib/slice/slice.cc +2 -10
- data/src/core/lib/slice/slice_hash_table.h +4 -6
- data/src/core/lib/slice/slice_intern.cc +42 -39
- data/src/core/lib/slice/slice_internal.h +3 -3
- data/src/core/lib/slice/slice_utils.h +21 -4
- data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
- data/src/core/lib/surface/call.cc +3 -3
- data/src/core/lib/surface/channel.cc +7 -0
- data/src/core/lib/surface/completion_queue.cc +12 -11
- data/src/core/lib/surface/completion_queue.h +4 -2
- data/src/core/lib/surface/init.cc +1 -0
- data/src/core/lib/surface/lame_client.cc +33 -18
- data/src/core/lib/surface/server.cc +77 -76
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -7
- data/src/core/lib/transport/connectivity_state.cc +112 -98
- data/src/core/lib/transport/connectivity_state.h +100 -50
- data/src/core/lib/transport/static_metadata.cc +276 -288
- data/src/core/lib/transport/static_metadata.h +73 -76
- data/src/core/lib/transport/status_conversion.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +1 -1
- data/src/core/lib/transport/transport.cc +2 -2
- data/src/core/lib/transport/transport.h +12 -4
- data/src/core/lib/transport/transport_op_string.cc +14 -11
- data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
- data/src/core/tsi/fake_transport_security.cc +7 -5
- data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
- data/src/core/tsi/local_transport_security.cc +8 -6
- data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
- data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
- data/src/core/tsi/ssl_transport_security.cc +12 -12
- data/src/core/tsi/ssl_transport_security.h +2 -2
- data/src/core/tsi/transport_security_grpc.cc +7 -0
- data/src/core/tsi/transport_security_grpc.h +6 -0
- data/src/ruby/ext/grpc/extconf.rb +1 -0
- data/src/ruby/ext/grpc/rb_call.c +1 -1
- data/src/ruby/ext/grpc/rb_channel.c +1 -1
- data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
- data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
- data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
- data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
- data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
- data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
- data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
- data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
- data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
- data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
- data/third_party/boringssl/crypto/base64/base64.c +2 -2
- data/third_party/boringssl/crypto/bio/bio.c +73 -9
- data/third_party/boringssl/crypto/bio/connect.c +4 -0
- data/third_party/boringssl/crypto/bio/fd.c +4 -0
- data/third_party/boringssl/crypto/bio/file.c +5 -2
- data/third_party/boringssl/crypto/bio/socket.c +4 -0
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
- data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
- data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
- data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
- data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
- data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
- data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
- data/third_party/boringssl/crypto/chacha/internal.h +45 -0
- data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
- data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
- data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
- data/third_party/boringssl/crypto/conf/conf.c +7 -0
- data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
- data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
- data/third_party/boringssl/crypto/cpu-intel.c +45 -51
- data/third_party/boringssl/crypto/crypto.c +39 -22
- data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
- data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
- data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
- data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
- data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
- data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
- data/third_party/boringssl/crypto/engine/engine.c +2 -1
- data/third_party/boringssl/crypto/err/err.c +2 -0
- data/third_party/boringssl/crypto/err/internal.h +2 -2
- data/third_party/boringssl/crypto/evp/evp.c +89 -8
- data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
- data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
- data/third_party/boringssl/crypto/evp/internal.h +18 -1
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
- data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
- data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
- data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
- data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
- data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
- data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
- data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
- data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
- data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
- data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
- data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
- data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
- data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
- data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
- data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
- data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
- data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
- data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
- data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
- data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
- data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
- data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
- data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
- data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
- data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
- data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
- data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
- data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
- data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
- data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
- data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
- data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
- data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
- data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
- data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
- data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
- data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
- data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
- data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
- data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
- data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
- data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
- data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
- data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
- data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
- data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
- data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
- data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
- data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
- data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
- data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
- data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
- data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
- data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
- data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
- data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
- data/third_party/boringssl/crypto/hrss/internal.h +62 -0
- data/third_party/boringssl/crypto/internal.h +95 -20
- data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
- data/third_party/boringssl/crypto/mem.c +39 -2
- data/third_party/boringssl/crypto/obj/obj.c +4 -4
- data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
- data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
- data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
- data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
- data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
- data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
- data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
- data/third_party/boringssl/crypto/pool/internal.h +1 -1
- data/third_party/boringssl/crypto/pool/pool.c +21 -0
- data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
- data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
- data/third_party/boringssl/crypto/refcount_lock.c +2 -2
- data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
- data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
- data/third_party/boringssl/crypto/stack/stack.c +83 -32
- data/third_party/boringssl/crypto/thread_none.c +2 -2
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +38 -19
- data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
- data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
- data/third_party/boringssl/crypto/x509/by_file.c +12 -10
- data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
- data/third_party/boringssl/crypto/x509/t_req.c +1 -3
- data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
- data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
- data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
- data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
- data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
- data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
- data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
- data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
- data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
- data/third_party/boringssl/crypto/x509/x509name.c +2 -3
- data/third_party/boringssl/crypto/x509/x_all.c +109 -210
- data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
- data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
- data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
- data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
- data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
- data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
- data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
- data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
- data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
- data/third_party/boringssl/include/openssl/aead.h +45 -19
- data/third_party/boringssl/include/openssl/aes.h +32 -7
- data/third_party/boringssl/include/openssl/asn1.h +7 -77
- data/third_party/boringssl/include/openssl/base.h +120 -6
- data/third_party/boringssl/include/openssl/base64.h +4 -1
- data/third_party/boringssl/include/openssl/bio.h +112 -81
- data/third_party/boringssl/include/openssl/blowfish.h +3 -3
- data/third_party/boringssl/include/openssl/bn.h +55 -29
- data/third_party/boringssl/include/openssl/buf.h +2 -2
- data/third_party/boringssl/include/openssl/bytestring.h +54 -32
- data/third_party/boringssl/include/openssl/cast.h +2 -2
- data/third_party/boringssl/include/openssl/cipher.h +46 -16
- data/third_party/boringssl/include/openssl/cmac.h +6 -2
- data/third_party/boringssl/include/openssl/conf.h +3 -6
- data/third_party/boringssl/include/openssl/cpu.h +25 -9
- data/third_party/boringssl/include/openssl/crypto.h +32 -10
- data/third_party/boringssl/include/openssl/curve25519.h +4 -4
- data/third_party/boringssl/include/openssl/dh.h +3 -2
- data/third_party/boringssl/include/openssl/digest.h +21 -7
- data/third_party/boringssl/include/openssl/dsa.h +8 -2
- data/third_party/boringssl/include/openssl/e_os2.h +18 -0
- data/third_party/boringssl/include/openssl/ec.h +25 -21
- data/third_party/boringssl/include/openssl/ec_key.h +36 -8
- data/third_party/boringssl/include/openssl/ecdh.h +17 -0
- data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
- data/third_party/boringssl/include/openssl/engine.h +4 -4
- data/third_party/boringssl/include/openssl/err.h +3 -0
- data/third_party/boringssl/include/openssl/evp.h +199 -42
- data/third_party/boringssl/include/openssl/hmac.h +4 -4
- data/third_party/boringssl/include/openssl/hrss.h +100 -0
- data/third_party/boringssl/include/openssl/lhash.h +131 -23
- data/third_party/boringssl/include/openssl/md4.h +6 -4
- data/third_party/boringssl/include/openssl/md5.h +6 -4
- data/third_party/boringssl/include/openssl/mem.h +6 -2
- data/third_party/boringssl/include/openssl/nid.h +3 -0
- data/third_party/boringssl/include/openssl/obj.h +3 -0
- data/third_party/boringssl/include/openssl/pem.h +102 -64
- data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
- data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
- data/third_party/boringssl/include/openssl/pool.h +13 -2
- data/third_party/boringssl/include/openssl/ripemd.h +5 -4
- data/third_party/boringssl/include/openssl/rsa.h +46 -15
- data/third_party/boringssl/include/openssl/sha.h +40 -28
- data/third_party/boringssl/include/openssl/siphash.h +37 -0
- data/third_party/boringssl/include/openssl/span.h +17 -9
- data/third_party/boringssl/include/openssl/ssl.h +766 -393
- data/third_party/boringssl/include/openssl/ssl3.h +4 -3
- data/third_party/boringssl/include/openssl/stack.h +134 -77
- data/third_party/boringssl/include/openssl/thread.h +1 -1
- data/third_party/boringssl/include/openssl/tls1.h +25 -9
- data/third_party/boringssl/include/openssl/type_check.h +14 -15
- data/third_party/boringssl/include/openssl/x509.h +28 -3
- data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
- data/third_party/boringssl/include/openssl/x509v3.h +17 -13
- data/third_party/boringssl/ssl/d1_both.cc +9 -18
- data/third_party/boringssl/ssl/d1_lib.cc +4 -3
- data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
- data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
- data/third_party/boringssl/ssl/dtls_method.cc +0 -1
- data/third_party/boringssl/ssl/dtls_record.cc +28 -28
- data/third_party/boringssl/ssl/handoff.cc +295 -91
- data/third_party/boringssl/ssl/handshake.cc +133 -72
- data/third_party/boringssl/ssl/handshake_client.cc +218 -189
- data/third_party/boringssl/ssl/handshake_server.cc +399 -272
- data/third_party/boringssl/ssl/internal.h +1413 -928
- data/third_party/boringssl/ssl/s3_both.cc +175 -36
- data/third_party/boringssl/ssl/s3_lib.cc +9 -13
- data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
- data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
- data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
- data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
- data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
- data/third_party/boringssl/ssl/ssl_file.cc +2 -0
- data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
- data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
- data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
- data/third_party/boringssl/ssl/ssl_session.cc +230 -178
- data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
- data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
- data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
- data/third_party/boringssl/ssl/t1_enc.cc +5 -96
- data/third_party/boringssl/ssl/t1_lib.cc +931 -678
- data/third_party/boringssl/ssl/tls13_both.cc +251 -121
- data/third_party/boringssl/ssl/tls13_client.cc +129 -73
- data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
- data/third_party/boringssl/ssl/tls13_server.cc +259 -192
- data/third_party/boringssl/ssl/tls_method.cc +26 -21
- data/third_party/boringssl/ssl/tls_record.cc +42 -47
- data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
- data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
- data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
- data/third_party/boringssl/third_party/fiat/p256.c +238 -999
- data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
- data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
- data/third_party/upb/upb/port_def.inc +1 -1
- data/third_party/upb/upb/table.c +2 -1
- metadata +71 -43
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
- data/src/core/lib/gpr/mpscq.cc +0 -117
- data/src/core/lib/gpr/mpscq.h +0 -88
- data/src/core/lib/gprpp/abstract.h +0 -47
- data/src/core/lib/gprpp/pair.h +0 -38
- data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
- data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
- data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
- data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -51,6 +51,10 @@
|
|
51
51
|
|
52
52
|
#include <openssl/base.h>
|
53
53
|
|
54
|
+
#include <openssl/aes.h>
|
55
|
+
#include <openssl/cpu.h>
|
56
|
+
|
57
|
+
#include <stdlib.h>
|
54
58
|
#include <string.h>
|
55
59
|
|
56
60
|
#include "../../internal.h"
|
@@ -60,12 +64,6 @@ extern "C" {
|
|
60
64
|
#endif
|
61
65
|
|
62
66
|
|
63
|
-
#define STRICT_ALIGNMENT 1
|
64
|
-
#if defined(OPENSSL_X86_64) || defined(OPENSSL_X86) || defined(OPENSSL_AARCH64)
|
65
|
-
#undef STRICT_ALIGNMENT
|
66
|
-
#define STRICT_ALIGNMENT 0
|
67
|
-
#endif
|
68
|
-
|
69
67
|
static inline uint32_t GETU32(const void *in) {
|
70
68
|
uint32_t v;
|
71
69
|
OPENSSL_memcpy(&v, in, sizeof(v));
|
@@ -87,62 +85,24 @@ static inline void store_word_le(void *out, size_t v) {
|
|
87
85
|
OPENSSL_memcpy(out, &v, sizeof(v));
|
88
86
|
}
|
89
87
|
|
90
|
-
// block128_f is the type of
|
88
|
+
// block128_f is the type of an AES block cipher implementation.
|
89
|
+
//
|
90
|
+
// Unlike upstream OpenSSL, it and the other functions in this file hard-code
|
91
|
+
// |AES_KEY|. It is undefined in C to call a function pointer with anything
|
92
|
+
// other than the original type. Thus we either must match |block128_f| to the
|
93
|
+
// type signature of |AES_encrypt| and friends or pass in |void*| wrapper
|
94
|
+
// functions.
|
95
|
+
//
|
96
|
+
// These functions are called exclusively with AES, so we use the former.
|
91
97
|
typedef void (*block128_f)(const uint8_t in[16], uint8_t out[16],
|
92
|
-
const
|
93
|
-
|
94
|
-
// GCM definitions
|
95
|
-
typedef struct { uint64_t hi,lo; } u128;
|
96
|
-
|
97
|
-
// gmult_func multiplies |Xi| by the GCM key and writes the result back to
|
98
|
-
// |Xi|.
|
99
|
-
typedef void (*gmult_func)(uint64_t Xi[2], const u128 Htable[16]);
|
100
|
-
|
101
|
-
// ghash_func repeatedly multiplies |Xi| by the GCM key and adds in blocks from
|
102
|
-
// |inp|. The result is written back to |Xi| and the |len| argument must be a
|
103
|
-
// multiple of 16.
|
104
|
-
typedef void (*ghash_func)(uint64_t Xi[2], const u128 Htable[16],
|
105
|
-
const uint8_t *inp, size_t len);
|
106
|
-
|
107
|
-
// This differs from upstream's |gcm128_context| in that it does not have the
|
108
|
-
// |key| pointer, in order to make it |memcpy|-friendly. Rather the key is
|
109
|
-
// passed into each call that needs it.
|
110
|
-
struct gcm128_context {
|
111
|
-
// Following 6 names follow names in GCM specification
|
112
|
-
union {
|
113
|
-
uint64_t u[2];
|
114
|
-
uint32_t d[4];
|
115
|
-
uint8_t c[16];
|
116
|
-
size_t t[16 / sizeof(size_t)];
|
117
|
-
} Yi, EKi, EK0, len, Xi;
|
118
|
-
|
119
|
-
// Note that the order of |Xi|, |H| and |Htable| is fixed by the MOVBE-based,
|
120
|
-
// x86-64, GHASH assembly.
|
121
|
-
u128 H;
|
122
|
-
u128 Htable[16];
|
123
|
-
gmult_func gmult;
|
124
|
-
ghash_func ghash;
|
125
|
-
|
126
|
-
unsigned int mres, ares;
|
127
|
-
block128_f block;
|
128
|
-
|
129
|
-
// use_aesni_gcm_crypt is true if this context should use the assembly
|
130
|
-
// functions |aesni_gcm_encrypt| and |aesni_gcm_decrypt| to process data.
|
131
|
-
unsigned use_aesni_gcm_crypt:1;
|
132
|
-
};
|
133
|
-
|
134
|
-
#if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
|
135
|
-
// crypto_gcm_clmul_enabled returns one if the CLMUL implementation of GCM is
|
136
|
-
// used.
|
137
|
-
int crypto_gcm_clmul_enabled(void);
|
138
|
-
#endif
|
98
|
+
const AES_KEY *key);
|
139
99
|
|
140
100
|
|
141
101
|
// CTR.
|
142
102
|
|
143
103
|
// ctr128_f is the type of a function that performs CTR-mode encryption.
|
144
104
|
typedef void (*ctr128_f)(const uint8_t *in, uint8_t *out, size_t blocks,
|
145
|
-
const
|
105
|
+
const AES_KEY *key, const uint8_t ivec[16]);
|
146
106
|
|
147
107
|
// CRYPTO_ctr128_encrypt encrypts (or decrypts, it's the same in CTR mode)
|
148
108
|
// |len| bytes from |in| to |out| using |block| in counter mode. There's no
|
@@ -151,7 +111,7 @@ typedef void (*ctr128_f)(const uint8_t *in, uint8_t *out, size_t blocks,
|
|
151
111
|
// call. The counter is a 128-bit, big-endian value in |ivec| and is
|
152
112
|
// incremented by this function.
|
153
113
|
void CRYPTO_ctr128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
154
|
-
const
|
114
|
+
const AES_KEY *key, uint8_t ivec[16],
|
155
115
|
uint8_t ecount_buf[16], unsigned *num,
|
156
116
|
block128_f block);
|
157
117
|
|
@@ -160,25 +120,74 @@ void CRYPTO_ctr128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
|
160
120
|
// bits of the counter. This is useful when |ctr| can be an optimised
|
161
121
|
// function.
|
162
122
|
void CRYPTO_ctr128_encrypt_ctr32(const uint8_t *in, uint8_t *out, size_t len,
|
163
|
-
const
|
123
|
+
const AES_KEY *key, uint8_t ivec[16],
|
164
124
|
uint8_t ecount_buf[16], unsigned *num,
|
165
125
|
ctr128_f ctr);
|
166
126
|
|
167
|
-
#if !defined(OPENSSL_NO_ASM) && \
|
168
|
-
(defined(OPENSSL_X86) || defined(OPENSSL_X86_64))
|
169
|
-
void aesni_ctr32_encrypt_blocks(const uint8_t *in, uint8_t *out, size_t blocks,
|
170
|
-
const void *key, const uint8_t *ivec);
|
171
|
-
#endif
|
172
|
-
|
173
127
|
|
174
128
|
// GCM.
|
175
129
|
//
|
176
130
|
// This API differs from the upstream API slightly. The |GCM128_CONTEXT| does
|
177
131
|
// not have a |key| pointer that points to the key as upstream's version does.
|
178
132
|
// Instead, every function takes a |key| parameter. This way |GCM128_CONTEXT|
|
179
|
-
// can be safely copied.
|
133
|
+
// can be safely copied. Additionally, |gcm_key| is split into a separate
|
134
|
+
// struct.
|
135
|
+
|
136
|
+
typedef struct { uint64_t hi,lo; } u128;
|
137
|
+
|
138
|
+
// gmult_func multiplies |Xi| by the GCM key and writes the result back to
|
139
|
+
// |Xi|.
|
140
|
+
typedef void (*gmult_func)(uint64_t Xi[2], const u128 Htable[16]);
|
141
|
+
|
142
|
+
// ghash_func repeatedly multiplies |Xi| by the GCM key and adds in blocks from
|
143
|
+
// |inp|. The result is written back to |Xi| and the |len| argument must be a
|
144
|
+
// multiple of 16.
|
145
|
+
typedef void (*ghash_func)(uint64_t Xi[2], const u128 Htable[16],
|
146
|
+
const uint8_t *inp, size_t len);
|
147
|
+
|
148
|
+
typedef struct gcm128_key_st {
|
149
|
+
// Note the MOVBE-based, x86-64, GHASH assembly requires |H| and |Htable| to
|
150
|
+
// be the first two elements of this struct. Additionally, some assembly
|
151
|
+
// routines require a 16-byte-aligned |Htable| when hashing data, but not
|
152
|
+
// initialization. |GCM128_KEY| is not itself aligned to simplify embedding in
|
153
|
+
// |EVP_AEAD_CTX|, but |Htable|'s offset must be a multiple of 16.
|
154
|
+
u128 H;
|
155
|
+
u128 Htable[16];
|
156
|
+
gmult_func gmult;
|
157
|
+
ghash_func ghash;
|
158
|
+
|
159
|
+
block128_f block;
|
160
|
+
|
161
|
+
// use_aesni_gcm_crypt is true if this context should use the assembly
|
162
|
+
// functions |aesni_gcm_encrypt| and |aesni_gcm_decrypt| to process data.
|
163
|
+
unsigned use_aesni_gcm_crypt:1;
|
164
|
+
} GCM128_KEY;
|
165
|
+
|
166
|
+
// GCM128_CONTEXT contains state for a single GCM operation. The structure
|
167
|
+
// should be zero-initialized before use.
|
168
|
+
typedef struct {
|
169
|
+
// The following 5 names follow names in GCM specification
|
170
|
+
union {
|
171
|
+
uint64_t u[2];
|
172
|
+
uint32_t d[4];
|
173
|
+
uint8_t c[16];
|
174
|
+
size_t t[16 / sizeof(size_t)];
|
175
|
+
} Yi, EKi, EK0, len, Xi;
|
176
|
+
|
177
|
+
// Note that the order of |Xi| and |gcm_key| is fixed by the MOVBE-based,
|
178
|
+
// x86-64, GHASH assembly. Additionally, some assembly routines require
|
179
|
+
// |gcm_key| to be 16-byte aligned. |GCM128_KEY| is not itself aligned to
|
180
|
+
// simplify embedding in |EVP_AEAD_CTX|.
|
181
|
+
alignas(16) GCM128_KEY gcm_key;
|
180
182
|
|
181
|
-
|
183
|
+
unsigned mres, ares;
|
184
|
+
} GCM128_CONTEXT;
|
185
|
+
|
186
|
+
#if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
|
187
|
+
// crypto_gcm_clmul_enabled returns one if the CLMUL implementation of GCM is
|
188
|
+
// used.
|
189
|
+
int crypto_gcm_clmul_enabled(void);
|
190
|
+
#endif
|
182
191
|
|
183
192
|
// CRYPTO_ghash_init writes a precomputed table of powers of |gcm_key| to
|
184
193
|
// |out_table| and sets |*out_mult| and |*out_hash| to (potentially hardware
|
@@ -186,16 +195,17 @@ typedef struct gcm128_context GCM128_CONTEXT;
|
|
186
195
|
// AVX implementation was used |*out_is_avx| will be true.
|
187
196
|
void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
|
188
197
|
u128 *out_key, u128 out_table[16], int *out_is_avx,
|
189
|
-
const uint8_t
|
198
|
+
const uint8_t gcm_key[16]);
|
190
199
|
|
191
|
-
//
|
192
|
-
// the given key. |
|
193
|
-
OPENSSL_EXPORT void
|
194
|
-
|
200
|
+
// CRYPTO_gcm128_init_key initialises |gcm_key| to use |block| (typically AES)
|
201
|
+
// with the given key. |block_is_hwaes| is one if |block| is |aes_hw_encrypt|.
|
202
|
+
OPENSSL_EXPORT void CRYPTO_gcm128_init_key(GCM128_KEY *gcm_key,
|
203
|
+
const AES_KEY *key, block128_f block,
|
204
|
+
int block_is_hwaes);
|
195
205
|
|
196
206
|
// CRYPTO_gcm128_setiv sets the IV (nonce) for |ctx|. The |key| must be the
|
197
207
|
// same key that was passed to |CRYPTO_gcm128_init|.
|
198
|
-
OPENSSL_EXPORT void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const
|
208
|
+
OPENSSL_EXPORT void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const AES_KEY *key,
|
199
209
|
const uint8_t *iv, size_t iv_len);
|
200
210
|
|
201
211
|
// CRYPTO_gcm128_aad sets the authenticated data for an instance of GCM.
|
@@ -207,16 +217,16 @@ OPENSSL_EXPORT int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad,
|
|
207
217
|
// CRYPTO_gcm128_encrypt encrypts |len| bytes from |in| to |out|. The |key|
|
208
218
|
// must be the same key that was passed to |CRYPTO_gcm128_init|. It returns one
|
209
219
|
// on success and zero otherwise.
|
210
|
-
OPENSSL_EXPORT int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
|
211
|
-
const
|
212
|
-
size_t len);
|
220
|
+
OPENSSL_EXPORT int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx,
|
221
|
+
const AES_KEY *key, const uint8_t *in,
|
222
|
+
uint8_t *out, size_t len);
|
213
223
|
|
214
224
|
// CRYPTO_gcm128_decrypt decrypts |len| bytes from |in| to |out|. The |key|
|
215
225
|
// must be the same key that was passed to |CRYPTO_gcm128_init|. It returns one
|
216
226
|
// on success and zero otherwise.
|
217
|
-
OPENSSL_EXPORT int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
|
218
|
-
const
|
219
|
-
size_t len);
|
227
|
+
OPENSSL_EXPORT int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx,
|
228
|
+
const AES_KEY *key, const uint8_t *in,
|
229
|
+
uint8_t *out, size_t len);
|
220
230
|
|
221
231
|
// CRYPTO_gcm128_encrypt_ctr32 encrypts |len| bytes from |in| to |out| using
|
222
232
|
// a CTR function that only handles the bottom 32 bits of the nonce, like
|
@@ -224,7 +234,7 @@ OPENSSL_EXPORT int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
|
|
224
234
|
// passed to |CRYPTO_gcm128_init|. It returns one on success and zero
|
225
235
|
// otherwise.
|
226
236
|
OPENSSL_EXPORT int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
|
227
|
-
const
|
237
|
+
const AES_KEY *key,
|
228
238
|
const uint8_t *in, uint8_t *out,
|
229
239
|
size_t len, ctr128_f stream);
|
230
240
|
|
@@ -234,7 +244,7 @@ OPENSSL_EXPORT int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx,
|
|
234
244
|
// passed to |CRYPTO_gcm128_init|. It returns one on success and zero
|
235
245
|
// otherwise.
|
236
246
|
OPENSSL_EXPORT int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx,
|
237
|
-
const
|
247
|
+
const AES_KEY *key,
|
238
248
|
const uint8_t *in, uint8_t *out,
|
239
249
|
size_t len, ctr128_f stream);
|
240
250
|
|
@@ -249,61 +259,113 @@ OPENSSL_EXPORT void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, uint8_t *tag,
|
|
249
259
|
size_t len);
|
250
260
|
|
251
261
|
|
252
|
-
//
|
262
|
+
// GCM assembly.
|
253
263
|
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
279
|
-
//
|
280
|
-
//
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
264
|
+
#if !defined(OPENSSL_NO_ASM) && \
|
265
|
+
(defined(OPENSSL_X86) || defined(OPENSSL_X86_64) || \
|
266
|
+
defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64) || \
|
267
|
+
defined(OPENSSL_PPC64LE))
|
268
|
+
#define GHASH_ASM
|
269
|
+
#endif
|
270
|
+
|
271
|
+
void gcm_init_4bit(u128 Htable[16], const uint64_t H[2]);
|
272
|
+
void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]);
|
273
|
+
void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
274
|
+
size_t len);
|
275
|
+
|
276
|
+
#if defined(GHASH_ASM)
|
277
|
+
|
278
|
+
#if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
|
279
|
+
#define GCM_FUNCREF_4BIT
|
280
|
+
void gcm_init_clmul(u128 Htable[16], const uint64_t Xi[2]);
|
281
|
+
void gcm_gmult_clmul(uint64_t Xi[2], const u128 Htable[16]);
|
282
|
+
void gcm_ghash_clmul(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
283
|
+
size_t len);
|
284
|
+
|
285
|
+
OPENSSL_INLINE char gcm_ssse3_capable(void) {
|
286
|
+
return (OPENSSL_ia32cap_get()[1] & (1 << (41 - 32))) != 0;
|
287
|
+
}
|
288
|
+
|
289
|
+
// |gcm_gmult_ssse3| and |gcm_ghash_ssse3| require |Htable| to be
|
290
|
+
// 16-byte-aligned, but |gcm_init_ssse3| does not.
|
291
|
+
void gcm_init_ssse3(u128 Htable[16], const uint64_t Xi[2]);
|
292
|
+
void gcm_gmult_ssse3(uint64_t Xi[2], const u128 Htable[16]);
|
293
|
+
void gcm_ghash_ssse3(uint64_t Xi[2], const u128 Htable[16], const uint8_t *in,
|
294
|
+
size_t len);
|
295
|
+
|
296
|
+
#if defined(OPENSSL_X86_64)
|
297
|
+
#define GHASH_ASM_X86_64
|
298
|
+
void gcm_init_avx(u128 Htable[16], const uint64_t Xi[2]);
|
299
|
+
void gcm_gmult_avx(uint64_t Xi[2], const u128 Htable[16]);
|
300
|
+
void gcm_ghash_avx(uint64_t Xi[2], const u128 Htable[16], const uint8_t *in,
|
301
|
+
size_t len);
|
302
|
+
|
303
|
+
#define AESNI_GCM
|
304
|
+
size_t aesni_gcm_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
305
|
+
const AES_KEY *key, uint8_t ivec[16], uint64_t *Xi);
|
306
|
+
size_t aesni_gcm_decrypt(const uint8_t *in, uint8_t *out, size_t len,
|
307
|
+
const AES_KEY *key, uint8_t ivec[16], uint64_t *Xi);
|
308
|
+
#endif // OPENSSL_X86_64
|
309
|
+
|
310
|
+
#if defined(OPENSSL_X86)
|
311
|
+
#define GHASH_ASM_X86
|
312
|
+
void gcm_gmult_4bit_mmx(uint64_t Xi[2], const u128 Htable[16]);
|
313
|
+
void gcm_ghash_4bit_mmx(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
314
|
+
size_t len);
|
315
|
+
#endif // OPENSSL_X86
|
316
|
+
|
317
|
+
#elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
|
318
|
+
#define GHASH_ASM_ARM
|
319
|
+
#define GCM_FUNCREF_4BIT
|
320
|
+
|
321
|
+
OPENSSL_INLINE int gcm_pmull_capable(void) {
|
322
|
+
return CRYPTO_is_ARMv8_PMULL_capable();
|
323
|
+
}
|
324
|
+
|
325
|
+
void gcm_init_v8(u128 Htable[16], const uint64_t Xi[2]);
|
326
|
+
void gcm_gmult_v8(uint64_t Xi[2], const u128 Htable[16]);
|
327
|
+
void gcm_ghash_v8(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
328
|
+
size_t len);
|
329
|
+
|
330
|
+
OPENSSL_INLINE int gcm_neon_capable(void) { return CRYPTO_is_NEON_capable(); }
|
331
|
+
|
332
|
+
void gcm_init_neon(u128 Htable[16], const uint64_t Xi[2]);
|
333
|
+
void gcm_gmult_neon(uint64_t Xi[2], const u128 Htable[16]);
|
334
|
+
void gcm_ghash_neon(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
335
|
+
size_t len);
|
336
|
+
|
337
|
+
#elif defined(OPENSSL_PPC64LE)
|
338
|
+
#define GHASH_ASM_PPC64LE
|
339
|
+
#define GCM_FUNCREF_4BIT
|
340
|
+
void gcm_init_p8(u128 Htable[16], const uint64_t Xi[2]);
|
341
|
+
void gcm_gmult_p8(uint64_t Xi[2], const u128 Htable[16]);
|
342
|
+
void gcm_ghash_p8(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
343
|
+
size_t len);
|
344
|
+
#endif
|
345
|
+
#endif // GHASH_ASM
|
286
346
|
|
287
347
|
|
288
348
|
// CBC.
|
289
349
|
|
290
350
|
// cbc128_f is the type of a function that performs CBC-mode encryption.
|
291
351
|
typedef void (*cbc128_f)(const uint8_t *in, uint8_t *out, size_t len,
|
292
|
-
const
|
352
|
+
const AES_KEY *key, uint8_t ivec[16], int enc);
|
293
353
|
|
294
354
|
// CRYPTO_cbc128_encrypt encrypts |len| bytes from |in| to |out| using the
|
295
355
|
// given IV and block cipher in CBC mode. The input need not be a multiple of
|
296
356
|
// 128 bits long, but the output will round up to the nearest 128 bit multiple,
|
297
357
|
// zero padding the input if needed. The IV will be updated on return.
|
298
358
|
void CRYPTO_cbc128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
299
|
-
const
|
359
|
+
const AES_KEY *key, uint8_t ivec[16],
|
360
|
+
block128_f block);
|
300
361
|
|
301
362
|
// CRYPTO_cbc128_decrypt decrypts |len| bytes from |in| to |out| using the
|
302
363
|
// given IV and block cipher in CBC mode. If |len| is not a multiple of 128
|
303
364
|
// bits then only that many bytes will be written, but a multiple of 128 bits
|
304
365
|
// is always read from |in|. The IV will be updated on return.
|
305
366
|
void CRYPTO_cbc128_decrypt(const uint8_t *in, uint8_t *out, size_t len,
|
306
|
-
const
|
367
|
+
const AES_KEY *key, uint8_t ivec[16],
|
368
|
+
block128_f block);
|
307
369
|
|
308
370
|
|
309
371
|
// OFB.
|
@@ -313,9 +375,9 @@ void CRYPTO_cbc128_decrypt(const uint8_t *in, uint8_t *out, size_t len,
|
|
313
375
|
// requirement that |len| be a multiple of any value and any partial blocks are
|
314
376
|
// stored in |ivec| and |*num|, the latter must be zero before the initial
|
315
377
|
// call.
|
316
|
-
void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out,
|
317
|
-
|
318
|
-
|
378
|
+
void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
379
|
+
const AES_KEY *key, uint8_t ivec[16], unsigned *num,
|
380
|
+
block128_f block);
|
319
381
|
|
320
382
|
|
321
383
|
// CFB.
|
@@ -325,25 +387,25 @@ void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out,
|
|
325
387
|
// |len| be a multiple of any value and any partial blocks are stored in |ivec|
|
326
388
|
// and |*num|, the latter must be zero before the initial call.
|
327
389
|
void CRYPTO_cfb128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
328
|
-
const
|
390
|
+
const AES_KEY *key, uint8_t ivec[16], unsigned *num,
|
329
391
|
int enc, block128_f block);
|
330
392
|
|
331
393
|
// CRYPTO_cfb128_8_encrypt encrypts (or decrypts, if |enc| is zero) |len| bytes
|
332
394
|
// from |in| to |out| using |block| in CFB-8 mode. Prior to the first call
|
333
395
|
// |num| should be set to zero.
|
334
396
|
void CRYPTO_cfb128_8_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
335
|
-
const
|
336
|
-
int enc, block128_f block);
|
397
|
+
const AES_KEY *key, uint8_t ivec[16],
|
398
|
+
unsigned *num, int enc, block128_f block);
|
337
399
|
|
338
400
|
// CRYPTO_cfb128_1_encrypt encrypts (or decrypts, if |enc| is zero) |len| bytes
|
339
401
|
// from |in| to |out| using |block| in CFB-1 mode. Prior to the first call
|
340
402
|
// |num| should be set to zero.
|
341
403
|
void CRYPTO_cfb128_1_encrypt(const uint8_t *in, uint8_t *out, size_t bits,
|
342
|
-
const
|
343
|
-
int enc, block128_f block);
|
404
|
+
const AES_KEY *key, uint8_t ivec[16],
|
405
|
+
unsigned *num, int enc, block128_f block);
|
344
406
|
|
345
407
|
size_t CRYPTO_cts128_encrypt_block(const uint8_t *in, uint8_t *out, size_t len,
|
346
|
-
const
|
408
|
+
const AES_KEY *key, uint8_t ivec[16],
|
347
409
|
block128_f block);
|
348
410
|
|
349
411
|
|
@@ -360,10 +422,11 @@ typedef union {
|
|
360
422
|
|
361
423
|
struct polyval_ctx {
|
362
424
|
// Note that the order of |S|, |H| and |Htable| is fixed by the MOVBE-based,
|
363
|
-
// x86-64, GHASH assembly.
|
425
|
+
// x86-64, GHASH assembly. Additionally, some assembly routines require
|
426
|
+
// |Htable| to be 16-byte aligned.
|
364
427
|
polyval_block S;
|
365
428
|
u128 H;
|
366
|
-
u128 Htable[16];
|
429
|
+
alignas(16) u128 Htable[16];
|
367
430
|
gmult_func gmult;
|
368
431
|
ghash_func ghash;
|
369
432
|
};
|