grpc 1.55.3 → 1.56.0.pre3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (385) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -70
  3. data/include/grpc/event_engine/event_engine.h +4 -3
  4. data/include/grpc/grpc_audit_logging.h +96 -0
  5. data/include/grpc/module.modulemap +2 -0
  6. data/include/grpc/support/json.h +218 -0
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  9. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +82 -98
  11. data/src/core/ext/filters/client_channel/client_channel.h +4 -0
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
  14. data/src/core/ext/filters/client_channel/config_selector.h +9 -24
  15. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  31. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  40. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
  41. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
  43. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  45. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
  46. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  47. data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
  48. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
  50. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
  51. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  52. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
  53. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  55. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +543 -567
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +9 -150
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +32 -46
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +5 -18
  59. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  60. data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
  61. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  62. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  63. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  64. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  65. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  66. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  67. data/src/core/ext/xds/xds_api.cc +9 -6
  68. data/src/core/ext/xds/xds_api.h +3 -2
  69. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  70. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  71. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  72. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  73. data/src/core/ext/xds/xds_client.cc +5 -4
  74. data/src/core/ext/xds/xds_client_stats.h +1 -1
  75. data/src/core/ext/xds/xds_cluster.cc +20 -19
  76. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  77. data/src/core/ext/xds/xds_common_types.cc +3 -1
  78. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  79. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  80. data/src/core/ext/xds/xds_http_filters.h +4 -2
  81. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  82. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  83. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  84. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  85. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  86. data/src/core/ext/xds/xds_listener.cc +1 -0
  87. data/src/core/ext/xds/xds_route_config.cc +40 -3
  88. data/src/core/ext/xds/xds_routing.cc +2 -2
  89. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  90. data/src/core/lib/avl/avl.h +5 -0
  91. data/src/core/lib/backoff/random_early_detection.h +0 -5
  92. data/src/core/lib/channel/channel_args.cc +80 -22
  93. data/src/core/lib/channel/channel_args.h +34 -1
  94. data/src/core/lib/channel/channel_trace.cc +16 -12
  95. data/src/core/lib/channel/channelz.cc +159 -132
  96. data/src/core/lib/channel/channelz.h +42 -35
  97. data/src/core/lib/channel/channelz_registry.cc +23 -20
  98. data/src/core/lib/channel/connected_channel.cc +17 -6
  99. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  100. data/src/core/lib/channel/promise_based_filter.h +2 -0
  101. data/src/core/lib/compression/compression_internal.cc +2 -5
  102. data/src/core/lib/config/config_vars.cc +20 -18
  103. data/src/core/lib/config/config_vars.h +4 -4
  104. data/src/core/lib/config/load_config.cc +13 -0
  105. data/src/core/lib/config/load_config.h +6 -0
  106. data/src/core/lib/debug/event_log.h +1 -1
  107. data/src/core/lib/debug/stats_data.h +1 -1
  108. data/src/core/lib/debug/trace.cc +24 -55
  109. data/src/core/lib/debug/trace.h +3 -1
  110. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  111. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  112. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  113. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  114. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  115. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  116. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  117. data/src/core/lib/event_engine/poller.h +2 -2
  118. data/src/core/lib/event_engine/posix.h +4 -0
  119. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  120. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  121. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  122. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +3 -2
  123. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -2
  124. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -33
  125. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -11
  126. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  127. data/src/core/lib/event_engine/shim.cc +7 -1
  128. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  129. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  130. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  131. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  132. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  133. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  134. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  136. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  137. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  138. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  139. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  140. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  141. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  142. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  143. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  144. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  145. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  146. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  147. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  148. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  149. data/src/core/lib/experiments/config.cc +38 -7
  150. data/src/core/lib/experiments/config.h +16 -0
  151. data/src/core/lib/experiments/experiments.cc +67 -20
  152. data/src/core/lib/experiments/experiments.h +27 -21
  153. data/src/core/lib/gpr/log_internal.h +55 -0
  154. data/src/core/lib/gprpp/crash.cc +10 -0
  155. data/src/core/lib/gprpp/crash.h +3 -0
  156. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  157. data/src/core/lib/gprpp/per_cpu.h +29 -6
  158. data/src/core/lib/gprpp/time.cc +1 -0
  159. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  160. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  161. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  162. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  163. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  164. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  165. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  166. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  167. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  168. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  169. data/src/core/lib/iomgr/socket_windows.h +9 -2
  170. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  171. data/src/core/lib/iomgr/tcp_server_posix.cc +156 -140
  172. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -13
  173. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +0 -21
  174. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  175. data/src/core/lib/json/json.h +2 -166
  176. data/src/core/lib/json/json_object_loader.cc +8 -9
  177. data/src/core/lib/json/json_object_loader.h +25 -18
  178. data/src/core/lib/json/json_reader.cc +13 -6
  179. data/src/core/lib/json/json_util.cc +6 -11
  180. data/src/core/lib/json/json_writer.cc +7 -8
  181. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  182. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  183. data/src/core/lib/matchers/matchers.cc +3 -4
  184. data/src/core/lib/matchers/matchers.h +2 -1
  185. data/src/core/lib/promise/activity.cc +5 -0
  186. data/src/core/lib/promise/activity.h +10 -0
  187. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  188. data/src/core/lib/promise/party.cc +31 -13
  189. data/src/core/lib/promise/party.h +11 -2
  190. data/src/core/lib/promise/pipe.h +9 -2
  191. data/src/core/lib/promise/prioritized_race.h +95 -0
  192. data/src/core/lib/promise/sleep.cc +2 -1
  193. data/src/core/lib/resolver/server_address.cc +0 -8
  194. data/src/core/lib/resolver/server_address.h +0 -6
  195. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  196. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  197. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  198. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  199. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  200. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  201. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  202. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  203. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  204. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  205. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  206. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  207. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  208. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  209. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  210. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  211. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  212. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  213. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  214. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  215. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  216. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  217. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  218. data/src/core/lib/security/util/json_util.cc +1 -0
  219. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  220. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  221. data/src/core/lib/surface/call.cc +38 -23
  222. data/src/core/lib/surface/completion_queue.cc +6 -2
  223. data/src/core/lib/surface/validate_metadata.cc +22 -37
  224. data/src/core/lib/surface/validate_metadata.h +3 -13
  225. data/src/core/lib/surface/version.cc +2 -2
  226. data/src/core/lib/transport/batch_builder.cc +15 -12
  227. data/src/core/lib/transport/batch_builder.h +39 -35
  228. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  229. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  230. data/src/ruby/ext/grpc/extconf.rb +8 -9
  231. data/src/ruby/lib/grpc/version.rb +1 -1
  232. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  233. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  234. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  235. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  236. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  237. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  238. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  239. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  240. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  241. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  242. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  243. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  244. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  245. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  246. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  248. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  249. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  250. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  251. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  252. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  253. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  254. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  271. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  288. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  289. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  290. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  291. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  292. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  293. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  294. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  295. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  296. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  297. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  298. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  299. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  300. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  301. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  302. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  303. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  304. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  305. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  306. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  307. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  309. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  310. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  311. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  312. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  313. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  314. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  315. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  316. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  317. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  318. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  319. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  320. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  321. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  322. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  323. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  324. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  325. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  326. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  327. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  328. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  329. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  330. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  331. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  332. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  333. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  334. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  335. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  336. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  337. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  338. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  339. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  340. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  341. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  342. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  343. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  344. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  345. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  346. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  347. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  348. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  349. data/third_party/cares/cares/include/ares.h +23 -1
  350. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  351. data/third_party/cares/cares/include/ares_rules.h +2 -2
  352. data/third_party/cares/cares/include/ares_version.h +3 -3
  353. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  354. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  355. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  356. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  357. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  358. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  359. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  360. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  361. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  362. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  363. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  364. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  365. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  366. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  367. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  368. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  369. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  370. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  371. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  372. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  373. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  374. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  375. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  376. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  377. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  378. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  379. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  380. metadata +50 -16
  381. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  382. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  383. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +0 -176
  384. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +0 -325
  385. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -53,6 +53,7 @@
53
53
 
54
54
  #include <openssl/aes.h>
55
55
 
56
+ #include <assert.h>
56
57
  #include <stdlib.h>
57
58
  #include <string.h>
58
59
 
@@ -75,6 +76,20 @@ extern "C" {
75
76
  typedef void (*block128_f)(const uint8_t in[16], uint8_t out[16],
76
77
  const AES_KEY *key);
77
78
 
79
+ OPENSSL_INLINE void CRYPTO_xor16(uint8_t out[16], const uint8_t a[16],
80
+ const uint8_t b[16]) {
81
+ // TODO(davidben): Ideally we'd leave this to the compiler, which could use
82
+ // vector registers, etc. But the compiler doesn't know that |in| and |out|
83
+ // cannot partially alias. |restrict| is slightly two strict (we allow exact
84
+ // aliasing), but perhaps in-place could be a separate function?
85
+ static_assert(16 % sizeof(crypto_word_t) == 0,
86
+ "block cannot be evenly divided into words");
87
+ for (size_t i = 0; i < 16; i += sizeof(crypto_word_t)) {
88
+ CRYPTO_store_word_le(
89
+ out + i, CRYPTO_load_word_le(a + i) ^ CRYPTO_load_word_le(b + i));
90
+ }
91
+ }
92
+
78
93
 
79
94
  // CTR.
80
95
 
@@ -115,21 +130,19 @@ typedef struct { uint64_t hi,lo; } u128;
115
130
 
116
131
  // gmult_func multiplies |Xi| by the GCM key and writes the result back to
117
132
  // |Xi|.
118
- typedef void (*gmult_func)(uint64_t Xi[2], const u128 Htable[16]);
133
+ typedef void (*gmult_func)(uint8_t Xi[16], const u128 Htable[16]);
119
134
 
120
135
  // ghash_func repeatedly multiplies |Xi| by the GCM key and adds in blocks from
121
136
  // |inp|. The result is written back to |Xi| and the |len| argument must be a
122
137
  // multiple of 16.
123
- typedef void (*ghash_func)(uint64_t Xi[2], const u128 Htable[16],
138
+ typedef void (*ghash_func)(uint8_t Xi[16], const u128 Htable[16],
124
139
  const uint8_t *inp, size_t len);
125
140
 
126
141
  typedef struct gcm128_key_st {
127
- // Note the MOVBE-based, x86-64, GHASH assembly requires |H| and |Htable| to
128
- // be the first two elements of this struct. Additionally, some assembly
129
- // routines require a 16-byte-aligned |Htable| when hashing data, but not
142
+ // |gcm_*_ssse3| require a 16-byte-aligned |Htable| when hashing data, but not
130
143
  // initialization. |GCM128_KEY| is not itself aligned to simplify embedding in
131
144
  // |EVP_AEAD_CTX|, but |Htable|'s offset must be a multiple of 16.
132
- u128 H;
145
+ // TODO(crbug.com/boringssl/604): Revisit this.
133
146
  u128 Htable[16];
134
147
  gmult_func gmult;
135
148
  ghash_func ghash;
@@ -145,17 +158,17 @@ typedef struct gcm128_key_st {
145
158
  // should be zero-initialized before use.
146
159
  typedef struct {
147
160
  // The following 5 names follow names in GCM specification
148
- union {
149
- uint64_t u[2];
150
- uint32_t d[4];
151
- uint8_t c[16];
152
- crypto_word_t t[16 / sizeof(crypto_word_t)];
153
- } Yi, EKi, EK0, len, Xi;
154
-
155
- // Note that the order of |Xi| and |gcm_key| is fixed by the MOVBE-based,
156
- // x86-64, GHASH assembly. Additionally, some assembly routines require
157
- // |gcm_key| to be 16-byte aligned. |GCM128_KEY| is not itself aligned to
158
- // simplify embedding in |EVP_AEAD_CTX|.
161
+ uint8_t Yi[16];
162
+ uint8_t EKi[16];
163
+ uint8_t EK0[16];
164
+ struct {
165
+ uint64_t aad;
166
+ uint64_t msg;
167
+ } len;
168
+ uint8_t Xi[16];
169
+
170
+ // |gcm_*_ssse3| require |Htable| to be 16-byte-aligned.
171
+ // TODO(crbug.com/boringssl/604): Revisit this.
159
172
  alignas(16) GCM128_KEY gcm_key;
160
173
 
161
174
  unsigned mres, ares;
@@ -172,7 +185,7 @@ int crypto_gcm_clmul_enabled(void);
172
185
  // accelerated) functions for performing operations in the GHASH field. If the
173
186
  // AVX implementation was used |*out_is_avx| will be true.
174
187
  void CRYPTO_ghash_init(gmult_func *out_mult, ghash_func *out_hash,
175
- u128 *out_key, u128 out_table[16], int *out_is_avx,
188
+ u128 out_table[16], int *out_is_avx,
176
189
  const uint8_t gcm_key[16]);
177
190
 
178
191
  // CRYPTO_gcm128_init_key initialises |gcm_key| to use |block| (typically AES)
@@ -240,8 +253,8 @@ OPENSSL_EXPORT void CRYPTO_gcm128_tag(GCM128_CONTEXT *ctx, uint8_t *tag,
240
253
  // GCM assembly.
241
254
 
242
255
  void gcm_init_nohw(u128 Htable[16], const uint64_t H[2]);
243
- void gcm_gmult_nohw(uint64_t Xi[2], const u128 Htable[16]);
244
- void gcm_ghash_nohw(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
256
+ void gcm_gmult_nohw(uint8_t Xi[16], const u128 Htable[16]);
257
+ void gcm_ghash_nohw(uint8_t Xi[16], const u128 Htable[16], const uint8_t *inp,
245
258
  size_t len);
246
259
 
247
260
  #if !defined(OPENSSL_NO_ASM)
@@ -249,29 +262,31 @@ void gcm_ghash_nohw(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
249
262
  #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
250
263
  #define GCM_FUNCREF
251
264
  void gcm_init_clmul(u128 Htable[16], const uint64_t Xi[2]);
252
- void gcm_gmult_clmul(uint64_t Xi[2], const u128 Htable[16]);
253
- void gcm_ghash_clmul(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
265
+ void gcm_gmult_clmul(uint8_t Xi[16], const u128 Htable[16]);
266
+ void gcm_ghash_clmul(uint8_t Xi[16], const u128 Htable[16], const uint8_t *inp,
254
267
  size_t len);
255
268
 
256
269
  // |gcm_gmult_ssse3| and |gcm_ghash_ssse3| require |Htable| to be
257
270
  // 16-byte-aligned, but |gcm_init_ssse3| does not.
258
271
  void gcm_init_ssse3(u128 Htable[16], const uint64_t Xi[2]);
259
- void gcm_gmult_ssse3(uint64_t Xi[2], const u128 Htable[16]);
260
- void gcm_ghash_ssse3(uint64_t Xi[2], const u128 Htable[16], const uint8_t *in,
272
+ void gcm_gmult_ssse3(uint8_t Xi[16], const u128 Htable[16]);
273
+ void gcm_ghash_ssse3(uint8_t Xi[16], const u128 Htable[16], const uint8_t *in,
261
274
  size_t len);
262
275
 
263
276
  #if defined(OPENSSL_X86_64)
264
277
  #define GHASH_ASM_X86_64
265
278
  void gcm_init_avx(u128 Htable[16], const uint64_t Xi[2]);
266
- void gcm_gmult_avx(uint64_t Xi[2], const u128 Htable[16]);
267
- void gcm_ghash_avx(uint64_t Xi[2], const u128 Htable[16], const uint8_t *in,
279
+ void gcm_gmult_avx(uint8_t Xi[16], const u128 Htable[16]);
280
+ void gcm_ghash_avx(uint8_t Xi[16], const u128 Htable[16], const uint8_t *in,
268
281
  size_t len);
269
282
 
270
283
  #define HW_GCM
271
284
  size_t aesni_gcm_encrypt(const uint8_t *in, uint8_t *out, size_t len,
272
- const AES_KEY *key, uint8_t ivec[16], uint64_t *Xi);
285
+ const AES_KEY *key, uint8_t ivec[16],
286
+ const u128 Htable[16], uint8_t Xi[16]);
273
287
  size_t aesni_gcm_decrypt(const uint8_t *in, uint8_t *out, size_t len,
274
- const AES_KEY *key, uint8_t ivec[16], uint64_t *Xi);
288
+ const AES_KEY *key, uint8_t ivec[16],
289
+ const u128 Htable[16], uint8_t Xi[16]);
275
290
  #endif // OPENSSL_X86_64
276
291
 
277
292
  #if defined(OPENSSL_X86)
@@ -287,25 +302,27 @@ OPENSSL_INLINE int gcm_pmull_capable(void) {
287
302
  return CRYPTO_is_ARMv8_PMULL_capable();
288
303
  }
289
304
 
290
- void gcm_init_v8(u128 Htable[16], const uint64_t Xi[2]);
291
- void gcm_gmult_v8(uint64_t Xi[2], const u128 Htable[16]);
292
- void gcm_ghash_v8(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
305
+ void gcm_init_v8(u128 Htable[16], const uint64_t H[2]);
306
+ void gcm_gmult_v8(uint8_t Xi[16], const u128 Htable[16]);
307
+ void gcm_ghash_v8(uint8_t Xi[16], const u128 Htable[16], const uint8_t *inp,
293
308
  size_t len);
294
309
 
295
310
  OPENSSL_INLINE int gcm_neon_capable(void) { return CRYPTO_is_NEON_capable(); }
296
311
 
297
- void gcm_init_neon(u128 Htable[16], const uint64_t Xi[2]);
298
- void gcm_gmult_neon(uint64_t Xi[2], const u128 Htable[16]);
299
- void gcm_ghash_neon(uint64_t Xi[2], const u128 Htable[16], const uint8_t *inp,
312
+ void gcm_init_neon(u128 Htable[16], const uint64_t H[2]);
313
+ void gcm_gmult_neon(uint8_t Xi[16], const u128 Htable[16]);
314
+ void gcm_ghash_neon(uint8_t Xi[16], const u128 Htable[16], const uint8_t *inp,
300
315
  size_t len);
301
316
 
302
317
  #if defined(OPENSSL_AARCH64)
303
318
  #define HW_GCM
304
319
  // These functions are defined in aesv8-gcm-armv8.pl.
305
320
  void aes_gcm_enc_kernel(const uint8_t *in, uint64_t in_bits, void *out,
306
- void *Xi, uint8_t *ivec, const AES_KEY *key);
321
+ void *Xi, uint8_t *ivec, const AES_KEY *key,
322
+ const u128 Htable[16]);
307
323
  void aes_gcm_dec_kernel(const uint8_t *in, uint64_t in_bits, void *out,
308
- void *Xi, uint8_t *ivec, const AES_KEY *key);
324
+ void *Xi, uint8_t *ivec, const AES_KEY *key,
325
+ const u128 Htable[16]);
309
326
  #endif
310
327
 
311
328
  #endif
@@ -380,19 +397,12 @@ size_t CRYPTO_cts128_encrypt_block(const uint8_t *in, uint8_t *out, size_t len,
380
397
  //
381
398
  // POLYVAL is a polynomial authenticator that operates over a field very
382
399
  // similar to the one that GHASH uses. See
383
- // https://tools.ietf.org/html/draft-irtf-cfrg-gcmsiv-02#section-3.
384
-
385
- typedef union {
386
- uint64_t u[2];
387
- uint8_t c[16];
388
- } polyval_block;
400
+ // https://www.rfc-editor.org/rfc/rfc8452.html#section-3.
389
401
 
390
402
  struct polyval_ctx {
391
- // Note that the order of |S|, |H| and |Htable| is fixed by the MOVBE-based,
392
- // x86-64, GHASH assembly. Additionally, some assembly routines require
393
- // |Htable| to be 16-byte aligned.
394
- polyval_block S;
395
- u128 H;
403
+ uint8_t S[16];
404
+ // |gcm_*_ssse3| require |Htable| to be 16-byte-aligned.
405
+ // TODO(crbug.com/boringssl/604): Revisit this.
396
406
  alignas(16) u128 Htable[16];
397
407
  gmult_func gmult;
398
408
  ghash_func ghash;
@@ -70,14 +70,7 @@ void CRYPTO_ofb128_encrypt(const uint8_t *in, uint8_t *out, size_t len,
70
70
 
71
71
  while (len >= 16) {
72
72
  (*block)(ivec, ivec, key);
73
- for (; n < 16; n += sizeof(size_t)) {
74
- size_t a, b;
75
- OPENSSL_memcpy(&a, in + n, sizeof(size_t));
76
- OPENSSL_memcpy(&b, ivec + n, sizeof(size_t));
77
-
78
- const size_t c = a ^ b;
79
- OPENSSL_memcpy(out + n, &c, sizeof(size_t));
80
- }
73
+ CRYPTO_xor16(out, in, ivec);
81
74
  len -= 16;
82
75
  out += 16;
83
76
  in += 16;
@@ -22,70 +22,69 @@
22
22
 
23
23
 
24
24
  // byte_reverse reverses the order of the bytes in |b->c|.
25
- static void byte_reverse(polyval_block *b) {
26
- const uint64_t t = CRYPTO_bswap8(b->u[0]);
27
- b->u[0] = CRYPTO_bswap8(b->u[1]);
28
- b->u[1] = t;
25
+ static void byte_reverse(uint8_t b[16]) {
26
+ uint64_t hi = CRYPTO_load_u64_le(b);
27
+ uint64_t lo = CRYPTO_load_u64_le(b + 8);
28
+ CRYPTO_store_u64_le(b, CRYPTO_bswap8(lo));
29
+ CRYPTO_store_u64_le(b + 8, CRYPTO_bswap8(hi));
29
30
  }
30
31
 
31
- // reverse_and_mulX_ghash interprets the bytes |b->c| as a reversed element of
32
- // the GHASH field, multiplies that by 'x' and serialises the result back into
33
- // |b|, but with GHASH's backwards bit ordering.
34
- static void reverse_and_mulX_ghash(polyval_block *b) {
35
- uint64_t hi = b->u[0];
36
- uint64_t lo = b->u[1];
32
+ // reverse_and_mulX_ghash interprets |b| as a reversed element of the GHASH
33
+ // field, multiplies that by 'x' and serialises the result back into |b|, but
34
+ // with GHASH's backwards bit ordering.
35
+ static void reverse_and_mulX_ghash(uint8_t b[16]) {
36
+ uint64_t hi = CRYPTO_load_u64_le(b);
37
+ uint64_t lo = CRYPTO_load_u64_le(b + 8);
37
38
  const crypto_word_t carry = constant_time_eq_w(hi & 1, 1);
38
39
  hi >>= 1;
39
40
  hi |= lo << 63;
40
41
  lo >>= 1;
41
42
  lo ^= ((uint64_t) constant_time_select_w(carry, 0xe1, 0)) << 56;
42
43
 
43
- b->u[0] = CRYPTO_bswap8(lo);
44
- b->u[1] = CRYPTO_bswap8(hi);
44
+ CRYPTO_store_u64_le(b, CRYPTO_bswap8(lo));
45
+ CRYPTO_store_u64_le(b + 8, CRYPTO_bswap8(hi));
45
46
  }
46
47
 
47
48
  // POLYVAL(H, X_1, ..., X_n) =
48
49
  // ByteReverse(GHASH(mulX_GHASH(ByteReverse(H)), ByteReverse(X_1), ...,
49
50
  // ByteReverse(X_n))).
50
51
  //
51
- // See https://tools.ietf.org/html/draft-irtf-cfrg-gcmsiv-02#appendix-A.
52
+ // See https://www.rfc-editor.org/rfc/rfc8452.html#appendix-A.
52
53
 
53
54
  void CRYPTO_POLYVAL_init(struct polyval_ctx *ctx, const uint8_t key[16]) {
54
- polyval_block H;
55
- OPENSSL_memcpy(H.c, key, 16);
56
- reverse_and_mulX_ghash(&H);
55
+ alignas(8) uint8_t H[16];
56
+ OPENSSL_memcpy(H, key, 16);
57
+ reverse_and_mulX_ghash(H);
57
58
 
58
59
  int is_avx;
59
- CRYPTO_ghash_init(&ctx->gmult, &ctx->ghash, &ctx->H, ctx->Htable, &is_avx,
60
- H.c);
60
+ CRYPTO_ghash_init(&ctx->gmult, &ctx->ghash, ctx->Htable, &is_avx, H);
61
61
  OPENSSL_memset(&ctx->S, 0, sizeof(ctx->S));
62
62
  }
63
63
 
64
64
  void CRYPTO_POLYVAL_update_blocks(struct polyval_ctx *ctx, const uint8_t *in,
65
65
  size_t in_len) {
66
66
  assert((in_len & 15) == 0);
67
- polyval_block reversed[32];
67
+ alignas(8) uint8_t buf[32 * 16];
68
68
 
69
69
  while (in_len > 0) {
70
70
  size_t todo = in_len;
71
- if (todo > sizeof(reversed)) {
72
- todo = sizeof(reversed);
71
+ if (todo > sizeof(buf)) {
72
+ todo = sizeof(buf);
73
73
  }
74
- OPENSSL_memcpy(reversed, in, todo);
74
+ OPENSSL_memcpy(buf, in, todo);
75
75
  in += todo;
76
76
  in_len -= todo;
77
77
 
78
- size_t blocks = todo / sizeof(polyval_block);
78
+ size_t blocks = todo / 16;
79
79
  for (size_t i = 0; i < blocks; i++) {
80
- byte_reverse(&reversed[i]);
80
+ byte_reverse(buf + 16 * i);
81
81
  }
82
82
 
83
- ctx->ghash(ctx->S.u, ctx->Htable, (const uint8_t *) reversed, todo);
83
+ ctx->ghash(ctx->S, ctx->Htable, buf, todo);
84
84
  }
85
85
  }
86
86
 
87
87
  void CRYPTO_POLYVAL_finish(const struct polyval_ctx *ctx, uint8_t out[16]) {
88
- polyval_block S = ctx->S;
89
- byte_reverse(&S);
90
- OPENSSL_memcpy(out, &S.c, sizeof(polyval_block));
88
+ OPENSSL_memcpy(out, &ctx->S, 16);
89
+ byte_reverse(out);
91
90
  }
@@ -59,9 +59,15 @@
59
59
  #endif // OPENSSL_LINUX
60
60
 
61
61
  #if defined(OPENSSL_MACOS)
62
+ // getentropy exists in any supported version of MacOS (Sierra and later)
62
63
  #include <sys/random.h>
63
64
  #endif
64
65
 
66
+ #if defined(OPENSSL_OPENBSD)
67
+ // getentropy exists in any supported version of OpenBSD
68
+ #include <unistd.h>
69
+ #endif
70
+
65
71
  #if defined(OPENSSL_FREEBSD) && __FreeBSD__ >= 12
66
72
  // getrandom is supported in FreeBSD 12 and up.
67
73
  #define FREEBSD_GETRANDOM
@@ -173,18 +179,9 @@ static void init_once(void) {
173
179
  }
174
180
  #endif // USE_NR_getrandom
175
181
 
176
- #if defined(OPENSSL_MACOS)
177
- // getentropy is available in macOS 10.12 and up. iOS 10 and up may also
178
- // support it, but the header is missing. See https://crbug.com/boringssl/287.
179
- if (__builtin_available(macos 10.12, *)) {
182
+ #if defined(OPENSSL_MACOS) || defined(OPENSSL_OPENBSD) || defined(FREEBSD_GETRANDOM)
180
183
  *urandom_fd_bss_get() = kHaveGetrandom;
181
184
  return;
182
- }
183
- #endif
184
-
185
- #if defined(FREEBSD_GETRANDOM)
186
- *urandom_fd_bss_get() = kHaveGetrandom;
187
- return;
188
185
  #endif
189
186
 
190
187
  // FIPS builds must support getrandom.
@@ -300,19 +297,10 @@ static int fill_with_entropy(uint8_t *out, size_t len, int block, int seed) {
300
297
  r = boringssl_getrandom(out, len, getrandom_flags);
301
298
  #elif defined(FREEBSD_GETRANDOM)
302
299
  r = getrandom(out, len, getrandom_flags);
303
- #elif defined(OPENSSL_MACOS)
304
- if (__builtin_available(macos 10.12, *)) {
305
- // |getentropy| can only request 256 bytes at a time.
306
- size_t todo = len <= 256 ? len : 256;
307
- if (getentropy(out, todo) != 0) {
308
- r = -1;
309
- } else {
310
- r = (ssize_t)todo;
311
- }
312
- } else {
313
- fprintf(stderr, "urandom fd corrupt.\n");
314
- abort();
315
- }
300
+ #elif defined(OPENSSL_MACOS) || defined(OPENSSL_OPENBSD)
301
+ // |getentropy| can only request 256 bytes at a time.
302
+ size_t todo = len <= 256 ? len : 256;
303
+ r = getentropy(out, todo) != 0 ? -1 : (ssize_t)todo;
316
304
  #else // USE_NR_getrandom
317
305
  fprintf(stderr, "urandom fd corrupt.\n");
318
306
  abort();
@@ -60,6 +60,7 @@
60
60
  #include <openssl/base.h>
61
61
 
62
62
  #include <openssl/bn.h>
63
+ #include <openssl/rsa.h>
63
64
 
64
65
 
65
66
  #if defined(__cplusplus)
@@ -67,6 +68,8 @@ extern "C" {
67
68
  #endif
68
69
 
69
70
 
71
+ #define RSA_PKCS1_PADDING_SIZE 11
72
+
70
73
  // Default implementations of RSA operations.
71
74
 
72
75
  const RSA_METHOD *RSA_default_method(void);
@@ -75,8 +78,6 @@ size_t rsa_default_size(const RSA *rsa);
75
78
  int rsa_default_sign_raw(RSA *rsa, size_t *out_len, uint8_t *out,
76
79
  size_t max_out, const uint8_t *in, size_t in_len,
77
80
  int padding);
78
- int rsa_default_decrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
79
- const uint8_t *in, size_t in_len, int padding);
80
81
  int rsa_default_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in,
81
82
  size_t len);
82
83
 
@@ -90,21 +91,13 @@ int BN_BLINDING_invert(BIGNUM *n, const BN_BLINDING *b, BN_MONT_CTX *mont_ctx,
90
91
  BN_CTX *ctx);
91
92
 
92
93
 
94
+ int PKCS1_MGF1(uint8_t *out, size_t len, const uint8_t *seed, size_t seed_len,
95
+ const EVP_MD *md);
93
96
  int RSA_padding_add_PKCS1_type_1(uint8_t *to, size_t to_len,
94
97
  const uint8_t *from, size_t from_len);
95
98
  int RSA_padding_check_PKCS1_type_1(uint8_t *out, size_t *out_len,
96
99
  size_t max_out, const uint8_t *from,
97
100
  size_t from_len);
98
- int RSA_padding_add_PKCS1_type_2(uint8_t *to, size_t to_len,
99
- const uint8_t *from, size_t from_len);
100
- int RSA_padding_check_PKCS1_type_2(uint8_t *out, size_t *out_len,
101
- size_t max_out, const uint8_t *from,
102
- size_t from_len);
103
- int RSA_padding_check_PKCS1_OAEP_mgf1(uint8_t *out, size_t *out_len,
104
- size_t max_out, const uint8_t *from,
105
- size_t from_len, const uint8_t *param,
106
- size_t param_len, const EVP_MD *md,
107
- const EVP_MD *mgf1md);
108
101
  int RSA_padding_add_none(uint8_t *to, size_t to_len, const uint8_t *from,
109
102
  size_t from_len);
110
103
 
@@ -112,12 +105,24 @@ int RSA_padding_add_none(uint8_t *to, size_t to_len, const uint8_t *from,
112
105
  // within DoS bounds.
113
106
  int rsa_check_public_key(const RSA *rsa);
114
107
 
115
- // RSA_private_transform calls either the method-specific |private_transform|
116
- // function (if given) or the generic one. See the comment for
117
- // |private_transform| in |rsa_meth_st|.
118
- int RSA_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in,
108
+ // rsa_private_transform_no_self_test calls either the method-specific
109
+ // |private_transform| function (if given) or the generic one. See the comment
110
+ // for |private_transform| in |rsa_meth_st|.
111
+ int rsa_private_transform_no_self_test(RSA *rsa, uint8_t *out,
112
+ const uint8_t *in, size_t len);
113
+
114
+ // rsa_private_transform acts the same as |rsa_private_transform_no_self_test|
115
+ // but, in FIPS mode, performs an RSA self test before calling the default RSA
116
+ // implementation.
117
+ int rsa_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in,
119
118
  size_t len);
120
119
 
120
+ // rsa_invalidate_key is called after |rsa| has been mutated, to invalidate
121
+ // fields derived from the original structure. This function assumes exclusive
122
+ // access to |rsa|. In particular, no other thread may be concurrently signing,
123
+ // etc., with |rsa|.
124
+ void rsa_invalidate_key(RSA *rsa);
125
+
121
126
 
122
127
  // This constant is exported for test purposes.
123
128
  extern const BN_ULONG kBoringSSLRSASqrtTwo[];