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
@@ -57,12 +57,6 @@
|
|
57
57
|
#include "internal.h"
|
58
58
|
#include "../../internal.h"
|
59
59
|
|
60
|
-
#if !defined(OPENSSL_NO_ASM) && \
|
61
|
-
(defined(OPENSSL_X86) || defined(OPENSSL_X86_64) || \
|
62
|
-
defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64) || \
|
63
|
-
defined(OPENSSL_PPC64LE))
|
64
|
-
#define GHASH_ASM
|
65
|
-
#endif
|
66
60
|
|
67
61
|
#define PACK(s) ((size_t)(s) << (sizeof(size_t) * 8 - 16))
|
68
62
|
#define REDUCE1BIT(V) \
|
@@ -82,7 +76,7 @@
|
|
82
76
|
// bits of a |size_t|.
|
83
77
|
static const size_t kSizeTWithoutLower4Bits = (size_t) -16;
|
84
78
|
|
85
|
-
|
79
|
+
void gcm_init_4bit(u128 Htable[16], const uint64_t H[2]) {
|
86
80
|
u128 V;
|
87
81
|
|
88
82
|
Htable[0].hi = 0;
|
@@ -127,7 +121,7 @@ static const size_t rem_4bit[16] = {
|
|
127
121
|
PACK(0xE100), PACK(0xFD20), PACK(0xD940), PACK(0xC560),
|
128
122
|
PACK(0x9180), PACK(0x8DA0), PACK(0xA9C0), PACK(0xB5E0)};
|
129
123
|
|
130
|
-
|
124
|
+
void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]) {
|
131
125
|
u128 Z;
|
132
126
|
int cnt = 15;
|
133
127
|
size_t rem, nlo, nhi;
|
@@ -182,8 +176,8 @@ static void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]) {
|
|
182
176
|
// performance improvement, at least not on x86[_64]. It's here
|
183
177
|
// mostly as reference and a placeholder for possible future
|
184
178
|
// non-trivial optimization[s]...
|
185
|
-
|
186
|
-
|
179
|
+
void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
180
|
+
size_t len) {
|
187
181
|
u128 Z;
|
188
182
|
int cnt;
|
189
183
|
size_t rem, nlo, nhi;
|
@@ -237,117 +231,54 @@ static void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16],
|
|
237
231
|
Xi[1] = CRYPTO_bswap8(Z.lo);
|
238
232
|
} while (inp += 16, len -= 16);
|
239
233
|
}
|
240
|
-
#
|
241
|
-
void gcm_gmult_4bit(uint64_t Xi[2], const u128 Htable[16]);
|
242
|
-
void gcm_ghash_4bit(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
243
|
-
size_t len);
|
244
|
-
#endif
|
234
|
+
#endif // !GHASH_ASM || AARCH64 || PPC64LE
|
245
235
|
|
246
|
-
#define GCM_MUL(ctx, Xi) gcm_gmult_4bit((ctx)->Xi.u, (ctx)->Htable)
|
247
|
-
#
|
248
|
-
|
236
|
+
#define GCM_MUL(ctx, Xi) gcm_gmult_4bit((ctx)->Xi.u, (ctx)->gcm_key.Htable)
|
237
|
+
#define GHASH(ctx, in, len) \
|
238
|
+
gcm_ghash_4bit((ctx)->Xi.u, (ctx)->gcm_key.Htable, in, len)
|
249
239
|
// GHASH_CHUNK is "stride parameter" missioned to mitigate cache
|
250
240
|
// trashing effect. In other words idea is to hash data while it's
|
251
241
|
// still in L1 cache after encryption pass...
|
252
242
|
#define GHASH_CHUNK (3 * 1024)
|
253
|
-
#endif
|
254
|
-
|
255
|
-
|
256
|
-
#if defined(GHASH_ASM)
|
257
243
|
|
258
|
-
#if defined(
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
void gcm_ghash_clmul(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
263
|
-
size_t len);
|
264
|
-
|
265
|
-
#if defined(OPENSSL_X86_64)
|
266
|
-
#define GHASH_ASM_X86_64
|
267
|
-
void gcm_init_avx(u128 Htable[16], const uint64_t Xi[2]);
|
268
|
-
void gcm_gmult_avx(uint64_t Xi[2], const u128 Htable[16]);
|
269
|
-
void gcm_ghash_avx(uint64_t Xi[2], const u128 Htable[16], const uint8_t *in,
|
270
|
-
size_t len);
|
271
|
-
#define AESNI_GCM
|
272
|
-
size_t aesni_gcm_encrypt(const uint8_t *in, uint8_t *out, size_t len,
|
273
|
-
const void *key, uint8_t ivec[16], uint64_t *Xi);
|
274
|
-
size_t aesni_gcm_decrypt(const uint8_t *in, uint8_t *out, size_t len,
|
275
|
-
const void *key, uint8_t ivec[16], uint64_t *Xi);
|
276
|
-
#endif
|
277
|
-
|
278
|
-
#if defined(OPENSSL_X86)
|
279
|
-
#define GHASH_ASM_X86
|
280
|
-
void gcm_gmult_4bit_mmx(uint64_t Xi[2], const u128 Htable[16]);
|
281
|
-
void gcm_ghash_4bit_mmx(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
282
|
-
size_t len);
|
283
|
-
#endif
|
284
|
-
|
285
|
-
#elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
|
286
|
-
#include <openssl/arm_arch.h>
|
287
|
-
#if __ARM_ARCH__ >= 7
|
288
|
-
#define GHASH_ASM_ARM
|
289
|
-
#define GCM_FUNCREF_4BIT
|
290
|
-
|
291
|
-
static int pmull_capable(void) {
|
292
|
-
return CRYPTO_is_ARMv8_PMULL_capable();
|
293
|
-
}
|
244
|
+
#if defined(GHASH_ASM_X86_64) || defined(GHASH_ASM_X86)
|
245
|
+
void gcm_init_ssse3(u128 Htable[16], const uint64_t Xi[2]) {
|
246
|
+
// Run the existing 4-bit version.
|
247
|
+
gcm_init_4bit(Htable, Xi);
|
294
248
|
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
return CRYPTO_is_NEON_capable();
|
304
|
-
}
|
249
|
+
// First, swap hi and lo. The "4bit" version places hi first. It treats the
|
250
|
+
// two fields separately, so the order does not matter, but ghash-ssse3 reads
|
251
|
+
// the entire state into one 128-bit register.
|
252
|
+
for (int i = 0; i < 16; i++) {
|
253
|
+
uint64_t tmp = Htable[i].hi;
|
254
|
+
Htable[i].hi = Htable[i].lo;
|
255
|
+
Htable[i].lo = tmp;
|
256
|
+
}
|
305
257
|
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
}
|
315
|
-
|
316
|
-
abort();
|
317
|
-
}
|
318
|
-
static void gcm_gmult_neon(uint64_t Xi[2], const u128 Htable[16]) {
|
319
|
-
abort();
|
320
|
-
}
|
321
|
-
static void gcm_ghash_neon(uint64_t Xi[2], const u128 Htable[16],
|
322
|
-
const uint8_t *inp, size_t len) {
|
323
|
-
abort();
|
258
|
+
// Treat |Htable| as a 16x16 byte table and transpose it. Thus, Htable[i]
|
259
|
+
// contains the i'th byte of j*H for all j.
|
260
|
+
uint8_t *Hbytes = (uint8_t *)Htable;
|
261
|
+
for (int i = 0; i < 16; i++) {
|
262
|
+
for (int j = 0; j < i; j++) {
|
263
|
+
uint8_t tmp = Hbytes[16*i + j];
|
264
|
+
Hbytes[16*i + j] = Hbytes[16*j + i];
|
265
|
+
Hbytes[16*j + i] = tmp;
|
266
|
+
}
|
267
|
+
}
|
324
268
|
}
|
325
|
-
#endif
|
326
|
-
|
327
|
-
#endif
|
328
|
-
#elif defined(OPENSSL_PPC64LE)
|
329
|
-
#define GHASH_ASM_PPC64LE
|
330
|
-
#define GCM_FUNCREF_4BIT
|
331
|
-
void gcm_init_p8(u128 Htable[16], const uint64_t Xi[2]);
|
332
|
-
void gcm_gmult_p8(uint64_t Xi[2], const u128 Htable[16]);
|
333
|
-
void gcm_ghash_p8(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
334
|
-
size_t len);
|
335
|
-
#endif
|
336
|
-
#endif
|
269
|
+
#endif // GHASH_ASM_X86_64 || GHASH_ASM_X86
|
337
270
|
|
338
271
|
#ifdef GCM_FUNCREF_4BIT
|
339
272
|
#undef GCM_MUL
|
340
|
-
#define GCM_MUL(ctx, Xi) (*gcm_gmult_p)((ctx)->Xi.u, (ctx)->Htable)
|
341
|
-
#ifdef GHASH
|
273
|
+
#define GCM_MUL(ctx, Xi) (*gcm_gmult_p)((ctx)->Xi.u, (ctx)->gcm_key.Htable)
|
342
274
|
#undef GHASH
|
343
|
-
#define GHASH(ctx, in, len)
|
344
|
-
|
345
|
-
#endif
|
275
|
+
#define GHASH(ctx, in, len) \
|
276
|
+
(*gcm_ghash_p)((ctx)->Xi.u, (ctx)->gcm_key.Htable, in, len)
|
277
|
+
#endif // GCM_FUNCREF_4BIT
|
346
278
|
|
347
279
|
void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
|
348
|
-
u128 *out_key, u128 out_table[16],
|
349
|
-
|
350
|
-
const uint8_t *gcm_key) {
|
280
|
+
u128 *out_key, u128 out_table[16], int *out_is_avx,
|
281
|
+
const uint8_t gcm_key[16]) {
|
351
282
|
*out_is_avx = 0;
|
352
283
|
|
353
284
|
union {
|
@@ -377,6 +308,12 @@ void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
|
|
377
308
|
*out_hash = gcm_ghash_clmul;
|
378
309
|
return;
|
379
310
|
}
|
311
|
+
if (gcm_ssse3_capable()) {
|
312
|
+
gcm_init_ssse3(out_table, H.u);
|
313
|
+
*out_mult = gcm_gmult_ssse3;
|
314
|
+
*out_hash = gcm_ghash_ssse3;
|
315
|
+
return;
|
316
|
+
}
|
380
317
|
#elif defined(GHASH_ASM_X86)
|
381
318
|
if (crypto_gcm_clmul_enabled()) {
|
382
319
|
gcm_init_clmul(out_table, H.u);
|
@@ -384,15 +321,21 @@ void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
|
|
384
321
|
*out_hash = gcm_ghash_clmul;
|
385
322
|
return;
|
386
323
|
}
|
324
|
+
if (gcm_ssse3_capable()) {
|
325
|
+
gcm_init_ssse3(out_table, H.u);
|
326
|
+
*out_mult = gcm_gmult_ssse3;
|
327
|
+
*out_hash = gcm_ghash_ssse3;
|
328
|
+
return;
|
329
|
+
}
|
387
330
|
#elif defined(GHASH_ASM_ARM)
|
388
|
-
if (
|
331
|
+
if (gcm_pmull_capable()) {
|
389
332
|
gcm_init_v8(out_table, H.u);
|
390
333
|
*out_mult = gcm_gmult_v8;
|
391
334
|
*out_hash = gcm_ghash_v8;
|
392
335
|
return;
|
393
336
|
}
|
394
337
|
|
395
|
-
if (
|
338
|
+
if (gcm_neon_capable()) {
|
396
339
|
gcm_init_neon(out_table, H.u);
|
397
340
|
*out_mult = gcm_gmult_neon;
|
398
341
|
*out_hash = gcm_ghash_neon;
|
@@ -417,27 +360,27 @@ void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
|
|
417
360
|
#endif
|
418
361
|
}
|
419
362
|
|
420
|
-
void
|
421
|
-
|
422
|
-
OPENSSL_memset(
|
423
|
-
|
363
|
+
void CRYPTO_gcm128_init_key(GCM128_KEY *gcm_key, const AES_KEY *aes_key,
|
364
|
+
block128_f block, int block_is_hwaes) {
|
365
|
+
OPENSSL_memset(gcm_key, 0, sizeof(*gcm_key));
|
366
|
+
gcm_key->block = block;
|
424
367
|
|
425
|
-
uint8_t
|
426
|
-
OPENSSL_memset(
|
427
|
-
(*block)(
|
368
|
+
uint8_t ghash_key[16];
|
369
|
+
OPENSSL_memset(ghash_key, 0, sizeof(ghash_key));
|
370
|
+
(*block)(ghash_key, ghash_key, aes_key);
|
428
371
|
|
429
372
|
int is_avx;
|
430
|
-
CRYPTO_ghash_init(&
|
431
|
-
gcm_key);
|
373
|
+
CRYPTO_ghash_init(&gcm_key->gmult, &gcm_key->ghash, &gcm_key->H,
|
374
|
+
gcm_key->Htable, &is_avx, ghash_key);
|
432
375
|
|
433
|
-
|
376
|
+
gcm_key->use_aesni_gcm_crypt = (is_avx && block_is_hwaes) ? 1 : 0;
|
434
377
|
}
|
435
378
|
|
436
|
-
void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const
|
379
|
+
void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const AES_KEY *key,
|
437
380
|
const uint8_t *iv, size_t len) {
|
438
|
-
unsigned int ctr;
|
439
381
|
#ifdef GCM_FUNCREF_4BIT
|
440
|
-
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
382
|
+
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
383
|
+
ctx->gcm_key.gmult;
|
441
384
|
#endif
|
442
385
|
|
443
386
|
ctx->Yi.u[0] = 0;
|
@@ -449,6 +392,7 @@ void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const void *key,
|
|
449
392
|
ctx->ares = 0;
|
450
393
|
ctx->mres = 0;
|
451
394
|
|
395
|
+
uint32_t ctr;
|
452
396
|
if (len == 12) {
|
453
397
|
OPENSSL_memcpy(ctx->Yi.c, iv, 12);
|
454
398
|
ctx->Yi.c[15] = 1;
|
@@ -477,19 +421,18 @@ void CRYPTO_gcm128_setiv(GCM128_CONTEXT *ctx, const void *key,
|
|
477
421
|
ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
|
478
422
|
}
|
479
423
|
|
480
|
-
(*ctx->block)(ctx->Yi.c, ctx->EK0.c, key);
|
424
|
+
(*ctx->gcm_key.block)(ctx->Yi.c, ctx->EK0.c, key);
|
481
425
|
++ctr;
|
482
426
|
ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
|
483
427
|
}
|
484
428
|
|
485
429
|
int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad, size_t len) {
|
486
|
-
unsigned int n;
|
487
|
-
uint64_t alen = ctx->len.u[0];
|
488
430
|
#ifdef GCM_FUNCREF_4BIT
|
489
|
-
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
431
|
+
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
432
|
+
ctx->gcm_key.gmult;
|
490
433
|
#ifdef GHASH
|
491
434
|
void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
492
|
-
size_t len) = ctx->ghash;
|
435
|
+
size_t len) = ctx->gcm_key.ghash;
|
493
436
|
#endif
|
494
437
|
#endif
|
495
438
|
|
@@ -497,13 +440,13 @@ int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad, size_t len) {
|
|
497
440
|
return 0;
|
498
441
|
}
|
499
442
|
|
500
|
-
alen
|
443
|
+
uint64_t alen = ctx->len.u[0] + len;
|
501
444
|
if (alen > (UINT64_C(1) << 61) || (sizeof(len) == 8 && alen < len)) {
|
502
445
|
return 0;
|
503
446
|
}
|
504
447
|
ctx->len.u[0] = alen;
|
505
448
|
|
506
|
-
n = ctx->ares;
|
449
|
+
unsigned n = ctx->ares;
|
507
450
|
if (n) {
|
508
451
|
while (n && len) {
|
509
452
|
ctx->Xi.c[n] ^= *(aad++);
|
@@ -519,23 +462,12 @@ int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad, size_t len) {
|
|
519
462
|
}
|
520
463
|
|
521
464
|
// Process a whole number of blocks.
|
522
|
-
#ifdef GHASH
|
523
465
|
size_t len_blocks = len & kSizeTWithoutLower4Bits;
|
524
466
|
if (len_blocks != 0) {
|
525
467
|
GHASH(ctx, aad, len_blocks);
|
526
468
|
aad += len_blocks;
|
527
469
|
len -= len_blocks;
|
528
470
|
}
|
529
|
-
#else
|
530
|
-
while (len >= 16) {
|
531
|
-
for (size_t i = 0; i < 16; ++i) {
|
532
|
-
ctx->Xi.c[i] ^= aad[i];
|
533
|
-
}
|
534
|
-
GCM_MUL(ctx, Xi);
|
535
|
-
aad += 16;
|
536
|
-
len -= 16;
|
537
|
-
}
|
538
|
-
#endif
|
539
471
|
|
540
472
|
// Process the remainder.
|
541
473
|
if (len != 0) {
|
@@ -549,20 +481,17 @@ int CRYPTO_gcm128_aad(GCM128_CONTEXT *ctx, const uint8_t *aad, size_t len) {
|
|
549
481
|
return 1;
|
550
482
|
}
|
551
483
|
|
552
|
-
int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const
|
484
|
+
int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
|
553
485
|
const uint8_t *in, uint8_t *out, size_t len) {
|
554
|
-
|
555
|
-
uint64_t mlen = ctx->len.u[1];
|
556
|
-
block128_f block = ctx->block;
|
486
|
+
block128_f block = ctx->gcm_key.block;
|
557
487
|
#ifdef GCM_FUNCREF_4BIT
|
558
|
-
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
559
|
-
|
488
|
+
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
489
|
+
ctx->gcm_key.gmult;
|
560
490
|
void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
561
|
-
size_t len) = ctx->ghash;
|
562
|
-
#endif
|
491
|
+
size_t len) = ctx->gcm_key.ghash;
|
563
492
|
#endif
|
564
493
|
|
565
|
-
mlen
|
494
|
+
uint64_t mlen = ctx->len.u[1] + len;
|
566
495
|
if (mlen > ((UINT64_C(1) << 36) - 32) ||
|
567
496
|
(sizeof(len) == 8 && mlen < len)) {
|
568
497
|
return 0;
|
@@ -575,9 +504,7 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const void *key,
|
|
575
504
|
ctx->ares = 0;
|
576
505
|
}
|
577
506
|
|
578
|
-
|
579
|
-
|
580
|
-
n = ctx->mres;
|
507
|
+
unsigned n = ctx->mres;
|
581
508
|
if (n) {
|
582
509
|
while (n && len) {
|
583
510
|
ctx->Xi.c[n] ^= *(out++) = *(in++) ^ ctx->EKi.c[n];
|
@@ -591,25 +518,8 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const void *key,
|
|
591
518
|
return 1;
|
592
519
|
}
|
593
520
|
}
|
594
|
-
if (STRICT_ALIGNMENT &&
|
595
|
-
((uintptr_t)in | (uintptr_t)out) % sizeof(size_t) != 0) {
|
596
|
-
for (size_t i = 0; i < len; ++i) {
|
597
|
-
if (n == 0) {
|
598
|
-
(*block)(ctx->Yi.c, ctx->EKi.c, key);
|
599
|
-
++ctr;
|
600
|
-
ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
|
601
|
-
}
|
602
|
-
ctx->Xi.c[n] ^= out[i] = in[i] ^ ctx->EKi.c[n];
|
603
|
-
n = (n + 1) % 16;
|
604
|
-
if (n == 0) {
|
605
|
-
GCM_MUL(ctx, Xi);
|
606
|
-
}
|
607
|
-
}
|
608
521
|
|
609
|
-
|
610
|
-
return 1;
|
611
|
-
}
|
612
|
-
#if defined(GHASH) && defined(GHASH_CHUNK)
|
522
|
+
uint32_t ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
|
613
523
|
while (len >= GHASH_CHUNK) {
|
614
524
|
size_t j = GHASH_CHUNK;
|
615
525
|
|
@@ -644,22 +554,6 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const void *key,
|
|
644
554
|
}
|
645
555
|
GHASH(ctx, out - len_blocks, len_blocks);
|
646
556
|
}
|
647
|
-
#else
|
648
|
-
while (len >= 16) {
|
649
|
-
(*block)(ctx->Yi.c, ctx->EKi.c, key);
|
650
|
-
++ctr;
|
651
|
-
ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
|
652
|
-
for (size_t i = 0; i < 16; i += sizeof(size_t)) {
|
653
|
-
size_t tmp = load_word_le(in + i) ^ ctx->EKi.t[i / sizeof(size_t)];
|
654
|
-
store_word_le(out + i, tmp);
|
655
|
-
ctx->Xi.t[i / sizeof(size_t)] ^= tmp;
|
656
|
-
}
|
657
|
-
GCM_MUL(ctx, Xi);
|
658
|
-
out += 16;
|
659
|
-
in += 16;
|
660
|
-
len -= 16;
|
661
|
-
}
|
662
|
-
#endif
|
663
557
|
if (len) {
|
664
558
|
(*block)(ctx->Yi.c, ctx->EKi.c, key);
|
665
559
|
++ctr;
|
@@ -674,21 +568,18 @@ int CRYPTO_gcm128_encrypt(GCM128_CONTEXT *ctx, const void *key,
|
|
674
568
|
return 1;
|
675
569
|
}
|
676
570
|
|
677
|
-
int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const
|
571
|
+
int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const AES_KEY *key,
|
678
572
|
const unsigned char *in, unsigned char *out,
|
679
573
|
size_t len) {
|
680
|
-
|
681
|
-
uint64_t mlen = ctx->len.u[1];
|
682
|
-
block128_f block = ctx->block;
|
574
|
+
block128_f block = ctx->gcm_key.block;
|
683
575
|
#ifdef GCM_FUNCREF_4BIT
|
684
|
-
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
685
|
-
|
576
|
+
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
577
|
+
ctx->gcm_key.gmult;
|
686
578
|
void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
687
|
-
size_t len) = ctx->ghash;
|
688
|
-
#endif
|
579
|
+
size_t len) = ctx->gcm_key.ghash;
|
689
580
|
#endif
|
690
581
|
|
691
|
-
mlen
|
582
|
+
uint64_t mlen = ctx->len.u[1] + len;
|
692
583
|
if (mlen > ((UINT64_C(1) << 36) - 32) ||
|
693
584
|
(sizeof(len) == 8 && mlen < len)) {
|
694
585
|
return 0;
|
@@ -701,9 +592,7 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
|
|
701
592
|
ctx->ares = 0;
|
702
593
|
}
|
703
594
|
|
704
|
-
|
705
|
-
|
706
|
-
n = ctx->mres;
|
595
|
+
unsigned n = ctx->mres;
|
707
596
|
if (n) {
|
708
597
|
while (n && len) {
|
709
598
|
uint8_t c = *(in++);
|
@@ -719,28 +608,8 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
|
|
719
608
|
return 1;
|
720
609
|
}
|
721
610
|
}
|
722
|
-
if (STRICT_ALIGNMENT &&
|
723
|
-
((uintptr_t)in | (uintptr_t)out) % sizeof(size_t) != 0) {
|
724
|
-
for (size_t i = 0; i < len; ++i) {
|
725
|
-
uint8_t c;
|
726
|
-
if (n == 0) {
|
727
|
-
(*block)(ctx->Yi.c, ctx->EKi.c, key);
|
728
|
-
++ctr;
|
729
|
-
ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
|
730
|
-
}
|
731
|
-
c = in[i];
|
732
|
-
out[i] = c ^ ctx->EKi.c[n];
|
733
|
-
ctx->Xi.c[n] ^= c;
|
734
|
-
n = (n + 1) % 16;
|
735
|
-
if (n == 0) {
|
736
|
-
GCM_MUL(ctx, Xi);
|
737
|
-
}
|
738
|
-
}
|
739
611
|
|
740
|
-
|
741
|
-
return 1;
|
742
|
-
}
|
743
|
-
#if defined(GHASH) && defined(GHASH_CHUNK)
|
612
|
+
uint32_t ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
|
744
613
|
while (len >= GHASH_CHUNK) {
|
745
614
|
size_t j = GHASH_CHUNK;
|
746
615
|
|
@@ -775,22 +644,6 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
|
|
775
644
|
len -= 16;
|
776
645
|
}
|
777
646
|
}
|
778
|
-
#else
|
779
|
-
while (len >= 16) {
|
780
|
-
(*block)(ctx->Yi.c, ctx->EKi.c, key);
|
781
|
-
++ctr;
|
782
|
-
ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
|
783
|
-
for (size_t i = 0; i < 16; i += sizeof(size_t)) {
|
784
|
-
size_t c = load_word_le(in + i);
|
785
|
-
store_word_le(out + i, c ^ ctx->EKi.t[i / sizeof(size_t)]);
|
786
|
-
ctx->Xi.t[i / sizeof(size_t)] ^= c;
|
787
|
-
}
|
788
|
-
GCM_MUL(ctx, Xi);
|
789
|
-
out += 16;
|
790
|
-
in += 16;
|
791
|
-
len -= 16;
|
792
|
-
}
|
793
|
-
#endif
|
794
647
|
if (len) {
|
795
648
|
(*block)(ctx->Yi.c, ctx->EKi.c, key);
|
796
649
|
++ctr;
|
@@ -807,20 +660,17 @@ int CRYPTO_gcm128_decrypt(GCM128_CONTEXT *ctx, const void *key,
|
|
807
660
|
return 1;
|
808
661
|
}
|
809
662
|
|
810
|
-
int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const
|
663
|
+
int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const AES_KEY *key,
|
811
664
|
const uint8_t *in, uint8_t *out, size_t len,
|
812
665
|
ctr128_f stream) {
|
813
|
-
unsigned int n, ctr;
|
814
|
-
uint64_t mlen = ctx->len.u[1];
|
815
666
|
#ifdef GCM_FUNCREF_4BIT
|
816
|
-
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
817
|
-
|
667
|
+
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
668
|
+
ctx->gcm_key.gmult;
|
818
669
|
void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
819
|
-
size_t len) = ctx->ghash;
|
820
|
-
#endif
|
670
|
+
size_t len) = ctx->gcm_key.ghash;
|
821
671
|
#endif
|
822
672
|
|
823
|
-
mlen
|
673
|
+
uint64_t mlen = ctx->len.u[1] + len;
|
824
674
|
if (mlen > ((UINT64_C(1) << 36) - 32) ||
|
825
675
|
(sizeof(len) == 8 && mlen < len)) {
|
826
676
|
return 0;
|
@@ -833,7 +683,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
|
|
833
683
|
ctx->ares = 0;
|
834
684
|
}
|
835
685
|
|
836
|
-
n = ctx->mres;
|
686
|
+
unsigned n = ctx->mres;
|
837
687
|
if (n) {
|
838
688
|
while (n && len) {
|
839
689
|
ctx->Xi.c[n] ^= *(out++) = *(in++) ^ ctx->EKi.c[n];
|
@@ -849,7 +699,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
|
|
849
699
|
}
|
850
700
|
|
851
701
|
#if defined(AESNI_GCM)
|
852
|
-
if (ctx->use_aesni_gcm_crypt) {
|
702
|
+
if (ctx->gcm_key.use_aesni_gcm_crypt) {
|
853
703
|
// |aesni_gcm_encrypt| may not process all the input given to it. It may
|
854
704
|
// not process *any* of its input if it is deemed too small.
|
855
705
|
size_t bulk = aesni_gcm_encrypt(in, out, len, key, ctx->Yi.c, ctx->Xi.u);
|
@@ -859,9 +709,7 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
|
|
859
709
|
}
|
860
710
|
#endif
|
861
711
|
|
862
|
-
ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
|
863
|
-
|
864
|
-
#if defined(GHASH)
|
712
|
+
uint32_t ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
|
865
713
|
while (len >= GHASH_CHUNK) {
|
866
714
|
(*stream)(in, out, GHASH_CHUNK / 16, key, ctx->Yi.c);
|
867
715
|
ctr += GHASH_CHUNK / 16;
|
@@ -871,31 +719,20 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
|
|
871
719
|
in += GHASH_CHUNK;
|
872
720
|
len -= GHASH_CHUNK;
|
873
721
|
}
|
874
|
-
|
875
|
-
|
876
|
-
|
877
|
-
size_t j = i / 16;
|
722
|
+
size_t len_blocks = len & kSizeTWithoutLower4Bits;
|
723
|
+
if (len_blocks != 0) {
|
724
|
+
size_t j = len_blocks / 16;
|
878
725
|
|
879
726
|
(*stream)(in, out, j, key, ctx->Yi.c);
|
880
727
|
ctr += (unsigned int)j;
|
881
728
|
ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
|
882
|
-
in +=
|
883
|
-
len -=
|
884
|
-
|
885
|
-
|
886
|
-
out += i;
|
887
|
-
#else
|
888
|
-
while (j--) {
|
889
|
-
for (i = 0; i < 16; ++i) {
|
890
|
-
ctx->Xi.c[i] ^= out[i];
|
891
|
-
}
|
892
|
-
GCM_MUL(ctx, Xi);
|
893
|
-
out += 16;
|
894
|
-
}
|
895
|
-
#endif
|
729
|
+
in += len_blocks;
|
730
|
+
len -= len_blocks;
|
731
|
+
GHASH(ctx, out, len_blocks);
|
732
|
+
out += len_blocks;
|
896
733
|
}
|
897
734
|
if (len) {
|
898
|
-
(*ctx->block)(ctx->Yi.c, ctx->EKi.c, key);
|
735
|
+
(*ctx->gcm_key.block)(ctx->Yi.c, ctx->EKi.c, key);
|
899
736
|
++ctr;
|
900
737
|
ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
|
901
738
|
while (len--) {
|
@@ -908,20 +745,17 @@ int CRYPTO_gcm128_encrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
|
|
908
745
|
return 1;
|
909
746
|
}
|
910
747
|
|
911
|
-
int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const
|
748
|
+
int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const AES_KEY *key,
|
912
749
|
const uint8_t *in, uint8_t *out, size_t len,
|
913
750
|
ctr128_f stream) {
|
914
|
-
unsigned int n, ctr;
|
915
|
-
uint64_t mlen = ctx->len.u[1];
|
916
751
|
#ifdef GCM_FUNCREF_4BIT
|
917
|
-
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
918
|
-
|
752
|
+
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
753
|
+
ctx->gcm_key.gmult;
|
919
754
|
void (*gcm_ghash_p)(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
|
920
|
-
size_t len) = ctx->ghash;
|
921
|
-
#endif
|
755
|
+
size_t len) = ctx->gcm_key.ghash;
|
922
756
|
#endif
|
923
757
|
|
924
|
-
mlen
|
758
|
+
uint64_t mlen = ctx->len.u[1] + len;
|
925
759
|
if (mlen > ((UINT64_C(1) << 36) - 32) ||
|
926
760
|
(sizeof(len) == 8 && mlen < len)) {
|
927
761
|
return 0;
|
@@ -934,7 +768,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
|
|
934
768
|
ctx->ares = 0;
|
935
769
|
}
|
936
770
|
|
937
|
-
n = ctx->mres;
|
771
|
+
unsigned n = ctx->mres;
|
938
772
|
if (n) {
|
939
773
|
while (n && len) {
|
940
774
|
uint8_t c = *(in++);
|
@@ -952,7 +786,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
|
|
952
786
|
}
|
953
787
|
|
954
788
|
#if defined(AESNI_GCM)
|
955
|
-
if (ctx->use_aesni_gcm_crypt) {
|
789
|
+
if (ctx->gcm_key.use_aesni_gcm_crypt) {
|
956
790
|
// |aesni_gcm_decrypt| may not process all the input given to it. It may
|
957
791
|
// not process *any* of its input if it is deemed too small.
|
958
792
|
size_t bulk = aesni_gcm_decrypt(in, out, len, key, ctx->Yi.c, ctx->Xi.u);
|
@@ -962,9 +796,7 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
|
|
962
796
|
}
|
963
797
|
#endif
|
964
798
|
|
965
|
-
ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
|
966
|
-
|
967
|
-
#if defined(GHASH)
|
799
|
+
uint32_t ctr = CRYPTO_bswap4(ctx->Yi.d[3]);
|
968
800
|
while (len >= GHASH_CHUNK) {
|
969
801
|
GHASH(ctx, in, GHASH_CHUNK);
|
970
802
|
(*stream)(in, out, GHASH_CHUNK / 16, key, ctx->Yi.c);
|
@@ -974,34 +806,20 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
|
|
974
806
|
in += GHASH_CHUNK;
|
975
807
|
len -= GHASH_CHUNK;
|
976
808
|
}
|
977
|
-
|
978
|
-
|
979
|
-
|
980
|
-
size_t j = i / 16;
|
809
|
+
size_t len_blocks = len & kSizeTWithoutLower4Bits;
|
810
|
+
if (len_blocks != 0) {
|
811
|
+
size_t j = len_blocks / 16;
|
981
812
|
|
982
|
-
|
983
|
-
GHASH(ctx, in, i);
|
984
|
-
#else
|
985
|
-
while (j--) {
|
986
|
-
size_t k;
|
987
|
-
for (k = 0; k < 16; ++k) {
|
988
|
-
ctx->Xi.c[k] ^= in[k];
|
989
|
-
}
|
990
|
-
GCM_MUL(ctx, Xi);
|
991
|
-
in += 16;
|
992
|
-
}
|
993
|
-
j = i / 16;
|
994
|
-
in -= i;
|
995
|
-
#endif
|
813
|
+
GHASH(ctx, in, len_blocks);
|
996
814
|
(*stream)(in, out, j, key, ctx->Yi.c);
|
997
815
|
ctr += (unsigned int)j;
|
998
816
|
ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
|
999
|
-
out +=
|
1000
|
-
in +=
|
1001
|
-
len -=
|
817
|
+
out += len_blocks;
|
818
|
+
in += len_blocks;
|
819
|
+
len -= len_blocks;
|
1002
820
|
}
|
1003
821
|
if (len) {
|
1004
|
-
(*ctx->block)(ctx->Yi.c, ctx->EKi.c, key);
|
822
|
+
(*ctx->gcm_key.block)(ctx->Yi.c, ctx->EKi.c, key);
|
1005
823
|
++ctr;
|
1006
824
|
ctx->Yi.d[3] = CRYPTO_bswap4(ctr);
|
1007
825
|
while (len--) {
|
@@ -1017,21 +835,17 @@ int CRYPTO_gcm128_decrypt_ctr32(GCM128_CONTEXT *ctx, const void *key,
|
|
1017
835
|
}
|
1018
836
|
|
1019
837
|
int CRYPTO_gcm128_finish(GCM128_CONTEXT *ctx, const uint8_t *tag, size_t len) {
|
1020
|
-
uint64_t alen = ctx->len.u[0] << 3;
|
1021
|
-
uint64_t clen = ctx->len.u[1] << 3;
|
1022
838
|
#ifdef GCM_FUNCREF_4BIT
|
1023
|
-
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
839
|
+
void (*gcm_gmult_p)(uint64_t Xi[2], const u128 Htable[16]) =
|
840
|
+
ctx->gcm_key.gmult;
|
1024
841
|
#endif
|
1025
842
|
|
1026
843
|
if (ctx->mres || ctx->ares) {
|
1027
844
|
GCM_MUL(ctx, Xi);
|
1028
845
|
}
|
1029
846
|
|
1030
|
-
|
1031
|
-
|
1032
|
-
|
1033
|
-
ctx->Xi.u[0] ^= alen;
|
1034
|
-
ctx->Xi.u[1] ^= clen;
|
847
|
+
ctx->Xi.u[0] ^= CRYPTO_bswap8(ctx->len.u[0] << 3);
|
848
|
+
ctx->Xi.u[1] ^= CRYPTO_bswap8(ctx->len.u[1] << 3);
|
1035
849
|
GCM_MUL(ctx, Xi);
|
1036
850
|
|
1037
851
|
ctx->Xi.u[0] ^= ctx->EK0.u[0];
|