grpc 1.9.1 → 1.10.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 +2654 -953
- data/etc/roots.pem +282 -683
- data/include/grpc/compression.h +9 -26
- data/include/grpc/grpc.h +10 -24
- data/include/grpc/grpc_security.h +7 -1
- data/include/grpc/impl/codegen/compression_types.h +5 -62
- data/include/grpc/impl/codegen/grpc_types.h +10 -6
- data/include/grpc/module.modulemap +1 -10
- data/include/grpc/support/alloc.h +3 -2
- data/include/grpc/support/log.h +1 -2
- data/{src/core/lib/gpr/thd_internal.h → include/grpc/support/thd_id.h} +23 -9
- data/src/boringssl/err_data.c +550 -496
- data/src/core/ext/census/grpc_context.cc +2 -1
- data/src/core/ext/filters/client_channel/backup_poller.cc +5 -4
- data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -7
- data/src/core/ext/filters/client_channel/client_channel.cc +162 -172
- data/src/core/ext/filters/client_channel/client_channel_factory.cc +4 -2
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +10 -10
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +18 -14
- data/src/core/ext/filters/client_channel/http_proxy.cc +3 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +21 -105
- data/src/core/ext/filters/client_channel/lb_policy.h +166 -170
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -36
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1452 -1459
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +7 -8
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +27 -27
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +279 -304
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +358 -330
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +30 -41
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +7 -14
- data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -21
- data/src/core/ext/filters/client_channel/lb_policy_factory.h +23 -27
- data/src/core/ext/filters/client_channel/lb_policy_registry.cc +58 -33
- data/src/core/ext/filters/client_channel/lb_policy_registry.h +25 -12
- data/src/core/ext/filters/client_channel/parse_address.cc +10 -8
- data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver.cc +6 -52
- data/src/core/ext/filters/client_channel/resolver.h +98 -55
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +266 -237
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +31 -27
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +244 -207
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +161 -148
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +47 -31
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +126 -126
- data/src/core/ext/filters/client_channel/resolver_factory.h +33 -32
- data/src/core/ext/filters/client_channel/resolver_registry.cc +110 -90
- data/src/core/ext/filters/client_channel/resolver_registry.h +49 -36
- data/src/core/ext/filters/client_channel/retry_throttle.cc +29 -22
- data/src/core/ext/filters/client_channel/subchannel.cc +173 -173
- data/src/core/ext/filters/client_channel/subchannel.h +38 -45
- data/src/core/ext/filters/client_channel/subchannel_index.cc +44 -40
- data/src/core/ext/filters/client_channel/uri_parser.cc +3 -3
- data/src/core/ext/filters/deadline/deadline_filter.cc +27 -18
- data/src/core/ext/filters/http/client/http_client_filter.cc +26 -23
- data/src/core/ext/filters/http/http_filters_plugin.cc +3 -2
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +78 -110
- data/src/core/ext/filters/http/server/http_server_filter.cc +29 -26
- data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +9 -11
- data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +2 -1
- data/src/core/ext/filters/max_age/max_age_filter.cc +14 -14
- data/src/core/ext/filters/message_size/message_size_filter.cc +20 -18
- data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -4
- data/src/core/ext/filters/workarounds/workaround_utils.cc +4 -4
- data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -10
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +4 -4
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +11 -12
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +16 -13
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +36 -9
- data/src/core/ext/transport/chttp2/transport/bin_decoder.h +3 -0
- data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +17 -14
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -145
- data/src/core/ext/transport/chttp2/transport/flow_control.cc +16 -14
- data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -7
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -33
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +27 -25
- data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -12
- data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +16 -15
- data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +11 -11
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +23 -22
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +35 -35
- data/src/core/ext/transport/chttp2/transport/hpack_table.cc +10 -7
- data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
- data/src/core/ext/transport/chttp2/transport/internal.h +1 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +35 -39
- data/src/core/ext/transport/chttp2/transport/stream_map.cc +8 -7
- data/src/core/ext/transport/chttp2/transport/varint.cc +5 -5
- data/src/core/ext/transport/chttp2/transport/writing.cc +18 -18
- data/src/core/ext/transport/inproc/inproc_transport.cc +43 -23
- data/src/core/lib/{gpr → avl}/avl.cc +61 -57
- data/{include/grpc/support → src/core/lib/avl}/avl.h +25 -35
- data/src/core/lib/backoff/backoff.cc +6 -5
- data/src/core/lib/channel/channel_args.cc +23 -109
- data/src/core/lib/channel/channel_args.h +5 -31
- data/src/core/lib/channel/channel_stack.cc +11 -8
- data/src/core/lib/channel/channel_stack_builder.cc +10 -7
- data/src/core/lib/channel/connected_channel.cc +18 -17
- data/src/core/lib/channel/handshaker.cc +8 -8
- data/src/core/lib/channel/handshaker_registry.cc +3 -2
- data/src/core/lib/compression/algorithm_metadata.h +13 -6
- data/src/core/lib/compression/compression.cc +72 -183
- data/src/core/lib/compression/compression_internal.cc +274 -0
- data/src/core/lib/compression/compression_internal.h +86 -0
- data/src/core/lib/compression/message_compress.cc +15 -15
- data/src/core/lib/compression/message_compress.h +4 -3
- data/src/core/lib/compression/stream_compression_gzip.cc +8 -8
- data/src/core/lib/compression/stream_compression_identity.cc +1 -1
- data/src/core/lib/debug/stats.cc +10 -8
- data/src/core/lib/debug/stats_data.cc +2 -1
- data/src/core/lib/debug/trace.cc +3 -3
- data/src/core/lib/gpr/alloc.cc +7 -11
- data/src/core/lib/gpr/arena.cc +34 -12
- data/src/core/lib/gpr/atm.cc +2 -1
- data/src/core/lib/gpr/cpu_linux.cc +3 -3
- data/src/core/lib/gpr/cpu_posix.cc +2 -1
- data/src/core/lib/gpr/env.h +1 -1
- data/src/core/lib/gpr/env_linux.cc +1 -1
- data/src/core/lib/gpr/env_windows.cc +4 -4
- data/src/core/lib/gpr/fork.cc +16 -2
- data/src/core/lib/gpr/host_port.cc +5 -4
- data/{include/grpc/support → src/core/lib/gpr}/host_port.h +5 -13
- data/src/core/lib/gpr/log.cc +5 -4
- data/src/core/lib/gpr/log_linux.cc +1 -1
- data/src/core/lib/gpr/mpscq.cc +1 -0
- data/src/core/lib/gpr/murmur_hash.cc +4 -4
- data/src/core/lib/gpr/string.cc +19 -16
- data/src/core/lib/gpr/string_posix.cc +3 -3
- data/src/core/lib/gpr/sync_posix.cc +5 -9
- data/src/core/lib/gpr/thd.cc +3 -3
- data/{include/grpc/support → src/core/lib/gpr}/thd.h +20 -28
- data/src/core/lib/gpr/thd_posix.cc +6 -4
- data/src/core/lib/gpr/thd_windows.cc +3 -1
- data/src/core/lib/gpr/time.cc +6 -4
- data/src/core/lib/gpr/time_posix.cc +2 -2
- data/{include/grpc/support → src/core/lib/gpr}/tls.h +6 -6
- data/{include/grpc/support → src/core/lib/gpr}/tls_gcc.h +3 -3
- data/{include/grpc/support → src/core/lib/gpr}/tls_msvc.h +3 -3
- data/src/core/lib/gpr/tls_pthread.cc +1 -1
- data/{include/grpc/support → src/core/lib/gpr}/tls_pthread.h +3 -3
- data/{include/grpc/support → src/core/lib/gpr}/useful.h +3 -3
- data/src/core/lib/{gpr++ → gprpp}/abstract.h +3 -3
- data/src/core/lib/{gpr++ → gprpp}/atomic.h +5 -5
- data/src/core/lib/{gpr++ → gprpp}/atomic_with_atm.h +3 -3
- data/src/core/lib/{gpr++ → gprpp}/atomic_with_std.h +3 -3
- data/src/core/lib/{gpr++ → gprpp}/debug_location.h +3 -3
- data/src/core/lib/{gpr++ → gprpp}/inlined_vector.h +44 -22
- data/src/core/lib/{gpr++ → gprpp}/manual_constructor.h +2 -2
- data/src/core/lib/{gpr++ → gprpp}/memory.h +14 -5
- data/src/core/lib/{gpr++ → gprpp}/orphanable.h +39 -14
- data/src/core/lib/{gpr++ → gprpp}/ref_counted.h +42 -10
- data/src/core/lib/{gpr++ → gprpp}/ref_counted_ptr.h +18 -8
- data/src/core/lib/http/format_request.cc +3 -3
- data/src/core/lib/http/httpcli.cc +6 -7
- data/src/core/lib/http/httpcli_security_connector.cc +10 -10
- data/src/core/lib/http/parser.cc +16 -12
- data/src/core/lib/iomgr/call_combiner.cc +12 -13
- data/src/core/lib/iomgr/closure.h +4 -6
- data/src/core/lib/iomgr/combiner.cc +10 -21
- data/src/core/lib/iomgr/error.cc +50 -55
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +41 -52
- data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -28
- data/src/core/lib/iomgr/ev_epollsig_linux.cc +23 -30
- data/src/core/lib/iomgr/ev_poll_posix.cc +52 -46
- data/src/core/lib/iomgr/ev_posix.cc +47 -6
- data/src/core/lib/iomgr/exec_ctx.cc +10 -10
- data/src/core/lib/iomgr/exec_ctx.h +1 -1
- data/src/core/lib/iomgr/executor.cc +16 -13
- data/src/core/lib/iomgr/fork_posix.cc +1 -3
- data/src/core/lib/iomgr/gethostname_host_name_max.cc +1 -1
- data/src/core/lib/iomgr/iocp_windows.cc +1 -2
- data/src/core/lib/iomgr/iomgr.cc +2 -2
- data/src/core/lib/iomgr/iomgr_uv.cc +2 -0
- data/src/core/lib/iomgr/iomgr_uv.h +1 -1
- data/src/core/lib/iomgr/is_epollexclusive_available.cc +5 -4
- data/src/core/lib/iomgr/load_file.cc +3 -3
- data/src/core/lib/iomgr/pollset_windows.cc +1 -1
- data/src/core/lib/iomgr/resolve_address_posix.cc +10 -9
- data/src/core/lib/iomgr/resolve_address_uv.cc +2 -2
- data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
- data/src/core/lib/iomgr/resource_quota.cc +36 -34
- data/src/core/lib/iomgr/sockaddr_utils.cc +39 -23
- data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
- data/src/core/lib/iomgr/socket_mutator.cc +7 -7
- data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -4
- data/src/core/lib/iomgr/socket_utils_linux.cc +3 -2
- data/src/core/lib/iomgr/tcp_client_posix.cc +7 -6
- data/src/core/lib/iomgr/tcp_client_windows.cc +0 -1
- data/src/core/lib/iomgr/tcp_posix.cc +47 -55
- data/src/core/lib/iomgr/tcp_server_posix.cc +12 -10
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -5
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -3
- data/src/core/lib/iomgr/tcp_windows.cc +1 -1
- data/src/core/lib/iomgr/timer_generic.cc +16 -14
- data/src/core/lib/iomgr/timer_heap.cc +8 -7
- data/src/core/lib/iomgr/timer_manager.cc +4 -3
- data/src/core/lib/iomgr/udp_server.cc +24 -16
- data/src/core/lib/iomgr/unix_sockets_posix.cc +15 -10
- data/src/core/lib/iomgr/wakeup_fd_cv.cc +6 -5
- data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +1 -2
- data/src/core/lib/json/json.cc +1 -1
- data/src/core/lib/json/json_reader.cc +8 -6
- data/src/core/lib/json/json_string.cc +19 -18
- data/src/core/lib/json/json_writer.cc +10 -8
- data/src/core/lib/profiling/basic_timers.cc +1 -1
- data/src/core/lib/profiling/timers.h +3 -20
- data/src/core/lib/security/context/security_context.cc +16 -14
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +17 -14
- data/src/core/lib/security/credentials/credentials.cc +9 -8
- data/src/core/lib/security/credentials/credentials.h +1 -1
- data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +12 -13
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -4
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -3
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -3
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -7
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +21 -18
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +23 -18
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +11 -7
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +22 -21
- data/src/core/lib/security/{transport → security_connector}/security_connector.cc +46 -43
- data/src/core/lib/security/{transport → security_connector}/security_connector.h +3 -3
- data/src/core/lib/security/transport/client_auth_filter.cc +32 -34
- data/src/core/lib/security/transport/lb_targets_info.cc +7 -5
- data/src/core/lib/security/transport/secure_endpoint.cc +21 -21
- data/src/core/lib/security/transport/security_handshaker.cc +19 -18
- data/src/core/lib/security/transport/security_handshaker.h +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
- data/src/core/lib/slice/b64.cc +19 -16
- data/src/core/lib/slice/percent_encoding.cc +5 -5
- data/src/core/lib/slice/slice.cc +35 -33
- data/src/core/lib/slice/slice_buffer.cc +16 -14
- data/src/core/lib/slice/slice_hash_table.cc +3 -2
- data/src/core/lib/slice/slice_intern.cc +21 -25
- data/src/core/lib/slice/slice_string_helpers.cc +45 -9
- data/src/core/lib/slice/slice_string_helpers.h +6 -0
- data/src/core/lib/surface/byte_buffer.cc +2 -2
- data/src/core/lib/surface/byte_buffer_reader.cc +6 -3
- data/src/core/lib/surface/call.cc +171 -260
- data/src/core/lib/surface/call_test_only.h +1 -13
- data/src/core/lib/surface/channel.cc +20 -43
- data/src/core/lib/surface/channel_init.cc +7 -7
- data/src/core/lib/surface/channel_ping.cc +2 -2
- data/src/core/lib/surface/completion_queue.cc +69 -75
- data/src/core/lib/surface/init.cc +4 -5
- data/src/core/lib/surface/init_secure.cc +1 -1
- data/src/core/lib/surface/lame_client.cc +1 -1
- data/src/core/lib/surface/server.cc +64 -59
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/bdp_estimator.cc +6 -5
- data/src/core/lib/transport/byte_stream.cc +23 -14
- data/src/core/lib/transport/byte_stream.h +1 -1
- data/src/core/lib/transport/connectivity_state.cc +9 -13
- data/src/core/lib/transport/error_utils.cc +10 -7
- data/src/core/lib/transport/metadata.cc +27 -26
- data/src/core/lib/transport/metadata.h +1 -1
- data/src/core/lib/transport/pid_controller.cc +2 -1
- data/src/core/lib/transport/service_config.cc +5 -5
- data/src/core/lib/transport/static_metadata.cc +225 -222
- data/src/core/lib/transport/static_metadata.h +77 -76
- data/src/core/lib/transport/timeout_encoding.cc +3 -2
- data/src/core/lib/transport/transport.cc +6 -5
- data/src/core/lib/transport/transport_op_string.cc +0 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
- data/src/core/tsi/alts_transport_security.cc +61 -0
- data/src/core/tsi/{gts_transport_security.h → alts_transport_security.h} +16 -8
- data/src/core/tsi/fake_transport_security.cc +59 -43
- data/src/core/tsi/ssl_transport_security.cc +122 -107
- data/src/core/tsi/transport_security.cc +3 -3
- data/src/core/tsi/transport_security_adapter.cc +16 -10
- data/src/ruby/bin/apis/pubsub_demo.rb +1 -1
- data/src/ruby/ext/grpc/rb_channel.c +3 -4
- data/src/ruby/ext/grpc/rb_compression_options.c +13 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -76
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +8 -120
- data/src/ruby/ext/grpc/rb_server.c +52 -28
- data/src/ruby/lib/grpc/generic/rpc_server.rb +7 -4
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/test/client.rb +1 -1
- data/src/ruby/pb/test/server.rb +1 -1
- data/src/ruby/spec/client_server_spec.rb +4 -2
- data/src/ruby/spec/generic/active_call_spec.rb +2 -1
- data/src/ruby/spec/generic/client_stub_spec.rb +32 -8
- data/src/ruby/spec/server_spec.rb +26 -7
- data/third_party/boringssl/crypto/asn1/a_bitstr.c +7 -2
- data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +15 -0
- data/third_party/boringssl/crypto/asn1/a_gentm.c +1 -1
- data/third_party/boringssl/crypto/asn1/a_print.c +0 -28
- data/third_party/boringssl/crypto/asn1/a_strnid.c +3 -0
- data/third_party/boringssl/crypto/asn1/a_time.c +17 -9
- data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -1
- data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -49
- data/third_party/boringssl/crypto/asn1/asn1_locl.h +1 -1
- data/third_party/boringssl/crypto/asn1/tasn_dec.c +9 -9
- data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -6
- data/third_party/boringssl/crypto/asn1/time_support.c +5 -5
- data/third_party/boringssl/crypto/base64/base64.c +65 -43
- data/third_party/boringssl/crypto/bio/bio.c +134 -110
- data/third_party/boringssl/crypto/bio/bio_mem.c +9 -9
- data/third_party/boringssl/crypto/bio/connect.c +17 -17
- data/third_party/boringssl/crypto/bio/fd.c +2 -1
- data/third_party/boringssl/crypto/bio/file.c +14 -14
- data/third_party/boringssl/crypto/bio/hexdump.c +15 -16
- data/third_party/boringssl/crypto/bio/internal.h +14 -14
- data/third_party/boringssl/crypto/bio/pair.c +45 -45
- data/third_party/boringssl/crypto/bio/printf.c +6 -10
- data/third_party/boringssl/crypto/{bn → bn_extra}/bn_asn1.c +9 -9
- data/third_party/boringssl/crypto/{bn → bn_extra}/convert.c +18 -223
- data/third_party/boringssl/crypto/buf/buf.c +20 -44
- data/third_party/boringssl/crypto/bytestring/ber.c +35 -35
- data/third_party/boringssl/crypto/bytestring/cbb.c +24 -24
- data/third_party/boringssl/crypto/bytestring/cbs.c +33 -37
- data/third_party/boringssl/crypto/bytestring/internal.h +38 -38
- data/third_party/boringssl/crypto/chacha/chacha.c +7 -7
- data/third_party/boringssl/crypto/{asn1/t_bitst.c → cipher_extra/cipher_extra.c} +49 -38
- data/third_party/boringssl/crypto/{cipher → cipher_extra}/derive_key.c +0 -2
- data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +281 -0
- data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +867 -0
- data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +326 -0
- data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_null.c +0 -1
- data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc2.c +22 -10
- data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc4.c +0 -0
- data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_ssl3.c +120 -64
- data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_tls.c +220 -141
- data/third_party/boringssl/crypto/{asn1/x_bignum.c → cipher_extra/internal.h} +61 -86
- data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +482 -0
- data/third_party/boringssl/crypto/cmac/cmac.c +20 -20
- data/third_party/boringssl/crypto/conf/conf.c +32 -20
- data/third_party/boringssl/crypto/conf/internal.h +3 -3
- data/third_party/boringssl/crypto/cpu-aarch64-linux.c +5 -5
- data/third_party/boringssl/crypto/cpu-arm-linux.c +44 -41
- data/third_party/boringssl/crypto/cpu-intel.c +68 -43
- data/third_party/boringssl/crypto/cpu-ppc64le.c +5 -7
- data/third_party/boringssl/crypto/crypto.c +54 -32
- data/third_party/boringssl/crypto/curve25519/curve25519.c +269 -269
- data/third_party/boringssl/crypto/curve25519/internal.h +28 -8
- data/third_party/boringssl/crypto/curve25519/spake25519.c +180 -106
- data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +9 -9
- data/third_party/boringssl/crypto/dh/check.c +33 -34
- data/third_party/boringssl/crypto/dh/dh.c +72 -36
- data/third_party/boringssl/crypto/dh/dh_asn1.c +1 -1
- data/third_party/boringssl/crypto/dh/params.c +1 -161
- data/third_party/boringssl/crypto/digest_extra/digest_extra.c +240 -0
- data/third_party/boringssl/crypto/dsa/dsa.c +127 -87
- data/third_party/boringssl/crypto/dsa/dsa_asn1.c +1 -1
- data/third_party/boringssl/crypto/{ec → ec_extra}/ec_asn1.c +83 -70
- data/third_party/boringssl/crypto/ecdh/ecdh.c +1 -1
- data/third_party/boringssl/crypto/{ecdsa → ecdsa_extra}/ecdsa_asn1.c +86 -31
- data/third_party/boringssl/crypto/engine/engine.c +6 -6
- data/third_party/boringssl/crypto/err/err.c +197 -106
- data/third_party/boringssl/crypto/err/internal.h +58 -0
- data/third_party/boringssl/crypto/evp/digestsign.c +86 -14
- data/third_party/boringssl/crypto/evp/evp.c +6 -11
- data/third_party/boringssl/crypto/evp/evp_asn1.c +17 -17
- data/third_party/boringssl/crypto/evp/evp_ctx.c +15 -11
- data/third_party/boringssl/crypto/evp/internal.h +66 -51
- data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +11 -11
- data/third_party/boringssl/crypto/evp/p_ec.c +10 -8
- data/third_party/boringssl/crypto/evp/p_ec_asn1.c +11 -12
- data/third_party/boringssl/crypto/evp/p_ed25519.c +71 -0
- data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +190 -0
- data/third_party/boringssl/crypto/evp/p_rsa.c +50 -95
- data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +28 -18
- data/third_party/boringssl/crypto/evp/pbkdf.c +49 -56
- data/third_party/boringssl/crypto/evp/print.c +5 -36
- data/third_party/boringssl/crypto/evp/scrypt.c +209 -0
- data/third_party/boringssl/crypto/ex_data.c +15 -45
- data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +100 -0
- data/third_party/boringssl/crypto/fipsmodule/bcm.c +679 -0
- data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/internal.h +40 -27
- data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/rsaz_exp.h +0 -0
- data/third_party/boringssl/crypto/{cipher → fipsmodule/cipher}/internal.h +34 -67
- data/third_party/boringssl/crypto/fipsmodule/delocate.h +88 -0
- data/third_party/boringssl/crypto/{des → fipsmodule/des}/internal.h +18 -4
- data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/internal.h +18 -18
- data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/md32_common.h +58 -64
- data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/internal.h +58 -52
- data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64-table.h +11 -11
- data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64.h +32 -32
- data/third_party/boringssl/crypto/{rand/internal.h → fipsmodule/is_fips.c} +10 -15
- data/third_party/boringssl/crypto/{modes → fipsmodule/modes}/internal.h +112 -119
- data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +92 -0
- data/third_party/boringssl/crypto/{rsa → fipsmodule/rsa}/internal.h +36 -49
- data/third_party/boringssl/crypto/hkdf/hkdf.c +6 -6
- data/third_party/boringssl/crypto/internal.h +301 -233
- data/third_party/boringssl/crypto/lhash/lhash.c +26 -45
- data/third_party/boringssl/crypto/mem.c +76 -33
- data/third_party/boringssl/crypto/obj/obj.c +44 -28
- data/third_party/boringssl/crypto/obj/obj_dat.h +102 -34
- data/third_party/boringssl/crypto/obj/obj_xref.c +6 -6
- data/third_party/boringssl/crypto/pem/pem_info.c +3 -5
- data/third_party/boringssl/crypto/pem/pem_lib.c +1 -6
- data/third_party/boringssl/crypto/pem/pem_pk8.c +1 -0
- data/third_party/boringssl/crypto/pem/pem_pkey.c +1 -1
- data/third_party/boringssl/crypto/pem/pem_xaux.c +0 -2
- data/third_party/boringssl/crypto/pkcs7/internal.h +49 -0
- data/third_party/boringssl/crypto/pkcs7/pkcs7.c +166 -0
- data/third_party/boringssl/crypto/{x509/pkcs7.c → pkcs7/pkcs7_x509.c} +27 -147
- data/third_party/boringssl/crypto/pkcs8/internal.h +34 -16
- data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +120 -39
- data/third_party/boringssl/crypto/pkcs8/pkcs8.c +144 -857
- data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +789 -0
- data/third_party/boringssl/crypto/poly1305/internal.h +4 -3
- data/third_party/boringssl/crypto/poly1305/poly1305.c +14 -14
- data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +11 -11
- data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +41 -41
- data/third_party/boringssl/crypto/pool/internal.h +2 -2
- data/third_party/boringssl/crypto/pool/pool.c +15 -15
- data/third_party/boringssl/crypto/{rand → rand_extra}/deterministic.c +7 -7
- data/third_party/boringssl/crypto/rand_extra/forkunsafe.c +46 -0
- data/third_party/boringssl/crypto/{rand → rand_extra}/fuchsia.c +7 -7
- data/third_party/boringssl/crypto/rand_extra/rand_extra.c +70 -0
- data/third_party/boringssl/crypto/{rand → rand_extra}/windows.c +5 -5
- data/third_party/boringssl/crypto/refcount_c11.c +2 -2
- data/third_party/boringssl/crypto/refcount_lock.c +1 -1
- data/third_party/boringssl/crypto/{rsa → rsa_extra}/rsa_asn1.c +12 -120
- data/third_party/boringssl/crypto/stack/stack.c +13 -13
- data/third_party/boringssl/crypto/thread_none.c +1 -1
- data/third_party/boringssl/crypto/thread_pthread.c +1 -1
- data/third_party/boringssl/crypto/thread_win.c +40 -40
- data/third_party/boringssl/crypto/x509/a_sign.c +5 -12
- data/third_party/boringssl/crypto/x509/a_verify.c +6 -18
- data/third_party/boringssl/crypto/x509/algorithm.c +22 -6
- data/third_party/boringssl/crypto/x509/asn1_gen.c +30 -7
- data/third_party/boringssl/crypto/x509/by_dir.c +2 -2
- data/third_party/boringssl/crypto/x509/by_file.c +2 -2
- data/third_party/boringssl/crypto/x509/rsa_pss.c +5 -5
- data/third_party/boringssl/crypto/x509/t_x509.c +2 -1
- data/third_party/boringssl/crypto/x509/x509_def.c +5 -0
- data/third_party/boringssl/crypto/x509/x509_lu.c +35 -4
- data/third_party/boringssl/crypto/x509/x509_set.c +10 -0
- data/third_party/boringssl/crypto/x509/x509_vfy.c +20 -17
- data/third_party/boringssl/crypto/x509/x_name.c +13 -16
- data/third_party/boringssl/crypto/x509/x_x509.c +3 -3
- data/third_party/boringssl/crypto/x509/x_x509a.c +0 -7
- data/third_party/boringssl/crypto/x509v3/ext_dat.h +8 -0
- data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
- data/third_party/boringssl/crypto/x509v3/pcy_lib.c +0 -9
- data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -1
- data/third_party/boringssl/crypto/x509v3/pcy_tree.c +25 -15
- data/third_party/boringssl/crypto/x509v3/v3_alt.c +21 -11
- data/third_party/boringssl/crypto/x509v3/v3_cpols.c +9 -3
- data/third_party/boringssl/crypto/x509v3/v3_info.c +22 -14
- data/third_party/boringssl/crypto/x509v3/v3_ncons.c +27 -11
- data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -33
- data/third_party/boringssl/crypto/x509v3/v3_utl.c +4 -4
- data/third_party/boringssl/include/openssl/aead.h +280 -191
- data/third_party/boringssl/include/openssl/aes.h +50 -50
- data/third_party/boringssl/include/openssl/arm_arch.h +12 -12
- data/third_party/boringssl/include/openssl/asn1.h +14 -77
- data/third_party/boringssl/include/openssl/asn1t.h +11 -15
- data/third_party/boringssl/include/openssl/base.h +78 -51
- data/third_party/boringssl/include/openssl/base64.h +68 -68
- data/third_party/boringssl/include/openssl/bio.h +472 -406
- data/third_party/boringssl/include/openssl/blowfish.h +1 -1
- data/third_party/boringssl/include/openssl/bn.h +454 -435
- data/third_party/boringssl/include/openssl/buf.h +27 -27
- data/third_party/boringssl/include/openssl/bytestring.h +282 -267
- data/third_party/boringssl/include/openssl/cast.h +2 -2
- data/third_party/boringssl/include/openssl/chacha.h +5 -5
- data/third_party/boringssl/include/openssl/cipher.h +209 -200
- data/third_party/boringssl/include/openssl/cmac.h +27 -27
- data/third_party/boringssl/include/openssl/conf.h +49 -46
- data/third_party/boringssl/include/openssl/cpu.h +60 -45
- data/third_party/boringssl/include/openssl/crypto.h +59 -35
- data/third_party/boringssl/include/openssl/curve25519.h +97 -92
- data/third_party/boringssl/include/openssl/des.h +25 -25
- data/third_party/boringssl/include/openssl/dh.h +98 -97
- data/third_party/boringssl/include/openssl/digest.h +143 -114
- data/third_party/boringssl/include/openssl/dsa.h +217 -202
- data/third_party/boringssl/include/openssl/ec.h +132 -131
- data/third_party/boringssl/include/openssl/ec_key.h +132 -128
- data/third_party/boringssl/include/openssl/ecdh.h +9 -9
- data/third_party/boringssl/include/openssl/ecdsa.h +66 -66
- data/third_party/boringssl/include/openssl/engine.h +38 -38
- data/third_party/boringssl/include/openssl/err.h +189 -219
- data/third_party/boringssl/include/openssl/evp.h +473 -397
- data/third_party/boringssl/include/openssl/ex_data.h +46 -56
- data/third_party/boringssl/include/openssl/hkdf.h +17 -17
- data/third_party/boringssl/include/openssl/hmac.h +55 -43
- data/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
- data/third_party/boringssl/include/openssl/lhash.h +67 -67
- data/third_party/boringssl/include/openssl/lhash_macros.h +4 -4
- data/third_party/boringssl/include/openssl/md4.h +14 -14
- data/third_party/boringssl/include/openssl/md5.h +14 -14
- data/third_party/boringssl/include/openssl/mem.h +39 -33
- data/third_party/boringssl/include/openssl/nid.h +43 -0
- data/third_party/boringssl/include/openssl/obj.h +93 -87
- data/third_party/boringssl/include/openssl/opensslconf.h +8 -1
- data/third_party/boringssl/include/openssl/pem.h +2 -122
- data/third_party/boringssl/include/openssl/pkcs7.h +68 -2
- data/third_party/boringssl/include/openssl/pkcs8.h +81 -66
- data/third_party/boringssl/include/openssl/poly1305.h +11 -11
- data/third_party/boringssl/include/openssl/pool.h +29 -25
- data/third_party/boringssl/include/openssl/rand.h +48 -45
- data/third_party/boringssl/include/openssl/rc4.h +9 -9
- data/third_party/boringssl/include/openssl/ripemd.h +13 -13
- data/third_party/boringssl/include/openssl/rsa.h +371 -340
- data/third_party/boringssl/include/openssl/sha.h +71 -71
- data/third_party/boringssl/include/openssl/span.h +191 -0
- data/third_party/boringssl/include/openssl/ssl.h +2639 -2519
- data/third_party/boringssl/include/openssl/ssl3.h +39 -122
- data/third_party/boringssl/include/openssl/stack.h +355 -164
- data/third_party/boringssl/include/openssl/thread.h +43 -43
- data/third_party/boringssl/include/openssl/tls1.h +60 -63
- data/third_party/boringssl/include/openssl/type_check.h +10 -14
- data/third_party/boringssl/include/openssl/x509.h +41 -116
- data/third_party/boringssl/include/openssl/x509_vfy.h +17 -25
- data/third_party/boringssl/include/openssl/x509v3.h +27 -21
- data/third_party/boringssl/ssl/{bio_ssl.c → bio_ssl.cc} +9 -5
- data/third_party/boringssl/ssl/{custom_extensions.c → custom_extensions.cc} +19 -12
- data/third_party/boringssl/ssl/{d1_both.c → d1_both.cc} +224 -193
- data/third_party/boringssl/ssl/{d1_lib.c → d1_lib.cc} +86 -79
- data/third_party/boringssl/ssl/{d1_pkt.c → d1_pkt.cc} +55 -87
- data/third_party/boringssl/ssl/{d1_srtp.c → d1_srtp.cc} +12 -16
- data/third_party/boringssl/ssl/{dtls_method.c → dtls_method.cc} +33 -50
- data/third_party/boringssl/ssl/{dtls_record.c → dtls_record.cc} +76 -64
- data/third_party/boringssl/ssl/handshake.cc +547 -0
- data/third_party/boringssl/ssl/handshake_client.cc +1828 -0
- data/third_party/boringssl/ssl/handshake_server.cc +1672 -0
- data/third_party/boringssl/ssl/internal.h +2027 -1280
- data/third_party/boringssl/ssl/s3_both.cc +603 -0
- data/third_party/boringssl/ssl/{s3_lib.c → s3_lib.cc} +22 -10
- data/third_party/boringssl/ssl/{s3_pkt.c → s3_pkt.cc} +171 -75
- data/third_party/boringssl/ssl/ssl_aead_ctx.cc +415 -0
- data/third_party/boringssl/ssl/{ssl_asn1.c → ssl_asn1.cc} +257 -261
- data/third_party/boringssl/ssl/{ssl_buffer.c → ssl_buffer.cc} +81 -97
- data/third_party/boringssl/ssl/{ssl_cert.c → ssl_cert.cc} +304 -414
- data/third_party/boringssl/ssl/{ssl_cipher.c → ssl_cipher.cc} +427 -505
- data/third_party/boringssl/ssl/{ssl_file.c → ssl_file.cc} +24 -16
- data/third_party/boringssl/ssl/ssl_key_share.cc +245 -0
- data/third_party/boringssl/ssl/{ssl_lib.c → ssl_lib.cc} +665 -828
- data/third_party/boringssl/ssl/ssl_privkey.cc +518 -0
- data/third_party/boringssl/ssl/{ssl_session.c → ssl_session.cc} +596 -471
- data/third_party/boringssl/ssl/{ssl_stat.c → ssl_stat.cc} +5 -224
- data/third_party/boringssl/ssl/{ssl_transcript.c → ssl_transcript.cc} +117 -140
- data/third_party/boringssl/ssl/ssl_versions.cc +439 -0
- data/third_party/boringssl/ssl/{ssl_x509.c → ssl_x509.cc} +751 -267
- data/third_party/boringssl/ssl/{t1_enc.c → t1_enc.cc} +120 -161
- data/third_party/boringssl/ssl/{t1_lib.c → t1_lib.cc} +859 -966
- data/third_party/boringssl/ssl/{tls13_both.c → tls13_both.cc} +202 -284
- data/third_party/boringssl/ssl/tls13_client.cc +842 -0
- data/third_party/boringssl/ssl/{tls13_enc.c → tls13_enc.cc} +108 -90
- data/third_party/boringssl/ssl/tls13_server.cc +967 -0
- data/third_party/boringssl/ssl/{tls_method.c → tls_method.cc} +94 -73
- data/third_party/boringssl/ssl/tls_record.cc +675 -0
- metadata +117 -168
- data/include/grpc/support/cmdline.h +0 -88
- data/include/grpc/support/subprocess.h +0 -44
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -29
- data/src/core/ext/filters/client_channel/resolver_factory.cc +0 -40
- data/src/core/lib/gpr/cmdline.cc +0 -330
- data/src/core/lib/gpr/subprocess_posix.cc +0 -99
- data/src/core/lib/gpr/subprocess_windows.cc +0 -126
- data/src/core/lib/surface/alarm.cc +0 -137
- data/src/core/lib/surface/alarm_internal.h +0 -40
- data/src/core/tsi/gts_transport_security.cc +0 -40
- data/third_party/boringssl/crypto/aes/aes.c +0 -1142
- data/third_party/boringssl/crypto/aes/internal.h +0 -87
- data/third_party/boringssl/crypto/aes/key_wrap.c +0 -138
- data/third_party/boringssl/crypto/aes/mode_wrappers.c +0 -112
- data/third_party/boringssl/crypto/asn1/x_long.c +0 -200
- data/third_party/boringssl/crypto/bn/add.c +0 -377
- data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -532
- data/third_party/boringssl/crypto/bn/bn.c +0 -365
- data/third_party/boringssl/crypto/bn/cmp.c +0 -239
- data/third_party/boringssl/crypto/bn/ctx.c +0 -313
- data/third_party/boringssl/crypto/bn/div.c +0 -728
- data/third_party/boringssl/crypto/bn/exponentiation.c +0 -1240
- data/third_party/boringssl/crypto/bn/gcd.c +0 -635
- data/third_party/boringssl/crypto/bn/generic.c +0 -707
- data/third_party/boringssl/crypto/bn/kronecker.c +0 -176
- data/third_party/boringssl/crypto/bn/montgomery.c +0 -409
- data/third_party/boringssl/crypto/bn/montgomery_inv.c +0 -207
- data/third_party/boringssl/crypto/bn/mul.c +0 -871
- data/third_party/boringssl/crypto/bn/prime.c +0 -861
- data/third_party/boringssl/crypto/bn/random.c +0 -343
- data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -254
- data/third_party/boringssl/crypto/bn/shift.c +0 -307
- data/third_party/boringssl/crypto/bn/sqrt.c +0 -506
- data/third_party/boringssl/crypto/cipher/aead.c +0 -156
- data/third_party/boringssl/crypto/cipher/cipher.c +0 -657
- data/third_party/boringssl/crypto/cipher/e_aes.c +0 -1771
- data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +0 -276
- data/third_party/boringssl/crypto/cipher/e_des.c +0 -205
- data/third_party/boringssl/crypto/cipher/tls_cbc.c +0 -482
- data/third_party/boringssl/crypto/des/des.c +0 -771
- data/third_party/boringssl/crypto/digest/digest.c +0 -251
- data/third_party/boringssl/crypto/digest/digests.c +0 -358
- data/third_party/boringssl/crypto/ec/ec.c +0 -847
- data/third_party/boringssl/crypto/ec/ec_key.c +0 -479
- data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -303
- data/third_party/boringssl/crypto/ec/oct.c +0 -416
- data/third_party/boringssl/crypto/ec/p224-64.c +0 -1143
- data/third_party/boringssl/crypto/ec/p256-64.c +0 -1701
- data/third_party/boringssl/crypto/ec/p256-x86_64.c +0 -561
- data/third_party/boringssl/crypto/ec/simple.c +0 -1118
- data/third_party/boringssl/crypto/ec/util-64.c +0 -109
- data/third_party/boringssl/crypto/ec/wnaf.c +0 -458
- data/third_party/boringssl/crypto/ecdsa/ecdsa.c +0 -479
- data/third_party/boringssl/crypto/hmac/hmac.c +0 -215
- data/third_party/boringssl/crypto/md4/md4.c +0 -236
- data/third_party/boringssl/crypto/md5/md5.c +0 -285
- data/third_party/boringssl/crypto/modes/cbc.c +0 -212
- data/third_party/boringssl/crypto/modes/cfb.c +0 -230
- data/third_party/boringssl/crypto/modes/ctr.c +0 -219
- data/third_party/boringssl/crypto/modes/gcm.c +0 -1071
- data/third_party/boringssl/crypto/modes/ofb.c +0 -95
- data/third_party/boringssl/crypto/modes/polyval.c +0 -94
- data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +0 -85
- data/third_party/boringssl/crypto/rand/rand.c +0 -244
- data/third_party/boringssl/crypto/rand/urandom.c +0 -335
- data/third_party/boringssl/crypto/rsa/blinding.c +0 -265
- data/third_party/boringssl/crypto/rsa/padding.c +0 -708
- data/third_party/boringssl/crypto/rsa/rsa.c +0 -830
- data/third_party/boringssl/crypto/rsa/rsa_impl.c +0 -1100
- data/third_party/boringssl/crypto/sha/sha1-altivec.c +0 -346
- data/third_party/boringssl/crypto/sha/sha1.c +0 -355
- data/third_party/boringssl/crypto/sha/sha256.c +0 -329
- data/third_party/boringssl/crypto/sha/sha512.c +0 -609
- data/third_party/boringssl/crypto/x509/x509type.c +0 -126
- data/third_party/boringssl/include/openssl/stack_macros.h +0 -3987
- data/third_party/boringssl/ssl/handshake_client.c +0 -1883
- data/third_party/boringssl/ssl/handshake_server.c +0 -1950
- data/third_party/boringssl/ssl/s3_both.c +0 -895
- data/third_party/boringssl/ssl/ssl_aead_ctx.c +0 -335
- data/third_party/boringssl/ssl/ssl_ecdh.c +0 -465
- data/third_party/boringssl/ssl/ssl_privkey.c +0 -683
- data/third_party/boringssl/ssl/ssl_privkey_cc.cc +0 -76
- data/third_party/boringssl/ssl/tls13_client.c +0 -712
- data/third_party/boringssl/ssl/tls13_server.c +0 -680
- data/third_party/boringssl/ssl/tls_record.c +0 -556
@@ -22,19 +22,17 @@
|
|
22
22
|
|
23
23
|
|
24
24
|
#if !defined(PPC_FEATURE2_HAS_VCRYPTO)
|
25
|
-
|
26
|
-
|
25
|
+
// PPC_FEATURE2_HAS_VCRYPTO was taken from section 4.1.2.3 of the “OpenPOWER
|
26
|
+
// ABI for Linux Supplement”.
|
27
27
|
#define PPC_FEATURE2_HAS_VCRYPTO 0x02000000
|
28
28
|
#endif
|
29
29
|
|
30
|
-
static unsigned long g_ppc64le_hwcap2 = 0;
|
31
|
-
|
32
30
|
void OPENSSL_cpuid_setup(void) {
|
33
|
-
|
31
|
+
OPENSSL_ppc64le_hwcap2 = getauxval(AT_HWCAP2);
|
34
32
|
}
|
35
33
|
|
36
34
|
int CRYPTO_is_PPC64LE_vcrypto_capable(void) {
|
37
|
-
return (
|
35
|
+
return (OPENSSL_ppc64le_hwcap2 & PPC_FEATURE2_HAS_VCRYPTO) != 0;
|
38
36
|
}
|
39
37
|
|
40
|
-
#endif
|
38
|
+
#endif // OPENSSL_PPC64LE
|
@@ -23,14 +23,14 @@
|
|
23
23
|
(defined(OPENSSL_X86) || defined(OPENSSL_X86_64) || \
|
24
24
|
defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64) || \
|
25
25
|
defined(OPENSSL_PPC64LE))
|
26
|
-
|
27
|
-
|
28
|
-
|
26
|
+
// x86, x86_64, the ARMs and ppc64le need to record the result of a
|
27
|
+
// cpuid/getauxval call for the asm to work correctly, unless compiled without
|
28
|
+
// asm code.
|
29
29
|
#define NEED_CPUID
|
30
30
|
|
31
31
|
#else
|
32
32
|
|
33
|
-
|
33
|
+
// Otherwise, don't emit a static initialiser.
|
34
34
|
|
35
35
|
#if !defined(BORINGSSL_NO_STATIC_INITIALIZER)
|
36
36
|
#define BORINGSSL_NO_STATIC_INITIALIZER
|
@@ -40,23 +40,29 @@
|
|
40
40
|
OPENSSL_ARM || OPENSSL_AARCH64) */
|
41
41
|
|
42
42
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
43
|
+
// The capability variables are defined in this file in order to work around a
|
44
|
+
// linker bug. When linking with a .a, if no symbols in a .o are referenced
|
45
|
+
// then the .o is discarded, even if it has constructor functions.
|
46
|
+
//
|
47
|
+
// This still means that any binaries that don't include some functionality
|
48
|
+
// that tests the capability values will still skip the constructor but, so
|
49
|
+
// far, the init constructor function only sets the capability variables.
|
50
50
|
|
51
51
|
#if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
52
|
+
|
53
|
+
// This value must be explicitly initialised to zero in order to work around a
|
54
|
+
// bug in libtool or the linker on OS X.
|
55
|
+
//
|
56
|
+
// If not initialised then it becomes a "common symbol". When put into an
|
57
|
+
// archive, linking on OS X will fail to resolve common symbols. By
|
58
|
+
// initialising it to zero, it becomes a "data symbol", which isn't so
|
59
|
+
// affected.
|
59
60
|
uint32_t OPENSSL_ia32cap_P[4] = {0};
|
61
|
+
|
62
|
+
#elif defined(OPENSSL_PPC64LE)
|
63
|
+
|
64
|
+
unsigned long OPENSSL_ppc64le_hwcap2 = 0;
|
65
|
+
|
60
66
|
#elif defined(OPENSSL_ARM) || defined(OPENSSL_AARCH64)
|
61
67
|
|
62
68
|
#include <openssl/arm_arch.h>
|
@@ -67,16 +73,16 @@ uint32_t OPENSSL_armcap_P =
|
|
67
73
|
#if defined(OPENSSL_STATIC_ARMCAP_NEON) || defined(__ARM_NEON__)
|
68
74
|
ARMV7_NEON |
|
69
75
|
#endif
|
70
|
-
#if defined(OPENSSL_STATIC_ARMCAP_AES)
|
76
|
+
#if defined(OPENSSL_STATIC_ARMCAP_AES) || defined(__ARM_FEATURE_CRYPTO)
|
71
77
|
ARMV8_AES |
|
72
78
|
#endif
|
73
|
-
#if defined(OPENSSL_STATIC_ARMCAP_SHA1)
|
79
|
+
#if defined(OPENSSL_STATIC_ARMCAP_SHA1) || defined(__ARM_FEATURE_CRYPTO)
|
74
80
|
ARMV8_SHA1 |
|
75
81
|
#endif
|
76
|
-
#if defined(OPENSSL_STATIC_ARMCAP_SHA256)
|
82
|
+
#if defined(OPENSSL_STATIC_ARMCAP_SHA256) || defined(__ARM_FEATURE_CRYPTO)
|
77
83
|
ARMV8_SHA256 |
|
78
84
|
#endif
|
79
|
-
#if defined(OPENSSL_STATIC_ARMCAP_PMULL)
|
85
|
+
#if defined(OPENSSL_STATIC_ARMCAP_PMULL) || defined(__ARM_FEATURE_CRYPTO)
|
80
86
|
ARMV8_PMULL |
|
81
87
|
#endif
|
82
88
|
0;
|
@@ -87,6 +93,11 @@ uint32_t OPENSSL_armcap_P = 0;
|
|
87
93
|
|
88
94
|
#endif
|
89
95
|
|
96
|
+
#if defined(BORINGSSL_FIPS)
|
97
|
+
// In FIPS mode, the power-on self-test function calls |CRYPTO_library_init|
|
98
|
+
// because we have to ensure that CPUID detection occurs first.
|
99
|
+
#define BORINGSSL_NO_STATIC_INITIALIZER
|
100
|
+
#endif
|
90
101
|
|
91
102
|
#if defined(OPENSSL_WINDOWS) && !defined(BORINGSSL_NO_STATIC_INITIALIZER)
|
92
103
|
#define OPENSSL_CDECL __cdecl
|
@@ -96,7 +107,7 @@ uint32_t OPENSSL_armcap_P = 0;
|
|
96
107
|
|
97
108
|
#if defined(BORINGSSL_NO_STATIC_INITIALIZER)
|
98
109
|
static CRYPTO_once_t once = CRYPTO_ONCE_INIT;
|
99
|
-
#elif defined(
|
110
|
+
#elif defined(_MSC_VER)
|
100
111
|
#pragma section(".CRT$XCU", read)
|
101
112
|
static void __cdecl do_library_init(void);
|
102
113
|
__declspec(allocate(".CRT$XCU")) void(*library_init_constructor)(void) =
|
@@ -105,21 +116,21 @@ __declspec(allocate(".CRT$XCU")) void(*library_init_constructor)(void) =
|
|
105
116
|
static void do_library_init(void) __attribute__ ((constructor));
|
106
117
|
#endif
|
107
118
|
|
108
|
-
|
109
|
-
|
110
|
-
|
119
|
+
// do_library_init is the actual initialization function. If
|
120
|
+
// BORINGSSL_NO_STATIC_INITIALIZER isn't defined, this is set as a static
|
121
|
+
// initializer. Otherwise, it is called by CRYPTO_library_init.
|
111
122
|
static void OPENSSL_CDECL do_library_init(void) {
|
112
|
-
|
113
|
-
|
123
|
+
// WARNING: this function may only configure the capability variables. See the
|
124
|
+
// note above about the linker bug.
|
114
125
|
#if defined(NEED_CPUID)
|
115
126
|
OPENSSL_cpuid_setup();
|
116
127
|
#endif
|
117
128
|
}
|
118
129
|
|
119
130
|
void CRYPTO_library_init(void) {
|
120
|
-
|
121
|
-
|
122
|
-
|
131
|
+
// TODO(davidben): It would be tidier if this build knob could be replaced
|
132
|
+
// with an internal lazy-init mechanism that would handle things correctly
|
133
|
+
// in-library. https://crbug.com/542879
|
123
134
|
#if defined(BORINGSSL_NO_STATIC_INITIALIZER)
|
124
135
|
CRYPTO_once(&once, do_library_init);
|
125
136
|
#endif
|
@@ -145,10 +156,18 @@ const char *SSLeay_version(int unused) {
|
|
145
156
|
return "BoringSSL";
|
146
157
|
}
|
147
158
|
|
159
|
+
const char *OpenSSL_version(int unused) {
|
160
|
+
return "BoringSSL";
|
161
|
+
}
|
162
|
+
|
148
163
|
unsigned long SSLeay(void) {
|
149
164
|
return OPENSSL_VERSION_NUMBER;
|
150
165
|
}
|
151
166
|
|
167
|
+
unsigned long OpenSSL_version_num(void) {
|
168
|
+
return OPENSSL_VERSION_NUMBER;
|
169
|
+
}
|
170
|
+
|
152
171
|
int CRYPTO_malloc_init(void) {
|
153
172
|
return 1;
|
154
173
|
}
|
@@ -161,4 +180,7 @@ int ENGINE_register_all_complete(void) {
|
|
161
180
|
|
162
181
|
void OPENSSL_load_builtin_modules(void) {}
|
163
182
|
|
164
|
-
int
|
183
|
+
int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings) {
|
184
|
+
CRYPTO_library_init();
|
185
|
+
return 1;
|
186
|
+
}
|
@@ -12,12 +12,12 @@
|
|
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
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
15
|
+
// This code is mostly taken from the ref10 version of Ed25519 in SUPERCOP
|
16
|
+
// 20141124 (http://bench.cr.yp.to/supercop.html). That code is released as
|
17
|
+
// public domain but this file has the ISC license just to keep licencing
|
18
|
+
// simple.
|
19
|
+
//
|
20
|
+
// The field functions are shared by Ed25519 and X25519 where possible.
|
21
21
|
|
22
22
|
#include <openssl/curve25519.h>
|
23
23
|
|
@@ -55,7 +55,7 @@ static uint64_t load_4(const uint8_t *in) {
|
|
55
55
|
}
|
56
56
|
|
57
57
|
static void fe_frombytes(fe h, const uint8_t *s) {
|
58
|
-
|
58
|
+
// Ignores top bit of h.
|
59
59
|
int64_t h0 = load_4(s);
|
60
60
|
int64_t h1 = load_3(s + 4) << 6;
|
61
61
|
int64_t h2 = load_3(s + 7) << 5;
|
@@ -101,28 +101,28 @@ static void fe_frombytes(fe h, const uint8_t *s) {
|
|
101
101
|
h[9] = h9;
|
102
102
|
}
|
103
103
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
104
|
+
// Preconditions:
|
105
|
+
// |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
|
106
|
+
//
|
107
|
+
// Write p=2^255-19; q=floor(h/p).
|
108
|
+
// Basic claim: q = floor(2^(-255)(h + 19 2^(-25)h9 + 2^(-1))).
|
109
|
+
//
|
110
|
+
// Proof:
|
111
|
+
// Have |h|<=p so |q|<=1 so |19^2 2^(-255) q|<1/4.
|
112
|
+
// Also have |h-2^230 h9|<2^231 so |19 2^(-255)(h-2^230 h9)|<1/4.
|
113
|
+
//
|
114
|
+
// Write y=2^(-1)-19^2 2^(-255)q-19 2^(-255)(h-2^230 h9).
|
115
|
+
// Then 0<y<1.
|
116
|
+
//
|
117
|
+
// Write r=h-pq.
|
118
|
+
// Have 0<=r<=p-1=2^255-20.
|
119
|
+
// Thus 0<=r+19(2^-255)r<r+19(2^-255)2^255<=2^255-1.
|
120
|
+
//
|
121
|
+
// Write x=r+19(2^-255)r+y.
|
122
|
+
// Then 0<x<2^255 so floor(2^(-255)x) = 0 so floor(q+2^(-255)x) = q.
|
123
|
+
//
|
124
|
+
// Have q+2^(-255)x = 2^(-255)(h + 19 2^(-25) h9 + 2^(-1))
|
125
|
+
// so floor(2^(-255)(h + 19 2^(-25) h9 + 2^(-1))) = q.
|
126
126
|
static void fe_tobytes(uint8_t *s, const fe h) {
|
127
127
|
int32_t h0 = h[0];
|
128
128
|
int32_t h1 = h[1];
|
@@ -148,9 +148,9 @@ static void fe_tobytes(uint8_t *s, const fe h) {
|
|
148
148
|
q = (h8 + q) >> 26;
|
149
149
|
q = (h9 + q) >> 25;
|
150
150
|
|
151
|
-
|
151
|
+
// Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20.
|
152
152
|
h0 += 19 * q;
|
153
|
-
|
153
|
+
// Goal: Output h-2^255 q, which is between 0 and 2^255-20.
|
154
154
|
|
155
155
|
h1 += h0 >> 26; h0 &= kBottom26Bits;
|
156
156
|
h2 += h1 >> 25; h1 &= kBottom25Bits;
|
@@ -162,12 +162,12 @@ static void fe_tobytes(uint8_t *s, const fe h) {
|
|
162
162
|
h8 += h7 >> 25; h7 &= kBottom25Bits;
|
163
163
|
h9 += h8 >> 26; h8 &= kBottom26Bits;
|
164
164
|
h9 &= kBottom25Bits;
|
165
|
-
|
165
|
+
// h10 = carry9
|
166
166
|
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
167
|
+
// Goal: Output h0+...+2^255 h10-2^255 q, which is between 0 and 2^255-20.
|
168
|
+
// Have h0+...+2^230 h9 between 0 and 2^255-1;
|
169
|
+
// evidently 2^255 h10-2^255 q = 0.
|
170
|
+
// Goal: Output h0+...+2^230 h9.
|
171
171
|
|
172
172
|
s[0] = h0 >> 0;
|
173
173
|
s[1] = h0 >> 8;
|
@@ -203,29 +203,29 @@ static void fe_tobytes(uint8_t *s, const fe h) {
|
|
203
203
|
s[31] = h9 >> 18;
|
204
204
|
}
|
205
205
|
|
206
|
-
|
206
|
+
// h = f
|
207
207
|
static void fe_copy(fe h, const fe f) {
|
208
208
|
OPENSSL_memmove(h, f, sizeof(int32_t) * 10);
|
209
209
|
}
|
210
210
|
|
211
|
-
|
211
|
+
// h = 0
|
212
212
|
static void fe_0(fe h) { OPENSSL_memset(h, 0, sizeof(int32_t) * 10); }
|
213
213
|
|
214
|
-
|
214
|
+
// h = 1
|
215
215
|
static void fe_1(fe h) {
|
216
216
|
OPENSSL_memset(h, 0, sizeof(int32_t) * 10);
|
217
217
|
h[0] = 1;
|
218
218
|
}
|
219
219
|
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
220
|
+
// h = f + g
|
221
|
+
// Can overlap h with f or g.
|
222
|
+
//
|
223
|
+
// Preconditions:
|
224
|
+
// |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
|
225
|
+
// |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
|
226
|
+
//
|
227
|
+
// Postconditions:
|
228
|
+
// |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
|
229
229
|
static void fe_add(fe h, const fe f, const fe g) {
|
230
230
|
unsigned i;
|
231
231
|
for (i = 0; i < 10; i++) {
|
@@ -233,15 +233,15 @@ static void fe_add(fe h, const fe f, const fe g) {
|
|
233
233
|
}
|
234
234
|
}
|
235
235
|
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
236
|
+
// h = f - g
|
237
|
+
// Can overlap h with f or g.
|
238
|
+
//
|
239
|
+
// Preconditions:
|
240
|
+
// |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
|
241
|
+
// |g| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
|
242
|
+
//
|
243
|
+
// Postconditions:
|
244
|
+
// |h| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
|
245
245
|
static void fe_sub(fe h, const fe f, const fe g) {
|
246
246
|
unsigned i;
|
247
247
|
for (i = 0; i < 10; i++) {
|
@@ -249,33 +249,33 @@ static void fe_sub(fe h, const fe f, const fe g) {
|
|
249
249
|
}
|
250
250
|
}
|
251
251
|
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
|
278
|
-
|
252
|
+
// h = f * g
|
253
|
+
// Can overlap h with f or g.
|
254
|
+
//
|
255
|
+
// Preconditions:
|
256
|
+
// |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
|
257
|
+
// |g| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
|
258
|
+
//
|
259
|
+
// Postconditions:
|
260
|
+
// |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
|
261
|
+
//
|
262
|
+
// Notes on implementation strategy:
|
263
|
+
//
|
264
|
+
// Using schoolbook multiplication.
|
265
|
+
// Karatsuba would save a little in some cost models.
|
266
|
+
//
|
267
|
+
// Most multiplications by 2 and 19 are 32-bit precomputations;
|
268
|
+
// cheaper than 64-bit postcomputations.
|
269
|
+
//
|
270
|
+
// There is one remaining multiplication by 19 in the carry chain;
|
271
|
+
// one *19 precomputation can be merged into this,
|
272
|
+
// but the resulting data flow is considerably less clean.
|
273
|
+
//
|
274
|
+
// There are 12 carries below.
|
275
|
+
// 10 of them are 2-way parallelizable and vectorizable.
|
276
|
+
// Can get away with 11 carries, but then data flow is much deeper.
|
277
|
+
//
|
278
|
+
// With tighter constraints on inputs can squeeze carries into int32.
|
279
279
|
static void fe_mul(fe h, const fe f, const fe g) {
|
280
280
|
int32_t f0 = f[0];
|
281
281
|
int32_t f1 = f[1];
|
@@ -297,8 +297,8 @@ static void fe_mul(fe h, const fe f, const fe g) {
|
|
297
297
|
int32_t g7 = g[7];
|
298
298
|
int32_t g8 = g[8];
|
299
299
|
int32_t g9 = g[9];
|
300
|
-
int32_t g1_19 = 19 * g1;
|
301
|
-
int32_t g2_19 = 19 * g2;
|
300
|
+
int32_t g1_19 = 19 * g1; // 1.959375*2^29
|
301
|
+
int32_t g2_19 = 19 * g2; // 1.959375*2^30; still ok
|
302
302
|
int32_t g3_19 = 19 * g3;
|
303
303
|
int32_t g4_19 = 19 * g4;
|
304
304
|
int32_t g5_19 = 19 * g5;
|
@@ -432,53 +432,53 @@ static void fe_mul(fe h, const fe f, const fe g) {
|
|
432
432
|
int64_t carry8;
|
433
433
|
int64_t carry9;
|
434
434
|
|
435
|
-
|
436
|
-
|
437
|
-
|
438
|
-
|
435
|
+
// |h0| <= (1.65*1.65*2^52*(1+19+19+19+19)+1.65*1.65*2^50*(38+38+38+38+38))
|
436
|
+
// i.e. |h0| <= 1.4*2^60; narrower ranges for h2, h4, h6, h8
|
437
|
+
// |h1| <= (1.65*1.65*2^51*(1+1+19+19+19+19+19+19+19+19))
|
438
|
+
// i.e. |h1| <= 1.7*2^59; narrower ranges for h3, h5, h7, h9
|
439
439
|
|
440
440
|
carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
|
441
441
|
carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
|
442
|
-
|
443
|
-
|
444
|
-
|
445
|
-
|
442
|
+
// |h0| <= 2^25
|
443
|
+
// |h4| <= 2^25
|
444
|
+
// |h1| <= 1.71*2^59
|
445
|
+
// |h5| <= 1.71*2^59
|
446
446
|
|
447
447
|
carry1 = h1 + (1 << 24); h2 += carry1 >> 25; h1 -= carry1 & kTop39Bits;
|
448
448
|
carry5 = h5 + (1 << 24); h6 += carry5 >> 25; h5 -= carry5 & kTop39Bits;
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
|
449
|
+
// |h1| <= 2^24; from now on fits into int32
|
450
|
+
// |h5| <= 2^24; from now on fits into int32
|
451
|
+
// |h2| <= 1.41*2^60
|
452
|
+
// |h6| <= 1.41*2^60
|
453
453
|
|
454
454
|
carry2 = h2 + (1 << 25); h3 += carry2 >> 26; h2 -= carry2 & kTop38Bits;
|
455
455
|
carry6 = h6 + (1 << 25); h7 += carry6 >> 26; h6 -= carry6 & kTop38Bits;
|
456
|
-
|
457
|
-
|
458
|
-
|
459
|
-
|
456
|
+
// |h2| <= 2^25; from now on fits into int32 unchanged
|
457
|
+
// |h6| <= 2^25; from now on fits into int32 unchanged
|
458
|
+
// |h3| <= 1.71*2^59
|
459
|
+
// |h7| <= 1.71*2^59
|
460
460
|
|
461
461
|
carry3 = h3 + (1 << 24); h4 += carry3 >> 25; h3 -= carry3 & kTop39Bits;
|
462
462
|
carry7 = h7 + (1 << 24); h8 += carry7 >> 25; h7 -= carry7 & kTop39Bits;
|
463
|
-
|
464
|
-
|
465
|
-
|
466
|
-
|
463
|
+
// |h3| <= 2^24; from now on fits into int32 unchanged
|
464
|
+
// |h7| <= 2^24; from now on fits into int32 unchanged
|
465
|
+
// |h4| <= 1.72*2^34
|
466
|
+
// |h8| <= 1.41*2^60
|
467
467
|
|
468
468
|
carry4 = h4 + (1 << 25); h5 += carry4 >> 26; h4 -= carry4 & kTop38Bits;
|
469
469
|
carry8 = h8 + (1 << 25); h9 += carry8 >> 26; h8 -= carry8 & kTop38Bits;
|
470
|
-
|
471
|
-
|
472
|
-
|
473
|
-
|
470
|
+
// |h4| <= 2^25; from now on fits into int32 unchanged
|
471
|
+
// |h8| <= 2^25; from now on fits into int32 unchanged
|
472
|
+
// |h5| <= 1.01*2^24
|
473
|
+
// |h9| <= 1.71*2^59
|
474
474
|
|
475
475
|
carry9 = h9 + (1 << 24); h0 += (carry9 >> 25) * 19; h9 -= carry9 & kTop39Bits;
|
476
|
-
|
477
|
-
|
476
|
+
// |h9| <= 2^24; from now on fits into int32 unchanged
|
477
|
+
// |h0| <= 1.1*2^39
|
478
478
|
|
479
479
|
carry0 = h0 + (1 << 25); h1 += carry0 >> 26; h0 -= carry0 & kTop38Bits;
|
480
|
-
|
481
|
-
|
480
|
+
// |h0| <= 2^25; from now on fits into int32 unchanged
|
481
|
+
// |h1| <= 1.01*2^24
|
482
482
|
|
483
483
|
h[0] = h0;
|
484
484
|
h[1] = h1;
|
@@ -492,16 +492,16 @@ static void fe_mul(fe h, const fe f, const fe g) {
|
|
492
492
|
h[9] = h9;
|
493
493
|
}
|
494
494
|
|
495
|
-
|
496
|
-
|
497
|
-
|
498
|
-
|
499
|
-
|
500
|
-
|
501
|
-
|
502
|
-
|
503
|
-
|
504
|
-
|
495
|
+
// h = f * f
|
496
|
+
// Can overlap h with f.
|
497
|
+
//
|
498
|
+
// Preconditions:
|
499
|
+
// |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
|
500
|
+
//
|
501
|
+
// Postconditions:
|
502
|
+
// |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
|
503
|
+
//
|
504
|
+
// See fe_mul.c for discussion of implementation strategy.
|
505
505
|
static void fe_sq(fe h, const fe f) {
|
506
506
|
int32_t f0 = f[0];
|
507
507
|
int32_t f1 = f[1];
|
@@ -521,11 +521,11 @@ static void fe_sq(fe h, const fe f) {
|
|
521
521
|
int32_t f5_2 = 2 * f5;
|
522
522
|
int32_t f6_2 = 2 * f6;
|
523
523
|
int32_t f7_2 = 2 * f7;
|
524
|
-
int32_t f5_38 = 38 * f5;
|
525
|
-
int32_t f6_19 = 19 * f6;
|
526
|
-
int32_t f7_38 = 38 * f7;
|
527
|
-
int32_t f8_19 = 19 * f8;
|
528
|
-
int32_t f9_38 = 38 * f9;
|
524
|
+
int32_t f5_38 = 38 * f5; // 1.959375*2^30
|
525
|
+
int32_t f6_19 = 19 * f6; // 1.959375*2^30
|
526
|
+
int32_t f7_38 = 38 * f7; // 1.959375*2^30
|
527
|
+
int32_t f8_19 = 19 * f8; // 1.959375*2^30
|
528
|
+
int32_t f9_38 = 38 * f9; // 1.959375*2^30
|
529
529
|
int64_t f0f0 = f0 * (int64_t) f0;
|
530
530
|
int64_t f0f1_2 = f0_2 * (int64_t) f1;
|
531
531
|
int64_t f0f2_2 = f0_2 * (int64_t) f2;
|
@@ -691,13 +691,13 @@ static void fe_invert(fe out, const fe z) {
|
|
691
691
|
fe_mul(out, t1, t0);
|
692
692
|
}
|
693
693
|
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
694
|
+
// h = -f
|
695
|
+
//
|
696
|
+
// Preconditions:
|
697
|
+
// |f| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
|
698
|
+
//
|
699
|
+
// Postconditions:
|
700
|
+
// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
|
701
701
|
static void fe_neg(fe h, const fe f) {
|
702
702
|
unsigned i;
|
703
703
|
for (i = 0; i < 10; i++) {
|
@@ -705,10 +705,10 @@ static void fe_neg(fe h, const fe f) {
|
|
705
705
|
}
|
706
706
|
}
|
707
707
|
|
708
|
-
|
709
|
-
|
710
|
-
|
711
|
-
|
708
|
+
// Replace (f,g) with (g,g) if b == 1;
|
709
|
+
// replace (f,g) with (f,g) if b == 0.
|
710
|
+
//
|
711
|
+
// Preconditions: b in {0,1}.
|
712
712
|
static void fe_cmov(fe f, const fe g, unsigned b) {
|
713
713
|
b = 0-b;
|
714
714
|
unsigned i;
|
@@ -719,11 +719,11 @@ static void fe_cmov(fe f, const fe g, unsigned b) {
|
|
719
719
|
}
|
720
720
|
}
|
721
721
|
|
722
|
-
|
723
|
-
|
724
|
-
|
725
|
-
|
726
|
-
|
722
|
+
// return 0 if f == 0
|
723
|
+
// return 1 if f != 0
|
724
|
+
//
|
725
|
+
// Preconditions:
|
726
|
+
// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
|
727
727
|
static int fe_isnonzero(const fe f) {
|
728
728
|
uint8_t s[32];
|
729
729
|
fe_tobytes(s, f);
|
@@ -732,27 +732,27 @@ static int fe_isnonzero(const fe f) {
|
|
732
732
|
return CRYPTO_memcmp(s, zero, sizeof(zero)) != 0;
|
733
733
|
}
|
734
734
|
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
735
|
+
// return 1 if f is in {1,3,5,...,q-2}
|
736
|
+
// return 0 if f is in {0,2,4,...,q-1}
|
737
|
+
//
|
738
|
+
// Preconditions:
|
739
|
+
// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
|
740
740
|
static int fe_isnegative(const fe f) {
|
741
741
|
uint8_t s[32];
|
742
742
|
fe_tobytes(s, f);
|
743
743
|
return s[0] & 1;
|
744
744
|
}
|
745
745
|
|
746
|
-
|
747
|
-
|
748
|
-
|
749
|
-
|
750
|
-
|
751
|
-
|
752
|
-
|
753
|
-
|
754
|
-
|
755
|
-
|
746
|
+
// h = 2 * f * f
|
747
|
+
// Can overlap h with f.
|
748
|
+
//
|
749
|
+
// Preconditions:
|
750
|
+
// |f| bounded by 1.65*2^26,1.65*2^25,1.65*2^26,1.65*2^25,etc.
|
751
|
+
//
|
752
|
+
// Postconditions:
|
753
|
+
// |h| bounded by 1.01*2^25,1.01*2^24,1.01*2^25,1.01*2^24,etc.
|
754
|
+
//
|
755
|
+
// See fe_mul.c for discussion of implementation strategy.
|
756
756
|
static void fe_sq2(fe h, const fe f) {
|
757
757
|
int32_t f0 = f[0];
|
758
758
|
int32_t f1 = f[1];
|
@@ -772,11 +772,11 @@ static void fe_sq2(fe h, const fe f) {
|
|
772
772
|
int32_t f5_2 = 2 * f5;
|
773
773
|
int32_t f6_2 = 2 * f6;
|
774
774
|
int32_t f7_2 = 2 * f7;
|
775
|
-
int32_t f5_38 = 38 * f5;
|
776
|
-
int32_t f6_19 = 19 * f6;
|
777
|
-
int32_t f7_38 = 38 * f7;
|
778
|
-
int32_t f8_19 = 19 * f8;
|
779
|
-
int32_t f9_38 = 38 * f9;
|
775
|
+
int32_t f5_38 = 38 * f5; // 1.959375*2^30
|
776
|
+
int32_t f6_19 = 19 * f6; // 1.959375*2^30
|
777
|
+
int32_t f7_38 = 38 * f7; // 1.959375*2^30
|
778
|
+
int32_t f8_19 = 19 * f8; // 1.959375*2^30
|
779
|
+
int32_t f9_38 = 38 * f9; // 1.959375*2^30
|
780
780
|
int64_t f0f0 = f0 * (int64_t) f0;
|
781
781
|
int64_t f0f1_2 = f0_2 * (int64_t) f1;
|
782
782
|
int64_t f0f2_2 = f0_2 * (int64_t) f2;
|
@@ -993,24 +993,24 @@ int x25519_ge_frombytes_vartime(ge_p3 *h, const uint8_t *s) {
|
|
993
993
|
fe_1(h->Z);
|
994
994
|
fe_sq(u, h->Y);
|
995
995
|
fe_mul(v, u, d);
|
996
|
-
fe_sub(u, u, h->Z);
|
997
|
-
fe_add(v, v, h->Z);
|
996
|
+
fe_sub(u, u, h->Z); // u = y^2-1
|
997
|
+
fe_add(v, v, h->Z); // v = dy^2+1
|
998
998
|
|
999
999
|
fe_sq(v3, v);
|
1000
|
-
fe_mul(v3, v3, v);
|
1000
|
+
fe_mul(v3, v3, v); // v3 = v^3
|
1001
1001
|
fe_sq(h->X, v3);
|
1002
1002
|
fe_mul(h->X, h->X, v);
|
1003
|
-
fe_mul(h->X, h->X, u);
|
1003
|
+
fe_mul(h->X, h->X, u); // x = uv^7
|
1004
1004
|
|
1005
|
-
fe_pow22523(h->X, h->X);
|
1005
|
+
fe_pow22523(h->X, h->X); // x = (uv^7)^((q-5)/8)
|
1006
1006
|
fe_mul(h->X, h->X, v3);
|
1007
|
-
fe_mul(h->X, h->X, u);
|
1007
|
+
fe_mul(h->X, h->X, u); // x = uv^3(uv^7)^((q-5)/8)
|
1008
1008
|
|
1009
1009
|
fe_sq(vxx, h->X);
|
1010
1010
|
fe_mul(vxx, vxx, v);
|
1011
|
-
fe_sub(check, vxx, u);
|
1011
|
+
fe_sub(check, vxx, u); // vx^2-u
|
1012
1012
|
if (fe_isnonzero(check)) {
|
1013
|
-
fe_add(check, vxx, u);
|
1013
|
+
fe_add(check, vxx, u); // vx^2+u
|
1014
1014
|
if (fe_isnonzero(check)) {
|
1015
1015
|
return -1;
|
1016
1016
|
}
|
@@ -1051,7 +1051,7 @@ static void ge_precomp_0(ge_precomp *h) {
|
|
1051
1051
|
fe_0(h->xy2d);
|
1052
1052
|
}
|
1053
1053
|
|
1054
|
-
|
1054
|
+
// r = p
|
1055
1055
|
static void ge_p3_to_p2(ge_p2 *r, const ge_p3 *p) {
|
1056
1056
|
fe_copy(r->X, p->X);
|
1057
1057
|
fe_copy(r->Y, p->Y);
|
@@ -1061,7 +1061,7 @@ static void ge_p3_to_p2(ge_p2 *r, const ge_p3 *p) {
|
|
1061
1061
|
static const fe d2 = {-21827239, -5839606, -30745221, 13898782, 229458,
|
1062
1062
|
15978800, -12551817, -6495438, 29715968, 9444199};
|
1063
1063
|
|
1064
|
-
|
1064
|
+
// r = p
|
1065
1065
|
void x25519_ge_p3_to_cached(ge_cached *r, const ge_p3 *p) {
|
1066
1066
|
fe_add(r->YplusX, p->Y, p->X);
|
1067
1067
|
fe_sub(r->YminusX, p->Y, p->X);
|
@@ -1069,14 +1069,14 @@ void x25519_ge_p3_to_cached(ge_cached *r, const ge_p3 *p) {
|
|
1069
1069
|
fe_mul(r->T2d, p->T, d2);
|
1070
1070
|
}
|
1071
1071
|
|
1072
|
-
|
1072
|
+
// r = p
|
1073
1073
|
void x25519_ge_p1p1_to_p2(ge_p2 *r, const ge_p1p1 *p) {
|
1074
1074
|
fe_mul(r->X, p->X, p->T);
|
1075
1075
|
fe_mul(r->Y, p->Y, p->Z);
|
1076
1076
|
fe_mul(r->Z, p->Z, p->T);
|
1077
1077
|
}
|
1078
1078
|
|
1079
|
-
|
1079
|
+
// r = p
|
1080
1080
|
void x25519_ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p) {
|
1081
1081
|
fe_mul(r->X, p->X, p->T);
|
1082
1082
|
fe_mul(r->Y, p->Y, p->Z);
|
@@ -1084,14 +1084,14 @@ void x25519_ge_p1p1_to_p3(ge_p3 *r, const ge_p1p1 *p) {
|
|
1084
1084
|
fe_mul(r->T, p->X, p->Y);
|
1085
1085
|
}
|
1086
1086
|
|
1087
|
-
|
1087
|
+
// r = p
|
1088
1088
|
static void ge_p1p1_to_cached(ge_cached *r, const ge_p1p1 *p) {
|
1089
1089
|
ge_p3 t;
|
1090
1090
|
x25519_ge_p1p1_to_p3(&t, p);
|
1091
1091
|
x25519_ge_p3_to_cached(r, &t);
|
1092
1092
|
}
|
1093
1093
|
|
1094
|
-
|
1094
|
+
// r = 2 * p
|
1095
1095
|
static void ge_p2_dbl(ge_p1p1 *r, const ge_p2 *p) {
|
1096
1096
|
fe t0;
|
1097
1097
|
|
@@ -1106,14 +1106,14 @@ static void ge_p2_dbl(ge_p1p1 *r, const ge_p2 *p) {
|
|
1106
1106
|
fe_sub(r->T, r->T, r->Z);
|
1107
1107
|
}
|
1108
1108
|
|
1109
|
-
|
1109
|
+
// r = 2 * p
|
1110
1110
|
static void ge_p3_dbl(ge_p1p1 *r, const ge_p3 *p) {
|
1111
1111
|
ge_p2 q;
|
1112
1112
|
ge_p3_to_p2(&q, p);
|
1113
1113
|
ge_p2_dbl(r, &q);
|
1114
1114
|
}
|
1115
1115
|
|
1116
|
-
|
1116
|
+
// r = p + q
|
1117
1117
|
static void ge_madd(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) {
|
1118
1118
|
fe t0;
|
1119
1119
|
|
@@ -1129,7 +1129,7 @@ static void ge_madd(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) {
|
|
1129
1129
|
fe_sub(r->T, t0, r->T);
|
1130
1130
|
}
|
1131
1131
|
|
1132
|
-
|
1132
|
+
// r = p - q
|
1133
1133
|
static void ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) {
|
1134
1134
|
fe t0;
|
1135
1135
|
|
@@ -1145,7 +1145,7 @@ static void ge_msub(ge_p1p1 *r, const ge_p3 *p, const ge_precomp *q) {
|
|
1145
1145
|
fe_add(r->T, t0, r->T);
|
1146
1146
|
}
|
1147
1147
|
|
1148
|
-
|
1148
|
+
// r = p + q
|
1149
1149
|
void x25519_ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) {
|
1150
1150
|
fe t0;
|
1151
1151
|
|
@@ -1162,7 +1162,7 @@ void x25519_ge_add(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) {
|
|
1162
1162
|
fe_sub(r->T, t0, r->T);
|
1163
1163
|
}
|
1164
1164
|
|
1165
|
-
|
1165
|
+
// r = p - q
|
1166
1166
|
void x25519_ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) {
|
1167
1167
|
fe t0;
|
1168
1168
|
|
@@ -1182,10 +1182,10 @@ void x25519_ge_sub(ge_p1p1 *r, const ge_p3 *p, const ge_cached *q) {
|
|
1182
1182
|
static uint8_t equal(signed char b, signed char c) {
|
1183
1183
|
uint8_t ub = b;
|
1184
1184
|
uint8_t uc = c;
|
1185
|
-
uint8_t x = ub ^ uc;
|
1186
|
-
uint32_t y = x;
|
1187
|
-
y -= 1;
|
1188
|
-
y >>= 31;
|
1185
|
+
uint8_t x = ub ^ uc; // 0: yes; 1..255: no
|
1186
|
+
uint32_t y = x; // 0: yes; 1..255: no
|
1187
|
+
y -= 1; // 4294967295: yes; 0..254: no
|
1188
|
+
y >>= 31; // 1: yes; 0: no
|
1189
1189
|
return y;
|
1190
1190
|
}
|
1191
1191
|
|
@@ -1197,8 +1197,8 @@ static void cmov(ge_precomp *t, const ge_precomp *u, uint8_t b) {
|
|
1197
1197
|
|
1198
1198
|
void x25519_ge_scalarmult_small_precomp(
|
1199
1199
|
ge_p3 *h, const uint8_t a[32], const uint8_t precomp_table[15 * 2 * 32]) {
|
1200
|
-
|
1201
|
-
|
1200
|
+
// precomp_table is first expanded into matching |ge_precomp|
|
1201
|
+
// elements.
|
1202
1202
|
ge_precomp multiples[15];
|
1203
1203
|
|
1204
1204
|
unsigned i;
|
@@ -1215,9 +1215,9 @@ void x25519_ge_scalarmult_small_precomp(
|
|
1215
1215
|
fe_mul(out->xy2d, out->xy2d, d2);
|
1216
1216
|
}
|
1217
1217
|
|
1218
|
-
|
1219
|
-
|
1220
|
-
|
1218
|
+
// See the comment above |k25519SmallPrecomp| about the structure of the
|
1219
|
+
// precomputed elements. This loop does 64 additions and 64 doublings to
|
1220
|
+
// calculate the result.
|
1221
1221
|
ge_p3_0(h);
|
1222
1222
|
|
1223
1223
|
for (i = 63; i < 64; i--) {
|
@@ -1249,14 +1249,14 @@ void x25519_ge_scalarmult_small_precomp(
|
|
1249
1249
|
|
1250
1250
|
#if defined(OPENSSL_SMALL)
|
1251
1251
|
|
1252
|
-
|
1253
|
-
|
1254
|
-
|
1255
|
-
|
1256
|
-
|
1257
|
-
|
1258
|
-
|
1259
|
-
|
1252
|
+
// This block of code replaces the standard base-point table with a much smaller
|
1253
|
+
// one. The standard table is 30,720 bytes while this one is just 960.
|
1254
|
+
//
|
1255
|
+
// This table contains 15 pairs of group elements, (x, y), where each field
|
1256
|
+
// element is serialised with |fe_tobytes|. If |i| is the index of the group
|
1257
|
+
// element then consider i+1 as a four-bit number: (i₀, i₁, i₂, i₃) (where i₀
|
1258
|
+
// is the most significant bit). The value of the group element is then:
|
1259
|
+
// (i₀×2^192 + i₁×2^128 + i₂×2^64 + i₃)G, where G is the generator.
|
1260
1260
|
static const uint8_t k25519SmallPrecomp[15 * 2 * 32] = {
|
1261
1261
|
0x1a, 0xd5, 0x25, 0x8f, 0x60, 0x2d, 0x56, 0xc9, 0xb2, 0xa7, 0x25, 0x95,
|
1262
1262
|
0x60, 0xc7, 0x2c, 0x69, 0x5c, 0xdc, 0xd6, 0xfd, 0x31, 0xe2, 0xa4, 0xc0,
|
@@ -1346,7 +1346,7 @@ void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t a[32]) {
|
|
1346
1346
|
|
1347
1347
|
#else
|
1348
1348
|
|
1349
|
-
|
1349
|
+
// k25519Precomp[i][j] = (j+1)*256^i*B
|
1350
1350
|
static const ge_precomp k25519Precomp[32][8] = {
|
1351
1351
|
{
|
1352
1352
|
{
|
@@ -3464,7 +3464,7 @@ static const ge_precomp k25519Precomp[32][8] = {
|
|
3464
3464
|
|
3465
3465
|
static uint8_t negative(signed char b) {
|
3466
3466
|
uint32_t x = b;
|
3467
|
-
x >>= 31;
|
3467
|
+
x >>= 31; // 1: yes; 0: no
|
3468
3468
|
return x;
|
3469
3469
|
}
|
3470
3470
|
|
@@ -3488,12 +3488,12 @@ static void table_select(ge_precomp *t, int pos, signed char b) {
|
|
3488
3488
|
cmov(t, &minust, bnegative);
|
3489
3489
|
}
|
3490
3490
|
|
3491
|
-
|
3492
|
-
|
3493
|
-
|
3494
|
-
|
3495
|
-
|
3496
|
-
|
3491
|
+
// h = a * B
|
3492
|
+
// where a = a[0]+256*a[1]+...+256^31 a[31]
|
3493
|
+
// B is the Ed25519 base point (x,4/5) with x positive.
|
3494
|
+
//
|
3495
|
+
// Preconditions:
|
3496
|
+
// a[31] <= 127
|
3497
3497
|
void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t *a) {
|
3498
3498
|
signed char e[64];
|
3499
3499
|
signed char carry;
|
@@ -3506,8 +3506,8 @@ void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t *a) {
|
|
3506
3506
|
e[2 * i + 0] = (a[i] >> 0) & 15;
|
3507
3507
|
e[2 * i + 1] = (a[i] >> 4) & 15;
|
3508
3508
|
}
|
3509
|
-
|
3510
|
-
|
3509
|
+
// each e[i] is between 0 and 15
|
3510
|
+
// e[63] is between 0 and 7
|
3511
3511
|
|
3512
3512
|
carry = 0;
|
3513
3513
|
for (i = 0; i < 63; ++i) {
|
@@ -3517,7 +3517,7 @@ void x25519_ge_scalarmult_base(ge_p3 *h, const uint8_t *a) {
|
|
3517
3517
|
e[i] -= carry << 4;
|
3518
3518
|
}
|
3519
3519
|
e[63] += carry;
|
3520
|
-
|
3520
|
+
// each e[i] is between -8 and 8
|
3521
3521
|
|
3522
3522
|
ge_p3_0(h);
|
3523
3523
|
for (i = 1; i < 64; i += 2) {
|
@@ -3551,8 +3551,8 @@ static void cmov_cached(ge_cached *t, ge_cached *u, uint8_t b) {
|
|
3551
3551
|
fe_cmov(t->T2d, u->T2d, b);
|
3552
3552
|
}
|
3553
3553
|
|
3554
|
-
|
3555
|
-
|
3554
|
+
// r = scalar * A.
|
3555
|
+
// where a = a[0]+256*a[1]+...+256^31 a[31].
|
3556
3556
|
void x25519_ge_scalarmult(ge_p2 *r, const uint8_t *scalar, const ge_p3 *A) {
|
3557
3557
|
ge_p2 Ai_p2[8];
|
3558
3558
|
ge_cached Ai[16];
|
@@ -3706,15 +3706,15 @@ static const ge_precomp Bi[8] = {
|
|
3706
3706
|
},
|
3707
3707
|
};
|
3708
3708
|
|
3709
|
-
|
3710
|
-
|
3711
|
-
|
3712
|
-
|
3709
|
+
// r = a * A + b * B
|
3710
|
+
// where a = a[0]+256*a[1]+...+256^31 a[31].
|
3711
|
+
// and b = b[0]+256*b[1]+...+256^31 b[31].
|
3712
|
+
// B is the Ed25519 base point (x,4/5) with x positive.
|
3713
3713
|
static void ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a,
|
3714
3714
|
const ge_p3 *A, const uint8_t *b) {
|
3715
3715
|
signed char aslide[256];
|
3716
3716
|
signed char bslide[256];
|
3717
|
-
ge_cached Ai[8];
|
3717
|
+
ge_cached Ai[8]; // A,3A,5A,7A,9A,11A,13A,15A
|
3718
3718
|
ge_p1p1 t;
|
3719
3719
|
ge_p3 u;
|
3720
3720
|
ge_p3 A2;
|
@@ -3779,16 +3779,16 @@ static void ge_double_scalarmult_vartime(ge_p2 *r, const uint8_t *a,
|
|
3779
3779
|
}
|
3780
3780
|
}
|
3781
3781
|
|
3782
|
-
|
3783
|
-
|
3782
|
+
// The set of scalars is \Z/l
|
3783
|
+
// where l = 2^252 + 27742317777372353535851937790883648493.
|
3784
3784
|
|
3785
|
-
|
3786
|
-
|
3787
|
-
|
3788
|
-
|
3789
|
-
|
3790
|
-
|
3791
|
-
|
3785
|
+
// Input:
|
3786
|
+
// s[0]+256*s[1]+...+256^63*s[63] = s
|
3787
|
+
//
|
3788
|
+
// Output:
|
3789
|
+
// s[0]+256*s[1]+...+256^31*s[31] = s mod l
|
3790
|
+
// where l = 2^252 + 27742317777372353535851937790883648493.
|
3791
|
+
// Overwrites s in place.
|
3792
3792
|
void x25519_sc_reduce(uint8_t *s) {
|
3793
3793
|
int64_t s0 = 2097151 & load_3(s);
|
3794
3794
|
int64_t s1 = 2097151 & (load_4(s + 2) >> 5);
|
@@ -4122,14 +4122,14 @@ void x25519_sc_reduce(uint8_t *s) {
|
|
4122
4122
|
s[31] = s11 >> 17;
|
4123
4123
|
}
|
4124
4124
|
|
4125
|
-
|
4126
|
-
|
4127
|
-
|
4128
|
-
|
4129
|
-
|
4130
|
-
|
4131
|
-
|
4132
|
-
|
4125
|
+
// Input:
|
4126
|
+
// a[0]+256*a[1]+...+256^31*a[31] = a
|
4127
|
+
// b[0]+256*b[1]+...+256^31*b[31] = b
|
4128
|
+
// c[0]+256*c[1]+...+256^31*c[31] = c
|
4129
|
+
//
|
4130
|
+
// Output:
|
4131
|
+
// s[0]+256*s[1]+...+256^31*s[31] = (ab+c) mod l
|
4132
|
+
// where l = 2^252 + 27742317777372353535851937790883648493.
|
4133
4133
|
static void sc_muladd(uint8_t *s, const uint8_t *a, const uint8_t *b,
|
4134
4134
|
const uint8_t *c) {
|
4135
4135
|
int64_t a0 = 2097151 & load_3(a);
|
@@ -4716,10 +4716,10 @@ static void x25519_scalar_mult(uint8_t out[32], const uint8_t scalar[32],
|
|
4716
4716
|
|
4717
4717
|
#else
|
4718
4718
|
|
4719
|
-
|
4720
|
-
|
4721
|
-
|
4722
|
-
|
4719
|
+
// Replace (f,g) with (g,f) if b == 1;
|
4720
|
+
// replace (f,g) with (f,g) if b == 0.
|
4721
|
+
//
|
4722
|
+
// Preconditions: b in {0,1}.
|
4723
4723
|
static void fe_cswap(fe f, fe g, unsigned int b) {
|
4724
4724
|
b = 0-b;
|
4725
4725
|
unsigned i;
|
@@ -4731,14 +4731,14 @@ static void fe_cswap(fe f, fe g, unsigned int b) {
|
|
4731
4731
|
}
|
4732
4732
|
}
|
4733
4733
|
|
4734
|
-
|
4735
|
-
|
4736
|
-
|
4737
|
-
|
4738
|
-
|
4739
|
-
|
4740
|
-
|
4741
|
-
|
4734
|
+
// h = f * 121666
|
4735
|
+
// Can overlap h with f.
|
4736
|
+
//
|
4737
|
+
// Preconditions:
|
4738
|
+
// |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
|
4739
|
+
//
|
4740
|
+
// Postconditions:
|
4741
|
+
// |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc.
|
4742
4742
|
static void fe_mul121666(fe h, fe f) {
|
4743
4743
|
int32_t f0 = f[0];
|
4744
4744
|
int32_t f1 = f[1];
|
@@ -4858,25 +4858,25 @@ static void x25519_scalar_mult(uint8_t out[32], const uint8_t scalar[32],
|
|
4858
4858
|
x25519_scalar_mult_generic(out, scalar, point);
|
4859
4859
|
}
|
4860
4860
|
|
4861
|
-
#endif
|
4861
|
+
#endif // BORINGSSL_X25519_X86_64
|
4862
4862
|
|
4863
4863
|
|
4864
4864
|
void X25519_keypair(uint8_t out_public_value[32], uint8_t out_private_key[32]) {
|
4865
4865
|
RAND_bytes(out_private_key, 32);
|
4866
4866
|
|
4867
|
-
|
4868
|
-
|
4869
|
-
|
4870
|
-
|
4871
|
-
|
4872
|
-
|
4873
|
-
|
4874
|
-
|
4875
|
-
|
4876
|
-
|
4877
|
-
|
4878
|
-
|
4879
|
-
|
4867
|
+
// All X25519 implementations should decode scalars correctly (see
|
4868
|
+
// https://tools.ietf.org/html/rfc7748#section-5). However, if an
|
4869
|
+
// implementation doesn't then it might interoperate with random keys a
|
4870
|
+
// fraction of the time because they'll, randomly, happen to be correctly
|
4871
|
+
// formed.
|
4872
|
+
//
|
4873
|
+
// Thus we do the opposite of the masking here to make sure that our private
|
4874
|
+
// keys are never correctly masked and so, hopefully, any incorrect
|
4875
|
+
// implementations are deterministically broken.
|
4876
|
+
//
|
4877
|
+
// This does not affect security because, although we're throwing away
|
4878
|
+
// entropy, a valid implementation of scalarmult should throw away the exact
|
4879
|
+
// same bits anyway.
|
4880
4880
|
out_private_key[0] |= 7;
|
4881
4881
|
out_private_key[31] &= 63;
|
4882
4882
|
out_private_key[31] |= 128;
|
@@ -4888,15 +4888,15 @@ int X25519(uint8_t out_shared_key[32], const uint8_t private_key[32],
|
|
4888
4888
|
const uint8_t peer_public_value[32]) {
|
4889
4889
|
static const uint8_t kZeros[32] = {0};
|
4890
4890
|
x25519_scalar_mult(out_shared_key, private_key, peer_public_value);
|
4891
|
-
|
4891
|
+
// The all-zero output results when the input is a point of small order.
|
4892
4892
|
return CRYPTO_memcmp(kZeros, out_shared_key, 32) != 0;
|
4893
4893
|
}
|
4894
4894
|
|
4895
4895
|
#if defined(BORINGSSL_X25519_X86_64)
|
4896
4896
|
|
4897
|
-
|
4898
|
-
|
4899
|
-
|
4897
|
+
// When |BORINGSSL_X25519_X86_64| is set, base point multiplication is done with
|
4898
|
+
// the Montgomery ladder because it's faster. Otherwise it's done using the
|
4899
|
+
// Ed25519 tables.
|
4900
4900
|
|
4901
4901
|
void X25519_public_from_private(uint8_t out_public_value[32],
|
4902
4902
|
const uint8_t private_key[32]) {
|
@@ -4925,8 +4925,8 @@ void X25519_public_from_private(uint8_t out_public_value[32],
|
|
4925
4925
|
ge_p3 A;
|
4926
4926
|
x25519_ge_scalarmult_base(&A, e);
|
4927
4927
|
|
4928
|
-
|
4929
|
-
|
4928
|
+
// We only need the u-coordinate of the curve25519 point. The map is
|
4929
|
+
// u=(y+1)/(1-y). Since y=Y/Z, this gives u=(Z+Y)/(Z-Y).
|
4930
4930
|
fe zplusy, zminusy, zminusy_inv;
|
4931
4931
|
fe_add(zplusy, A.Z, A.Y);
|
4932
4932
|
fe_sub(zminusy, A.Z, A.Y);
|
@@ -4935,4 +4935,4 @@ void X25519_public_from_private(uint8_t out_public_value[32],
|
|
4935
4935
|
fe_tobytes(out_public_value, zplusy);
|
4936
4936
|
}
|
4937
4937
|
|
4938
|
-
#endif
|
4938
|
+
#endif // BORINGSSL_X25519_X86_64
|