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
@@ -126,25 +126,25 @@
|
|
126
126
|
#include <openssl/base.h>
|
127
127
|
#include <openssl/thread.h>
|
128
128
|
|
129
|
-
#include <inttypes.h>
|
130
|
-
#include <stdio.h>
|
129
|
+
#include <inttypes.h> // for PRIu64 and friends
|
130
|
+
#include <stdio.h> // for FILE*
|
131
131
|
|
132
132
|
#if defined(__cplusplus)
|
133
133
|
extern "C" {
|
134
134
|
#endif
|
135
135
|
|
136
136
|
|
137
|
-
|
138
|
-
|
139
|
-
|
137
|
+
// BN provides support for working with arbitrary sized integers. For example,
|
138
|
+
// although the largest integer supported by the compiler might be 64 bits, BN
|
139
|
+
// will allow you to work with numbers until you run out of memory.
|
140
140
|
|
141
141
|
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
142
|
+
// BN_ULONG is the native word size when working with big integers.
|
143
|
+
//
|
144
|
+
// Note: on some platforms, inttypes.h does not define print format macros in
|
145
|
+
// C++ unless |__STDC_FORMAT_MACROS| defined. As this is a public header, bn.h
|
146
|
+
// does not define |__STDC_FORMAT_MACROS| itself. C++ source files which use the
|
147
|
+
// FMT macros must define it externally.
|
148
148
|
#if defined(OPENSSL_64_BIT)
|
149
149
|
#define BN_ULONG uint64_t
|
150
150
|
#define BN_BITS2 64
|
@@ -164,699 +164,703 @@ extern "C" {
|
|
164
164
|
#endif
|
165
165
|
|
166
166
|
|
167
|
-
|
167
|
+
// Allocation and freeing.
|
168
168
|
|
169
|
-
|
169
|
+
// BN_new creates a new, allocated BIGNUM and initialises it.
|
170
170
|
OPENSSL_EXPORT BIGNUM *BN_new(void);
|
171
171
|
|
172
|
-
|
172
|
+
// BN_init initialises a stack allocated |BIGNUM|.
|
173
173
|
OPENSSL_EXPORT void BN_init(BIGNUM *bn);
|
174
174
|
|
175
|
-
|
176
|
-
|
175
|
+
// BN_free frees the data referenced by |bn| and, if |bn| was originally
|
176
|
+
// allocated on the heap, frees |bn| also.
|
177
177
|
OPENSSL_EXPORT void BN_free(BIGNUM *bn);
|
178
178
|
|
179
|
-
|
180
|
-
|
179
|
+
// BN_clear_free erases and frees the data referenced by |bn| and, if |bn| was
|
180
|
+
// originally allocated on the heap, frees |bn| also.
|
181
181
|
OPENSSL_EXPORT void BN_clear_free(BIGNUM *bn);
|
182
182
|
|
183
|
-
|
184
|
-
|
183
|
+
// BN_dup allocates a new BIGNUM and sets it equal to |src|. It returns the
|
184
|
+
// allocated BIGNUM on success or NULL otherwise.
|
185
185
|
OPENSSL_EXPORT BIGNUM *BN_dup(const BIGNUM *src);
|
186
186
|
|
187
|
-
|
188
|
-
|
187
|
+
// BN_copy sets |dest| equal to |src| and returns |dest| or NULL on allocation
|
188
|
+
// failure.
|
189
189
|
OPENSSL_EXPORT BIGNUM *BN_copy(BIGNUM *dest, const BIGNUM *src);
|
190
190
|
|
191
|
-
|
191
|
+
// BN_clear sets |bn| to zero and erases the old data.
|
192
192
|
OPENSSL_EXPORT void BN_clear(BIGNUM *bn);
|
193
193
|
|
194
|
-
|
194
|
+
// BN_value_one returns a static BIGNUM with value 1.
|
195
195
|
OPENSSL_EXPORT const BIGNUM *BN_value_one(void);
|
196
196
|
|
197
197
|
|
198
|
-
|
198
|
+
// Basic functions.
|
199
199
|
|
200
|
-
|
201
|
-
|
200
|
+
// BN_num_bits returns the minimum number of bits needed to represent the
|
201
|
+
// absolute value of |bn|.
|
202
202
|
OPENSSL_EXPORT unsigned BN_num_bits(const BIGNUM *bn);
|
203
203
|
|
204
|
-
|
205
|
-
|
204
|
+
// BN_num_bytes returns the minimum number of bytes needed to represent the
|
205
|
+
// absolute value of |bn|.
|
206
206
|
OPENSSL_EXPORT unsigned BN_num_bytes(const BIGNUM *bn);
|
207
207
|
|
208
|
-
|
208
|
+
// BN_zero sets |bn| to zero.
|
209
209
|
OPENSSL_EXPORT void BN_zero(BIGNUM *bn);
|
210
210
|
|
211
|
-
|
212
|
-
|
211
|
+
// BN_one sets |bn| to one. It returns one on success or zero on allocation
|
212
|
+
// failure.
|
213
213
|
OPENSSL_EXPORT int BN_one(BIGNUM *bn);
|
214
214
|
|
215
|
-
|
216
|
-
|
215
|
+
// BN_set_word sets |bn| to |value|. It returns one on success or zero on
|
216
|
+
// allocation failure.
|
217
217
|
OPENSSL_EXPORT int BN_set_word(BIGNUM *bn, BN_ULONG value);
|
218
218
|
|
219
|
-
|
220
|
-
|
219
|
+
// BN_set_u64 sets |bn| to |value|. It returns one on success or zero on
|
220
|
+
// allocation failure.
|
221
221
|
OPENSSL_EXPORT int BN_set_u64(BIGNUM *bn, uint64_t value);
|
222
222
|
|
223
|
-
|
223
|
+
// BN_set_negative sets the sign of |bn|.
|
224
224
|
OPENSSL_EXPORT void BN_set_negative(BIGNUM *bn, int sign);
|
225
225
|
|
226
|
-
|
226
|
+
// BN_is_negative returns one if |bn| is negative and zero otherwise.
|
227
227
|
OPENSSL_EXPORT int BN_is_negative(const BIGNUM *bn);
|
228
228
|
|
229
229
|
|
230
|
-
|
230
|
+
// Conversion functions.
|
231
231
|
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
232
|
+
// BN_bin2bn sets |*ret| to the value of |len| bytes from |in|, interpreted as
|
233
|
+
// a big-endian number, and returns |ret|. If |ret| is NULL then a fresh
|
234
|
+
// |BIGNUM| is allocated and returned. It returns NULL on allocation
|
235
|
+
// failure.
|
236
236
|
OPENSSL_EXPORT BIGNUM *BN_bin2bn(const uint8_t *in, size_t len, BIGNUM *ret);
|
237
237
|
|
238
|
-
|
239
|
-
|
240
|
-
|
238
|
+
// BN_bn2bin serialises the absolute value of |in| to |out| as a big-endian
|
239
|
+
// integer, which must have |BN_num_bytes| of space available. It returns the
|
240
|
+
// number of bytes written.
|
241
241
|
OPENSSL_EXPORT size_t BN_bn2bin(const BIGNUM *in, uint8_t *out);
|
242
242
|
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
243
|
+
// BN_le2bn sets |*ret| to the value of |len| bytes from |in|, interpreted as
|
244
|
+
// a little-endian number, and returns |ret|. If |ret| is NULL then a fresh
|
245
|
+
// |BIGNUM| is allocated and returned. It returns NULL on allocation
|
246
|
+
// failure.
|
247
247
|
OPENSSL_EXPORT BIGNUM *BN_le2bn(const uint8_t *in, size_t len, BIGNUM *ret);
|
248
248
|
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
249
|
+
// BN_bn2le_padded serialises the absolute value of |in| to |out| as a
|
250
|
+
// little-endian integer, which must have |len| of space available, padding
|
251
|
+
// out the remainder of out with zeros. If |len| is smaller than |BN_num_bytes|,
|
252
|
+
// the function fails and returns 0. Otherwise, it returns 1.
|
253
253
|
OPENSSL_EXPORT int BN_bn2le_padded(uint8_t *out, size_t len, const BIGNUM *in);
|
254
254
|
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
255
|
+
// BN_bn2bin_padded serialises the absolute value of |in| to |out| as a
|
256
|
+
// big-endian integer. The integer is padded with leading zeros up to size
|
257
|
+
// |len|. If |len| is smaller than |BN_num_bytes|, the function fails and
|
258
|
+
// returns 0. Otherwise, it returns 1.
|
259
259
|
OPENSSL_EXPORT int BN_bn2bin_padded(uint8_t *out, size_t len, const BIGNUM *in);
|
260
260
|
|
261
|
-
|
261
|
+
// BN_bn2cbb_padded behaves like |BN_bn2bin_padded| but writes to a |CBB|.
|
262
262
|
OPENSSL_EXPORT int BN_bn2cbb_padded(CBB *out, size_t len, const BIGNUM *in);
|
263
263
|
|
264
|
-
|
265
|
-
|
266
|
-
|
264
|
+
// BN_bn2hex returns an allocated string that contains a NUL-terminated, hex
|
265
|
+
// representation of |bn|. If |bn| is negative, the first char in the resulting
|
266
|
+
// string will be '-'. Returns NULL on allocation failure.
|
267
267
|
OPENSSL_EXPORT char *BN_bn2hex(const BIGNUM *bn);
|
268
268
|
|
269
|
-
|
270
|
-
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
269
|
+
// BN_hex2bn parses the leading hex number from |in|, which may be proceeded by
|
270
|
+
// a '-' to indicate a negative number and may contain trailing, non-hex data.
|
271
|
+
// If |outp| is not NULL, it constructs a BIGNUM equal to the hex number and
|
272
|
+
// stores it in |*outp|. If |*outp| is NULL then it allocates a new BIGNUM and
|
273
|
+
// updates |*outp|. It returns the number of bytes of |in| processed or zero on
|
274
|
+
// error.
|
275
275
|
OPENSSL_EXPORT int BN_hex2bn(BIGNUM **outp, const char *in);
|
276
276
|
|
277
|
-
|
278
|
-
|
279
|
-
|
277
|
+
// BN_bn2dec returns an allocated string that contains a NUL-terminated,
|
278
|
+
// decimal representation of |bn|. If |bn| is negative, the first char in the
|
279
|
+
// resulting string will be '-'. Returns NULL on allocation failure.
|
280
280
|
OPENSSL_EXPORT char *BN_bn2dec(const BIGNUM *a);
|
281
281
|
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
282
|
+
// BN_dec2bn parses the leading decimal number from |in|, which may be
|
283
|
+
// proceeded by a '-' to indicate a negative number and may contain trailing,
|
284
|
+
// non-decimal data. If |outp| is not NULL, it constructs a BIGNUM equal to the
|
285
|
+
// decimal number and stores it in |*outp|. If |*outp| is NULL then it
|
286
|
+
// allocates a new BIGNUM and updates |*outp|. It returns the number of bytes
|
287
|
+
// of |in| processed or zero on error.
|
288
288
|
OPENSSL_EXPORT int BN_dec2bn(BIGNUM **outp, const char *in);
|
289
289
|
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
290
|
+
// BN_asc2bn acts like |BN_dec2bn| or |BN_hex2bn| depending on whether |in|
|
291
|
+
// begins with "0X" or "0x" (indicating hex) or not (indicating decimal). A
|
292
|
+
// leading '-' is still permitted and comes before the optional 0X/0x. It
|
293
|
+
// returns one on success or zero on error.
|
294
294
|
OPENSSL_EXPORT int BN_asc2bn(BIGNUM **outp, const char *in);
|
295
295
|
|
296
|
-
|
297
|
-
|
296
|
+
// BN_print writes a hex encoding of |a| to |bio|. It returns one on success
|
297
|
+
// and zero on error.
|
298
298
|
OPENSSL_EXPORT int BN_print(BIO *bio, const BIGNUM *a);
|
299
299
|
|
300
|
-
|
300
|
+
// BN_print_fp acts like |BIO_print|, but wraps |fp| in a |BIO| first.
|
301
301
|
OPENSSL_EXPORT int BN_print_fp(FILE *fp, const BIGNUM *a);
|
302
302
|
|
303
|
-
|
304
|
-
|
305
|
-
|
303
|
+
// BN_get_word returns the absolute value of |bn| as a single word. If |bn| is
|
304
|
+
// too large to be represented as a single word, the maximum possible value
|
305
|
+
// will be returned.
|
306
306
|
OPENSSL_EXPORT BN_ULONG BN_get_word(const BIGNUM *bn);
|
307
307
|
|
308
|
-
|
309
|
-
|
310
|
-
|
308
|
+
// BN_get_u64 sets |*out| to the absolute value of |bn| as a |uint64_t| and
|
309
|
+
// returns one. If |bn| is too large to be represented as a |uint64_t|, it
|
310
|
+
// returns zero.
|
311
311
|
OPENSSL_EXPORT int BN_get_u64(const BIGNUM *bn, uint64_t *out);
|
312
312
|
|
313
313
|
|
314
|
-
|
314
|
+
// ASN.1 functions.
|
315
315
|
|
316
|
-
|
317
|
-
|
316
|
+
// BN_parse_asn1_unsigned parses a non-negative DER INTEGER from |cbs| writes
|
317
|
+
// the result to |ret|. It returns one on success and zero on failure.
|
318
318
|
OPENSSL_EXPORT int BN_parse_asn1_unsigned(CBS *cbs, BIGNUM *ret);
|
319
319
|
|
320
|
-
|
321
|
-
|
320
|
+
// BN_parse_asn1_unsigned_buggy acts like |BN_parse_asn1_unsigned| but tolerates
|
321
|
+
// some invalid encodings. Do not use this function.
|
322
322
|
OPENSSL_EXPORT int BN_parse_asn1_unsigned_buggy(CBS *cbs, BIGNUM *ret);
|
323
323
|
|
324
|
-
|
325
|
-
|
324
|
+
// BN_marshal_asn1 marshals |bn| as a non-negative DER INTEGER and appends the
|
325
|
+
// result to |cbb|. It returns one on success and zero on failure.
|
326
326
|
OPENSSL_EXPORT int BN_marshal_asn1(CBB *cbb, const BIGNUM *bn);
|
327
327
|
|
328
328
|
|
329
|
-
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
*
|
347
|
-
* Certain BIGNUM operations need to use many temporary variables and
|
348
|
-
* allocating and freeing them can be quite slow. Thus such operations typically
|
349
|
-
* take a |BN_CTX| parameter, which contains a pool of |BIGNUMs|. The |ctx|
|
350
|
-
* argument to a public function may be NULL, in which case a local |BN_CTX|
|
351
|
-
* will be created just for the lifetime of that call.
|
352
|
-
*
|
353
|
-
* A function must call |BN_CTX_start| first. Then, |BN_CTX_get| may be called
|
354
|
-
* repeatedly to obtain temporary |BIGNUM|s. All |BN_CTX_get| calls must be made
|
355
|
-
* before calling any other functions that use the |ctx| as an argument.
|
356
|
-
*
|
357
|
-
* Finally, |BN_CTX_end| must be called before returning from the function.
|
358
|
-
* When |BN_CTX_end| is called, the |BIGNUM| pointers obtained from
|
359
|
-
* |BN_CTX_get| become invalid. */
|
360
|
-
|
361
|
-
/* BN_CTX_new returns a new, empty BN_CTX or NULL on allocation failure. */
|
329
|
+
// BIGNUM pools.
|
330
|
+
//
|
331
|
+
// Certain BIGNUM operations need to use many temporary variables and
|
332
|
+
// allocating and freeing them can be quite slow. Thus such operations typically
|
333
|
+
// take a |BN_CTX| parameter, which contains a pool of |BIGNUMs|. The |ctx|
|
334
|
+
// argument to a public function may be NULL, in which case a local |BN_CTX|
|
335
|
+
// will be created just for the lifetime of that call.
|
336
|
+
//
|
337
|
+
// A function must call |BN_CTX_start| first. Then, |BN_CTX_get| may be called
|
338
|
+
// repeatedly to obtain temporary |BIGNUM|s. All |BN_CTX_get| calls must be made
|
339
|
+
// before calling any other functions that use the |ctx| as an argument.
|
340
|
+
//
|
341
|
+
// Finally, |BN_CTX_end| must be called before returning from the function.
|
342
|
+
// When |BN_CTX_end| is called, the |BIGNUM| pointers obtained from
|
343
|
+
// |BN_CTX_get| become invalid.
|
344
|
+
|
345
|
+
// BN_CTX_new returns a new, empty BN_CTX or NULL on allocation failure.
|
362
346
|
OPENSSL_EXPORT BN_CTX *BN_CTX_new(void);
|
363
347
|
|
364
|
-
|
365
|
-
|
348
|
+
// BN_CTX_free frees all BIGNUMs contained in |ctx| and then frees |ctx|
|
349
|
+
// itself.
|
366
350
|
OPENSSL_EXPORT void BN_CTX_free(BN_CTX *ctx);
|
367
351
|
|
368
|
-
|
369
|
-
|
352
|
+
// BN_CTX_start "pushes" a new entry onto the |ctx| stack and allows future
|
353
|
+
// calls to |BN_CTX_get|.
|
370
354
|
OPENSSL_EXPORT void BN_CTX_start(BN_CTX *ctx);
|
371
355
|
|
372
|
-
|
373
|
-
|
374
|
-
|
356
|
+
// BN_CTX_get returns a new |BIGNUM|, or NULL on allocation failure. Once
|
357
|
+
// |BN_CTX_get| has returned NULL, all future calls will also return NULL until
|
358
|
+
// |BN_CTX_end| is called.
|
375
359
|
OPENSSL_EXPORT BIGNUM *BN_CTX_get(BN_CTX *ctx);
|
376
360
|
|
377
|
-
|
378
|
-
|
361
|
+
// BN_CTX_end invalidates all |BIGNUM|s returned from |BN_CTX_get| since the
|
362
|
+
// matching |BN_CTX_start| call.
|
379
363
|
OPENSSL_EXPORT void BN_CTX_end(BN_CTX *ctx);
|
380
364
|
|
381
365
|
|
382
|
-
|
366
|
+
// Simple arithmetic
|
383
367
|
|
384
|
-
|
385
|
-
|
368
|
+
// BN_add sets |r| = |a| + |b|, where |r| may be the same pointer as either |a|
|
369
|
+
// or |b|. It returns one on success and zero on allocation failure.
|
386
370
|
OPENSSL_EXPORT int BN_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
|
387
371
|
|
388
|
-
|
389
|
-
|
390
|
-
|
372
|
+
// BN_uadd sets |r| = |a| + |b|, where |a| and |b| are non-negative and |r| may
|
373
|
+
// be the same pointer as either |a| or |b|. It returns one on success and zero
|
374
|
+
// on allocation failure.
|
391
375
|
OPENSSL_EXPORT int BN_uadd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
|
392
376
|
|
393
|
-
|
377
|
+
// BN_add_word adds |w| to |a|. It returns one on success and zero otherwise.
|
394
378
|
OPENSSL_EXPORT int BN_add_word(BIGNUM *a, BN_ULONG w);
|
395
379
|
|
396
|
-
|
397
|
-
|
380
|
+
// BN_sub sets |r| = |a| - |b|, where |r| may be the same pointer as either |a|
|
381
|
+
// or |b|. It returns one on success and zero on allocation failure.
|
398
382
|
OPENSSL_EXPORT int BN_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
|
399
383
|
|
400
|
-
|
401
|
-
|
402
|
-
|
384
|
+
// BN_usub sets |r| = |a| - |b|, where |a| and |b| are non-negative integers,
|
385
|
+
// |b| < |a| and |r| may be the same pointer as either |a| or |b|. It returns
|
386
|
+
// one on success and zero on allocation failure.
|
403
387
|
OPENSSL_EXPORT int BN_usub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b);
|
404
388
|
|
405
|
-
|
406
|
-
|
389
|
+
// BN_sub_word subtracts |w| from |a|. It returns one on success and zero on
|
390
|
+
// allocation failure.
|
407
391
|
OPENSSL_EXPORT int BN_sub_word(BIGNUM *a, BN_ULONG w);
|
408
392
|
|
409
|
-
|
410
|
-
|
393
|
+
// BN_mul sets |r| = |a| * |b|, where |r| may be the same pointer as |a| or
|
394
|
+
// |b|. Returns one on success and zero otherwise.
|
411
395
|
OPENSSL_EXPORT int BN_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
412
396
|
BN_CTX *ctx);
|
413
397
|
|
414
|
-
|
415
|
-
|
398
|
+
// BN_mul_word sets |bn| = |bn| * |w|. It returns one on success or zero on
|
399
|
+
// allocation failure.
|
416
400
|
OPENSSL_EXPORT int BN_mul_word(BIGNUM *bn, BN_ULONG w);
|
417
401
|
|
418
|
-
|
419
|
-
|
420
|
-
|
402
|
+
// BN_sqr sets |r| = |a|^2 (i.e. squares), where |r| may be the same pointer as
|
403
|
+
// |a|. Returns one on success and zero otherwise. This is more efficient than
|
404
|
+
// BN_mul(r, a, a, ctx).
|
421
405
|
OPENSSL_EXPORT int BN_sqr(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx);
|
422
406
|
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
407
|
+
// BN_div divides |numerator| by |divisor| and places the result in |quotient|
|
408
|
+
// and the remainder in |rem|. Either of |quotient| or |rem| may be NULL, in
|
409
|
+
// which case the respective value is not returned. The result is rounded
|
410
|
+
// towards zero; thus if |numerator| is negative, the remainder will be zero or
|
411
|
+
// negative. It returns one on success or zero on error.
|
428
412
|
OPENSSL_EXPORT int BN_div(BIGNUM *quotient, BIGNUM *rem,
|
429
413
|
const BIGNUM *numerator, const BIGNUM *divisor,
|
430
414
|
BN_CTX *ctx);
|
431
415
|
|
432
|
-
|
433
|
-
|
416
|
+
// BN_div_word sets |numerator| = |numerator|/|divisor| and returns the
|
417
|
+
// remainder or (BN_ULONG)-1 on error.
|
434
418
|
OPENSSL_EXPORT BN_ULONG BN_div_word(BIGNUM *numerator, BN_ULONG divisor);
|
435
419
|
|
436
|
-
|
437
|
-
|
438
|
-
|
439
|
-
|
420
|
+
// BN_sqrt sets |*out_sqrt| (which may be the same |BIGNUM| as |in|) to the
|
421
|
+
// square root of |in|, using |ctx|. It returns one on success or zero on
|
422
|
+
// error. Negative numbers and non-square numbers will result in an error with
|
423
|
+
// appropriate errors on the error queue.
|
440
424
|
OPENSSL_EXPORT int BN_sqrt(BIGNUM *out_sqrt, const BIGNUM *in, BN_CTX *ctx);
|
441
425
|
|
442
426
|
|
443
|
-
|
427
|
+
// Comparison functions
|
444
428
|
|
445
|
-
|
446
|
-
|
429
|
+
// BN_cmp returns a value less than, equal to or greater than zero if |a| is
|
430
|
+
// less than, equal to or greater than |b|, respectively.
|
447
431
|
OPENSSL_EXPORT int BN_cmp(const BIGNUM *a, const BIGNUM *b);
|
448
432
|
|
449
|
-
|
450
|
-
|
433
|
+
// BN_cmp_word is like |BN_cmp| except it takes its second argument as a
|
434
|
+
// |BN_ULONG| instead of a |BIGNUM|.
|
451
435
|
OPENSSL_EXPORT int BN_cmp_word(const BIGNUM *a, BN_ULONG b);
|
452
436
|
|
453
|
-
|
454
|
-
|
455
|
-
|
437
|
+
// BN_ucmp returns a value less than, equal to or greater than zero if the
|
438
|
+
// absolute value of |a| is less than, equal to or greater than the absolute
|
439
|
+
// value of |b|, respectively.
|
456
440
|
OPENSSL_EXPORT int BN_ucmp(const BIGNUM *a, const BIGNUM *b);
|
457
441
|
|
458
|
-
|
459
|
-
|
460
|
-
|
442
|
+
// BN_equal_consttime returns one if |a| is equal to |b|, and zero otherwise.
|
443
|
+
// It takes an amount of time dependent on the sizes of |a| and |b|, but
|
444
|
+
// independent of the contents (including the signs) of |a| and |b|.
|
461
445
|
OPENSSL_EXPORT int BN_equal_consttime(const BIGNUM *a, const BIGNUM *b);
|
462
446
|
|
463
|
-
|
464
|
-
|
447
|
+
// BN_abs_is_word returns one if the absolute value of |bn| equals |w| and zero
|
448
|
+
// otherwise.
|
465
449
|
OPENSSL_EXPORT int BN_abs_is_word(const BIGNUM *bn, BN_ULONG w);
|
466
450
|
|
467
|
-
|
451
|
+
// BN_is_zero returns one if |bn| is zero and zero otherwise.
|
468
452
|
OPENSSL_EXPORT int BN_is_zero(const BIGNUM *bn);
|
469
453
|
|
470
|
-
|
454
|
+
// BN_is_one returns one if |bn| equals one and zero otherwise.
|
471
455
|
OPENSSL_EXPORT int BN_is_one(const BIGNUM *bn);
|
472
456
|
|
473
|
-
|
457
|
+
// BN_is_word returns one if |bn| is exactly |w| and zero otherwise.
|
474
458
|
OPENSSL_EXPORT int BN_is_word(const BIGNUM *bn, BN_ULONG w);
|
475
459
|
|
476
|
-
|
460
|
+
// BN_is_odd returns one if |bn| is odd and zero otherwise.
|
477
461
|
OPENSSL_EXPORT int BN_is_odd(const BIGNUM *bn);
|
478
462
|
|
479
|
-
|
463
|
+
// BN_is_pow2 returns 1 if |a| is a power of two, and 0 otherwise.
|
480
464
|
OPENSSL_EXPORT int BN_is_pow2(const BIGNUM *a);
|
481
465
|
|
482
|
-
|
466
|
+
// Bitwise operations.
|
483
467
|
|
484
|
-
|
485
|
-
|
468
|
+
// BN_lshift sets |r| equal to |a| << n. The |a| and |r| arguments may be the
|
469
|
+
// same |BIGNUM|. It returns one on success and zero on allocation failure.
|
486
470
|
OPENSSL_EXPORT int BN_lshift(BIGNUM *r, const BIGNUM *a, int n);
|
487
471
|
|
488
|
-
|
489
|
-
|
472
|
+
// BN_lshift1 sets |r| equal to |a| << 1, where |r| and |a| may be the same
|
473
|
+
// pointer. It returns one on success and zero on allocation failure.
|
490
474
|
OPENSSL_EXPORT int BN_lshift1(BIGNUM *r, const BIGNUM *a);
|
491
475
|
|
492
|
-
|
493
|
-
|
476
|
+
// BN_rshift sets |r| equal to |a| >> n, where |r| and |a| may be the same
|
477
|
+
// pointer. It returns one on success and zero on allocation failure.
|
494
478
|
OPENSSL_EXPORT int BN_rshift(BIGNUM *r, const BIGNUM *a, int n);
|
495
479
|
|
496
|
-
|
497
|
-
|
480
|
+
// BN_rshift1 sets |r| equal to |a| >> 1, where |r| and |a| may be the same
|
481
|
+
// pointer. It returns one on success and zero on allocation failure.
|
498
482
|
OPENSSL_EXPORT int BN_rshift1(BIGNUM *r, const BIGNUM *a);
|
499
483
|
|
500
|
-
|
501
|
-
|
502
|
-
|
484
|
+
// BN_set_bit sets the |n|th, least-significant bit in |a|. For example, if |a|
|
485
|
+
// is 2 then setting bit zero will make it 3. It returns one on success or zero
|
486
|
+
// on allocation failure.
|
503
487
|
OPENSSL_EXPORT int BN_set_bit(BIGNUM *a, int n);
|
504
488
|
|
505
|
-
|
506
|
-
|
507
|
-
|
489
|
+
// BN_clear_bit clears the |n|th, least-significant bit in |a|. For example, if
|
490
|
+
// |a| is 3, clearing bit zero will make it two. It returns one on success or
|
491
|
+
// zero on allocation failure.
|
508
492
|
OPENSSL_EXPORT int BN_clear_bit(BIGNUM *a, int n);
|
509
493
|
|
510
|
-
|
511
|
-
|
494
|
+
// BN_is_bit_set returns the value of the |n|th, least-significant bit in |a|,
|
495
|
+
// or zero if the bit doesn't exist.
|
512
496
|
OPENSSL_EXPORT int BN_is_bit_set(const BIGNUM *a, int n);
|
513
497
|
|
514
|
-
|
515
|
-
|
498
|
+
// BN_mask_bits truncates |a| so that it is only |n| bits long. It returns one
|
499
|
+
// on success or zero if |n| is greater than the length of |a| already.
|
516
500
|
OPENSSL_EXPORT int BN_mask_bits(BIGNUM *a, int n);
|
517
501
|
|
518
502
|
|
519
|
-
|
503
|
+
// Modulo arithmetic.
|
520
504
|
|
521
|
-
|
505
|
+
// BN_mod_word returns |a| mod |w| or (BN_ULONG)-1 on error.
|
522
506
|
OPENSSL_EXPORT BN_ULONG BN_mod_word(const BIGNUM *a, BN_ULONG w);
|
523
507
|
|
524
|
-
|
525
|
-
|
508
|
+
// BN_mod_pow2 sets |r| = |a| mod 2^|e|. It returns 1 on success and
|
509
|
+
// 0 on error.
|
526
510
|
OPENSSL_EXPORT int BN_mod_pow2(BIGNUM *r, const BIGNUM *a, size_t e);
|
527
511
|
|
528
|
-
|
529
|
-
|
512
|
+
// BN_nnmod_pow2 sets |r| = |a| mod 2^|e| where |r| is always positive.
|
513
|
+
// It returns 1 on success and 0 on error.
|
530
514
|
OPENSSL_EXPORT int BN_nnmod_pow2(BIGNUM *r, const BIGNUM *a, size_t e);
|
531
515
|
|
532
|
-
|
516
|
+
// BN_mod is a helper macro that calls |BN_div| and discards the quotient.
|
533
517
|
#define BN_mod(rem, numerator, divisor, ctx) \
|
534
518
|
BN_div(NULL, (rem), (numerator), (divisor), (ctx))
|
535
519
|
|
536
|
-
|
537
|
-
|
538
|
-
|
520
|
+
// BN_nnmod is a non-negative modulo function. It acts like |BN_mod|, but 0 <=
|
521
|
+
// |rem| < |divisor| is always true. It returns one on success and zero on
|
522
|
+
// error.
|
539
523
|
OPENSSL_EXPORT int BN_nnmod(BIGNUM *rem, const BIGNUM *numerator,
|
540
524
|
const BIGNUM *divisor, BN_CTX *ctx);
|
541
525
|
|
542
|
-
|
543
|
-
|
526
|
+
// BN_mod_add sets |r| = |a| + |b| mod |m|. It returns one on success and zero
|
527
|
+
// on error.
|
544
528
|
OPENSSL_EXPORT int BN_mod_add(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
545
529
|
const BIGNUM *m, BN_CTX *ctx);
|
546
530
|
|
547
|
-
|
548
|
-
|
531
|
+
// BN_mod_add_quick acts like |BN_mod_add| but requires that |a| and |b| be
|
532
|
+
// non-negative and less than |m|.
|
549
533
|
OPENSSL_EXPORT int BN_mod_add_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
550
534
|
const BIGNUM *m);
|
551
535
|
|
552
|
-
|
553
|
-
|
536
|
+
// BN_mod_sub sets |r| = |a| - |b| mod |m|. It returns one on success and zero
|
537
|
+
// on error.
|
554
538
|
OPENSSL_EXPORT int BN_mod_sub(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
555
539
|
const BIGNUM *m, BN_CTX *ctx);
|
556
540
|
|
557
|
-
|
558
|
-
|
541
|
+
// BN_mod_sub_quick acts like |BN_mod_sub| but requires that |a| and |b| be
|
542
|
+
// non-negative and less than |m|.
|
559
543
|
OPENSSL_EXPORT int BN_mod_sub_quick(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
560
544
|
const BIGNUM *m);
|
561
545
|
|
562
|
-
|
563
|
-
|
546
|
+
// BN_mod_mul sets |r| = |a|*|b| mod |m|. It returns one on success and zero
|
547
|
+
// on error.
|
564
548
|
OPENSSL_EXPORT int BN_mod_mul(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
565
549
|
const BIGNUM *m, BN_CTX *ctx);
|
566
550
|
|
567
|
-
|
568
|
-
|
551
|
+
// BN_mod_sqr sets |r| = |a|^2 mod |m|. It returns one on success and zero
|
552
|
+
// on error.
|
569
553
|
OPENSSL_EXPORT int BN_mod_sqr(BIGNUM *r, const BIGNUM *a, const BIGNUM *m,
|
570
554
|
BN_CTX *ctx);
|
571
555
|
|
572
|
-
|
573
|
-
|
556
|
+
// BN_mod_lshift sets |r| = (|a| << n) mod |m|, where |r| and |a| may be the
|
557
|
+
// same pointer. It returns one on success and zero on error.
|
574
558
|
OPENSSL_EXPORT int BN_mod_lshift(BIGNUM *r, const BIGNUM *a, int n,
|
575
559
|
const BIGNUM *m, BN_CTX *ctx);
|
576
560
|
|
577
|
-
|
578
|
-
|
561
|
+
// BN_mod_lshift_quick acts like |BN_mod_lshift| but requires that |a| be
|
562
|
+
// non-negative and less than |m|.
|
579
563
|
OPENSSL_EXPORT int BN_mod_lshift_quick(BIGNUM *r, const BIGNUM *a, int n,
|
580
564
|
const BIGNUM *m);
|
581
565
|
|
582
|
-
|
583
|
-
|
566
|
+
// BN_mod_lshift1 sets |r| = (|a| << 1) mod |m|, where |r| and |a| may be the
|
567
|
+
// same pointer. It returns one on success and zero on error.
|
584
568
|
OPENSSL_EXPORT int BN_mod_lshift1(BIGNUM *r, const BIGNUM *a, const BIGNUM *m,
|
585
569
|
BN_CTX *ctx);
|
586
570
|
|
587
|
-
|
588
|
-
|
571
|
+
// BN_mod_lshift1_quick acts like |BN_mod_lshift1| but requires that |a| be
|
572
|
+
// non-negative and less than |m|.
|
589
573
|
OPENSSL_EXPORT int BN_mod_lshift1_quick(BIGNUM *r, const BIGNUM *a,
|
590
574
|
const BIGNUM *m);
|
591
575
|
|
592
|
-
|
593
|
-
|
594
|
-
|
595
|
-
|
576
|
+
// BN_mod_sqrt returns a newly-allocated |BIGNUM|, r, such that
|
577
|
+
// r^2 == a (mod p). |p| must be a prime. It returns NULL on error or if |a| is
|
578
|
+
// not a square mod |p|. In the latter case, it will add |BN_R_NOT_A_SQUARE| to
|
579
|
+
// the error queue.
|
596
580
|
OPENSSL_EXPORT BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p,
|
597
581
|
BN_CTX *ctx);
|
598
582
|
|
599
583
|
|
600
|
-
|
584
|
+
// Random and prime number generation.
|
601
585
|
|
602
|
-
|
586
|
+
// The following are values for the |top| parameter of |BN_rand|.
|
603
587
|
#define BN_RAND_TOP_ANY (-1)
|
604
588
|
#define BN_RAND_TOP_ONE 0
|
605
589
|
#define BN_RAND_TOP_TWO 1
|
606
590
|
|
607
|
-
|
591
|
+
// The following are values for the |bottom| parameter of |BN_rand|.
|
608
592
|
#define BN_RAND_BOTTOM_ANY 0
|
609
593
|
#define BN_RAND_BOTTOM_ODD 1
|
610
594
|
|
611
|
-
|
612
|
-
|
613
|
-
|
614
|
-
|
615
|
-
|
616
|
-
|
617
|
-
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
595
|
+
// BN_rand sets |rnd| to a random number of length |bits|. It returns one on
|
596
|
+
// success and zero otherwise.
|
597
|
+
//
|
598
|
+
// |top| must be one of the |BN_RAND_TOP_*| values. If |BN_RAND_TOP_ONE|, the
|
599
|
+
// most-significant bit, if any, will be set. If |BN_RAND_TOP_TWO|, the two
|
600
|
+
// most significant bits, if any, will be set. If |BN_RAND_TOP_ANY|, no extra
|
601
|
+
// action will be taken and |BN_num_bits(rnd)| may not equal |bits| if the most
|
602
|
+
// significant bits randomly ended up as zeros.
|
603
|
+
//
|
604
|
+
// |bottom| must be one of the |BN_RAND_BOTTOM_*| values. If
|
605
|
+
// |BN_RAND_BOTTOM_ODD|, the least-significant bit, if any, will be set. If
|
606
|
+
// |BN_RAND_BOTTOM_ANY|, no extra action will be taken.
|
623
607
|
OPENSSL_EXPORT int BN_rand(BIGNUM *rnd, int bits, int top, int bottom);
|
624
608
|
|
625
|
-
|
609
|
+
// BN_pseudo_rand is an alias for |BN_rand|.
|
626
610
|
OPENSSL_EXPORT int BN_pseudo_rand(BIGNUM *rnd, int bits, int top, int bottom);
|
627
611
|
|
628
|
-
|
629
|
-
|
612
|
+
// BN_rand_range is equivalent to |BN_rand_range_ex| with |min_inclusive| set
|
613
|
+
// to zero and |max_exclusive| set to |range|.
|
630
614
|
OPENSSL_EXPORT int BN_rand_range(BIGNUM *rnd, const BIGNUM *range);
|
631
615
|
|
632
|
-
|
633
|
-
|
634
|
-
|
616
|
+
// BN_rand_range_ex sets |rnd| to a random value in
|
617
|
+
// [min_inclusive..max_exclusive). It returns one on success and zero
|
618
|
+
// otherwise.
|
635
619
|
OPENSSL_EXPORT int BN_rand_range_ex(BIGNUM *r, BN_ULONG min_inclusive,
|
636
620
|
const BIGNUM *max_exclusive);
|
637
621
|
|
638
|
-
|
622
|
+
// BN_pseudo_rand_range is an alias for BN_rand_range.
|
639
623
|
OPENSSL_EXPORT int BN_pseudo_rand_range(BIGNUM *rnd, const BIGNUM *range);
|
640
624
|
|
641
|
-
|
642
|
-
|
643
|
-
|
644
|
-
|
645
|
-
|
646
|
-
|
625
|
+
// BN_generate_dsa_nonce generates a random number 0 <= out < range. Unlike
|
626
|
+
// BN_rand_range, it also includes the contents of |priv| and |message| in the
|
627
|
+
// generation so that an RNG failure isn't fatal as long as |priv| remains
|
628
|
+
// secret. This is intended for use in DSA and ECDSA where an RNG weakness
|
629
|
+
// leads directly to private key exposure unless this function is used.
|
630
|
+
// It returns one on success and zero on error.
|
647
631
|
OPENSSL_EXPORT int BN_generate_dsa_nonce(BIGNUM *out, const BIGNUM *range,
|
648
632
|
const BIGNUM *priv,
|
649
633
|
const uint8_t *message,
|
650
634
|
size_t message_len, BN_CTX *ctx);
|
651
635
|
|
652
|
-
|
653
|
-
|
654
|
-
|
655
|
-
|
656
|
-
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
662
|
-
|
663
|
-
|
664
|
-
|
665
|
-
|
666
|
-
|
667
|
-
|
668
|
-
|
669
|
-
|
636
|
+
// BN_GENCB holds a callback function that is used by generation functions that
|
637
|
+
// can take a very long time to complete. Use |BN_GENCB_set| to initialise a
|
638
|
+
// |BN_GENCB| structure.
|
639
|
+
//
|
640
|
+
// The callback receives the address of that |BN_GENCB| structure as its last
|
641
|
+
// argument and the user is free to put an arbitrary pointer in |arg|. The other
|
642
|
+
// arguments are set as follows:
|
643
|
+
// event=BN_GENCB_GENERATED, n=i: after generating the i'th possible prime
|
644
|
+
// number.
|
645
|
+
// event=BN_GENCB_PRIME_TEST, n=-1: when finished trial division primality
|
646
|
+
// checks.
|
647
|
+
// event=BN_GENCB_PRIME_TEST, n=i: when the i'th primality test has finished.
|
648
|
+
//
|
649
|
+
// The callback can return zero to abort the generation progress or one to
|
650
|
+
// allow it to continue.
|
651
|
+
//
|
652
|
+
// When other code needs to call a BN generation function it will often take a
|
653
|
+
// BN_GENCB argument and may call the function with other argument values.
|
670
654
|
#define BN_GENCB_GENERATED 0
|
671
655
|
#define BN_GENCB_PRIME_TEST 1
|
672
656
|
|
673
657
|
struct bn_gencb_st {
|
674
|
-
void *arg;
|
658
|
+
void *arg; // callback-specific data
|
675
659
|
int (*callback)(int event, int n, struct bn_gencb_st *);
|
676
660
|
};
|
677
661
|
|
678
|
-
|
679
|
-
|
662
|
+
// BN_GENCB_set configures |callback| to call |f| and sets |callout->arg| to
|
663
|
+
// |arg|.
|
680
664
|
OPENSSL_EXPORT void BN_GENCB_set(BN_GENCB *callback,
|
681
665
|
int (*f)(int event, int n,
|
682
666
|
struct bn_gencb_st *),
|
683
667
|
void *arg);
|
684
668
|
|
685
|
-
|
686
|
-
|
669
|
+
// BN_GENCB_call calls |callback|, if not NULL, and returns the return value of
|
670
|
+
// the callback, or 1 if |callback| is NULL.
|
687
671
|
OPENSSL_EXPORT int BN_GENCB_call(BN_GENCB *callback, int event, int n);
|
688
672
|
|
689
|
-
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
|
696
|
-
|
697
|
-
|
698
|
-
|
699
|
-
|
700
|
-
|
673
|
+
// BN_generate_prime_ex sets |ret| to a prime number of |bits| length. If safe
|
674
|
+
// is non-zero then the prime will be such that (ret-1)/2 is also a prime.
|
675
|
+
// (This is needed for Diffie-Hellman groups to ensure that the only subgroups
|
676
|
+
// are of size 2 and (p-1)/2.).
|
677
|
+
//
|
678
|
+
// If |add| is not NULL, the prime will fulfill the condition |ret| % |add| ==
|
679
|
+
// |rem| in order to suit a given generator. (If |rem| is NULL then |ret| %
|
680
|
+
// |add| == 1.)
|
681
|
+
//
|
682
|
+
// If |cb| is not NULL, it will be called during processing to give an
|
683
|
+
// indication of progress. See the comments for |BN_GENCB|. It returns one on
|
684
|
+
// success and zero otherwise.
|
701
685
|
OPENSSL_EXPORT int BN_generate_prime_ex(BIGNUM *ret, int bits, int safe,
|
702
686
|
const BIGNUM *add, const BIGNUM *rem,
|
703
687
|
BN_GENCB *cb);
|
704
688
|
|
705
|
-
|
706
|
-
|
707
|
-
|
689
|
+
// BN_prime_checks is magic value that can be used as the |checks| argument to
|
690
|
+
// the primality testing functions in order to automatically select a number of
|
691
|
+
// Miller-Rabin checks that gives a false positive rate of ~2^{-80}.
|
708
692
|
#define BN_prime_checks 0
|
709
693
|
|
710
|
-
|
711
|
-
|
712
|
-
|
713
|
-
|
714
|
-
|
715
|
-
|
716
|
-
|
717
|
-
|
718
|
-
|
719
|
-
|
720
|
-
|
721
|
-
|
722
|
-
|
723
|
-
|
694
|
+
// bn_primality_result_t enumerates the outcomes of primality-testing.
|
695
|
+
enum bn_primality_result_t {
|
696
|
+
bn_probably_prime,
|
697
|
+
bn_composite,
|
698
|
+
bn_non_prime_power_composite,
|
699
|
+
};
|
700
|
+
|
701
|
+
// BN_enhanced_miller_rabin_primality_test tests whether |w| is probably a prime
|
702
|
+
// number using the Enhanced Miller-Rabin Test (FIPS 186-4 C.3.2) with
|
703
|
+
// |iterations| iterations and returns the result in |out_result|. Enhanced
|
704
|
+
// Miller-Rabin tests primality for odd integers greater than 3, returning
|
705
|
+
// |bn_probably_prime| if the number is probably prime,
|
706
|
+
// |bn_non_prime_power_composite| if the number is a composite that is not the
|
707
|
+
// power of a single prime, and |bn_composite| otherwise. If |iterations| is
|
708
|
+
// |BN_prime_checks|, then a value that results in a false positive rate lower
|
709
|
+
// than the number-field sieve security level of |w| is used. It returns one on
|
710
|
+
// success and zero on failure. If |cb| is not NULL, then it is called during
|
711
|
+
// each iteration of the primality test.
|
712
|
+
int BN_enhanced_miller_rabin_primality_test(
|
713
|
+
enum bn_primality_result_t *out_result, const BIGNUM *w, int iterations,
|
714
|
+
BN_CTX *ctx, BN_GENCB *cb);
|
715
|
+
|
716
|
+
// BN_primality_test sets |*is_probably_prime| to one if |candidate| is
|
717
|
+
// probably a prime number by the Miller-Rabin test or zero if it's certainly
|
718
|
+
// not.
|
719
|
+
//
|
720
|
+
// If |do_trial_division| is non-zero then |candidate| will be tested against a
|
721
|
+
// list of small primes before Miller-Rabin tests. The probability of this
|
722
|
+
// function returning a false positive is 2^{2*checks}. If |checks| is
|
723
|
+
// |BN_prime_checks| then a value that results in a false positive rate lower
|
724
|
+
// than the number-field sieve security level of |candidate| is used. If |cb| is
|
725
|
+
// not NULL then it is called during the checking process. See the comment above
|
726
|
+
// |BN_GENCB|.
|
727
|
+
//
|
728
|
+
// The function returns one on success and zero on error.
|
729
|
+
//
|
730
|
+
// (If you are unsure whether you want |do_trial_division|, don't set it.)
|
724
731
|
OPENSSL_EXPORT int BN_primality_test(int *is_probably_prime,
|
725
732
|
const BIGNUM *candidate, int checks,
|
726
733
|
BN_CTX *ctx, int do_trial_division,
|
727
734
|
BN_GENCB *cb);
|
728
735
|
|
729
|
-
|
730
|
-
|
731
|
-
|
732
|
-
|
733
|
-
|
734
|
-
|
735
|
-
|
736
|
-
|
737
|
-
|
738
|
-
|
739
|
-
|
736
|
+
// BN_is_prime_fasttest_ex returns one if |candidate| is probably a prime
|
737
|
+
// number by the Miller-Rabin test, zero if it's certainly not and -1 on error.
|
738
|
+
//
|
739
|
+
// If |do_trial_division| is non-zero then |candidate| will be tested against a
|
740
|
+
// list of small primes before Miller-Rabin tests. The probability of this
|
741
|
+
// function returning one when |candidate| is composite is 2^{2*checks}. If
|
742
|
+
// |checks| is |BN_prime_checks| then a value that results in a false positive
|
743
|
+
// rate lower than the number-field sieve security level of |candidate| is used.
|
744
|
+
// If |cb| is not NULL then it is called during the checking process. See the
|
745
|
+
// comment above |BN_GENCB|.
|
746
|
+
//
|
747
|
+
// WARNING: deprecated. Use |BN_primality_test|.
|
740
748
|
OPENSSL_EXPORT int BN_is_prime_fasttest_ex(const BIGNUM *candidate, int checks,
|
741
749
|
BN_CTX *ctx, int do_trial_division,
|
742
750
|
BN_GENCB *cb);
|
743
751
|
|
744
|
-
|
745
|
-
|
746
|
-
|
747
|
-
|
752
|
+
// BN_is_prime_ex acts the same as |BN_is_prime_fasttest_ex| with
|
753
|
+
// |do_trial_division| set to zero.
|
754
|
+
//
|
755
|
+
// WARNING: deprecated: Use |BN_primality_test|.
|
748
756
|
OPENSSL_EXPORT int BN_is_prime_ex(const BIGNUM *candidate, int checks,
|
749
757
|
BN_CTX *ctx, BN_GENCB *cb);
|
750
758
|
|
751
759
|
|
752
|
-
|
760
|
+
// Number theory functions
|
753
761
|
|
754
|
-
|
755
|
-
|
762
|
+
// BN_gcd sets |r| = gcd(|a|, |b|). It returns one on success and zero
|
763
|
+
// otherwise.
|
756
764
|
OPENSSL_EXPORT int BN_gcd(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
|
757
765
|
BN_CTX *ctx);
|
758
766
|
|
759
|
-
|
760
|
-
|
761
|
-
|
762
|
-
|
763
|
-
|
764
|
-
|
765
|
-
|
766
|
-
|
767
|
-
|
767
|
+
// BN_mod_inverse sets |out| equal to |a|^-1, mod |n|. If |out| is NULL, a
|
768
|
+
// fresh BIGNUM is allocated. It returns the result or NULL on error.
|
769
|
+
//
|
770
|
+
// If |n| is even then the operation is performed using an algorithm that avoids
|
771
|
+
// some branches but which isn't constant-time. This function shouldn't be used
|
772
|
+
// for secret values; use |BN_mod_inverse_blinded| instead. Or, if |n| is
|
773
|
+
// guaranteed to be prime, use
|
774
|
+
// |BN_mod_exp_mont_consttime(out, a, m_minus_2, m, ctx, m_mont)|, taking
|
775
|
+
// advantage of Fermat's Little Theorem.
|
768
776
|
OPENSSL_EXPORT BIGNUM *BN_mod_inverse(BIGNUM *out, const BIGNUM *a,
|
769
777
|
const BIGNUM *n, BN_CTX *ctx);
|
770
778
|
|
771
|
-
|
772
|
-
|
773
|
-
|
774
|
-
|
775
|
-
|
776
|
-
|
779
|
+
// BN_mod_inverse_blinded sets |out| equal to |a|^-1, mod |n|, where |n| is the
|
780
|
+
// Montgomery modulus for |mont|. |a| must be non-negative and must be less
|
781
|
+
// than |n|. |n| must be greater than 1. |a| is blinded (masked by a random
|
782
|
+
// value) to protect it against side-channel attacks. On failure, if the failure
|
783
|
+
// was caused by |a| having no inverse mod |n| then |*out_no_inverse| will be
|
784
|
+
// set to one; otherwise it will be set to zero.
|
777
785
|
int BN_mod_inverse_blinded(BIGNUM *out, int *out_no_inverse, const BIGNUM *a,
|
778
786
|
const BN_MONT_CTX *mont, BN_CTX *ctx);
|
779
787
|
|
780
|
-
|
781
|
-
|
782
|
-
|
783
|
-
|
784
|
-
|
785
|
-
|
786
|
-
|
787
|
-
|
788
|
-
|
788
|
+
// BN_mod_inverse_odd sets |out| equal to |a|^-1, mod |n|. |a| must be
|
789
|
+
// non-negative and must be less than |n|. |n| must be odd. This function
|
790
|
+
// shouldn't be used for secret values; use |BN_mod_inverse_blinded| instead.
|
791
|
+
// Or, if |n| is guaranteed to be prime, use
|
792
|
+
// |BN_mod_exp_mont_consttime(out, a, m_minus_2, m, ctx, m_mont)|, taking
|
793
|
+
// advantage of Fermat's Little Theorem. It returns one on success or zero on
|
794
|
+
// failure. On failure, if the failure was caused by |a| having no inverse mod
|
795
|
+
// |n| then |*out_no_inverse| will be set to one; otherwise it will be set to
|
796
|
+
// zero.
|
789
797
|
int BN_mod_inverse_odd(BIGNUM *out, int *out_no_inverse, const BIGNUM *a,
|
790
798
|
const BIGNUM *n, BN_CTX *ctx);
|
791
799
|
|
792
|
-
/* BN_kronecker returns the Kronecker symbol of |a| and |b| (which is -1, 0 or
|
793
|
-
* 1), or -2 on error. */
|
794
|
-
OPENSSL_EXPORT int BN_kronecker(const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
|
795
800
|
|
801
|
+
// Montgomery arithmetic.
|
796
802
|
|
797
|
-
|
803
|
+
// BN_MONT_CTX contains the precomputed values needed to work in a specific
|
804
|
+
// Montgomery domain.
|
798
805
|
|
799
|
-
|
800
|
-
* Montgomery domain. */
|
801
|
-
|
802
|
-
/* BN_MONT_CTX_new returns a fresh BN_MONT_CTX or NULL on allocation failure. */
|
806
|
+
// BN_MONT_CTX_new returns a fresh BN_MONT_CTX or NULL on allocation failure.
|
803
807
|
OPENSSL_EXPORT BN_MONT_CTX *BN_MONT_CTX_new(void);
|
804
808
|
|
805
|
-
|
809
|
+
// BN_MONT_CTX_free frees memory associated with |mont|.
|
806
810
|
OPENSSL_EXPORT void BN_MONT_CTX_free(BN_MONT_CTX *mont);
|
807
811
|
|
808
|
-
|
809
|
-
|
812
|
+
// BN_MONT_CTX_copy sets |to| equal to |from|. It returns |to| on success or
|
813
|
+
// NULL on error.
|
810
814
|
OPENSSL_EXPORT BN_MONT_CTX *BN_MONT_CTX_copy(BN_MONT_CTX *to,
|
811
815
|
const BN_MONT_CTX *from);
|
812
816
|
|
813
|
-
|
814
|
-
|
817
|
+
// BN_MONT_CTX_set sets up a Montgomery context given the modulus, |mod|. It
|
818
|
+
// returns one on success and zero on error.
|
815
819
|
OPENSSL_EXPORT int BN_MONT_CTX_set(BN_MONT_CTX *mont, const BIGNUM *mod,
|
816
820
|
BN_CTX *ctx);
|
817
821
|
|
818
|
-
|
819
|
-
|
820
|
-
|
821
|
-
|
822
|
-
|
822
|
+
// BN_MONT_CTX_set_locked takes |lock| and checks whether |*pmont| is NULL. If
|
823
|
+
// so, it creates a new |BN_MONT_CTX| and sets the modulus for it to |mod|. It
|
824
|
+
// then stores it as |*pmont|. It returns one on success and zero on error.
|
825
|
+
//
|
826
|
+
// If |*pmont| is already non-NULL then it does nothing and returns one.
|
823
827
|
int BN_MONT_CTX_set_locked(BN_MONT_CTX **pmont, CRYPTO_MUTEX *lock,
|
824
828
|
const BIGNUM *mod, BN_CTX *bn_ctx);
|
825
829
|
|
826
|
-
|
827
|
-
|
828
|
-
|
830
|
+
// BN_to_montgomery sets |ret| equal to |a| in the Montgomery domain. |a| is
|
831
|
+
// assumed to be in the range [0, n), where |n| is the Montgomery modulus. It
|
832
|
+
// returns one on success or zero on error.
|
829
833
|
OPENSSL_EXPORT int BN_to_montgomery(BIGNUM *ret, const BIGNUM *a,
|
830
834
|
const BN_MONT_CTX *mont, BN_CTX *ctx);
|
831
835
|
|
832
|
-
|
833
|
-
|
834
|
-
|
836
|
+
// BN_from_montgomery sets |ret| equal to |a| * R^-1, i.e. translates values out
|
837
|
+
// of the Montgomery domain. |a| is assumed to be in the range [0, n), where |n|
|
838
|
+
// is the Montgomery modulus. It returns one on success or zero on error.
|
835
839
|
OPENSSL_EXPORT int BN_from_montgomery(BIGNUM *ret, const BIGNUM *a,
|
836
840
|
const BN_MONT_CTX *mont, BN_CTX *ctx);
|
837
841
|
|
838
|
-
|
839
|
-
|
840
|
-
|
841
|
-
|
842
|
-
|
842
|
+
// BN_mod_mul_montgomery set |r| equal to |a| * |b|, in the Montgomery domain.
|
843
|
+
// Both |a| and |b| must already be in the Montgomery domain (by
|
844
|
+
// |BN_to_montgomery|). In particular, |a| and |b| are assumed to be in the
|
845
|
+
// range [0, n), where |n| is the Montgomery modulus. It returns one on success
|
846
|
+
// or zero on error.
|
843
847
|
OPENSSL_EXPORT int BN_mod_mul_montgomery(BIGNUM *r, const BIGNUM *a,
|
844
848
|
const BIGNUM *b,
|
845
849
|
const BN_MONT_CTX *mont, BN_CTX *ctx);
|
846
850
|
|
847
851
|
|
848
|
-
|
852
|
+
// Exponentiation.
|
849
853
|
|
850
|
-
|
851
|
-
|
852
|
-
|
854
|
+
// BN_exp sets |r| equal to |a|^{|p|}. It does so with a square-and-multiply
|
855
|
+
// algorithm that leaks side-channel information. It returns one on success or
|
856
|
+
// zero otherwise.
|
853
857
|
OPENSSL_EXPORT int BN_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
854
858
|
BN_CTX *ctx);
|
855
859
|
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
+
// BN_mod_exp sets |r| equal to |a|^{|p|} mod |m|. It does so with the best
|
861
|
+
// algorithm for the values provided. It returns one on success or zero
|
862
|
+
// otherwise. The |BN_mod_exp_mont_consttime| variant must be used if the
|
863
|
+
// exponent is secret.
|
860
864
|
OPENSSL_EXPORT int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
|
861
865
|
const BIGNUM *m, BN_CTX *ctx);
|
862
866
|
|
@@ -870,70 +874,71 @@ OPENSSL_EXPORT int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a,
|
|
870
874
|
const BN_MONT_CTX *mont);
|
871
875
|
|
872
876
|
|
873
|
-
|
877
|
+
// Deprecated functions
|
874
878
|
|
875
|
-
|
876
|
-
|
877
|
-
|
878
|
-
|
879
|
-
|
880
|
-
|
879
|
+
// BN_bn2mpi serialises the value of |in| to |out|, using a format that consists
|
880
|
+
// of the number's length in bytes represented as a 4-byte big-endian number,
|
881
|
+
// and the number itself in big-endian format, where the most significant bit
|
882
|
+
// signals a negative number. (The representation of numbers with the MSB set is
|
883
|
+
// prefixed with null byte). |out| must have sufficient space available; to
|
884
|
+
// find the needed amount of space, call the function with |out| set to NULL.
|
881
885
|
OPENSSL_EXPORT size_t BN_bn2mpi(const BIGNUM *in, uint8_t *out);
|
882
886
|
|
883
|
-
|
884
|
-
|
885
|
-
|
886
|
-
|
887
|
-
|
888
|
-
|
887
|
+
// BN_mpi2bn parses |len| bytes from |in| and returns the resulting value. The
|
888
|
+
// bytes at |in| are expected to be in the format emitted by |BN_bn2mpi|.
|
889
|
+
//
|
890
|
+
// If |out| is NULL then a fresh |BIGNUM| is allocated and returned, otherwise
|
891
|
+
// |out| is reused and returned. On error, NULL is returned and the error queue
|
892
|
+
// is updated.
|
889
893
|
OPENSSL_EXPORT BIGNUM *BN_mpi2bn(const uint8_t *in, size_t len, BIGNUM *out);
|
890
894
|
|
891
|
-
|
892
|
-
|
893
|
-
|
895
|
+
// BN_mod_exp_mont_word is like |BN_mod_exp_mont| except that the base |a| is
|
896
|
+
// given as a |BN_ULONG| instead of a |BIGNUM *|. It returns one on success
|
897
|
+
// or zero otherwise.
|
894
898
|
OPENSSL_EXPORT int BN_mod_exp_mont_word(BIGNUM *r, BN_ULONG a, const BIGNUM *p,
|
895
899
|
const BIGNUM *m, BN_CTX *ctx,
|
896
900
|
const BN_MONT_CTX *mont);
|
897
901
|
|
898
|
-
|
899
|
-
|
902
|
+
// BN_mod_exp2_mont calculates (a1^p1) * (a2^p2) mod m. It returns 1 on success
|
903
|
+
// or zero otherwise.
|
900
904
|
OPENSSL_EXPORT int BN_mod_exp2_mont(BIGNUM *r, const BIGNUM *a1,
|
901
905
|
const BIGNUM *p1, const BIGNUM *a2,
|
902
906
|
const BIGNUM *p2, const BIGNUM *m,
|
903
907
|
BN_CTX *ctx, const BN_MONT_CTX *mont);
|
904
908
|
|
905
909
|
|
906
|
-
|
910
|
+
// Private functions
|
907
911
|
|
908
912
|
struct bignum_st {
|
909
913
|
BN_ULONG *d; /* Pointer to an array of 'BN_BITS2' bit chunks in little-endian
|
910
914
|
order. */
|
911
|
-
int top;
|
912
|
-
int dmax;
|
913
|
-
int neg;
|
914
|
-
int flags;
|
915
|
+
int top; // Index of last used element in |d|, plus one.
|
916
|
+
int dmax; // Size of |d|, in words.
|
917
|
+
int neg; // one if the number is negative
|
918
|
+
int flags; // bitmask of BN_FLG_* values
|
915
919
|
};
|
916
920
|
|
917
921
|
struct bn_mont_ctx_st {
|
918
|
-
BIGNUM RR;
|
919
|
-
BIGNUM N;
|
920
|
-
BN_ULONG n0[2];
|
922
|
+
BIGNUM RR; // used to convert to montgomery form
|
923
|
+
BIGNUM N; // The modulus
|
924
|
+
BN_ULONG n0[2]; // least significant words of (R*Ri-1)/N
|
921
925
|
};
|
922
926
|
|
923
927
|
OPENSSL_EXPORT unsigned BN_num_bits_word(BN_ULONG l);
|
924
928
|
|
925
929
|
#define BN_FLG_MALLOCED 0x01
|
926
930
|
#define BN_FLG_STATIC_DATA 0x02
|
927
|
-
|
928
|
-
|
929
|
-
|
930
|
-
|
931
|
-
|
931
|
+
// |BN_FLG_CONSTTIME| has been removed and intentionally omitted so code relying
|
932
|
+
// on it will not compile. Consumers outside BoringSSL should use the
|
933
|
+
// higher-level cryptographic algorithms exposed by other modules. Consumers
|
934
|
+
// within the library should call the appropriate timing-sensitive algorithm
|
935
|
+
// directly.
|
932
936
|
|
933
937
|
|
934
938
|
#if defined(__cplusplus)
|
935
|
-
}
|
939
|
+
} // extern C
|
936
940
|
|
941
|
+
#if !defined(BORINGSSL_NO_CXX)
|
937
942
|
extern "C++" {
|
938
943
|
|
939
944
|
namespace bssl {
|
@@ -942,9 +947,22 @@ BORINGSSL_MAKE_DELETER(BIGNUM, BN_free)
|
|
942
947
|
BORINGSSL_MAKE_DELETER(BN_CTX, BN_CTX_free)
|
943
948
|
BORINGSSL_MAKE_DELETER(BN_MONT_CTX, BN_MONT_CTX_free)
|
944
949
|
|
950
|
+
class BN_CTXScope {
|
951
|
+
public:
|
952
|
+
BN_CTXScope(BN_CTX *ctx) : ctx_(ctx) { BN_CTX_start(ctx_); }
|
953
|
+
~BN_CTXScope() { BN_CTX_end(ctx_); }
|
954
|
+
|
955
|
+
private:
|
956
|
+
BN_CTX *ctx_;
|
957
|
+
|
958
|
+
BN_CTXScope(BN_CTXScope &) = delete;
|
959
|
+
BN_CTXScope &operator=(BN_CTXScope &) = delete;
|
960
|
+
};
|
961
|
+
|
945
962
|
} // namespace bssl
|
946
963
|
|
947
|
-
}
|
964
|
+
} // extern C++
|
965
|
+
#endif
|
948
966
|
|
949
967
|
#endif
|
950
968
|
|
@@ -967,5 +985,6 @@ BORINGSSL_MAKE_DELETER(BN_MONT_CTX, BN_MONT_CTX_free)
|
|
967
985
|
#define BN_R_TOO_MANY_TEMPORARY_VARIABLES 116
|
968
986
|
#define BN_R_BAD_ENCODING 117
|
969
987
|
#define BN_R_ENCODE_ERROR 118
|
988
|
+
#define BN_R_INVALID_INPUT 119
|
970
989
|
|
971
|
-
#endif
|
990
|
+
#endif // OPENSSL_HEADER_BN_H
|