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
@@ -12,10 +12,6 @@
|
|
12
12
|
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
13
|
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
14
|
|
15
|
-
#if !defined(__STDC_FORMAT_MACROS)
|
16
|
-
#define __STDC_FORMAT_MACROS
|
17
|
-
#endif
|
18
|
-
|
19
15
|
#include <openssl/buf.h>
|
20
16
|
#include <openssl/mem.h>
|
21
17
|
#include <openssl/bytestring.h>
|
@@ -92,8 +88,8 @@ int CBS_mem_equal(const CBS *cbs, const uint8_t *data, size_t len) {
|
|
92
88
|
return CRYPTO_memcmp(cbs->data, data, len) == 0;
|
93
89
|
}
|
94
90
|
|
95
|
-
static int cbs_get_u(CBS *cbs,
|
96
|
-
|
91
|
+
static int cbs_get_u(CBS *cbs, uint64_t *out, size_t len) {
|
92
|
+
uint64_t result = 0;
|
97
93
|
const uint8_t *data;
|
98
94
|
|
99
95
|
if (!cbs_get(cbs, &data, len)) {
|
@@ -117,7 +113,7 @@ int CBS_get_u8(CBS *cbs, uint8_t *out) {
|
|
117
113
|
}
|
118
114
|
|
119
115
|
int CBS_get_u16(CBS *cbs, uint16_t *out) {
|
120
|
-
|
116
|
+
uint64_t v;
|
121
117
|
if (!cbs_get_u(cbs, &v, 2)) {
|
122
118
|
return 0;
|
123
119
|
}
|
@@ -126,11 +122,25 @@ int CBS_get_u16(CBS *cbs, uint16_t *out) {
|
|
126
122
|
}
|
127
123
|
|
128
124
|
int CBS_get_u24(CBS *cbs, uint32_t *out) {
|
129
|
-
|
125
|
+
uint64_t v;
|
126
|
+
if (!cbs_get_u(cbs, &v, 3)) {
|
127
|
+
return 0;
|
128
|
+
}
|
129
|
+
*out = v;
|
130
|
+
return 1;
|
130
131
|
}
|
131
132
|
|
132
133
|
int CBS_get_u32(CBS *cbs, uint32_t *out) {
|
133
|
-
|
134
|
+
uint64_t v;
|
135
|
+
if (!cbs_get_u(cbs, &v, 4)) {
|
136
|
+
return 0;
|
137
|
+
}
|
138
|
+
*out = v;
|
139
|
+
return 1;
|
140
|
+
}
|
141
|
+
|
142
|
+
int CBS_get_u64(CBS *cbs, uint64_t *out) {
|
143
|
+
return cbs_get_u(cbs, out, 8);
|
134
144
|
}
|
135
145
|
|
136
146
|
int CBS_get_last_u8(CBS *cbs, uint8_t *out) {
|
@@ -161,10 +171,13 @@ int CBS_copy_bytes(CBS *cbs, uint8_t *out, size_t len) {
|
|
161
171
|
}
|
162
172
|
|
163
173
|
static int cbs_get_length_prefixed(CBS *cbs, CBS *out, size_t len_len) {
|
164
|
-
|
174
|
+
uint64_t len;
|
165
175
|
if (!cbs_get_u(cbs, &len, len_len)) {
|
166
176
|
return 0;
|
167
177
|
}
|
178
|
+
// If |len_len| <= 3 then we know that |len| will fit into a |size_t|, even on
|
179
|
+
// 32-bit systems.
|
180
|
+
assert(len_len <= 3);
|
168
181
|
return CBS_get_bytes(cbs, out, len);
|
169
182
|
}
|
170
183
|
|
@@ -278,7 +291,7 @@ static int cbs_get_any_asn1_element(CBS *cbs, CBS *out, unsigned *out_tag,
|
|
278
291
|
// encode the number of subsequent octets used to encode the length (ITU-T
|
279
292
|
// X.690 clause 8.1.3.5.b).
|
280
293
|
const size_t num_bytes = length_byte & 0x7f;
|
281
|
-
|
294
|
+
uint64_t len64;
|
282
295
|
|
283
296
|
if (ber_ok && (tag & CBS_ASN1_CONSTRUCTED) != 0 && num_bytes == 0) {
|
284
297
|
// indefinite length
|
@@ -294,20 +307,20 @@ static int cbs_get_any_asn1_element(CBS *cbs, CBS *out, unsigned *out_tag,
|
|
294
307
|
if (num_bytes == 0 || num_bytes > 4) {
|
295
308
|
return 0;
|
296
309
|
}
|
297
|
-
if (!cbs_get_u(&header, &
|
310
|
+
if (!cbs_get_u(&header, &len64, num_bytes)) {
|
298
311
|
return 0;
|
299
312
|
}
|
300
313
|
// ITU-T X.690 section 10.1 (DER length forms) requires encoding the length
|
301
314
|
// with the minimum number of octets.
|
302
|
-
if (
|
315
|
+
if (len64 < 128) {
|
303
316
|
// Length should have used short-form encoding.
|
304
317
|
return 0;
|
305
318
|
}
|
306
|
-
if ((
|
319
|
+
if ((len64 >> ((num_bytes-1)*8)) == 0) {
|
307
320
|
// Length should have been at least one byte shorter.
|
308
321
|
return 0;
|
309
322
|
}
|
310
|
-
len =
|
323
|
+
len = len64;
|
311
324
|
if (len + header_len + num_bytes < len) {
|
312
325
|
// Overflow.
|
313
326
|
return 0;
|
@@ -24,12 +24,10 @@ extern "C" {
|
|
24
24
|
|
25
25
|
// CBS_asn1_ber_to_der reads a BER element from |in|. If it finds
|
26
26
|
// indefinite-length elements or constructed strings then it converts the BER
|
27
|
-
// data to DER
|
28
|
-
//
|
29
|
-
// element.
|
30
|
-
//
|
31
|
-
// If it doesn't find any indefinite-length elements or constructed strings then
|
32
|
-
// it sets |*out| to NULL and |*in| is unmodified.
|
27
|
+
// data to DER, sets |out| to the converted contents and |*out_storage| to a
|
28
|
+
// buffer which the caller must release with |OPENSSL_free|. Otherwise, it sets
|
29
|
+
// |out| to the original BER element in |in| and |*out_storage| to NULL.
|
30
|
+
// Additionally, |*in| will be advanced over the BER element.
|
33
31
|
//
|
34
32
|
// This function should successfully process any valid BER input, however it
|
35
33
|
// will not convert all of BER's deviations from DER. BER is ambiguous between
|
@@ -39,7 +37,8 @@ extern "C" {
|
|
39
37
|
// must also account for BER variations in the contents of a primitive.
|
40
38
|
//
|
41
39
|
// It returns one on success and zero otherwise.
|
42
|
-
OPENSSL_EXPORT int CBS_asn1_ber_to_der(CBS *in,
|
40
|
+
OPENSSL_EXPORT int CBS_asn1_ber_to_der(CBS *in, CBS *out,
|
41
|
+
uint8_t **out_storage);
|
43
42
|
|
44
43
|
// CBS_get_asn1_implicit_string parses a BER string of primitive type
|
45
44
|
// |inner_tag| implicitly-tagged with |outer_tag|. It sets |out| to the
|
@@ -68,6 +67,28 @@ OPENSSL_EXPORT int CBS_get_asn1_implicit_string(CBS *in, CBS *out,
|
|
68
67
|
int CBB_finish_i2d(CBB *cbb, uint8_t **outp);
|
69
68
|
|
70
69
|
|
70
|
+
// Unicode utilities.
|
71
|
+
|
72
|
+
// The following functions read one Unicode code point from |cbs| with the
|
73
|
+
// corresponding encoding and store it in |*out|. They return one on success and
|
74
|
+
// zero on error.
|
75
|
+
OPENSSL_EXPORT int cbs_get_utf8(CBS *cbs, uint32_t *out);
|
76
|
+
OPENSSL_EXPORT int cbs_get_latin1(CBS *cbs, uint32_t *out);
|
77
|
+
OPENSSL_EXPORT int cbs_get_ucs2_be(CBS *cbs, uint32_t *out);
|
78
|
+
OPENSSL_EXPORT int cbs_get_utf32_be(CBS *cbs, uint32_t *out);
|
79
|
+
|
80
|
+
// cbb_get_utf8_len returns the number of bytes needed to represent |u| in
|
81
|
+
// UTF-8.
|
82
|
+
OPENSSL_EXPORT size_t cbb_get_utf8_len(uint32_t u);
|
83
|
+
|
84
|
+
// The following functions encode |u| to |cbb| with the corresponding
|
85
|
+
// encoding. They return one on success and zero on error.
|
86
|
+
OPENSSL_EXPORT int cbb_add_utf8(CBB *cbb, uint32_t u);
|
87
|
+
OPENSSL_EXPORT int cbb_add_latin1(CBB *cbb, uint32_t u);
|
88
|
+
OPENSSL_EXPORT int cbb_add_ucs2_be(CBB *cbb, uint32_t u);
|
89
|
+
OPENSSL_EXPORT int cbb_add_utf32_be(CBB *cbb, uint32_t u);
|
90
|
+
|
91
|
+
|
71
92
|
#if defined(__cplusplus)
|
72
93
|
} // extern C
|
73
94
|
#endif
|
@@ -0,0 +1,155 @@
|
|
1
|
+
/* Copyright (c) 2018, Google Inc.
|
2
|
+
*
|
3
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
4
|
+
* purpose with or without fee is hereby granted, provided that the above
|
5
|
+
* copyright notice and this permission notice appear in all copies.
|
6
|
+
*
|
7
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
10
|
+
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
12
|
+
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
|
+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
|
+
|
15
|
+
#include <openssl/bytestring.h>
|
16
|
+
|
17
|
+
#include "internal.h"
|
18
|
+
|
19
|
+
|
20
|
+
static int is_valid_code_point(uint32_t v) {
|
21
|
+
// References in the following are to Unicode 9.0.0.
|
22
|
+
if (// The Unicode space runs from zero to 0x10ffff (3.4 D9).
|
23
|
+
v > 0x10ffff ||
|
24
|
+
// Values 0x...fffe, 0x...ffff, and 0xfdd0-0xfdef are permanently reserved
|
25
|
+
// (3.4 D14)
|
26
|
+
(v & 0xfffe) == 0xfffe ||
|
27
|
+
(v >= 0xfdd0 && v <= 0xfdef) ||
|
28
|
+
// Surrogate code points are invalid (3.2 C1).
|
29
|
+
(v >= 0xd800 && v <= 0xdfff)) {
|
30
|
+
return 0;
|
31
|
+
}
|
32
|
+
return 1;
|
33
|
+
}
|
34
|
+
|
35
|
+
// BOTTOM_BITS returns a byte with the bottom |n| bits set.
|
36
|
+
#define BOTTOM_BITS(n) (uint8_t)((1u << (n)) - 1)
|
37
|
+
|
38
|
+
// TOP_BITS returns a byte with the top |n| bits set.
|
39
|
+
#define TOP_BITS(n) ((uint8_t)~BOTTOM_BITS(8 - (n)))
|
40
|
+
|
41
|
+
int cbs_get_utf8(CBS *cbs, uint32_t *out) {
|
42
|
+
uint8_t c;
|
43
|
+
if (!CBS_get_u8(cbs, &c)) {
|
44
|
+
return 0;
|
45
|
+
}
|
46
|
+
if (c <= 0x7f) {
|
47
|
+
*out = c;
|
48
|
+
return 1;
|
49
|
+
}
|
50
|
+
uint32_t v, lower_bound;
|
51
|
+
size_t len;
|
52
|
+
if ((c & TOP_BITS(3)) == TOP_BITS(2)) {
|
53
|
+
v = c & BOTTOM_BITS(5);
|
54
|
+
len = 1;
|
55
|
+
lower_bound = 0x80;
|
56
|
+
} else if ((c & TOP_BITS(4)) == TOP_BITS(3)) {
|
57
|
+
v = c & BOTTOM_BITS(4);
|
58
|
+
len = 2;
|
59
|
+
lower_bound = 0x800;
|
60
|
+
} else if ((c & TOP_BITS(5)) == TOP_BITS(4)) {
|
61
|
+
v = c & BOTTOM_BITS(3);
|
62
|
+
len = 3;
|
63
|
+
lower_bound = 0x10000;
|
64
|
+
} else {
|
65
|
+
return 0;
|
66
|
+
}
|
67
|
+
for (size_t i = 0; i < len; i++) {
|
68
|
+
if (!CBS_get_u8(cbs, &c) ||
|
69
|
+
(c & TOP_BITS(2)) != TOP_BITS(1)) {
|
70
|
+
return 0;
|
71
|
+
}
|
72
|
+
v <<= 6;
|
73
|
+
v |= c & BOTTOM_BITS(6);
|
74
|
+
}
|
75
|
+
if (!is_valid_code_point(v) ||
|
76
|
+
v < lower_bound) {
|
77
|
+
return 0;
|
78
|
+
}
|
79
|
+
*out = v;
|
80
|
+
return 1;
|
81
|
+
}
|
82
|
+
|
83
|
+
int cbs_get_latin1(CBS *cbs, uint32_t *out) {
|
84
|
+
uint8_t c;
|
85
|
+
if (!CBS_get_u8(cbs, &c)) {
|
86
|
+
return 0;
|
87
|
+
}
|
88
|
+
*out = c;
|
89
|
+
return 1;
|
90
|
+
}
|
91
|
+
|
92
|
+
int cbs_get_ucs2_be(CBS *cbs, uint32_t *out) {
|
93
|
+
// Note UCS-2 (used by BMPString) does not support surrogates.
|
94
|
+
uint16_t c;
|
95
|
+
if (!CBS_get_u16(cbs, &c) ||
|
96
|
+
!is_valid_code_point(c)) {
|
97
|
+
return 0;
|
98
|
+
}
|
99
|
+
*out = c;
|
100
|
+
return 1;
|
101
|
+
}
|
102
|
+
|
103
|
+
int cbs_get_utf32_be(CBS *cbs, uint32_t *out) {
|
104
|
+
return CBS_get_u32(cbs, out) && is_valid_code_point(*out);
|
105
|
+
}
|
106
|
+
|
107
|
+
size_t cbb_get_utf8_len(uint32_t u) {
|
108
|
+
if (u <= 0x7f) {
|
109
|
+
return 1;
|
110
|
+
}
|
111
|
+
if (u <= 0x7ff) {
|
112
|
+
return 2;
|
113
|
+
}
|
114
|
+
if (u <= 0xffff) {
|
115
|
+
return 3;
|
116
|
+
}
|
117
|
+
return 4;
|
118
|
+
}
|
119
|
+
|
120
|
+
int cbb_add_utf8(CBB *cbb, uint32_t u) {
|
121
|
+
if (!is_valid_code_point(u)) {
|
122
|
+
return 0;
|
123
|
+
}
|
124
|
+
if (u <= 0x7f) {
|
125
|
+
return CBB_add_u8(cbb, (uint8_t)u);
|
126
|
+
}
|
127
|
+
if (u <= 0x7ff) {
|
128
|
+
return CBB_add_u8(cbb, TOP_BITS(2) | (u >> 6)) &&
|
129
|
+
CBB_add_u8(cbb, TOP_BITS(1) | (u & BOTTOM_BITS(6)));
|
130
|
+
}
|
131
|
+
if (u <= 0xffff) {
|
132
|
+
return CBB_add_u8(cbb, TOP_BITS(3) | (u >> 12)) &&
|
133
|
+
CBB_add_u8(cbb, TOP_BITS(1) | ((u >> 6) & BOTTOM_BITS(6))) &&
|
134
|
+
CBB_add_u8(cbb, TOP_BITS(1) | (u & BOTTOM_BITS(6)));
|
135
|
+
}
|
136
|
+
if (u <= 0x10ffff) {
|
137
|
+
return CBB_add_u8(cbb, TOP_BITS(4) | (u >> 18)) &&
|
138
|
+
CBB_add_u8(cbb, TOP_BITS(1) | ((u >> 12) & BOTTOM_BITS(6))) &&
|
139
|
+
CBB_add_u8(cbb, TOP_BITS(1) | ((u >> 6) & BOTTOM_BITS(6))) &&
|
140
|
+
CBB_add_u8(cbb, TOP_BITS(1) | (u & BOTTOM_BITS(6)));
|
141
|
+
}
|
142
|
+
return 0;
|
143
|
+
}
|
144
|
+
|
145
|
+
int cbb_add_latin1(CBB *cbb, uint32_t u) {
|
146
|
+
return u <= 0xff && CBB_add_u8(cbb, (uint8_t)u);
|
147
|
+
}
|
148
|
+
|
149
|
+
int cbb_add_ucs2_be(CBB *cbb, uint32_t u) {
|
150
|
+
return u <= 0xffff && is_valid_code_point(u) && CBB_add_u16(cbb, (uint16_t)u);
|
151
|
+
}
|
152
|
+
|
153
|
+
int cbb_add_utf32_be(CBB *cbb, uint32_t u) {
|
154
|
+
return is_valid_code_point(u) && CBB_add_u32(cbb, u);
|
155
|
+
}
|
@@ -22,19 +22,49 @@
|
|
22
22
|
#include <openssl/cpu.h>
|
23
23
|
|
24
24
|
#include "../internal.h"
|
25
|
+
#include "internal.h"
|
25
26
|
|
26
27
|
|
27
28
|
#define U8TO32_LITTLE(p) \
|
28
29
|
(((uint32_t)((p)[0])) | ((uint32_t)((p)[1]) << 8) | \
|
29
30
|
((uint32_t)((p)[2]) << 16) | ((uint32_t)((p)[3]) << 24))
|
30
31
|
|
31
|
-
|
32
|
-
|
33
|
-
|
32
|
+
// sigma contains the ChaCha constants, which happen to be an ASCII string.
|
33
|
+
static const uint8_t sigma[16] = { 'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
|
34
|
+
'2', '-', 'b', 'y', 't', 'e', ' ', 'k' };
|
35
|
+
|
36
|
+
#define ROTATE(v, n) (((v) << (n)) | ((v) >> (32 - (n))))
|
37
|
+
|
38
|
+
// QUARTERROUND updates a, b, c, d with a ChaCha "quarter" round.
|
39
|
+
#define QUARTERROUND(a, b, c, d) \
|
40
|
+
x[a] += x[b]; x[d] = ROTATE(x[d] ^ x[a], 16); \
|
41
|
+
x[c] += x[d]; x[b] = ROTATE(x[b] ^ x[c], 12); \
|
42
|
+
x[a] += x[b]; x[d] = ROTATE(x[d] ^ x[a], 8); \
|
43
|
+
x[c] += x[d]; x[b] = ROTATE(x[b] ^ x[c], 7);
|
34
44
|
|
35
|
-
|
36
|
-
|
37
|
-
|
45
|
+
void CRYPTO_hchacha20(uint8_t out[32], const uint8_t key[32],
|
46
|
+
const uint8_t nonce[16]) {
|
47
|
+
uint32_t x[16];
|
48
|
+
OPENSSL_memcpy(x, sigma, sizeof(sigma));
|
49
|
+
OPENSSL_memcpy(&x[4], key, 32);
|
50
|
+
OPENSSL_memcpy(&x[12], nonce, 16);
|
51
|
+
|
52
|
+
for (size_t i = 0; i < 20; i += 2) {
|
53
|
+
QUARTERROUND(0, 4, 8, 12)
|
54
|
+
QUARTERROUND(1, 5, 9, 13)
|
55
|
+
QUARTERROUND(2, 6, 10, 14)
|
56
|
+
QUARTERROUND(3, 7, 11, 15)
|
57
|
+
QUARTERROUND(0, 5, 10, 15)
|
58
|
+
QUARTERROUND(1, 6, 11, 12)
|
59
|
+
QUARTERROUND(2, 7, 8, 13)
|
60
|
+
QUARTERROUND(3, 4, 9, 14)
|
61
|
+
}
|
62
|
+
|
63
|
+
OPENSSL_memcpy(out, &x[0], sizeof(uint32_t) * 4);
|
64
|
+
OPENSSL_memcpy(&out[16], &x[12], sizeof(uint32_t) * 4);
|
65
|
+
}
|
66
|
+
|
67
|
+
#if defined(CHACHA20_ASM)
|
38
68
|
|
39
69
|
void CRYPTO_chacha_20(uint8_t *out, const uint8_t *in, size_t in_len,
|
40
70
|
const uint8_t key[32], const uint8_t nonce[12],
|
@@ -69,12 +99,6 @@ void CRYPTO_chacha_20(uint8_t *out, const uint8_t *in, size_t in_len,
|
|
69
99
|
|
70
100
|
#else
|
71
101
|
|
72
|
-
// sigma contains the ChaCha constants, which happen to be an ASCII string.
|
73
|
-
static const uint8_t sigma[16] = { 'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
|
74
|
-
'2', '-', 'b', 'y', 't', 'e', ' ', 'k' };
|
75
|
-
|
76
|
-
#define ROTATE(v, n) (((v) << (n)) | ((v) >> (32 - (n))))
|
77
|
-
|
78
102
|
#define U32TO8_LITTLE(p, v) \
|
79
103
|
{ \
|
80
104
|
(p)[0] = (v >> 0) & 0xff; \
|
@@ -83,13 +107,6 @@ static const uint8_t sigma[16] = { 'e', 'x', 'p', 'a', 'n', 'd', ' ', '3',
|
|
83
107
|
(p)[3] = (v >> 24) & 0xff; \
|
84
108
|
}
|
85
109
|
|
86
|
-
// QUARTERROUND updates a, b, c, d with a ChaCha "quarter" round.
|
87
|
-
#define QUARTERROUND(a, b, c, d) \
|
88
|
-
x[a] += x[b]; x[d] = ROTATE(x[d] ^ x[a], 16); \
|
89
|
-
x[c] += x[d]; x[b] = ROTATE(x[b] ^ x[c], 12); \
|
90
|
-
x[a] += x[b]; x[d] = ROTATE(x[d] ^ x[a], 8); \
|
91
|
-
x[c] += x[d]; x[b] = ROTATE(x[b] ^ x[c], 7);
|
92
|
-
|
93
110
|
// chacha_core performs 20 rounds of ChaCha on the input words in
|
94
111
|
// |input| and writes the 64 output bytes to |output|.
|
95
112
|
static void chacha_core(uint8_t output[64], const uint32_t input[16]) {
|
@@ -0,0 +1,45 @@
|
|
1
|
+
/* Copyright (c) 2018, Google Inc.
|
2
|
+
*
|
3
|
+
* Permission to use, copy, modify, and/or distribute this software for any
|
4
|
+
* purpose with or without fee is hereby granted, provided that the above
|
5
|
+
* copyright notice and this permission notice appear in all copies.
|
6
|
+
*
|
7
|
+
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
8
|
+
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
9
|
+
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
|
10
|
+
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
11
|
+
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
|
12
|
+
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
|
13
|
+
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
|
14
|
+
|
15
|
+
#ifndef OPENSSL_HEADER_CHACHA_INTERNAL
|
16
|
+
#define OPENSSL_HEADER_CHACHA_INTERNAL
|
17
|
+
|
18
|
+
#include <openssl/base.h>
|
19
|
+
|
20
|
+
#if defined(__cplusplus)
|
21
|
+
extern "C" {
|
22
|
+
#endif
|
23
|
+
|
24
|
+
|
25
|
+
// CRYPTO_hchacha20 computes the HChaCha20 function, which should only be used
|
26
|
+
// as part of XChaCha20.
|
27
|
+
void CRYPTO_hchacha20(uint8_t out[32], const uint8_t key[32],
|
28
|
+
const uint8_t nonce[16]);
|
29
|
+
|
30
|
+
#if !defined(OPENSSL_NO_ASM) && \
|
31
|
+
(defined(OPENSSL_X86) || defined(OPENSSL_X86_64) || \
|
32
|
+
defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64))
|
33
|
+
#define CHACHA20_ASM
|
34
|
+
|
35
|
+
// ChaCha20_ctr32 is defined in asm/chacha-*.pl.
|
36
|
+
void ChaCha20_ctr32(uint8_t *out, const uint8_t *in, size_t in_len,
|
37
|
+
const uint32_t key[8], const uint32_t counter[4]);
|
38
|
+
#endif
|
39
|
+
|
40
|
+
|
41
|
+
#if defined(__cplusplus)
|
42
|
+
} // extern C
|
43
|
+
#endif
|
44
|
+
|
45
|
+
#endif // OPENSSL_HEADER_CHACHA_INTERNAL
|
@@ -94,20 +94,49 @@ const EVP_CIPHER *EVP_get_cipherbyname(const char *name) {
|
|
94
94
|
} else if (OPENSSL_strcasecmp(name, "des-cbc") == 0) {
|
95
95
|
return EVP_des_cbc();
|
96
96
|
} else if (OPENSSL_strcasecmp(name, "des-ede3-cbc") == 0 ||
|
97
|
+
// This is not a name used by OpenSSL, but tcpdump registers it
|
98
|
+
// with |EVP_add_cipher_alias|. Our |EVP_add_cipher_alias| is a
|
99
|
+
// no-op, so we support the name here.
|
97
100
|
OPENSSL_strcasecmp(name, "3des") == 0) {
|
98
101
|
return EVP_des_ede3_cbc();
|
99
102
|
} else if (OPENSSL_strcasecmp(name, "aes-128-cbc") == 0) {
|
100
103
|
return EVP_aes_128_cbc();
|
104
|
+
} else if (OPENSSL_strcasecmp(name, "aes-192-cbc") == 0) {
|
105
|
+
return EVP_aes_192_cbc();
|
101
106
|
} else if (OPENSSL_strcasecmp(name, "aes-256-cbc") == 0) {
|
102
107
|
return EVP_aes_256_cbc();
|
103
108
|
} else if (OPENSSL_strcasecmp(name, "aes-128-ctr") == 0) {
|
104
109
|
return EVP_aes_128_ctr();
|
110
|
+
} else if (OPENSSL_strcasecmp(name, "aes-192-ctr") == 0) {
|
111
|
+
return EVP_aes_192_ctr();
|
105
112
|
} else if (OPENSSL_strcasecmp(name, "aes-256-ctr") == 0) {
|
106
113
|
return EVP_aes_256_ctr();
|
107
114
|
} else if (OPENSSL_strcasecmp(name, "aes-128-ecb") == 0) {
|
108
115
|
return EVP_aes_128_ecb();
|
116
|
+
} else if (OPENSSL_strcasecmp(name, "aes-192-ecb") == 0) {
|
117
|
+
return EVP_aes_192_ecb();
|
109
118
|
} else if (OPENSSL_strcasecmp(name, "aes-256-ecb") == 0) {
|
110
119
|
return EVP_aes_256_ecb();
|
120
|
+
} else if (OPENSSL_strcasecmp(name, "aes-128-gcm") == 0) {
|
121
|
+
return EVP_aes_128_gcm();
|
122
|
+
} else if (OPENSSL_strcasecmp(name, "aes-192-gcm") == 0) {
|
123
|
+
return EVP_aes_192_gcm();
|
124
|
+
} else if (OPENSSL_strcasecmp(name, "aes-256-gcm") == 0) {
|
125
|
+
return EVP_aes_256_gcm();
|
126
|
+
} else if (OPENSSL_strcasecmp(name, "aes-128-ofb") == 0) {
|
127
|
+
return EVP_aes_128_ofb();
|
128
|
+
} else if (OPENSSL_strcasecmp(name, "aes-192-ofb") == 0) {
|
129
|
+
return EVP_aes_192_ofb();
|
130
|
+
} else if (OPENSSL_strcasecmp(name, "aes-256-ofb") == 0) {
|
131
|
+
return EVP_aes_256_ofb();
|
132
|
+
} else if (OPENSSL_strcasecmp(name, "des-ecb") == 0) {
|
133
|
+
return EVP_des_ecb();
|
134
|
+
} else if (OPENSSL_strcasecmp(name, "des-ede") == 0) {
|
135
|
+
return EVP_des_ede();
|
136
|
+
} else if (OPENSSL_strcasecmp(name, "des-ede-cbc") == 0) {
|
137
|
+
return EVP_des_ede_cbc();
|
138
|
+
} else if (OPENSSL_strcasecmp(name, "rc2-cbc") == 0) {
|
139
|
+
return EVP_rc2_cbc();
|
111
140
|
}
|
112
141
|
|
113
142
|
return NULL;
|