grpc 1.4.5 → 1.6.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 +1235 -1100
- data/etc/roots.pem +0 -412
- data/include/grpc/byte_buffer.h +10 -25
- data/include/grpc/byte_buffer_reader.h +10 -25
- data/include/grpc/census.h +10 -25
- data/include/grpc/compression.h +10 -25
- data/include/grpc/grpc.h +15 -26
- data/include/grpc/grpc_cronet.h +10 -25
- data/include/grpc/grpc_posix.h +10 -25
- data/include/grpc/grpc_security.h +10 -25
- data/include/grpc/grpc_security_constants.h +10 -25
- data/include/grpc/impl/codegen/atm.h +11 -25
- data/include/grpc/impl/codegen/atm_gcc_atomic.h +10 -25
- data/include/grpc/impl/codegen/atm_gcc_sync.h +10 -25
- data/include/grpc/impl/codegen/atm_windows.h +10 -25
- data/include/grpc/impl/codegen/byte_buffer_reader.h +11 -26
- data/include/grpc/impl/codegen/compression_types.h +12 -27
- data/include/grpc/impl/codegen/connectivity_state.h +10 -25
- data/include/grpc/impl/codegen/exec_ctx_fwd.h +10 -25
- data/include/grpc/impl/codegen/gpr_slice.h +10 -25
- data/include/grpc/impl/codegen/gpr_types.h +10 -25
- data/include/grpc/impl/codegen/grpc_types.h +42 -43
- data/include/grpc/impl/codegen/port_platform.h +10 -25
- data/include/grpc/impl/codegen/propagation_bits.h +10 -25
- data/include/grpc/impl/codegen/slice.h +13 -28
- data/include/grpc/impl/codegen/status.h +10 -25
- data/include/grpc/impl/codegen/sync.h +10 -25
- data/include/grpc/impl/codegen/sync_generic.h +10 -25
- data/include/grpc/impl/codegen/sync_posix.h +10 -25
- data/include/grpc/impl/codegen/sync_windows.h +10 -25
- data/include/grpc/load_reporting.h +10 -25
- data/include/grpc/slice.h +10 -25
- data/include/grpc/slice_buffer.h +10 -25
- data/include/grpc/status.h +10 -25
- data/include/grpc/support/alloc.h +10 -25
- data/include/grpc/support/atm.h +10 -25
- data/include/grpc/support/atm_gcc_atomic.h +10 -25
- data/include/grpc/support/atm_gcc_sync.h +10 -25
- data/include/grpc/support/atm_windows.h +10 -25
- data/include/grpc/support/avl.h +46 -49
- data/include/grpc/support/cmdline.h +10 -25
- data/include/grpc/support/cpu.h +10 -25
- data/include/grpc/support/histogram.h +10 -25
- data/include/grpc/support/host_port.h +10 -25
- data/include/grpc/support/log.h +10 -25
- data/include/grpc/support/log_windows.h +10 -25
- data/include/grpc/support/port_platform.h +10 -25
- data/include/grpc/support/string_util.h +10 -25
- data/include/grpc/support/subprocess.h +10 -25
- data/include/grpc/support/sync.h +10 -25
- data/include/grpc/support/sync_generic.h +10 -25
- data/include/grpc/support/sync_posix.h +10 -25
- data/include/grpc/support/sync_windows.h +10 -25
- data/include/grpc/support/thd.h +10 -25
- data/include/grpc/support/time.h +10 -25
- data/include/grpc/support/tls.h +10 -25
- data/include/grpc/support/tls_gcc.h +10 -25
- data/include/grpc/support/tls_msvc.h +10 -25
- data/include/grpc/support/tls_pthread.h +10 -25
- data/include/grpc/support/useful.h +10 -25
- data/include/grpc/support/workaround_list.h +11 -26
- data/src/boringssl/err_data.c +277 -259
- data/src/core/ext/census/aggregation.h +10 -25
- data/src/core/ext/census/base_resources.c +10 -25
- data/src/core/ext/census/base_resources.h +10 -25
- data/src/core/ext/census/census_interface.h +10 -25
- data/src/core/ext/census/census_rpc_stats.h +10 -25
- data/src/core/ext/census/context.c +10 -25
- data/src/core/ext/census/gen/census.pb.c +10 -25
- data/src/core/ext/census/gen/census.pb.h +10 -25
- data/src/core/ext/census/gen/trace_context.pb.c +10 -25
- data/src/core/ext/census/gen/trace_context.pb.h +10 -25
- data/src/core/ext/census/grpc_context.c +10 -25
- data/src/core/ext/census/grpc_filter.c +11 -26
- data/src/core/ext/census/grpc_filter.h +10 -25
- data/src/core/ext/census/grpc_plugin.c +10 -25
- data/src/core/ext/census/initialize.c +10 -25
- data/src/core/ext/census/intrusive_hash_map.c +10 -25
- data/src/core/ext/census/intrusive_hash_map.h +10 -25
- data/src/core/ext/census/intrusive_hash_map_internal.h +10 -25
- data/src/core/ext/census/mlog.c +10 -25
- data/src/core/ext/census/mlog.h +10 -25
- data/src/core/ext/census/operation.c +10 -25
- data/src/core/ext/census/placeholders.c +10 -25
- data/src/core/ext/census/resource.c +10 -25
- data/src/core/ext/census/resource.h +10 -25
- data/src/core/ext/census/rpc_metric_id.h +10 -25
- data/src/core/ext/census/trace_context.c +10 -25
- data/src/core/ext/census/trace_context.h +10 -25
- data/src/core/ext/census/trace_label.h +10 -25
- data/src/core/ext/census/trace_propagation.h +10 -25
- data/src/core/ext/census/trace_status.h +10 -25
- data/src/core/ext/census/trace_string.h +10 -25
- data/src/core/ext/census/tracing.c +10 -26
- data/src/core/ext/census/tracing.h +10 -25
- data/src/core/ext/filters/client_channel/channel_connectivity.c +20 -33
- data/src/core/ext/filters/client_channel/client_channel.c +617 -520
- data/src/core/ext/filters/client_channel/client_channel.h +15 -28
- data/src/core/ext/filters/client_channel/client_channel_factory.c +13 -31
- data/src/core/ext/filters/client_channel/client_channel_factory.h +10 -25
- data/src/core/ext/filters/client_channel/client_channel_plugin.c +16 -29
- data/src/core/ext/filters/client_channel/connector.c +10 -25
- data/src/core/ext/filters/client_channel/connector.h +10 -25
- data/src/core/ext/filters/client_channel/http_connect_handshaker.c +15 -30
- data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -25
- data/src/core/ext/filters/client_channel/http_proxy.c +112 -38
- data/src/core/ext/filters/client_channel/http_proxy.h +10 -25
- data/src/core/ext/filters/client_channel/lb_policy.c +32 -36
- data/src/core/ext/filters/client_channel/lb_policy.h +24 -27
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.c +14 -30
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +10 -25
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.c +464 -279
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +10 -25
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +15 -28
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.c +40 -48
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.c +65 -49
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +31 -31
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.c +47 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +11 -26
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +13 -9
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +27 -21
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +373 -136
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +504 -279
- data/src/core/ext/filters/client_channel/lb_policy_factory.c +12 -31
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +12 -27
- data/src/core/ext/filters/client_channel/lb_policy_registry.c +10 -25
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -25
- data/src/core/ext/filters/client_channel/parse_address.c +10 -25
- data/src/core/ext/filters/client_channel/parse_address.h +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper.c +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper.h +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.c +10 -25
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +10 -25
- data/src/core/ext/filters/client_channel/resolver.c +33 -38
- data/src/core/ext/filters/client_channel/resolver.h +19 -30
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.c +153 -50
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +14 -27
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c +33 -30
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.c +326 -116
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +35 -36
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +60 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.c +19 -34
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.c +254 -0
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +60 -0
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.c +16 -28
- data/src/core/ext/filters/client_channel/resolver_factory.c +10 -25
- data/src/core/ext/filters/client_channel/resolver_factory.h +10 -25
- data/src/core/ext/filters/client_channel/resolver_registry.c +10 -25
- data/src/core/ext/filters/client_channel/resolver_registry.h +10 -25
- data/src/core/ext/filters/client_channel/retry_throttle.c +23 -34
- data/src/core/ext/filters/client_channel/retry_throttle.h +10 -25
- data/src/core/ext/filters/client_channel/subchannel.c +33 -55
- data/src/core/ext/filters/client_channel/subchannel.h +16 -26
- data/src/core/ext/filters/client_channel/subchannel_index.c +55 -92
- data/src/core/ext/filters/client_channel/subchannel_index.h +26 -29
- data/src/core/ext/filters/client_channel/uri_parser.c +10 -25
- data/src/core/ext/filters/client_channel/uri_parser.h +10 -25
- data/src/core/ext/filters/deadline/deadline_filter.c +30 -45
- data/src/core/ext/filters/deadline/deadline_filter.h +10 -25
- data/src/core/ext/filters/http/client/http_client_filter.c +255 -294
- data/src/core/ext/filters/http/client/http_client_filter.h +10 -25
- data/src/core/ext/filters/http/http_filters_plugin.c +11 -26
- data/src/core/ext/filters/http/message_compress/message_compress_filter.c +133 -105
- data/src/core/ext/filters/http/message_compress/message_compress_filter.h +10 -25
- data/src/core/ext/filters/http/server/http_server_filter.c +17 -32
- data/src/core/ext/filters/http/server/http_server_filter.h +10 -25
- data/src/core/ext/filters/load_reporting/load_reporting.c +11 -30
- data/src/core/ext/filters/load_reporting/load_reporting.h +10 -25
- data/src/core/ext/filters/load_reporting/load_reporting_filter.c +11 -26
- data/src/core/ext/filters/load_reporting/load_reporting_filter.h +10 -25
- data/src/core/ext/filters/max_age/max_age_filter.c +28 -43
- data/src/core/ext/filters/max_age/max_age_filter.h +10 -25
- data/src/core/ext/filters/message_size/message_size_filter.c +24 -37
- data/src/core/ext/filters/message_size/message_size_filter.h +10 -25
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.c +16 -31
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +10 -25
- data/src/core/ext/filters/workarounds/workaround_utils.c +12 -26
- data/src/core/ext/filters/workarounds/workaround_utils.h +11 -26
- data/src/core/ext/transport/chttp2/alpn/alpn.c +10 -25
- data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -25
- data/src/core/ext/transport/chttp2/client/chttp2_connector.c +13 -28
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +10 -25
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +13 -30
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +12 -29
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +13 -30
- data/src/core/ext/transport/chttp2/server/chttp2_server.c +11 -26
- data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -25
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +10 -25
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +10 -25
- data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +10 -25
- data/src/core/ext/transport/chttp2/transport/bin_decoder.c +11 -25
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +10 -25
- data/src/core/ext/transport/chttp2/transport/bin_encoder.c +10 -25
- data/src/core/ext/transport/chttp2/transport/bin_encoder.h +10 -25
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +15 -27
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +421 -443
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -25
- data/src/core/ext/transport/chttp2/transport/flow_control.c +500 -0
- data/src/core/ext/transport/chttp2/transport/frame.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_data.c +20 -28
- data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_goaway.c +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_goaway.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_ping.c +11 -26
- data/src/core/ext/transport/chttp2/transport/frame_ping.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +11 -26
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_settings.c +16 -29
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +10 -25
- data/src/core/ext/transport/chttp2/transport/frame_window_update.c +17 -33
- data/src/core/ext/transport/chttp2/transport/frame_window_update.h +10 -25
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +18 -31
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +12 -25
- data/src/core/ext/transport/chttp2/transport/hpack_parser.c +15 -30
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.c +10 -25
- data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -25
- data/src/core/ext/transport/chttp2/transport/http2_settings.c +10 -25
- data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -25
- data/src/core/ext/transport/chttp2/transport/huffsyms.c +10 -25
- data/src/core/ext/transport/chttp2/transport/huffsyms.h +10 -25
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +10 -25
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +10 -25
- data/src/core/ext/transport/chttp2/transport/internal.h +191 -179
- data/src/core/ext/transport/chttp2/transport/parsing.c +33 -102
- data/src/core/ext/transport/chttp2/transport/stream_lists.c +26 -28
- data/src/core/ext/transport/chttp2/transport/stream_map.c +10 -25
- data/src/core/ext/transport/chttp2/transport/stream_map.h +10 -25
- data/src/core/ext/transport/chttp2/transport/varint.c +14 -25
- data/src/core/ext/transport/chttp2/transport/varint.h +10 -25
- data/src/core/ext/transport/chttp2/transport/writing.c +164 -106
- data/src/core/ext/transport/inproc/inproc_plugin.c +29 -0
- data/src/core/ext/transport/inproc/inproc_transport.c +1303 -0
- data/src/core/ext/transport/inproc/inproc_transport.h +41 -0
- data/src/core/lib/channel/channel_args.c +52 -27
- data/src/core/lib/channel/channel_args.h +18 -27
- data/src/core/lib/channel/channel_stack.c +11 -26
- data/src/core/lib/channel/channel_stack.h +12 -27
- data/src/core/lib/channel/channel_stack_builder.c +11 -26
- data/src/core/lib/channel/channel_stack_builder.h +10 -25
- data/src/core/lib/channel/connected_channel.c +10 -25
- data/src/core/lib/channel/connected_channel.h +10 -25
- data/src/core/lib/channel/context.h +10 -25
- data/src/core/lib/channel/handshaker.c +14 -29
- data/src/core/lib/channel/handshaker.h +10 -25
- data/src/core/lib/channel/handshaker_factory.c +10 -25
- data/src/core/lib/channel/handshaker_factory.h +10 -25
- data/src/core/lib/channel/handshaker_registry.c +10 -25
- data/src/core/lib/channel/handshaker_registry.h +10 -25
- data/src/core/lib/compression/algorithm_metadata.h +10 -25
- data/src/core/lib/compression/compression.c +10 -25
- data/src/core/lib/compression/message_compress.c +10 -25
- data/src/core/lib/compression/message_compress.h +10 -25
- data/src/core/lib/compression/stream_compression.c +191 -0
- data/src/core/lib/compression/stream_compression.h +90 -0
- data/src/core/lib/debug/trace.c +28 -29
- data/src/core/lib/debug/trace.h +16 -30
- data/src/core/lib/http/format_request.c +10 -25
- data/src/core/lib/http/format_request.h +10 -25
- data/src/core/lib/http/httpcli.c +19 -35
- data/src/core/lib/http/httpcli.h +10 -25
- data/src/core/lib/http/httpcli_security_connector.c +17 -30
- data/src/core/lib/http/parser.c +11 -26
- data/src/core/lib/http/parser.h +10 -25
- data/src/core/lib/iomgr/closure.c +62 -25
- data/src/core/lib/iomgr/closure.h +81 -26
- data/src/core/lib/iomgr/combiner.c +103 -200
- data/src/core/lib/iomgr/combiner.h +14 -32
- data/src/core/lib/iomgr/endpoint.c +10 -29
- data/src/core/lib/iomgr/endpoint.h +10 -29
- data/src/core/lib/iomgr/endpoint_pair.h +10 -25
- data/src/core/lib/iomgr/endpoint_pair_posix.c +10 -25
- data/src/core/lib/iomgr/endpoint_pair_uv.c +10 -25
- data/src/core/lib/iomgr/endpoint_pair_windows.c +10 -25
- data/src/core/lib/iomgr/error.c +45 -46
- data/src/core/lib/iomgr/error.h +21 -34
- data/src/core/lib/iomgr/error_internal.h +10 -25
- data/src/core/lib/iomgr/ev_epoll1_linux.c +279 -179
- data/src/core/lib/iomgr/ev_epoll1_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.c +75 -264
- data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.c +44 -199
- data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epollex_linux.c +184 -247
- data/src/core/lib/iomgr/ev_epollex_linux.h +10 -25
- data/src/core/lib/iomgr/ev_epollsig_linux.c +116 -323
- data/src/core/lib/iomgr/ev_epollsig_linux.h +10 -25
- data/src/core/lib/iomgr/ev_poll_posix.c +328 -184
- data/src/core/lib/iomgr/ev_poll_posix.h +10 -25
- data/src/core/lib/iomgr/ev_posix.c +25 -56
- data/src/core/lib/iomgr/ev_posix.h +15 -44
- data/src/core/lib/iomgr/ev_windows.c +11 -26
- data/src/core/lib/iomgr/exec_ctx.c +36 -45
- data/src/core/lib/iomgr/exec_ctx.h +10 -25
- data/src/core/lib/iomgr/executor.c +152 -127
- data/src/core/lib/iomgr/executor.h +18 -26
- data/src/core/lib/iomgr/gethostname.h +26 -0
- data/src/core/lib/iomgr/gethostname_fallback.c +27 -0
- data/src/core/lib/iomgr/gethostname_host_name_max.c +37 -0
- data/src/core/lib/iomgr/gethostname_sysconf.c +37 -0
- data/src/core/lib/iomgr/iocp_windows.c +10 -25
- data/src/core/lib/iomgr/iocp_windows.h +10 -25
- data/src/core/lib/iomgr/iomgr.c +17 -28
- data/src/core/lib/iomgr/iomgr.h +12 -27
- data/src/core/lib/iomgr/iomgr_internal.h +10 -25
- data/src/core/lib/iomgr/iomgr_posix.c +11 -26
- data/src/core/lib/iomgr/iomgr_posix.h +10 -25
- data/src/core/lib/iomgr/iomgr_uv.c +19 -26
- data/src/core/lib/iomgr/iomgr_uv.h +37 -0
- data/src/core/lib/iomgr/iomgr_windows.c +10 -25
- data/src/core/lib/iomgr/is_epollexclusive_available.c +10 -25
- data/src/core/lib/iomgr/is_epollexclusive_available.h +10 -25
- data/src/core/lib/iomgr/load_file.c +10 -25
- data/src/core/lib/iomgr/load_file.h +10 -25
- data/src/core/lib/iomgr/lockfree_event.c +22 -35
- data/src/core/lib/iomgr/lockfree_event.h +13 -27
- data/src/core/lib/iomgr/nameser.h +104 -0
- data/src/core/lib/iomgr/network_status_tracker.c +10 -25
- data/src/core/lib/iomgr/network_status_tracker.h +10 -25
- data/src/core/lib/iomgr/polling_entity.c +10 -25
- data/src/core/lib/iomgr/polling_entity.h +14 -34
- data/src/core/lib/iomgr/pollset.h +14 -25
- data/src/core/lib/iomgr/pollset_set.h +10 -25
- data/src/core/lib/iomgr/pollset_set_uv.c +10 -25
- data/src/core/lib/iomgr/pollset_set_windows.c +10 -25
- data/src/core/lib/iomgr/pollset_set_windows.h +10 -25
- data/src/core/lib/iomgr/pollset_uv.c +25 -26
- data/src/core/lib/iomgr/pollset_uv.h +10 -25
- data/src/core/lib/iomgr/pollset_windows.c +17 -27
- data/src/core/lib/iomgr/pollset_windows.h +10 -25
- data/src/core/lib/iomgr/port.h +24 -25
- data/src/core/lib/iomgr/resolve_address.h +10 -25
- data/src/core/lib/iomgr/resolve_address_posix.c +13 -28
- data/src/core/lib/iomgr/resolve_address_uv.c +31 -35
- data/src/core/lib/iomgr/resolve_address_windows.c +13 -28
- data/src/core/lib/iomgr/resource_quota.c +52 -67
- data/src/core/lib/iomgr/resource_quota.h +10 -25
- data/src/core/lib/iomgr/sockaddr.h +10 -25
- data/src/core/lib/iomgr/sockaddr_posix.h +10 -25
- data/src/core/lib/iomgr/sockaddr_utils.c +15 -25
- data/src/core/lib/iomgr/sockaddr_utils.h +12 -25
- data/src/core/lib/iomgr/sockaddr_windows.h +10 -25
- data/src/core/lib/iomgr/socket_factory_posix.c +13 -31
- data/src/core/lib/iomgr/socket_factory_posix.h +10 -25
- data/src/core/lib/iomgr/socket_mutator.c +14 -31
- data/src/core/lib/iomgr/socket_mutator.h +10 -25
- data/src/core/lib/iomgr/socket_utils.h +10 -25
- data/src/core/lib/iomgr/socket_utils_common_posix.c +10 -25
- data/src/core/lib/iomgr/socket_utils_linux.c +10 -25
- data/src/core/lib/iomgr/socket_utils_posix.c +10 -25
- data/src/core/lib/iomgr/socket_utils_posix.h +10 -25
- data/src/core/lib/iomgr/socket_utils_uv.c +10 -25
- data/src/core/lib/iomgr/socket_utils_windows.c +10 -25
- data/src/core/lib/iomgr/socket_windows.c +12 -27
- data/src/core/lib/iomgr/socket_windows.h +10 -25
- data/src/core/lib/iomgr/sys_epoll_wrapper.h +10 -25
- data/src/core/lib/iomgr/tcp_client.h +10 -25
- data/src/core/lib/iomgr/tcp_client_posix.c +21 -34
- data/src/core/lib/iomgr/tcp_client_posix.h +10 -25
- data/src/core/lib/iomgr/tcp_client_uv.c +18 -27
- data/src/core/lib/iomgr/tcp_client_windows.c +14 -29
- data/src/core/lib/iomgr/tcp_posix.c +36 -55
- data/src/core/lib/iomgr/tcp_posix.h +10 -25
- data/src/core/lib/iomgr/tcp_server.h +10 -25
- data/src/core/lib/iomgr/tcp_server_posix.c +16 -31
- data/src/core/lib/iomgr/tcp_server_utils_posix.h +10 -25
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.c +11 -26
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c +10 -25
- data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c +10 -25
- data/src/core/lib/iomgr/tcp_server_uv.c +103 -64
- data/src/core/lib/iomgr/tcp_server_windows.c +14 -29
- data/src/core/lib/iomgr/tcp_uv.c +41 -45
- data/src/core/lib/iomgr/tcp_uv.h +10 -25
- data/src/core/lib/iomgr/tcp_windows.c +39 -53
- data/src/core/lib/iomgr/tcp_windows.h +10 -25
- data/src/core/lib/iomgr/time_averaged_stats.c +10 -25
- data/src/core/lib/iomgr/time_averaged_stats.h +10 -25
- data/src/core/lib/iomgr/timer.h +18 -27
- data/src/core/lib/iomgr/timer_generic.c +91 -87
- data/src/core/lib/iomgr/timer_generic.h +10 -25
- data/src/core/lib/iomgr/timer_heap.c +10 -25
- data/src/core/lib/iomgr/timer_heap.h +10 -25
- data/src/core/lib/iomgr/timer_manager.c +178 -100
- data/src/core/lib/iomgr/timer_manager.h +10 -25
- data/src/core/lib/iomgr/timer_uv.c +23 -33
- data/src/core/lib/iomgr/timer_uv.h +10 -25
- data/src/core/lib/iomgr/udp_server.c +17 -32
- data/src/core/lib/iomgr/udp_server.h +10 -25
- data/src/core/lib/iomgr/unix_sockets_posix.c +10 -25
- data/src/core/lib/iomgr/unix_sockets_posix.h +10 -25
- data/src/core/lib/iomgr/unix_sockets_posix_noop.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_cv.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_cv.h +13 -28
- data/src/core/lib/iomgr/wakeup_fd_eventfd.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_nospecial.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_pipe.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_pipe.h +10 -25
- data/src/core/lib/iomgr/wakeup_fd_posix.c +10 -25
- data/src/core/lib/iomgr/wakeup_fd_posix.h +10 -25
- data/src/core/lib/json/json.c +10 -25
- data/src/core/lib/json/json.h +10 -25
- data/src/core/lib/json/json_common.h +10 -25
- data/src/core/lib/json/json_reader.c +11 -25
- data/src/core/lib/json/json_reader.h +10 -25
- data/src/core/lib/json/json_string.c +10 -25
- data/src/core/lib/json/json_writer.c +10 -25
- data/src/core/lib/json/json_writer.h +10 -25
- data/src/core/lib/profiling/basic_timers.c +10 -25
- data/src/core/lib/profiling/stap_timers.c +10 -25
- data/src/core/lib/profiling/timers.h +10 -25
- data/src/core/lib/security/context/security_context.c +32 -40
- data/src/core/lib/security/context/security_context.h +15 -26
- data/src/core/lib/security/credentials/composite/composite_credentials.c +76 -81
- data/src/core/lib/security/credentials/composite/composite_credentials.h +10 -25
- data/src/core/lib/security/credentials/credentials.c +29 -49
- data/src/core/lib/security/credentials/credentials.h +48 -61
- data/src/core/lib/security/credentials/credentials_metadata.c +34 -78
- data/src/core/lib/security/credentials/fake/fake_credentials.c +33 -56
- data/src/core/lib/security/credentials/fake/fake_credentials.h +12 -27
- data/src/core/lib/security/credentials/google_default/credentials_generic.c +10 -25
- data/src/core/lib/security/credentials/google_default/google_default_credentials.c +12 -27
- data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -25
- data/src/core/lib/security/credentials/iam/iam_credentials.c +40 -40
- data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -26
- data/src/core/lib/security/credentials/jwt/json_token.c +10 -25
- data/src/core/lib/security/credentials/jwt/json_token.h +10 -25
- data/src/core/lib/security/credentials/jwt/jwt_credentials.c +45 -48
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -26
- data/src/core/lib/security/credentials/jwt/jwt_verifier.c +53 -33
- data/src/core/lib/security/credentials/jwt/jwt_verifier.h +10 -25
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +155 -87
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -28
- data/src/core/lib/security/credentials/plugin/plugin_credentials.c +118 -82
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -27
- data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -32
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -25
- data/src/core/lib/security/transport/auth_filters.h +10 -25
- data/src/core/lib/security/transport/client_auth_filter.c +217 -112
- data/src/core/lib/security/transport/lb_targets_info.c +16 -32
- data/src/core/lib/security/transport/lb_targets_info.h +10 -25
- data/src/core/lib/security/transport/secure_endpoint.c +29 -43
- data/src/core/lib/security/transport/secure_endpoint.h +10 -25
- data/src/core/lib/security/transport/security_connector.c +80 -61
- data/src/core/lib/security/transport/security_connector.h +35 -35
- data/src/core/lib/security/transport/security_handshaker.c +18 -33
- data/src/core/lib/security/transport/security_handshaker.h +10 -25
- data/src/core/lib/security/transport/server_auth_filter.c +62 -116
- data/src/core/lib/security/transport/tsi_error.c +10 -25
- data/src/core/lib/security/transport/tsi_error.h +10 -25
- data/src/core/lib/security/util/json_util.c +10 -25
- data/src/core/lib/security/util/json_util.h +10 -25
- data/src/core/lib/slice/b64.c +10 -25
- data/src/core/lib/slice/b64.h +10 -25
- data/src/core/lib/slice/percent_encoding.c +10 -25
- data/src/core/lib/slice/percent_encoding.h +10 -25
- data/src/core/lib/slice/slice.c +10 -25
- data/src/core/lib/slice/slice_buffer.c +10 -25
- data/src/core/lib/slice/slice_hash_table.c +48 -26
- data/src/core/lib/slice/slice_hash_table.h +26 -28
- data/src/core/lib/slice/slice_intern.c +10 -25
- data/src/core/lib/slice/slice_internal.h +10 -25
- data/src/core/lib/slice/slice_string_helpers.c +10 -25
- data/src/core/lib/slice/slice_string_helpers.h +10 -25
- data/src/core/lib/support/alloc.c +10 -25
- data/src/core/lib/support/arena.c +12 -27
- data/src/core/lib/support/arena.h +10 -25
- data/src/core/lib/support/atm.c +17 -32
- data/src/core/lib/support/atomic.h +10 -25
- data/src/core/lib/support/atomic_with_atm.h +10 -25
- data/src/core/lib/support/atomic_with_std.h +10 -25
- data/src/core/lib/support/avl.c +101 -101
- data/src/core/lib/support/backoff.c +10 -25
- data/src/core/lib/support/backoff.h +10 -25
- data/src/core/lib/support/block_annotate.h +10 -25
- data/src/core/lib/support/cmdline.c +10 -25
- data/src/core/lib/support/cpu_iphone.c +10 -25
- data/src/core/lib/support/cpu_linux.c +10 -25
- data/src/core/lib/support/cpu_posix.c +10 -25
- data/src/core/lib/support/cpu_windows.c +10 -25
- data/src/core/lib/support/env.h +16 -25
- data/src/core/lib/support/env_linux.c +30 -37
- data/src/core/lib/support/env_posix.c +15 -25
- data/src/core/lib/support/env_windows.c +15 -25
- data/src/core/lib/support/histogram.c +10 -25
- data/src/core/lib/support/host_port.c +10 -25
- data/src/core/lib/support/log.c +20 -29
- data/src/core/lib/support/log_android.c +10 -25
- data/src/core/lib/support/log_linux.c +13 -26
- data/src/core/lib/support/log_posix.c +10 -25
- data/src/core/lib/support/log_windows.c +10 -25
- data/src/core/lib/support/memory.h +10 -25
- data/src/core/lib/support/mpscq.c +11 -49
- data/src/core/lib/support/mpscq.h +11 -50
- data/src/core/lib/support/murmur_hash.c +12 -25
- data/src/core/lib/support/murmur_hash.h +10 -25
- data/src/core/lib/support/spinlock.h +10 -25
- data/src/core/lib/support/stack_lockfree.c +10 -25
- data/src/core/lib/support/stack_lockfree.h +10 -25
- data/src/core/lib/support/string.c +10 -25
- data/src/core/lib/support/string.h +10 -25
- data/src/core/lib/support/string_posix.c +10 -25
- data/src/core/lib/support/string_util_windows.c +10 -25
- data/src/core/lib/support/string_windows.c +10 -25
- data/src/core/lib/support/string_windows.h +10 -25
- data/src/core/lib/support/subprocess_posix.c +10 -25
- data/src/core/lib/support/subprocess_windows.c +10 -25
- data/src/core/lib/support/sync.c +10 -25
- data/src/core/lib/support/sync_posix.c +10 -25
- data/src/core/lib/support/sync_windows.c +10 -25
- data/src/core/lib/support/thd.c +10 -25
- data/src/core/lib/support/thd_internal.h +10 -25
- data/src/core/lib/support/thd_posix.c +10 -25
- data/src/core/lib/support/thd_windows.c +10 -25
- data/src/core/lib/support/time.c +10 -25
- data/src/core/lib/support/time_posix.c +10 -25
- data/src/core/lib/support/time_precise.c +18 -33
- data/src/core/lib/support/time_precise.h +10 -25
- data/src/core/lib/support/time_windows.c +10 -25
- data/src/core/lib/support/tls_pthread.c +10 -25
- data/src/core/lib/support/tmpfile.h +10 -25
- data/src/core/lib/support/tmpfile_msys.c +10 -25
- data/src/core/lib/support/tmpfile_posix.c +10 -25
- data/src/core/lib/support/tmpfile_windows.c +10 -25
- data/src/core/lib/support/wrap_memcpy.c +10 -25
- data/src/core/lib/surface/alarm.c +78 -35
- data/src/core/lib/surface/alarm_internal.h +40 -0
- data/src/core/lib/surface/api_trace.c +11 -26
- data/src/core/lib/surface/api_trace.h +10 -25
- data/src/core/lib/surface/byte_buffer.c +10 -25
- data/src/core/lib/surface/byte_buffer_reader.c +10 -25
- data/src/core/lib/surface/call.c +64 -84
- data/src/core/lib/surface/call.h +11 -26
- data/src/core/lib/surface/call_details.c +10 -25
- data/src/core/lib/surface/call_log_batch.c +10 -25
- data/src/core/lib/surface/call_test_only.h +10 -25
- data/src/core/lib/surface/channel.c +11 -26
- data/src/core/lib/surface/channel.h +11 -26
- data/src/core/lib/surface/channel_init.c +10 -25
- data/src/core/lib/surface/channel_init.h +10 -25
- data/src/core/lib/surface/channel_ping.c +12 -27
- data/src/core/lib/surface/channel_stack_type.c +10 -25
- data/src/core/lib/surface/channel_stack_type.h +10 -25
- data/src/core/lib/surface/completion_queue.c +442 -331
- data/src/core/lib/surface/completion_queue.h +16 -33
- data/src/core/lib/surface/completion_queue_factory.c +10 -25
- data/src/core/lib/surface/completion_queue_factory.h +10 -25
- data/src/core/lib/surface/event_string.c +10 -25
- data/src/core/lib/surface/event_string.h +10 -25
- data/src/core/lib/surface/init.c +38 -47
- data/src/core/lib/surface/init.h +10 -25
- data/src/core/lib/surface/init_secure.c +20 -27
- data/src/core/lib/surface/lame_client.cc +14 -29
- data/src/core/lib/surface/lame_client.h +10 -25
- data/src/core/lib/surface/metadata_array.c +10 -25
- data/src/core/lib/surface/server.c +128 -81
- data/src/core/lib/surface/server.h +10 -25
- data/src/core/lib/surface/validate_metadata.c +10 -25
- data/src/core/lib/surface/validate_metadata.h +10 -25
- data/src/core/lib/surface/version.c +11 -26
- data/src/core/lib/transport/bdp_estimator.c +19 -29
- data/src/core/lib/transport/bdp_estimator.h +16 -29
- data/src/core/lib/transport/byte_stream.c +127 -36
- data/src/core/lib/transport/byte_stream.h +88 -46
- data/src/core/lib/transport/connectivity_state.c +17 -31
- data/src/core/lib/transport/connectivity_state.h +10 -25
- data/src/core/lib/transport/error_utils.c +10 -25
- data/src/core/lib/transport/error_utils.h +10 -25
- data/src/core/lib/transport/http2_errors.h +10 -25
- data/src/core/lib/transport/metadata.c +87 -85
- data/src/core/lib/transport/metadata.h +15 -28
- data/src/core/lib/transport/metadata_batch.c +10 -25
- data/src/core/lib/transport/metadata_batch.h +10 -25
- data/src/core/lib/transport/pid_controller.c +10 -25
- data/src/core/lib/transport/pid_controller.h +10 -25
- data/src/core/lib/transport/service_config.c +11 -26
- data/src/core/lib/transport/service_config.h +10 -25
- data/src/core/lib/transport/static_metadata.c +12 -26
- data/src/core/lib/transport/static_metadata.h +10 -25
- data/src/core/lib/transport/status_conversion.c +10 -25
- data/src/core/lib/transport/status_conversion.h +10 -25
- data/src/core/lib/transport/timeout_encoding.c +10 -25
- data/src/core/lib/transport/timeout_encoding.h +10 -25
- data/src/core/lib/transport/transport.c +60 -53
- data/src/core/lib/transport/transport.h +36 -34
- data/src/core/lib/transport/transport_impl.h +10 -25
- data/src/core/lib/transport/transport_op_string.c +10 -28
- data/src/core/plugin_registry/grpc_plugin_registry.c +22 -25
- data/src/core/tsi/fake_transport_security.c +199 -94
- data/src/core/tsi/fake_transport_security.h +11 -26
- data/src/core/tsi/gts_transport_security.c +40 -0
- data/src/core/tsi/gts_transport_security.h +37 -0
- data/src/core/tsi/ssl_transport_security.c +13 -32
- data/src/core/tsi/ssl_transport_security.h +10 -25
- data/src/core/tsi/ssl_types.h +10 -25
- data/src/core/tsi/transport_security.c +48 -78
- data/src/core/tsi/transport_security.h +18 -27
- data/src/core/tsi/transport_security_adapter.c +17 -29
- data/src/core/tsi/transport_security_adapter.h +10 -25
- data/src/core/tsi/transport_security_grpc.c +64 -0
- data/src/core/tsi/transport_security_grpc.h +80 -0
- data/src/core/tsi/transport_security_interface.h +21 -27
- data/src/ruby/bin/apis/google/protobuf/empty.rb +10 -25
- data/src/ruby/bin/apis/pubsub_demo.rb +10 -25
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +10 -25
- data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +10 -25
- data/src/ruby/bin/math_client.rb +10 -25
- data/src/ruby/bin/math_server.rb +10 -25
- data/src/ruby/bin/math_services_pb.rb +10 -25
- data/src/ruby/bin/noproto_client.rb +10 -25
- data/src/ruby/bin/noproto_server.rb +10 -25
- data/src/ruby/ext/grpc/extconf.rb +10 -25
- data/src/ruby/ext/grpc/rb_byte_buffer.c +10 -25
- data/src/ruby/ext/grpc/rb_byte_buffer.h +10 -25
- data/src/ruby/ext/grpc/rb_call.c +44 -25
- data/src/ruby/ext/grpc/rb_call.h +10 -25
- data/src/ruby/ext/grpc/rb_call_credentials.c +10 -25
- data/src/ruby/ext/grpc/rb_call_credentials.h +10 -25
- data/src/ruby/ext/grpc/rb_channel.c +10 -25
- data/src/ruby/ext/grpc/rb_channel.h +10 -25
- data/src/ruby/ext/grpc/rb_channel_args.c +10 -25
- data/src/ruby/ext/grpc/rb_channel_args.h +10 -25
- data/src/ruby/ext/grpc/rb_channel_credentials.c +10 -25
- data/src/ruby/ext/grpc/rb_channel_credentials.h +10 -25
- data/src/ruby/ext/grpc/rb_completion_queue.c +10 -25
- data/src/ruby/ext/grpc/rb_completion_queue.h +10 -25
- data/src/ruby/ext/grpc/rb_compression_options.c +10 -25
- data/src/ruby/ext/grpc/rb_compression_options.h +10 -25
- data/src/ruby/ext/grpc/rb_event_thread.c +10 -25
- data/src/ruby/ext/grpc/rb_event_thread.h +10 -25
- data/src/ruby/ext/grpc/rb_grpc.c +10 -25
- data/src/ruby/ext/grpc/rb_grpc.h +10 -25
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -25
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +16 -31
- data/src/ruby/ext/grpc/rb_loader.c +10 -25
- data/src/ruby/ext/grpc/rb_loader.h +10 -25
- data/src/ruby/ext/grpc/rb_server.c +10 -25
- data/src/ruby/ext/grpc/rb_server.h +10 -25
- data/src/ruby/ext/grpc/rb_server_credentials.c +10 -25
- data/src/ruby/ext/grpc/rb_server_credentials.h +10 -25
- data/src/ruby/lib/grpc.rb +10 -25
- data/src/ruby/lib/grpc/core/time_consts.rb +10 -25
- data/src/ruby/lib/grpc/errors.rb +16 -30
- data/src/ruby/lib/grpc/generic/active_call.rb +25 -27
- data/src/ruby/lib/grpc/generic/bidi_call.rb +17 -27
- data/src/ruby/lib/grpc/generic/client_stub.rb +10 -25
- data/src/ruby/lib/grpc/generic/rpc_desc.rb +10 -25
- data/src/ruby/lib/grpc/generic/rpc_server.rb +10 -25
- data/src/ruby/lib/grpc/generic/service.rb +10 -25
- data/src/ruby/lib/grpc/grpc.rb +10 -25
- data/src/ruby/lib/grpc/logconfig.rb +10 -25
- data/src/ruby/lib/grpc/notifier.rb +10 -25
- data/src/ruby/lib/grpc/version.rb +11 -26
- data/src/ruby/pb/generate_proto_ruby.sh +10 -25
- data/src/ruby/pb/grpc/health/checker.rb +10 -25
- data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +10 -25
- data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +10 -25
- data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +10 -25
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +10 -25
- data/src/ruby/pb/test/client.rb +10 -25
- data/src/ruby/pb/test/server.rb +10 -25
- data/src/ruby/spec/call_credentials_spec.rb +10 -25
- data/src/ruby/spec/call_spec.rb +43 -25
- data/src/ruby/spec/channel_connection_spec.rb +10 -25
- data/src/ruby/spec/channel_credentials_spec.rb +11 -26
- data/src/ruby/spec/channel_spec.rb +10 -25
- data/src/ruby/spec/client_auth_spec.rb +10 -25
- data/src/ruby/spec/client_server_spec.rb +66 -25
- data/src/ruby/spec/compression_options_spec.rb +10 -25
- data/src/ruby/spec/error_sanity_spec.rb +10 -25
- data/src/ruby/spec/generic/active_call_spec.rb +10 -25
- data/src/ruby/spec/generic/client_stub_spec.rb +146 -35
- data/src/ruby/spec/generic/rpc_desc_spec.rb +10 -25
- data/src/ruby/spec/generic/rpc_server_pool_spec.rb +10 -25
- data/src/ruby/spec/generic/rpc_server_spec.rb +124 -34
- data/src/ruby/spec/generic/service_spec.rb +10 -25
- data/src/ruby/spec/pb/duplicate/codegen_spec.rb +10 -25
- data/src/ruby/spec/pb/health/checker_spec.rb +10 -25
- data/src/ruby/spec/server_credentials_spec.rb +10 -25
- data/src/ruby/spec/server_spec.rb +10 -25
- data/src/ruby/spec/spec_helper.rb +10 -25
- data/src/ruby/spec/time_consts_spec.rb +10 -25
- data/third_party/boringssl/crypto/aes/key_wrap.c +138 -0
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +6 -3
- data/third_party/boringssl/crypto/asn1/a_enum.c +4 -1
- data/third_party/boringssl/crypto/asn1/a_gentm.c +20 -15
- data/third_party/boringssl/crypto/asn1/a_int.c +7 -4
- data/third_party/boringssl/crypto/asn1/a_object.c +5 -2
- data/third_party/boringssl/crypto/asn1/a_time.c +0 -1
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -2
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -2
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +35 -0
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +3 -1
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +6 -3
- data/third_party/boringssl/crypto/asn1/tasn_new.c +12 -7
- data/third_party/boringssl/crypto/asn1/tasn_utl.c +22 -8
- data/third_party/boringssl/crypto/{time_support.c → asn1/time_support.c} +1 -1
- data/third_party/boringssl/crypto/asn1/x_long.c +5 -2
- data/third_party/boringssl/crypto/base64/base64.c +7 -5
- data/third_party/boringssl/crypto/bio/bio.c +24 -10
- data/third_party/boringssl/crypto/bio/bio_mem.c +12 -10
- data/third_party/boringssl/crypto/bio/connect.c +7 -18
- data/third_party/boringssl/crypto/bio/fd.c +3 -6
- data/third_party/boringssl/crypto/bio/file.c +6 -6
- data/third_party/boringssl/crypto/bio/hexdump.c +4 -2
- data/third_party/boringssl/crypto/bio/pair.c +30 -344
- data/third_party/boringssl/crypto/bio/socket.c +6 -7
- data/third_party/boringssl/crypto/bio/socket_helper.c +4 -3
- data/third_party/boringssl/crypto/bn/add.c +1 -1
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +11 -10
- data/third_party/boringssl/crypto/bn/bn.c +6 -20
- data/third_party/boringssl/crypto/bn/cmp.c +14 -0
- data/third_party/boringssl/crypto/bn/convert.c +73 -2
- data/third_party/boringssl/crypto/bn/ctx.c +3 -1
- data/third_party/boringssl/crypto/bn/div.c +108 -51
- data/third_party/boringssl/crypto/bn/exponentiation.c +15 -33
- data/third_party/boringssl/crypto/bn/gcd.c +29 -22
- data/third_party/boringssl/crypto/bn/generic.c +71 -67
- data/third_party/boringssl/crypto/bn/internal.h +19 -6
- data/third_party/boringssl/crypto/bn/kronecker.c +1 -0
- data/third_party/boringssl/crypto/bn/montgomery.c +9 -10
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +47 -0
- data/third_party/boringssl/crypto/bn/mul.c +11 -9
- data/third_party/boringssl/crypto/bn/random.c +6 -3
- data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -65
- data/third_party/boringssl/crypto/bn/rsaz_exp.h +0 -3
- data/third_party/boringssl/crypto/bn/shift.c +9 -1
- data/third_party/boringssl/crypto/bn/sqrt.c +3 -1
- data/third_party/boringssl/crypto/buf/buf.c +6 -4
- data/third_party/boringssl/crypto/bytestring/asn1_compat.c +2 -1
- data/third_party/boringssl/crypto/bytestring/ber.c +2 -1
- data/third_party/boringssl/crypto/bytestring/cbb.c +9 -7
- data/third_party/boringssl/crypto/bytestring/cbs.c +54 -2
- data/third_party/boringssl/crypto/chacha/chacha.c +1 -1
- data/third_party/boringssl/crypto/cipher/aead.c +3 -3
- data/third_party/boringssl/crypto/cipher/cipher.c +18 -13
- data/third_party/boringssl/crypto/cipher/e_aes.c +335 -281
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +113 -137
- data/third_party/boringssl/crypto/cipher/e_null.c +2 -1
- data/third_party/boringssl/crypto/cipher/e_rc2.c +54 -49
- data/third_party/boringssl/crypto/cipher/e_ssl3.c +4 -3
- data/third_party/boringssl/crypto/cipher/e_tls.c +5 -5
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +41 -112
- data/third_party/boringssl/crypto/cmac/cmac.c +6 -4
- data/third_party/boringssl/crypto/conf/conf.c +6 -3
- data/third_party/boringssl/crypto/cpu-arm-linux.c +2 -2
- data/third_party/boringssl/crypto/curve25519/curve25519.c +28 -34
- data/third_party/boringssl/crypto/curve25519/spake25519.c +7 -6
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +2 -1
- data/third_party/boringssl/crypto/des/des.c +1 -1
- data/third_party/boringssl/crypto/des/internal.h +58 -46
- data/third_party/boringssl/crypto/dh/dh.c +4 -8
- data/third_party/boringssl/crypto/digest/digest.c +5 -2
- data/third_party/boringssl/crypto/digest/digests.c +70 -33
- data/third_party/boringssl/crypto/digest/md32_common.h +39 -27
- data/third_party/boringssl/crypto/dsa/dsa.c +11 -19
- data/third_party/boringssl/crypto/ec/ec.c +1 -1
- data/third_party/boringssl/crypto/ec/ec_asn1.c +3 -2
- data/third_party/boringssl/crypto/ec/ec_key.c +1 -1
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +6 -11
- data/third_party/boringssl/crypto/ec/oct.c +2 -14
- data/third_party/boringssl/crypto/ec/p224-64.c +78 -122
- data/third_party/boringssl/crypto/ec/p256-64.c +93 -133
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +48 -61
- data/third_party/boringssl/crypto/ec/p256-x86_64.h +113 -0
- data/third_party/boringssl/crypto/ec/simple.c +2 -1
- data/third_party/boringssl/crypto/ec/wnaf.c +52 -43
- data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -2
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +17 -16
- data/third_party/boringssl/crypto/engine/engine.c +3 -1
- data/third_party/boringssl/crypto/err/err.c +5 -5
- data/third_party/boringssl/crypto/evp/evp.c +1 -1
- data/third_party/boringssl/crypto/evp/evp_asn1.c +1 -1
- data/third_party/boringssl/crypto/evp/evp_ctx.c +23 -29
- data/third_party/boringssl/crypto/evp/p_ec.c +2 -1
- data/third_party/boringssl/crypto/evp/p_rsa.c +9 -3
- data/third_party/boringssl/crypto/evp/pbkdf.c +3 -1
- data/third_party/boringssl/crypto/hkdf/hkdf.c +3 -1
- data/third_party/boringssl/crypto/hmac/hmac.c +4 -2
- data/third_party/boringssl/crypto/internal.h +81 -0
- data/third_party/boringssl/crypto/lhash/lhash.c +7 -13
- data/third_party/boringssl/crypto/md4/md4.c +20 -18
- data/third_party/boringssl/crypto/md5/md5.c +31 -21
- data/third_party/boringssl/crypto/mem.c +4 -10
- data/third_party/boringssl/crypto/modes/cbc.c +2 -6
- data/third_party/boringssl/crypto/modes/cfb.c +2 -2
- data/third_party/boringssl/crypto/modes/ctr.c +1 -1
- data/third_party/boringssl/crypto/modes/gcm.c +117 -334
- data/third_party/boringssl/crypto/modes/internal.h +107 -84
- data/third_party/boringssl/crypto/modes/ofb.c +3 -3
- data/third_party/boringssl/crypto/modes/polyval.c +94 -0
- data/third_party/boringssl/crypto/obj/obj.c +13 -8
- data/third_party/boringssl/crypto/obj/obj_dat.h +6109 -5187
- data/third_party/boringssl/crypto/obj/obj_xref.c +55 -57
- data/third_party/boringssl/crypto/pem/pem_lib.c +6 -3
- data/third_party/boringssl/crypto/pkcs8/internal.h +27 -8
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +137 -352
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +371 -364
- data/third_party/boringssl/crypto/poly1305/poly1305.c +12 -18
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +2 -2
- data/third_party/boringssl/crypto/{newhope/reduce.c → pool/internal.h} +24 -21
- data/third_party/boringssl/crypto/pool/pool.c +200 -0
- data/third_party/boringssl/crypto/rand/deterministic.c +6 -5
- data/third_party/boringssl/crypto/rand/fuchsia.c +43 -0
- data/third_party/boringssl/crypto/rand/rand.c +7 -7
- data/third_party/boringssl/crypto/rand/urandom.c +136 -22
- data/third_party/boringssl/crypto/rand/windows.c +2 -2
- data/third_party/boringssl/crypto/rsa/blinding.c +2 -1
- data/third_party/boringssl/crypto/rsa/padding.c +11 -11
- data/third_party/boringssl/crypto/rsa/rsa.c +4 -4
- data/third_party/boringssl/crypto/rsa/rsa_asn1.c +7 -1
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +41 -80
- data/third_party/boringssl/crypto/sha/sha1-altivec.c +346 -0
- data/third_party/boringssl/crypto/sha/sha1.c +60 -42
- data/third_party/boringssl/crypto/sha/sha256.c +4 -2
- data/third_party/boringssl/crypto/sha/sha512.c +9 -7
- data/third_party/boringssl/crypto/stack/stack.c +10 -7
- data/third_party/boringssl/crypto/thread_pthread.c +2 -2
- data/third_party/boringssl/crypto/thread_win.c +2 -2
- data/third_party/boringssl/crypto/x509/a_verify.c +1 -1
- data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -1
- data/third_party/boringssl/crypto/x509/by_dir.c +1 -1
- data/third_party/boringssl/crypto/x509/t_x509.c +78 -38
- data/third_party/boringssl/crypto/x509/x509_cmp.c +8 -5
- data/third_party/boringssl/crypto/x509/x509_lu.c +6 -1
- data/third_party/boringssl/crypto/x509/x509_obj.c +4 -1
- data/third_party/boringssl/crypto/x509/x509_vfy.c +42 -8
- data/third_party/boringssl/crypto/x509/x509_vpm.c +8 -6
- data/third_party/boringssl/crypto/x509/x509name.c +4 -1
- data/third_party/boringssl/crypto/x509/x_crl.c +4 -2
- data/third_party/boringssl/crypto/x509/x_name.c +23 -13
- data/third_party/boringssl/crypto/x509/x_pkey.c +4 -1
- data/third_party/boringssl/crypto/x509/x_x509.c +42 -3
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +1 -1
- data/third_party/boringssl/crypto/x509v3/v3_ia5.c +4 -1
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +4 -1
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +6 -3
- data/third_party/boringssl/crypto/x509v3/v3_purp.c +13 -21
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +19 -33
- data/third_party/boringssl/include/openssl/aead.h +9 -20
- data/third_party/boringssl/include/openssl/aes.h +21 -9
- data/third_party/boringssl/include/openssl/asn1.h +9 -1
- data/third_party/boringssl/include/openssl/base.h +33 -6
- data/third_party/boringssl/include/openssl/bio.h +10 -103
- data/third_party/boringssl/include/openssl/bn.h +58 -42
- data/third_party/boringssl/include/openssl/bytestring.h +17 -0
- data/third_party/boringssl/include/openssl/cipher.h +4 -3
- data/third_party/boringssl/include/openssl/conf.h +4 -1
- data/third_party/boringssl/include/openssl/curve25519.h +13 -0
- data/third_party/boringssl/include/openssl/digest.h +5 -3
- data/third_party/boringssl/include/openssl/dsa.h +5 -5
- data/third_party/boringssl/include/openssl/ec.h +2 -2
- data/third_party/boringssl/include/openssl/ecdh.h +3 -4
- data/third_party/boringssl/include/openssl/ecdsa.h +10 -10
- data/third_party/boringssl/include/openssl/err.h +5 -5
- data/third_party/boringssl/include/openssl/evp.h +11 -7
- data/third_party/boringssl/include/openssl/lhash.h +2 -3
- data/third_party/boringssl/include/openssl/lhash_macros.h +56 -14
- data/third_party/boringssl/include/openssl/nid.h +2949 -2916
- data/third_party/boringssl/include/openssl/obj.h +1 -1
- data/third_party/boringssl/include/openssl/pkcs8.h +21 -42
- data/third_party/boringssl/include/openssl/pool.h +87 -0
- data/third_party/boringssl/include/openssl/rand.h +1 -1
- data/third_party/boringssl/include/openssl/rsa.h +4 -2
- data/third_party/boringssl/include/openssl/sha.h +0 -4
- data/third_party/boringssl/include/openssl/ssl.h +327 -662
- data/third_party/boringssl/include/openssl/ssl3.h +1 -21
- data/third_party/boringssl/include/openssl/stack.h +1 -0
- data/third_party/boringssl/include/openssl/stack_macros.h +85 -0
- data/third_party/boringssl/include/openssl/tls1.h +23 -52
- data/third_party/boringssl/include/openssl/type_check.h +4 -0
- data/third_party/boringssl/include/openssl/x509.h +10 -59
- data/third_party/boringssl/include/openssl/x509_vfy.h +7 -1
- data/third_party/boringssl/include/openssl/x509v3.h +4 -4
- data/third_party/boringssl/ssl/bio_ssl.c +175 -0
- data/third_party/boringssl/ssl/custom_extensions.c +24 -21
- data/third_party/boringssl/ssl/d1_both.c +259 -289
- data/third_party/boringssl/ssl/d1_lib.c +8 -20
- data/third_party/boringssl/ssl/d1_pkt.c +6 -15
- data/third_party/boringssl/ssl/dtls_method.c +22 -8
- data/third_party/boringssl/ssl/dtls_record.c +27 -2
- data/third_party/boringssl/ssl/handshake_client.c +460 -579
- data/third_party/boringssl/ssl/handshake_server.c +662 -644
- data/third_party/boringssl/ssl/internal.h +1009 -375
- data/third_party/boringssl/ssl/s3_both.c +312 -162
- data/third_party/boringssl/ssl/s3_lib.c +12 -128
- data/third_party/boringssl/ssl/s3_pkt.c +22 -30
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +28 -22
- data/third_party/boringssl/ssl/ssl_asn1.c +210 -114
- data/third_party/boringssl/ssl/ssl_buffer.c +2 -1
- data/third_party/boringssl/ssl/ssl_cert.c +417 -219
- data/third_party/boringssl/ssl/ssl_cipher.c +191 -393
- data/third_party/boringssl/ssl/ssl_ecdh.c +19 -164
- data/third_party/boringssl/ssl/ssl_file.c +0 -11
- data/third_party/boringssl/ssl/ssl_lib.c +325 -652
- data/third_party/boringssl/ssl/{ssl_rsa.c → ssl_privkey.c} +21 -131
- data/third_party/boringssl/ssl/ssl_privkey_cc.cc +76 -0
- data/third_party/boringssl/ssl/ssl_session.c +206 -95
- data/third_party/boringssl/ssl/ssl_stat.c +18 -84
- data/third_party/boringssl/ssl/{s3_enc.c → ssl_transcript.c} +150 -157
- data/third_party/boringssl/ssl/ssl_x509.c +815 -0
- data/third_party/boringssl/ssl/t1_enc.c +188 -174
- data/third_party/boringssl/ssl/t1_lib.c +1064 -764
- data/third_party/boringssl/ssl/tls13_both.c +290 -96
- data/third_party/boringssl/ssl/tls13_client.c +344 -314
- data/third_party/boringssl/ssl/tls13_enc.c +239 -200
- data/third_party/boringssl/ssl/tls13_server.c +374 -366
- data/third_party/boringssl/ssl/tls_method.c +40 -5
- data/third_party/boringssl/ssl/tls_record.c +166 -71
- metadata +39 -25
- data/src/core/lib/iomgr/workqueue.h +0 -87
- data/src/core/lib/iomgr/workqueue_uv.c +0 -65
- data/src/core/lib/iomgr/workqueue_uv.h +0 -37
- data/src/core/lib/iomgr/workqueue_windows.c +0 -63
- data/src/core/lib/iomgr/workqueue_windows.h +0 -37
- data/third_party/boringssl/crypto/bio/buffer.c +0 -496
- data/third_party/boringssl/crypto/newhope/error_correction.c +0 -131
- data/third_party/boringssl/crypto/newhope/internal.h +0 -71
- data/third_party/boringssl/crypto/newhope/newhope.c +0 -174
- data/third_party/boringssl/crypto/newhope/ntt.c +0 -148
- data/third_party/boringssl/crypto/newhope/poly.c +0 -183
- data/third_party/boringssl/crypto/newhope/precomp.c +0 -306
- data/third_party/boringssl/crypto/obj/obj_xref.h +0 -96
- data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +0 -151
- data/third_party/boringssl/include/openssl/newhope.h +0 -158
- data/third_party/boringssl/include/openssl/time_support.h +0 -91
@@ -20,6 +20,7 @@
|
|
20
20
|
#include <string.h>
|
21
21
|
|
22
22
|
#include "internal.h"
|
23
|
+
#include "../internal.h"
|
23
24
|
|
24
25
|
|
25
26
|
void CBS_init(CBS *cbs, const uint8_t *data, size_t len) {
|
@@ -76,7 +77,7 @@ int CBS_strdup(const CBS *cbs, char **out_ptr) {
|
|
76
77
|
}
|
77
78
|
|
78
79
|
int CBS_contains_zero_byte(const CBS *cbs) {
|
79
|
-
return
|
80
|
+
return OPENSSL_memchr(cbs->data, 0, cbs->len) != NULL;
|
80
81
|
}
|
81
82
|
|
82
83
|
int CBS_mem_equal(const CBS *cbs, const uint8_t *data, size_t len) {
|
@@ -150,7 +151,7 @@ int CBS_copy_bytes(CBS *cbs, uint8_t *out, size_t len) {
|
|
150
151
|
if (!cbs_get(cbs, &v, len)) {
|
151
152
|
return 0;
|
152
153
|
}
|
153
|
-
|
154
|
+
OPENSSL_memcpy(out, v, len);
|
154
155
|
return 1;
|
155
156
|
}
|
156
157
|
|
@@ -262,6 +263,20 @@ static int cbs_get_any_asn1_element(CBS *cbs, CBS *out, unsigned *out_tag,
|
|
262
263
|
return CBS_get_bytes(cbs, out, len);
|
263
264
|
}
|
264
265
|
|
266
|
+
int CBS_get_any_asn1(CBS *cbs, CBS *out, unsigned *out_tag) {
|
267
|
+
size_t header_len;
|
268
|
+
if (!CBS_get_any_asn1_element(cbs, out, out_tag, &header_len)) {
|
269
|
+
return 0;
|
270
|
+
}
|
271
|
+
|
272
|
+
if (!CBS_skip(out, header_len)) {
|
273
|
+
assert(0);
|
274
|
+
return 0;
|
275
|
+
}
|
276
|
+
|
277
|
+
return 1;
|
278
|
+
}
|
279
|
+
|
265
280
|
int CBS_get_any_asn1_element(CBS *cbs, CBS *out, unsigned *out_tag,
|
266
281
|
size_t *out_header_len) {
|
267
282
|
return cbs_get_any_asn1_element(cbs, out, out_tag, out_header_len,
|
@@ -437,3 +452,40 @@ int CBS_get_optional_asn1_bool(CBS *cbs, int *out, unsigned tag,
|
|
437
452
|
}
|
438
453
|
return 1;
|
439
454
|
}
|
455
|
+
|
456
|
+
int CBS_is_valid_asn1_bitstring(const CBS *cbs) {
|
457
|
+
CBS in = *cbs;
|
458
|
+
uint8_t num_unused_bits;
|
459
|
+
if (!CBS_get_u8(&in, &num_unused_bits) ||
|
460
|
+
num_unused_bits > 7) {
|
461
|
+
return 0;
|
462
|
+
}
|
463
|
+
|
464
|
+
if (num_unused_bits == 0) {
|
465
|
+
return 1;
|
466
|
+
}
|
467
|
+
|
468
|
+
/* All num_unused_bits bits must exist and be zeros. */
|
469
|
+
uint8_t last;
|
470
|
+
if (!CBS_get_last_u8(&in, &last) ||
|
471
|
+
(last & ((1 << num_unused_bits) - 1)) != 0) {
|
472
|
+
return 0;
|
473
|
+
}
|
474
|
+
|
475
|
+
return 1;
|
476
|
+
}
|
477
|
+
|
478
|
+
int CBS_asn1_bitstring_has_bit(const CBS *cbs, unsigned bit) {
|
479
|
+
if (!CBS_is_valid_asn1_bitstring(cbs)) {
|
480
|
+
return 0;
|
481
|
+
}
|
482
|
+
|
483
|
+
const unsigned byte_num = (bit >> 3) + 1;
|
484
|
+
const unsigned bit_num = 7 - (bit & 7);
|
485
|
+
|
486
|
+
/* Unused bits are zero, and this function does not distinguish between
|
487
|
+
* missing and unset bits. Thus it is sufficient to do a byte-level length
|
488
|
+
* check. */
|
489
|
+
return byte_num < CBS_len(cbs) &&
|
490
|
+
(CBS_data(cbs)[byte_num] & (1 << bit_num)) != 0;
|
491
|
+
}
|
@@ -96,7 +96,7 @@ static void chacha_core(uint8_t output[64], const uint32_t input[16]) {
|
|
96
96
|
uint32_t x[16];
|
97
97
|
int i;
|
98
98
|
|
99
|
-
|
99
|
+
OPENSSL_memcpy(x, input, sizeof(uint32_t) * 16);
|
100
100
|
for (i = 20; i > 0; i -= 2) {
|
101
101
|
QUARTERROUND(0, 4, 8, 12)
|
102
102
|
QUARTERROUND(1, 5, 9, 13)
|
@@ -32,7 +32,7 @@ size_t EVP_AEAD_max_overhead(const EVP_AEAD *aead) { return aead->overhead; }
|
|
32
32
|
size_t EVP_AEAD_max_tag_len(const EVP_AEAD *aead) { return aead->max_tag_len; }
|
33
33
|
|
34
34
|
void EVP_AEAD_CTX_zero(EVP_AEAD_CTX *ctx) {
|
35
|
-
|
35
|
+
OPENSSL_memset(ctx, 0, sizeof(EVP_AEAD_CTX));
|
36
36
|
}
|
37
37
|
|
38
38
|
int EVP_AEAD_CTX_init(EVP_AEAD_CTX *ctx, const EVP_AEAD *aead,
|
@@ -116,7 +116,7 @@ int EVP_AEAD_CTX_seal(const EVP_AEAD_CTX *ctx, uint8_t *out, size_t *out_len,
|
|
116
116
|
error:
|
117
117
|
/* In the event of an error, clear the output buffer so that a caller
|
118
118
|
* that doesn't check the return value doesn't send raw data. */
|
119
|
-
|
119
|
+
OPENSSL_memset(out, 0, max_out_len);
|
120
120
|
*out_len = 0;
|
121
121
|
return 0;
|
122
122
|
}
|
@@ -139,7 +139,7 @@ error:
|
|
139
139
|
/* In the event of an error, clear the output buffer so that a caller
|
140
140
|
* that doesn't check the return value doesn't try and process bad
|
141
141
|
* data. */
|
142
|
-
|
142
|
+
OPENSSL_memset(out, 0, max_out_len);
|
143
143
|
*out_len = 0;
|
144
144
|
return 0;
|
145
145
|
}
|
@@ -64,6 +64,7 @@
|
|
64
64
|
#include <openssl/nid.h>
|
65
65
|
|
66
66
|
#include "internal.h"
|
67
|
+
#include "../internal.h"
|
67
68
|
|
68
69
|
|
69
70
|
const EVP_CIPHER *EVP_get_cipherbynid(int nid) {
|
@@ -88,7 +89,7 @@ const EVP_CIPHER *EVP_get_cipherbynid(int nid) {
|
|
88
89
|
}
|
89
90
|
|
90
91
|
void EVP_CIPHER_CTX_init(EVP_CIPHER_CTX *ctx) {
|
91
|
-
|
92
|
+
OPENSSL_memset(ctx, 0, sizeof(EVP_CIPHER_CTX));
|
92
93
|
}
|
93
94
|
|
94
95
|
EVP_CIPHER_CTX *EVP_CIPHER_CTX_new(void) {
|
@@ -108,7 +109,7 @@ int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c) {
|
|
108
109
|
}
|
109
110
|
OPENSSL_free(c->cipher_data);
|
110
111
|
|
111
|
-
|
112
|
+
OPENSSL_memset(c, 0, sizeof(EVP_CIPHER_CTX));
|
112
113
|
return 1;
|
113
114
|
}
|
114
115
|
|
@@ -126,19 +127,23 @@ int EVP_CIPHER_CTX_copy(EVP_CIPHER_CTX *out, const EVP_CIPHER_CTX *in) {
|
|
126
127
|
}
|
127
128
|
|
128
129
|
EVP_CIPHER_CTX_cleanup(out);
|
129
|
-
|
130
|
+
OPENSSL_memcpy(out, in, sizeof(EVP_CIPHER_CTX));
|
130
131
|
|
131
132
|
if (in->cipher_data && in->cipher->ctx_size) {
|
132
133
|
out->cipher_data = OPENSSL_malloc(in->cipher->ctx_size);
|
133
134
|
if (!out->cipher_data) {
|
135
|
+
out->cipher = NULL;
|
134
136
|
OPENSSL_PUT_ERROR(CIPHER, ERR_R_MALLOC_FAILURE);
|
135
137
|
return 0;
|
136
138
|
}
|
137
|
-
|
139
|
+
OPENSSL_memcpy(out->cipher_data, in->cipher_data, in->cipher->ctx_size);
|
138
140
|
}
|
139
141
|
|
140
142
|
if (in->cipher->flags & EVP_CIPH_CUSTOM_COPY) {
|
141
|
-
|
143
|
+
if (!in->cipher->ctrl((EVP_CIPHER_CTX *)in, EVP_CTRL_COPY, 0, out)) {
|
144
|
+
out->cipher = NULL;
|
145
|
+
return 0;
|
146
|
+
}
|
142
147
|
}
|
143
148
|
|
144
149
|
return 1;
|
@@ -210,9 +215,9 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
|
|
210
215
|
case EVP_CIPH_CBC_MODE:
|
211
216
|
assert(EVP_CIPHER_CTX_iv_length(ctx) <= sizeof(ctx->iv));
|
212
217
|
if (iv) {
|
213
|
-
|
218
|
+
OPENSSL_memcpy(ctx->oiv, iv, EVP_CIPHER_CTX_iv_length(ctx));
|
214
219
|
}
|
215
|
-
|
220
|
+
OPENSSL_memcpy(ctx->iv, ctx->oiv, EVP_CIPHER_CTX_iv_length(ctx));
|
216
221
|
break;
|
217
222
|
|
218
223
|
case EVP_CIPH_CTR_MODE:
|
@@ -220,7 +225,7 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
|
|
220
225
|
ctx->num = 0;
|
221
226
|
/* Don't reuse IV for CTR mode */
|
222
227
|
if (iv) {
|
223
|
-
|
228
|
+
OPENSSL_memcpy(ctx->iv, iv, EVP_CIPHER_CTX_iv_length(ctx));
|
224
229
|
}
|
225
230
|
break;
|
226
231
|
|
@@ -285,13 +290,13 @@ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
|
|
285
290
|
assert(bl <= (int)sizeof(ctx->buf));
|
286
291
|
if (i != 0) {
|
287
292
|
if (bl - i > in_len) {
|
288
|
-
|
293
|
+
OPENSSL_memcpy(&ctx->buf[i], in, in_len);
|
289
294
|
ctx->buf_len += in_len;
|
290
295
|
*out_len = 0;
|
291
296
|
return 1;
|
292
297
|
} else {
|
293
298
|
j = bl - i;
|
294
|
-
|
299
|
+
OPENSSL_memcpy(&ctx->buf[i], in, j);
|
295
300
|
if (!ctx->cipher->cipher(ctx, out, ctx->buf, bl)) {
|
296
301
|
return 0;
|
297
302
|
}
|
@@ -314,7 +319,7 @@ int EVP_EncryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
|
|
314
319
|
}
|
315
320
|
|
316
321
|
if (i != 0) {
|
317
|
-
|
322
|
+
OPENSSL_memcpy(ctx->buf, &in[in_len], i);
|
318
323
|
}
|
319
324
|
ctx->buf_len = i;
|
320
325
|
return 1;
|
@@ -393,7 +398,7 @@ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
|
|
393
398
|
assert(b <= sizeof(ctx->final));
|
394
399
|
|
395
400
|
if (ctx->final_used) {
|
396
|
-
|
401
|
+
OPENSSL_memcpy(out, ctx->final, b);
|
397
402
|
out += b;
|
398
403
|
fix_len = 1;
|
399
404
|
} else {
|
@@ -409,7 +414,7 @@ int EVP_DecryptUpdate(EVP_CIPHER_CTX *ctx, uint8_t *out, int *out_len,
|
|
409
414
|
if (b > 1 && !ctx->buf_len) {
|
410
415
|
*out_len -= b;
|
411
416
|
ctx->final_used = 1;
|
412
|
-
|
417
|
+
OPENSSL_memcpy(ctx->final, &out[*out_len], b);
|
413
418
|
} else {
|
414
419
|
ctx->final_used = 0;
|
415
420
|
}
|
@@ -479,7 +479,7 @@ static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
|
|
479
479
|
if (gctx->key_set) {
|
480
480
|
CRYPTO_gcm128_setiv(&gctx->gcm, &gctx->ks.ks, iv, gctx->ivlen);
|
481
481
|
} else {
|
482
|
-
|
482
|
+
OPENSSL_memcpy(gctx->iv, iv, gctx->ivlen);
|
483
483
|
}
|
484
484
|
gctx->iv_set = 1;
|
485
485
|
gctx->iv_gen = 0;
|
@@ -545,7 +545,7 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) {
|
|
545
545
|
if (arg <= 0 || arg > 16 || c->encrypt) {
|
546
546
|
return 0;
|
547
547
|
}
|
548
|
-
|
548
|
+
OPENSSL_memcpy(c->buf, ptr, arg);
|
549
549
|
gctx->taglen = arg;
|
550
550
|
return 1;
|
551
551
|
|
@@ -553,13 +553,13 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) {
|
|
553
553
|
if (arg <= 0 || arg > 16 || !c->encrypt || gctx->taglen < 0) {
|
554
554
|
return 0;
|
555
555
|
}
|
556
|
-
|
556
|
+
OPENSSL_memcpy(ptr, c->buf, arg);
|
557
557
|
return 1;
|
558
558
|
|
559
559
|
case EVP_CTRL_GCM_SET_IV_FIXED:
|
560
560
|
/* Special case: -1 length restores whole IV */
|
561
561
|
if (arg == -1) {
|
562
|
-
|
562
|
+
OPENSSL_memcpy(gctx->iv, ptr, gctx->ivlen);
|
563
563
|
gctx->iv_gen = 1;
|
564
564
|
return 1;
|
565
565
|
}
|
@@ -569,7 +569,7 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) {
|
|
569
569
|
return 0;
|
570
570
|
}
|
571
571
|
if (arg) {
|
572
|
-
|
572
|
+
OPENSSL_memcpy(gctx->iv, ptr, arg);
|
573
573
|
}
|
574
574
|
if (c->encrypt && !RAND_bytes(gctx->iv + arg, gctx->ivlen - arg)) {
|
575
575
|
return 0;
|
@@ -585,7 +585,7 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) {
|
|
585
585
|
if (arg <= 0 || arg > gctx->ivlen) {
|
586
586
|
arg = gctx->ivlen;
|
587
587
|
}
|
588
|
-
|
588
|
+
OPENSSL_memcpy(ptr, gctx->iv + gctx->ivlen - arg, arg);
|
589
589
|
/* Invocation field will be at least 8 bytes in size and
|
590
590
|
* so no need to check wrap around or increment more than
|
591
591
|
* last 8 bytes. */
|
@@ -597,7 +597,7 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) {
|
|
597
597
|
if (gctx->iv_gen == 0 || gctx->key_set == 0 || c->encrypt) {
|
598
598
|
return 0;
|
599
599
|
}
|
600
|
-
|
600
|
+
OPENSSL_memcpy(gctx->iv + gctx->ivlen - arg, ptr, arg);
|
601
601
|
CRYPTO_gcm128_setiv(&gctx->gcm, &gctx->ks.ks, gctx->iv, gctx->ivlen);
|
602
602
|
gctx->iv_set = 1;
|
603
603
|
return 1;
|
@@ -612,7 +612,7 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) {
|
|
612
612
|
if (!gctx_out->iv) {
|
613
613
|
return 0;
|
614
614
|
}
|
615
|
-
|
615
|
+
OPENSSL_memcpy(gctx_out->iv, gctx->iv, gctx->ivlen);
|
616
616
|
}
|
617
617
|
return 1;
|
618
618
|
}
|
@@ -860,7 +860,7 @@ static int aesni_gcm_init_key(EVP_CIPHER_CTX *ctx, const uint8_t *key,
|
|
860
860
|
if (gctx->key_set) {
|
861
861
|
CRYPTO_gcm128_setiv(&gctx->gcm, &gctx->ks.ks, iv, gctx->ivlen);
|
862
862
|
} else {
|
863
|
-
|
863
|
+
OPENSSL_memcpy(gctx->iv, iv, gctx->ivlen);
|
864
864
|
}
|
865
865
|
gctx->iv_set = 1;
|
866
866
|
gctx->iv_gen = 0;
|
@@ -1073,7 +1073,7 @@ static int aead_aes_gcm_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
|
1073
1073
|
|
1074
1074
|
const AES_KEY *key = &gcm_ctx->ks.ks;
|
1075
1075
|
|
1076
|
-
|
1076
|
+
OPENSSL_memcpy(&gcm, &gcm_ctx->gcm, sizeof(gcm));
|
1077
1077
|
CRYPTO_gcm128_setiv(&gcm, key, nonce, nonce_len);
|
1078
1078
|
|
1079
1079
|
if (ad_len > 0 && !CRYPTO_gcm128_aad(&gcm, ad, ad_len)) {
|
@@ -1120,7 +1120,7 @@ static int aead_aes_gcm_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
|
1120
1120
|
|
1121
1121
|
const AES_KEY *key = &gcm_ctx->ks.ks;
|
1122
1122
|
|
1123
|
-
|
1123
|
+
OPENSSL_memcpy(&gcm, &gcm_ctx->gcm, sizeof(gcm));
|
1124
1124
|
CRYPTO_gcm128_setiv(&gcm, key, nonce, nonce_len);
|
1125
1125
|
|
1126
1126
|
if (!CRYPTO_gcm128_aad(&gcm, ad, ad_len)) {
|
@@ -1179,266 +1179,6 @@ const EVP_AEAD *EVP_aead_aes_128_gcm(void) { return &aead_aes_128_gcm; }
|
|
1179
1179
|
const EVP_AEAD *EVP_aead_aes_256_gcm(void) { return &aead_aes_256_gcm; }
|
1180
1180
|
|
1181
1181
|
|
1182
|
-
/* AES Key Wrap is specified in
|
1183
|
-
* http://csrc.nist.gov/groups/ST/toolkit/documents/kms/key-wrap.pdf
|
1184
|
-
* or https://tools.ietf.org/html/rfc3394 */
|
1185
|
-
|
1186
|
-
struct aead_aes_key_wrap_ctx {
|
1187
|
-
uint8_t key[32];
|
1188
|
-
unsigned key_bits;
|
1189
|
-
};
|
1190
|
-
|
1191
|
-
static int aead_aes_key_wrap_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
1192
|
-
size_t key_len, size_t tag_len) {
|
1193
|
-
struct aead_aes_key_wrap_ctx *kw_ctx;
|
1194
|
-
const size_t key_bits = key_len * 8;
|
1195
|
-
|
1196
|
-
if (key_bits != 128 && key_bits != 256) {
|
1197
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_KEY_LENGTH);
|
1198
|
-
return 0; /* EVP_AEAD_CTX_init should catch this. */
|
1199
|
-
}
|
1200
|
-
|
1201
|
-
if (tag_len == EVP_AEAD_DEFAULT_TAG_LENGTH) {
|
1202
|
-
tag_len = 8;
|
1203
|
-
}
|
1204
|
-
|
1205
|
-
if (tag_len != 8) {
|
1206
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_TAG_SIZE);
|
1207
|
-
return 0;
|
1208
|
-
}
|
1209
|
-
|
1210
|
-
kw_ctx = OPENSSL_malloc(sizeof(struct aead_aes_key_wrap_ctx));
|
1211
|
-
if (kw_ctx == NULL) {
|
1212
|
-
OPENSSL_PUT_ERROR(CIPHER, ERR_R_MALLOC_FAILURE);
|
1213
|
-
return 0;
|
1214
|
-
}
|
1215
|
-
|
1216
|
-
memcpy(kw_ctx->key, key, key_len);
|
1217
|
-
kw_ctx->key_bits = key_bits;
|
1218
|
-
|
1219
|
-
ctx->aead_state = kw_ctx;
|
1220
|
-
return 1;
|
1221
|
-
}
|
1222
|
-
|
1223
|
-
static void aead_aes_key_wrap_cleanup(EVP_AEAD_CTX *ctx) {
|
1224
|
-
struct aead_aes_key_wrap_ctx *kw_ctx = ctx->aead_state;
|
1225
|
-
OPENSSL_cleanse(kw_ctx, sizeof(struct aead_aes_key_wrap_ctx));
|
1226
|
-
OPENSSL_free(kw_ctx);
|
1227
|
-
}
|
1228
|
-
|
1229
|
-
/* kDefaultAESKeyWrapNonce is the default nonce value given in 2.2.3.1. */
|
1230
|
-
static const uint8_t kDefaultAESKeyWrapNonce[8] = {0xa6, 0xa6, 0xa6, 0xa6,
|
1231
|
-
0xa6, 0xa6, 0xa6, 0xa6};
|
1232
|
-
|
1233
|
-
|
1234
|
-
static int aead_aes_key_wrap_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
1235
|
-
size_t *out_len, size_t max_out_len,
|
1236
|
-
const uint8_t *nonce, size_t nonce_len,
|
1237
|
-
const uint8_t *in, size_t in_len,
|
1238
|
-
const uint8_t *ad, size_t ad_len) {
|
1239
|
-
const struct aead_aes_key_wrap_ctx *kw_ctx = ctx->aead_state;
|
1240
|
-
union {
|
1241
|
-
double align;
|
1242
|
-
AES_KEY ks;
|
1243
|
-
} ks;
|
1244
|
-
/* Variables in this function match up with the variables in the second half
|
1245
|
-
* of section 2.2.1. */
|
1246
|
-
unsigned i, j, n;
|
1247
|
-
uint8_t A[AES_BLOCK_SIZE];
|
1248
|
-
|
1249
|
-
if (ad_len != 0) {
|
1250
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_AD_SIZE);
|
1251
|
-
return 0;
|
1252
|
-
}
|
1253
|
-
|
1254
|
-
if (nonce_len == 0) {
|
1255
|
-
nonce = kDefaultAESKeyWrapNonce;
|
1256
|
-
nonce_len = sizeof(kDefaultAESKeyWrapNonce);
|
1257
|
-
}
|
1258
|
-
|
1259
|
-
if (nonce_len != 8) {
|
1260
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
|
1261
|
-
return 0;
|
1262
|
-
}
|
1263
|
-
|
1264
|
-
if (in_len % 8 != 0) {
|
1265
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_INPUT_SIZE);
|
1266
|
-
return 0;
|
1267
|
-
}
|
1268
|
-
|
1269
|
-
/* The code below only handles a 32-bit |t| thus 6*|n| must be less than
|
1270
|
-
* 2^32, where |n| is |in_len| / 8. So in_len < 4/3 * 2^32 and we
|
1271
|
-
* conservatively cap it to 2^32-16 to stop 32-bit platforms complaining that
|
1272
|
-
* a comparison is always true. */
|
1273
|
-
if (in_len > 0xfffffff0) {
|
1274
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
|
1275
|
-
return 0;
|
1276
|
-
}
|
1277
|
-
|
1278
|
-
n = in_len / 8;
|
1279
|
-
|
1280
|
-
if (n < 2) {
|
1281
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_INPUT_SIZE);
|
1282
|
-
return 0;
|
1283
|
-
}
|
1284
|
-
|
1285
|
-
if (in_len + 8 < in_len) {
|
1286
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
|
1287
|
-
return 0;
|
1288
|
-
}
|
1289
|
-
|
1290
|
-
if (max_out_len < in_len + 8) {
|
1291
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
|
1292
|
-
return 0;
|
1293
|
-
}
|
1294
|
-
|
1295
|
-
if (AES_set_encrypt_key(kw_ctx->key, kw_ctx->key_bits, &ks.ks) < 0) {
|
1296
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_AES_KEY_SETUP_FAILED);
|
1297
|
-
return 0;
|
1298
|
-
}
|
1299
|
-
|
1300
|
-
memmove(out + 8, in, in_len);
|
1301
|
-
memcpy(A, nonce, 8);
|
1302
|
-
|
1303
|
-
for (j = 0; j < 6; j++) {
|
1304
|
-
for (i = 1; i <= n; i++) {
|
1305
|
-
uint32_t t;
|
1306
|
-
|
1307
|
-
memcpy(A + 8, out + 8 * i, 8);
|
1308
|
-
AES_encrypt(A, A, &ks.ks);
|
1309
|
-
t = n * j + i;
|
1310
|
-
A[7] ^= t & 0xff;
|
1311
|
-
A[6] ^= (t >> 8) & 0xff;
|
1312
|
-
A[5] ^= (t >> 16) & 0xff;
|
1313
|
-
A[4] ^= (t >> 24) & 0xff;
|
1314
|
-
memcpy(out + 8 * i, A + 8, 8);
|
1315
|
-
}
|
1316
|
-
}
|
1317
|
-
|
1318
|
-
memcpy(out, A, 8);
|
1319
|
-
*out_len = in_len + 8;
|
1320
|
-
return 1;
|
1321
|
-
}
|
1322
|
-
|
1323
|
-
static int aead_aes_key_wrap_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
1324
|
-
size_t *out_len, size_t max_out_len,
|
1325
|
-
const uint8_t *nonce, size_t nonce_len,
|
1326
|
-
const uint8_t *in, size_t in_len,
|
1327
|
-
const uint8_t *ad, size_t ad_len) {
|
1328
|
-
const struct aead_aes_key_wrap_ctx *kw_ctx = ctx->aead_state;
|
1329
|
-
union {
|
1330
|
-
double align;
|
1331
|
-
AES_KEY ks;
|
1332
|
-
} ks;
|
1333
|
-
/* Variables in this function match up with the variables in the second half
|
1334
|
-
* of section 2.2.1. */
|
1335
|
-
unsigned i, j, n;
|
1336
|
-
uint8_t A[AES_BLOCK_SIZE];
|
1337
|
-
|
1338
|
-
if (ad_len != 0) {
|
1339
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_AD_SIZE);
|
1340
|
-
return 0;
|
1341
|
-
}
|
1342
|
-
|
1343
|
-
if (nonce_len == 0) {
|
1344
|
-
nonce = kDefaultAESKeyWrapNonce;
|
1345
|
-
nonce_len = sizeof(kDefaultAESKeyWrapNonce);
|
1346
|
-
}
|
1347
|
-
|
1348
|
-
if (nonce_len != 8) {
|
1349
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
|
1350
|
-
return 0;
|
1351
|
-
}
|
1352
|
-
|
1353
|
-
if (in_len % 8 != 0) {
|
1354
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_INPUT_SIZE);
|
1355
|
-
return 0;
|
1356
|
-
}
|
1357
|
-
|
1358
|
-
/* The code below only handles a 32-bit |t| thus 6*|n| must be less than
|
1359
|
-
* 2^32, where |n| is |in_len| / 8. So in_len < 4/3 * 2^32 and we
|
1360
|
-
* conservatively cap it to 2^32-8 to stop 32-bit platforms complaining that
|
1361
|
-
* a comparison is always true. */
|
1362
|
-
if (in_len > 0xfffffff8) {
|
1363
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
|
1364
|
-
return 0;
|
1365
|
-
}
|
1366
|
-
|
1367
|
-
if (in_len < 24) {
|
1368
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
|
1369
|
-
return 0;
|
1370
|
-
}
|
1371
|
-
|
1372
|
-
n = (in_len / 8) - 1;
|
1373
|
-
|
1374
|
-
if (max_out_len < in_len - 8) {
|
1375
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
|
1376
|
-
return 0;
|
1377
|
-
}
|
1378
|
-
|
1379
|
-
if (AES_set_decrypt_key(kw_ctx->key, kw_ctx->key_bits, &ks.ks) < 0) {
|
1380
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_AES_KEY_SETUP_FAILED);
|
1381
|
-
return 0;
|
1382
|
-
}
|
1383
|
-
|
1384
|
-
memcpy(A, in, 8);
|
1385
|
-
memmove(out, in + 8, in_len - 8);
|
1386
|
-
|
1387
|
-
for (j = 5; j < 6; j--) {
|
1388
|
-
for (i = n; i > 0; i--) {
|
1389
|
-
uint32_t t;
|
1390
|
-
|
1391
|
-
t = n * j + i;
|
1392
|
-
A[7] ^= t & 0xff;
|
1393
|
-
A[6] ^= (t >> 8) & 0xff;
|
1394
|
-
A[5] ^= (t >> 16) & 0xff;
|
1395
|
-
A[4] ^= (t >> 24) & 0xff;
|
1396
|
-
memcpy(A + 8, out + 8 * (i - 1), 8);
|
1397
|
-
AES_decrypt(A, A, &ks.ks);
|
1398
|
-
memcpy(out + 8 * (i - 1), A + 8, 8);
|
1399
|
-
}
|
1400
|
-
}
|
1401
|
-
|
1402
|
-
if (CRYPTO_memcmp(A, nonce, 8) != 0) {
|
1403
|
-
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
|
1404
|
-
return 0;
|
1405
|
-
}
|
1406
|
-
|
1407
|
-
*out_len = in_len - 8;
|
1408
|
-
return 1;
|
1409
|
-
}
|
1410
|
-
|
1411
|
-
static const EVP_AEAD aead_aes_128_key_wrap = {
|
1412
|
-
16, /* key len */
|
1413
|
-
8, /* nonce len */
|
1414
|
-
8, /* overhead */
|
1415
|
-
8, /* max tag length */
|
1416
|
-
aead_aes_key_wrap_init,
|
1417
|
-
NULL, /* init_with_direction */
|
1418
|
-
aead_aes_key_wrap_cleanup,
|
1419
|
-
aead_aes_key_wrap_seal,
|
1420
|
-
aead_aes_key_wrap_open,
|
1421
|
-
NULL, /* get_iv */
|
1422
|
-
};
|
1423
|
-
|
1424
|
-
static const EVP_AEAD aead_aes_256_key_wrap = {
|
1425
|
-
32, /* key len */
|
1426
|
-
8, /* nonce len */
|
1427
|
-
8, /* overhead */
|
1428
|
-
8, /* max tag length */
|
1429
|
-
aead_aes_key_wrap_init,
|
1430
|
-
NULL, /* init_with_direction */
|
1431
|
-
aead_aes_key_wrap_cleanup,
|
1432
|
-
aead_aes_key_wrap_seal,
|
1433
|
-
aead_aes_key_wrap_open,
|
1434
|
-
NULL, /* get_iv */
|
1435
|
-
};
|
1436
|
-
|
1437
|
-
const EVP_AEAD *EVP_aead_aes_128_key_wrap(void) { return &aead_aes_128_key_wrap; }
|
1438
|
-
|
1439
|
-
const EVP_AEAD *EVP_aead_aes_256_key_wrap(void) { return &aead_aes_256_key_wrap; }
|
1440
|
-
|
1441
|
-
|
1442
1182
|
#define EVP_AEAD_AES_CTR_HMAC_SHA256_TAG_LEN SHA256_DIGEST_LENGTH
|
1443
1183
|
#define EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN 12
|
1444
1184
|
|
@@ -1458,8 +1198,8 @@ static void hmac_init(SHA256_CTX *out_inner, SHA256_CTX *out_outer,
|
|
1458
1198
|
const uint8_t hmac_key[32]) {
|
1459
1199
|
static const size_t hmac_key_len = 32;
|
1460
1200
|
uint8_t block[SHA256_CBLOCK];
|
1461
|
-
|
1462
|
-
|
1201
|
+
OPENSSL_memcpy(block, hmac_key, hmac_key_len);
|
1202
|
+
OPENSSL_memset(block + hmac_key_len, 0x36, sizeof(block) - hmac_key_len);
|
1463
1203
|
|
1464
1204
|
unsigned i;
|
1465
1205
|
for (i = 0; i < hmac_key_len; i++) {
|
@@ -1469,7 +1209,7 @@ static void hmac_init(SHA256_CTX *out_inner, SHA256_CTX *out_outer,
|
|
1469
1209
|
SHA256_Init(out_inner);
|
1470
1210
|
SHA256_Update(out_inner, block, sizeof(block));
|
1471
1211
|
|
1472
|
-
|
1212
|
+
OPENSSL_memset(block + hmac_key_len, 0x5c, sizeof(block) - hmac_key_len);
|
1473
1213
|
for (i = 0; i < hmac_key_len; i++) {
|
1474
1214
|
block[i] ^= (0x36 ^ 0x5c);
|
1475
1215
|
}
|
@@ -1544,7 +1284,7 @@ static void hmac_calculate(uint8_t out[SHA256_DIGEST_LENGTH],
|
|
1544
1284
|
const uint8_t *nonce, const uint8_t *ciphertext,
|
1545
1285
|
size_t ciphertext_len) {
|
1546
1286
|
SHA256_CTX sha256;
|
1547
|
-
|
1287
|
+
OPENSSL_memcpy(&sha256, inner_init_state, sizeof(sha256));
|
1548
1288
|
hmac_update_uint64(&sha256, ad_len);
|
1549
1289
|
hmac_update_uint64(&sha256, ciphertext_len);
|
1550
1290
|
SHA256_Update(&sha256, nonce, EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN);
|
@@ -1557,7 +1297,7 @@ static void hmac_calculate(uint8_t out[SHA256_DIGEST_LENGTH],
|
|
1557
1297
|
SHA256_CBLOCK)) %
|
1558
1298
|
SHA256_CBLOCK;
|
1559
1299
|
uint8_t padding[SHA256_CBLOCK];
|
1560
|
-
|
1300
|
+
OPENSSL_memset(padding, 0, num_padding);
|
1561
1301
|
SHA256_Update(&sha256, padding, num_padding);
|
1562
1302
|
|
1563
1303
|
SHA256_Update(&sha256, ciphertext, ciphertext_len);
|
@@ -1565,7 +1305,7 @@ static void hmac_calculate(uint8_t out[SHA256_DIGEST_LENGTH],
|
|
1565
1305
|
uint8_t inner_digest[SHA256_DIGEST_LENGTH];
|
1566
1306
|
SHA256_Final(inner_digest, &sha256);
|
1567
1307
|
|
1568
|
-
|
1308
|
+
OPENSSL_memcpy(&sha256, outer_init_state, sizeof(sha256));
|
1569
1309
|
SHA256_Update(&sha256, inner_digest, sizeof(inner_digest));
|
1570
1310
|
SHA256_Final(out, &sha256);
|
1571
1311
|
}
|
@@ -1577,11 +1317,11 @@ static void aead_aes_ctr_hmac_sha256_crypt(
|
|
1577
1317
|
* bytes is pointless. However, |CRYPTO_ctr128_encrypt| requires it. */
|
1578
1318
|
uint8_t partial_block_buffer[AES_BLOCK_SIZE];
|
1579
1319
|
unsigned partial_block_offset = 0;
|
1580
|
-
|
1320
|
+
OPENSSL_memset(partial_block_buffer, 0, sizeof(partial_block_buffer));
|
1581
1321
|
|
1582
1322
|
uint8_t counter[AES_BLOCK_SIZE];
|
1583
|
-
|
1584
|
-
|
1323
|
+
OPENSSL_memcpy(counter, nonce, EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN);
|
1324
|
+
OPENSSL_memset(counter + EVP_AEAD_AES_CTR_HMAC_SHA256_NONCE_LEN, 0, 4);
|
1585
1325
|
|
1586
1326
|
if (aes_ctx->ctr) {
|
1587
1327
|
CRYPTO_ctr128_encrypt_ctr32(in, out, len, &aes_ctx->ks.ks, counter,
|
@@ -1624,7 +1364,7 @@ static int aead_aes_ctr_hmac_sha256_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
|
1624
1364
|
uint8_t hmac_result[SHA256_DIGEST_LENGTH];
|
1625
1365
|
hmac_calculate(hmac_result, &aes_ctx->inner_init_state,
|
1626
1366
|
&aes_ctx->outer_init_state, ad, ad_len, nonce, out, in_len);
|
1627
|
-
|
1367
|
+
OPENSSL_memcpy(out + in_len, hmac_result, aes_ctx->tag_len);
|
1628
1368
|
*out_len = in_len + aes_ctx->tag_len;
|
1629
1369
|
|
1630
1370
|
return 1;
|
@@ -1706,6 +1446,320 @@ const EVP_AEAD *EVP_aead_aes_256_ctr_hmac_sha256(void) {
|
|
1706
1446
|
return &aead_aes_256_ctr_hmac_sha256;
|
1707
1447
|
}
|
1708
1448
|
|
1449
|
+
#if !defined(OPENSSL_SMALL)
|
1450
|
+
|
1451
|
+
#define EVP_AEAD_AES_GCM_SIV_NONCE_LEN 12
|
1452
|
+
#define EVP_AEAD_AES_GCM_SIV_TAG_LEN 16
|
1453
|
+
|
1454
|
+
struct aead_aes_gcm_siv_ctx {
|
1455
|
+
union {
|
1456
|
+
double align;
|
1457
|
+
AES_KEY ks;
|
1458
|
+
} ks;
|
1459
|
+
block128_f kgk_block;
|
1460
|
+
unsigned is_256:1;
|
1461
|
+
};
|
1462
|
+
|
1463
|
+
static int aead_aes_gcm_siv_init(EVP_AEAD_CTX *ctx, const uint8_t *key,
|
1464
|
+
size_t key_len, size_t tag_len) {
|
1465
|
+
const size_t key_bits = key_len * 8;
|
1466
|
+
|
1467
|
+
if (key_bits != 128 && key_bits != 256) {
|
1468
|
+
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_KEY_LENGTH);
|
1469
|
+
return 0; /* EVP_AEAD_CTX_init should catch this. */
|
1470
|
+
}
|
1471
|
+
|
1472
|
+
if (tag_len == EVP_AEAD_DEFAULT_TAG_LENGTH) {
|
1473
|
+
tag_len = EVP_AEAD_AES_GCM_SIV_TAG_LEN;
|
1474
|
+
}
|
1475
|
+
|
1476
|
+
if (tag_len != EVP_AEAD_AES_GCM_SIV_TAG_LEN) {
|
1477
|
+
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TAG_TOO_LARGE);
|
1478
|
+
return 0;
|
1479
|
+
}
|
1480
|
+
|
1481
|
+
struct aead_aes_gcm_siv_ctx *gcm_siv_ctx =
|
1482
|
+
OPENSSL_malloc(sizeof(struct aead_aes_gcm_siv_ctx));
|
1483
|
+
if (gcm_siv_ctx == NULL) {
|
1484
|
+
return 0;
|
1485
|
+
}
|
1486
|
+
OPENSSL_memset(gcm_siv_ctx, 0, sizeof(struct aead_aes_gcm_siv_ctx));
|
1487
|
+
|
1488
|
+
if (aesni_capable()) {
|
1489
|
+
aesni_set_encrypt_key(key, key_len * 8, &gcm_siv_ctx->ks.ks);
|
1490
|
+
gcm_siv_ctx->kgk_block = (block128_f)aesni_encrypt;
|
1491
|
+
} else if (hwaes_capable()) {
|
1492
|
+
aes_hw_set_encrypt_key(key, key_len * 8, &gcm_siv_ctx->ks.ks);
|
1493
|
+
gcm_siv_ctx->kgk_block = (block128_f)aes_hw_encrypt;
|
1494
|
+
} else if (vpaes_capable()) {
|
1495
|
+
vpaes_set_encrypt_key(key, key_len * 8, &gcm_siv_ctx->ks.ks);
|
1496
|
+
gcm_siv_ctx->kgk_block = (block128_f)vpaes_encrypt;
|
1497
|
+
} else {
|
1498
|
+
AES_set_encrypt_key(key, key_len * 8, &gcm_siv_ctx->ks.ks);
|
1499
|
+
gcm_siv_ctx->kgk_block = (block128_f)AES_encrypt;
|
1500
|
+
}
|
1501
|
+
|
1502
|
+
gcm_siv_ctx->is_256 = (key_len == 32);
|
1503
|
+
ctx->aead_state = gcm_siv_ctx;
|
1504
|
+
|
1505
|
+
return 1;
|
1506
|
+
}
|
1507
|
+
|
1508
|
+
static void aead_aes_gcm_siv_cleanup(EVP_AEAD_CTX *ctx) {
|
1509
|
+
struct aead_aes_gcm_siv_ctx *gcm_siv_ctx = ctx->aead_state;
|
1510
|
+
OPENSSL_cleanse(gcm_siv_ctx, sizeof(struct aead_aes_gcm_siv_ctx));
|
1511
|
+
OPENSSL_free(gcm_siv_ctx);
|
1512
|
+
}
|
1513
|
+
|
1514
|
+
/* gcm_siv_crypt encrypts (or decrypts—it's the same thing) |in_len| bytes from
|
1515
|
+
* |in| to |out|, using the block function |enc_block| with |key| in counter
|
1516
|
+
* mode, starting at |initial_counter|. This differs from the traditional
|
1517
|
+
* counter mode code in that the counter is handled little-endian, only the
|
1518
|
+
* first four bytes are used and the GCM-SIV tweak to the final byte is
|
1519
|
+
* applied. The |in| and |out| pointers may be equal but otherwise must not
|
1520
|
+
* alias. */
|
1521
|
+
static void gcm_siv_crypt(uint8_t *out, const uint8_t *in, size_t in_len,
|
1522
|
+
const uint8_t initial_counter[AES_BLOCK_SIZE],
|
1523
|
+
block128_f enc_block, const AES_KEY *key) {
|
1524
|
+
union {
|
1525
|
+
uint32_t w[4];
|
1526
|
+
uint8_t c[16];
|
1527
|
+
} counter;
|
1528
|
+
|
1529
|
+
OPENSSL_memcpy(counter.c, initial_counter, AES_BLOCK_SIZE);
|
1530
|
+
counter.c[15] |= 0x80;
|
1531
|
+
|
1532
|
+
for (size_t done = 0; done < in_len;) {
|
1533
|
+
uint8_t keystream[AES_BLOCK_SIZE];
|
1534
|
+
enc_block(counter.c, keystream, key);
|
1535
|
+
counter.w[0]++;
|
1536
|
+
|
1537
|
+
size_t todo = AES_BLOCK_SIZE;
|
1538
|
+
if (in_len - done < todo) {
|
1539
|
+
todo = in_len - done;
|
1540
|
+
}
|
1541
|
+
|
1542
|
+
for (size_t i = 0; i < todo; i++) {
|
1543
|
+
out[done + i] = keystream[i] ^ in[done + i];
|
1544
|
+
}
|
1545
|
+
|
1546
|
+
done += todo;
|
1547
|
+
}
|
1548
|
+
}
|
1549
|
+
|
1550
|
+
/* gcm_siv_polyval evaluates POLYVAL at |auth_key| on the given plaintext and
|
1551
|
+
* AD. The result is written to |out_tag|. */
|
1552
|
+
static void gcm_siv_polyval(
|
1553
|
+
uint8_t out_tag[16], const uint8_t *in, size_t in_len, const uint8_t *ad,
|
1554
|
+
size_t ad_len, const uint8_t auth_key[16],
|
1555
|
+
const uint8_t nonce[EVP_AEAD_AES_GCM_SIV_NONCE_LEN]) {
|
1556
|
+
struct polyval_ctx polyval_ctx;
|
1557
|
+
CRYPTO_POLYVAL_init(&polyval_ctx, auth_key);
|
1558
|
+
|
1559
|
+
CRYPTO_POLYVAL_update_blocks(&polyval_ctx, ad, ad_len & ~15);
|
1560
|
+
|
1561
|
+
uint8_t scratch[16];
|
1562
|
+
if (ad_len & 15) {
|
1563
|
+
OPENSSL_memset(scratch, 0, sizeof(scratch));
|
1564
|
+
OPENSSL_memcpy(scratch, &ad[ad_len & ~15], ad_len & 15);
|
1565
|
+
CRYPTO_POLYVAL_update_blocks(&polyval_ctx, scratch, sizeof(scratch));
|
1566
|
+
}
|
1567
|
+
|
1568
|
+
CRYPTO_POLYVAL_update_blocks(&polyval_ctx, in, in_len & ~15);
|
1569
|
+
if (in_len & 15) {
|
1570
|
+
OPENSSL_memset(scratch, 0, sizeof(scratch));
|
1571
|
+
OPENSSL_memcpy(scratch, &in[in_len & ~15], in_len & 15);
|
1572
|
+
CRYPTO_POLYVAL_update_blocks(&polyval_ctx, scratch, sizeof(scratch));
|
1573
|
+
}
|
1574
|
+
|
1575
|
+
union {
|
1576
|
+
uint8_t c[16];
|
1577
|
+
struct {
|
1578
|
+
uint64_t ad;
|
1579
|
+
uint64_t in;
|
1580
|
+
} bitlens;
|
1581
|
+
} length_block;
|
1582
|
+
|
1583
|
+
length_block.bitlens.ad = ad_len * 8;
|
1584
|
+
length_block.bitlens.in = in_len * 8;
|
1585
|
+
CRYPTO_POLYVAL_update_blocks(&polyval_ctx, length_block.c,
|
1586
|
+
sizeof(length_block));
|
1587
|
+
|
1588
|
+
CRYPTO_POLYVAL_finish(&polyval_ctx, out_tag);
|
1589
|
+
for (size_t i = 0; i < EVP_AEAD_AES_GCM_SIV_NONCE_LEN; i++) {
|
1590
|
+
out_tag[i] ^= nonce[i];
|
1591
|
+
}
|
1592
|
+
out_tag[15] &= 0x7f;
|
1593
|
+
}
|
1594
|
+
|
1595
|
+
/* gcm_siv_record_keys contains the keys used for a specific GCM-SIV record. */
|
1596
|
+
struct gcm_siv_record_keys {
|
1597
|
+
uint8_t auth_key[16];
|
1598
|
+
union {
|
1599
|
+
double align;
|
1600
|
+
AES_KEY ks;
|
1601
|
+
} enc_key;
|
1602
|
+
block128_f enc_block;
|
1603
|
+
};
|
1604
|
+
|
1605
|
+
/* gcm_siv_keys calculates the keys for a specific GCM-SIV record with the
|
1606
|
+
* given nonce and writes them to |*out_keys|. */
|
1607
|
+
static void gcm_siv_keys(
|
1608
|
+
const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx,
|
1609
|
+
struct gcm_siv_record_keys *out_keys,
|
1610
|
+
const uint8_t nonce[EVP_AEAD_AES_GCM_SIV_NONCE_LEN]) {
|
1611
|
+
const AES_KEY *const key = &gcm_siv_ctx->ks.ks;
|
1612
|
+
uint8_t key_material[(128 /* POLYVAL key */ + 256 /* max AES key */) / 8];
|
1613
|
+
const size_t blocks_needed = gcm_siv_ctx->is_256 ? 6 : 4;
|
1614
|
+
|
1615
|
+
uint8_t counter[AES_BLOCK_SIZE];
|
1616
|
+
OPENSSL_memset(counter, 0, AES_BLOCK_SIZE - EVP_AEAD_AES_GCM_SIV_NONCE_LEN);
|
1617
|
+
OPENSSL_memcpy(counter + AES_BLOCK_SIZE - EVP_AEAD_AES_GCM_SIV_NONCE_LEN,
|
1618
|
+
nonce, EVP_AEAD_AES_GCM_SIV_NONCE_LEN);
|
1619
|
+
for (size_t i = 0; i < blocks_needed; i++) {
|
1620
|
+
counter[0] = i;
|
1621
|
+
|
1622
|
+
uint8_t ciphertext[AES_BLOCK_SIZE];
|
1623
|
+
gcm_siv_ctx->kgk_block(counter, ciphertext, key);
|
1624
|
+
OPENSSL_memcpy(&key_material[i * 8], ciphertext, 8);
|
1625
|
+
}
|
1626
|
+
|
1627
|
+
OPENSSL_memcpy(out_keys->auth_key, key_material, 16);
|
1628
|
+
aes_ctr_set_key(&out_keys->enc_key.ks, NULL, &out_keys->enc_block,
|
1629
|
+
key_material + 16, gcm_siv_ctx->is_256 ? 32 : 16);
|
1630
|
+
}
|
1631
|
+
|
1632
|
+
static int aead_aes_gcm_siv_seal(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
1633
|
+
size_t *out_len, size_t max_out_len,
|
1634
|
+
const uint8_t *nonce, size_t nonce_len,
|
1635
|
+
const uint8_t *in, size_t in_len,
|
1636
|
+
const uint8_t *ad, size_t ad_len) {
|
1637
|
+
const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx = ctx->aead_state;
|
1638
|
+
const uint64_t in_len_64 = in_len;
|
1639
|
+
const uint64_t ad_len_64 = ad_len;
|
1640
|
+
|
1641
|
+
if (in_len + EVP_AEAD_AES_GCM_SIV_TAG_LEN < in_len ||
|
1642
|
+
in_len_64 > (UINT64_C(1) << 36) ||
|
1643
|
+
ad_len_64 >= (UINT64_C(1) << 61)) {
|
1644
|
+
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
|
1645
|
+
return 0;
|
1646
|
+
}
|
1647
|
+
|
1648
|
+
if (max_out_len < in_len + EVP_AEAD_AES_GCM_SIV_TAG_LEN) {
|
1649
|
+
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
|
1650
|
+
return 0;
|
1651
|
+
}
|
1652
|
+
|
1653
|
+
if (nonce_len != EVP_AEAD_AES_GCM_SIV_NONCE_LEN) {
|
1654
|
+
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
|
1655
|
+
return 0;
|
1656
|
+
}
|
1657
|
+
|
1658
|
+
struct gcm_siv_record_keys keys;
|
1659
|
+
gcm_siv_keys(gcm_siv_ctx, &keys, nonce);
|
1660
|
+
|
1661
|
+
uint8_t tag[16];
|
1662
|
+
gcm_siv_polyval(tag, in, in_len, ad, ad_len, keys.auth_key, nonce);
|
1663
|
+
keys.enc_block(tag, tag, &keys.enc_key.ks);
|
1664
|
+
|
1665
|
+
gcm_siv_crypt(out, in, in_len, tag, keys.enc_block, &keys.enc_key.ks);
|
1666
|
+
|
1667
|
+
OPENSSL_memcpy(&out[in_len], tag, EVP_AEAD_AES_GCM_SIV_TAG_LEN);
|
1668
|
+
*out_len = in_len + EVP_AEAD_AES_GCM_SIV_TAG_LEN;
|
1669
|
+
|
1670
|
+
return 1;
|
1671
|
+
}
|
1672
|
+
|
1673
|
+
static int aead_aes_gcm_siv_open(const EVP_AEAD_CTX *ctx, uint8_t *out,
|
1674
|
+
size_t *out_len, size_t max_out_len,
|
1675
|
+
const uint8_t *nonce, size_t nonce_len,
|
1676
|
+
const uint8_t *in, size_t in_len,
|
1677
|
+
const uint8_t *ad, size_t ad_len) {
|
1678
|
+
const uint64_t ad_len_64 = ad_len;
|
1679
|
+
if (ad_len_64 >= (UINT64_C(1) << 61)) {
|
1680
|
+
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_TOO_LARGE);
|
1681
|
+
return 0;
|
1682
|
+
}
|
1683
|
+
|
1684
|
+
const uint64_t in_len_64 = in_len;
|
1685
|
+
if (in_len < EVP_AEAD_AES_GCM_SIV_TAG_LEN ||
|
1686
|
+
in_len_64 > (UINT64_C(1) << 36) + AES_BLOCK_SIZE) {
|
1687
|
+
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
|
1688
|
+
return 0;
|
1689
|
+
}
|
1690
|
+
|
1691
|
+
if (nonce_len != EVP_AEAD_AES_GCM_SIV_NONCE_LEN) {
|
1692
|
+
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_UNSUPPORTED_NONCE_SIZE);
|
1693
|
+
return 0;
|
1694
|
+
}
|
1695
|
+
|
1696
|
+
const struct aead_aes_gcm_siv_ctx *gcm_siv_ctx = ctx->aead_state;
|
1697
|
+
const size_t plaintext_len = in_len - EVP_AEAD_AES_GCM_SIV_TAG_LEN;
|
1698
|
+
|
1699
|
+
if (max_out_len < plaintext_len) {
|
1700
|
+
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BUFFER_TOO_SMALL);
|
1701
|
+
return 0;
|
1702
|
+
}
|
1703
|
+
|
1704
|
+
struct gcm_siv_record_keys keys;
|
1705
|
+
gcm_siv_keys(gcm_siv_ctx, &keys, nonce);
|
1706
|
+
|
1707
|
+
gcm_siv_crypt(out, in, plaintext_len, &in[plaintext_len], keys.enc_block,
|
1708
|
+
&keys.enc_key.ks);
|
1709
|
+
|
1710
|
+
uint8_t expected_tag[EVP_AEAD_AES_GCM_SIV_TAG_LEN];
|
1711
|
+
gcm_siv_polyval(expected_tag, out, plaintext_len, ad, ad_len, keys.auth_key,
|
1712
|
+
nonce);
|
1713
|
+
keys.enc_block(expected_tag, expected_tag, &keys.enc_key.ks);
|
1714
|
+
|
1715
|
+
if (CRYPTO_memcmp(expected_tag, &in[plaintext_len], sizeof(expected_tag)) !=
|
1716
|
+
0) {
|
1717
|
+
OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_DECRYPT);
|
1718
|
+
return 0;
|
1719
|
+
}
|
1720
|
+
|
1721
|
+
*out_len = plaintext_len;
|
1722
|
+
return 1;
|
1723
|
+
}
|
1724
|
+
|
1725
|
+
static const EVP_AEAD aead_aes_128_gcm_siv = {
|
1726
|
+
16, /* key length */
|
1727
|
+
EVP_AEAD_AES_GCM_SIV_NONCE_LEN, /* nonce length */
|
1728
|
+
EVP_AEAD_AES_GCM_SIV_TAG_LEN, /* overhead */
|
1729
|
+
EVP_AEAD_AES_GCM_SIV_TAG_LEN, /* max tag length */
|
1730
|
+
|
1731
|
+
aead_aes_gcm_siv_init,
|
1732
|
+
NULL /* init_with_direction */,
|
1733
|
+
aead_aes_gcm_siv_cleanup,
|
1734
|
+
aead_aes_gcm_siv_seal,
|
1735
|
+
aead_aes_gcm_siv_open,
|
1736
|
+
NULL /* get_iv */,
|
1737
|
+
};
|
1738
|
+
|
1739
|
+
static const EVP_AEAD aead_aes_256_gcm_siv = {
|
1740
|
+
32, /* key length */
|
1741
|
+
EVP_AEAD_AES_GCM_SIV_NONCE_LEN, /* nonce length */
|
1742
|
+
EVP_AEAD_AES_GCM_SIV_TAG_LEN, /* overhead */
|
1743
|
+
EVP_AEAD_AES_GCM_SIV_TAG_LEN, /* max tag length */
|
1744
|
+
|
1745
|
+
aead_aes_gcm_siv_init,
|
1746
|
+
NULL /* init_with_direction */,
|
1747
|
+
aead_aes_gcm_siv_cleanup,
|
1748
|
+
aead_aes_gcm_siv_seal,
|
1749
|
+
aead_aes_gcm_siv_open,
|
1750
|
+
NULL /* get_iv */,
|
1751
|
+
};
|
1752
|
+
|
1753
|
+
const EVP_AEAD *EVP_aead_aes_128_gcm_siv(void) {
|
1754
|
+
return &aead_aes_128_gcm_siv;
|
1755
|
+
}
|
1756
|
+
|
1757
|
+
const EVP_AEAD *EVP_aead_aes_256_gcm_siv(void) {
|
1758
|
+
return &aead_aes_256_gcm_siv;
|
1759
|
+
}
|
1760
|
+
|
1761
|
+
#endif /* !OPENSSL_SMALL */
|
1762
|
+
|
1709
1763
|
int EVP_has_aes_hardware(void) {
|
1710
1764
|
#if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
|
1711
1765
|
return aesni_capable() && crypto_gcm_clmul_enabled();
|