grpc 1.55.0 → 1.56.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 (374) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -68
  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 +86 -104
  11. data/src/core/ext/filters/client_channel/client_channel.h +6 -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/internal.h +1 -15
  56. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  57. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  58. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  59. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  60. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  61. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  62. data/src/core/ext/xds/xds_api.cc +9 -6
  63. data/src/core/ext/xds/xds_api.h +3 -2
  64. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  65. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  66. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  67. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  68. data/src/core/ext/xds/xds_client.cc +5 -4
  69. data/src/core/ext/xds/xds_client_stats.h +1 -1
  70. data/src/core/ext/xds/xds_cluster.cc +20 -19
  71. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  72. data/src/core/ext/xds/xds_common_types.cc +3 -1
  73. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  74. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  75. data/src/core/ext/xds/xds_http_filters.h +4 -2
  76. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  77. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  78. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  79. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  80. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  81. data/src/core/ext/xds/xds_listener.cc +1 -0
  82. data/src/core/ext/xds/xds_route_config.cc +40 -3
  83. data/src/core/ext/xds/xds_routing.cc +2 -2
  84. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  85. data/src/core/lib/avl/avl.h +5 -0
  86. data/src/core/lib/channel/channel_args.cc +80 -22
  87. data/src/core/lib/channel/channel_args.h +34 -1
  88. data/src/core/lib/channel/channel_trace.cc +16 -12
  89. data/src/core/lib/channel/channelz.cc +159 -132
  90. data/src/core/lib/channel/channelz.h +42 -35
  91. data/src/core/lib/channel/channelz_registry.cc +23 -20
  92. data/src/core/lib/channel/connected_channel.cc +17 -6
  93. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  94. data/src/core/lib/channel/promise_based_filter.h +2 -0
  95. data/src/core/lib/compression/compression_internal.cc +2 -5
  96. data/src/core/lib/config/config_vars.cc +20 -18
  97. data/src/core/lib/config/config_vars.h +4 -4
  98. data/src/core/lib/config/load_config.cc +13 -0
  99. data/src/core/lib/config/load_config.h +6 -0
  100. data/src/core/lib/debug/event_log.h +1 -1
  101. data/src/core/lib/debug/stats_data.h +1 -1
  102. data/src/core/lib/debug/trace.cc +24 -55
  103. data/src/core/lib/debug/trace.h +3 -1
  104. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  105. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  106. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  107. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  108. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  109. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  110. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  111. data/src/core/lib/event_engine/poller.h +2 -2
  112. data/src/core/lib/event_engine/posix.h +4 -0
  113. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  114. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  115. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  116. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
  117. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
  118. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
  119. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
  120. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  121. data/src/core/lib/event_engine/shim.cc +7 -1
  122. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  123. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  124. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  125. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  126. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  127. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  128. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  129. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  130. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  131. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  132. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  133. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  134. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  135. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  136. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  137. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  139. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  140. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  141. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  142. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  143. data/src/core/lib/experiments/config.cc +38 -7
  144. data/src/core/lib/experiments/config.h +16 -0
  145. data/src/core/lib/experiments/experiments.cc +67 -20
  146. data/src/core/lib/experiments/experiments.h +27 -21
  147. data/src/core/lib/gpr/log_internal.h +55 -0
  148. data/src/core/lib/gprpp/crash.cc +10 -0
  149. data/src/core/lib/gprpp/crash.h +3 -0
  150. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  151. data/src/core/lib/gprpp/per_cpu.h +29 -6
  152. data/src/core/lib/gprpp/time.cc +1 -0
  153. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  154. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  155. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  156. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  157. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  158. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  159. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  160. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  161. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  162. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  163. data/src/core/lib/iomgr/socket_windows.h +9 -2
  164. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  165. data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
  166. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  167. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  168. data/src/core/lib/json/json.h +2 -166
  169. data/src/core/lib/json/json_object_loader.cc +8 -9
  170. data/src/core/lib/json/json_object_loader.h +25 -18
  171. data/src/core/lib/json/json_reader.cc +13 -6
  172. data/src/core/lib/json/json_util.cc +6 -11
  173. data/src/core/lib/json/json_writer.cc +7 -8
  174. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  175. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  176. data/src/core/lib/matchers/matchers.cc +3 -4
  177. data/src/core/lib/matchers/matchers.h +2 -1
  178. data/src/core/lib/promise/activity.cc +5 -0
  179. data/src/core/lib/promise/activity.h +10 -0
  180. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  181. data/src/core/lib/promise/party.cc +31 -13
  182. data/src/core/lib/promise/party.h +11 -2
  183. data/src/core/lib/promise/pipe.h +9 -2
  184. data/src/core/lib/promise/prioritized_race.h +95 -0
  185. data/src/core/lib/promise/sleep.cc +2 -1
  186. data/src/core/lib/resolver/server_address.cc +0 -8
  187. data/src/core/lib/resolver/server_address.h +0 -6
  188. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  189. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  190. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  191. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  192. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  193. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  194. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  195. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  196. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  197. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  198. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  199. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  200. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  203. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  204. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  205. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  206. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  207. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  208. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  209. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  210. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  211. data/src/core/lib/security/util/json_util.cc +1 -0
  212. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  213. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  214. data/src/core/lib/surface/call.cc +38 -23
  215. data/src/core/lib/surface/completion_queue.cc +6 -2
  216. data/src/core/lib/surface/version.cc +2 -2
  217. data/src/core/lib/transport/batch_builder.cc +15 -12
  218. data/src/core/lib/transport/batch_builder.h +39 -35
  219. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  220. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  221. data/src/ruby/ext/grpc/extconf.rb +8 -9
  222. data/src/ruby/lib/grpc/version.rb +1 -1
  223. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  224. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  225. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  226. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  227. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  228. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  229. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  230. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  231. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  232. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  233. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  234. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  235. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  236. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  237. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  238. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  239. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  240. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  241. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  242. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  243. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  244. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  245. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  246. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  279. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  280. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  281. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  283. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  284. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  288. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  289. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  303. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  304. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  305. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  306. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  307. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  309. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  310. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  311. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  312. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  313. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  314. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  315. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  316. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  317. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  318. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  319. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  320. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  321. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  322. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  323. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  324. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  325. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  326. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  327. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  328. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  329. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  332. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  333. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  334. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  335. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  336. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  337. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  338. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  339. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  340. data/third_party/cares/cares/include/ares.h +23 -1
  341. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  342. data/third_party/cares/cares/include/ares_rules.h +2 -2
  343. data/third_party/cares/cares/include/ares_version.h +3 -3
  344. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  345. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  346. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  347. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  348. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  349. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  350. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  351. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  352. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  353. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  354. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  355. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  356. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  357. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  358. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  359. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  360. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  361. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  362. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  363. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  364. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  365. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  366. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  367. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  368. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  369. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  370. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  371. metadata +48 -12
  372. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  373. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  374. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -74,53 +74,72 @@
74
74
 
75
75
 
76
76
  int rsa_check_public_key(const RSA *rsa) {
77
- if (rsa->n == NULL || rsa->e == NULL) {
77
+ if (rsa->n == NULL) {
78
78
  OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING);
79
79
  return 0;
80
80
  }
81
81
 
82
+ // TODO(davidben): 16384-bit RSA is huge. Can we bring this down to a limit of
83
+ // 8192-bit?
82
84
  unsigned n_bits = BN_num_bits(rsa->n);
83
85
  if (n_bits > 16 * 1024) {
84
86
  OPENSSL_PUT_ERROR(RSA, RSA_R_MODULUS_TOO_LARGE);
85
87
  return 0;
86
88
  }
87
89
 
88
- // RSA moduli must be odd. In addition to being necessary for RSA in general,
89
- // we cannot setup Montgomery reduction with even moduli.
90
- if (!BN_is_odd(rsa->n)) {
91
- OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_RSA_PARAMETERS);
90
+ // TODO(crbug.com/boringssl/607): Raise this limit. 512-bit RSA was factored
91
+ // in 1999.
92
+ if (n_bits < 512) {
93
+ OPENSSL_PUT_ERROR(RSA, RSA_R_KEY_SIZE_TOO_SMALL);
92
94
  return 0;
93
95
  }
94
96
 
95
- // Mitigate DoS attacks by limiting the exponent size. 33 bits was chosen as
96
- // the limit based on the recommendations in [1] and [2]. Windows CryptoAPI
97
- // doesn't support values larger than 32 bits [3], so it is unlikely that
98
- // exponents larger than 32 bits are being used for anything Windows commonly
99
- // does.
100
- //
101
- // [1] https://www.imperialviolet.org/2012/03/16/rsae.html
102
- // [2] https://www.imperialviolet.org/2012/03/17/rsados.html
103
- // [3] https://msdn.microsoft.com/en-us/library/aa387685(VS.85).aspx
104
- static const unsigned kMaxExponentBits = 33;
105
- unsigned e_bits = BN_num_bits(rsa->e);
106
- if (e_bits > kMaxExponentBits ||
107
- // Additionally reject e = 1 or even e. e must be odd to be relatively
108
- // prime with phi(n).
109
- e_bits < 2 ||
110
- !BN_is_odd(rsa->e)) {
111
- OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_E_VALUE);
97
+ // RSA moduli must be positive and odd. In addition to being necessary for RSA
98
+ // in general, we cannot setup Montgomery reduction with even moduli.
99
+ if (!BN_is_odd(rsa->n) || BN_is_negative(rsa->n)) {
100
+ OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_RSA_PARAMETERS);
112
101
  return 0;
113
102
  }
114
103
 
115
- // Verify |n > e|. Comparing |n_bits| to |kMaxExponentBits| is a small
116
- // shortcut to comparing |n| and |e| directly. In reality, |kMaxExponentBits|
117
- // is much smaller than the minimum RSA key size that any application should
118
- // accept.
119
- if (n_bits <= kMaxExponentBits) {
120
- OPENSSL_PUT_ERROR(RSA, RSA_R_KEY_SIZE_TOO_SMALL);
104
+ static const unsigned kMaxExponentBits = 33;
105
+ if (rsa->e != NULL) {
106
+ // Reject e = 1, negative e, and even e. e must be odd to be relatively
107
+ // prime with phi(n).
108
+ unsigned e_bits = BN_num_bits(rsa->e);
109
+ if (e_bits < 2 || BN_is_negative(rsa->e) || !BN_is_odd(rsa->e)) {
110
+ OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_E_VALUE);
111
+ return 0;
112
+ }
113
+ if (rsa->flags & RSA_FLAG_LARGE_PUBLIC_EXPONENT) {
114
+ // The caller has requested disabling DoS protections. Still, e must be
115
+ // less than n.
116
+ if (BN_ucmp(rsa->n, rsa->e) <= 0) {
117
+ OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_E_VALUE);
118
+ return 0;
119
+ }
120
+ } else {
121
+ // Mitigate DoS attacks by limiting the exponent size. 33 bits was chosen
122
+ // as the limit based on the recommendations in [1] and [2]. Windows
123
+ // CryptoAPI doesn't support values larger than 32 bits [3], so it is
124
+ // unlikely that exponents larger than 32 bits are being used for anything
125
+ // Windows commonly does.
126
+ //
127
+ // [1] https://www.imperialviolet.org/2012/03/16/rsae.html
128
+ // [2] https://www.imperialviolet.org/2012/03/17/rsados.html
129
+ // [3] https://msdn.microsoft.com/en-us/library/aa387685(VS.85).aspx
130
+ if (e_bits > kMaxExponentBits) {
131
+ OPENSSL_PUT_ERROR(RSA, RSA_R_BAD_E_VALUE);
132
+ return 0;
133
+ }
134
+
135
+ // The upper bound on |e_bits| and lower bound on |n_bits| imply e is
136
+ // bounded by n.
137
+ assert(BN_ucmp(rsa->n, rsa->e) > 0);
138
+ }
139
+ } else if (!(rsa->flags & RSA_FLAG_NO_PUBLIC_EXPONENT)) {
140
+ OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING);
121
141
  return 0;
122
142
  }
123
- assert(BN_ucmp(rsa->n, rsa->e) > 0);
124
143
 
125
144
  return 1;
126
145
  }
@@ -160,6 +179,11 @@ static int freeze_private_key(RSA *rsa, BN_CTX *ctx) {
160
179
  goto err;
161
180
  }
162
181
 
182
+ // Check the public components are within DoS bounds.
183
+ if (!rsa_check_public_key(rsa)) {
184
+ goto err;
185
+ }
186
+
163
187
  // Pre-compute various intermediate values, as well as copies of private
164
188
  // exponents with correct widths. Note that other threads may concurrently
165
189
  // read from |rsa->n|, |rsa->e|, etc., so any fixes must be in separate
@@ -183,7 +207,7 @@ static int freeze_private_key(RSA *rsa, BN_CTX *ctx) {
183
207
  goto err;
184
208
  }
185
209
 
186
- if (rsa->p != NULL && rsa->q != NULL) {
210
+ if (rsa->e != NULL && rsa->p != NULL && rsa->q != NULL) {
187
211
  // TODO: p and q are also CONSTTIME_SECRET but not yet marked as such
188
212
  // because the Montgomery code does things like test whether or not values
189
213
  // are zero. So the secret marking probably needs to happen inside that
@@ -262,96 +286,38 @@ err:
262
286
  return ret;
263
287
  }
264
288
 
265
- size_t rsa_default_size(const RSA *rsa) {
266
- return BN_num_bytes(rsa->n);
267
- }
268
-
269
- int RSA_encrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
270
- const uint8_t *in, size_t in_len, int padding) {
271
- boringssl_ensure_rsa_self_test();
289
+ void rsa_invalidate_key(RSA *rsa) {
290
+ rsa->private_key_frozen = 0;
272
291
 
273
- if (!rsa_check_public_key(rsa)) {
274
- return 0;
275
- }
292
+ BN_MONT_CTX_free(rsa->mont_n);
293
+ rsa->mont_n = NULL;
294
+ BN_MONT_CTX_free(rsa->mont_p);
295
+ rsa->mont_p = NULL;
296
+ BN_MONT_CTX_free(rsa->mont_q);
297
+ rsa->mont_q = NULL;
276
298
 
277
- const unsigned rsa_size = RSA_size(rsa);
278
- BIGNUM *f, *result;
279
- uint8_t *buf = NULL;
280
- BN_CTX *ctx = NULL;
281
- int i, ret = 0;
299
+ BN_free(rsa->d_fixed);
300
+ rsa->d_fixed = NULL;
301
+ BN_free(rsa->dmp1_fixed);
302
+ rsa->dmp1_fixed = NULL;
303
+ BN_free(rsa->dmq1_fixed);
304
+ rsa->dmq1_fixed = NULL;
305
+ BN_free(rsa->inv_small_mod_large_mont);
306
+ rsa->inv_small_mod_large_mont = NULL;
282
307
 
283
- if (max_out < rsa_size) {
284
- OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL);
285
- return 0;
308
+ for (size_t i = 0; i < rsa->num_blindings; i++) {
309
+ BN_BLINDING_free(rsa->blindings[i]);
286
310
  }
311
+ OPENSSL_free(rsa->blindings);
312
+ rsa->blindings = NULL;
313
+ rsa->num_blindings = 0;
314
+ OPENSSL_free(rsa->blindings_inuse);
315
+ rsa->blindings_inuse = NULL;
316
+ rsa->blinding_fork_generation = 0;
317
+ }
287
318
 
288
- ctx = BN_CTX_new();
289
- if (ctx == NULL) {
290
- goto err;
291
- }
292
-
293
- BN_CTX_start(ctx);
294
- f = BN_CTX_get(ctx);
295
- result = BN_CTX_get(ctx);
296
- buf = OPENSSL_malloc(rsa_size);
297
- if (!f || !result || !buf) {
298
- goto err;
299
- }
300
-
301
- switch (padding) {
302
- case RSA_PKCS1_PADDING:
303
- i = RSA_padding_add_PKCS1_type_2(buf, rsa_size, in, in_len);
304
- break;
305
- case RSA_PKCS1_OAEP_PADDING:
306
- // Use the default parameters: SHA-1 for both hashes and no label.
307
- i = RSA_padding_add_PKCS1_OAEP_mgf1(buf, rsa_size, in, in_len,
308
- NULL, 0, NULL, NULL);
309
- break;
310
- case RSA_NO_PADDING:
311
- i = RSA_padding_add_none(buf, rsa_size, in, in_len);
312
- break;
313
- default:
314
- OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE);
315
- goto err;
316
- }
317
-
318
- if (i <= 0) {
319
- goto err;
320
- }
321
-
322
- if (BN_bin2bn(buf, rsa_size, f) == NULL) {
323
- goto err;
324
- }
325
-
326
- if (BN_ucmp(f, rsa->n) >= 0) {
327
- // usually the padding functions would catch this
328
- OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_TOO_LARGE_FOR_MODULUS);
329
- goto err;
330
- }
331
-
332
- if (!BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx) ||
333
- !BN_mod_exp_mont(result, f, rsa->e, &rsa->mont_n->N, ctx, rsa->mont_n)) {
334
- goto err;
335
- }
336
-
337
- // put in leading 0 bytes if the number is less than the length of the
338
- // modulus
339
- if (!BN_bn2bin_padded(out, rsa_size, result)) {
340
- OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
341
- goto err;
342
- }
343
-
344
- *out_len = rsa_size;
345
- ret = 1;
346
-
347
- err:
348
- if (ctx != NULL) {
349
- BN_CTX_end(ctx);
350
- BN_CTX_free(ctx);
351
- }
352
- OPENSSL_free(buf);
353
-
354
- return ret;
319
+ size_t rsa_default_size(const RSA *rsa) {
320
+ return BN_num_bytes(rsa->n);
355
321
  }
356
322
 
357
323
  // MAX_BLINDINGS_PER_RSA defines the maximum number of cached BN_BLINDINGs per
@@ -516,7 +482,7 @@ int rsa_default_sign_raw(RSA *rsa, size_t *out_len, uint8_t *out,
516
482
  goto err;
517
483
  }
518
484
 
519
- if (!RSA_private_transform(rsa, out, buf, rsa_size)) {
485
+ if (!rsa_private_transform_no_self_test(rsa, out, buf, rsa_size)) {
520
486
  goto err;
521
487
  }
522
488
 
@@ -530,77 +496,17 @@ err:
530
496
  return ret;
531
497
  }
532
498
 
533
- int rsa_default_decrypt(RSA *rsa, size_t *out_len, uint8_t *out, size_t max_out,
534
- const uint8_t *in, size_t in_len, int padding) {
535
- boringssl_ensure_rsa_self_test();
536
-
537
- const unsigned rsa_size = RSA_size(rsa);
538
- uint8_t *buf = NULL;
539
- int ret = 0;
540
-
541
- if (max_out < rsa_size) {
542
- OPENSSL_PUT_ERROR(RSA, RSA_R_OUTPUT_BUFFER_TOO_SMALL);
543
- return 0;
544
- }
545
-
546
- if (padding == RSA_NO_PADDING) {
547
- buf = out;
548
- } else {
549
- // Allocate a temporary buffer to hold the padded plaintext.
550
- buf = OPENSSL_malloc(rsa_size);
551
- if (buf == NULL) {
552
- goto err;
553
- }
554
- }
555
-
556
- if (in_len != rsa_size) {
557
- OPENSSL_PUT_ERROR(RSA, RSA_R_DATA_LEN_NOT_EQUAL_TO_MOD_LEN);
558
- goto err;
559
- }
560
-
561
- if (!RSA_private_transform(rsa, buf, in, rsa_size)) {
562
- goto err;
563
- }
564
-
565
- switch (padding) {
566
- case RSA_PKCS1_PADDING:
567
- ret =
568
- RSA_padding_check_PKCS1_type_2(out, out_len, rsa_size, buf, rsa_size);
569
- break;
570
- case RSA_PKCS1_OAEP_PADDING:
571
- // Use the default parameters: SHA-1 for both hashes and no label.
572
- ret = RSA_padding_check_PKCS1_OAEP_mgf1(out, out_len, rsa_size, buf,
573
- rsa_size, NULL, 0, NULL, NULL);
574
- break;
575
- case RSA_NO_PADDING:
576
- *out_len = rsa_size;
577
- ret = 1;
578
- break;
579
- default:
580
- OPENSSL_PUT_ERROR(RSA, RSA_R_UNKNOWN_PADDING_TYPE);
581
- goto err;
582
- }
583
-
584
- CONSTTIME_DECLASSIFY(&ret, sizeof(ret));
585
- if (!ret) {
586
- OPENSSL_PUT_ERROR(RSA, RSA_R_PADDING_CHECK_FAILED);
587
- } else {
588
- CONSTTIME_DECLASSIFY(out, *out_len);
589
- }
590
-
591
- err:
592
- if (padding != RSA_NO_PADDING) {
593
- OPENSSL_free(buf);
594
- }
595
-
596
- return ret;
597
- }
598
499
 
599
500
  static int mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa, BN_CTX *ctx);
600
501
 
601
502
  int rsa_verify_raw_no_self_test(RSA *rsa, size_t *out_len, uint8_t *out,
602
503
  size_t max_out, const uint8_t *in,
603
504
  size_t in_len, int padding) {
505
+ if (rsa->n == NULL || rsa->e == NULL) {
506
+ OPENSSL_PUT_ERROR(RSA, RSA_R_VALUE_MISSING);
507
+ return 0;
508
+ }
509
+
604
510
  if (!rsa_check_public_key(rsa)) {
605
511
  return 0;
606
512
  }
@@ -740,13 +646,18 @@ int rsa_default_private_transform(RSA *rsa, uint8_t *out, const uint8_t *in,
740
646
  goto err;
741
647
  }
742
648
 
743
- const int do_blinding = (rsa->flags & RSA_FLAG_NO_BLINDING) == 0;
649
+ const int do_blinding =
650
+ (rsa->flags & (RSA_FLAG_NO_BLINDING | RSA_FLAG_NO_PUBLIC_EXPONENT)) == 0;
744
651
 
745
652
  if (rsa->e == NULL && do_blinding) {
746
653
  // We cannot do blinding or verification without |e|, and continuing without
747
654
  // those countermeasures is dangerous. However, the Java/Android RSA API
748
655
  // requires support for keys where only |d| and |n| (and not |e|) are known.
749
- // The callers that require that bad behavior set |RSA_FLAG_NO_BLINDING|.
656
+ // The callers that require that bad behavior must set
657
+ // |RSA_FLAG_NO_BLINDING| or use |RSA_new_private_key_no_e|.
658
+ //
659
+ // TODO(davidben): Update this comment when Conscrypt is updated to use
660
+ // |RSA_new_private_key_no_e|.
750
661
  OPENSSL_PUT_ERROR(RSA, RSA_R_NO_PUBLIC_EXPONENT);
751
662
  goto err;
752
663
  }
@@ -1382,6 +1293,7 @@ static int RSA_generate_key_ex_maybe_fips(RSA *rsa, int bits,
1382
1293
  goto out;
1383
1294
  }
1384
1295
 
1296
+ rsa_invalidate_key(rsa);
1385
1297
  replace_bignum(&rsa->n, &tmp->n);
1386
1298
  replace_bignum(&rsa->e, &tmp->e);
1387
1299
  replace_bignum(&rsa->d, &tmp->d);
@@ -26,6 +26,7 @@
26
26
  #include <openssl/ec.h>
27
27
  #include <openssl/ecdsa.h>
28
28
  #include <openssl/ec_key.h>
29
+ #include <openssl/hkdf.h>
29
30
  #include <openssl/hmac.h>
30
31
  #include <openssl/nid.h>
31
32
  #include <openssl/rsa.h>
@@ -946,6 +947,76 @@ static int boringssl_self_test_fast(void) {
946
947
  goto err;
947
948
  }
948
949
 
950
+ // TLS v1.3: derives a dummy client-early-traffic secret.
951
+ static const uint8_t kTLS13Secret[32] = {
952
+ 0x02, 0x4a, 0x0d, 0x80, 0xf3, 0x57, 0xf2, 0x49, 0x9a, 0x12, 0x44,
953
+ 0xda, 0xc2, 0x6d, 0xab, 0x66, 0xfc, 0x13, 0xed, 0x85, 0xfc, 0xa7,
954
+ 0x1d, 0xac, 0xe1, 0x46, 0x21, 0x11, 0x19, 0x52, 0x58, 0x74,
955
+ };
956
+ static const uint8_t kTLS13Salt[16] = {
957
+ 0x54, 0x61, 0x11, 0x36, 0x75, 0x91, 0xf0, 0xf8,
958
+ 0x92, 0xec, 0x70, 0xbd, 0x78, 0x2a, 0xef, 0x61,
959
+ };
960
+ static const uint8_t kTLS13Label[] = "c e traffic";
961
+ static const uint8_t kTLS13ClientHelloHash[32] = {
962
+ 0x1d, 0xe8, 0x67, 0xed, 0x93, 0x6a, 0x73, 0x65, 0x9b, 0x05, 0xcf,
963
+ 0x8a, 0x22, 0x77, 0xb7, 0x37, 0x29, 0xf2, 0x44, 0x94, 0x81, 0x6a,
964
+ 0x83, 0x33, 0x7f, 0x09, 0xbb, 0x6c, 0xc2, 0x6f, 0x48, 0x9c,
965
+ };
966
+ static const uint8_t kTLS13ExpandLabelOutput[32] = {
967
+ 0x62, 0x91, 0x52, 0x90, 0x2e, 0xc9, 0xcf, 0x9c, 0x5f, 0x1e, 0x0a,
968
+ 0xb7, 0x00, 0x33, 0x42, 0x24, 0xc4, 0xe3, 0xba, 0x01, 0x40, 0x32,
969
+ 0x06, 0xab, 0x09, 0x23, 0x8a, 0xdd, 0x01, 0xa4, 0x05, 0xcd,
970
+ };
971
+ uint8_t tls13_extract_output[32];
972
+ size_t tls13_extract_output_len;
973
+ uint8_t tls13_expand_label_output[32];
974
+ if (!HKDF_extract(tls13_extract_output, &tls13_extract_output_len,
975
+ EVP_sha256(), kTLS13Secret, sizeof(kTLS13Secret),
976
+ kTLS13Salt, sizeof(kTLS13Salt)) ||
977
+ tls13_extract_output_len != sizeof(tls13_extract_output) ||
978
+ !CRYPTO_tls13_hkdf_expand_label(
979
+ tls13_expand_label_output, sizeof(tls13_expand_label_output),
980
+ EVP_sha256(), tls13_extract_output, sizeof(tls13_extract_output),
981
+ kTLS13Label, sizeof(kTLS13Label) - 1, kTLS13ClientHelloHash,
982
+ sizeof(kTLS13ClientHelloHash)) ||
983
+ !check_test(kTLS13ExpandLabelOutput, tls13_expand_label_output,
984
+ sizeof(kTLS13ExpandLabelOutput),
985
+ "CRYPTO_tls13_hkdf_expand_label")) {
986
+ fprintf(stderr, "TLSv1.3 KDF failed.\n");
987
+ goto err;
988
+ }
989
+
990
+ // HKDF
991
+ static const uint8_t kHKDFSecret[32] = {
992
+ 0x68, 0x67, 0x85, 0x04, 0xb9, 0xb3, 0xad, 0xd1, 0x7d, 0x59, 0x67,
993
+ 0xa1, 0xa7, 0xbd, 0x37, 0x99, 0x3f, 0xd8, 0xa3, 0x3c, 0xe7, 0x30,
994
+ 0x30, 0x71, 0xf3, 0x9c, 0x09, 0x6d, 0x16, 0x35, 0xb3, 0xc9,
995
+ };
996
+ static const uint8_t kHKDFSalt[32] = {
997
+ 0x8a, 0xab, 0x18, 0xb4, 0x9b, 0x0a, 0x17, 0xf9, 0xe8, 0xe6, 0x97,
998
+ 0x1a, 0x3d, 0xff, 0xda, 0x9b, 0x26, 0x8b, 0x3d, 0x17, 0x78, 0x0a,
999
+ 0xb3, 0xea, 0x65, 0xdb, 0x2a, 0xc0, 0x29, 0x9c, 0xfa, 0x72,
1000
+ };
1001
+ static const uint8_t kHKDFInfo[32] = {
1002
+ 0xe5, 0x6f, 0xf9, 0xe1, 0x18, 0x5e, 0x64, 0x8c, 0x6c, 0x8f, 0xee,
1003
+ 0xc6, 0x93, 0x5a, 0xc5, 0x14, 0x8c, 0xf3, 0xd9, 0x78, 0xd2, 0x3a,
1004
+ 0x86, 0xdd, 0x01, 0xdf, 0xb9, 0xe9, 0x5e, 0xe5, 0x1a, 0x56,
1005
+ };
1006
+ static const uint8_t kHKDFOutput[32] = {
1007
+ 0xa6, 0x29, 0xb4, 0xd7, 0xf4, 0xc1, 0x16, 0x64, 0x71, 0x5e, 0xa4,
1008
+ 0xa8, 0xe6, 0x60, 0x8c, 0xf3, 0xc1, 0xa5, 0x03, 0xe2, 0x22, 0xf9,
1009
+ 0x89, 0xe2, 0x12, 0x18, 0xbe, 0xef, 0x16, 0x86, 0xe0, 0xec,
1010
+ };
1011
+ uint8_t hkdf_output[sizeof(kHKDFOutput)];
1012
+ if (!HKDF(hkdf_output, sizeof(hkdf_output), EVP_sha256(), kHKDFSecret,
1013
+ sizeof(kHKDFSecret), kHKDFSalt, sizeof(kHKDFSalt), kHKDFInfo,
1014
+ sizeof(kHKDFInfo)) ||
1015
+ !check_test(kHKDFOutput, hkdf_output, sizeof(kHKDFOutput), "HKDF")) {
1016
+ fprintf(stderr, "HKDF failed.\n");
1017
+ goto err;
1018
+ }
1019
+
949
1020
  ret = 1;
950
1021
 
951
1022
  err:
@@ -31,6 +31,14 @@ OPENSSL_EXPORT int CRYPTO_tls1_prf(const EVP_MD *digest,
31
31
  const uint8_t *seed1, size_t seed1_len,
32
32
  const uint8_t *seed2, size_t seed2_len);
33
33
 
34
+ // CRYPTO_tls13_hkdf_expand_label computes the TLS 1.3 KDF function of the same
35
+ // name. See https://www.rfc-editor.org/rfc/rfc8446#section-7.1.
36
+ OPENSSL_EXPORT int CRYPTO_tls13_hkdf_expand_label(
37
+ uint8_t *out, size_t out_len, const EVP_MD *digest, //
38
+ const uint8_t *secret, size_t secret_len, //
39
+ const uint8_t *label, size_t label_len, //
40
+ const uint8_t *hash, size_t hash_len);
41
+
34
42
 
35
43
  #if defined(__cplusplus)
36
44
  }
@@ -52,7 +52,9 @@
52
52
 
53
53
  #include <assert.h>
54
54
 
55
+ #include <openssl/bytestring.h>
55
56
  #include <openssl/digest.h>
57
+ #include <openssl/hkdf.h>
56
58
  #include <openssl/hmac.h>
57
59
  #include <openssl/mem.h>
58
60
 
@@ -176,3 +178,34 @@ end:
176
178
  }
177
179
  return ret;
178
180
  }
181
+
182
+ int CRYPTO_tls13_hkdf_expand_label(uint8_t *out, size_t out_len,
183
+ const EVP_MD *digest, //
184
+ const uint8_t *secret, size_t secret_len,
185
+ const uint8_t *label, size_t label_len,
186
+ const uint8_t *hash, size_t hash_len) {
187
+ static const uint8_t kProtocolLabel[] = "tls13 ";
188
+ CBB cbb, child;
189
+ uint8_t *hkdf_label = NULL;
190
+ size_t hkdf_label_len;
191
+
192
+ CBB_zero(&cbb);
193
+ if (!CBB_init(&cbb, 2 + 1 + sizeof(kProtocolLabel) - 1 + label_len + 1 +
194
+ hash_len) ||
195
+ !CBB_add_u16(&cbb, out_len) ||
196
+ !CBB_add_u8_length_prefixed(&cbb, &child) ||
197
+ !CBB_add_bytes(&child, kProtocolLabel, sizeof(kProtocolLabel) - 1) ||
198
+ !CBB_add_bytes(&child, label, label_len) ||
199
+ !CBB_add_u8_length_prefixed(&cbb, &child) ||
200
+ !CBB_add_bytes(&child, hash, hash_len) ||
201
+ !CBB_finish(&cbb, &hkdf_label, &hkdf_label_len)) {
202
+ CBB_cleanup(&cbb);
203
+ return 0;
204
+ }
205
+
206
+ const int ret = HKDF_expand(out, out_len, digest, secret, secret_len,
207
+ hkdf_label, hkdf_label_len);
208
+ OPENSSL_free(hkdf_label);
209
+ return ret;
210
+ }
211
+