grpc 1.41.0.pre2 → 1.42.0

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 (519) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +57 -44
  3. data/etc/roots.pem +335 -326
  4. data/include/grpc/event_engine/event_engine.h +82 -42
  5. data/include/grpc/event_engine/internal/memory_allocator_impl.h +98 -0
  6. data/include/grpc/event_engine/memory_allocator.h +210 -0
  7. data/include/grpc/grpc.h +4 -0
  8. data/include/grpc/grpc_security.h +18 -0
  9. data/include/grpc/grpc_security_constants.h +1 -0
  10. data/include/grpc/impl/codegen/port_platform.h +7 -0
  11. data/src/core/ext/filters/client_channel/backend_metric.cc +18 -19
  12. data/src/core/ext/filters/client_channel/backup_poller.cc +2 -1
  13. data/src/core/ext/filters/client_channel/channel_connectivity.cc +71 -89
  14. data/src/core/ext/filters/client_channel/client_channel.cc +187 -252
  15. data/src/core/ext/filters/client_channel/client_channel.h +74 -27
  16. data/src/core/ext/filters/client_channel/client_channel_factory.cc +1 -1
  17. data/src/core/ext/filters/client_channel/client_channel_factory.h +17 -19
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +8 -14
  19. data/src/core/ext/filters/client_channel/config_selector.cc +1 -1
  20. data/src/core/ext/filters/client_channel/config_selector.h +4 -5
  21. data/src/core/ext/filters/client_channel/connector.h +18 -18
  22. data/src/core/ext/filters/client_channel/dynamic_filters.cc +1 -1
  23. data/src/core/ext/filters/client_channel/global_subchannel_pool.h +0 -1
  24. data/src/core/ext/filters/client_channel/health/health_check_client.cc +12 -11
  25. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +1 -1
  26. data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +4 -0
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +6 -15
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +166 -82
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +4 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.cc +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +2 -4
  32. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +23 -7
  33. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +15 -10
  34. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +2 -3
  35. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +2502 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -1
  37. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +7 -1
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +6 -2
  39. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +1 -1
  40. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -0
  41. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +8 -1
  42. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +7 -16
  43. data/src/core/ext/filters/client_channel/lb_policy.h +11 -1
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +1 -0
  45. data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +139 -0
  46. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +11 -5
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +3 -3
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +12 -39
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +21 -1
  50. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -2
  51. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +3 -1
  52. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +77 -68
  53. data/src/core/ext/filters/client_channel/resolver.h +1 -1
  54. data/src/core/ext/filters/client_channel/resolver_factory.h +2 -0
  55. data/src/core/ext/filters/client_channel/resolver_registry.cc +6 -8
  56. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
  57. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +1 -1
  58. data/src/core/ext/filters/client_channel/retry_filter.cc +48 -86
  59. data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
  60. data/src/core/ext/filters/client_channel/retry_throttle.cc +17 -48
  61. data/src/core/ext/filters/client_channel/server_address.h +1 -1
  62. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +49 -36
  63. data/src/core/ext/filters/client_channel/subchannel.cc +85 -143
  64. data/src/core/ext/filters/client_channel/subchannel.h +29 -49
  65. data/src/core/ext/filters/client_channel/subchannel_pool_interface.cc +22 -7
  66. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +11 -2
  67. data/src/core/ext/filters/client_idle/client_idle_filter.cc +27 -210
  68. data/src/core/ext/filters/client_idle/idle_filter_state.cc +96 -0
  69. data/src/core/ext/filters/client_idle/idle_filter_state.h +66 -0
  70. data/src/core/ext/filters/deadline/deadline_filter.cc +23 -26
  71. data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +19 -19
  72. data/src/core/ext/filters/fault_injection/service_config_parser.cc +0 -1
  73. data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
  74. data/src/core/ext/filters/http/client/http_client_filter.cc +41 -44
  75. data/src/core/ext/filters/http/client_authority_filter.cc +14 -15
  76. data/src/core/ext/filters/http/http_filters_plugin.cc +53 -71
  77. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +17 -12
  78. data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +1 -1
  79. data/src/core/ext/filters/http/server/http_server_filter.cc +72 -69
  80. data/src/core/ext/filters/max_age/max_age_filter.cc +24 -26
  81. data/src/core/ext/filters/message_size/message_size_filter.cc +19 -16
  82. data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
  83. data/src/core/ext/{filters/client_channel → service_config}/service_config.cc +2 -2
  84. data/src/core/ext/{filters/client_channel → service_config}/service_config.h +4 -4
  85. data/src/core/ext/service_config/service_config_call_data.h +72 -0
  86. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.cc +3 -3
  87. data/src/core/ext/{filters/client_channel → service_config}/service_config_parser.h +8 -6
  88. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +2 -5
  89. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +19 -24
  90. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +27 -50
  91. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +14 -16
  92. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +59 -58
  93. data/src/core/ext/transport/chttp2/transport/flow_control.cc +19 -16
  94. data/src/core/ext/transport/chttp2/transport/flow_control.h +4 -4
  95. data/src/core/ext/transport/chttp2/transport/frame_data.cc +4 -4
  96. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
  97. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +2 -1
  98. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +2 -3
  99. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +2 -2
  100. data/src/core/ext/transport/chttp2/transport/hpack_constants.h +1 -1
  101. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +41 -1
  102. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -4
  103. data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +1 -1
  104. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +136 -98
  105. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +27 -8
  106. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +12 -25
  107. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +37 -30
  108. data/src/core/ext/transport/chttp2/transport/internal.h +4 -3
  109. data/src/core/ext/transport/chttp2/transport/parsing.cc +30 -173
  110. data/src/core/ext/transport/chttp2/transport/popularity_count.h +1 -1
  111. data/src/core/ext/transport/chttp2/transport/writing.cc +29 -22
  112. data/src/core/ext/transport/inproc/inproc_transport.cc +105 -109
  113. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +68 -34
  114. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +139 -1
  115. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +16 -4
  116. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +53 -4
  117. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +3 -2
  118. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +15 -0
  119. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +13 -8
  120. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +23 -0
  121. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +0 -1
  122. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +14 -11
  123. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +17 -0
  124. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +15 -12
  125. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +49 -19
  126. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.c +55 -0
  127. data/src/core/ext/upb-generated/src/proto/grpc/lookup/v1/rls.upb.h +154 -0
  128. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +0 -2
  129. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.c +58 -0
  130. data/src/core/ext/upb-generated/xds/annotations/v3/status.upb.h +182 -0
  131. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.c +1 -1
  132. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +1 -1
  133. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +1 -1
  134. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.c +1 -1
  135. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +1 -1
  136. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +1 -1
  137. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +58 -0
  138. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +130 -0
  139. data/src/core/ext/upb-generated/{udpa/type/v1 → xds/type/v3}/typed_struct.upb.c +7 -7
  140. data/src/core/ext/upb-generated/xds/type/v3/typed_struct.upb.h +83 -0
  141. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +310 -286
  142. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +10 -0
  143. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +101 -88
  144. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +5 -0
  145. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +59 -56
  146. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +59 -46
  147. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +78 -82
  148. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +323 -316
  149. data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +5 -4
  150. data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +19 -23
  151. data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +4 -3
  152. data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +5 -3
  153. data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +5 -4
  154. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.c +75 -0
  155. data/src/core/ext/upbdefs-generated/xds/annotations/v3/status.upbdefs.h +50 -0
  156. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +13 -12
  157. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +25 -24
  158. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +16 -15
  159. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +17 -16
  160. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +33 -32
  161. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +19 -18
  162. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.c +45 -0
  163. data/src/core/ext/upbdefs-generated/xds/type/v3/typed_struct.upbdefs.h +35 -0
  164. data/src/core/ext/xds/xds_api.cc +325 -362
  165. data/src/core/ext/xds/xds_api.h +134 -82
  166. data/src/core/ext/xds/xds_bootstrap.h +10 -0
  167. data/src/core/ext/xds/xds_certificate_provider.cc +3 -3
  168. data/src/core/ext/xds/xds_channel_stack_modifier.cc +113 -0
  169. data/src/core/ext/xds/xds_channel_stack_modifier.h +52 -0
  170. data/src/core/ext/xds/xds_client.cc +527 -314
  171. data/src/core/ext/xds/xds_client.h +42 -37
  172. data/src/core/ext/xds/xds_client_stats.h +1 -1
  173. data/src/core/ext/xds/xds_server_config_fetcher.cc +5 -7
  174. data/src/core/lib/address_utils/parse_address.cc +2 -0
  175. data/src/core/lib/avl/avl.cc +5 -5
  176. data/src/core/lib/backoff/backoff.cc +1 -1
  177. data/src/core/lib/channel/channel_args.cc +24 -6
  178. data/src/core/lib/channel/channel_args.h +9 -0
  179. data/src/core/lib/channel/channel_stack_builder.cc +3 -3
  180. data/src/core/lib/channel/channel_trace.cc +1 -1
  181. data/src/core/lib/channel/channel_trace.h +1 -1
  182. data/src/core/lib/channel/channelz.cc +3 -3
  183. data/src/core/lib/channel/channelz.h +2 -2
  184. data/src/core/lib/channel/channelz_registry.cc +1 -1
  185. data/src/core/lib/channel/channelz_registry.h +1 -1
  186. data/src/core/lib/channel/connected_channel.cc +1 -3
  187. data/src/core/lib/channel/connected_channel.h +1 -2
  188. data/src/core/lib/compression/compression.cc +2 -2
  189. data/src/core/lib/compression/compression_args.cc +6 -4
  190. data/src/core/lib/compression/compression_internal.cc +2 -2
  191. data/src/core/lib/compression/compression_internal.h +1 -1
  192. data/src/core/lib/config/core_configuration.cc +44 -2
  193. data/src/core/lib/config/core_configuration.h +39 -1
  194. data/src/core/lib/debug/stats.cc +1 -1
  195. data/src/core/lib/debug/stats_data.cc +13 -13
  196. data/src/core/lib/gpr/atm.cc +1 -1
  197. data/src/core/lib/gpr/cpu_posix.cc +1 -1
  198. data/src/core/lib/gpr/string.cc +2 -2
  199. data/src/core/lib/gpr/tls.h +1 -1
  200. data/src/core/lib/gpr/useful.h +79 -32
  201. data/src/core/lib/gprpp/arena.h +10 -0
  202. data/src/core/lib/gprpp/bitset.h +38 -16
  203. data/src/core/lib/gprpp/chunked_vector.h +211 -0
  204. data/src/core/lib/gprpp/construct_destruct.h +1 -1
  205. data/src/core/lib/gprpp/match.h +1 -1
  206. data/src/core/lib/gprpp/memory.h +6 -0
  207. data/src/core/lib/gprpp/overload.h +1 -1
  208. data/src/core/lib/gprpp/status_helper.cc +23 -3
  209. data/src/core/lib/gprpp/status_helper.h +12 -1
  210. data/src/core/lib/gprpp/table.h +411 -0
  211. data/src/core/lib/http/httpcli.cc +200 -182
  212. data/src/core/lib/http/parser.cc +2 -2
  213. data/src/core/lib/iomgr/call_combiner.cc +28 -10
  214. data/src/core/lib/iomgr/combiner.cc +6 -21
  215. data/src/core/lib/iomgr/endpoint_cfstream.cc +7 -6
  216. data/src/core/lib/iomgr/error.cc +113 -52
  217. data/src/core/lib/iomgr/error.h +50 -9
  218. data/src/core/lib/iomgr/error_cfstream.cc +5 -0
  219. data/src/core/lib/iomgr/ev_epoll1_linux.cc +3 -2
  220. data/src/core/lib/iomgr/ev_epollex_linux.cc +7 -7
  221. data/src/core/lib/iomgr/ev_poll_posix.cc +29 -20
  222. data/src/core/lib/iomgr/event_engine/closure.cc +41 -18
  223. data/src/core/lib/iomgr/event_engine/closure.h +10 -1
  224. data/src/core/lib/iomgr/event_engine/endpoint.cc +3 -3
  225. data/src/core/lib/iomgr/event_engine/iomgr.cc +1 -1
  226. data/src/core/lib/iomgr/event_engine/pollset.cc +5 -4
  227. data/src/core/lib/iomgr/event_engine/resolver.cc +10 -7
  228. data/src/core/lib/iomgr/event_engine/tcp.cc +9 -8
  229. data/src/core/lib/iomgr/event_engine/timer.cc +7 -2
  230. data/src/core/lib/iomgr/exec_ctx.cc +1 -9
  231. data/src/core/lib/iomgr/executor/mpmcqueue.cc +5 -7
  232. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -8
  233. data/src/core/lib/iomgr/executor.cc +6 -20
  234. data/src/core/lib/iomgr/iomgr.cc +3 -1
  235. data/src/core/lib/iomgr/iomgr_internal.cc +4 -9
  236. data/src/core/lib/iomgr/iomgr_internal.h +3 -2
  237. data/src/core/lib/iomgr/load_file.cc +2 -2
  238. data/src/core/lib/iomgr/lockfree_event.cc +18 -0
  239. data/src/core/lib/iomgr/pollset_custom.cc +1 -1
  240. data/src/core/lib/iomgr/pollset_custom.h +1 -1
  241. data/src/core/lib/iomgr/resolve_address_posix.cc +5 -7
  242. data/src/core/lib/iomgr/resource_quota.cc +13 -11
  243. data/src/core/lib/iomgr/socket_factory_posix.cc +2 -2
  244. data/src/core/lib/iomgr/socket_mutator.cc +2 -2
  245. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -2
  246. data/src/core/lib/iomgr/tcp_client_cfstream.cc +5 -3
  247. data/src/core/lib/iomgr/tcp_client_custom.cc +1 -1
  248. data/src/core/lib/iomgr/tcp_client_posix.cc +9 -18
  249. data/src/core/lib/iomgr/tcp_client_windows.cc +2 -3
  250. data/src/core/lib/iomgr/tcp_posix.cc +4 -5
  251. data/src/core/lib/iomgr/tcp_server_custom.cc +2 -1
  252. data/src/core/lib/iomgr/tcp_server_posix.cc +3 -4
  253. data/src/core/lib/iomgr/tcp_server_windows.cc +4 -5
  254. data/src/core/lib/iomgr/tcp_windows.cc +2 -2
  255. data/src/core/lib/iomgr/timer_generic.cc +13 -13
  256. data/src/core/lib/iomgr/timer_heap.cc +1 -1
  257. data/src/core/lib/json/json_util.cc +68 -0
  258. data/src/core/lib/json/json_util.h +57 -99
  259. data/src/core/lib/json/json_writer.cc +0 -3
  260. data/src/core/lib/security/authorization/authorization_policy_provider.h +1 -1
  261. data/src/core/lib/security/authorization/authorization_policy_provider_vtable.cc +1 -1
  262. data/src/core/lib/security/authorization/evaluate_args.cc +14 -12
  263. data/src/core/lib/security/authorization/sdk_server_authz_filter.cc +13 -1
  264. data/src/core/lib/security/context/security_context.cc +4 -2
  265. data/src/core/lib/security/credentials/composite/composite_credentials.cc +1 -1
  266. data/src/core/lib/security/credentials/credentials.cc +4 -2
  267. data/src/core/lib/security/credentials/credentials.h +6 -1
  268. data/src/core/lib/security/credentials/external/external_account_credentials.cc +47 -11
  269. data/src/core/lib/security/credentials/external/external_account_credentials.h +1 -0
  270. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -1
  271. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -9
  272. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +2 -2
  273. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
  274. data/src/core/lib/security/security_connector/security_connector.cc +9 -4
  275. data/src/core/lib/security/security_connector/security_connector.h +1 -1
  276. data/src/core/lib/security/security_connector/ssl_utils.cc +1 -1
  277. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +1 -0
  278. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +0 -2
  279. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  280. data/src/core/lib/security/transport/security_handshaker.cc +73 -43
  281. data/src/core/lib/security/transport/server_auth_filter.cc +3 -5
  282. data/src/core/lib/security/transport/tsi_error.cc +3 -5
  283. data/src/core/lib/slice/slice.cc +0 -16
  284. data/src/core/lib/slice/slice_api.cc +39 -0
  285. data/src/core/lib/slice/slice_buffer.cc +5 -5
  286. data/src/core/lib/slice/slice_intern.cc +8 -13
  287. data/src/core/lib/slice/slice_internal.h +1 -244
  288. data/src/core/lib/slice/slice_refcount.cc +17 -0
  289. data/src/core/lib/slice/slice_refcount.h +121 -0
  290. data/src/core/lib/slice/slice_refcount_base.h +173 -0
  291. data/src/core/lib/slice/slice_split.cc +100 -0
  292. data/src/core/lib/slice/slice_split.h +40 -0
  293. data/src/core/lib/slice/slice_string_helpers.cc +0 -83
  294. data/src/core/lib/slice/slice_string_helpers.h +0 -11
  295. data/src/core/lib/slice/static_slice.cc +529 -0
  296. data/src/core/lib/slice/static_slice.h +331 -0
  297. data/src/core/lib/surface/builtins.cc +49 -0
  298. data/src/core/{ext/filters/workarounds/workaround_cronet_compression_filter.h → lib/surface/builtins.h} +8 -9
  299. data/src/core/lib/surface/call.cc +103 -120
  300. data/src/core/lib/surface/call.h +0 -6
  301. data/src/core/lib/surface/channel.cc +19 -32
  302. data/src/core/lib/surface/channel.h +0 -9
  303. data/src/core/lib/surface/channel_init.cc +23 -76
  304. data/src/core/lib/surface/channel_init.h +52 -44
  305. data/src/core/lib/surface/completion_queue.cc +6 -5
  306. data/src/core/lib/surface/init.cc +0 -39
  307. data/src/core/lib/surface/init_secure.cc +17 -14
  308. data/src/core/lib/surface/lame_client.cc +18 -11
  309. data/src/core/lib/surface/lame_client.h +1 -1
  310. data/src/core/lib/surface/server.cc +25 -17
  311. data/src/core/lib/surface/server.h +17 -10
  312. data/src/core/lib/surface/validate_metadata.cc +5 -2
  313. data/src/core/lib/surface/version.cc +2 -2
  314. data/src/core/lib/transport/bdp_estimator.cc +1 -1
  315. data/src/core/lib/transport/error_utils.cc +42 -17
  316. data/src/core/lib/transport/error_utils.h +1 -1
  317. data/src/core/lib/transport/metadata.cc +31 -10
  318. data/src/core/lib/transport/metadata.h +2 -1
  319. data/src/core/lib/transport/metadata_batch.cc +35 -371
  320. data/src/core/lib/transport/metadata_batch.h +905 -71
  321. data/src/core/lib/transport/parsed_metadata.h +263 -0
  322. data/src/core/lib/transport/pid_controller.cc +4 -4
  323. data/src/core/lib/transport/static_metadata.cc +714 -846
  324. data/src/core/lib/transport/static_metadata.h +115 -379
  325. data/src/core/lib/transport/status_metadata.cc +1 -0
  326. data/src/core/lib/transport/transport.cc +4 -5
  327. data/src/core/lib/transport/transport_op_string.cc +40 -20
  328. data/src/core/plugin_registry/grpc_plugin_registry.cc +64 -43
  329. data/src/core/tsi/alts/crypt/aes_gcm.cc +3 -1
  330. data/src/core/tsi/alts/frame_protector/alts_frame_protector.cc +13 -12
  331. data/src/core/tsi/alts/frame_protector/frame_handler.cc +10 -11
  332. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -2
  333. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +12 -2
  334. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_record_protocol_common.cc +1 -1
  335. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +2 -2
  336. data/src/core/tsi/fake_transport_security.cc +15 -7
  337. data/src/core/tsi/local_transport_security.cc +36 -73
  338. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +16 -50
  339. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -3
  340. data/src/core/tsi/ssl_transport_security.cc +10 -2
  341. data/src/core/tsi/transport_security.cc +12 -0
  342. data/src/core/tsi/transport_security.h +16 -1
  343. data/src/core/tsi/transport_security_interface.h +26 -0
  344. data/src/ruby/ext/grpc/extconf.rb +12 -9
  345. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -0
  346. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +6 -0
  347. data/src/ruby/lib/grpc/version.rb +1 -1
  348. data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -2
  349. data/src/ruby/spec/client_server_spec.rb +1 -1
  350. data/third_party/abseil-cpp/absl/base/internal/thread_identity.cc +4 -4
  351. data/third_party/abseil-cpp/absl/base/internal/thread_identity.h +11 -6
  352. data/third_party/address_sorting/address_sorting_posix.c +1 -0
  353. data/third_party/boringssl-with-bazel/err_data.c +278 -272
  354. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bool.c +21 -22
  355. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_d2i_fp.c +0 -2
  356. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_gentm.c +5 -0
  357. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +15 -22
  358. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +13 -7
  359. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_print.c +19 -29
  360. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/a_strex.c +268 -271
  361. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +106 -153
  362. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_time.c +2 -2
  363. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +0 -39
  364. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_par.c +1 -1
  365. data/third_party/boringssl-with-bazel/src/crypto/{x509 → asn1}/charmap.h +0 -0
  366. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +38 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +8 -8
  368. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +289 -198
  369. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +8 -8
  370. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +9 -13
  371. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +1 -0
  372. data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +11 -8
  373. data/third_party/boringssl-with-bazel/src/crypto/bio/bio_mem.c +1 -7
  374. data/third_party/boringssl-with-bazel/src/crypto/bio/connect.c +1 -5
  375. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +0 -4
  376. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +1 -7
  377. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +1 -6
  378. data/third_party/boringssl-with-bazel/src/crypto/bio/socket.c +3 -17
  379. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +4 -6
  380. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbb.c +9 -0
  381. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +8 -0
  382. data/third_party/boringssl-with-bazel/src/crypto/chacha/chacha.c +38 -47
  383. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/cipher_extra.c +45 -65
  384. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +1 -0
  385. data/third_party/boringssl-with-bazel/src/crypto/evp/scrypt.c +32 -34
  386. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +21 -3
  387. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/gcd_extra.c +3 -2
  388. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +5 -2
  389. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/sqrt.c +5 -9
  390. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +10 -0
  391. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/des.c +10 -11
  392. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/des/internal.h +1 -3
  393. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md4/md4.c +4 -7
  394. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/md5/md5.c +4 -7
  395. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +1 -1
  396. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +1 -1
  397. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +24 -9
  398. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +4 -2
  399. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha1.c +35 -35
  400. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha256.c +11 -10
  401. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/sha512.c +10 -37
  402. data/third_party/boringssl-with-bazel/src/crypto/internal.h +39 -0
  403. data/third_party/boringssl-with-bazel/src/crypto/mem.c +12 -9
  404. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_all.c +0 -9
  405. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_info.c +0 -2
  406. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +0 -8
  407. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pk8.c +0 -2
  408. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_pkey.c +0 -4
  409. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +16 -7
  410. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +9 -4
  411. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7_x509.c +151 -12
  412. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
  413. data/third_party/boringssl-with-bazel/src/crypto/siphash/siphash.c +6 -6
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/by_file.c +2 -0
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/internal.h +181 -1
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +246 -0
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +11 -2
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/t_crl.c +0 -2
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +0 -179
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509a.c +4 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_lu.c +0 -5
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_obj.c +1 -0
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vfy.c +11 -50
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_vpm.c +1 -1
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +2 -4
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/x_all.c +0 -16
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/x_name.c +22 -18
  428. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +11 -8
  429. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +16 -0
  430. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_cache.c +1 -0
  431. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +1 -1
  432. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_int.h +1 -1
  433. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_map.c +1 -0
  434. data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_tree.c +4 -3
  435. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +24 -5
  436. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +17 -8
  437. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -0
  438. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +6 -6
  439. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_crld.c +4 -0
  440. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +5 -0
  441. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ncons.c +112 -55
  442. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_pci.c +2 -1
  443. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +0 -2
  444. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_purp.c +1 -1
  445. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +71 -26
  446. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +366 -227
  447. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +2 -9
  448. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -4
  449. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +3 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/bn.h +3 -3
  451. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +9 -0
  452. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +8 -2
  453. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +4 -0
  454. data/third_party/boringssl-with-bazel/src/include/openssl/mem.h +9 -3
  455. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -20
  456. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +12 -5
  457. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +5 -0
  458. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +37 -15
  459. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +28 -14
  460. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +31 -32
  461. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +529 -91
  462. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +16 -695
  463. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +48 -8
  464. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +266 -357
  465. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +90 -152
  466. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +15 -13
  467. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +75 -79
  468. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +96 -97
  469. data/third_party/boringssl-with-bazel/src/ssl/internal.h +63 -43
  470. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +2 -2
  471. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +2 -2
  472. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +6 -12
  473. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +14 -17
  474. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +14 -27
  475. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +203 -203
  476. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +30 -41
  477. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +47 -33
  478. data/third_party/re2/re2/compile.cc +91 -109
  479. data/third_party/re2/re2/dfa.cc +27 -39
  480. data/third_party/re2/re2/filtered_re2.cc +18 -2
  481. data/third_party/re2/re2/filtered_re2.h +10 -5
  482. data/third_party/re2/re2/nfa.cc +1 -1
  483. data/third_party/re2/re2/parse.cc +42 -23
  484. data/third_party/re2/re2/perl_groups.cc +34 -34
  485. data/third_party/re2/re2/prefilter.cc +3 -2
  486. data/third_party/re2/re2/prog.cc +182 -4
  487. data/third_party/re2/re2/prog.h +28 -9
  488. data/third_party/re2/re2/re2.cc +87 -118
  489. data/third_party/re2/re2/re2.h +156 -141
  490. data/third_party/re2/re2/regexp.cc +12 -5
  491. data/third_party/re2/re2/regexp.h +8 -2
  492. data/third_party/re2/re2/set.cc +31 -9
  493. data/third_party/re2/re2/set.h +9 -4
  494. data/third_party/re2/re2/simplify.cc +11 -3
  495. data/third_party/re2/re2/tostring.cc +1 -1
  496. data/third_party/re2/re2/walker-inl.h +1 -1
  497. data/third_party/re2/util/mutex.h +2 -2
  498. data/third_party/re2/util/pcre.h +3 -3
  499. metadata +81 -68
  500. data/include/grpc/event_engine/slice_allocator.h +0 -71
  501. data/src/core/ext/filters/client_channel/service_config_call_data.h +0 -126
  502. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +0 -211
  503. data/src/core/ext/filters/workarounds/workaround_utils.cc +0 -53
  504. data/src/core/ext/filters/workarounds/workaround_utils.h +0 -39
  505. data/src/core/ext/transport/chttp2/client/authority.cc +0 -42
  506. data/src/core/ext/transport/chttp2/client/authority.h +0 -36
  507. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.cc +0 -67
  508. data/src/core/ext/transport/chttp2/transport/chttp2_slice_allocator.h +0 -74
  509. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +0 -66
  510. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +0 -58
  511. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +0 -58
  512. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +0 -130
  513. data/src/core/ext/upb-generated/udpa/type/v1/typed_struct.upb.h +0 -83
  514. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.c +0 -44
  515. data/src/core/ext/upbdefs-generated/udpa/type/v1/typed_struct.upbdefs.h +0 -35
  516. data/src/core/lib/iomgr/udp_server.cc +0 -747
  517. data/src/core/lib/iomgr/udp_server.h +0 -103
  518. data/src/core/lib/transport/authority_override.cc +0 -40
  519. data/src/core/lib/transport/authority_override.h +0 -37
@@ -32,8 +32,6 @@ typedef struct { uint32_t words[16]; } block_t;
32
32
 
33
33
  OPENSSL_STATIC_ASSERT(sizeof(block_t) == 64, "block_t has padding");
34
34
 
35
- #define R(a, b) (((a) << (b)) | ((a) >> (32 - (b))))
36
-
37
35
  // salsa208_word_specification implements the Salsa20/8 core function, also
38
36
  // described in RFC 7914, section 3. It modifies the block at |inout|
39
37
  // in-place.
@@ -42,38 +40,38 @@ static void salsa208_word_specification(block_t *inout) {
42
40
  OPENSSL_memcpy(&x, inout, sizeof(x));
43
41
 
44
42
  for (int i = 8; i > 0; i -= 2) {
45
- x.words[4] ^= R(x.words[0] + x.words[12], 7);
46
- x.words[8] ^= R(x.words[4] + x.words[0], 9);
47
- x.words[12] ^= R(x.words[8] + x.words[4], 13);
48
- x.words[0] ^= R(x.words[12] + x.words[8], 18);
49
- x.words[9] ^= R(x.words[5] + x.words[1], 7);
50
- x.words[13] ^= R(x.words[9] + x.words[5], 9);
51
- x.words[1] ^= R(x.words[13] + x.words[9], 13);
52
- x.words[5] ^= R(x.words[1] + x.words[13], 18);
53
- x.words[14] ^= R(x.words[10] + x.words[6], 7);
54
- x.words[2] ^= R(x.words[14] + x.words[10], 9);
55
- x.words[6] ^= R(x.words[2] + x.words[14], 13);
56
- x.words[10] ^= R(x.words[6] + x.words[2], 18);
57
- x.words[3] ^= R(x.words[15] + x.words[11], 7);
58
- x.words[7] ^= R(x.words[3] + x.words[15], 9);
59
- x.words[11] ^= R(x.words[7] + x.words[3], 13);
60
- x.words[15] ^= R(x.words[11] + x.words[7], 18);
61
- x.words[1] ^= R(x.words[0] + x.words[3], 7);
62
- x.words[2] ^= R(x.words[1] + x.words[0], 9);
63
- x.words[3] ^= R(x.words[2] + x.words[1], 13);
64
- x.words[0] ^= R(x.words[3] + x.words[2], 18);
65
- x.words[6] ^= R(x.words[5] + x.words[4], 7);
66
- x.words[7] ^= R(x.words[6] + x.words[5], 9);
67
- x.words[4] ^= R(x.words[7] + x.words[6], 13);
68
- x.words[5] ^= R(x.words[4] + x.words[7], 18);
69
- x.words[11] ^= R(x.words[10] + x.words[9], 7);
70
- x.words[8] ^= R(x.words[11] + x.words[10], 9);
71
- x.words[9] ^= R(x.words[8] + x.words[11], 13);
72
- x.words[10] ^= R(x.words[9] + x.words[8], 18);
73
- x.words[12] ^= R(x.words[15] + x.words[14], 7);
74
- x.words[13] ^= R(x.words[12] + x.words[15], 9);
75
- x.words[14] ^= R(x.words[13] + x.words[12], 13);
76
- x.words[15] ^= R(x.words[14] + x.words[13], 18);
43
+ x.words[4] ^= CRYPTO_rotl_u32(x.words[0] + x.words[12], 7);
44
+ x.words[8] ^= CRYPTO_rotl_u32(x.words[4] + x.words[0], 9);
45
+ x.words[12] ^= CRYPTO_rotl_u32(x.words[8] + x.words[4], 13);
46
+ x.words[0] ^= CRYPTO_rotl_u32(x.words[12] + x.words[8], 18);
47
+ x.words[9] ^= CRYPTO_rotl_u32(x.words[5] + x.words[1], 7);
48
+ x.words[13] ^= CRYPTO_rotl_u32(x.words[9] + x.words[5], 9);
49
+ x.words[1] ^= CRYPTO_rotl_u32(x.words[13] + x.words[9], 13);
50
+ x.words[5] ^= CRYPTO_rotl_u32(x.words[1] + x.words[13], 18);
51
+ x.words[14] ^= CRYPTO_rotl_u32(x.words[10] + x.words[6], 7);
52
+ x.words[2] ^= CRYPTO_rotl_u32(x.words[14] + x.words[10], 9);
53
+ x.words[6] ^= CRYPTO_rotl_u32(x.words[2] + x.words[14], 13);
54
+ x.words[10] ^= CRYPTO_rotl_u32(x.words[6] + x.words[2], 18);
55
+ x.words[3] ^= CRYPTO_rotl_u32(x.words[15] + x.words[11], 7);
56
+ x.words[7] ^= CRYPTO_rotl_u32(x.words[3] + x.words[15], 9);
57
+ x.words[11] ^= CRYPTO_rotl_u32(x.words[7] + x.words[3], 13);
58
+ x.words[15] ^= CRYPTO_rotl_u32(x.words[11] + x.words[7], 18);
59
+ x.words[1] ^= CRYPTO_rotl_u32(x.words[0] + x.words[3], 7);
60
+ x.words[2] ^= CRYPTO_rotl_u32(x.words[1] + x.words[0], 9);
61
+ x.words[3] ^= CRYPTO_rotl_u32(x.words[2] + x.words[1], 13);
62
+ x.words[0] ^= CRYPTO_rotl_u32(x.words[3] + x.words[2], 18);
63
+ x.words[6] ^= CRYPTO_rotl_u32(x.words[5] + x.words[4], 7);
64
+ x.words[7] ^= CRYPTO_rotl_u32(x.words[6] + x.words[5], 9);
65
+ x.words[4] ^= CRYPTO_rotl_u32(x.words[7] + x.words[6], 13);
66
+ x.words[5] ^= CRYPTO_rotl_u32(x.words[4] + x.words[7], 18);
67
+ x.words[11] ^= CRYPTO_rotl_u32(x.words[10] + x.words[9], 7);
68
+ x.words[8] ^= CRYPTO_rotl_u32(x.words[11] + x.words[10], 9);
69
+ x.words[9] ^= CRYPTO_rotl_u32(x.words[8] + x.words[11], 13);
70
+ x.words[10] ^= CRYPTO_rotl_u32(x.words[9] + x.words[8], 18);
71
+ x.words[12] ^= CRYPTO_rotl_u32(x.words[15] + x.words[14], 7);
72
+ x.words[13] ^= CRYPTO_rotl_u32(x.words[12] + x.words[15], 9);
73
+ x.words[14] ^= CRYPTO_rotl_u32(x.words[13] + x.words[12], 13);
74
+ x.words[15] ^= CRYPTO_rotl_u32(x.words[14] + x.words[13], 18);
77
75
  }
78
76
 
79
77
  for (int i = 0; i < 16; ++i) {
@@ -456,7 +456,7 @@ void bn_mod_add_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b,
456
456
 
457
457
  int bn_div_consttime(BIGNUM *quotient, BIGNUM *remainder,
458
458
  const BIGNUM *numerator, const BIGNUM *divisor,
459
- BN_CTX *ctx) {
459
+ unsigned divisor_min_bits, BN_CTX *ctx) {
460
460
  if (BN_is_negative(numerator) || BN_is_negative(divisor)) {
461
461
  OPENSSL_PUT_ERROR(BN, BN_R_NEGATIVE_NUMBER);
462
462
  return 0;
@@ -496,8 +496,26 @@ int bn_div_consttime(BIGNUM *quotient, BIGNUM *remainder,
496
496
  r->neg = 0;
497
497
 
498
498
  // Incorporate |numerator| into |r|, one bit at a time, reducing after each
499
- // step. At the start of each loop iteration, |r| < |divisor|
500
- for (int i = numerator->width - 1; i >= 0; i--) {
499
+ // step. We maintain the invariant that |0 <= r < divisor| and
500
+ // |q * divisor + r = n| where |n| is the portion of |numerator| incorporated
501
+ // so far.
502
+ //
503
+ // First, we short-circuit the loop: if we know |divisor| has at least
504
+ // |divisor_min_bits| bits, the top |divisor_min_bits - 1| can be incorporated
505
+ // without reductions. This significantly speeds up |RSA_check_key|. For
506
+ // simplicity, we round down to a whole number of words.
507
+ assert(divisor_min_bits <= BN_num_bits(divisor));
508
+ int initial_words = 0;
509
+ if (divisor_min_bits > 0) {
510
+ initial_words = (divisor_min_bits - 1) / BN_BITS2;
511
+ if (initial_words > numerator->width) {
512
+ initial_words = numerator->width;
513
+ }
514
+ OPENSSL_memcpy(r->d, numerator->d + numerator->width - initial_words,
515
+ initial_words * sizeof(BN_ULONG));
516
+ }
517
+
518
+ for (int i = numerator->width - initial_words - 1; i >= 0; i--) {
501
519
  for (int bit = BN_BITS2 - 1; bit >= 0; bit--) {
502
520
  // Incorporate the next bit of the numerator, by computing
503
521
  // r = 2*r or 2*r + 1. Note the result fits in one more word. We store the
@@ -157,10 +157,11 @@ int bn_lcm_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx) {
157
157
  BN_CTX_start(ctx);
158
158
  unsigned shift;
159
159
  BIGNUM *gcd = BN_CTX_get(ctx);
160
- int ret = gcd != NULL &&
160
+ int ret = gcd != NULL && //
161
161
  bn_mul_consttime(r, a, b, ctx) &&
162
162
  bn_gcd_consttime(gcd, &shift, a, b, ctx) &&
163
- bn_div_consttime(r, NULL, r, gcd, ctx) &&
163
+ // |gcd| has a secret bit width.
164
+ bn_div_consttime(r, NULL, r, gcd, /*divisor_min_bits=*/0, ctx) &&
164
165
  bn_rshift_secret_shift(r, r, shift, ctx);
165
166
  BN_CTX_end(ctx);
166
167
  return ret;
@@ -552,12 +552,15 @@ int bn_sqr_consttime(BIGNUM *r, const BIGNUM *a, BN_CTX *ctx);
552
552
  // bn_div_consttime behaves like |BN_div|, but it rejects negative inputs and
553
553
  // treats both inputs, including their magnitudes, as secret. It is, as a
554
554
  // result, much slower than |BN_div| and should only be used for rare operations
555
- // where Montgomery reduction is not available.
555
+ // where Montgomery reduction is not available. |divisor_min_bits| is a
556
+ // public lower bound for |BN_num_bits(divisor)|. When |divisor|'s bit width is
557
+ // public, this can speed up the operation.
556
558
  //
557
559
  // Note that |quotient->width| will be set pessimally to |numerator->width|.
558
560
  OPENSSL_EXPORT int bn_div_consttime(BIGNUM *quotient, BIGNUM *remainder,
559
561
  const BIGNUM *numerator,
560
- const BIGNUM *divisor, BN_CTX *ctx);
562
+ const BIGNUM *divisor,
563
+ unsigned divisor_min_bits, BN_CTX *ctx);
561
564
 
562
565
  // bn_is_relatively_prime checks whether GCD(|x|, |y|) is one. On success, it
563
566
  // returns one and sets |*out_relatively_prime| to one if the GCD was one and
@@ -75,10 +75,8 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) {
75
75
  if (ret == NULL) {
76
76
  ret = BN_new();
77
77
  }
78
- if (ret == NULL) {
79
- goto end;
80
- }
81
- if (!BN_set_word(ret, BN_is_bit_set(a, 0))) {
78
+ if (ret == NULL ||
79
+ !BN_set_word(ret, BN_is_bit_set(a, 0))) {
82
80
  if (ret != in) {
83
81
  BN_free(ret);
84
82
  }
@@ -88,17 +86,15 @@ BIGNUM *BN_mod_sqrt(BIGNUM *in, const BIGNUM *a, const BIGNUM *p, BN_CTX *ctx) {
88
86
  }
89
87
 
90
88
  OPENSSL_PUT_ERROR(BN, BN_R_P_IS_NOT_PRIME);
91
- return (NULL);
89
+ return NULL;
92
90
  }
93
91
 
94
92
  if (BN_is_zero(a) || BN_is_one(a)) {
95
93
  if (ret == NULL) {
96
94
  ret = BN_new();
97
95
  }
98
- if (ret == NULL) {
99
- goto end;
100
- }
101
- if (!BN_set_word(ret, BN_is_one(a))) {
96
+ if (ret == NULL ||
97
+ !BN_set_word(ret, BN_is_one(a))) {
102
98
  if (ret != in) {
103
99
  BN_free(ret);
104
100
  }
@@ -911,6 +911,16 @@ static int aead_aes_gcm_init_impl(struct aead_aes_gcm_ctx *gcm_ctx,
911
911
  size_t key_len, size_t tag_len) {
912
912
  const size_t key_bits = key_len * 8;
913
913
 
914
+ switch (key_bits) {
915
+ case 128:
916
+ boringssl_fips_inc_counter(fips_counter_evp_aes_128_gcm);
917
+ break;
918
+
919
+ case 256:
920
+ boringssl_fips_inc_counter(fips_counter_evp_aes_256_gcm);
921
+ break;
922
+ }
923
+
914
924
  if (key_bits != 128 && key_bits != 192 && key_bits != 256) {
915
925
  OPENSSL_PUT_ERROR(CIPHER, CIPHER_R_BAD_KEY_LENGTH);
916
926
  return 0; // EVP_AEAD_CTX_init should catch this.
@@ -342,10 +342,10 @@ void DES_set_key(const DES_cblock *key, DES_key_schedule *schedule) {
342
342
 
343
343
  // table contained 0213 4657
344
344
  t2 = ((t << 16L) | (s & 0x0000ffffL)) & 0xffffffffL;
345
- schedule->subkeys[i][0] = ROTATE(t2, 30) & 0xffffffffL;
345
+ schedule->subkeys[i][0] = CRYPTO_rotr_u32(t2, 30);
346
346
 
347
347
  t2 = ((s >> 16L) | (t & 0xffff0000L));
348
- schedule->subkeys[i][1] = ROTATE(t2, 26) & 0xffffffffL;
348
+ schedule->subkeys[i][1] = CRYPTO_rotr_u32(t2, 26);
349
349
  }
350
350
  }
351
351
 
@@ -392,8 +392,8 @@ static void DES_encrypt1(uint32_t *data, const DES_key_schedule *ks, int enc) {
392
392
  // <71755.204@CompuServe.COM> for pointing this out.
393
393
  // clear the top bits on machines with 8byte longs
394
394
  // shift left by 2
395
- r = ROTATE(r, 29) & 0xffffffffL;
396
- l = ROTATE(l, 29) & 0xffffffffL;
395
+ r = CRYPTO_rotr_u32(r, 29);
396
+ l = CRYPTO_rotr_u32(l, 29);
397
397
 
398
398
  // I don't know if it is worth the effort of loop unrolling the
399
399
  // inner loop
@@ -434,8 +434,8 @@ static void DES_encrypt1(uint32_t *data, const DES_key_schedule *ks, int enc) {
434
434
  }
435
435
 
436
436
  // rotate and clear the top bits on machines with 8byte longs
437
- l = ROTATE(l, 3) & 0xffffffffL;
438
- r = ROTATE(r, 3) & 0xffffffffL;
437
+ l = CRYPTO_rotr_u32(l, 3);
438
+ r = CRYPTO_rotr_u32(r, 3);
439
439
 
440
440
  FP(r, l);
441
441
  data[0] = l;
@@ -454,8 +454,8 @@ static void DES_encrypt2(uint32_t *data, const DES_key_schedule *ks, int enc) {
454
454
  // sparc2. Thanks to Richard Outerbridge <71755.204@CompuServe.COM> for
455
455
  // pointing this out.
456
456
  // clear the top bits on machines with 8byte longs
457
- r = ROTATE(r, 29) & 0xffffffffL;
458
- l = ROTATE(l, 29) & 0xffffffffL;
457
+ r = CRYPTO_rotr_u32(r, 29);
458
+ l = CRYPTO_rotr_u32(l, 29);
459
459
 
460
460
  // I don't know if it is worth the effort of loop unrolling the
461
461
  // inner loop
@@ -495,8 +495,8 @@ static void DES_encrypt2(uint32_t *data, const DES_key_schedule *ks, int enc) {
495
495
  D_ENCRYPT(ks, r, l, 0);
496
496
  }
497
497
  // rotate and clear the top bits on machines with 8byte longs
498
- data[0] = ROTATE(l, 3) & 0xffffffffL;
499
- data[1] = ROTATE(r, 3) & 0xffffffffL;
498
+ data[0] = CRYPTO_rotr_u32(l, 3);
499
+ data[1] = CRYPTO_rotr_u32(r, 3);
500
500
  }
501
501
 
502
502
  void DES_encrypt3(uint32_t *data, const DES_key_schedule *ks1,
@@ -782,4 +782,3 @@ void DES_set_key_unchecked(const DES_cblock *key, DES_key_schedule *schedule) {
782
782
  #undef D_ENCRYPT
783
783
  #undef ITERATIONS
784
784
  #undef HALF_ITERATIONS
785
- #undef ROTATE
@@ -218,7 +218,7 @@ how to use xors :-) I got it to its final state.
218
218
  #define D_ENCRYPT(ks, LL, R, S) \
219
219
  do { \
220
220
  LOAD_DATA(ks, R, S, u, t, E0, E1); \
221
- t = ROTATE(t, 4); \
221
+ t = CRYPTO_rotr_u32(t, 4); \
222
222
  (LL) ^= \
223
223
  DES_SPtrans[0][(u >> 2L) & 0x3f] ^ DES_SPtrans[2][(u >> 10L) & 0x3f] ^ \
224
224
  DES_SPtrans[4][(u >> 18L) & 0x3f] ^ \
@@ -230,8 +230,6 @@ how to use xors :-) I got it to its final state.
230
230
  #define ITERATIONS 16
231
231
  #define HALF_ITERATIONS 8
232
232
 
233
- #define ROTATE(a, n) (((a) >> (n)) + ((a) << (32 - (n))))
234
-
235
233
 
236
234
  #if defined(__cplusplus)
237
235
  } // extern C
@@ -72,7 +72,7 @@ uint8_t *MD4(const uint8_t *data, size_t len, uint8_t out[MD4_DIGEST_LENGTH]) {
72
72
  return out;
73
73
  }
74
74
 
75
- // Implemented from RFC1186 The MD4 Message-Digest Algorithm.
75
+ // Implemented from RFC 1186 The MD4 Message-Digest Algorithm.
76
76
 
77
77
  int MD4_Init(MD4_CTX *md4) {
78
78
  OPENSSL_memset(md4, 0, sizeof(MD4_CTX));
@@ -113,24 +113,22 @@ int MD4_Final(uint8_t out[MD4_DIGEST_LENGTH], MD4_CTX *c) {
113
113
  #define G(b, c, d) (((b) & (c)) | ((b) & (d)) | ((c) & (d)))
114
114
  #define H(b, c, d) ((b) ^ (c) ^ (d))
115
115
 
116
- #define ROTATE(a, n) (((a) << (n)) | ((a) >> (32 - (n))))
117
-
118
116
  #define R0(a, b, c, d, k, s, t) \
119
117
  do { \
120
118
  (a) += ((k) + (t) + F((b), (c), (d))); \
121
- (a) = ROTATE(a, s); \
119
+ (a) = CRYPTO_rotl_u32(a, s); \
122
120
  } while (0)
123
121
 
124
122
  #define R1(a, b, c, d, k, s, t) \
125
123
  do { \
126
124
  (a) += ((k) + (t) + G((b), (c), (d))); \
127
- (a) = ROTATE(a, s); \
125
+ (a) = CRYPTO_rotl_u32(a, s); \
128
126
  } while (0)
129
127
 
130
128
  #define R2(a, b, c, d, k, s, t) \
131
129
  do { \
132
130
  (a) += ((k) + (t) + H((b), (c), (d))); \
133
- (a) = ROTATE(a, s); \
131
+ (a) = CRYPTO_rotl_u32(a, s); \
134
132
  } while (0)
135
133
 
136
134
  void md4_block_data_order(uint32_t *state, const uint8_t *data, size_t num) {
@@ -237,7 +235,6 @@ void md4_block_data_order(uint32_t *state, const uint8_t *data, size_t num) {
237
235
  #undef F
238
236
  #undef G
239
237
  #undef H
240
- #undef ROTATE
241
238
  #undef R0
242
239
  #undef R1
243
240
  #undef R2
@@ -119,33 +119,31 @@ int MD5_Final(uint8_t out[MD5_DIGEST_LENGTH], MD5_CTX *c) {
119
119
  #define H(b, c, d) ((b) ^ (c) ^ (d))
120
120
  #define I(b, c, d) (((~(d)) | (b)) ^ (c))
121
121
 
122
- #define ROTATE(a, n) (((a) << (n)) | ((a) >> (32 - (n))))
123
-
124
122
  #define R0(a, b, c, d, k, s, t) \
125
123
  do { \
126
124
  (a) += ((k) + (t) + F((b), (c), (d))); \
127
- (a) = ROTATE(a, s); \
125
+ (a) = CRYPTO_rotl_u32(a, s); \
128
126
  (a) += (b); \
129
127
  } while (0)
130
128
 
131
129
  #define R1(a, b, c, d, k, s, t) \
132
130
  do { \
133
131
  (a) += ((k) + (t) + G((b), (c), (d))); \
134
- (a) = ROTATE(a, s); \
132
+ (a) = CRYPTO_rotl_u32(a, s); \
135
133
  (a) += (b); \
136
134
  } while (0)
137
135
 
138
136
  #define R2(a, b, c, d, k, s, t) \
139
137
  do { \
140
138
  (a) += ((k) + (t) + H((b), (c), (d))); \
141
- (a) = ROTATE(a, s); \
139
+ (a) = CRYPTO_rotl_u32(a, s); \
142
140
  (a) += (b); \
143
141
  } while (0)
144
142
 
145
143
  #define R3(a, b, c, d, k, s, t) \
146
144
  do { \
147
145
  (a) += ((k) + (t) + I((b), (c), (d))); \
148
- (a) = ROTATE(a, s); \
146
+ (a) = CRYPTO_rotl_u32(a, s); \
149
147
  (a) += (b); \
150
148
  } while (0)
151
149
 
@@ -280,7 +278,6 @@ static void md5_block_data_order(uint32_t *state, const uint8_t *data,
280
278
  #undef G
281
279
  #undef H
282
280
  #undef I
283
- #undef ROTATE
284
281
  #undef R0
285
282
  #undef R1
286
283
  #undef R2
@@ -193,7 +193,7 @@ static void gcm_mul64_nohw(uint64_t *out_lo, uint64_t *out_hi, uint64_t a,
193
193
  #endif // BORINGSSL_HAS_UINT128
194
194
 
195
195
  void gcm_init_nohw(u128 Htable[16], const uint64_t Xi[2]) {
196
- // We implement GHASH in terms of POLYVAL, as described in RFC8452. This
196
+ // We implement GHASH in terms of POLYVAL, as described in RFC 8452. This
197
197
  // avoids a shift by 1 in the multiplication, needed to account for bit
198
198
  // reversal losing a bit after multiplication, that is,
199
199
  // rev128(X) * rev128(Y) = rev255(X*Y).
@@ -356,7 +356,7 @@ void RAND_bytes_with_additional_data(uint8_t *out, size_t out_len,
356
356
  int used_cpu;
357
357
  rand_get_seed(state, seed, &used_cpu);
358
358
 
359
- uint8_t personalization[CTR_DRBG_ENTROPY_LEN];
359
+ uint8_t personalization[CTR_DRBG_ENTROPY_LEN] = {0};
360
360
  size_t personalization_len = 0;
361
361
  #if defined(OPENSSL_URANDOM)
362
362
  // If we used RDRAND, also opportunistically read from the system. This
@@ -206,6 +206,12 @@ void RSA_get0_factors(const RSA *rsa, const BIGNUM **out_p,
206
206
  }
207
207
  }
208
208
 
209
+ const RSA_PSS_PARAMS *RSA_get0_pss_params(const RSA *rsa) {
210
+ // We do not support the id-RSASSA-PSS key encoding. If we add support later,
211
+ // the |maskHash| field should be filled in for OpenSSL compatibility.
212
+ return NULL;
213
+ }
214
+
209
215
  void RSA_get0_crt_params(const RSA *rsa, const BIGNUM **out_dmp1,
210
216
  const BIGNUM **out_dmq1, const BIGNUM **out_iqmp) {
211
217
  if (out_dmp1 != NULL) {
@@ -657,7 +663,8 @@ err:
657
663
  }
658
664
 
659
665
  static int check_mod_inverse(int *out_ok, const BIGNUM *a, const BIGNUM *ainv,
660
- const BIGNUM *m, BN_CTX *ctx) {
666
+ const BIGNUM *m, unsigned m_min_bits,
667
+ BN_CTX *ctx) {
661
668
  if (BN_is_negative(ainv) || BN_cmp(ainv, m) >= 0) {
662
669
  *out_ok = 0;
663
670
  return 1;
@@ -670,7 +677,7 @@ static int check_mod_inverse(int *out_ok, const BIGNUM *a, const BIGNUM *ainv,
670
677
  BIGNUM *tmp = BN_CTX_get(ctx);
671
678
  int ret = tmp != NULL &&
672
679
  bn_mul_consttime(tmp, a, ainv, ctx) &&
673
- bn_div_consttime(NULL, tmp, tmp, m, ctx);
680
+ bn_div_consttime(NULL, tmp, tmp, m, m_min_bits, ctx);
674
681
  if (ret) {
675
682
  *out_ok = BN_is_one(tmp);
676
683
  }
@@ -750,10 +757,15 @@ int RSA_check_key(const RSA *key) {
750
757
  // simply check that d * e is one mod p-1 and mod q-1. Note d and e were bound
751
758
  // by earlier checks in this function.
752
759
  if (!bn_usub_consttime(&pm1, key->p, BN_value_one()) ||
753
- !bn_usub_consttime(&qm1, key->q, BN_value_one()) ||
754
- !bn_mul_consttime(&de, key->d, key->e, ctx) ||
755
- !bn_div_consttime(NULL, &tmp, &de, &pm1, ctx) ||
756
- !bn_div_consttime(NULL, &de, &de, &qm1, ctx)) {
760
+ !bn_usub_consttime(&qm1, key->q, BN_value_one())) {
761
+ OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN);
762
+ goto out;
763
+ }
764
+ const unsigned pm1_bits = BN_num_bits(&pm1);
765
+ const unsigned qm1_bits = BN_num_bits(&qm1);
766
+ if (!bn_mul_consttime(&de, key->d, key->e, ctx) ||
767
+ !bn_div_consttime(NULL, &tmp, &de, &pm1, pm1_bits, ctx) ||
768
+ !bn_div_consttime(NULL, &de, &de, &qm1, qm1_bits, ctx)) {
757
769
  OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN);
758
770
  goto out;
759
771
  }
@@ -772,9 +784,12 @@ int RSA_check_key(const RSA *key) {
772
784
 
773
785
  if (has_crt_values) {
774
786
  int dmp1_ok, dmq1_ok, iqmp_ok;
775
- if (!check_mod_inverse(&dmp1_ok, key->e, key->dmp1, &pm1, ctx) ||
776
- !check_mod_inverse(&dmq1_ok, key->e, key->dmq1, &qm1, ctx) ||
777
- !check_mod_inverse(&iqmp_ok, key->q, key->iqmp, key->p, ctx)) {
787
+ if (!check_mod_inverse(&dmp1_ok, key->e, key->dmp1, &pm1, pm1_bits, ctx) ||
788
+ !check_mod_inverse(&dmq1_ok, key->e, key->dmq1, &qm1, qm1_bits, ctx) ||
789
+ // |p| is odd, so |pm1| and |p| have the same bit width. If they didn't,
790
+ // we only need a lower bound anyway.
791
+ !check_mod_inverse(&iqmp_ok, key->q, key->iqmp, key->p, pm1_bits,
792
+ ctx)) {
778
793
  OPENSSL_PUT_ERROR(RSA, ERR_LIB_BN);
779
794
  goto out;
780
795
  }
@@ -1262,12 +1262,14 @@ static int rsa_generate_key_impl(RSA *rsa, int bits, const BIGNUM *e_value,
1262
1262
  // values for d.
1263
1263
  } while (BN_cmp(rsa->d, pow2_prime_bits) <= 0);
1264
1264
 
1265
+ assert(BN_num_bits(pm1) == (unsigned)prime_bits);
1266
+ assert(BN_num_bits(qm1) == (unsigned)prime_bits);
1265
1267
  if (// Calculate n.
1266
1268
  !bn_mul_consttime(rsa->n, rsa->p, rsa->q, ctx) ||
1267
1269
  // Calculate d mod (p-1).
1268
- !bn_div_consttime(NULL, rsa->dmp1, rsa->d, pm1, ctx) ||
1270
+ !bn_div_consttime(NULL, rsa->dmp1, rsa->d, pm1, prime_bits, ctx) ||
1269
1271
  // Calculate d mod (q-1)
1270
- !bn_div_consttime(NULL, rsa->dmq1, rsa->d, qm1, ctx)) {
1272
+ !bn_div_consttime(NULL, rsa->dmq1, rsa->d, qm1, prime_bits, ctx)) {
1271
1273
  goto bn_err;
1272
1274
  }
1273
1275
  bn_set_minimal_width(rsa->n);
@@ -111,11 +111,10 @@ int SHA1_Final(uint8_t out[SHA_DIGEST_LENGTH], SHA_CTX *c) {
111
111
  return 1;
112
112
  }
113
113
 
114
- #define ROTATE(a, n) (((a) << (n)) | ((a) >> (32 - (n))))
115
- #define Xupdate(a, ix, ia, ib, ic, id) \
116
- do { \
117
- (a) = ((ia) ^ (ib) ^ (ic) ^ (id)); \
118
- (ix) = (a) = ROTATE((a), 1); \
114
+ #define Xupdate(a, ix, ia, ib, ic, id) \
115
+ do { \
116
+ (a) = ((ia) ^ (ib) ^ (ic) ^ (id)); \
117
+ (ix) = (a) = CRYPTO_rotl_u32((a), 1); \
119
118
  } while (0)
120
119
 
121
120
  #define K_00_19 0x5a827999UL
@@ -133,45 +132,47 @@ int SHA1_Final(uint8_t out[SHA_DIGEST_LENGTH], SHA_CTX *c) {
133
132
  #define F_40_59(b, c, d) (((b) & (c)) | (((b) | (c)) & (d)))
134
133
  #define F_60_79(b, c, d) F_20_39(b, c, d)
135
134
 
136
- #define BODY_00_15(i, a, b, c, d, e, f, xi) \
137
- do { \
138
- (f) = (xi) + (e) + K_00_19 + ROTATE((a), 5) + F_00_19((b), (c), (d)); \
139
- (b) = ROTATE((b), 30); \
135
+ #define BODY_00_15(i, a, b, c, d, e, f, xi) \
136
+ do { \
137
+ (f) = (xi) + (e) + K_00_19 + CRYPTO_rotl_u32((a), 5) + \
138
+ F_00_19((b), (c), (d)); \
139
+ (b) = CRYPTO_rotl_u32((b), 30); \
140
140
  } while (0)
141
141
 
142
- #define BODY_16_19(i, a, b, c, d, e, f, xi, xa, xb, xc, xd) \
143
- do { \
144
- Xupdate(f, xi, xa, xb, xc, xd); \
145
- (f) += (e) + K_00_19 + ROTATE((a), 5) + F_00_19((b), (c), (d)); \
146
- (b) = ROTATE((b), 30); \
142
+ #define BODY_16_19(i, a, b, c, d, e, f, xi, xa, xb, xc, xd) \
143
+ do { \
144
+ Xupdate(f, xi, xa, xb, xc, xd); \
145
+ (f) += (e) + K_00_19 + CRYPTO_rotl_u32((a), 5) + F_00_19((b), (c), (d)); \
146
+ (b) = CRYPTO_rotl_u32((b), 30); \
147
147
  } while (0)
148
148
 
149
- #define BODY_20_31(i, a, b, c, d, e, f, xi, xa, xb, xc, xd) \
150
- do { \
151
- Xupdate(f, xi, xa, xb, xc, xd); \
152
- (f) += (e) + K_20_39 + ROTATE((a), 5) + F_20_39((b), (c), (d)); \
153
- (b) = ROTATE((b), 30); \
149
+ #define BODY_20_31(i, a, b, c, d, e, f, xi, xa, xb, xc, xd) \
150
+ do { \
151
+ Xupdate(f, xi, xa, xb, xc, xd); \
152
+ (f) += (e) + K_20_39 + CRYPTO_rotl_u32((a), 5) + F_20_39((b), (c), (d)); \
153
+ (b) = CRYPTO_rotl_u32((b), 30); \
154
154
  } while (0)
155
155
 
156
- #define BODY_32_39(i, a, b, c, d, e, f, xa, xb, xc, xd) \
157
- do { \
158
- Xupdate(f, xa, xa, xb, xc, xd); \
159
- (f) += (e) + K_20_39 + ROTATE((a), 5) + F_20_39((b), (c), (d)); \
160
- (b) = ROTATE((b), 30); \
156
+ #define BODY_32_39(i, a, b, c, d, e, f, xa, xb, xc, xd) \
157
+ do { \
158
+ Xupdate(f, xa, xa, xb, xc, xd); \
159
+ (f) += (e) + K_20_39 + CRYPTO_rotl_u32((a), 5) + F_20_39((b), (c), (d)); \
160
+ (b) = CRYPTO_rotl_u32((b), 30); \
161
161
  } while (0)
162
162
 
163
- #define BODY_40_59(i, a, b, c, d, e, f, xa, xb, xc, xd) \
164
- do { \
165
- Xupdate(f, xa, xa, xb, xc, xd); \
166
- (f) += (e) + K_40_59 + ROTATE((a), 5) + F_40_59((b), (c), (d)); \
167
- (b) = ROTATE((b), 30); \
163
+ #define BODY_40_59(i, a, b, c, d, e, f, xa, xb, xc, xd) \
164
+ do { \
165
+ Xupdate(f, xa, xa, xb, xc, xd); \
166
+ (f) += (e) + K_40_59 + CRYPTO_rotl_u32((a), 5) + F_40_59((b), (c), (d)); \
167
+ (b) = CRYPTO_rotl_u32((b), 30); \
168
168
  } while (0)
169
169
 
170
- #define BODY_60_79(i, a, b, c, d, e, f, xa, xb, xc, xd) \
171
- do { \
172
- Xupdate(f, xa, xa, xb, xc, xd); \
173
- (f) = (xa) + (e) + K_60_79 + ROTATE((a), 5) + F_60_79((b), (c), (d)); \
174
- (b) = ROTATE((b), 30); \
170
+ #define BODY_60_79(i, a, b, c, d, e, f, xa, xb, xc, xd) \
171
+ do { \
172
+ Xupdate(f, xa, xa, xb, xc, xd); \
173
+ (f) = (xa) + (e) + K_60_79 + CRYPTO_rotl_u32((a), 5) + \
174
+ F_60_79((b), (c), (d)); \
175
+ (b) = CRYPTO_rotl_u32((b), 30); \
175
176
  } while (0)
176
177
 
177
178
  #ifdef X
@@ -338,7 +339,6 @@ static void sha1_block_data_order(uint32_t *state, const uint8_t *data,
338
339
  }
339
340
  #endif
340
341
 
341
- #undef ROTATE
342
342
  #undef Xupdate
343
343
  #undef K_00_19
344
344
  #undef K_20_39
@@ -184,15 +184,17 @@ static const uint32_t K256[64] = {
184
184
  0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
185
185
  0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL};
186
186
 
187
- #define ROTATE(a, n) (((a) << (n)) | ((a) >> (32 - (n))))
188
-
189
- // FIPS specification refers to right rotations, while our ROTATE macro
190
- // is left one. This is why you might notice that rotation coefficients
191
- // differ from those observed in FIPS document by 32-N...
192
- #define Sigma0(x) (ROTATE((x), 30) ^ ROTATE((x), 19) ^ ROTATE((x), 10))
193
- #define Sigma1(x) (ROTATE((x), 26) ^ ROTATE((x), 21) ^ ROTATE((x), 7))
194
- #define sigma0(x) (ROTATE((x), 25) ^ ROTATE((x), 14) ^ ((x) >> 3))
195
- #define sigma1(x) (ROTATE((x), 15) ^ ROTATE((x), 13) ^ ((x) >> 10))
187
+ // See FIPS 180-4, section 4.1.2.
188
+ #define Sigma0(x) \
189
+ (CRYPTO_rotr_u32((x), 2) ^ CRYPTO_rotr_u32((x), 13) ^ \
190
+ CRYPTO_rotr_u32((x), 22))
191
+ #define Sigma1(x) \
192
+ (CRYPTO_rotr_u32((x), 6) ^ CRYPTO_rotr_u32((x), 11) ^ \
193
+ CRYPTO_rotr_u32((x), 25))
194
+ #define sigma0(x) \
195
+ (CRYPTO_rotr_u32((x), 7) ^ CRYPTO_rotr_u32((x), 18) ^ ((x) >> 3))
196
+ #define sigma1(x) \
197
+ (CRYPTO_rotr_u32((x), 17) ^ CRYPTO_rotr_u32((x), 19) ^ ((x) >> 10))
196
198
 
197
199
  #define Ch(x, y, z) (((x) & (y)) ^ ((~(x)) & (z)))
198
200
  #define Maj(x, y, z) (((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
@@ -309,7 +311,6 @@ void SHA256_TransformBlocks(uint32_t state[8], const uint8_t *data,
309
311
  sha256_block_data_order(state, data, num_blocks);
310
312
  }
311
313
 
312
- #undef ROTATE
313
314
  #undef Sigma0
314
315
  #undef Sigma1
315
316
  #undef sigma0