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
@@ -1,4 +1,6 @@
1
1
  // Copyright 2020 The BoringSSL Authors
2
+ // Copyright 2014-2016 The OpenSSL Project Authors. All Rights Reserved.
3
+ // Copyright (c) 2014, Intel Corporation. All Rights Reserved.
2
4
  //
3
5
  // Licensed under the Apache License, Version 2.0 (the "License");
4
6
  // you may not use this file except in compliance with the License.
@@ -12,90 +14,347 @@
12
14
  // See the License for the specific language governing permissions and
13
15
  // limitations under the License.
14
16
 
15
- // An implementation of the NIST P-256 elliptic curve point multiplication.
16
- // 256-bit Montgomery form for 64 and 32-bit. Field operations are generated by
17
- // Fiat, which lives in //third_party/fiat.
18
-
19
17
  #include <openssl/base.h>
20
18
 
21
19
  #include <openssl/bn.h>
22
20
  #include <openssl/ec.h>
23
- #include <openssl/err.h>
24
21
  #include <openssl/mem.h>
25
22
 
26
23
  #include <assert.h>
27
- #include <string.h>
24
+
25
+ #include <iterator>
28
26
 
29
27
  #include "../../internal.h"
30
28
  #include "../delocate.h"
31
- #include "./internal.h"
29
+ #include "internal.h"
32
30
 
33
- #if defined(BORINGSSL_HAS_UINT128)
34
- #include "../../../third_party/fiat/p256_64.h"
35
- #elif defined(OPENSSL_64_BIT)
36
- #include "../../../third_party/fiat/p256_64_msvc.h"
37
- #else
38
- #include "../../../third_party/fiat/p256_32.h"
39
- #endif
31
+ #include "p256_internal.h"
40
32
 
33
+ using namespace bssl;
41
34
 
42
- // utility functions, handwritten
43
-
44
- #if defined(OPENSSL_64_BIT)
45
- #define FIAT_P256_NLIMBS 4
46
- typedef uint64_t fiat_p256_limb_t;
47
- typedef uint64_t fiat_p256_felem[FIAT_P256_NLIMBS];
48
- static const fiat_p256_felem fiat_p256_one = {0x1, 0xffffffff00000000,
49
- 0xffffffffffffffff, 0xfffffffe};
50
- #else // 64BIT; else 32BIT
51
- #define FIAT_P256_NLIMBS 8
52
- typedef uint32_t fiat_p256_limb_t;
53
- typedef uint32_t fiat_p256_felem[FIAT_P256_NLIMBS];
54
- static const fiat_p256_felem fiat_p256_one = {
55
- 0x1, 0x0, 0x0, 0xffffffff, 0xffffffff, 0xffffffff, 0xfffffffe, 0x0};
56
- #endif // 64BIT
57
-
58
-
59
- static fiat_p256_limb_t fiat_p256_nz(
60
- const fiat_p256_limb_t in1[FIAT_P256_NLIMBS]) {
61
- fiat_p256_limb_t ret;
62
- fiat_p256_nonzero(&ret, in1);
63
- return ret;
35
+ static void fiat_p256_opp_conditional(fiat_p256_felem x, crypto_word_t c) {
36
+ alignas(32) fiat_p256_felem n;
37
+ fiat_p256_opp(n, x);
38
+ for (size_t i = 0; i < P256_LIMBS; ++i) {
39
+ x[i] = br_cmov(c, n[i], x[i]);
40
+ }
64
41
  }
65
42
 
66
- static void fiat_p256_copy(fiat_p256_limb_t out[FIAT_P256_NLIMBS],
67
- const fiat_p256_limb_t in1[FIAT_P256_NLIMBS]) {
68
- for (size_t i = 0; i < FIAT_P256_NLIMBS; i++) {
69
- out[i] = in1[i];
43
+ // bit returns the `i`th bit in `in`.
44
+ static crypto_word_t bit(const uint8_t in[32], int i) {
45
+ if (i < 0 || i >= 256) {
46
+ return 0;
70
47
  }
48
+ return (in[i >> 3] >> (i & 7)) & 1;
71
49
  }
72
50
 
73
- static void fiat_p256_cmovznz(fiat_p256_limb_t out[FIAT_P256_NLIMBS],
74
- fiat_p256_limb_t t,
75
- const fiat_p256_limb_t z[FIAT_P256_NLIMBS],
76
- const fiat_p256_limb_t nz[FIAT_P256_NLIMBS]) {
77
- fiat_p256_selectznz(out, !!t, z, nz);
51
+ // point multiplication
52
+ static void fiat_p256_select_point_16(fiat_p256_felem dst[3],
53
+ const fiat_p256_felem src[16][3],
54
+ size_t i) {
55
+ OPENSSL_memset(dst, 0, 3 * sizeof(fiat_p256_felem));
56
+ OPENSSL_CLANG_PRAGMA("clang loop unroll_count(4)")
57
+ for (size_t j = 0; j < 16; j++) {
58
+ constant_time_conditional_memxor(dst, &src[j], 3 * sizeof(fiat_p256_felem),
59
+ constant_time_eq_w(i, j));
60
+ }
78
61
  }
79
62
 
80
- static void fiat_p256_from_words(fiat_p256_felem out,
81
- const BN_ULONG in[32 / sizeof(BN_ULONG)]) {
82
- // Typically, |BN_ULONG| and |fiat_p256_limb_t| will be the same type, but on
83
- // 64-bit platforms without |uint128_t|, they are different. However, on
84
- // little-endian systems, |uint64_t[4]| and |uint32_t[8]| have the same
85
- // layout.
86
- OPENSSL_memcpy(out, in, 32);
63
+ // Precompute multiples of `p`. p_pre_comp[i] is (i+1) * `p`.
64
+ static void p256_point_mul(fiat_p256_felem out[3], const fiat_p256_felem p[3],
65
+ const uint8_t s[32]) {
66
+ alignas(32) fiat_p256_felem p_pre_comp[16][3];
67
+ OPENSSL_memcpy(p_pre_comp[0], p, sizeof(p_pre_comp[0]));
68
+ for (size_t j = 2; j <= 16; ++j) {
69
+ if (j & 1) {
70
+ p256_point_add_vartime_if_doubling((uintptr_t)p_pre_comp[j - 1],
71
+ (uintptr_t)p_pre_comp[j - 2],
72
+ (uintptr_t)p_pre_comp[0]);
73
+ } else {
74
+ p256_point_double((uintptr_t)p_pre_comp[j - 1],
75
+ (uintptr_t)p_pre_comp[(j - 1) / 2]);
76
+ }
77
+ }
78
+ alignas(32) fiat_p256_felem ret[3];
79
+ bool ret_is_zero = true;
80
+
81
+ for (size_t i = 51; i < 52; i--) {
82
+ if (!ret_is_zero) {
83
+ for (size_t k = 4; k < 5; k--) {
84
+ p256_point_double((uintptr_t)ret, (uintptr_t)ret);
85
+ }
86
+ }
87
+
88
+ crypto_word_t bits = 0;
89
+ OPENSSL_CLANG_PRAGMA("clang loop unroll(full)")
90
+ for (size_t k = 5; k < 6; k--) {
91
+ bits |= bit(s, i * 5 - 1 + k) << k;
92
+ }
93
+ crypto_word_t sign, digit;
94
+ ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
95
+
96
+ alignas(32) fiat_p256_felem t[3];
97
+ fiat_p256_select_point_16(t, p_pre_comp, digit - 1);
98
+ fiat_p256_opp_conditional(t[1], sign);
99
+
100
+ if (!ret_is_zero) {
101
+ p256_point_add_vartime_if_doubling((uintptr_t)ret, (uintptr_t)ret,
102
+ (uintptr_t)t);
103
+ } else {
104
+ OPENSSL_memcpy(ret, t, sizeof(ret));
105
+ ret_is_zero = false;
106
+ }
107
+ }
108
+ // The first loop iteration will initialize `ret`.
109
+ assert(!ret_is_zero);
110
+
111
+ OPENSSL_memcpy(out, ret, sizeof(ret));
87
112
  }
88
113
 
89
- static void fiat_p256_from_generic(fiat_p256_felem out, const EC_FELEM *in) {
90
- fiat_p256_from_words(out, in->words);
114
+ // point_mul_public
115
+ #include "./p256_table.h"
116
+
117
+ static void ec_GFp_nistp256_point_mul_public(const EC_GROUP *group,
118
+ EC_JACOBIAN *r,
119
+ const EC_SCALAR *gs,
120
+ const EC_JACOBIAN *p,
121
+ const EC_SCALAR *ps) {
122
+ const uint8_t *g_scalar = (uint8_t *)gs->words;
123
+ int8_t p_wNAF[257] = {0};
124
+
125
+ alignas(32) fiat_p256_felem p_pre_comp[1 << (4 - 1)][3];
126
+ OPENSSL_memcpy(p_pre_comp[0][2], &p->Z, 32);
127
+ if (!p256_point_iszero((uintptr_t)p_pre_comp[0])) {
128
+ ec_compute_wNAF(group, p_wNAF, ps, /*bits=*/256, /*w=*/4);
129
+ // Precompute multiples of `p`. p_pre_comp[i] is (2*i+1) * `p`.
130
+ OPENSSL_memcpy(p_pre_comp[0][0], &p->X, 32);
131
+ OPENSSL_memcpy(p_pre_comp[0][1], &p->Y, 32);
132
+ alignas(32) fiat_p256_felem p2[3];
133
+ p256_point_double((uintptr_t)p2, (uintptr_t)p_pre_comp[0]);
134
+ for (size_t i = 1; i < std::size(p_pre_comp); i++) {
135
+ p256_point_add_nz_nz_neq((uintptr_t)p_pre_comp[i],
136
+ (uintptr_t)p_pre_comp[i - 1], (uintptr_t)p2);
137
+ }
138
+ }
139
+
140
+ alignas(32) fiat_p256_felem ret[3] = {};
141
+ bool ret_is_zero = true; // Save some point operations, avoid 0+Q
142
+ for (int i = 256; i >= 0; i--) {
143
+ if (!ret_is_zero) {
144
+ p256_point_double((uintptr_t)ret, (uintptr_t)ret);
145
+ }
146
+
147
+ if (i <= 31) {
148
+ OPENSSL_CLANG_PRAGMA("clang loop unroll(full)")
149
+ for (size_t j = 1; j < 2; j--) {
150
+ crypto_word_t bits = 0;
151
+ OPENSSL_CLANG_PRAGMA("clang loop unroll(full)")
152
+ for (size_t k = 3; k < 4; k--) {
153
+ bits |= bit(g_scalar, i + j * 32 + k * 64) << k;
154
+ }
155
+ if (bits != 0) {
156
+ if (!ret_is_zero) {
157
+ alignas(32) fiat_p256_felem t[3];
158
+ fiat_p256_set_one(t[2]);
159
+ OPENSSL_memcpy(t, fiat_p256_g_pre_comp[j][bits - 1], 64);
160
+ p256_point_add_affinenz_conditional_vartime_if_doubling(
161
+ (uintptr_t)ret, (uintptr_t)ret, (uintptr_t)t, 1);
162
+ ret_is_zero = p256_point_iszero((uintptr_t)ret);
163
+ } else {
164
+ OPENSSL_memcpy(ret, fiat_p256_g_pre_comp[j][bits - 1],
165
+ sizeof(fiat_p256_g_pre_comp[j][bits - 1]));
166
+ fiat_p256_set_one(ret[2]);
167
+ ret_is_zero = false;
168
+ }
169
+ }
170
+ }
171
+ }
172
+
173
+ int digit = p_wNAF[i];
174
+ if (digit != 0) {
175
+ assert(digit & 1);
176
+ size_t idx = (size_t)(digit < 0 ? (-digit) >> 1 : digit >> 1);
177
+ fiat_p256_felem t[3];
178
+ OPENSSL_memcpy(t, p_pre_comp[idx], sizeof(t));
179
+ if (digit < 0) {
180
+ fiat_p256_opp(t[1], t[1]);
181
+ }
182
+ if (!ret_is_zero) {
183
+ p256_point_add_vartime_if_doubling((uintptr_t)ret, (uintptr_t)ret,
184
+ (uintptr_t)t);
185
+ ret_is_zero = p256_point_iszero((uintptr_t)ret);
186
+ } else {
187
+ OPENSSL_memcpy(ret, t, sizeof(ret));
188
+ ret_is_zero = false;
189
+ }
190
+ }
191
+ }
192
+
193
+ OPENSSL_memcpy(&r->X, ret[0], 32);
194
+ OPENSSL_memcpy(&r->Y, ret[1], 32);
195
+ OPENSSL_memcpy(&r->Z, ret[2], 32);
91
196
  }
92
197
 
93
- static void fiat_p256_to_generic(EC_FELEM *out, const fiat_p256_felem in) {
94
- // See |fiat_p256_from_words|.
95
- OPENSSL_memcpy(out->words, in, 32);
198
+ // p256_point_mul_base (small and full)
199
+
200
+ // fiat_p256_select_point_affine selects the `i`th point from a precomputation
201
+ // table and copies it to `dst`. If `n<=i`, the output is (0, 0).
202
+ static void fiat_p256_select_point_affine(fiat_p256_felem dst[2],
203
+ const fiat_p256_felem src[/*n*/][2],
204
+ size_t i, size_t n) {
205
+ OPENSSL_memset(dst, 0, 2 * sizeof(fiat_p256_felem));
206
+ OPENSSL_CLANG_PRAGMA("clang loop unroll_count(8)")
207
+ for (size_t j = 0; j < n; j++) {
208
+ constant_time_conditional_memxor(dst, &src[j], 2 * sizeof(fiat_p256_felem),
209
+ constant_time_eq_w(i, j));
210
+ }
211
+ }
212
+
213
+ static void fiat_p256_conditional_zero_or_one(fiat_p256_felem out,
214
+ crypto_word_t c) {
215
+ fiat_p256_set_one(out);
216
+ crypto_word_t mask = value_barrier_w(~constant_time_is_zero_w(c));
217
+ for (size_t i = 0; i < P256_LIMBS; ++i) {
218
+ out[i] &= mask;
219
+ }
96
220
  }
97
221
 
98
- // fiat_p256_inv_square calculates |out| = |in|^{-2}
222
+ #if defined(OPENSSL_SMALL)
223
+
224
+ #ifdef __clang__
225
+ __attribute__((noinline)) // Do not inline into unrolled loop below.
226
+ #endif
227
+ static void fiat_p256_select_point_affine_15(
228
+ fiat_p256_felem dst[2], const fiat_p256_felem src[/*n*/][2], size_t i) {
229
+ fiat_p256_select_point_affine(dst, src, i, 15); // Intended to be inlined.
230
+ }
231
+
232
+ static void p256_point_mul_base(fiat_p256_felem ret[3], const uint8_t s[32]) {
233
+ bool ret_is_zero = true; // Save two point operations in the first round.
234
+ alignas(32) fiat_p256_felem t[3];
235
+ fiat_p256_set_one(t[2]);
236
+ for (size_t i = 31; i < 32; i--) {
237
+ if (!ret_is_zero) {
238
+ p256_point_double((uintptr_t)ret, (uintptr_t)ret);
239
+ }
240
+ OPENSSL_CLANG_PRAGMA("clang loop unroll(full)")
241
+ for (size_t j = 1; j < 2; j--) {
242
+ crypto_word_t bits = 0;
243
+ OPENSSL_CLANG_PRAGMA("clang loop unroll(full)")
244
+ for (size_t k = 3; k < 4; k--) {
245
+ bits |= bit(s, i + 32 * j + 64 * k) << k;
246
+ }
247
+ fiat_p256_select_point_affine_15(t, fiat_p256_g_pre_comp[j], bits - 1);
248
+
249
+ if (!ret_is_zero) {
250
+ p256_point_add_affinenz_conditional_vartime_if_doubling(
251
+ (uintptr_t)ret, (uintptr_t)ret, (uintptr_t)t, (uintptr_t)bits);
252
+ } else {
253
+ OPENSSL_memcpy(ret, t, sizeof(t));
254
+ fiat_p256_conditional_zero_or_one(ret[2], bits);
255
+ ret_is_zero = false;
256
+ }
257
+ }
258
+ }
259
+
260
+ // The first loop iteration will initialize `ret`.
261
+ assert(!ret_is_zero);
262
+ }
263
+ #else // defined(OPENSSL_SMALL)
264
+
265
+ /*
266
+ * Originally written by Shay Gueron (1, 2), and Vlad Krasnov (1)
267
+ * (1) Intel Corporation, Israel Development Center, Haifa, Israel
268
+ * (2) University of Haifa, Israel
269
+ *
270
+ * Reference:
271
+ * S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with
272
+ * 256 Bit Primes"
273
+ */
274
+
275
+ // Precomputed tables for the default generator
276
+ typedef fiat_p256_felem PRECOMP256_ROW[64][2];
277
+ #include "p256-nistz-table.h"
278
+
279
+ #ifdef __clang__
280
+ __attribute__((noinline)) // Do not inline into unrolled loop below.
281
+ #endif
282
+ static void fiat_p256_select_point_affine_16(fiat_p256_felem dst[2],
283
+ const fiat_p256_felem src[16][2],
284
+ size_t i) {
285
+ fiat_p256_select_point_affine(dst, src, i, 16);
286
+ }
287
+
288
+ #ifdef __clang__
289
+ __attribute__((noinline)) // Do not inline into unrolled loop below.
290
+ #endif
291
+ static void fiat_p256_select_point_affine_64(fiat_p256_felem dst[2],
292
+ const fiat_p256_felem src[64][2],
293
+ size_t i) {
294
+ fiat_p256_select_point_affine(dst, src, i, 64);
295
+ }
296
+
297
+ // See `ec_GFp_nistp_recode_scalar_bits` in util.c for details
298
+ static crypto_word_t booth_recode_w7(crypto_word_t in) {
299
+ crypto_word_t s, d;
300
+ s = ~((in >> 7) - 1);
301
+ d = (1 << 8) - in - 1;
302
+ d = (d & s) | (in & ~s);
303
+ d = (d >> 1) + (d & 1);
304
+ return (d << 1) + (s & 1);
305
+ }
306
+
307
+ static void p256_point_mul_base(fiat_p256_felem ret[3], const uint8_t s[32]) {
308
+ bool ret_is_zero = true;
309
+ alignas(32) fiat_p256_felem t[3];
310
+ fiat_p256_set_one(t[2]);
311
+ for (size_t i = 36; i < 37; i--) {
312
+ // Load 7-bit windows, plus one bit below the window for `booth_recode_w7`,
313
+ // i.e. 8 bits from 7 * i - 1 to 7 * (i + 1).
314
+ constexpr size_t kMask = (1 << (7 + 1)) - 1;
315
+ crypto_word_t wvalue;
316
+ if (i == 0) {
317
+ wvalue = (s[0] << 1) & kMask;
318
+ } else {
319
+ size_t first_bit = 7 * i - 1;
320
+ size_t idx = first_bit / 8;
321
+ // The window may span two bytes.
322
+ wvalue =
323
+ s[idx] | (static_cast<crypto_word_t>(idx < 31 ? s[idx + 1] : 0) << 8);
324
+ wvalue = (wvalue >> (first_bit % 8)) & kMask;
325
+ }
326
+ wvalue = booth_recode_w7(wvalue);
327
+ if (i == 36) {
328
+ // The last window has only 4 bits instead of the full 7.
329
+ declassify_assert((wvalue >> 1) <= 16);
330
+ fiat_p256_select_point_affine_16(t, ecp_nistz256_precomputed[i],
331
+ (wvalue >> 1) - 1);
332
+ } else {
333
+ fiat_p256_select_point_affine_64(t, ecp_nistz256_precomputed[i],
334
+ (wvalue >> 1) - 1);
335
+ }
336
+ fiat_p256_opp_conditional(t[1], wvalue & 1);
337
+
338
+ if (!ret_is_zero) {
339
+ p256_point_add_affinenz_conditional_vartime_if_doubling(
340
+ (uintptr_t)ret, (uintptr_t)ret, (uintptr_t)t, wvalue >> 1);
341
+ } else {
342
+ OPENSSL_memcpy(ret, t, sizeof(t));
343
+ fiat_p256_conditional_zero_or_one(ret[2], wvalue >> 1);
344
+ ret_is_zero = false;
345
+ }
346
+ }
347
+
348
+ // The first loop iteration will initialize `ret`.
349
+ assert(!ret_is_zero);
350
+ }
351
+ #endif // !OPENSSL_SMALL
352
+
353
+
354
+ // FIELD-ELEMENT INVERSION
355
+
356
+
357
+ // fiat_p256_inv_square calculates `out` = `in`^{-2}
99
358
  //
100
359
  // Based on Fermat's Little Theorem:
101
360
  // a^p = a (mod p)
@@ -106,310 +365,182 @@ static void fiat_p256_inv_square(fiat_p256_felem out,
106
365
  // This implements the addition chain described in
107
366
  // https://briansmith.org/ecc-inversion-addition-chains-01#p256_field_inversion
108
367
  fiat_p256_felem x2, x3, x6, x12, x15, x30, x32;
109
- fiat_p256_square(x2, in); // 2^2 - 2^1
110
- fiat_p256_mul(x2, x2, in); // 2^2 - 2^0
368
+ p256_coord_sqr(x2, in); // 2^2 - 2^1
369
+ p256_coord_mul(x2, x2, in); // 2^2 - 2^0
111
370
 
112
- fiat_p256_square(x3, x2); // 2^3 - 2^1
113
- fiat_p256_mul(x3, x3, in); // 2^3 - 2^0
371
+ p256_coord_sqr(x3, x2); // 2^3 - 2^1
372
+ p256_coord_mul(x3, x3, in); // 2^3 - 2^0
114
373
 
115
- fiat_p256_square(x6, x3);
374
+ p256_coord_sqr(x6, x3);
116
375
  for (int i = 1; i < 3; i++) {
117
- fiat_p256_square(x6, x6);
118
- } // 2^6 - 2^3
119
- fiat_p256_mul(x6, x6, x3); // 2^6 - 2^0
376
+ p256_coord_sqr(x6, x6); // 2^6 - 2^3
377
+ }
378
+ p256_coord_mul(x6, x6, x3); // 2^6 - 2^0
120
379
 
121
- fiat_p256_square(x12, x6);
380
+ p256_coord_sqr(x12, x6);
122
381
  for (int i = 1; i < 6; i++) {
123
- fiat_p256_square(x12, x12);
124
- } // 2^12 - 2^6
125
- fiat_p256_mul(x12, x12, x6); // 2^12 - 2^0
382
+ p256_coord_sqr(x12, x12); // 2^12 - 2^6
383
+ }
384
+ p256_coord_mul(x12, x12, x6); // 2^12 - 2^0
126
385
 
127
- fiat_p256_square(x15, x12);
386
+ p256_coord_sqr(x15, x12);
128
387
  for (int i = 1; i < 3; i++) {
129
- fiat_p256_square(x15, x15);
130
- } // 2^15 - 2^3
131
- fiat_p256_mul(x15, x15, x3); // 2^15 - 2^0
388
+ p256_coord_sqr(x15, x15); // 2^15 - 2^3
389
+ }
390
+ p256_coord_mul(x15, x15, x3); // 2^15 - 2^0
132
391
 
133
- fiat_p256_square(x30, x15);
392
+ p256_coord_sqr(x30, x15);
134
393
  for (int i = 1; i < 15; i++) {
135
- fiat_p256_square(x30, x30);
136
- } // 2^30 - 2^15
137
- fiat_p256_mul(x30, x30, x15); // 2^30 - 2^0
394
+ p256_coord_sqr(x30, x30); // 2^30 - 2^15
395
+ }
396
+ p256_coord_mul(x30, x30, x15); // 2^30 - 2^0
138
397
 
139
- fiat_p256_square(x32, x30);
140
- fiat_p256_square(x32, x32); // 2^32 - 2^2
141
- fiat_p256_mul(x32, x32, x2); // 2^32 - 2^0
398
+ p256_coord_sqr(x32, x30);
399
+ p256_coord_sqr(x32, x32); // 2^32 - 2^2
400
+ p256_coord_mul(x32, x32, x2); // 2^32 - 2^0
142
401
 
143
402
  fiat_p256_felem ret;
144
- fiat_p256_square(ret, x32);
403
+ p256_coord_sqr(ret, x32);
145
404
  for (int i = 1; i < 31 + 1; i++) {
146
- fiat_p256_square(ret, ret);
147
- } // 2^64 - 2^32
148
- fiat_p256_mul(ret, ret, in); // 2^64 - 2^32 + 2^0
405
+ p256_coord_sqr(ret, ret); // 2^64 - 2^32
406
+ }
407
+ p256_coord_mul(ret, ret, in); // 2^64 - 2^32 + 2^0
149
408
 
150
409
  for (int i = 0; i < 96 + 32; i++) {
151
- fiat_p256_square(ret, ret);
152
- } // 2^192 - 2^160 + 2^128
153
- fiat_p256_mul(ret, ret, x32); // 2^192 - 2^160 + 2^128 + 2^32 - 2^0
410
+ p256_coord_sqr(ret, ret); // 2^192 - 2^160 + 2^128
411
+ }
412
+ p256_coord_mul(ret, ret, x32); // 2^192 - 2^160 + 2^128 + 2^32 - 2^0
154
413
 
155
414
  for (int i = 0; i < 32; i++) {
156
- fiat_p256_square(ret, ret);
157
- } // 2^224 - 2^192 + 2^160 + 2^64 - 2^32
158
- fiat_p256_mul(ret, ret, x32); // 2^224 - 2^192 + 2^160 + 2^64 - 2^0
415
+ p256_coord_sqr(ret, ret); // 2^224 - 2^192 + 2^160 + 2^64 - 2^32
416
+ }
417
+ p256_coord_mul(ret, ret, x32); // 2^224 - 2^192 + 2^160 + 2^64 - 2^0
159
418
 
160
419
  for (int i = 0; i < 30; i++) {
161
- fiat_p256_square(ret, ret);
162
- } // 2^254 - 2^222 + 2^190 + 2^94 - 2^30
163
- fiat_p256_mul(ret, ret, x30); // 2^254 - 2^222 + 2^190 + 2^94 - 2^0
420
+ p256_coord_sqr(ret, ret); // 2^254 - 2^222 + 2^190 + 2^94 - 2^30
421
+ }
422
+ p256_coord_mul(ret, ret, x30); // 2^254 - 2^222 + 2^190 + 2^94 - 2^0
164
423
 
165
- fiat_p256_square(ret, ret);
166
- fiat_p256_square(out, ret); // 2^256 - 2^224 + 2^192 + 2^96 - 2^2
424
+ p256_coord_sqr(ret, ret);
425
+ p256_coord_sqr(out, ret); // 2^256 - 2^224 + 2^192 + 2^96 - 2^2
167
426
  }
168
427
 
169
- // Group operations
170
- // ----------------
171
- //
172
- // Building on top of the field operations we have the operations on the
173
- // elliptic curve group itself. Points on the curve are represented in Jacobian
174
- // coordinates.
175
- //
176
- // Both operations were transcribed to Coq and proven to correspond to naive
177
- // implementations using Affine coordinates, for all suitable fields. In the
178
- // Coq proofs, issues of constant-time execution and memory layout (aliasing)
179
- // conventions were not considered. Specification of affine coordinates:
180
- // <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Spec/WeierstrassCurve.v#L28>
181
- // As a sanity check, a proof that these points form a commutative group:
182
- // <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/AffineProofs.v#L33>
183
-
184
- // fiat_p256_point_double calculates 2*(x_in, y_in, z_in)
185
- //
186
- // The method is taken from:
187
- // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b
188
- //
189
- // Coq transcription and correctness proof:
190
- // <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/Jacobian.v#L93>
191
- // <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/Jacobian.v#L201>
192
- //
193
- // Outputs can equal corresponding inputs, i.e., x_out == x_in is allowed.
194
- // while x_out == y_in is not (maybe this works, but it's not tested).
195
- static void fiat_p256_point_double(fiat_p256_felem x_out, fiat_p256_felem y_out,
196
- fiat_p256_felem z_out,
197
- const fiat_p256_felem x_in,
198
- const fiat_p256_felem y_in,
199
- const fiat_p256_felem z_in) {
200
- fiat_p256_felem delta, gamma, beta, ftmp, ftmp2, tmptmp, alpha, fourbeta;
201
- // delta = z^2
202
- fiat_p256_square(delta, z_in);
203
- // gamma = y^2
204
- fiat_p256_square(gamma, y_in);
205
- // beta = x*gamma
206
- fiat_p256_mul(beta, x_in, gamma);
207
-
208
- // alpha = 3*(x-delta)*(x+delta)
209
- fiat_p256_sub(ftmp, x_in, delta);
210
- fiat_p256_add(ftmp2, x_in, delta);
211
-
212
- fiat_p256_add(tmptmp, ftmp2, ftmp2);
213
- fiat_p256_add(ftmp2, ftmp2, tmptmp);
214
- fiat_p256_mul(alpha, ftmp, ftmp2);
215
-
216
- // x' = alpha^2 - 8*beta
217
- fiat_p256_square(x_out, alpha);
218
- fiat_p256_add(fourbeta, beta, beta);
219
- fiat_p256_add(fourbeta, fourbeta, fourbeta);
220
- fiat_p256_add(tmptmp, fourbeta, fourbeta);
221
- fiat_p256_sub(x_out, x_out, tmptmp);
222
-
223
- // z' = (y + z)^2 - gamma - delta
224
- fiat_p256_add(delta, gamma, delta);
225
- fiat_p256_add(ftmp, y_in, z_in);
226
- fiat_p256_square(z_out, ftmp);
227
- fiat_p256_sub(z_out, z_out, delta);
228
-
229
- // y' = alpha*(4*beta - x') - 8*gamma^2
230
- fiat_p256_sub(y_out, fourbeta, x_out);
231
- fiat_p256_add(gamma, gamma, gamma);
232
- fiat_p256_square(gamma, gamma);
233
- fiat_p256_mul(y_out, alpha, y_out);
234
- fiat_p256_add(gamma, gamma, gamma);
235
- fiat_p256_sub(y_out, y_out, gamma);
236
- }
237
428
 
238
- // fiat_p256_point_add calculates (x1, y1, z1) + (x2, y2, z2)
239
- //
240
- // The method is taken from:
241
- // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-2007-bl,
242
- // adapted for mixed addition (z2 = 1, or z2 = 0 for the point at infinity).
243
- //
244
- // Coq transcription and correctness proof:
245
- // <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/Jacobian.v#L135>
246
- // <https://github.com/mit-plv/fiat-crypto/blob/79f8b5f39ed609339f0233098dee1a3c4e6b3080/src/Curves/Weierstrass/Jacobian.v#L205>
247
- //
248
- // This function includes a branch for checking whether the two input points
249
- // are equal, (while not equal to the point at infinity). This case never
250
- // happens during single point multiplication, so there is no timing leak for
251
- // ECDH or ECDSA signing.
252
- static void fiat_p256_point_add(fiat_p256_felem x3, fiat_p256_felem y3,
253
- fiat_p256_felem z3, const fiat_p256_felem x1,
254
- const fiat_p256_felem y1,
255
- const fiat_p256_felem z1, const int mixed,
256
- const fiat_p256_felem x2,
257
- const fiat_p256_felem y2,
258
- const fiat_p256_felem z2) {
259
- fiat_p256_felem x_out, y_out, z_out;
260
- fiat_p256_limb_t z1nz = fiat_p256_nz(z1);
261
- fiat_p256_limb_t z2nz = fiat_p256_nz(z2);
262
-
263
- // z1z1 = z1z1 = z1**2
264
- fiat_p256_felem z1z1;
265
- fiat_p256_square(z1z1, z1);
266
-
267
- fiat_p256_felem u1, s1, two_z1z2;
268
- if (!mixed) {
269
- // z2z2 = z2**2
270
- fiat_p256_felem z2z2;
271
- fiat_p256_square(z2z2, z2);
272
-
273
- // u1 = x1*z2z2
274
- fiat_p256_mul(u1, x1, z2z2);
275
-
276
- // two_z1z2 = (z1 + z2)**2 - (z1z1 + z2z2) = 2z1z2
277
- fiat_p256_add(two_z1z2, z1, z2);
278
- fiat_p256_square(two_z1z2, two_z1z2);
279
- fiat_p256_sub(two_z1z2, two_z1z2, z1z1);
280
- fiat_p256_sub(two_z1z2, two_z1z2, z2z2);
281
-
282
- // s1 = y1 * z2**3
283
- fiat_p256_mul(s1, z2, z2z2);
284
- fiat_p256_mul(s1, s1, y1);
285
- } else {
286
- // We'll assume z2 = 1 (special case z2 = 0 is handled later).
287
-
288
- // u1 = x1*z2z2
289
- fiat_p256_copy(u1, x1);
290
- // two_z1z2 = 2z1z2
291
- fiat_p256_add(two_z1z2, z1, z1);
292
- // s1 = y1 * z2**3
293
- fiat_p256_copy(s1, y1);
294
- }
429
+ // Arithmetic modulo curve order
295
430
 
296
- // u2 = x2*z1z1
297
- fiat_p256_felem u2;
298
- fiat_p256_mul(u2, x2, z1z1);
299
431
 
300
- // h = u2 - u1
301
- fiat_p256_felem h;
302
- fiat_p256_sub(h, u2, u1);
432
+ static void p256_order_inv0(const EC_GROUP *group, EC_SCALAR *out,
433
+ const EC_SCALAR *in) {
434
+ // table[i] stores a power of `in` corresponding to the matching enum value.
435
+ enum {
436
+ // The following indices specify the power in binary.
437
+ i_1 = 0,
438
+ i_10,
439
+ i_11,
440
+ i_101,
441
+ i_111,
442
+ i_1010,
443
+ i_1111,
444
+ i_10101,
445
+ i_101010,
446
+ i_101111,
447
+ // The following indices specify 2^N-1, or N ones in a row.
448
+ i_x6,
449
+ i_x8,
450
+ i_x16,
451
+ i_x32
452
+ };
453
+ BN_ULONG table[15][P256_LIMBS];
303
454
 
304
- fiat_p256_limb_t xneq = fiat_p256_nz(h);
455
+ // https://briansmith.org/ecc-inversion-addition-chains-01#p256_scalar_inversion
456
+ // This code uses specialized field arithmetic and saves 12 sqr and 13 mul.
305
457
 
306
- // z_out = two_z1z2 * h
307
- fiat_p256_mul(z_out, h, two_z1z2);
458
+ // Pre-calculate powers.
459
+ OPENSSL_memcpy(table[i_1], in->words, P256_LIMBS * sizeof(BN_ULONG));
308
460
 
309
- // z1z1z1 = z1 * z1z1
310
- fiat_p256_felem z1z1z1;
311
- fiat_p256_mul(z1z1z1, z1, z1z1);
461
+ p256_order_sqr(group, table[i_10], table[i_1], 1);
312
462
 
313
- // s2 = y2 * z1**3
314
- fiat_p256_felem s2;
315
- fiat_p256_mul(s2, y2, z1z1z1);
463
+ p256_order_mul(group, table[i_11], table[i_1], table[i_10]);
316
464
 
317
- // r = (s2 - s1)*2
318
- fiat_p256_felem r;
319
- fiat_p256_sub(r, s2, s1);
320
- fiat_p256_add(r, r, r);
465
+ p256_order_mul(group, table[i_101], table[i_11], table[i_10]);
321
466
 
322
- fiat_p256_limb_t yneq = fiat_p256_nz(r);
467
+ p256_order_mul(group, table[i_111], table[i_101], table[i_10]);
323
468
 
324
- fiat_p256_limb_t is_nontrivial_double = constant_time_is_zero_w(xneq | yneq) &
325
- ~constant_time_is_zero_w(z1nz) &
326
- ~constant_time_is_zero_w(z2nz);
327
- if (constant_time_declassify_w(is_nontrivial_double)) {
328
- fiat_p256_point_double(x3, y3, z3, x1, y1, z1);
329
- return;
330
- }
469
+ p256_order_sqr(group, table[i_1010], table[i_101], 1);
331
470
 
332
- // I = (2h)**2
333
- fiat_p256_felem i;
334
- fiat_p256_add(i, h, h);
335
- fiat_p256_square(i, i);
336
-
337
- // J = h * I
338
- fiat_p256_felem j;
339
- fiat_p256_mul(j, h, i);
340
-
341
- // V = U1 * I
342
- fiat_p256_felem v;
343
- fiat_p256_mul(v, u1, i);
344
-
345
- // x_out = r**2 - J - 2V
346
- fiat_p256_square(x_out, r);
347
- fiat_p256_sub(x_out, x_out, j);
348
- fiat_p256_sub(x_out, x_out, v);
349
- fiat_p256_sub(x_out, x_out, v);
350
-
351
- // y_out = r(V-x_out) - 2 * s1 * J
352
- fiat_p256_sub(y_out, v, x_out);
353
- fiat_p256_mul(y_out, y_out, r);
354
- fiat_p256_felem s1j;
355
- fiat_p256_mul(s1j, s1, j);
356
- fiat_p256_sub(y_out, y_out, s1j);
357
- fiat_p256_sub(y_out, y_out, s1j);
358
-
359
- fiat_p256_cmovznz(x_out, z1nz, x2, x_out);
360
- fiat_p256_cmovznz(x3, z2nz, x1, x_out);
361
- fiat_p256_cmovznz(y_out, z1nz, y2, y_out);
362
- fiat_p256_cmovznz(y3, z2nz, y1, y_out);
363
- fiat_p256_cmovznz(z_out, z1nz, z2, z_out);
364
- fiat_p256_cmovznz(z3, z2nz, z1, z_out);
365
- }
471
+ p256_order_mul(group, table[i_1111], table[i_1010], table[i_101]);
366
472
 
367
- #include "./p256_table.h"
473
+ p256_order_sqr(group, table[i_10101], table[i_1010], 1);
474
+ p256_order_mul(group, table[i_10101], table[i_10101], table[i_1]);
475
+
476
+ p256_order_sqr(group, table[i_101010], table[i_10101], 1);
477
+
478
+ p256_order_mul(group, table[i_101111], table[i_101010], table[i_101]);
479
+
480
+ p256_order_mul(group, table[i_x6], table[i_101010], table[i_10101]);
481
+
482
+ p256_order_sqr(group, table[i_x8], table[i_x6], 2);
483
+ p256_order_mul(group, table[i_x8], table[i_x8], table[i_11]);
484
+
485
+ p256_order_sqr(group, table[i_x16], table[i_x8], 8);
486
+ p256_order_mul(group, table[i_x16], table[i_x16], table[i_x8]);
487
+
488
+ p256_order_sqr(group, table[i_x32], table[i_x16], 16);
489
+ p256_order_mul(group, table[i_x32], table[i_x32], table[i_x16]);
368
490
 
369
- // fiat_p256_select_point_affine selects the |idx-1|th point from a
370
- // precomputation table and copies it to out. If |idx| is zero, the output is
371
- // the point at infinity.
372
- static void fiat_p256_select_point_affine(
373
- const fiat_p256_limb_t idx, size_t size,
374
- const fiat_p256_felem pre_comp[/*size*/][2], fiat_p256_felem out[3]) {
375
- OPENSSL_memset(out, 0, sizeof(fiat_p256_felem) * 3);
376
- for (size_t i = 0; i < size; i++) {
377
- fiat_p256_limb_t mismatch = i ^ (idx - 1);
378
- fiat_p256_cmovznz(out[0], mismatch, pre_comp[i][0], out[0]);
379
- fiat_p256_cmovznz(out[1], mismatch, pre_comp[i][1], out[1]);
491
+ // Compute `in` raised to the order-2.
492
+ p256_order_sqr(group, out->words, table[i_x32], 64);
493
+ p256_order_mul(group, out->words, out->words, table[i_x32]);
494
+ static const struct {
495
+ uint8_t p, i;
496
+ } kChain[27] = {{32, i_x32}, {6, i_101111}, {5, i_111}, {4, i_11},
497
+ {5, i_1111}, {5, i_10101}, {4, i_101}, {3, i_101},
498
+ {3, i_101}, {5, i_111}, {9, i_101111}, {6, i_1111},
499
+ {2, i_1}, {5, i_1}, {6, i_1111}, {5, i_111},
500
+ {4, i_111}, {5, i_111}, {5, i_101}, {3, i_11},
501
+ {10, i_101111}, {2, i_11}, {5, i_11}, {5, i_11},
502
+ {3, i_1}, {7, i_10101}, {6, i_1111}};
503
+ for (const auto &step : kChain) {
504
+ p256_order_sqr(group, out->words, out->words, step.p);
505
+ p256_order_mul(group, out->words, out->words, table[step.i]);
380
506
  }
381
- fiat_p256_cmovznz(out[2], idx, out[2], fiat_p256_one);
382
507
  }
383
508
 
384
- // fiat_p256_select_point selects the |idx|th point from a precomputation table
385
- // and copies it to out.
386
- static void fiat_p256_select_point(const fiat_p256_limb_t idx, size_t size,
387
- const fiat_p256_felem pre_comp[/*size*/][3],
388
- fiat_p256_felem out[3]) {
389
- OPENSSL_memset(out, 0, sizeof(fiat_p256_felem) * 3);
390
- for (size_t i = 0; i < size; i++) {
391
- fiat_p256_limb_t mismatch = i ^ idx;
392
- fiat_p256_cmovznz(out[0], mismatch, pre_comp[i][0], out[0]);
393
- fiat_p256_cmovznz(out[1], mismatch, pre_comp[i][1], out[1]);
394
- fiat_p256_cmovznz(out[2], mismatch, pre_comp[i][2], out[2]);
509
+ static int p256_order_mont_inv_vartime(const EC_GROUP *group, EC_SCALAR *out,
510
+ const EC_SCALAR *in) {
511
+ #if !defined(OPENSSL_NO_ASM) && \
512
+ (defined(OPENSSL_X86_64) || defined(OPENSSL_AARCH64))
513
+ #if defined(OPENSSL_X86_64)
514
+ if (!CRYPTO_is_AVX_capable()) {
515
+ // No AVX support; fallback to generic code.
516
+ return ec_simple_scalar_to_montgomery_inv_vartime(group, out, in);
395
517
  }
396
- }
518
+ #endif
397
519
 
398
- // fiat_p256_get_bit returns the |i|th bit in |in|.
399
- static crypto_word_t fiat_p256_get_bit(const EC_SCALAR *in, int i) {
400
- if (i < 0 || i >= 256) {
520
+ assert(group->order.N.width == P256_LIMBS);
521
+ if (!beeu_mod_inverse_vartime(out->words, in->words, group->order.N.d)) {
401
522
  return 0;
402
523
  }
403
- #if defined(OPENSSL_64_BIT)
404
- static_assert(sizeof(BN_ULONG) == 8, "BN_ULONG was not 64-bit");
405
- return (in->words[i >> 6] >> (i & 63)) & 1;
524
+
525
+ // The result should be returned in the Montgomery domain.
526
+ ec_scalar_to_montgomery(group, out, out);
527
+ return 1;
406
528
  #else
407
- static_assert(sizeof(BN_ULONG) == 4, "BN_ULONG was not 32-bit");
408
- return (in->words[i >> 5] >> (i & 31)) & 1;
529
+ return ec_simple_scalar_to_montgomery_inv_vartime(group, out, in);
409
530
  #endif
410
531
  }
411
532
 
412
- // OPENSSL EC_METHOD FUNCTIONS
533
+
534
+ // OPENSSL EC_METHOD WRAPPERS
535
+
536
+
537
+ static void fiat_p256_from_generic(fiat_p256_felem out, const EC_FELEM *in) {
538
+ OPENSSL_memcpy(out, in->words, 32);
539
+ }
540
+
541
+ static void fiat_p256_to_generic(EC_FELEM *out, const fiat_p256_felem in) {
542
+ OPENSSL_memcpy(out->words, in, 32);
543
+ }
413
544
 
414
545
  // Takes the Jacobian coordinates (X, Y, Z) of a point and returns (X', Y') =
415
546
  // (X/Z^2, Y/Z^3).
@@ -426,260 +557,25 @@ static int ec_GFp_nistp256_point_get_affine_coordinates(
426
557
  fiat_p256_from_generic(z1, &point->Z);
427
558
  fiat_p256_inv_square(z2, z1);
428
559
 
429
- if (x_out != NULL) {
560
+ if (x_out != nullptr) {
430
561
  fiat_p256_felem x;
431
562
  fiat_p256_from_generic(x, &point->X);
432
- fiat_p256_mul(x, x, z2);
563
+ p256_coord_mul(x, x, z2);
433
564
  fiat_p256_to_generic(x_out, x);
434
565
  }
435
566
 
436
- if (y_out != NULL) {
567
+ if (y_out != nullptr) {
437
568
  fiat_p256_felem y;
438
569
  fiat_p256_from_generic(y, &point->Y);
439
- fiat_p256_square(z2, z2); // z^-4
440
- fiat_p256_mul(y, y, z1); // y * z
441
- fiat_p256_mul(y, y, z2); // y * z^-3
570
+ p256_coord_sqr(z2, z2); // z^-4
571
+ p256_coord_mul(y, y, z1); // y * z
572
+ p256_coord_mul(y, y, z2); // y * z^-3
442
573
  fiat_p256_to_generic(y_out, y);
443
574
  }
444
575
 
445
576
  return 1;
446
577
  }
447
578
 
448
- static void ec_GFp_nistp256_add(const EC_GROUP *group, EC_JACOBIAN *r,
449
- const EC_JACOBIAN *a, const EC_JACOBIAN *b) {
450
- fiat_p256_felem x1, y1, z1, x2, y2, z2;
451
- fiat_p256_from_generic(x1, &a->X);
452
- fiat_p256_from_generic(y1, &a->Y);
453
- fiat_p256_from_generic(z1, &a->Z);
454
- fiat_p256_from_generic(x2, &b->X);
455
- fiat_p256_from_generic(y2, &b->Y);
456
- fiat_p256_from_generic(z2, &b->Z);
457
- fiat_p256_point_add(x1, y1, z1, x1, y1, z1, 0 /* both Jacobian */, x2, y2,
458
- z2);
459
- fiat_p256_to_generic(&r->X, x1);
460
- fiat_p256_to_generic(&r->Y, y1);
461
- fiat_p256_to_generic(&r->Z, z1);
462
- }
463
-
464
- static void ec_GFp_nistp256_dbl(const EC_GROUP *group, EC_JACOBIAN *r,
465
- const EC_JACOBIAN *a) {
466
- fiat_p256_felem x, y, z;
467
- fiat_p256_from_generic(x, &a->X);
468
- fiat_p256_from_generic(y, &a->Y);
469
- fiat_p256_from_generic(z, &a->Z);
470
- fiat_p256_point_double(x, y, z, x, y, z);
471
- fiat_p256_to_generic(&r->X, x);
472
- fiat_p256_to_generic(&r->Y, y);
473
- fiat_p256_to_generic(&r->Z, z);
474
- }
475
-
476
- static void ec_GFp_nistp256_point_mul(const EC_GROUP *group, EC_JACOBIAN *r,
477
- const EC_JACOBIAN *p,
478
- const EC_SCALAR *scalar) {
479
- fiat_p256_felem p_pre_comp[17][3];
480
- OPENSSL_memset(&p_pre_comp, 0, sizeof(p_pre_comp));
481
- // Precompute multiples.
482
- fiat_p256_from_generic(p_pre_comp[1][0], &p->X);
483
- fiat_p256_from_generic(p_pre_comp[1][1], &p->Y);
484
- fiat_p256_from_generic(p_pre_comp[1][2], &p->Z);
485
- for (size_t j = 2; j <= 16; ++j) {
486
- if (j & 1) {
487
- fiat_p256_point_add(p_pre_comp[j][0], p_pre_comp[j][1], p_pre_comp[j][2],
488
- p_pre_comp[1][0], p_pre_comp[1][1], p_pre_comp[1][2],
489
- 0, p_pre_comp[j - 1][0], p_pre_comp[j - 1][1],
490
- p_pre_comp[j - 1][2]);
491
- } else {
492
- fiat_p256_point_double(p_pre_comp[j][0], p_pre_comp[j][1],
493
- p_pre_comp[j][2], p_pre_comp[j / 2][0],
494
- p_pre_comp[j / 2][1], p_pre_comp[j / 2][2]);
495
- }
496
- }
497
-
498
- // Set nq to the point at infinity.
499
- fiat_p256_felem nq[3] = {{0}, {0}, {0}}, ftmp, tmp[3];
500
-
501
- // Loop over |scalar| msb-to-lsb, incorporating |p_pre_comp| every 5th round.
502
- int skip = 1; // Save two point operations in the first round.
503
- for (size_t i = 255; i < 256; i--) {
504
- // double
505
- if (!skip) {
506
- fiat_p256_point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
507
- }
508
-
509
- // do other additions every 5 doublings
510
- if (i % 5 == 0) {
511
- crypto_word_t bits = fiat_p256_get_bit(scalar, i + 4) << 5;
512
- bits |= fiat_p256_get_bit(scalar, i + 3) << 4;
513
- bits |= fiat_p256_get_bit(scalar, i + 2) << 3;
514
- bits |= fiat_p256_get_bit(scalar, i + 1) << 2;
515
- bits |= fiat_p256_get_bit(scalar, i) << 1;
516
- bits |= fiat_p256_get_bit(scalar, i - 1);
517
- crypto_word_t sign, digit;
518
- ec_GFp_nistp_recode_scalar_bits(&sign, &digit, bits);
519
-
520
- // select the point to add or subtract, in constant time.
521
- fiat_p256_select_point((fiat_p256_limb_t)digit, 17,
522
- (const fiat_p256_felem(*)[3])p_pre_comp, tmp);
523
- fiat_p256_opp(ftmp, tmp[1]); // (X, -Y, Z) is the negative point.
524
- fiat_p256_cmovznz(tmp[1], (fiat_p256_limb_t)sign, tmp[1], ftmp);
525
-
526
- if (!skip) {
527
- fiat_p256_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2],
528
- 0 /* mixed */, tmp[0], tmp[1], tmp[2]);
529
- } else {
530
- fiat_p256_copy(nq[0], tmp[0]);
531
- fiat_p256_copy(nq[1], tmp[1]);
532
- fiat_p256_copy(nq[2], tmp[2]);
533
- skip = 0;
534
- }
535
- }
536
- }
537
-
538
- fiat_p256_to_generic(&r->X, nq[0]);
539
- fiat_p256_to_generic(&r->Y, nq[1]);
540
- fiat_p256_to_generic(&r->Z, nq[2]);
541
- }
542
-
543
- static void ec_GFp_nistp256_point_mul_base(const EC_GROUP *group,
544
- EC_JACOBIAN *r,
545
- const EC_SCALAR *scalar) {
546
- // Set nq to the point at infinity.
547
- fiat_p256_felem nq[3] = {{0}, {0}, {0}}, tmp[3];
548
-
549
- int skip = 1; // Save two point operations in the first round.
550
- for (size_t i = 31; i < 32; i--) {
551
- if (!skip) {
552
- fiat_p256_point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
553
- }
554
-
555
- // First, look 32 bits upwards.
556
- crypto_word_t bits = fiat_p256_get_bit(scalar, i + 224) << 3;
557
- bits |= fiat_p256_get_bit(scalar, i + 160) << 2;
558
- bits |= fiat_p256_get_bit(scalar, i + 96) << 1;
559
- bits |= fiat_p256_get_bit(scalar, i + 32);
560
- // Select the point to add, in constant time.
561
- fiat_p256_select_point_affine((fiat_p256_limb_t)bits, 15,
562
- fiat_p256_g_pre_comp[1], tmp);
563
-
564
- if (!skip) {
565
- fiat_p256_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2],
566
- 1 /* mixed */, tmp[0], tmp[1], tmp[2]);
567
- } else {
568
- fiat_p256_copy(nq[0], tmp[0]);
569
- fiat_p256_copy(nq[1], tmp[1]);
570
- fiat_p256_copy(nq[2], tmp[2]);
571
- skip = 0;
572
- }
573
-
574
- // Second, look at the current position.
575
- bits = fiat_p256_get_bit(scalar, i + 192) << 3;
576
- bits |= fiat_p256_get_bit(scalar, i + 128) << 2;
577
- bits |= fiat_p256_get_bit(scalar, i + 64) << 1;
578
- bits |= fiat_p256_get_bit(scalar, i);
579
- // Select the point to add, in constant time.
580
- fiat_p256_select_point_affine((fiat_p256_limb_t)bits, 15,
581
- fiat_p256_g_pre_comp[0], tmp);
582
- fiat_p256_point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
583
- tmp[0], tmp[1], tmp[2]);
584
- }
585
-
586
- fiat_p256_to_generic(&r->X, nq[0]);
587
- fiat_p256_to_generic(&r->Y, nq[1]);
588
- fiat_p256_to_generic(&r->Z, nq[2]);
589
- }
590
-
591
- static void ec_GFp_nistp256_point_mul_public(const EC_GROUP *group,
592
- EC_JACOBIAN *r,
593
- const EC_SCALAR *g_scalar,
594
- const EC_JACOBIAN *p,
595
- const EC_SCALAR *p_scalar) {
596
- #define P256_WSIZE_PUBLIC 4
597
- // Precompute multiples of |p|. p_pre_comp[i] is (2*i+1) * |p|.
598
- fiat_p256_felem p_pre_comp[1 << (P256_WSIZE_PUBLIC - 1)][3];
599
- fiat_p256_from_generic(p_pre_comp[0][0], &p->X);
600
- fiat_p256_from_generic(p_pre_comp[0][1], &p->Y);
601
- fiat_p256_from_generic(p_pre_comp[0][2], &p->Z);
602
- fiat_p256_felem p2[3];
603
- fiat_p256_point_double(p2[0], p2[1], p2[2], p_pre_comp[0][0],
604
- p_pre_comp[0][1], p_pre_comp[0][2]);
605
- for (size_t i = 1; i < OPENSSL_ARRAY_SIZE(p_pre_comp); i++) {
606
- fiat_p256_point_add(p_pre_comp[i][0], p_pre_comp[i][1], p_pre_comp[i][2],
607
- p_pre_comp[i - 1][0], p_pre_comp[i - 1][1],
608
- p_pre_comp[i - 1][2], 0 /* not mixed */, p2[0], p2[1],
609
- p2[2]);
610
- }
611
-
612
- // Set up the coefficients for |p_scalar|.
613
- int8_t p_wNAF[257];
614
- ec_compute_wNAF(group, p_wNAF, p_scalar, 256, P256_WSIZE_PUBLIC);
615
-
616
- // Set |ret| to the point at infinity.
617
- int skip = 1; // Save some point operations.
618
- fiat_p256_felem ret[3] = {{0}, {0}, {0}};
619
- for (int i = 256; i >= 0; i--) {
620
- if (!skip) {
621
- fiat_p256_point_double(ret[0], ret[1], ret[2], ret[0], ret[1], ret[2]);
622
- }
623
-
624
- // For the |g_scalar|, we use the precomputed table without the
625
- // constant-time lookup.
626
- if (i <= 31) {
627
- // First, look 32 bits upwards.
628
- crypto_word_t bits = fiat_p256_get_bit(g_scalar, i + 224) << 3;
629
- bits |= fiat_p256_get_bit(g_scalar, i + 160) << 2;
630
- bits |= fiat_p256_get_bit(g_scalar, i + 96) << 1;
631
- bits |= fiat_p256_get_bit(g_scalar, i + 32);
632
- if (bits != 0) {
633
- size_t index = (size_t)(bits - 1);
634
- fiat_p256_point_add(ret[0], ret[1], ret[2], ret[0], ret[1], ret[2],
635
- 1 /* mixed */, fiat_p256_g_pre_comp[1][index][0],
636
- fiat_p256_g_pre_comp[1][index][1],
637
- fiat_p256_one);
638
- skip = 0;
639
- }
640
-
641
- // Second, look at the current position.
642
- bits = fiat_p256_get_bit(g_scalar, i + 192) << 3;
643
- bits |= fiat_p256_get_bit(g_scalar, i + 128) << 2;
644
- bits |= fiat_p256_get_bit(g_scalar, i + 64) << 1;
645
- bits |= fiat_p256_get_bit(g_scalar, i);
646
- if (bits != 0) {
647
- size_t index = (size_t)(bits - 1);
648
- fiat_p256_point_add(ret[0], ret[1], ret[2], ret[0], ret[1], ret[2],
649
- 1 /* mixed */, fiat_p256_g_pre_comp[0][index][0],
650
- fiat_p256_g_pre_comp[0][index][1],
651
- fiat_p256_one);
652
- skip = 0;
653
- }
654
- }
655
-
656
- int digit = p_wNAF[i];
657
- if (digit != 0) {
658
- assert(digit & 1);
659
- size_t idx = (size_t)(digit < 0 ? (-digit) >> 1 : digit >> 1);
660
- fiat_p256_felem *y = &p_pre_comp[idx][1], tmp;
661
- if (digit < 0) {
662
- fiat_p256_opp(tmp, p_pre_comp[idx][1]);
663
- y = &tmp;
664
- }
665
- if (!skip) {
666
- fiat_p256_point_add(ret[0], ret[1], ret[2], ret[0], ret[1], ret[2],
667
- 0 /* not mixed */, p_pre_comp[idx][0], *y,
668
- p_pre_comp[idx][2]);
669
- } else {
670
- fiat_p256_copy(ret[0], p_pre_comp[idx][0]);
671
- fiat_p256_copy(ret[1], *y);
672
- fiat_p256_copy(ret[2], p_pre_comp[idx][2]);
673
- skip = 0;
674
- }
675
- }
676
- }
677
-
678
- fiat_p256_to_generic(&r->X, ret[0]);
679
- fiat_p256_to_generic(&r->Y, ret[1]);
680
- fiat_p256_to_generic(&r->Z, ret[2]);
681
- }
682
-
683
579
  static int ec_GFp_nistp256_cmp_x_coordinate(const EC_GROUP *group,
684
580
  const EC_JACOBIAN *p,
685
581
  const EC_SCALAR *r) {
@@ -692,11 +588,11 @@ static int ec_GFp_nistp256_cmp_x_coordinate(const EC_GROUP *group,
692
588
  // not.
693
589
  fiat_p256_felem Z2_mont;
694
590
  fiat_p256_from_generic(Z2_mont, &p->Z);
695
- fiat_p256_mul(Z2_mont, Z2_mont, Z2_mont);
591
+ p256_coord_mul(Z2_mont, Z2_mont, Z2_mont);
696
592
 
697
593
  fiat_p256_felem r_Z2;
698
- fiat_p256_from_words(r_Z2, r->words); // r < order < p, so this is valid.
699
- fiat_p256_mul(r_Z2, r_Z2, Z2_mont);
594
+ OPENSSL_memcpy(r_Z2, r->words, 32); // r < order < p, so this is valid.
595
+ p256_coord_mul(r_Z2, r_Z2, Z2_mont);
700
596
 
701
597
  fiat_p256_felem X;
702
598
  fiat_p256_from_generic(X, &p->X);
@@ -708,7 +604,7 @@ static int ec_GFp_nistp256_cmp_x_coordinate(const EC_GROUP *group,
708
604
 
709
605
  // During signing the x coefficient is reduced modulo the group order.
710
606
  // Therefore there is a small possibility, less than 1/2^128, that group_order
711
- // < p.x < P. in that case we need not only to compare against |r| but also to
607
+ // < p.x < P. in that case we need not only to compare against `r` but also to
712
608
  // compare against r+group_order.
713
609
  assert(group->field.N.width == group->order.N.width);
714
610
  EC_FELEM tmp;
@@ -717,7 +613,7 @@ static int ec_GFp_nistp256_cmp_x_coordinate(const EC_GROUP *group,
717
613
  if (carry == 0 &&
718
614
  bn_less_than_words(tmp.words, group->field.N.d, group->field.N.width)) {
719
615
  fiat_p256_from_generic(r_Z2, &tmp);
720
- fiat_p256_mul(r_Z2, r_Z2, Z2_mont);
616
+ p256_coord_mul(r_Z2, r_Z2, Z2_mont);
721
617
  if (OPENSSL_memcmp(&r_Z2, &X, sizeof(r_Z2)) == 0) {
722
618
  return 1;
723
619
  }
@@ -726,6 +622,58 @@ static int ec_GFp_nistp256_cmp_x_coordinate(const EC_GROUP *group,
726
622
  return 0;
727
623
  }
728
624
 
625
+ static void ec_GFp_nistp256_point_mul(const EC_GROUP *group, EC_JACOBIAN *r,
626
+ const EC_JACOBIAN *p,
627
+ const EC_SCALAR *scalar) {
628
+ fiat_p256_felem t[3];
629
+ fiat_p256_from_generic(t[0], &p->X);
630
+ fiat_p256_from_generic(t[1], &p->Y);
631
+ fiat_p256_from_generic(t[2], &p->Z);
632
+ p256_point_mul(t, t, (uint8_t *)scalar->words);
633
+
634
+ fiat_p256_to_generic(&r->X, t[0]);
635
+ fiat_p256_to_generic(&r->Y, t[1]);
636
+ fiat_p256_to_generic(&r->Z, t[2]);
637
+ }
638
+
639
+ static void ec_GFp_nistp256_point_mul_base(const EC_GROUP *group,
640
+ EC_JACOBIAN *r, const EC_SCALAR *s) {
641
+ alignas(32) fiat_p256_felem ret[3];
642
+ p256_point_mul_base(ret, (uint8_t *)s->words);
643
+ fiat_p256_to_generic(&r->X, ret[0]);
644
+ fiat_p256_to_generic(&r->Y, ret[1]);
645
+ fiat_p256_to_generic(&r->Z, ret[2]);
646
+ }
647
+
648
+ static void ec_GFp_nistp256_add(const EC_GROUP *group, EC_JACOBIAN *r,
649
+ const EC_JACOBIAN *a, const EC_JACOBIAN *b) {
650
+ fiat_p256_felem p[3], q[3];
651
+ fiat_p256_from_generic(p[0], &a->X);
652
+ fiat_p256_from_generic(p[1], &a->Y);
653
+ fiat_p256_from_generic(p[2], &a->Z);
654
+ fiat_p256_from_generic(q[0], &b->X);
655
+ fiat_p256_from_generic(q[1], &b->Y);
656
+ fiat_p256_from_generic(q[2], &b->Z);
657
+ p256_point_add_vartime_if_doubling((uintptr_t)p, (uintptr_t)p, (uintptr_t)q);
658
+ fiat_p256_to_generic(&r->X, p[0]);
659
+ fiat_p256_to_generic(&r->Y, p[1]);
660
+ fiat_p256_to_generic(&r->Z, p[2]);
661
+ }
662
+
663
+ static void ec_GFp_nistp256_dbl(const EC_GROUP *group, EC_JACOBIAN *r,
664
+ const EC_JACOBIAN *a) {
665
+ fiat_p256_felem p[3];
666
+ fiat_p256_from_generic(p[0], &a->X);
667
+ fiat_p256_from_generic(p[1], &a->Y);
668
+ fiat_p256_from_generic(p[2], &a->Z);
669
+ p256_point_double((uintptr_t)p, (uintptr_t)p);
670
+ fiat_p256_to_generic(&r->X, p[0]);
671
+ fiat_p256_to_generic(&r->Y, p[1]);
672
+ fiat_p256_to_generic(&r->Z, p[2]);
673
+ }
674
+
675
+ BSSL_NAMESPACE_BEGIN
676
+
729
677
  DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistp256_method) {
730
678
  out->point_get_affine_coordinates =
731
679
  ec_GFp_nistp256_point_get_affine_coordinates;
@@ -734,16 +682,9 @@ DEFINE_METHOD_FUNCTION(EC_METHOD, EC_GFp_nistp256_method) {
734
682
  out->mul = ec_GFp_nistp256_point_mul;
735
683
  out->mul_base = ec_GFp_nistp256_point_mul_base;
736
684
  out->mul_public = ec_GFp_nistp256_point_mul_public;
737
- out->felem_mul = ec_GFp_mont_felem_mul;
738
- out->felem_sqr = ec_GFp_mont_felem_sqr;
739
- out->felem_to_bytes = ec_GFp_mont_felem_to_bytes;
740
- out->felem_from_bytes = ec_GFp_mont_felem_from_bytes;
741
- out->felem_reduce = ec_GFp_mont_felem_reduce;
742
- // TODO(davidben): This should use the specialized field arithmetic
743
- // implementation, rather than the generic one.
744
- out->felem_exp = ec_GFp_mont_felem_exp;
745
- out->scalar_inv0_montgomery = ec_simple_scalar_inv0_montgomery;
746
- out->scalar_to_montgomery_inv_vartime =
747
- ec_simple_scalar_to_montgomery_inv_vartime;
685
+ out->scalar_inv0_montgomery = p256_order_inv0;
686
+ out->scalar_to_montgomery_inv_vartime = p256_order_mont_inv_vartime;
748
687
  out->cmp_x_coordinate = ec_GFp_nistp256_cmp_x_coordinate;
749
688
  }
689
+
690
+ BSSL_NAMESPACE_END