grpc 1.84.0 → 1.85.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1004) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +40 -27
  3. data/include/grpc/event_engine/memory_allocator.h +1 -0
  4. data/include/grpc/grpc.h +3 -0
  5. data/include/grpc/grpc_security_constants.h +2 -0
  6. data/include/grpc/impl/channel_arg_names.h +4 -0
  7. data/src/core/call/call_filters.h +10 -10
  8. data/src/core/{lib/security/authorization → call}/evaluate_args.cc +22 -1
  9. data/src/core/{lib/security/authorization → call}/evaluate_args.h +19 -5
  10. data/src/core/call/filter_fusion.h +15 -15
  11. data/src/core/call/interception_chain.h +3 -3
  12. data/src/core/call/metadata_batch.cc +1 -0
  13. data/src/core/call/metadata_batch.h +45 -33
  14. data/src/core/call/parsed_metadata.h +3 -3
  15. data/src/core/call/request_buffer.cc +6 -6
  16. data/src/core/call/request_buffer.h +1 -1
  17. data/src/core/channelz/channel_trace.cc +5 -5
  18. data/src/core/channelz/channel_trace.h +1 -1
  19. data/src/core/channelz/channelz.cc +9 -9
  20. data/src/core/channelz/channelz.h +12 -12
  21. data/src/core/channelz/channelz_registry.cc +10 -10
  22. data/src/core/channelz/ztrace_collector.h +5 -5
  23. data/src/core/client_channel/client_channel.cc +4 -4
  24. data/src/core/client_channel/client_channel_filter.cc +14 -14
  25. data/src/core/client_channel/global_subchannel_pool.cc +4 -4
  26. data/src/core/client_channel/subchannel.cc +24 -23
  27. data/src/core/client_channel/subchannel_stream_client.cc +5 -5
  28. data/src/core/credentials/call/external/aws_external_account_credentials.cc +7 -7
  29. data/src/core/credentials/call/external/aws_request_signer.cc +16 -0
  30. data/src/core/credentials/call/external/external_account_credentials.cc +4 -4
  31. data/src/core/credentials/call/regional_access_boundary_fetcher.cc +9 -9
  32. data/src/core/credentials/call/token_fetcher/token_fetcher_credentials.cc +4 -4
  33. data/src/core/credentials/transport/google_default/google_default_credentials.cc +3 -3
  34. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +1 -1
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +9 -9
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +1 -1
  37. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +6 -6
  38. data/src/core/credentials/transport/tls/grpc_tls_certificate_verifier.cc +3 -3
  39. data/src/core/credentials/transport/tls/grpc_tls_crl_provider.cc +4 -4
  40. data/src/core/credentials/transport/tls/ssl_utils.cc +10 -0
  41. data/src/core/credentials/transport/tls/tls_security_connector.cc +10 -10
  42. data/src/core/credentials/transport/tls/tls_security_connector.h +6 -6
  43. data/src/core/credentials/transport/tls/tls_utils.h +9 -0
  44. data/src/core/ext/filters/channel_idle/legacy_channel_idle_filter.cc +1 -1
  45. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +1 -1
  46. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.cc +2 -2
  47. data/src/core/ext/filters/gcp_authentication/gcp_authentication_filter.h +1 -1
  48. data/src/core/ext/filters/http/message_compress/compression_filter.cc +15 -0
  49. data/src/core/ext/filters/rbac/rbac_filter.h +1 -1
  50. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +5 -5
  51. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +30 -21
  52. data/src/core/ext/transport/chttp2/server/chttp2_server.h +5 -11
  53. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +14 -11
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  55. data/src/core/ext/transport/chttp2/transport/flow_control.h +0 -4
  56. data/src/core/ext/transport/chttp2/transport/frame.h +9 -0
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -9
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -2
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +16 -18
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +2 -1
  61. data/src/core/ext/transport/chttp2/transport/http2_server_transport.cc +277 -189
  62. data/src/core/ext/transport/chttp2/transport/http2_server_transport.h +40 -17
  63. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +12 -24
  64. data/src/core/ext/transport/chttp2/transport/http2_transport.h +3 -29
  65. data/src/core/ext/transport/chttp2/transport/internal.h +2 -2
  66. data/src/core/ext/transport/chttp2/transport/parsing.cc +3 -2
  67. data/src/core/ext/transport/chttp2/transport/read_context.h +96 -3
  68. data/src/core/ext/transport/chttp2/transport/reclaimer.cc +32 -0
  69. data/src/core/ext/transport/chttp2/transport/reclaimer.h +64 -0
  70. data/src/core/ext/transport/chttp2/transport/security_frame.h +8 -8
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +17 -9
  72. data/src/core/ext/transport/chttp2/transport/write_cycle.h +23 -3
  73. data/src/core/ext/transport/inproc/inproc_transport.cc +5 -5
  74. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb.h +137 -73
  75. data/src/core/ext/upb-gen/grpc/channelz/v1/channelz.upb_minitable.c +45 -25
  76. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb.h +6 -6
  77. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.c +4 -4
  78. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/altscontext.upb_minitable.h +5 -5
  79. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb.h +46 -26
  80. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.c +17 -14
  81. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/handshaker.upb_minitable.h +5 -5
  82. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb.h +5 -5
  83. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.c +3 -3
  84. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/gcp/transport_security_common.upb_minitable.h +5 -5
  85. data/src/core/ext/upb-gen/grpc/health/v1/health.upb.h +329 -0
  86. data/src/core/ext/upb-gen/grpc/health/v1/health.upb_minitable.c +128 -0
  87. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/health/v1/health.upb_minitable.h +8 -5
  88. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb.h +5 -5
  89. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.c +3 -3
  90. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lb/v1/load_balancer.upb_minitable.h +5 -5
  91. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb.h +185 -23
  92. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.c +20 -12
  93. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls.upb_minitable.h +5 -5
  94. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb.h +58 -42
  95. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.c +17 -12
  96. data/src/core/ext/upb-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upb_minitable.h +5 -5
  97. data/src/core/ext/upbdefs-gen/grpc/channelz/v1/channelz.upbdefs.c +567 -549
  98. data/src/core/ext/upbdefs-gen/grpc/lookup/v1/rls_config.upbdefs.c +182 -0
  99. data/src/core/ext/upbdefs-gen/{src/proto/grpc → grpc}/lookup/v1/rls_config.upbdefs.h +14 -14
  100. data/src/core/filter/ext_proc/ext_proc_filter.cc +1603 -46
  101. data/src/core/filter/ext_proc/ext_proc_filter.h +55 -22
  102. data/src/core/filter/ext_proc/ext_proc_messages.cc +106 -51
  103. data/src/core/filter/ext_proc/ext_proc_messages.h +36 -9
  104. data/src/core/handshaker/handshaker.cc +4 -4
  105. data/src/core/handshaker/http_connect/http_connect_client_handshaker.cc +3 -3
  106. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +10 -10
  107. data/src/core/handshaker/security/secure_endpoint.cc +13 -13
  108. data/src/core/handshaker/security/security_handshaker.cc +6 -6
  109. data/src/core/handshaker/tcp_connect/tcp_connect_handshaker.cc +4 -4
  110. data/src/core/lib/channel/channel_args.cc +20 -0
  111. data/src/core/lib/channel/channel_args.h +17 -17
  112. data/src/core/lib/channel/promise_based_filter.cc +2 -2
  113. data/src/core/lib/channel/promise_based_filter.h +66 -27
  114. data/src/core/lib/debug/trace_flags.cc +2 -0
  115. data/src/core/lib/debug/trace_flags.h +1 -0
  116. data/src/core/lib/event_engine/ares_resolver.cc +14 -14
  117. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +7 -7
  118. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +4 -4
  119. data/src/core/lib/event_engine/default_event_engine.cc +5 -5
  120. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +9 -9
  121. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +16 -14
  122. data/src/core/lib/event_engine/posix_engine/file_descriptor_collection.cc +6 -6
  123. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +3 -3
  124. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +1 -1
  125. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +7 -7
  126. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +17 -17
  127. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +3 -3
  128. data/src/core/lib/event_engine/posix_engine/timer.cc +5 -5
  129. data/src/core/lib/event_engine/posix_engine/timer_manager.cc +5 -5
  130. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.cc +3 -3
  131. data/src/core/lib/event_engine/posix_engine/traced_buffer_list.h +1 -1
  132. data/src/core/lib/event_engine/thread_pool/thread_count.cc +1 -1
  133. data/src/core/lib/event_engine/thread_pool/thread_count.h +3 -3
  134. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +50 -21
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +3 -3
  136. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +3 -3
  137. data/src/core/lib/event_engine/windows/windows_engine.cc +15 -15
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +6 -6
  139. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +6 -6
  140. data/src/core/lib/experiments/experiments.cc +48 -0
  141. data/src/core/lib/experiments/experiments.h +24 -0
  142. data/src/core/lib/iomgr/buffer_list.cc +3 -3
  143. data/src/core/lib/iomgr/buffer_list.h +1 -1
  144. data/src/core/lib/iomgr/combiner.cc +0 -1
  145. data/src/core/lib/iomgr/ev_apple.cc +4 -4
  146. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +2 -2
  147. data/src/core/lib/iomgr/tcp_client_posix.cc +3 -3
  148. data/src/core/lib/iomgr/tcp_posix.cc +7 -7
  149. data/src/core/lib/promise/activity.cc +1 -1
  150. data/src/core/lib/promise/activity.h +1 -1
  151. data/src/core/lib/promise/arena_promise.h +7 -7
  152. data/src/core/lib/promise/detail/promise_factory.h +8 -8
  153. data/src/core/lib/promise/detail/promise_like.h +4 -4
  154. data/src/core/lib/promise/inter_activity_latch.h +6 -6
  155. data/src/core/lib/promise/inter_activity_pipe.h +1 -1
  156. data/src/core/lib/promise/observable.h +3 -3
  157. data/src/core/lib/promise/party.cc +1 -1
  158. data/src/core/lib/promise/try_seq.h +2 -2
  159. data/src/core/lib/resource_quota/arena.h +3 -3
  160. data/src/core/lib/resource_quota/memory_quota.cc +16 -16
  161. data/src/core/lib/resource_quota/memory_quota.h +1 -1
  162. data/src/core/lib/resource_quota/thread_quota.cc +3 -3
  163. data/src/core/lib/security/authorization/audit_logging.cc +5 -5
  164. data/src/core/lib/security/authorization/authorization_engine.h +1 -1
  165. data/src/core/lib/security/authorization/grpc_authorization_engine.h +1 -1
  166. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -1
  167. data/src/core/lib/security/authorization/grpc_server_authz_filter.h +1 -1
  168. data/src/core/lib/security/authorization/matchers.h +1 -1
  169. data/src/core/lib/surface/call.cc +8 -7
  170. data/src/core/lib/surface/call.h +3 -3
  171. data/src/core/lib/surface/call_utils.h +4 -0
  172. data/src/core/lib/surface/channel.cc +1 -1
  173. data/src/core/lib/surface/channel.h +1 -1
  174. data/src/core/lib/surface/channel_init.cc +1 -1
  175. data/src/core/lib/surface/init.cc +7 -7
  176. data/src/core/lib/surface/lame_client.cc +1 -1
  177. data/src/core/lib/surface/legacy_channel.cc +2 -2
  178. data/src/core/lib/surface/version.cc +1 -1
  179. data/src/core/lib/transport/transport_framing_endpoint_extension.h +3 -3
  180. data/src/core/load_balancing/autosharding/autosharding.cc +931 -0
  181. data/src/core/load_balancing/autosharding/autosharding.h +78 -0
  182. data/src/core/load_balancing/grpclb/grpclb_client_stats.cc +2 -2
  183. data/src/core/load_balancing/grpclb/load_balancer_api.cc +1 -1
  184. data/src/core/load_balancing/grpclb/load_balancer_api.h +3 -1
  185. data/src/core/load_balancing/health_check_client.cc +7 -7
  186. data/src/core/load_balancing/lb_policy.cc +1 -1
  187. data/src/core/load_balancing/oob_backend_metric.cc +5 -5
  188. data/src/core/load_balancing/outlier_detection/outlier_detection.cc +2 -2
  189. data/src/core/load_balancing/ring_hash/ring_hash.cc +109 -37
  190. data/src/core/load_balancing/rls/rls.cc +23 -17
  191. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +10 -10
  192. data/src/core/load_balancing/xds/cds.cc +6 -5
  193. data/src/core/load_balancing/xds/xds_cluster_impl.cc +2 -2
  194. data/src/core/load_balancing/xds/xds_override_host.cc +10 -10
  195. data/src/core/mitigation_engine/mitigation_engine.h +28 -4
  196. data/src/core/plugin_registry/grpc_plugin_registry.cc +2 -0
  197. data/src/core/resolver/dns/dns_resolver.cc +7 -7
  198. data/src/core/resolver/fake/fake_resolver.cc +5 -5
  199. data/src/core/resolver/google_c2p/google_c2p_resolver.cc +38 -30
  200. data/src/core/server/server.cc +30 -30
  201. data/src/core/server/server.h +4 -3
  202. data/src/core/server/server_config_selector_filter.cc +3 -3
  203. data/src/core/server/xds_server_config_fetcher_legacy.cc +15 -15
  204. data/src/core/telemetry/default_tcp_tracer.cc +1 -1
  205. data/src/core/telemetry/instrument.cc +30 -16
  206. data/src/core/telemetry/instrument.h +3 -3
  207. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +3 -3
  208. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -4
  209. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.h +2 -2
  210. data/src/core/tsi/alts/handshaker/alts_tsi_utils.h +1 -1
  211. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +1 -1
  212. data/src/core/tsi/ssl/key_logging/ssl_key_logging.cc +5 -5
  213. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +3 -3
  214. data/src/core/tsi/ssl_transport_security.cc +46 -13
  215. data/src/core/tsi/ssl_transport_security.h +7 -0
  216. data/src/core/tsi/ssl_transport_security_utils.cc +16 -6
  217. data/src/core/util/event_log.cc +3 -3
  218. data/src/core/util/http_client/httpcli.cc +5 -5
  219. data/src/core/util/http_client/httpcli.h +1 -1
  220. data/src/core/util/json/json_object_loader.cc +7 -0
  221. data/src/core/util/json/json_object_loader.h +17 -2
  222. data/src/core/util/latent_see.cc +123 -36
  223. data/src/core/util/latent_see.h +14 -1
  224. data/src/core/util/mpscq.cc +1 -1
  225. data/src/core/util/notification.h +4 -4
  226. data/src/core/util/sync.h +20 -6
  227. data/src/core/util/table.h +20 -22
  228. data/src/core/util/work_serializer.cc +2 -2
  229. data/src/core/xds/grpc/blackboard.cc +4 -3
  230. data/src/core/xds/grpc/certificate_provider_store.cc +2 -2
  231. data/src/core/xds/grpc/streaming_call_promise_wrapper.cc +181 -0
  232. data/src/core/xds/grpc/streaming_call_promise_wrapper.h +213 -0
  233. data/src/core/xds/grpc/xds_bootstrap_grpc_builder.cc +2 -2
  234. data/src/core/xds/grpc/xds_client_grpc.cc +8 -8
  235. data/src/core/xds/grpc/xds_cluster_specifier_plugin.cc +2 -2
  236. data/src/core/xds/grpc/xds_endpoint.cc +1 -1
  237. data/src/core/xds/grpc/xds_endpoint_parser.cc +11 -0
  238. data/src/core/xds/grpc/xds_grpc_service_parser.cc +12 -10
  239. data/src/core/xds/grpc/xds_http_ext_proc_filter.cc +17 -14
  240. data/src/core/xds/grpc/xds_matcher.h +2 -2
  241. data/src/core/xds/grpc/xds_transport_grpc.cc +125 -85
  242. data/src/core/xds/grpc/xds_transport_grpc.h +19 -4
  243. data/src/core/xds/xds_client/lrs_client.cc +22 -19
  244. data/src/core/xds/xds_client/xds_client.cc +19 -16
  245. data/src/core/xds/xds_client/xds_transport.h +49 -3
  246. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
  247. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
  248. data/src/ruby/lib/grpc/version.rb +1 -1
  249. data/src/ruby/pb/README.md +1 -1
  250. data/src/ruby/pb/generate_proto_ruby.sh +1 -1
  251. data/third_party/abseil-cpp/absl/algorithm/algorithm.h +34 -2
  252. data/third_party/abseil-cpp/absl/algorithm/container.h +345 -147
  253. data/third_party/abseil-cpp/absl/base/attributes.h +67 -44
  254. data/third_party/abseil-cpp/absl/base/call_once.h +1 -0
  255. data/third_party/abseil-cpp/absl/base/casts.cc +61 -0
  256. data/third_party/abseil-cpp/absl/base/casts.h +135 -2
  257. data/third_party/abseil-cpp/absl/base/config.h +63 -41
  258. data/third_party/abseil-cpp/absl/base/fast_type_id.h +30 -2
  259. data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +1 -1
  260. data/third_party/abseil-cpp/absl/base/internal/hardening.h +136 -0
  261. data/third_party/abseil-cpp/absl/base/internal/iterator_traits.h +6 -2
  262. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +39 -4
  263. data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.h +6 -0
  264. data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +77 -15
  265. data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +3 -4
  266. data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +26 -24
  267. data/third_party/abseil-cpp/absl/base/internal/spinlock.h +74 -29
  268. data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +1 -11
  269. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +52 -0
  270. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.cc +5 -1
  271. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +5 -0
  272. data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock_config.h +1 -1
  273. data/third_party/abseil-cpp/absl/base/macros.h +76 -37
  274. data/third_party/abseil-cpp/absl/base/nullability.h +5 -5
  275. data/third_party/abseil-cpp/absl/base/optimization.h +4 -5
  276. data/third_party/abseil-cpp/absl/base/options.h +46 -18
  277. data/third_party/abseil-cpp/absl/base/policy_checks.h +5 -5
  278. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.cc → throw_delegate.cc} +9 -7
  279. data/third_party/abseil-cpp/absl/base/{internal/throw_delegate.h → throw_delegate.h} +4 -14
  280. data/third_party/abseil-cpp/absl/cleanup/cleanup.h +7 -2
  281. data/third_party/abseil-cpp/absl/cleanup/internal/cleanup.h +3 -2
  282. data/third_party/abseil-cpp/absl/container/btree_map.h +60 -10
  283. data/third_party/abseil-cpp/absl/container/btree_set.h +61 -15
  284. data/third_party/abseil-cpp/absl/container/fixed_array.h +19 -21
  285. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +49 -27
  286. data/third_party/abseil-cpp/absl/container/flat_hash_set.h +50 -26
  287. data/third_party/abseil-cpp/absl/container/inlined_vector.h +42 -36
  288. data/third_party/abseil-cpp/absl/container/internal/btree.h +32 -24
  289. data/third_party/abseil-cpp/absl/container/internal/btree_container.h +30 -22
  290. data/third_party/abseil-cpp/absl/container/internal/common.h +57 -5
  291. data/third_party/abseil-cpp/absl/container/internal/common_policy_traits.h +1 -1
  292. data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +40 -36
  293. data/third_party/abseil-cpp/absl/container/internal/container_memory.h +119 -39
  294. data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +14 -2
  295. data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +14 -22
  296. data/third_party/abseil-cpp/absl/container/internal/hashtable_control_bytes.h +52 -52
  297. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +7 -7
  298. data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +7 -7
  299. data/third_party/abseil-cpp/absl/container/internal/inlined_vector.h +32 -40
  300. data/third_party/abseil-cpp/absl/container/internal/layout.h +13 -13
  301. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +95 -72
  302. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.cc +633 -365
  303. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +1016 -749
  304. data/third_party/abseil-cpp/absl/container/internal/raw_hash_set_resize_impl.h +0 -1
  305. data/third_party/abseil-cpp/absl/container/node_hash_map.h +58 -35
  306. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.cc +23 -6
  307. data/third_party/abseil-cpp/absl/crc/internal/cpu_detect.h +7 -1
  308. data/third_party/abseil-cpp/absl/crc/internal/crc.cc +4 -6
  309. data/third_party/abseil-cpp/absl/crc/internal/crc32_x86_arm_combined_simd.h +41 -0
  310. data/third_party/abseil-cpp/absl/crc/internal/crc_internal.h +0 -16
  311. data/third_party/abseil-cpp/absl/crc/internal/crc_memcpy_x86_arm_combined.cc +5 -0
  312. data/third_party/abseil-cpp/absl/crc/internal/crc_x86_arm_combined.cc +304 -188
  313. data/third_party/abseil-cpp/absl/crc/internal/non_temporal_arm_intrinsics.h +4 -2
  314. data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +2 -2
  315. data/third_party/abseil-cpp/absl/debugging/internal/demangle_rust.h +8 -0
  316. data/third_party/abseil-cpp/absl/debugging/internal/elf_mem_image.h +4 -4
  317. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.cc +15 -1
  318. data/third_party/abseil-cpp/absl/debugging/internal/examine_stack.h +7 -1
  319. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +12 -1
  320. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +6 -5
  321. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_emscripten-inl.inc +13 -11
  322. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +14 -7
  323. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_powerpc-inl.inc +3 -2
  324. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_riscv-inl.inc +6 -1
  325. data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_x86-inl.inc +14 -8
  326. data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +48 -38
  327. data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +4 -0
  328. data/third_party/abseil-cpp/absl/debugging/stacktrace.cc +63 -118
  329. data/third_party/abseil-cpp/absl/debugging/stacktrace.h +7 -47
  330. data/third_party/abseil-cpp/absl/debugging/symbolize.cc +20 -2
  331. data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +83 -149
  332. data/third_party/abseil-cpp/absl/debugging/symbolize_emscripten.inc +4 -17
  333. data/third_party/abseil-cpp/absl/debugging/symbolize_unimplemented.inc +4 -4
  334. data/third_party/abseil-cpp/absl/debugging/symbolize_win32.inc +2 -4
  335. data/third_party/abseil-cpp/absl/flags/commandlineflag.h +8 -6
  336. data/third_party/abseil-cpp/absl/flags/declare.h +9 -0
  337. data/third_party/abseil-cpp/absl/flags/flag.h +2 -1
  338. data/third_party/abseil-cpp/absl/flags/internal/commandlineflag.h +1 -1
  339. data/third_party/abseil-cpp/absl/flags/internal/flag.cc +19 -18
  340. data/third_party/abseil-cpp/absl/flags/internal/flag.h +33 -34
  341. data/third_party/abseil-cpp/absl/flags/internal/program_name.cc +2 -2
  342. data/third_party/abseil-cpp/absl/flags/marshalling.cc +1 -16
  343. data/third_party/abseil-cpp/absl/flags/marshalling.h +2 -28
  344. data/third_party/abseil-cpp/absl/flags/reflection.cc +11 -7
  345. data/third_party/abseil-cpp/absl/flags/usage_config.cc +2 -2
  346. data/third_party/abseil-cpp/absl/functional/any_invocable.h +22 -19
  347. data/third_party/abseil-cpp/absl/functional/bind_front.h +7 -1
  348. data/third_party/abseil-cpp/absl/functional/function_ref.h +125 -20
  349. data/third_party/abseil-cpp/absl/functional/internal/any_invocable.h +43 -31
  350. data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +4 -4
  351. data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +44 -6
  352. data/third_party/abseil-cpp/absl/hash/hash.h +1 -1
  353. data/third_party/abseil-cpp/absl/hash/internal/city.cc +39 -51
  354. data/third_party/abseil-cpp/absl/hash/internal/hash.cc +379 -14
  355. data/third_party/abseil-cpp/absl/hash/internal/hash.h +457 -353
  356. data/third_party/abseil-cpp/absl/log/absl_vlog_is_on.h +0 -2
  357. data/third_party/abseil-cpp/absl/log/internal/check_impl.h +2 -1
  358. data/third_party/abseil-cpp/absl/log/internal/check_op.cc +4 -0
  359. data/third_party/abseil-cpp/absl/log/internal/check_op.h +128 -50
  360. data/third_party/abseil-cpp/absl/log/internal/conditions.h +38 -35
  361. data/third_party/abseil-cpp/absl/log/internal/log_impl.h +108 -110
  362. data/third_party/abseil-cpp/absl/log/internal/log_message.cc +10 -6
  363. data/third_party/abseil-cpp/absl/log/internal/log_message.h +19 -1
  364. data/third_party/abseil-cpp/absl/log/internal/log_sink_set.cc +4 -4
  365. data/third_party/abseil-cpp/absl/log/internal/nullstream.h +1 -1
  366. data/third_party/abseil-cpp/absl/log/internal/proto.cc +13 -0
  367. data/third_party/abseil-cpp/absl/log/internal/strip.h +30 -31
  368. data/third_party/abseil-cpp/absl/log/internal/structured_proto.cc +5 -5
  369. data/third_party/abseil-cpp/absl/log/internal/structured_proto.h +6 -5
  370. data/third_party/abseil-cpp/absl/log/internal/vlog_config.cc +30 -30
  371. data/third_party/abseil-cpp/absl/log/internal/vlog_config.h +0 -1
  372. data/third_party/abseil-cpp/absl/log/log.h +2 -2
  373. data/third_party/abseil-cpp/absl/log/log_entry.cc +263 -0
  374. data/third_party/abseil-cpp/absl/log/log_entry.h +2 -0
  375. data/third_party/abseil-cpp/absl/log/vlog_is_on.h +0 -2
  376. data/third_party/abseil-cpp/absl/memory/memory.h +55 -5
  377. data/third_party/abseil-cpp/absl/meta/type_traits.h +161 -56
  378. data/third_party/abseil-cpp/absl/numeric/int128.h +41 -21
  379. data/third_party/abseil-cpp/absl/numeric/int128_have_intrinsic.inc +16 -22
  380. data/third_party/abseil-cpp/absl/numeric/int128_no_intrinsic.inc +5 -7
  381. data/third_party/abseil-cpp/absl/numeric/internal/bits.h +32 -4
  382. data/third_party/abseil-cpp/absl/profiling/internal/sample_recorder.h +9 -9
  383. data/third_party/abseil-cpp/absl/random/beta_distribution.h +2 -2
  384. data/third_party/abseil-cpp/absl/random/bit_gen_ref.h +26 -53
  385. data/third_party/abseil-cpp/absl/random/discrete_distribution.h +1 -1
  386. data/third_party/abseil-cpp/absl/random/distributions.h +17 -17
  387. data/third_party/abseil-cpp/absl/random/exponential_distribution.h +1 -1
  388. data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +8 -21
  389. data/third_party/abseil-cpp/absl/random/internal/entropy_pool.cc +2 -2
  390. data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +1 -1
  391. data/third_party/abseil-cpp/absl/random/internal/generate_real.h +1 -1
  392. data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +2 -2
  393. data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +2 -2
  394. data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +6 -6
  395. data/third_party/abseil-cpp/absl/random/internal/platform.h +0 -13
  396. data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +6 -6
  397. data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +2 -2
  398. data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +6 -5
  399. data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +5 -31
  400. data/third_party/abseil-cpp/absl/random/internal/seed_material.h +2 -1
  401. data/third_party/abseil-cpp/absl/random/internal/traits.h +21 -0
  402. data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +23 -23
  403. data/third_party/abseil-cpp/absl/random/mocking_access.h +74 -0
  404. data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +1 -1
  405. data/third_party/abseil-cpp/absl/status/internal/status_internal.cc +63 -18
  406. data/third_party/abseil-cpp/absl/status/internal/status_internal.h +30 -4
  407. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +225 -63
  408. data/third_party/abseil-cpp/absl/status/status.cc +66 -70
  409. data/third_party/abseil-cpp/absl/status/status.h +254 -23
  410. data/third_party/abseil-cpp/absl/status/status_payload_printer.h +3 -2
  411. data/third_party/abseil-cpp/absl/status/statusor.h +117 -137
  412. data/third_party/abseil-cpp/absl/strings/ascii.h +10 -6
  413. data/third_party/abseil-cpp/absl/strings/cord.cc +41 -17
  414. data/third_party/abseil-cpp/absl/strings/cord.h +26 -17
  415. data/third_party/abseil-cpp/absl/strings/cord_buffer.h +4 -2
  416. data/third_party/abseil-cpp/absl/strings/escaping.cc +305 -125
  417. data/third_party/abseil-cpp/absl/strings/escaping.h +12 -2
  418. data/third_party/abseil-cpp/absl/strings/internal/append_and_overwrite.h +93 -0
  419. data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +2 -2
  420. data/third_party/abseil-cpp/absl/strings/internal/cordz_handle.cc +6 -6
  421. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.cc +27 -21
  422. data/third_party/abseil-cpp/absl/strings/internal/cordz_info.h +11 -19
  423. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.cc +6 -0
  424. data/third_party/abseil-cpp/absl/strings/internal/damerau_levenshtein_distance.h +1 -0
  425. data/third_party/abseil-cpp/absl/strings/internal/escaping.cc +0 -141
  426. data/third_party/abseil-cpp/absl/strings/internal/escaping.h +2 -24
  427. data/third_party/abseil-cpp/absl/strings/internal/resize_uninitialized.h +31 -36
  428. data/third_party/abseil-cpp/absl/strings/internal/stl_type_traits.h +39 -39
  429. data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +14 -22
  430. data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +2 -2
  431. data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +2 -4
  432. data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +921 -231
  433. data/third_party/abseil-cpp/absl/strings/internal/str_join_internal.h +18 -16
  434. data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +16 -12
  435. data/third_party/abseil-cpp/absl/strings/internal/stringify_sink.h +12 -0
  436. data/third_party/abseil-cpp/absl/strings/numbers.cc +477 -8
  437. data/third_party/abseil-cpp/absl/strings/numbers.h +29 -12
  438. data/third_party/abseil-cpp/absl/strings/resize_and_overwrite.h +198 -0
  439. data/third_party/abseil-cpp/absl/strings/str_cat.cc +96 -91
  440. data/third_party/abseil-cpp/absl/strings/str_cat.h +53 -13
  441. data/third_party/abseil-cpp/absl/strings/str_split.h +14 -9
  442. data/third_party/abseil-cpp/absl/strings/string_view.h +10 -716
  443. data/third_party/abseil-cpp/absl/strings/substitute.cc +24 -24
  444. data/third_party/abseil-cpp/absl/strings/substitute.h +2 -2
  445. data/third_party/abseil-cpp/absl/synchronization/barrier.cc +1 -1
  446. data/third_party/abseil-cpp/absl/synchronization/blocking_counter.cc +2 -2
  447. data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +24 -3
  448. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +30 -33
  449. data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +2 -2
  450. data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +5 -0
  451. data/third_party/abseil-cpp/absl/synchronization/mutex.cc +41 -29
  452. data/third_party/abseil-cpp/absl/synchronization/mutex.h +199 -94
  453. data/third_party/abseil-cpp/absl/synchronization/notification.cc +5 -5
  454. data/third_party/abseil-cpp/absl/synchronization/notification.h +1 -1
  455. data/third_party/abseil-cpp/absl/time/clock.cc +29 -30
  456. data/third_party/abseil-cpp/absl/time/clock.h +3 -0
  457. data/third_party/abseil-cpp/absl/time/duration.cc +2 -2
  458. data/third_party/abseil-cpp/absl/time/format.cc +3 -10
  459. data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +12 -0
  460. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +131 -91
  461. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_lookup.cc +6 -103
  462. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.cc +185 -0
  463. data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_name_win.h +37 -0
  464. data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +10 -15
  465. data/third_party/abseil-cpp/absl/time/time.cc +4 -4
  466. data/third_party/abseil-cpp/absl/time/time.h +14 -13
  467. data/third_party/abseil-cpp/absl/types/compare.h +64 -63
  468. data/third_party/abseil-cpp/absl/types/internal/span.h +6 -6
  469. data/third_party/abseil-cpp/absl/types/optional.h +31 -4
  470. data/third_party/abseil-cpp/absl/types/optional_ref.h +295 -0
  471. data/third_party/{boringssl-with-bazel/crypto/x509/x_val.cc → abseil-cpp/absl/types/source_location.cc} +4 -14
  472. data/third_party/abseil-cpp/absl/types/source_location.h +172 -0
  473. data/third_party/abseil-cpp/absl/types/span.h +67 -38
  474. data/third_party/abseil-cpp/absl/types/variant.h +75 -18
  475. data/third_party/abseil-cpp/absl/utility/utility.h +112 -16
  476. data/third_party/boringssl-with-bazel/crypto/aes/aes.cc +3 -0
  477. data/third_party/boringssl-with-bazel/crypto/armv8_feature_parsing.h +67 -0
  478. data/third_party/boringssl-with-bazel/crypto/asn1/a_bitstr.cc +143 -105
  479. data/third_party/boringssl-with-bazel/crypto/asn1/a_bool.cc +5 -8
  480. data/third_party/boringssl-with-bazel/crypto/asn1/a_d2i_fp.cc +3 -3
  481. data/third_party/boringssl-with-bazel/crypto/asn1/a_dup.cc +6 -6
  482. data/third_party/boringssl-with-bazel/crypto/asn1/a_gentm.cc +33 -12
  483. data/third_party/boringssl-with-bazel/crypto/asn1/a_i2d_fp.cc +7 -6
  484. data/third_party/boringssl-with-bazel/crypto/asn1/a_int.cc +80 -52
  485. data/third_party/boringssl-with-bazel/crypto/asn1/a_mbstr.cc +7 -4
  486. data/third_party/boringssl-with-bazel/crypto/asn1/a_object.cc +70 -72
  487. data/third_party/boringssl-with-bazel/crypto/asn1/a_strex.cc +38 -42
  488. data/third_party/boringssl-with-bazel/crypto/asn1/a_strnid.cc +41 -39
  489. data/third_party/boringssl-with-bazel/crypto/asn1/a_time.cc +59 -35
  490. data/third_party/boringssl-with-bazel/crypto/asn1/a_type.cc +275 -15
  491. data/third_party/boringssl-with-bazel/crypto/asn1/a_utctm.cc +32 -13
  492. data/third_party/boringssl-with-bazel/crypto/asn1/asn1_lib.cc +128 -30
  493. data/third_party/boringssl-with-bazel/crypto/asn1/asn_pack.cc +10 -10
  494. data/third_party/boringssl-with-bazel/crypto/asn1/f_int.cc +1 -1
  495. data/third_party/boringssl-with-bazel/crypto/asn1/f_string.cc +1 -1
  496. data/third_party/boringssl-with-bazel/crypto/asn1/internal.h +261 -115
  497. data/third_party/boringssl-with-bazel/crypto/asn1/posix_time.cc +8 -5
  498. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_dec.cc +373 -725
  499. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_enc.cc +211 -526
  500. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_fre.cc +22 -19
  501. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_new.cc +26 -24
  502. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_typ.cc +19 -5
  503. data/third_party/boringssl-with-bazel/crypto/asn1/tasn_utl.cc +47 -51
  504. data/third_party/boringssl-with-bazel/crypto/base64/base64.cc +14 -15
  505. data/third_party/boringssl-with-bazel/crypto/bcm_support.h +7 -29
  506. data/third_party/boringssl-with-bazel/crypto/bio/bio.cc +234 -176
  507. data/third_party/boringssl-with-bazel/crypto/bio/bio_mem.cc +72 -86
  508. data/third_party/boringssl-with-bazel/crypto/bio/connect.cc +153 -199
  509. data/third_party/boringssl-with-bazel/crypto/bio/errno.cc +3 -1
  510. data/third_party/boringssl-with-bazel/crypto/bio/fd.cc +56 -55
  511. data/third_party/boringssl-with-bazel/crypto/bio/file.cc +70 -78
  512. data/third_party/boringssl-with-bazel/crypto/bio/hexdump.cc +6 -4
  513. data/third_party/boringssl-with-bazel/crypto/bio/internal.h +69 -17
  514. data/third_party/boringssl-with-bazel/crypto/bio/pair.cc +117 -136
  515. data/third_party/boringssl-with-bazel/crypto/bio/printf.cc +1 -1
  516. data/third_party/boringssl-with-bazel/crypto/bio/socket.cc +116 -50
  517. data/third_party/boringssl-with-bazel/crypto/bio/socket_helper.cc +53 -5
  518. data/third_party/boringssl-with-bazel/crypto/blake2/blake2.cc +9 -5
  519. data/third_party/boringssl-with-bazel/crypto/bn/bn_asn1.cc +2 -2
  520. data/third_party/boringssl-with-bazel/crypto/bn/convert.cc +56 -70
  521. data/third_party/boringssl-with-bazel/crypto/bn/div.cc +102 -0
  522. data/third_party/boringssl-with-bazel/crypto/bn/exponentiation.cc +26 -42
  523. data/third_party/boringssl-with-bazel/crypto/bn/sqrt.cc +93 -0
  524. data/third_party/boringssl-with-bazel/crypto/buf/buf.cc +6 -5
  525. data/third_party/boringssl-with-bazel/crypto/bytestring/asn1_compat.cc +6 -5
  526. data/third_party/boringssl-with-bazel/crypto/bytestring/ber.cc +22 -20
  527. data/third_party/boringssl-with-bazel/crypto/bytestring/cbb.cc +119 -59
  528. data/third_party/boringssl-with-bazel/crypto/bytestring/cbs.cc +115 -31
  529. data/third_party/boringssl-with-bazel/crypto/bytestring/internal.h +79 -24
  530. data/third_party/boringssl-with-bazel/crypto/bytestring/unicode.cc +2 -2
  531. data/third_party/boringssl-with-bazel/crypto/chacha/chacha.cc +5 -3
  532. data/third_party/boringssl-with-bazel/crypto/chacha/internal.h +23 -22
  533. data/third_party/boringssl-with-bazel/crypto/cipher/derive_key.cc +14 -18
  534. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesctrhmac.cc +73 -58
  535. data/third_party/boringssl-with-bazel/crypto/cipher/e_aeseax.cc +132 -70
  536. data/third_party/boringssl-with-bazel/crypto/cipher/e_aesgcmsiv.cc +390 -249
  537. data/third_party/boringssl-with-bazel/crypto/cipher/e_chacha20poly1305.cc +200 -137
  538. data/third_party/boringssl-with-bazel/crypto/cipher/e_des.cc +45 -29
  539. data/third_party/boringssl-with-bazel/crypto/cipher/e_null.cc +9 -5
  540. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc2.cc +43 -28
  541. data/third_party/boringssl-with-bazel/crypto/cipher/e_rc4.cc +7 -5
  542. data/third_party/boringssl-with-bazel/crypto/cipher/e_tls.cc +250 -237
  543. data/third_party/boringssl-with-bazel/crypto/cipher/get_cipher.cc +12 -12
  544. data/third_party/boringssl-with-bazel/crypto/cipher/internal.h +59 -59
  545. data/third_party/boringssl-with-bazel/crypto/cipher/tls_cbc.cc +111 -111
  546. data/third_party/boringssl-with-bazel/crypto/cms/cms.cc +48 -42
  547. data/third_party/boringssl-with-bazel/crypto/conf/conf.cc +69 -63
  548. data/third_party/boringssl-with-bazel/crypto/conf/internal.h +11 -12
  549. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_apple.cc +8 -5
  550. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_fuchsia.cc +6 -1
  551. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_linux.cc +7 -1
  552. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_openbsd.cc +7 -21
  553. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_sysreg.cc +15 -41
  554. data/third_party/boringssl-with-bazel/crypto/cpu_aarch64_win.cc +16 -3
  555. data/third_party/boringssl-with-bazel/crypto/cpu_arm_freebsd.cc +4 -2
  556. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.cc +54 -31
  557. data/third_party/boringssl-with-bazel/crypto/cpu_arm_linux.h +79 -101
  558. data/third_party/boringssl-with-bazel/crypto/cpu_intel.cc +51 -45
  559. data/third_party/boringssl-with-bazel/crypto/crypto.cc +26 -55
  560. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519.cc +28 -25
  561. data/third_party/boringssl-with-bazel/crypto/curve25519/curve25519_tables.h +6 -6
  562. data/third_party/boringssl-with-bazel/crypto/curve25519/internal.h +14 -15
  563. data/third_party/boringssl-with-bazel/crypto/curve25519/spake25519.cc +23 -20
  564. data/third_party/boringssl-with-bazel/crypto/des/des.cc +27 -19
  565. data/third_party/boringssl-with-bazel/crypto/des/internal.h +4 -9
  566. data/third_party/boringssl-with-bazel/crypto/dh/dh_asn1.cc +34 -49
  567. data/third_party/boringssl-with-bazel/crypto/dh/params.cc +44 -41
  568. data/third_party/boringssl-with-bazel/crypto/digest/digest_extra.cc +87 -40
  569. data/third_party/boringssl-with-bazel/crypto/dsa/dsa.cc +237 -260
  570. data/third_party/boringssl-with-bazel/crypto/dsa/dsa_asn1.cc +100 -173
  571. data/third_party/boringssl-with-bazel/crypto/dsa/internal.h +23 -21
  572. data/third_party/boringssl-with-bazel/crypto/ec/ec_asn1.cc +181 -209
  573. data/third_party/boringssl-with-bazel/crypto/ec/ec_derive.cc +26 -28
  574. data/third_party/boringssl-with-bazel/crypto/ec/hash_to_curve.cc +265 -174
  575. data/third_party/boringssl-with-bazel/crypto/ec/internal.h +54 -18
  576. data/third_party/boringssl-with-bazel/crypto/ecdh/ecdh.cc +7 -5
  577. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_asn1.cc +50 -70
  578. data/third_party/boringssl-with-bazel/crypto/ecdsa/ecdsa_p1363.cc +54 -0
  579. data/third_party/boringssl-with-bazel/crypto/engine/engine.cc +7 -7
  580. data/third_party/boringssl-with-bazel/crypto/err/err.cc +116 -105
  581. data/third_party/boringssl-with-bazel/crypto/err/internal.h +8 -21
  582. data/third_party/boringssl-with-bazel/crypto/evp/evp.cc +238 -166
  583. data/third_party/boringssl-with-bazel/crypto/evp/evp_asn1.cc +202 -234
  584. data/third_party/boringssl-with-bazel/crypto/evp/evp_ctx.cc +260 -159
  585. data/third_party/boringssl-with-bazel/crypto/evp/evp_kem.cc +82 -0
  586. data/third_party/boringssl-with-bazel/crypto/evp/internal.h +292 -137
  587. data/third_party/boringssl-with-bazel/crypto/evp/p_dh.cc +198 -25
  588. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa.cc +333 -0
  589. data/third_party/boringssl-with-bazel/crypto/evp/p_ec.cc +427 -42
  590. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519.cc +270 -14
  591. data/third_party/boringssl-with-bazel/crypto/evp/p_hkdf.cc +70 -102
  592. data/third_party/boringssl-with-bazel/crypto/evp/p_mldsa.cc +549 -0
  593. data/third_party/boringssl-with-bazel/crypto/evp/p_mlkem.cc +485 -0
  594. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa.cc +666 -158
  595. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519.cc +290 -28
  596. data/third_party/boringssl-with-bazel/crypto/evp/p_xwing.cc +273 -0
  597. data/third_party/boringssl-with-bazel/crypto/evp/pbkdf.cc +14 -7
  598. data/third_party/boringssl-with-bazel/crypto/evp/print.cc +34 -89
  599. data/third_party/boringssl-with-bazel/crypto/evp/scrypt.cc +23 -21
  600. data/third_party/boringssl-with-bazel/crypto/evp/sign.cc +23 -42
  601. data/third_party/boringssl-with-bazel/crypto/ex_data.cc +40 -41
  602. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes.cc.inc +34 -28
  603. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/aes_nohw.cc.inc +119 -121
  604. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cbc.cc.inc +16 -14
  605. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/cfb.cc.inc +12 -10
  606. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ctr.cc.inc +7 -5
  607. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm.cc.inc +39 -29
  608. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/gcm_nohw.cc.inc +15 -13
  609. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/internal.h +193 -177
  610. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/key_wrap.cc.inc +5 -3
  611. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/mode_wrappers.cc.inc +7 -3
  612. data/third_party/boringssl-with-bazel/crypto/fipsmodule/aes/ofb.cc.inc +7 -5
  613. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm.cc +24 -19
  614. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bcm_interface.h +512 -384
  615. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/add.cc.inc +7 -5
  616. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/asm/x86_64-gcc.cc.inc +63 -44
  617. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bn.cc.inc +40 -37
  618. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/bytes.cc.inc +27 -22
  619. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/cmp.cc.inc +9 -7
  620. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/ctx.cc.inc +62 -126
  621. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div.cc.inc +92 -167
  622. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/div_extra.cc.inc +15 -12
  623. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/exponentiation.cc.inc +96 -93
  624. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd.cc.inc +73 -92
  625. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/gcd_extra.cc.inc +59 -71
  626. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/generic.cc.inc +54 -57
  627. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/internal.h +333 -255
  628. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/jacobi.cc.inc +12 -19
  629. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery.cc.inc +80 -95
  630. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/montgomery_inv.cc.inc +53 -96
  631. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/mul.cc.inc +58 -419
  632. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/prime.cc.inc +164 -213
  633. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/random.cc.inc +27 -26
  634. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.cc.inc +12 -10
  635. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/rsaz_exp.h +47 -49
  636. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/shift.cc.inc +14 -17
  637. data/third_party/boringssl-with-bazel/crypto/fipsmodule/bn/sqrt.cc.inc +19 -108
  638. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/aead.cc.inc +427 -105
  639. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/cipher.cc.inc +412 -212
  640. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aes.cc.inc +230 -225
  641. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/e_aesccm.cc.inc +115 -84
  642. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cipher/internal.h +374 -27
  643. data/third_party/boringssl-with-bazel/crypto/fipsmodule/cmac/cmac.cc.inc +28 -23
  644. data/third_party/boringssl-with-bazel/crypto/fipsmodule/delocate.h +36 -40
  645. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/check.cc.inc +68 -78
  646. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/dh.cc.inc +154 -196
  647. data/third_party/boringssl-with-bazel/crypto/fipsmodule/dh/internal.h +24 -24
  648. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digest.cc.inc +40 -69
  649. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/digests.cc.inc +13 -7
  650. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/internal.h +13 -11
  651. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digest/md32_common.h +86 -81
  652. data/third_party/boringssl-with-bazel/crypto/fipsmodule/digestsign/digestsign.cc.inc +38 -34
  653. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec.cc.inc +187 -196
  654. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_key.cc.inc +196 -154
  655. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/ec_montgomery.cc.inc +65 -125
  656. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/felem.cc.inc +85 -22
  657. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/internal.h +281 -287
  658. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/oct.cc.inc +23 -22
  659. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256.cc.inc +514 -573
  660. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256_internal.h +193 -0
  661. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/scalar.cc.inc +44 -39
  662. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple.cc.inc +58 -90
  663. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/simple_mul.cc.inc +39 -34
  664. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/util.cc.inc +6 -3
  665. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/wnaf.cc.inc +23 -20
  666. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdh/ecdh.cc.inc +6 -3
  667. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/ecdsa.cc.inc +47 -37
  668. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ecdsa/internal.h +5 -10
  669. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/internal.h +38 -0
  670. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/jitter.cc.inc +463 -0
  671. data/third_party/boringssl-with-bazel/crypto/fipsmodule/entropy/sha512.cc.inc +329 -0
  672. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hkdf/hkdf.cc.inc +8 -6
  673. data/third_party/boringssl-with-bazel/crypto/fipsmodule/hmac/hmac.cc.inc +19 -16
  674. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/internal.h +41 -15
  675. data/third_party/boringssl-with-bazel/crypto/fipsmodule/keccak/keccak.cc.inc +172 -44
  676. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/fips_known_values.inc +5 -5
  677. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mldsa/mldsa.cc.inc +1632 -766
  678. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/fips_known_values.inc +5 -5
  679. data/third_party/boringssl-with-bazel/crypto/fipsmodule/mlkem/mlkem.cc.inc +740 -436
  680. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/android_entropy_client.cc.inc +82 -0
  681. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/ctrdrbg.cc.inc +240 -53
  682. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/internal.h +41 -26
  683. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rand/rand.cc.inc +221 -218
  684. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/internal.h +64 -67
  685. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/padding.cc.inc +49 -57
  686. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa.cc.inc +247 -234
  687. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/rsa_impl.cc.inc +392 -692
  688. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/fips.cc.inc +10 -10
  689. data/third_party/boringssl-with-bazel/crypto/fipsmodule/self_check/self_check.cc.inc +479 -449
  690. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/internal.h +34 -11
  691. data/third_party/boringssl-with-bazel/crypto/fipsmodule/service_indicator/service_indicator.cc.inc +46 -43
  692. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/internal.h +61 -70
  693. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha1.cc.inc +27 -13
  694. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha256.cc.inc +46 -30
  695. data/third_party/boringssl-with-bazel/crypto/fipsmodule/sha/sha512.cc.inc +47 -47
  696. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/address.h +98 -73
  697. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.cc.inc +108 -98
  698. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/fors.h +14 -24
  699. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.cc.inc +94 -91
  700. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/merkle.h +19 -31
  701. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/params.h +156 -56
  702. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/slhdsa.cc.inc +318 -132
  703. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.cc.inc +234 -81
  704. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/thash.h +20 -34
  705. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.cc.inc +97 -96
  706. data/third_party/boringssl-with-bazel/crypto/fipsmodule/slhdsa/wots.h +10 -20
  707. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/internal.h +2 -16
  708. data/third_party/boringssl-with-bazel/crypto/fipsmodule/tls/kdf.cc.inc +26 -26
  709. data/third_party/boringssl-with-bazel/crypto/fuzzer_mode.cc +5 -5
  710. data/third_party/boringssl-with-bazel/crypto/hpke/hpke.cc +461 -97
  711. data/third_party/boringssl-with-bazel/crypto/hrss/hrss.cc +153 -149
  712. data/third_party/boringssl-with-bazel/crypto/hrss/internal.h +9 -13
  713. data/third_party/boringssl-with-bazel/crypto/internal.h +531 -394
  714. data/third_party/boringssl-with-bazel/crypto/kyber/internal.h +117 -12
  715. data/third_party/boringssl-with-bazel/crypto/kyber/kyber.cc +59 -58
  716. data/third_party/boringssl-with-bazel/crypto/lhash/internal.h +38 -37
  717. data/third_party/boringssl-with-bazel/crypto/lhash/lhash.cc +68 -65
  718. data/third_party/boringssl-with-bazel/crypto/md4/md4.cc +19 -6
  719. data/third_party/boringssl-with-bazel/crypto/md5/internal.h +6 -9
  720. data/third_party/boringssl-with-bazel/crypto/md5/md5.cc +18 -6
  721. data/third_party/boringssl-with-bazel/crypto/mem.cc +61 -65
  722. data/third_party/boringssl-with-bazel/crypto/mem_internal.h +671 -0
  723. data/third_party/boringssl-with-bazel/crypto/mldsa/mldsa.cc +238 -32
  724. data/third_party/boringssl-with-bazel/crypto/mlkem/mlkem.cc +21 -65
  725. data/third_party/boringssl-with-bazel/crypto/obj/obj.cc +132 -157
  726. data/third_party/boringssl-with-bazel/crypto/obj/obj_dat.h +79 -1
  727. data/third_party/boringssl-with-bazel/crypto/obj/obj_xref.cc +14 -11
  728. data/third_party/boringssl-with-bazel/crypto/params_internal.h +30 -0
  729. data/third_party/boringssl-with-bazel/crypto/pem/internal.h +20 -15
  730. data/third_party/boringssl-with-bazel/crypto/pem/pem_all.cc +20 -19
  731. data/third_party/boringssl-with-bazel/crypto/pem/pem_info.cc +72 -76
  732. data/third_party/boringssl-with-bazel/crypto/pem/pem_lib.cc +215 -217
  733. data/third_party/boringssl-with-bazel/crypto/pem/pem_oth.cc +6 -6
  734. data/third_party/boringssl-with-bazel/crypto/pem/pem_pk8.cc +13 -13
  735. data/third_party/boringssl-with-bazel/crypto/pem/pem_pkey.cc +11 -11
  736. data/third_party/boringssl-with-bazel/crypto/pkcs7/internal.h +12 -17
  737. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7.cc +29 -27
  738. data/third_party/boringssl-with-bazel/crypto/pkcs7/pkcs7_x509.cc +55 -49
  739. data/third_party/boringssl-with-bazel/crypto/pkcs8/internal.h +21 -26
  740. data/third_party/boringssl-with-bazel/crypto/pkcs8/p5_pbev2.cc +33 -31
  741. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8.cc +73 -81
  742. data/third_party/boringssl-with-bazel/crypto/pkcs8/pkcs8_x509.cc +139 -138
  743. data/third_party/boringssl-with-bazel/crypto/poly1305/internal.h +3 -7
  744. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305.cc +5 -4
  745. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_arm.cc +43 -47
  746. data/third_party/boringssl-with-bazel/crypto/poly1305/poly1305_vec.cc +29 -26
  747. data/third_party/boringssl-with-bazel/crypto/pool/internal.h +64 -20
  748. data/third_party/boringssl-with-bazel/crypto/pool/pool.cc +177 -157
  749. data/third_party/boringssl-with-bazel/crypto/rand/deterministic.cc +9 -16
  750. data/third_party/boringssl-with-bazel/crypto/rand/fork_detect.cc +70 -42
  751. data/third_party/boringssl-with-bazel/crypto/rand/forkunsafe.cc +7 -7
  752. data/third_party/boringssl-with-bazel/crypto/rand/getentropy.cc +6 -13
  753. data/third_party/boringssl-with-bazel/crypto/rand/internal.h +16 -4
  754. data/third_party/boringssl-with-bazel/crypto/rand/ios.cc +4 -11
  755. data/third_party/boringssl-with-bazel/crypto/rand/rand.cc +11 -9
  756. data/third_party/boringssl-with-bazel/crypto/rand/trusty.cc +4 -11
  757. data/third_party/boringssl-with-bazel/crypto/rand/urandom.cc +16 -195
  758. data/third_party/boringssl-with-bazel/crypto/rand/windows.cc +12 -19
  759. data/third_party/boringssl-with-bazel/crypto/refcount.cc +7 -17
  760. data/third_party/boringssl-with-bazel/crypto/rsa/internal.h +22 -7
  761. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_asn1.cc +199 -78
  762. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_crypt.cc +49 -50
  763. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_extra.cc +11 -0
  764. data/third_party/boringssl-with-bazel/crypto/rsa/rsa_print.cc +4 -6
  765. data/third_party/boringssl-with-bazel/crypto/sha/sha1.cc +3 -0
  766. data/third_party/boringssl-with-bazel/crypto/sha/sha256.cc +3 -1
  767. data/third_party/boringssl-with-bazel/crypto/sha/sha512.cc +6 -4
  768. data/third_party/boringssl-with-bazel/crypto/siphash/siphash.cc +2 -0
  769. data/third_party/boringssl-with-bazel/crypto/slhdsa/slhdsa.cc +43 -6
  770. data/third_party/boringssl-with-bazel/crypto/spake2plus/internal.h +31 -31
  771. data/third_party/boringssl-with-bazel/crypto/spake2plus/spake2plus.cc +1 -1
  772. data/third_party/boringssl-with-bazel/crypto/stack/stack.cc +89 -130
  773. data/third_party/boringssl-with-bazel/crypto/thread.cc +14 -14
  774. data/third_party/boringssl-with-bazel/crypto/thread_none.cc +10 -13
  775. data/third_party/boringssl-with-bazel/crypto/thread_pthread.cc +22 -35
  776. data/third_party/boringssl-with-bazel/crypto/thread_win.cc +29 -40
  777. data/third_party/boringssl-with-bazel/crypto/trust_token/internal.h +81 -88
  778. data/third_party/boringssl-with-bazel/crypto/trust_token/pmbtoken.cc +160 -144
  779. data/third_party/boringssl-with-bazel/crypto/trust_token/trust_token.cc +96 -80
  780. data/third_party/boringssl-with-bazel/crypto/trust_token/voprf.cc +90 -87
  781. data/third_party/boringssl-with-bazel/crypto/x509/a_digest.cc +5 -5
  782. data/third_party/boringssl-with-bazel/crypto/x509/a_sign.cc +51 -48
  783. data/third_party/boringssl-with-bazel/crypto/x509/a_verify.cc +30 -34
  784. data/third_party/boringssl-with-bazel/crypto/x509/algorithm.cc +47 -16
  785. data/third_party/boringssl-with-bazel/crypto/x509/asn1_gen.cc +41 -43
  786. data/third_party/boringssl-with-bazel/crypto/x509/by_dir.cc +183 -237
  787. data/third_party/boringssl-with-bazel/crypto/x509/by_file.cc +29 -30
  788. data/third_party/boringssl-with-bazel/crypto/x509/internal.h +276 -180
  789. data/third_party/boringssl-with-bazel/crypto/x509/name_print.cc +15 -13
  790. data/third_party/boringssl-with-bazel/crypto/x509/policy.cc +415 -525
  791. data/third_party/boringssl-with-bazel/crypto/x509/rsa_pss.cc +94 -271
  792. data/third_party/boringssl-with-bazel/crypto/x509/t_crl.cc +11 -8
  793. data/third_party/boringssl-with-bazel/crypto/x509/t_req.cc +26 -23
  794. data/third_party/boringssl-with-bazel/crypto/x509/t_x509.cc +26 -22
  795. data/third_party/boringssl-with-bazel/crypto/x509/t_x509a.cc +3 -1
  796. data/third_party/boringssl-with-bazel/crypto/x509/v3_akey.cc +69 -76
  797. data/third_party/boringssl-with-bazel/crypto/x509/v3_akeya.cc +2 -2
  798. data/third_party/boringssl-with-bazel/crypto/x509/v3_alt.cc +112 -69
  799. data/third_party/boringssl-with-bazel/crypto/x509/v3_bcons.cc +15 -14
  800. data/third_party/boringssl-with-bazel/crypto/x509/v3_bitst.cc +16 -18
  801. data/third_party/boringssl-with-bazel/crypto/x509/v3_conf.cc +62 -67
  802. data/third_party/boringssl-with-bazel/crypto/x509/v3_cpols.cc +143 -170
  803. data/third_party/boringssl-with-bazel/crypto/x509/v3_crld.cc +121 -165
  804. data/third_party/boringssl-with-bazel/crypto/x509/v3_enum.cc +13 -12
  805. data/third_party/boringssl-with-bazel/crypto/x509/v3_extku.cc +17 -34
  806. data/third_party/boringssl-with-bazel/crypto/x509/v3_genn.cc +20 -10
  807. data/third_party/boringssl-with-bazel/crypto/x509/v3_ia5.cc +22 -18
  808. data/third_party/boringssl-with-bazel/crypto/x509/v3_info.cc +45 -47
  809. data/third_party/boringssl-with-bazel/crypto/x509/v3_int.cc +35 -33
  810. data/third_party/boringssl-with-bazel/crypto/x509/v3_lib.cc +106 -61
  811. data/third_party/boringssl-with-bazel/crypto/x509/v3_ncons.cc +642 -358
  812. data/third_party/boringssl-with-bazel/crypto/x509/v3_ocsp.cc +25 -22
  813. data/third_party/boringssl-with-bazel/crypto/x509/v3_pcons.cc +15 -14
  814. data/third_party/boringssl-with-bazel/crypto/x509/v3_pmaps.cc +16 -15
  815. data/third_party/boringssl-with-bazel/crypto/x509/v3_prn.cc +6 -6
  816. data/third_party/boringssl-with-bazel/crypto/x509/v3_purp.cc +150 -137
  817. data/third_party/boringssl-with-bazel/crypto/x509/v3_skey.cc +23 -26
  818. data/third_party/boringssl-with-bazel/crypto/x509/v3_utl.cc +151 -178
  819. data/third_party/boringssl-with-bazel/crypto/x509/x509.cc +1 -1
  820. data/third_party/boringssl-with-bazel/crypto/x509/x509_att.cc +32 -30
  821. data/third_party/boringssl-with-bazel/crypto/x509/x509_cmp.cc +95 -88
  822. data/third_party/boringssl-with-bazel/crypto/x509/x509_d2.cc +9 -9
  823. data/third_party/boringssl-with-bazel/crypto/x509/x509_def.cc +6 -8
  824. data/third_party/boringssl-with-bazel/crypto/x509/x509_ext.cc +46 -24
  825. data/third_party/boringssl-with-bazel/crypto/x509/x509_lu.cc +211 -195
  826. data/third_party/boringssl-with-bazel/crypto/x509/x509_obj.cc +20 -16
  827. data/third_party/boringssl-with-bazel/crypto/x509/x509_req.cc +37 -46
  828. data/third_party/boringssl-with-bazel/crypto/x509/x509_set.cc +62 -90
  829. data/third_party/boringssl-with-bazel/crypto/x509/x509_trs.cc +18 -13
  830. data/third_party/boringssl-with-bazel/crypto/x509/x509_v3.cc +33 -33
  831. data/third_party/boringssl-with-bazel/crypto/x509/x509_vfy.cc +109 -110
  832. data/third_party/boringssl-with-bazel/crypto/x509/x509_vpm.cc +56 -47
  833. data/third_party/boringssl-with-bazel/crypto/x509/x509cset.cc +27 -40
  834. data/third_party/boringssl-with-bazel/crypto/x509/x509name.cc +77 -67
  835. data/third_party/boringssl-with-bazel/crypto/x509/x509rset.cc +5 -17
  836. data/third_party/boringssl-with-bazel/crypto/x509/x509spki.cc +13 -13
  837. data/third_party/boringssl-with-bazel/crypto/x509/x_algor.cc +131 -24
  838. data/third_party/boringssl-with-bazel/crypto/x509/x_all.cc +72 -39
  839. data/third_party/boringssl-with-bazel/crypto/x509/x_attrib.cc +10 -4
  840. data/third_party/boringssl-with-bazel/crypto/x509/x_crl.cc +77 -44
  841. data/third_party/boringssl-with-bazel/crypto/x509/x_exten.cc +6 -0
  842. data/third_party/boringssl-with-bazel/crypto/x509/x_name.cc +311 -383
  843. data/third_party/boringssl-with-bazel/crypto/x509/x_pubkey.cc +129 -82
  844. data/third_party/boringssl-with-bazel/crypto/x509/x_req.cc +11 -6
  845. data/third_party/boringssl-with-bazel/crypto/x509/x_sig.cc +4 -4
  846. data/third_party/boringssl-with-bazel/crypto/x509/x_spki.cc +11 -1
  847. data/third_party/boringssl-with-bazel/crypto/x509/x_x509.cc +285 -280
  848. data/third_party/boringssl-with-bazel/crypto/x509/x_x509a.cc +60 -60
  849. data/third_party/boringssl-with-bazel/crypto/xwing/xwing.cc +257 -0
  850. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_64_win_asm.inc +301 -0
  851. data/third_party/boringssl-with-bazel/gen/boringssl_prefix_symbols_internal_x86_win_asm.inc +301 -0
  852. data/third_party/boringssl-with-bazel/gen/crypto/err_data.cc +526 -500
  853. data/third_party/boringssl-with-bazel/include/openssl/aead.h +286 -114
  854. data/third_party/boringssl-with-bazel/include/openssl/aes.h +43 -43
  855. data/third_party/boringssl-with-bazel/include/openssl/asm_base.h +29 -16
  856. data/third_party/boringssl-with-bazel/include/openssl/asn1.h +641 -631
  857. data/third_party/boringssl-with-bazel/include/openssl/asn1t.h +7 -9
  858. data/third_party/boringssl-with-bazel/include/openssl/base.h +34 -54
  859. data/third_party/boringssl-with-bazel/include/openssl/base64.h +30 -30
  860. data/third_party/boringssl-with-bazel/include/openssl/bio.h +373 -316
  861. data/third_party/boringssl-with-bazel/include/openssl/blake2.h +15 -11
  862. data/third_party/boringssl-with-bazel/include/openssl/blowfish.h +10 -3
  863. data/third_party/boringssl-with-bazel/include/openssl/bn.h +298 -306
  864. data/third_party/boringssl-with-bazel/include/openssl/buf.h +14 -14
  865. data/third_party/boringssl-with-bazel/include/openssl/bytestring.h +272 -207
  866. data/third_party/boringssl-with-bazel/include/openssl/cast.h +45 -8
  867. data/third_party/boringssl-with-bazel/include/openssl/chacha.h +3 -3
  868. data/third_party/boringssl-with-bazel/include/openssl/cipher.h +334 -152
  869. data/third_party/boringssl-with-bazel/include/openssl/cmac.h +13 -13
  870. data/third_party/boringssl-with-bazel/include/openssl/cms.h +35 -34
  871. data/third_party/boringssl-with-bazel/include/openssl/conf.h +15 -14
  872. data/third_party/boringssl-with-bazel/include/openssl/crypto.h +15 -13
  873. data/third_party/boringssl-with-bazel/include/openssl/ctrdrbg.h +49 -15
  874. data/third_party/boringssl-with-bazel/include/openssl/curve25519.h +24 -24
  875. data/third_party/boringssl-with-bazel/include/openssl/des.h +22 -16
  876. data/third_party/boringssl-with-bazel/include/openssl/dh.h +95 -95
  877. data/third_party/boringssl-with-bazel/include/openssl/digest.h +140 -71
  878. data/third_party/boringssl-with-bazel/include/openssl/dsa.h +101 -101
  879. data/third_party/boringssl-with-bazel/include/openssl/ec.h +143 -119
  880. data/third_party/boringssl-with-bazel/include/openssl/ec_key.h +97 -97
  881. data/third_party/boringssl-with-bazel/include/openssl/ecdh.h +9 -9
  882. data/third_party/boringssl-with-bazel/include/openssl/ecdsa.h +89 -46
  883. data/third_party/boringssl-with-bazel/include/openssl/engine.h +5 -5
  884. data/third_party/boringssl-with-bazel/include/openssl/err.h +73 -71
  885. data/third_party/boringssl-with-bazel/include/openssl/evp.h +824 -344
  886. data/third_party/boringssl-with-bazel/include/openssl/evp_errors.h +9 -2
  887. data/third_party/boringssl-with-bazel/include/openssl/ex_data.h +27 -32
  888. data/third_party/boringssl-with-bazel/include/openssl/hkdf.h +6 -6
  889. data/third_party/boringssl-with-bazel/include/openssl/hmac.h +31 -31
  890. data/third_party/boringssl-with-bazel/include/openssl/hpke.h +133 -117
  891. data/third_party/boringssl-with-bazel/include/openssl/hrss.h +14 -8
  892. data/third_party/boringssl-with-bazel/include/openssl/kdf.h +20 -19
  893. data/third_party/boringssl-with-bazel/include/openssl/lhash.h +4 -25
  894. data/third_party/boringssl-with-bazel/include/openssl/md4.h +14 -7
  895. data/third_party/boringssl-with-bazel/include/openssl/md5.h +7 -7
  896. data/third_party/boringssl-with-bazel/include/openssl/mem.h +38 -38
  897. data/third_party/boringssl-with-bazel/include/openssl/mldsa.h +380 -24
  898. data/third_party/boringssl-with-bazel/include/openssl/mlkem.h +43 -43
  899. data/third_party/boringssl-with-bazel/include/openssl/nid.h +1297 -2
  900. data/third_party/boringssl-with-bazel/include/openssl/obj.h +49 -49
  901. data/third_party/boringssl-with-bazel/include/openssl/opensslconf.h +30 -0
  902. data/third_party/boringssl-with-bazel/include/openssl/params.h +42 -0
  903. data/third_party/boringssl-with-bazel/include/openssl/pem.h +39 -30
  904. data/third_party/boringssl-with-bazel/include/openssl/pkcs7.h +40 -40
  905. data/third_party/boringssl-with-bazel/include/openssl/pkcs8.h +69 -63
  906. data/third_party/boringssl-with-bazel/include/openssl/poly1305.h +8 -5
  907. data/third_party/boringssl-with-bazel/include/openssl/pool.h +54 -25
  908. data/third_party/boringssl-with-bazel/include/openssl/posix_time.h +6 -6
  909. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols.h +7866 -0
  910. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_S.h +585 -0
  911. data/third_party/boringssl-with-bazel/include/openssl/prefix_symbols_internal_c.h +305 -0
  912. data/third_party/boringssl-with-bazel/include/openssl/rand.h +18 -18
  913. data/third_party/boringssl-with-bazel/include/openssl/rc4.h +4 -4
  914. data/third_party/boringssl-with-bazel/include/openssl/ripemd.h +15 -10
  915. data/third_party/boringssl-with-bazel/include/openssl/rsa.h +272 -235
  916. data/third_party/boringssl-with-bazel/include/openssl/service_indicator.h +4 -81
  917. data/third_party/boringssl-with-bazel/include/openssl/sha.h +43 -166
  918. data/third_party/boringssl-with-bazel/include/openssl/sha2.h +201 -0
  919. data/third_party/boringssl-with-bazel/include/openssl/slhdsa.h +100 -48
  920. data/third_party/boringssl-with-bazel/include/openssl/span.h +190 -75
  921. data/third_party/boringssl-with-bazel/include/openssl/ssl.h +2168 -1567
  922. data/third_party/boringssl-with-bazel/include/openssl/ssl3.h +11 -69
  923. data/third_party/boringssl-with-bazel/include/openssl/stack.h +135 -80
  924. data/third_party/boringssl-with-bazel/include/openssl/target.h +13 -1
  925. data/third_party/boringssl-with-bazel/include/openssl/thread.h +0 -10
  926. data/third_party/boringssl-with-bazel/include/openssl/tls1.h +31 -310
  927. data/third_party/boringssl-with-bazel/include/openssl/tls_prf.h +47 -0
  928. data/third_party/boringssl-with-bazel/include/openssl/trust_token.h +97 -92
  929. data/third_party/boringssl-with-bazel/include/openssl/type_check.h +1 -1
  930. data/third_party/boringssl-with-bazel/include/openssl/x509.h +1805 -1857
  931. data/third_party/boringssl-with-bazel/include/openssl/x509v3.h +1 -1
  932. data/third_party/boringssl-with-bazel/include/openssl/xwing.h +115 -0
  933. data/third_party/boringssl-with-bazel/ssl/bio_ssl.cc +24 -19
  934. data/third_party/boringssl-with-bazel/ssl/d1_both.cc +59 -57
  935. data/third_party/boringssl-with-bazel/ssl/d1_lib.cc +53 -42
  936. data/third_party/boringssl-with-bazel/ssl/d1_pkt.cc +4 -4
  937. data/third_party/boringssl-with-bazel/ssl/d1_srtp.cc +2 -2
  938. data/third_party/boringssl-with-bazel/ssl/dtls_method.cc +10 -10
  939. data/third_party/boringssl-with-bazel/ssl/dtls_record.cc +6 -6
  940. data/third_party/boringssl-with-bazel/ssl/encrypted_client_hello.cc +61 -71
  941. data/third_party/boringssl-with-bazel/ssl/extensions.cc +967 -366
  942. data/third_party/boringssl-with-bazel/ssl/handoff.cc +77 -38
  943. data/third_party/boringssl-with-bazel/ssl/handshake.cc +63 -30
  944. data/third_party/boringssl-with-bazel/ssl/handshake_client.cc +129 -85
  945. data/third_party/boringssl-with-bazel/ssl/handshake_server.cc +116 -68
  946. data/third_party/boringssl-with-bazel/ssl/internal.h +983 -1207
  947. data/third_party/boringssl-with-bazel/ssl/s3_both.cc +34 -29
  948. data/third_party/boringssl-with-bazel/ssl/s3_lib.cc +4 -3
  949. data/third_party/boringssl-with-bazel/ssl/s3_pkt.cc +12 -12
  950. data/third_party/boringssl-with-bazel/ssl/ssl_aead_ctx.cc +5 -5
  951. data/third_party/boringssl-with-bazel/ssl/ssl_asn1.cc +114 -59
  952. data/third_party/boringssl-with-bazel/ssl/ssl_buffer.cc +17 -18
  953. data/third_party/boringssl-with-bazel/ssl/ssl_cert.cc +99 -61
  954. data/third_party/boringssl-with-bazel/ssl/ssl_cipher.cc +143 -134
  955. data/third_party/boringssl-with-bazel/ssl/ssl_credential.cc +188 -90
  956. data/third_party/boringssl-with-bazel/ssl/ssl_file.cc +132 -225
  957. data/third_party/boringssl-with-bazel/ssl/ssl_key_share.cc +79 -7
  958. data/third_party/boringssl-with-bazel/ssl/ssl_lib.cc +698 -302
  959. data/third_party/boringssl-with-bazel/ssl/ssl_privkey.cc +102 -45
  960. data/third_party/boringssl-with-bazel/ssl/ssl_session.cc +117 -102
  961. data/third_party/boringssl-with-bazel/ssl/ssl_transcript.cc +3 -3
  962. data/third_party/boringssl-with-bazel/ssl/ssl_versions.cc +24 -24
  963. data/third_party/boringssl-with-bazel/ssl/ssl_x509.cc +184 -170
  964. data/third_party/boringssl-with-bazel/ssl/t1_enc.cc +12 -10
  965. data/third_party/boringssl-with-bazel/ssl/tls13_both.cc +86 -54
  966. data/third_party/boringssl-with-bazel/ssl/tls13_client.cc +176 -90
  967. data/third_party/boringssl-with-bazel/ssl/tls13_enc.cc +166 -112
  968. data/third_party/boringssl-with-bazel/ssl/tls13_server.cc +188 -97
  969. data/third_party/boringssl-with-bazel/ssl/tls_method.cc +23 -23
  970. data/third_party/boringssl-with-bazel/ssl/tls_record.cc +17 -14
  971. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_bareminimum.c.inc +47 -0
  972. data/third_party/boringssl-with-bazel/third_party/fiat/bedrock_unverified_platform.c.inc +137 -0
  973. data/third_party/boringssl-with-bazel/third_party/fiat/curve25519_64_adx.h +37 -33
  974. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64.h +4 -93
  975. data/third_party/boringssl-with-bazel/third_party/fiat/p256_64_msvc.h +4 -69
  976. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_32.br.c.inc +71 -0
  977. data/third_party/boringssl-with-bazel/third_party/fiat/p256_field_64.br.c.inc +84 -0
  978. data/third_party/boringssl-with-bazel/third_party/fiat/p256_point.br.c.inc +166 -0
  979. metadata +77 -52
  980. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +0 -240
  981. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +0 -56
  982. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb.h +0 -157
  983. data/src/core/ext/upb-gen/src/proto/grpc/health/v1/health.upb_minitable.c +0 -72
  984. data/src/core/ext/upbdefs-gen/src/proto/grpc/lookup/v1/rls_config.upbdefs.c +0 -181
  985. data/third_party/abseil-cpp/absl/base/internal/identity.h +0 -39
  986. data/third_party/abseil-cpp/absl/base/internal/nullability_deprecated.h +0 -106
  987. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.cc +0 -105
  988. data/third_party/abseil-cpp/absl/hash/internal/low_level_hash.h +0 -50
  989. data/third_party/abseil-cpp/absl/strings/string_view.cc +0 -257
  990. data/third_party/boringssl-with-bazel/crypto/evp/p_dh_asn1.cc +0 -142
  991. data/third_party/boringssl-with-bazel/crypto/evp/p_dsa_asn1.cc +0 -279
  992. data/third_party/boringssl-with-bazel/crypto/evp/p_ec_asn1.cc +0 -286
  993. data/third_party/boringssl-with-bazel/crypto/evp/p_ed25519_asn1.cc +0 -225
  994. data/third_party/boringssl-with-bazel/crypto/evp/p_rsa_asn1.cc +0 -198
  995. data/third_party/boringssl-with-bazel/crypto/evp/p_x25519_asn1.cc +0 -237
  996. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p224-64.cc.inc +0 -1163
  997. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.cc.inc +0 -741
  998. data/third_party/boringssl-with-bazel/crypto/fipsmodule/ec/p256-nistz.h +0 -207
  999. data/third_party/boringssl-with-bazel/crypto/fipsmodule/rsa/blinding.cc.inc +0 -147
  1000. data/third_party/boringssl-with-bazel/crypto/rand/getrandom_fillin.h +0 -64
  1001. data/third_party/boringssl-with-bazel/crypto/rand/passive.cc +0 -178
  1002. data/third_party/boringssl-with-bazel/crypto/x509/ext_dat.h +0 -92
  1003. data/third_party/boringssl-with-bazel/include/openssl/bcm_public.h +0 -82
  1004. data/third_party/boringssl-with-bazel/include/openssl/experimental/kyber.h +0 -146
@@ -24,12 +24,13 @@
24
24
  #include <openssl/ec.h>
25
25
  #include <openssl/ex_data.h>
26
26
 
27
+ #include "../../mem_internal.h"
27
28
  #include "../bn/internal.h"
28
29
 
29
- #if defined(__cplusplus)
30
- extern "C" {
31
- #endif
32
30
 
31
+ DECLARE_OPAQUE_STRUCT(ec_key_st, ECKey)
32
+
33
+ BSSL_NAMESPACE_BEGIN
33
34
 
34
35
  // EC internals.
35
36
 
@@ -49,157 +50,189 @@ static_assert(EC_MAX_WORDS <= BN_SMALL_MAX_WORDS,
49
50
  // Scalars.
50
51
 
51
52
  // An EC_SCALAR is an integer fully reduced modulo the order. Only the first
52
- // |order->width| words are used. An |EC_SCALAR| is specific to an |EC_GROUP|
53
+ // `order->width` words are used. An `EC_SCALAR` is specific to an `EC_GROUP`
53
54
  // and must not be mixed between groups.
54
55
  typedef struct {
55
56
  BN_ULONG words[EC_MAX_WORDS];
56
57
  } EC_SCALAR;
57
58
 
58
- // ec_bignum_to_scalar converts |in| to an |EC_SCALAR| and writes it to
59
- // |*out|. It returns one on success and zero if |in| is out of range.
60
- OPENSSL_EXPORT int ec_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out,
61
- const BIGNUM *in);
59
+ // ec_bignum_to_scalar converts `in` to an `EC_SCALAR` and writes it to
60
+ // `*out`. It returns one on success and zero if `in` is out of range.
61
+ int ec_bignum_to_scalar(const EC_GROUP *group, EC_SCALAR *out,
62
+ const BIGNUM *in);
62
63
 
63
- // ec_scalar_to_bytes serializes |in| as a big-endian bytestring to |out| and
64
- // sets |*out_len| to the number of bytes written. The number of bytes written
65
- // is |BN_num_bytes(&group->order)|, which is at most |EC_MAX_BYTES|.
66
- OPENSSL_EXPORT void ec_scalar_to_bytes(const EC_GROUP *group, uint8_t *out,
67
- size_t *out_len, const EC_SCALAR *in);
64
+ // ec_scalar_to_bytes serializes `in` as a big-endian bytestring to `out` and
65
+ // sets `*out_len` to the number of bytes written. The number of bytes written
66
+ // is `BN_num_bytes(&group->order)`, which is at most `EC_MAX_BYTES`.
67
+ void ec_scalar_to_bytes(const EC_GROUP *group, uint8_t *out, size_t *out_len,
68
+ const EC_SCALAR *in);
68
69
 
69
- // ec_scalar_from_bytes deserializes |in| and stores the resulting scalar over
70
- // group |group| to |out|. It returns one on success and zero if |in| is
70
+ // ec_scalar_from_bytes deserializes `in` and stores the resulting scalar over
71
+ // group `group` to `out`. It returns one on success and zero if `in` is
71
72
  // invalid.
72
- OPENSSL_EXPORT int ec_scalar_from_bytes(const EC_GROUP *group, EC_SCALAR *out,
73
- const uint8_t *in, size_t len);
73
+ int ec_scalar_from_bytes(const EC_GROUP *group, EC_SCALAR *out,
74
+ const uint8_t *in, size_t len);
74
75
 
75
- // ec_scalar_reduce sets |out| to |words|, reduced modulo the group order.
76
- // |words| must be less than order^2. |num| must be at most twice the width of
77
- // group order. This function treats |words| as secret.
76
+ // ec_scalar_reduce sets `out` to `words`, reduced modulo the group order.
77
+ // `words` must be less than order^2. `num` must be at most twice the width of
78
+ // group order. This function treats `words` as secret.
78
79
  void ec_scalar_reduce(const EC_GROUP *group, EC_SCALAR *out,
79
80
  const BN_ULONG *words, size_t num);
80
81
 
81
- // ec_random_nonzero_scalar sets |out| to a uniformly selected random value from
82
- // zero to |group->order| - 1. It returns one on success and zero on error.
82
+ // ec_random_nonzero_scalar sets `out` to a uniformly selected random value from
83
+ // zero to `group->order` - 1. It returns one on success and zero on error.
83
84
  int ec_random_scalar(const EC_GROUP *group, EC_SCALAR *out,
84
85
  const uint8_t additional_data[32]);
85
86
 
86
- // ec_random_nonzero_scalar sets |out| to a uniformly selected random value from
87
- // 1 to |group->order| - 1. It returns one on success and zero on error.
87
+ // ec_random_nonzero_scalar sets `out` to a uniformly selected random value from
88
+ // 1 to `group->order` - 1. It returns one on success and zero on error.
88
89
  int ec_random_nonzero_scalar(const EC_GROUP *group, EC_SCALAR *out,
89
90
  const uint8_t additional_data[32]);
90
91
 
91
- // ec_scalar_equal_vartime returns one if |a| and |b| are equal and zero
92
+ // ec_scalar_equal_vartime returns one if `a` and `b` are equal and zero
92
93
  // otherwise. Both values are treated as public.
93
94
  int ec_scalar_equal_vartime(const EC_GROUP *group, const EC_SCALAR *a,
94
95
  const EC_SCALAR *b);
95
96
 
96
- // ec_scalar_is_zero returns one if |a| is zero and zero otherwise.
97
+ // ec_scalar_is_zero returns one if `a` is zero and zero otherwise.
97
98
  int ec_scalar_is_zero(const EC_GROUP *group, const EC_SCALAR *a);
98
99
 
99
- // ec_scalar_add sets |r| to |a| + |b|.
100
+ // ec_scalar_add sets `r` to `a` + `b`.
100
101
  void ec_scalar_add(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a,
101
102
  const EC_SCALAR *b);
102
103
 
103
- // ec_scalar_sub sets |r| to |a| - |b|.
104
+ // ec_scalar_sub sets `r` to `a` - `b`.
104
105
  void ec_scalar_sub(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a,
105
106
  const EC_SCALAR *b);
106
107
 
107
- // ec_scalar_neg sets |r| to -|a|.
108
+ // ec_scalar_neg sets `r` to -`a`.
108
109
  void ec_scalar_neg(const EC_GROUP *group, EC_SCALAR *r, const EC_SCALAR *a);
109
110
 
110
- // ec_scalar_to_montgomery sets |r| to |a| in Montgomery form.
111
+ // ec_scalar_to_montgomery sets `r` to `a` in Montgomery form.
111
112
  void ec_scalar_to_montgomery(const EC_GROUP *group, EC_SCALAR *r,
112
113
  const EC_SCALAR *a);
113
114
 
114
- // ec_scalar_to_montgomery sets |r| to |a| converted from Montgomery form.
115
+ // ec_scalar_to_montgomery sets `r` to `a` converted from Montgomery form.
115
116
  void ec_scalar_from_montgomery(const EC_GROUP *group, EC_SCALAR *r,
116
117
  const EC_SCALAR *a);
117
118
 
118
- // ec_scalar_mul_montgomery sets |r| to |a| * |b| where inputs and outputs are
119
+ // ec_scalar_mul_montgomery sets `r` to `a` * `b` where inputs and outputs are
119
120
  // in Montgomery form.
120
121
  void ec_scalar_mul_montgomery(const EC_GROUP *group, EC_SCALAR *r,
121
122
  const EC_SCALAR *a, const EC_SCALAR *b);
122
123
 
123
- // ec_scalar_inv0_montgomery sets |r| to |a|^-1 where inputs and outputs are in
124
- // Montgomery form. If |a| is zero, |r| is set to zero.
124
+ // ec_scalar_inv0_montgomery sets `r` to `a`^-1 where inputs and outputs are in
125
+ // Montgomery form. If `a` is zero, `r` is set to zero.
125
126
  void ec_scalar_inv0_montgomery(const EC_GROUP *group, EC_SCALAR *r,
126
127
  const EC_SCALAR *a);
127
128
 
128
- // ec_scalar_to_montgomery_inv_vartime sets |r| to |a|^-1 R. That is, it takes
129
- // in |a| not in Montgomery form and computes the inverse in Montgomery form. It
130
- // returns one on success and zero if |a| has no inverse. This function assumes
131
- // |a| is public and may leak information about it via timing.
129
+ // ec_scalar_to_montgomery_inv_vartime sets `r` to `a`^-1 R. That is, it takes
130
+ // in `a` not in Montgomery form and computes the inverse in Montgomery form. It
131
+ // returns one on success and zero if `a` has no inverse. This function assumes
132
+ // `a` is public and may leak information about it via timing.
132
133
  //
133
- // Note this is not the same operation as |ec_scalar_inv0_montgomery|.
134
+ // Note this is not the same operation as `ec_scalar_inv0_montgomery`.
134
135
  int ec_scalar_to_montgomery_inv_vartime(const EC_GROUP *group, EC_SCALAR *r,
135
136
  const EC_SCALAR *a);
136
137
 
137
- // ec_scalar_select, in constant time, sets |out| to |a| if |mask| is all ones
138
- // and |b| if |mask| is all zeros.
138
+ // ec_scalar_select, in constant time, sets `out` to `a` if `mask` is all ones
139
+ // and `b` if `mask` is all zeros.
139
140
  void ec_scalar_select(const EC_GROUP *group, EC_SCALAR *out, BN_ULONG mask,
140
141
  const EC_SCALAR *a, const EC_SCALAR *b);
141
142
 
142
143
 
143
144
  // Field elements.
144
145
 
145
- // An EC_FELEM represents a field element. Only the first |field->width| words
146
- // are used. An |EC_FELEM| is specific to an |EC_GROUP| and must not be mixed
147
- // between groups. Additionally, the representation (whether or not elements are
148
- // represented in Montgomery-form) may vary between |EC_METHOD|s.
146
+ // An EC_FELEM represents a field element. Only the first `field->width` words
147
+ // are used. An `EC_FELEM` is specific to an `EC_GROUP` and must not be mixed
148
+ // between groups. Unless otherwise stated, all inputs and outputs are in
149
+ // Montgomery form.
149
150
  typedef struct {
150
151
  BN_ULONG words[EC_MAX_WORDS];
151
152
  } EC_FELEM;
152
153
 
153
- // ec_felem_one returns one in |group|'s field.
154
+ // ec_felem_one returns one in `group`'s field.
154
155
  const EC_FELEM *ec_felem_one(const EC_GROUP *group);
155
156
 
156
- // ec_bignum_to_felem converts |in| to an |EC_FELEM|. It returns one on success
157
- // and zero if |in| is out of range.
157
+ // ec_bignum_to_felem converts `in` to an `EC_FELEM`. It returns one on success
158
+ // and zero if `in` is out of range.
158
159
  int ec_bignum_to_felem(const EC_GROUP *group, EC_FELEM *out, const BIGNUM *in);
159
160
 
160
- // ec_felem_to_bignum converts |in| to a |BIGNUM|. It returns one on success and
161
+ // ec_felem_to_bignum converts `in` to a `BIGNUM`. It returns one on success and
161
162
  // zero on allocation failure.
162
163
  int ec_felem_to_bignum(const EC_GROUP *group, BIGNUM *out, const EC_FELEM *in);
163
164
 
164
- // ec_felem_to_bytes serializes |in| as a big-endian bytestring to |out| and
165
- // sets |*out_len| to the number of bytes written. The number of bytes written
166
- // is |BN_num_bytes(&group->order)|, which is at most |EC_MAX_BYTES|.
165
+ // ec_felem_to_bytes serializes `in` as a big-endian bytestring to `out` and
166
+ // sets `*out_len` to the number of bytes written. The number of bytes written
167
+ // is `BN_num_bytes(&group->order)`, which is at most `EC_MAX_BYTES`.
167
168
  void ec_felem_to_bytes(const EC_GROUP *group, uint8_t *out, size_t *out_len,
168
169
  const EC_FELEM *in);
169
170
 
170
- // ec_felem_from_bytes deserializes |in| and stores the resulting field element
171
- // to |out|. It returns one on success and zero if |in| is invalid.
171
+ // ec_felem_from_bytes deserializes `in` and stores the resulting field element
172
+ // to `out`. It returns one on success and zero if `in` is invalid.
172
173
  int ec_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out, const uint8_t *in,
173
174
  size_t len);
174
175
 
175
- // ec_felem_neg sets |out| to -|a|.
176
+ // ec_felem_neg sets `out` to -`a`.
176
177
  void ec_felem_neg(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a);
177
178
 
178
- // ec_felem_add sets |out| to |a| + |b|.
179
+ // ec_felem_add sets `out` to `a` + `b`.
179
180
  void ec_felem_add(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a,
180
181
  const EC_FELEM *b);
181
182
 
182
- // ec_felem_add sets |out| to |a| - |b|.
183
+ // ec_felem_add sets `out` to `a` - `b`.
183
184
  void ec_felem_sub(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a,
184
185
  const EC_FELEM *b);
185
186
 
186
- // ec_felem_non_zero_mask returns all ones if |a| is non-zero and all zeros
187
+ // ec_felem_non_zero_mask returns all ones if `a` is non-zero and all zeros
187
188
  // otherwise.
188
189
  BN_ULONG ec_felem_non_zero_mask(const EC_GROUP *group, const EC_FELEM *a);
189
190
 
190
- // ec_felem_select, in constant time, sets |out| to |a| if |mask| is all ones
191
- // and |b| if |mask| is all zeros.
191
+ // ec_felem_select, in constant time, sets `out` to `a` if `mask` is all ones
192
+ // and `b` if `mask` is all zeros.
192
193
  void ec_felem_select(const EC_GROUP *group, EC_FELEM *out, BN_ULONG mask,
193
194
  const EC_FELEM *a, const EC_FELEM *b);
194
195
 
195
- // ec_felem_equal returns one if |a| and |b| are equal and zero otherwise.
196
+ // ec_felem_equal returns one if `a` and `b` are equal and zero otherwise.
196
197
  int ec_felem_equal(const EC_GROUP *group, const EC_FELEM *a, const EC_FELEM *b);
197
198
 
199
+ // ec_felem_mul sets `out` to `a` * `b`.
200
+ void ec_felem_mul(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a,
201
+ const EC_FELEM *b);
202
+
203
+ // ec_felem_sqr sets `out` to `a`^2.
204
+ void ec_felem_sqr(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a);
205
+
206
+ // ec_felem_to_montgomery sets `out` to `a` converted to Montgomery form.
207
+ void ec_felem_to_montgomery(const EC_GROUP *group, EC_FELEM *out,
208
+ const EC_FELEM *a);
209
+
210
+ // ec_felem_from_montgomery sets `out` to `a` converted from Montgomery form.
211
+ void ec_felem_from_montgomery(const EC_GROUP *group, EC_FELEM *out,
212
+ const EC_FELEM *a);
213
+
214
+ // ec_felem_reduce sets `out` to `words`, reduced modulo the field size, p.
215
+ // `words` must be less than p^2. `num` must be at most twice the width of p.
216
+ // This function treats `words` as secret.
217
+ void ec_felem_reduce(const EC_GROUP *group, EC_FELEM *out,
218
+ const BN_ULONG *words, size_t num);
219
+
220
+ // ec_felem_exp sets `out` to `a`^`exp`. It treats `a` is secret but `exp` as
221
+ // public.
222
+ //
223
+ // TODO(crbug.com/42290435): hash-to-curve uses this as part of computing a
224
+ // square root, which is what compressed coordinates ultimately needs to avoid
225
+ // `BIGNUM`. Can we unify this a bit? By generalizing to arbitrary
226
+ // exponentiation, we also miss an opportunity to use a specialized addition
227
+ // chain. We also miss our specialized field arithmetic for P-256.
228
+ void ec_felem_exp(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a,
229
+ const BN_ULONG *exp, size_t num_exp);
230
+
198
231
 
199
232
  // Points.
200
233
  //
201
- // Points may represented in affine coordinates as |EC_AFFINE| or Jacobian
202
- // coordinates as |EC_JACOBIAN|. Affine coordinates directly represent a
234
+ // Points may represented in affine coordinates as `EC_AFFINE` or Jacobian
235
+ // coordinates as `EC_JACOBIAN`. Affine coordinates directly represent a
203
236
  // point on the curve, but point addition over affine coordinates requires
204
237
  // costly field inversions, so arithmetic is done in Jacobian coordinates.
205
238
  // Converting from affine to Jacobian is cheap, while converting from Jacobian
@@ -207,8 +240,8 @@ int ec_felem_equal(const EC_GROUP *group, const EC_FELEM *a, const EC_FELEM *b);
207
240
  // inversions needed in a sequence of point operations.)
208
241
 
209
242
  // An EC_JACOBIAN represents an elliptic curve point in Jacobian coordinates.
210
- // Unlike |EC_POINT|, it is a plain struct which can be stack-allocated and
211
- // needs no cleanup. It is specific to an |EC_GROUP| and must not be mixed
243
+ // Unlike `EC_POINT`, it is a plain struct which can be stack-allocated and
244
+ // needs no cleanup. It is specific to an `EC_GROUP` and must not be mixed
212
245
  // between groups.
213
246
  typedef struct {
214
247
  // X, Y, and Z are Jacobian projective coordinates. They represent
@@ -223,23 +256,23 @@ typedef struct {
223
256
  EC_FELEM X, Y;
224
257
  } EC_AFFINE;
225
258
 
226
- // ec_affine_to_jacobian converts |p| to Jacobian form and writes the result to
227
- // |*out|. This operation is very cheap and only costs a few copies.
259
+ // ec_affine_to_jacobian converts `p` to Jacobian form and writes the result to
260
+ // `*out`. This operation is very cheap and only costs a few copies.
228
261
  void ec_affine_to_jacobian(const EC_GROUP *group, EC_JACOBIAN *out,
229
262
  const EC_AFFINE *p);
230
263
 
231
- // ec_jacobian_to_affine converts |p| to affine form and writes the result to
232
- // |*out|. It returns one on success and zero if |p| was the point at infinity.
264
+ // ec_jacobian_to_affine converts `p` to affine form and writes the result to
265
+ // `*out`. It returns one on success and zero if `p` was the point at infinity.
233
266
  // This operation performs a field inversion and should only be done once per
234
267
  // point.
235
268
  //
236
- // If only extracting the x-coordinate, use |ec_get_x_coordinate_*| which is
269
+ // If only extracting the x-coordinate, use `ec_get_x_coordinate_*` which is
237
270
  // slightly faster.
238
- OPENSSL_EXPORT int ec_jacobian_to_affine(const EC_GROUP *group, EC_AFFINE *out,
239
- const EC_JACOBIAN *p);
271
+ int ec_jacobian_to_affine(const EC_GROUP *group, EC_AFFINE *out,
272
+ const EC_JACOBIAN *p);
240
273
 
241
- // ec_jacobian_to_affine_batch converts |num| points in |in| from Jacobian
242
- // coordinates to affine coordinates and writes the results to |out|. It returns
274
+ // ec_jacobian_to_affine_batch converts `num` points in `in` from Jacobian
275
+ // coordinates to affine coordinates and writes the results to `out`. It returns
243
276
  // one on success and zero if any of the input points were infinity.
244
277
  //
245
278
  // This function is not implemented for all curves. Add implementations as
@@ -247,36 +280,36 @@ OPENSSL_EXPORT int ec_jacobian_to_affine(const EC_GROUP *group, EC_AFFINE *out,
247
280
  int ec_jacobian_to_affine_batch(const EC_GROUP *group, EC_AFFINE *out,
248
281
  const EC_JACOBIAN *in, size_t num);
249
282
 
250
- // ec_point_set_affine_coordinates sets |out|'s to a point with affine
251
- // coordinates |x| and |y|. It returns one if the point is on the curve and
252
- // zero otherwise. If the point is not on the curve, the value of |out| is
283
+ // ec_point_set_affine_coordinates sets `out`'s to a point with affine
284
+ // coordinates `x` and `y`. It returns one if the point is on the curve and
285
+ // zero otherwise. If the point is not on the curve, the value of `out` is
253
286
  // undefined.
254
287
  int ec_point_set_affine_coordinates(const EC_GROUP *group, EC_AFFINE *out,
255
288
  const EC_FELEM *x, const EC_FELEM *y);
256
289
 
257
- // ec_point_mul_no_self_test does the same as |EC_POINT_mul|, but doesn't try to
290
+ // ec_point_mul_no_self_test does the same as `EC_POINT_mul`, but doesn't try to
258
291
  // run the self-test first. This is for use in the self tests themselves, to
259
292
  // prevent an infinite loop.
260
293
  int ec_point_mul_no_self_test(const EC_GROUP *group, EC_POINT *r,
261
294
  const BIGNUM *g_scalar, const EC_POINT *p,
262
295
  const BIGNUM *p_scalar, BN_CTX *ctx);
263
296
 
264
- // ec_point_mul_scalar sets |r| to |p| * |scalar|. Both inputs are considered
297
+ // ec_point_mul_scalar sets `r` to `p` * `scalar`. Both inputs are considered
265
298
  // secret.
266
299
  int ec_point_mul_scalar(const EC_GROUP *group, EC_JACOBIAN *r,
267
300
  const EC_JACOBIAN *p, const EC_SCALAR *scalar);
268
301
 
269
- // ec_point_mul_scalar_base sets |r| to generator * |scalar|. |scalar| is
302
+ // ec_point_mul_scalar_base sets `r` to generator * `scalar`. `scalar` is
270
303
  // treated as secret.
271
304
  int ec_point_mul_scalar_base(const EC_GROUP *group, EC_JACOBIAN *r,
272
305
  const EC_SCALAR *scalar);
273
306
 
274
- // ec_point_mul_scalar_batch sets |r| to |p0| * |scalar0| + |p1| * |scalar1| +
275
- // |p2| * |scalar2|. |p2| may be NULL to skip that term.
307
+ // ec_point_mul_scalar_batch sets `r` to `p0` * `scalar0` + `p1` * `scalar1` +
308
+ // `p2` * `scalar2`. `p2` may be NULL to skip that term.
276
309
  //
277
310
  // The inputs are treated as secret, however, this function leaks information
278
311
  // about whether intermediate computations add a point to itself. Callers must
279
- // ensure that discrete logs between |p0|, |p1|, and |p2| are uniformly
312
+ // ensure that discrete logs between `p0`, `p1`, and `p2` are uniformly
280
313
  // distributed and independent of the scalars, which should be uniformly
281
314
  // selected and not under the attackers control. This ensures the doubling case
282
315
  // will occur with negligible probability.
@@ -285,7 +318,7 @@ int ec_point_mul_scalar_base(const EC_GROUP *group, EC_JACOBIAN *r,
285
318
  // needed.
286
319
  //
287
320
  // TODO(davidben): This function does not use base point tables. For now, it is
288
- // only used with the generic |EC_GFp_mont_method| implementation which has
321
+ // only used with the generic `EC_GFp_mont_method` implementation which has
289
322
  // none. If generalizing to tuned curves, this may be useful. However, we still
290
323
  // must double up to the least efficient input, so precomputed tables can only
291
324
  // save table setup and allow a wider window size.
@@ -296,16 +329,16 @@ int ec_point_mul_scalar_batch(const EC_GROUP *group, EC_JACOBIAN *r,
296
329
 
297
330
  #define EC_MONT_PRECOMP_COMB_SIZE 5
298
331
 
299
- // An |EC_PRECOMP| stores precomputed information about a point, to optimize
332
+ // An `EC_PRECOMP` stores precomputed information about a point, to optimize
300
333
  // repeated multiplications involving it. It is a union so different
301
- // |EC_METHOD|s can store different information in it.
334
+ // `EC_METHOD`s can store different information in it.
302
335
  typedef union {
303
336
  EC_AFFINE comb[(1 << EC_MONT_PRECOMP_COMB_SIZE) - 1];
304
337
  } EC_PRECOMP;
305
338
 
306
- // ec_init_precomp precomputes multiples of |p| and writes the result to |out|.
339
+ // ec_init_precomp precomputes multiples of `p` and writes the result to `out`.
307
340
  // It returns one on success and zero on error. The resulting table may be used
308
- // with |ec_point_mul_scalar_precomp|. This function will fail if |p| is the
341
+ // with `ec_point_mul_scalar_precomp`. This function will fail if `p` is the
309
342
  // point at infinity.
310
343
  //
311
344
  // This function is not implemented for all curves. Add implementations as
@@ -313,16 +346,16 @@ typedef union {
313
346
  int ec_init_precomp(const EC_GROUP *group, EC_PRECOMP *out,
314
347
  const EC_JACOBIAN *p);
315
348
 
316
- // ec_point_mul_scalar_precomp sets |r| to |p0| * |scalar0| + |p1| * |scalar1| +
317
- // |p2| * |scalar2|. |p1| or |p2| may be NULL to skip the corresponding term.
318
- // The points are represented as |EC_PRECOMP| and must be initialized with
319
- // |ec_init_precomp|. This function runs faster than |ec_point_mul_scalar_batch|
349
+ // ec_point_mul_scalar_precomp sets `r` to `p0` * `scalar0` + `p1` * `scalar1` +
350
+ // `p2` * `scalar2`. `p1` or `p2` may be NULL to skip the corresponding term.
351
+ // The points are represented as `EC_PRECOMP` and must be initialized with
352
+ // `ec_init_precomp`. This function runs faster than `ec_point_mul_scalar_batch`
320
353
  // but requires setup work per input point, so it is only appropriate for points
321
354
  // which are used frequently.
322
355
  //
323
356
  // The inputs are treated as secret, however, this function leaks information
324
357
  // about whether intermediate computations add a point to itself. Callers must
325
- // ensure that discrete logs between |p0|, |p1|, and |p2| are uniformly
358
+ // ensure that discrete logs between `p0`, `p1`, and `p2` are uniformly
326
359
  // distributed and independent of the scalars, which should be uniformly
327
360
  // selected and not under the attackers control. This ensures the doubling case
328
361
  // will occur with negligible probability.
@@ -331,7 +364,7 @@ int ec_init_precomp(const EC_GROUP *group, EC_PRECOMP *out,
331
364
  // needed.
332
365
  //
333
366
  // TODO(davidben): This function does not use base point tables. For now, it is
334
- // only used with the generic |EC_GFp_mont_method| implementation which has
367
+ // only used with the generic `EC_GFp_mont_method` implementation which has
335
368
  // none. If generalizing to tuned curves, we should add a parameter for the base
336
369
  // point and arrange for the generic implementation to have base point tables
337
370
  // available.
@@ -340,19 +373,17 @@ int ec_point_mul_scalar_precomp(const EC_GROUP *group, EC_JACOBIAN *r,
340
373
  const EC_PRECOMP *p1, const EC_SCALAR *scalar1,
341
374
  const EC_PRECOMP *p2, const EC_SCALAR *scalar2);
342
375
 
343
- // ec_point_mul_scalar_public sets |r| to
344
- // generator * |g_scalar| + |p| * |p_scalar|. It assumes that the inputs are
376
+ // ec_point_mul_scalar_public sets `r` to
377
+ // generator * `g_scalar` + `p` * `p_scalar`. It assumes that the inputs are
345
378
  // public so there is no concern about leaking their values through timing.
346
- OPENSSL_EXPORT int ec_point_mul_scalar_public(const EC_GROUP *group,
347
- EC_JACOBIAN *r,
348
- const EC_SCALAR *g_scalar,
349
- const EC_JACOBIAN *p,
350
- const EC_SCALAR *p_scalar);
351
-
352
- // ec_point_mul_scalar_public_batch sets |r| to the sum of generator *
353
- // |g_scalar| and |points[i]| * |scalars[i]| where |points| and |scalars| have
354
- // |num| elements. It assumes that the inputs are public so there is no concern
355
- // about leaking their values through timing. |g_scalar| may be NULL to skip
379
+ int ec_point_mul_scalar_public(const EC_GROUP *group, EC_JACOBIAN *r,
380
+ const EC_SCALAR *g_scalar, const EC_JACOBIAN *p,
381
+ const EC_SCALAR *p_scalar);
382
+
383
+ // ec_point_mul_scalar_public_batch sets `r` to the sum of generator *
384
+ // `g_scalar` and `points[i]` * `scalars[i]` where `points` and `scalars` have
385
+ // `num` elements. It assumes that the inputs are public so there is no concern
386
+ // about leaking their values through timing. `g_scalar` may be NULL to skip
356
387
  // that term.
357
388
  //
358
389
  // This function is not implemented for all curves. Add implementations as
@@ -362,33 +393,33 @@ int ec_point_mul_scalar_public_batch(const EC_GROUP *group, EC_JACOBIAN *r,
362
393
  const EC_JACOBIAN *points,
363
394
  const EC_SCALAR *scalars, size_t num);
364
395
 
365
- // ec_point_select, in constant time, sets |out| to |a| if |mask| is all ones
366
- // and |b| if |mask| is all zeros.
396
+ // ec_point_select, in constant time, sets `out` to `a` if `mask` is all ones
397
+ // and `b` if `mask` is all zeros.
367
398
  void ec_point_select(const EC_GROUP *group, EC_JACOBIAN *out, BN_ULONG mask,
368
399
  const EC_JACOBIAN *a, const EC_JACOBIAN *b);
369
400
 
370
- // ec_affine_select behaves like |ec_point_select| but acts on affine points.
401
+ // ec_affine_select behaves like `ec_point_select` but acts on affine points.
371
402
  void ec_affine_select(const EC_GROUP *group, EC_AFFINE *out, BN_ULONG mask,
372
403
  const EC_AFFINE *a, const EC_AFFINE *b);
373
404
 
374
- // ec_precomp_select behaves like |ec_point_select| but acts on |EC_PRECOMP|.
405
+ // ec_precomp_select behaves like `ec_point_select` but acts on `EC_PRECOMP`.
375
406
  void ec_precomp_select(const EC_GROUP *group, EC_PRECOMP *out, BN_ULONG mask,
376
407
  const EC_PRECOMP *a, const EC_PRECOMP *b);
377
408
 
378
- // ec_cmp_x_coordinate compares the x (affine) coordinate of |p|, mod the group
379
- // order, with |r|. It returns one if the values match and zero if |p| is the
380
- // point at infinity of the values do not match. |p| is treated as public.
409
+ // ec_cmp_x_coordinate compares the x (affine) coordinate of `p`, mod the group
410
+ // order, with `r`. It returns one if the values match and zero if `p` is the
411
+ // point at infinity of the values do not match. `p` is treated as public.
381
412
  int ec_cmp_x_coordinate(const EC_GROUP *group, const EC_JACOBIAN *p,
382
413
  const EC_SCALAR *r);
383
414
 
384
- // ec_get_x_coordinate_as_scalar sets |*out| to |p|'s x-coordinate, modulo
385
- // |group->order|. It returns one on success and zero if |p| is the point at
415
+ // ec_get_x_coordinate_as_scalar sets `*out` to `p`'s x-coordinate, modulo
416
+ // `group->order`. It returns one on success and zero if `p` is the point at
386
417
  // infinity.
387
418
  int ec_get_x_coordinate_as_scalar(const EC_GROUP *group, EC_SCALAR *out,
388
419
  const EC_JACOBIAN *p);
389
420
 
390
- // ec_get_x_coordinate_as_bytes writes |p|'s affine x-coordinate to |out|, which
391
- // must have at must |max_out| bytes. It sets |*out_len| to the number of bytes
421
+ // ec_get_x_coordinate_as_bytes writes `p`'s affine x-coordinate to `out`, which
422
+ // must have at must `max_out` bytes. It sets `*out_len` to the number of bytes
392
423
  // written. The value is written big-endian and zero-padded to the size of the
393
424
  // field. This function returns one on success and zero on failure.
394
425
  int ec_get_x_coordinate_as_bytes(const EC_GROUP *group, uint8_t *out,
@@ -396,195 +427,180 @@ int ec_get_x_coordinate_as_bytes(const EC_GROUP *group, uint8_t *out,
396
427
  const EC_JACOBIAN *p);
397
428
 
398
429
  // ec_point_byte_len returns the number of bytes in the byte representation of
399
- // a non-infinity point in |group|, encoded according to |form|, or zero if
400
- // |form| is invalid.
430
+ // a non-infinity point in `group`, encoded according to `form`, or zero if
431
+ // `form` is invalid.
401
432
  size_t ec_point_byte_len(const EC_GROUP *group, point_conversion_form_t form);
402
433
 
403
- // ec_point_to_bytes encodes |point| according to |form| and writes the result
404
- // |buf|. It returns the size of the output on success or zero on error. At most
405
- // |max_out| bytes will be written. The buffer should be at least
406
- // |ec_point_byte_len| long to guarantee success.
434
+ // ec_point_to_bytes encodes `point` according to `form` and writes the result
435
+ // `buf`. It returns the size of the output on success or zero on error. At most
436
+ // `max_out` bytes will be written. The buffer should be at least
437
+ // `ec_point_byte_len` long to guarantee success.
407
438
  size_t ec_point_to_bytes(const EC_GROUP *group, const EC_AFFINE *point,
408
439
  point_conversion_form_t form, uint8_t *buf,
409
440
  size_t max_out);
410
441
 
411
- // ec_point_from_uncompressed parses |in| as a point in uncompressed form and
412
- // sets the result to |out|. It returns one on success and zero if the input was
442
+ // ec_point_from_uncompressed parses `in` as a point in uncompressed form and
443
+ // sets the result to `out`. It returns one on success and zero if the input was
413
444
  // invalid.
414
445
  int ec_point_from_uncompressed(const EC_GROUP *group, EC_AFFINE *out,
415
446
  const uint8_t *in, size_t len);
416
447
 
417
- // ec_set_to_safe_point sets |out| to an arbitrary point on |group|, either the
448
+ // ec_set_to_safe_point sets `out` to an arbitrary point on `group`, either the
418
449
  // generator or the point at infinity. This is used to guard against callers of
419
450
  // external APIs not checking the return value.
420
451
  void ec_set_to_safe_point(const EC_GROUP *group, EC_JACOBIAN *out);
421
452
 
422
- // ec_affine_jacobian_equal returns one if |a| and |b| represent the same point
453
+ // ec_affine_jacobian_equal returns one if `a` and `b` represent the same point
423
454
  // and zero otherwise. It treats both inputs as secret.
424
455
  int ec_affine_jacobian_equal(const EC_GROUP *group, const EC_AFFINE *a,
425
456
  const EC_JACOBIAN *b);
426
457
 
458
+ BSSL_NAMESPACE_END
427
459
 
428
460
  // Implementation details.
429
461
 
430
462
  struct ec_method_st {
431
- // point_get_affine_coordinates sets |*x| and |*y| to the affine coordinates
432
- // of |p|. Either |x| or |y| may be NULL to omit it. It returns one on success
433
- // and zero if |p| is the point at infinity. It leaks whether |p| was the
434
- // point at infinity, but otherwise treats |p| as secret.
435
- int (*point_get_affine_coordinates)(const EC_GROUP *, const EC_JACOBIAN *p,
436
- EC_FELEM *x, EC_FELEM *y);
437
-
438
- // jacobian_to_affine_batch implements |ec_jacobian_to_affine_batch|.
439
- int (*jacobian_to_affine_batch)(const EC_GROUP *group, EC_AFFINE *out,
440
- const EC_JACOBIAN *in, size_t num);
441
-
442
- // add sets |r| to |a| + |b|.
443
- void (*add)(const EC_GROUP *group, EC_JACOBIAN *r, const EC_JACOBIAN *a,
444
- const EC_JACOBIAN *b);
445
- // dbl sets |r| to |a| + |a|.
446
- void (*dbl)(const EC_GROUP *group, EC_JACOBIAN *r, const EC_JACOBIAN *a);
447
-
448
- // mul sets |r| to |scalar|*|p|.
449
- void (*mul)(const EC_GROUP *group, EC_JACOBIAN *r, const EC_JACOBIAN *p,
450
- const EC_SCALAR *scalar);
451
- // mul_base sets |r| to |scalar|*generator.
452
- void (*mul_base)(const EC_GROUP *group, EC_JACOBIAN *r,
453
- const EC_SCALAR *scalar);
454
- // mul_batch implements |ec_mul_scalar_batch|.
455
- void (*mul_batch)(const EC_GROUP *group, EC_JACOBIAN *r,
456
- const EC_JACOBIAN *p0, const EC_SCALAR *scalar0,
457
- const EC_JACOBIAN *p1, const EC_SCALAR *scalar1,
458
- const EC_JACOBIAN *p2, const EC_SCALAR *scalar2);
459
- // mul_public sets |r| to |g_scalar|*generator + |p_scalar|*|p|. It assumes
463
+ // point_get_affine_coordinates sets `*x` and `*y` to the affine coordinates
464
+ // of `p`. Either `x` or `y` may be NULL to omit it. It returns one on success
465
+ // and zero if `p` is the point at infinity. It leaks whether `p` was the
466
+ // point at infinity, but otherwise treats `p` as secret.
467
+ int (*point_get_affine_coordinates)(const EC_GROUP *,
468
+ const bssl::EC_JACOBIAN *p,
469
+ bssl::EC_FELEM *x, bssl::EC_FELEM *y);
470
+
471
+ // jacobian_to_affine_batch implements `ec_jacobian_to_affine_batch`.
472
+ int (*jacobian_to_affine_batch)(const EC_GROUP *group, bssl::EC_AFFINE *out,
473
+ const bssl::EC_JACOBIAN *in, size_t num);
474
+
475
+ // add sets `r` to `a` + `b`.
476
+ void (*add)(const EC_GROUP *group, bssl::EC_JACOBIAN *r,
477
+ const bssl::EC_JACOBIAN *a, const bssl::EC_JACOBIAN *b);
478
+ // dbl sets `r` to `a` + `a`.
479
+ void (*dbl)(const EC_GROUP *group, bssl::EC_JACOBIAN *r,
480
+ const bssl::EC_JACOBIAN *a);
481
+
482
+ // mul sets `r` to `scalar`*`p`.
483
+ void (*mul)(const EC_GROUP *group, bssl::EC_JACOBIAN *r,
484
+ const bssl::EC_JACOBIAN *p, const bssl::EC_SCALAR *scalar);
485
+ // mul_base sets `r` to `scalar`*generator.
486
+ void (*mul_base)(const EC_GROUP *group, bssl::EC_JACOBIAN *r,
487
+ const bssl::EC_SCALAR *scalar);
488
+ // mul_batch implements `ec_mul_scalar_batch`.
489
+ void (*mul_batch)(const EC_GROUP *group, bssl::EC_JACOBIAN *r,
490
+ const bssl::EC_JACOBIAN *p0, const bssl::EC_SCALAR *scalar0,
491
+ const bssl::EC_JACOBIAN *p1, const bssl::EC_SCALAR *scalar1,
492
+ const bssl::EC_JACOBIAN *p2,
493
+ const bssl::EC_SCALAR *scalar2);
494
+ // mul_public sets `r` to `g_scalar`*generator + `p_scalar`*`p`. It assumes
460
495
  // that the inputs are public so there is no concern about leaking their
461
496
  // values through timing.
462
497
  //
463
- // This function may be omitted if |mul_public_batch| is provided.
464
- void (*mul_public)(const EC_GROUP *group, EC_JACOBIAN *r,
465
- const EC_SCALAR *g_scalar, const EC_JACOBIAN *p,
466
- const EC_SCALAR *p_scalar);
467
- // mul_public_batch implements |ec_point_mul_scalar_public_batch|.
468
- int (*mul_public_batch)(const EC_GROUP *group, EC_JACOBIAN *r,
469
- const EC_SCALAR *g_scalar, const EC_JACOBIAN *points,
470
- const EC_SCALAR *scalars, size_t num);
471
-
472
- // init_precomp implements |ec_init_precomp|.
473
- int (*init_precomp)(const EC_GROUP *group, EC_PRECOMP *out,
474
- const EC_JACOBIAN *p);
475
- // mul_precomp implements |ec_point_mul_scalar_precomp|.
476
- void (*mul_precomp)(const EC_GROUP *group, EC_JACOBIAN *r,
477
- const EC_PRECOMP *p0, const EC_SCALAR *scalar0,
478
- const EC_PRECOMP *p1, const EC_SCALAR *scalar1,
479
- const EC_PRECOMP *p2, const EC_SCALAR *scalar2);
480
-
481
- // felem_mul and felem_sqr implement multiplication and squaring,
482
- // respectively, so that the generic |EC_POINT_add| and |EC_POINT_dbl|
483
- // implementations can work both with |EC_GFp_mont_method| and the tuned
484
- // operations.
485
- //
486
- // TODO(davidben): This constrains |EC_FELEM|'s internal representation, adds
487
- // many indirect calls in the middle of the generic code, and a bunch of
488
- // conversions. If p224-64.c were easily convertable to Montgomery form, we
489
- // could say |EC_FELEM| is always in Montgomery form. If we routed the rest of
490
- // simple.c to |EC_METHOD|, we could give |EC_POINT| an |EC_METHOD|-specific
491
- // representation and say |EC_FELEM| is purely a |EC_GFp_mont_method| type.
492
- void (*felem_mul)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a,
493
- const EC_FELEM *b);
494
- void (*felem_sqr)(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a);
495
-
496
- void (*felem_to_bytes)(const EC_GROUP *group, uint8_t *out, size_t *out_len,
497
- const EC_FELEM *in);
498
- int (*felem_from_bytes)(const EC_GROUP *group, EC_FELEM *out,
499
- const uint8_t *in, size_t len);
500
-
501
- // felem_reduce sets |out| to |words|, reduced modulo the field size, p.
502
- // |words| must be less than p^2. |num| must be at most twice the width of p.
503
- // This function treats |words| as secret.
504
- //
505
- // This function is only used in hash-to-curve and may be omitted in curves
506
- // that do not support it.
507
- void (*felem_reduce)(const EC_GROUP *group, EC_FELEM *out,
508
- const BN_ULONG *words, size_t num);
509
-
510
- // felem_exp sets |out| to |a|^|exp|. It treats |a| is secret but |exp| as
511
- // public.
512
- //
513
- // This function is used in hash-to-curve and may be NULL in curves not used
514
- // with hash-to-curve.
515
- //
516
- // TODO(https://crbug.com/boringssl/567): hash-to-curve uses this as part of
517
- // computing a square root, which is what compressed coordinates ultimately
518
- // needs to avoid |BIGNUM|. Can we unify this a bit? By generalizing to
519
- // arbitrary exponentiation, we also miss an opportunity to use a specialized
520
- // addition chain.
521
- void (*felem_exp)(const EC_GROUP *group, EC_FELEM *out, const EC_FELEM *a,
522
- const BN_ULONG *exp, size_t num_exp);
523
-
524
- // scalar_inv0_montgomery implements |ec_scalar_inv0_montgomery|.
525
- void (*scalar_inv0_montgomery)(const EC_GROUP *group, EC_SCALAR *out,
526
- const EC_SCALAR *in);
498
+ // This function may be omitted if `mul_public_batch` is provided.
499
+ void (*mul_public)(const EC_GROUP *group, bssl::EC_JACOBIAN *r,
500
+ const bssl::EC_SCALAR *g_scalar,
501
+ const bssl::EC_JACOBIAN *p,
502
+ const bssl::EC_SCALAR *p_scalar);
503
+ // mul_public_batch implements `ec_point_mul_scalar_public_batch`.
504
+ int (*mul_public_batch)(const EC_GROUP *group, bssl::EC_JACOBIAN *r,
505
+ const bssl::EC_SCALAR *g_scalar,
506
+ const bssl::EC_JACOBIAN *points,
507
+ const bssl::EC_SCALAR *scalars, size_t num);
508
+
509
+ // init_precomp implements `ec_init_precomp`.
510
+ int (*init_precomp)(const EC_GROUP *group, bssl::EC_PRECOMP *out,
511
+ const bssl::EC_JACOBIAN *p);
512
+ // mul_precomp implements `ec_point_mul_scalar_precomp`.
513
+ void (*mul_precomp)(const EC_GROUP *group, bssl::EC_JACOBIAN *r,
514
+ const bssl::EC_PRECOMP *p0,
515
+ const bssl::EC_SCALAR *scalar0,
516
+ const bssl::EC_PRECOMP *p1,
517
+ const bssl::EC_SCALAR *scalar1,
518
+ const bssl::EC_PRECOMP *p2,
519
+ const bssl::EC_SCALAR *scalar2);
520
+
521
+ // scalar_inv0_montgomery implements `ec_scalar_inv0_montgomery`.
522
+ void (*scalar_inv0_montgomery)(const EC_GROUP *group, bssl::EC_SCALAR *out,
523
+ const bssl::EC_SCALAR *in);
527
524
 
528
525
  // scalar_to_montgomery_inv_vartime implements
529
- // |ec_scalar_to_montgomery_inv_vartime|.
530
- int (*scalar_to_montgomery_inv_vartime)(const EC_GROUP *group, EC_SCALAR *out,
531
- const EC_SCALAR *in);
526
+ // `ec_scalar_to_montgomery_inv_vartime`.
527
+ int (*scalar_to_montgomery_inv_vartime)(const EC_GROUP *group,
528
+ bssl::EC_SCALAR *out,
529
+ const bssl::EC_SCALAR *in);
532
530
 
533
- // cmp_x_coordinate compares the x (affine) coordinate of |p|, mod the group
534
- // order, with |r|. It returns one if the values match and zero if |p| is the
531
+ // cmp_x_coordinate compares the x (affine) coordinate of `p`, mod the group
532
+ // order, with `r`. It returns one if the values match and zero if `p` is the
535
533
  // point at infinity of the values do not match.
536
- int (*cmp_x_coordinate)(const EC_GROUP *group, const EC_JACOBIAN *p,
537
- const EC_SCALAR *r);
534
+ int (*cmp_x_coordinate)(const EC_GROUP *group, const bssl::EC_JACOBIAN *p,
535
+ const bssl::EC_SCALAR *r);
538
536
  } /* EC_METHOD */;
539
537
 
540
- const EC_METHOD *EC_GFp_mont_method(void);
538
+ BSSL_NAMESPACE_BEGIN
539
+
540
+ const EC_METHOD *EC_GFp_mont_method();
541
+
542
+ BSSL_NAMESPACE_END
541
543
 
542
544
  struct ec_point_st {
543
- // group is an owning reference to |group|, unless this is
544
- // |group->generator|.
545
+ // group is an owning reference to `group`, unless this is
546
+ // `group->generator`.
545
547
  EC_GROUP *group;
546
- // raw is the group-specific point data. Functions that take |EC_POINT|
547
- // typically check consistency with |EC_GROUP| while functions that take
548
- // |EC_JACOBIAN| do not. Thus accesses to this field should be externally
548
+ // raw is the group-specific point data. Functions that take `EC_POINT`
549
+ // typically check consistency with `EC_GROUP` while functions that take
550
+ // `EC_JACOBIAN` do not. Thus accesses to this field should be externally
549
551
  // checked for consistency.
550
- EC_JACOBIAN raw;
552
+ bssl::EC_JACOBIAN raw;
551
553
  } /* EC_POINT */;
552
554
 
553
555
  struct ec_group_st {
554
556
  const EC_METHOD *meth;
555
557
 
556
- // Unlike all other |EC_POINT|s, |generator| does not own |generator->group|
558
+ // Unlike all other `EC_POINT`s, `generator` does not own `generator->group`
557
559
  // to avoid a reference cycle. Additionally, Z is guaranteed to be one, so X
558
- // and Y are suitable for use as an |EC_AFFINE|. Before |has_order| is set, Z
560
+ // and Y are suitable for use as an `EC_AFFINE`. Before `has_order` is set, Z
559
561
  // is one, but X and Y are uninitialized.
560
562
  EC_POINT generator;
561
563
 
562
564
  BN_MONT_CTX order;
563
565
  BN_MONT_CTX field;
564
566
 
565
- EC_FELEM a, b; // Curve coefficients.
567
+ bssl::EC_FELEM a, b; // Curve coefficients.
566
568
 
567
569
  // comment is a human-readable string describing the curve.
568
570
  const char *comment;
569
571
 
570
- int curve_name; // optional NID for named curve
572
+ // curve_name is the optional NID for named curve.
573
+ //
574
+ // If curve_name is NID_undef, the actual type is ECCustomGroup and the
575
+ // refcount must be respected when allocating/freeing.
576
+ int curve_name;
577
+
571
578
  uint8_t oid[9];
572
579
  uint8_t oid_len;
573
580
 
574
- // a_is_minus3 is one if |a| is -3 mod |field| and zero otherwise. Point
581
+ // a_is_minus3 is one if `a` is -3 mod `field` and zero otherwise. Point
575
582
  // arithmetic is optimized for -3.
576
583
  int a_is_minus3;
577
584
 
578
- // has_order is one if |generator| and |order| have been initialized.
585
+ // has_order is one if `generator` and `order` have been initialized.
579
586
  int has_order;
580
587
 
581
- // field_greater_than_order is one if |field| is greate than |order| and zero
588
+ // field_greater_than_order is one if `field` is greater than `order` and zero
582
589
  // otherwise.
583
590
  int field_greater_than_order;
584
-
585
- CRYPTO_refcount_t references;
586
591
  } /* EC_GROUP */;
587
592
 
593
+ BSSL_NAMESPACE_BEGIN
594
+
595
+ class ECCustomGroup : public ec_group_st, public RefCounted<ECCustomGroup> {
596
+ public:
597
+ explicit ECCustomGroup(const EC_METHOD *meth);
598
+
599
+ private:
600
+ ~ECCustomGroup();
601
+ friend RefCounted;
602
+ };
603
+
588
604
  EC_GROUP *ec_group_new(const EC_METHOD *meth, const BIGNUM *p, const BIGNUM *a,
589
605
  const BIGNUM *b, BN_CTX *ctx);
590
606
 
@@ -602,14 +618,9 @@ void ec_GFp_mont_mul_precomp(const EC_GROUP *group, EC_JACOBIAN *r,
602
618
  const EC_PRECOMP *p0, const EC_SCALAR *scalar0,
603
619
  const EC_PRECOMP *p1, const EC_SCALAR *scalar1,
604
620
  const EC_PRECOMP *p2, const EC_SCALAR *scalar2);
605
- void ec_GFp_mont_felem_reduce(const EC_GROUP *group, EC_FELEM *out,
606
- const BN_ULONG *words, size_t num);
607
- void ec_GFp_mont_felem_exp(const EC_GROUP *group, EC_FELEM *out,
608
- const EC_FELEM *a, const BN_ULONG *exp,
609
- size_t num_exp);
610
621
 
611
622
  // ec_compute_wNAF writes the modified width-(w+1) Non-Adjacent Form (wNAF) of
612
- // |scalar| to |out|. |out| must have room for |bits| + 1 elements, each of
623
+ // `scalar` to `out`. `out` must have room for `bits` + 1 elements, each of
613
624
  // which will be either zero or odd with an absolute value less than 2^w
614
625
  // satisfying
615
626
  // scalar = \sum_j out[j]*2^j
@@ -650,60 +661,43 @@ int ec_simple_scalar_to_montgomery_inv_vartime(const EC_GROUP *group,
650
661
  int ec_GFp_simple_cmp_x_coordinate(const EC_GROUP *group, const EC_JACOBIAN *p,
651
662
  const EC_SCALAR *r);
652
663
 
653
- void ec_GFp_simple_felem_to_bytes(const EC_GROUP *group, uint8_t *out,
654
- size_t *out_len, const EC_FELEM *in);
655
- int ec_GFp_simple_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out,
656
- const uint8_t *in, size_t len);
657
-
658
- // method functions in montgomery.c
659
- void ec_GFp_mont_felem_mul(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a,
660
- const EC_FELEM *b);
661
- void ec_GFp_mont_felem_sqr(const EC_GROUP *, EC_FELEM *r, const EC_FELEM *a);
662
-
663
- void ec_GFp_mont_felem_to_bytes(const EC_GROUP *group, uint8_t *out,
664
- size_t *out_len, const EC_FELEM *in);
665
- int ec_GFp_mont_felem_from_bytes(const EC_GROUP *group, EC_FELEM *out,
666
- const uint8_t *in, size_t len);
667
-
668
664
  void ec_GFp_nistp_recode_scalar_bits(crypto_word_t *sign, crypto_word_t *digit,
669
665
  crypto_word_t in);
670
666
 
671
- const EC_METHOD *EC_GFp_nistp224_method(void);
672
- const EC_METHOD *EC_GFp_nistp256_method(void);
667
+ const EC_METHOD *EC_GFp_nistp256_method();
673
668
 
674
- // EC_GFp_nistz256_method is a GFp method using montgomery multiplication, with
675
- // x86-64 optimized P256. See http://eprint.iacr.org/2013/816.
676
- const EC_METHOD *EC_GFp_nistz256_method(void);
677
-
678
- // An EC_WRAPPED_SCALAR is an |EC_SCALAR| with a parallel |BIGNUM|
679
- // representation. It exists to support the |EC_KEY_get0_private_key| API.
669
+ // An EC_WRAPPED_SCALAR is an `EC_SCALAR` with a parallel `BIGNUM`
670
+ // representation. It exists to support the `EC_KEY_get0_private_key` API.
680
671
  typedef struct {
681
672
  BIGNUM bignum;
682
673
  EC_SCALAR scalar;
683
674
  } EC_WRAPPED_SCALAR;
684
675
 
685
- struct ec_key_st {
686
- EC_GROUP *group;
676
+ class ECKey : public ec_key_st, public RefCounted<ECKey> {
677
+ public:
678
+ explicit ECKey(const ENGINE *engine);
679
+
680
+ EC_GROUP *group = nullptr;
687
681
 
688
- // Ideally |pub_key| would be an |EC_AFFINE| so serializing it does not pay an
689
- // inversion each time, but the |EC_KEY_get0_public_key| API implies public
690
- // keys are stored in an |EC_POINT|-compatible form.
691
- EC_POINT *pub_key;
692
- EC_WRAPPED_SCALAR *priv_key;
682
+ // Ideally `pub_key` would be an `EC_AFFINE` so serializing it does not pay an
683
+ // inversion each time, but the `EC_KEY_get0_public_key` API implies public
684
+ // keys are stored in an `EC_POINT`-compatible form.
685
+ EC_POINT *pub_key = nullptr;
686
+ bssl::EC_WRAPPED_SCALAR *priv_key = nullptr;
693
687
 
694
- unsigned int enc_flag;
695
- point_conversion_form_t conv_form;
688
+ unsigned int enc_flag = 0;
689
+ point_conversion_form_t conv_form = POINT_CONVERSION_UNCOMPRESSED;
696
690
 
697
- CRYPTO_refcount_t references;
691
+ ECDSA_METHOD *ecdsa_meth = nullptr;
698
692
 
699
- ECDSA_METHOD *ecdsa_meth;
693
+ CRYPTO_EX_DATA ex_data = {};
700
694
 
701
- CRYPTO_EX_DATA ex_data;
695
+ private:
696
+ ~ECKey();
697
+ friend RefCounted;
702
698
  } /* EC_KEY */;
703
699
 
700
+ BSSL_NAMESPACE_END
704
701
 
705
- #if defined(__cplusplus)
706
- } // extern C
707
- #endif
708
702
 
709
703
  #endif // OPENSSL_HEADER_CRYPTO_FIPSMODULE_EC_INTERNAL_H