grpc-flamingo 1.11.0 → 1.15.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (452) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1150 -176
  3. data/etc/roots.pem +40 -196
  4. data/include/grpc/grpc.h +49 -8
  5. data/include/grpc/grpc_security.h +123 -2
  6. data/include/grpc/grpc_security_constants.h +6 -0
  7. data/include/grpc/impl/codegen/fork.h +4 -4
  8. data/include/grpc/impl/codegen/grpc_types.h +26 -5
  9. data/include/grpc/impl/codegen/log.h +112 -0
  10. data/include/grpc/impl/codegen/port_platform.h +55 -4
  11. data/include/grpc/module.modulemap +2 -0
  12. data/include/grpc/support/log.h +2 -80
  13. data/include/grpc/support/string_util.h +2 -0
  14. data/include/grpc/support/sync.h +0 -16
  15. data/src/boringssl/err_data.c +602 -588
  16. data/src/core/ext/{census → filters/census}/grpc_context.cc +0 -0
  17. data/src/core/ext/filters/client_channel/channel_connectivity.cc +1 -1
  18. data/src/core/ext/filters/client_channel/client_channel.cc +1234 -1070
  19. data/src/core/ext/filters/client_channel/client_channel.h +5 -0
  20. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +113 -0
  21. data/src/core/ext/filters/client_channel/client_channel_channelz.h +71 -0
  22. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +9 -0
  23. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  24. data/src/core/ext/filters/client_channel/http_proxy.cc +22 -5
  25. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -2
  26. data/src/core/ext/filters/client_channel/lb_policy.h +30 -10
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +11 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +120 -127
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +36 -0
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +36 -102
  31. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +37 -32
  32. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +25 -22
  33. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +4 -2
  34. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.c +19 -0
  35. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/duration.pb.h +54 -0
  36. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.c +19 -0
  37. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/google/protobuf/timestamp.pb.h +54 -0
  38. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +4 -17
  39. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +37 -63
  40. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +306 -239
  41. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +444 -392
  42. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +538 -98
  43. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -0
  44. data/src/core/ext/filters/client_channel/lb_policy_factory.h +4 -0
  45. data/src/core/ext/filters/client_channel/method_params.h +4 -0
  46. data/src/core/ext/filters/client_channel/resolver.h +10 -0
  47. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -19
  48. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +320 -0
  49. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +62 -9
  50. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +49 -294
  51. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +537 -0
  52. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +112 -87
  53. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +17 -2
  54. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +6 -5
  55. data/src/core/ext/filters/{load_reporting/server_load_reporting_filter.h → client_channel/resolver/dns/c_ares/grpc_ares_wrapper_posix.cc} +7 -8
  56. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +29 -0
  57. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +32 -15
  58. data/src/core/ext/filters/client_channel/retry_throttle.h +4 -0
  59. data/src/core/ext/filters/client_channel/subchannel.cc +58 -15
  60. data/src/core/ext/filters/client_channel/subchannel.h +11 -0
  61. data/src/core/ext/filters/deadline/deadline_filter.cc +18 -15
  62. data/src/core/ext/filters/deadline/deadline_filter.h +5 -5
  63. data/src/core/ext/filters/http/client/http_client_filter.cc +10 -9
  64. data/src/core/ext/filters/http/client_authority_filter.cc +6 -5
  65. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +6 -6
  66. data/src/core/ext/filters/http/server/http_server_filter.cc +123 -131
  67. data/src/core/ext/filters/http/server/http_server_filter.h +1 -1
  68. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +1 -1
  69. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +1 -1
  70. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +3 -2
  71. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +9 -8
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +97 -48
  73. data/src/core/ext/transport/chttp2/transport/flow_control.cc +10 -7
  74. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +3 -3
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +12 -8
  76. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +4 -3
  77. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -2
  78. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +2 -2
  79. data/src/core/ext/transport/chttp2/transport/parsing.cc +14 -12
  80. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +3 -3
  81. data/src/core/ext/transport/chttp2/transport/writing.cc +32 -27
  82. data/src/core/ext/transport/inproc/inproc_transport.cc +87 -49
  83. data/src/core/lib/channel/channel_args.cc +28 -0
  84. data/src/core/lib/channel/channel_args.h +4 -0
  85. data/src/core/lib/channel/channel_stack.cc +22 -29
  86. data/src/core/lib/channel/channel_stack.h +2 -2
  87. data/src/core/lib/channel/channel_stack_builder.cc +0 -3
  88. data/src/core/lib/channel/channel_stack_builder.h +0 -2
  89. data/src/core/lib/channel/channel_trace.cc +28 -63
  90. data/src/core/lib/channel/channel_trace.h +13 -17
  91. data/src/core/lib/channel/channelz.cc +153 -0
  92. data/src/core/lib/channel/channelz.h +133 -0
  93. data/src/core/lib/channel/channelz_registry.cc +145 -0
  94. data/src/core/lib/channel/channelz_registry.h +120 -0
  95. data/src/core/lib/channel/connected_channel.cc +8 -1
  96. data/src/core/lib/channel/handshaker.cc +71 -0
  97. data/src/core/lib/channel/handshaker.h +4 -0
  98. data/src/core/lib/debug/stats.h +7 -0
  99. data/src/core/lib/debug/stats_data.cc +5 -0
  100. data/src/core/lib/debug/stats_data.h +120 -0
  101. data/src/core/lib/debug/trace.cc +2 -1
  102. data/src/core/lib/debug/trace.h +12 -1
  103. data/src/core/lib/gpr/alloc.h +28 -0
  104. data/src/core/lib/gpr/arena.cc +38 -45
  105. data/src/core/lib/gpr/log.cc +8 -2
  106. data/src/core/lib/gpr/log_android.cc +4 -0
  107. data/src/core/lib/gpr/log_linux.cc +4 -0
  108. data/src/core/lib/gpr/log_posix.cc +4 -0
  109. data/src/core/lib/gpr/log_windows.cc +5 -0
  110. data/src/core/lib/gpr/string.cc +28 -0
  111. data/src/core/lib/gpr/string.h +10 -0
  112. data/src/core/lib/gprpp/abstract.h +5 -2
  113. data/src/core/lib/gprpp/fork.cc +268 -0
  114. data/src/core/lib/gprpp/fork.h +88 -0
  115. data/src/core/lib/gprpp/inlined_vector.h +87 -37
  116. data/src/core/lib/gprpp/memory.h +12 -0
  117. data/src/core/lib/gprpp/mutex_lock.h +42 -0
  118. data/src/core/lib/gprpp/orphanable.h +10 -12
  119. data/src/core/lib/gprpp/ref_counted.h +10 -12
  120. data/src/core/lib/gprpp/ref_counted_ptr.h +65 -8
  121. data/src/core/lib/gprpp/thd.h +0 -3
  122. data/src/core/lib/gprpp/thd_posix.cc +5 -54
  123. data/src/core/lib/gprpp/thd_windows.cc +0 -7
  124. data/src/core/lib/http/httpcli_security_connector.cc +1 -3
  125. data/src/core/lib/iomgr/call_combiner.cc +13 -13
  126. data/src/core/lib/iomgr/call_combiner.h +84 -1
  127. data/src/core/lib/iomgr/closure.h +6 -5
  128. data/src/core/lib/iomgr/combiner.cc +30 -13
  129. data/src/core/lib/iomgr/combiner.h +1 -1
  130. data/src/core/lib/iomgr/endpoint_pair_posix.cc +2 -2
  131. data/src/core/lib/iomgr/error.cc +12 -0
  132. data/src/core/lib/iomgr/error.h +5 -0
  133. data/src/core/lib/iomgr/ev_epoll1_linux.cc +138 -51
  134. data/src/core/lib/iomgr/ev_epollex_linux.cc +276 -93
  135. data/src/core/lib/iomgr/ev_epollsig_linux.cc +58 -50
  136. data/src/core/lib/iomgr/ev_poll_posix.cc +163 -42
  137. data/src/core/lib/iomgr/ev_posix.cc +88 -24
  138. data/src/core/lib/iomgr/ev_posix.h +48 -12
  139. data/src/core/lib/iomgr/exec_ctx.cc +15 -9
  140. data/src/core/lib/iomgr/exec_ctx.h +48 -20
  141. data/src/core/lib/iomgr/executor.cc +274 -142
  142. data/src/core/lib/iomgr/executor.h +82 -16
  143. data/src/core/lib/iomgr/fork_posix.cc +42 -19
  144. data/src/core/lib/iomgr/iocp_windows.cc +9 -4
  145. data/src/core/lib/iomgr/iomgr.cc +2 -0
  146. data/src/core/lib/iomgr/iomgr.h +5 -0
  147. data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
  148. data/src/core/lib/iomgr/is_epollexclusive_available.cc +1 -0
  149. data/src/core/lib/iomgr/lockfree_event.cc +5 -1
  150. data/src/core/lib/iomgr/polling_entity.cc +11 -2
  151. data/src/core/lib/iomgr/pollset_custom.cc +2 -2
  152. data/src/core/lib/iomgr/port.h +51 -1
  153. data/src/core/lib/iomgr/resolve_address.h +1 -1
  154. data/src/core/lib/iomgr/resolve_address_posix.cc +4 -3
  155. data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
  156. data/src/core/lib/iomgr/resource_quota.cc +89 -12
  157. data/src/core/lib/iomgr/resource_quota.h +16 -0
  158. data/src/core/lib/iomgr/sockaddr_posix.h +1 -1
  159. data/src/core/lib/iomgr/socket_factory_posix.cc +1 -1
  160. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  161. data/src/core/lib/iomgr/socket_mutator.h +1 -1
  162. data/src/core/lib/iomgr/socket_utils.h +9 -0
  163. data/src/core/lib/iomgr/socket_utils_common_posix.cc +29 -1
  164. data/src/core/lib/iomgr/socket_utils_linux.cc +0 -1
  165. data/src/core/lib/iomgr/socket_utils_posix.cc +2 -3
  166. data/src/core/lib/iomgr/socket_utils_posix.h +3 -0
  167. data/src/core/lib/iomgr/socket_utils_uv.cc +4 -0
  168. data/src/core/lib/iomgr/socket_utils_windows.cc +4 -0
  169. data/src/core/lib/iomgr/socket_windows.cc +33 -0
  170. data/src/core/lib/iomgr/socket_windows.h +6 -0
  171. data/src/core/lib/iomgr/tcp_client_custom.cc +5 -5
  172. data/src/core/lib/iomgr/tcp_client_posix.cc +10 -11
  173. data/src/core/lib/iomgr/tcp_custom.cc +11 -11
  174. data/src/core/lib/iomgr/tcp_posix.cc +49 -36
  175. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  176. data/src/core/lib/iomgr/tcp_server_posix.cc +16 -36
  177. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  178. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +17 -5
  179. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -0
  180. data/src/core/lib/iomgr/tcp_uv.cc +3 -0
  181. data/src/core/lib/iomgr/tcp_windows.cc +18 -2
  182. data/src/core/lib/iomgr/tcp_windows.h +2 -0
  183. data/src/core/lib/iomgr/timer.h +4 -3
  184. data/src/core/lib/iomgr/timer_generic.cc +133 -51
  185. data/src/core/lib/iomgr/timer_manager.cc +12 -14
  186. data/src/core/lib/iomgr/timer_uv.cc +3 -0
  187. data/src/core/lib/iomgr/udp_server.cc +106 -52
  188. data/src/core/lib/iomgr/udp_server.h +8 -4
  189. data/src/core/lib/json/json.cc +12 -1
  190. data/src/core/lib/json/json.h +5 -0
  191. data/src/core/lib/profiling/basic_timers.cc +1 -0
  192. data/src/core/lib/security/context/security_context.cc +8 -8
  193. data/src/core/lib/security/context/security_context.h +6 -2
  194. data/src/core/lib/security/credentials/alts/alts_credentials.h +0 -20
  195. data/src/core/lib/security/credentials/alts/check_gcp_environment_linux.cc +3 -2
  196. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_client_options.cc +7 -7
  197. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_options.h +1 -38
  198. data/src/core/lib/security/credentials/credentials.h +1 -0
  199. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +89 -115
  200. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +16 -0
  201. data/src/core/lib/security/credentials/jwt/json_token.h +2 -0
  202. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +2 -0
  203. data/src/core/lib/security/credentials/local/local_credentials.cc +77 -0
  204. data/src/core/lib/security/credentials/local/local_credentials.h +40 -0
  205. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +11 -7
  206. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  207. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +17 -3
  208. data/src/core/lib/security/security_connector/alts_security_connector.cc +2 -1
  209. data/src/core/lib/security/security_connector/load_system_roots.h +29 -0
  210. data/src/core/lib/{gpr/fork.h → security/security_connector/load_system_roots_fallback.cc} +10 -13
  211. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +165 -0
  212. data/src/core/lib/security/security_connector/load_system_roots_linux.h +44 -0
  213. data/src/core/lib/security/security_connector/local_security_connector.cc +245 -0
  214. data/src/core/lib/security/security_connector/local_security_connector.h +58 -0
  215. data/src/core/lib/security/security_connector/security_connector.cc +79 -32
  216. data/src/core/lib/security/security_connector/security_connector.h +5 -3
  217. data/src/core/lib/security/transport/client_auth_filter.cc +5 -5
  218. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  219. data/src/core/lib/security/transport/security_handshaker.cc +7 -2
  220. data/src/core/lib/security/transport/server_auth_filter.cc +4 -7
  221. data/src/core/lib/security/util/json_util.cc +4 -0
  222. data/src/core/lib/slice/slice.cc +6 -2
  223. data/src/core/lib/slice/slice_buffer.cc +27 -7
  224. data/src/core/lib/slice/slice_hash_table.h +4 -0
  225. data/src/core/lib/slice/slice_weak_hash_table.h +4 -0
  226. data/src/core/lib/surface/call.cc +119 -58
  227. data/src/core/lib/surface/call.h +7 -0
  228. data/src/core/lib/surface/channel.cc +50 -18
  229. data/src/core/lib/surface/channel.h +4 -0
  230. data/src/core/lib/surface/completion_queue.cc +153 -18
  231. data/src/core/lib/surface/completion_queue.h +20 -2
  232. data/src/core/lib/surface/completion_queue_factory.cc +13 -4
  233. data/src/core/lib/surface/init.cc +7 -8
  234. data/src/core/lib/surface/init.h +0 -1
  235. data/src/core/lib/surface/server.cc +16 -0
  236. data/src/core/lib/surface/version.cc +1 -1
  237. data/src/core/lib/transport/bdp_estimator.cc +3 -3
  238. data/src/core/lib/transport/bdp_estimator.h +2 -2
  239. data/src/core/lib/transport/byte_stream.cc +1 -1
  240. data/src/core/lib/transport/connectivity_state.cc +6 -7
  241. data/src/core/lib/transport/service_config.cc +2 -2
  242. data/src/core/lib/transport/service_config.h +3 -3
  243. data/src/core/lib/transport/transport.cc +22 -10
  244. data/src/core/lib/transport/transport.h +18 -18
  245. data/src/core/lib/transport/transport_op_string.cc +1 -8
  246. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -4
  247. data/src/core/tsi/alts/crypt/aes_gcm.cc +2 -0
  248. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +19 -7
  249. data/src/core/tsi/alts/handshaker/alts_handshaker_client.h +10 -0
  250. data/src/core/tsi/alts/handshaker/alts_handshaker_service_api_util.h +2 -2
  251. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +38 -3
  252. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker_private.h +3 -0
  253. data/src/core/tsi/alts/handshaker/altscontext.pb.c +0 -1
  254. data/src/core/tsi/alts/handshaker/altscontext.pb.h +1 -2
  255. data/src/core/tsi/alts/handshaker/handshaker.pb.c +0 -1
  256. data/src/core/tsi/alts/handshaker/handshaker.pb.h +1 -2
  257. data/src/core/tsi/alts/handshaker/transport_security_common.pb.c +0 -1
  258. data/src/core/tsi/alts/handshaker/transport_security_common.pb.h +1 -1
  259. data/src/core/tsi/alts/handshaker/transport_security_common_api.h +2 -2
  260. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.cc +47 -1
  261. data/src/core/tsi/alts/zero_copy_frame_protector/alts_grpc_integrity_only_record_protocol.h +3 -1
  262. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -11
  263. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.h +7 -2
  264. data/src/core/tsi/fake_transport_security.cc +1 -0
  265. data/src/core/tsi/grpc_shadow_boringssl.h +3006 -0
  266. data/src/core/tsi/local_transport_security.cc +209 -0
  267. data/src/core/tsi/local_transport_security.h +51 -0
  268. data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -0
  269. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +5 -5
  270. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +6 -0
  271. data/src/core/tsi/ssl_transport_security.cc +245 -116
  272. data/src/core/tsi/ssl_types.h +2 -0
  273. data/src/core/tsi/transport_security.cc +14 -0
  274. data/src/core/tsi/transport_security.h +2 -0
  275. data/src/core/tsi/transport_security_interface.h +11 -1
  276. data/src/ruby/bin/math_client.rb +17 -9
  277. data/src/ruby/ext/grpc/extconf.rb +1 -26
  278. data/src/ruby/ext/grpc/rb_channel_credentials.c +3 -3
  279. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +42 -16
  280. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +65 -26
  281. data/src/ruby/lib/grpc/generic/active_call.rb +19 -23
  282. data/src/ruby/lib/grpc/generic/rpc_server.rb +2 -1
  283. data/src/ruby/lib/grpc/version.rb +1 -1
  284. data/src/ruby/pb/generate_proto_ruby.sh +7 -1
  285. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +4 -1
  286. data/src/ruby/spec/call_credentials_spec.rb +1 -1
  287. data/src/ruby/spec/call_spec.rb +1 -1
  288. data/src/ruby/spec/channel_credentials_spec.rb +1 -1
  289. data/src/ruby/spec/channel_spec.rb +1 -1
  290. data/src/ruby/spec/client_auth_spec.rb +1 -12
  291. data/src/ruby/spec/client_server_spec.rb +1 -1
  292. data/src/ruby/spec/compression_options_spec.rb +1 -1
  293. data/src/ruby/spec/error_sanity_spec.rb +1 -1
  294. data/src/ruby/spec/generic/client_stub_spec.rb +16 -4
  295. data/src/ruby/spec/generic/rpc_desc_spec.rb +1 -1
  296. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +1 -1
  297. data/src/ruby/spec/generic/service_spec.rb +1 -1
  298. data/src/ruby/spec/google_rpc_status_utils_spec.rb +1 -12
  299. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +1 -0
  300. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  301. data/src/ruby/spec/server_credentials_spec.rb +1 -1
  302. data/src/ruby/spec/server_spec.rb +1 -1
  303. data/src/ruby/spec/spec_helper.rb +1 -0
  304. data/src/ruby/spec/support/services.rb +1 -1
  305. data/src/ruby/spec/time_consts_spec.rb +1 -1
  306. data/third_party/address_sorting/address_sorting.c +17 -11
  307. data/third_party/address_sorting/address_sorting_windows.c +43 -3
  308. data/third_party/address_sorting/include/address_sorting/address_sorting.h +3 -0
  309. data/third_party/boringssl/crypto/asn1/a_int.c +33 -28
  310. data/third_party/boringssl/crypto/asn1/a_mbstr.c +24 -22
  311. data/third_party/boringssl/crypto/asn1/a_utf8.c +13 -11
  312. data/third_party/boringssl/crypto/asn1/asn1_locl.h +3 -0
  313. data/third_party/boringssl/crypto/asn1/tasn_dec.c +40 -19
  314. data/third_party/boringssl/crypto/bio/fd.c +1 -0
  315. data/third_party/boringssl/crypto/bio/file.c +2 -0
  316. data/third_party/boringssl/crypto/bn_extra/convert.c +6 -5
  317. data/third_party/boringssl/crypto/bytestring/ber.c +1 -4
  318. data/third_party/boringssl/crypto/bytestring/cbb.c +116 -16
  319. data/third_party/boringssl/crypto/bytestring/cbs.c +151 -20
  320. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +203 -0
  321. data/third_party/boringssl/crypto/cipher_extra/e_rc2.c +2 -0
  322. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +1 -2
  323. data/third_party/boringssl/crypto/cpu-aarch64-fuchsia.c +55 -0
  324. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +2 -1
  325. data/third_party/boringssl/crypto/dsa/dsa.c +16 -54
  326. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +9 -10
  327. data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -3
  328. data/third_party/boringssl/crypto/fipsmodule/bcm.c +11 -542
  329. data/third_party/boringssl/crypto/fipsmodule/bn/add.c +57 -112
  330. data/third_party/boringssl/crypto/fipsmodule/bn/asm/x86_64-gcc.c +4 -3
  331. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +128 -70
  332. data/third_party/boringssl/crypto/fipsmodule/bn/bytes.c +32 -71
  333. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +64 -118
  334. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +284 -122
  335. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +31 -65
  336. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +274 -218
  337. data/third_party/boringssl/crypto/fipsmodule/bn/generic.c +2 -1
  338. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +187 -27
  339. data/third_party/boringssl/crypto/fipsmodule/bn/jacobi.c +1 -1
  340. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +124 -81
  341. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +8 -30
  342. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +321 -347
  343. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +326 -66
  344. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +77 -25
  345. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +199 -222
  346. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +27 -47
  347. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +155 -96
  348. data/third_party/boringssl/crypto/fipsmodule/bn/sqrt.c +1 -1
  349. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +10 -10
  350. data/third_party/boringssl/crypto/fipsmodule/des/internal.h +2 -0
  351. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +78 -47
  352. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +99 -163
  353. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +3 -10
  354. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +44 -23
  355. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +59 -90
  356. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +38 -65
  357. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +5378 -5418
  358. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +17 -26
  359. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +15 -11
  360. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +45 -51
  361. data/third_party/boringssl/crypto/fipsmodule/ec/{util-64.c → util.c} +0 -5
  362. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +144 -264
  363. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +78 -62
  364. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +256 -0
  365. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +36 -32
  366. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +9 -7
  367. data/third_party/boringssl/crypto/fipsmodule/rsa/blinding.c +16 -40
  368. data/third_party/boringssl/crypto/fipsmodule/rsa/internal.h +1 -6
  369. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +57 -39
  370. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +309 -142
  371. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +581 -0
  372. data/third_party/boringssl/crypto/fipsmodule/tls/internal.h +39 -0
  373. data/third_party/boringssl/crypto/fipsmodule/tls/kdf.c +165 -0
  374. data/third_party/boringssl/crypto/internal.h +65 -2
  375. data/third_party/boringssl/crypto/mem.c +0 -2
  376. data/third_party/boringssl/crypto/obj/obj.c +6 -73
  377. data/third_party/boringssl/crypto/thread_pthread.c +35 -5
  378. data/third_party/boringssl/crypto/x509/a_strex.c +11 -11
  379. data/third_party/boringssl/crypto/x509/vpm_int.h +1 -0
  380. data/third_party/boringssl/crypto/x509/x509_vfy.c +4 -0
  381. data/third_party/boringssl/crypto/x509/x509_vpm.c +44 -22
  382. data/third_party/boringssl/crypto/x509/x_name.c +13 -0
  383. data/third_party/boringssl/include/openssl/aead.h +10 -0
  384. data/third_party/boringssl/include/openssl/asn1.h +2 -3
  385. data/third_party/boringssl/include/openssl/base.h +5 -14
  386. data/third_party/boringssl/include/openssl/bio.h +1 -1
  387. data/third_party/boringssl/include/openssl/bn.h +62 -18
  388. data/third_party/boringssl/include/openssl/bytestring.h +53 -28
  389. data/third_party/boringssl/include/openssl/crypto.h +4 -0
  390. data/third_party/boringssl/include/openssl/ec.h +10 -4
  391. data/third_party/boringssl/include/openssl/ec_key.h +7 -6
  392. data/third_party/boringssl/include/openssl/err.h +9 -9
  393. data/third_party/boringssl/include/openssl/evp.h +1 -1
  394. data/third_party/boringssl/include/openssl/rsa.h +35 -10
  395. data/third_party/boringssl/include/openssl/ssl.h +167 -19
  396. data/third_party/boringssl/include/openssl/ssl3.h +0 -1
  397. data/third_party/boringssl/include/openssl/stack.h +1 -1
  398. data/third_party/boringssl/include/openssl/tls1.h +10 -2
  399. data/third_party/boringssl/include/openssl/x509.h +4 -0
  400. data/third_party/boringssl/include/openssl/x509v3.h +1 -0
  401. data/third_party/boringssl/ssl/d1_both.cc +16 -2
  402. data/third_party/boringssl/ssl/dtls_method.cc +1 -1
  403. data/third_party/boringssl/ssl/handoff.cc +285 -0
  404. data/third_party/boringssl/ssl/handshake.cc +26 -12
  405. data/third_party/boringssl/ssl/handshake_client.cc +101 -95
  406. data/third_party/boringssl/ssl/handshake_server.cc +14 -2
  407. data/third_party/boringssl/ssl/internal.h +132 -79
  408. data/third_party/boringssl/ssl/s3_both.cc +2 -2
  409. data/third_party/boringssl/ssl/s3_lib.cc +3 -1
  410. data/third_party/boringssl/ssl/s3_pkt.cc +0 -18
  411. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +1 -4
  412. data/third_party/boringssl/ssl/ssl_asn1.cc +47 -43
  413. data/third_party/boringssl/ssl/ssl_cipher.cc +12 -8
  414. data/third_party/boringssl/ssl/ssl_key_share.cc +3 -1
  415. data/third_party/boringssl/ssl/ssl_lib.cc +83 -14
  416. data/third_party/boringssl/ssl/ssl_privkey.cc +6 -0
  417. data/third_party/boringssl/ssl/ssl_stat.cc +6 -6
  418. data/third_party/boringssl/ssl/ssl_versions.cc +12 -85
  419. data/third_party/boringssl/ssl/ssl_x509.cc +59 -61
  420. data/third_party/boringssl/ssl/t1_enc.cc +73 -124
  421. data/third_party/boringssl/ssl/t1_lib.cc +367 -41
  422. data/third_party/boringssl/ssl/tls13_both.cc +8 -0
  423. data/third_party/boringssl/ssl/tls13_client.cc +98 -184
  424. data/third_party/boringssl/ssl/tls13_enc.cc +88 -158
  425. data/third_party/boringssl/ssl/tls13_server.cc +91 -137
  426. data/third_party/boringssl/ssl/tls_method.cc +0 -17
  427. data/third_party/boringssl/ssl/tls_record.cc +1 -10
  428. data/third_party/boringssl/third_party/fiat/curve25519.c +921 -2753
  429. data/third_party/boringssl/third_party/fiat/curve25519_tables.h +7880 -0
  430. data/third_party/boringssl/third_party/fiat/internal.h +32 -20
  431. data/third_party/boringssl/third_party/fiat/p256.c +1824 -0
  432. metadata +86 -71
  433. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +0 -253
  434. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +0 -222
  435. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +0 -71
  436. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.h +0 -61
  437. data/src/core/lib/channel/channel_trace_registry.cc +0 -80
  438. data/src/core/lib/channel/channel_trace_registry.h +0 -43
  439. data/src/core/lib/gpr/fork.cc +0 -78
  440. data/src/core/tsi/transport_security_adapter.cc +0 -235
  441. data/src/core/tsi/transport_security_adapter.h +0 -41
  442. data/src/ruby/bin/apis/google/protobuf/empty.rb +0 -29
  443. data/src/ruby/bin/apis/pubsub_demo.rb +0 -241
  444. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +0 -159
  445. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +0 -88
  446. data/src/ruby/pb/test/client.rb +0 -764
  447. data/src/ruby/pb/test/server.rb +0 -252
  448. data/src/ruby/spec/pb/package_with_underscore/checker_spec.rb +0 -54
  449. data/src/ruby/spec/pb/package_with_underscore/data.proto +0 -23
  450. data/src/ruby/spec/pb/package_with_underscore/service.proto +0 -23
  451. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +0 -247
  452. data/third_party/boringssl/crypto/fipsmodule/ec/p256-64.c +0 -1674
@@ -164,34 +164,36 @@ OPENSSL_EXPORT int CBS_get_u24_length_prefixed(CBS *cbs, CBS *out);
164
164
  #define CBS_ASN1_UNIVERSALSTRING 0x1cu
165
165
  #define CBS_ASN1_BMPSTRING 0x1eu
166
166
 
167
+ // CBS_ASN1_TAG_SHIFT is how much the in-memory representation shifts the class
168
+ // and constructed bits from the DER serialization. This allows representing tag
169
+ // numbers beyond 31.
170
+ //
171
+ // Consumers must use the following constants to decompose or assemble tags.
172
+ #define CBS_ASN1_TAG_SHIFT 24
173
+
167
174
  // CBS_ASN1_CONSTRUCTED may be ORed into a tag to toggle the constructed
168
175
  // bit. |CBS| and |CBB| APIs consider the constructed bit to be part of the
169
176
  // tag.
170
- #define CBS_ASN1_CONSTRUCTED 0x20u
177
+ #define CBS_ASN1_CONSTRUCTED (0x20u << CBS_ASN1_TAG_SHIFT)
171
178
 
172
- // The following values specify the constructed bit or tag class and may be ORed
173
- // into a tag number to produce the final tag. If none is used, the tag will be
174
- // UNIVERSAL.
175
- //
176
- // Note that although they currently match the DER serialization, consumers must
177
- // use these bits rather than make assumptions about the representation. This is
178
- // to allow for tag numbers beyond 31 in the future.
179
- #define CBS_ASN1_APPLICATION 0x40u
180
- #define CBS_ASN1_CONTEXT_SPECIFIC 0x80u
181
- #define CBS_ASN1_PRIVATE 0xc0u
179
+ // The following values specify the tag class and may be ORed into a tag number
180
+ // to produce the final tag. If none is used, the tag will be UNIVERSAL.
181
+ #define CBS_ASN1_UNIVERSAL (0u << CBS_ASN1_TAG_SHIFT)
182
+ #define CBS_ASN1_APPLICATION (0x40u << CBS_ASN1_TAG_SHIFT)
183
+ #define CBS_ASN1_CONTEXT_SPECIFIC (0x80u << CBS_ASN1_TAG_SHIFT)
184
+ #define CBS_ASN1_PRIVATE (0xc0u << CBS_ASN1_TAG_SHIFT)
182
185
 
183
- // CBS_ASN1_CLASS_MASK may be ANDed with a tag to query its class.
184
- #define CBS_ASN1_CLASS_MASK 0xc0u
186
+ // CBS_ASN1_CLASS_MASK may be ANDed with a tag to query its class. This will
187
+ // give one of the four values above.
188
+ #define CBS_ASN1_CLASS_MASK (0xc0u << CBS_ASN1_TAG_SHIFT)
185
189
 
186
190
  // CBS_ASN1_TAG_NUMBER_MASK may be ANDed with a tag to query its number.
187
- #define CBS_ASN1_TAG_NUMBER_MASK 0x1fu
191
+ #define CBS_ASN1_TAG_NUMBER_MASK ((1u << (5 + CBS_ASN1_TAG_SHIFT)) - 1)
188
192
 
189
193
  // CBS_get_asn1 sets |*out| to the contents of DER-encoded, ASN.1 element (not
190
194
  // including tag and length bytes) and advances |cbs| over it. The ASN.1
191
195
  // element must match |tag_value|. It returns one on success and zero
192
196
  // on error.
193
- //
194
- // Tag numbers greater than 30 are not supported (i.e. short form only).
195
197
  OPENSSL_EXPORT int CBS_get_asn1(CBS *cbs, CBS *out, unsigned tag_value);
196
198
 
197
199
  // CBS_get_asn1_element acts like |CBS_get_asn1| but |out| will include the
@@ -209,16 +211,12 @@ OPENSSL_EXPORT int CBS_peek_asn1_tag(const CBS *cbs, unsigned tag_value);
209
211
  // (not including tag and length bytes), sets |*out_tag| to the tag number, and
210
212
  // advances |*cbs|. It returns one on success and zero on error. Either of |out|
211
213
  // and |out_tag| may be NULL to ignore the value.
212
- //
213
- // Tag numbers greater than 30 are not supported (i.e. short form only).
214
214
  OPENSSL_EXPORT int CBS_get_any_asn1(CBS *cbs, CBS *out, unsigned *out_tag);
215
215
 
216
216
  // CBS_get_any_asn1_element sets |*out| to contain the next ASN.1 element from
217
217
  // |*cbs| (including header bytes) and advances |*cbs|. It sets |*out_tag| to
218
218
  // the tag number and |*out_header_len| to the length of the ASN.1 header. Each
219
219
  // of |out|, |out_tag|, and |out_header_len| may be NULL to ignore the value.
220
- //
221
- // Tag numbers greater than 30 are not supported (i.e. short form only).
222
220
  OPENSSL_EXPORT int CBS_get_any_asn1_element(CBS *cbs, CBS *out,
223
221
  unsigned *out_tag,
224
222
  size_t *out_header_len);
@@ -237,11 +235,15 @@ OPENSSL_EXPORT int CBS_get_any_ber_asn1_element(CBS *cbs, CBS *out,
237
235
  // in 64 bits.
238
236
  OPENSSL_EXPORT int CBS_get_asn1_uint64(CBS *cbs, uint64_t *out);
239
237
 
238
+ // CBS_get_asn1_bool gets an ASN.1 BOOLEAN from |cbs| and sets |*out| to zero
239
+ // or one based on its value. It returns one on success or zero on error.
240
+ OPENSSL_EXPORT int CBS_get_asn1_bool(CBS *cbs, int *out);
241
+
240
242
  // CBS_get_optional_asn1 gets an optional explicitly-tagged element from |cbs|
241
- // tagged with |tag| and sets |*out| to its contents. If present and if
242
- // |out_present| is not NULL, it sets |*out_present| to one, otherwise zero. It
243
- // returns one on success, whether or not the element was present, and zero on
244
- // decode failure.
243
+ // tagged with |tag| and sets |*out| to its contents, or ignores it if |out| is
244
+ // NULL. If present and if |out_present| is not NULL, it sets |*out_present| to
245
+ // one, otherwise zero. It returns one on success, whether or not the element
246
+ // was present, and zero on decode failure.
245
247
  OPENSSL_EXPORT int CBS_get_optional_asn1(CBS *cbs, CBS *out, int *out_present,
246
248
  unsigned tag);
247
249
 
@@ -281,6 +283,13 @@ OPENSSL_EXPORT int CBS_is_valid_asn1_bitstring(const CBS *cbs);
281
283
  // is indexed starting from zero.
282
284
  OPENSSL_EXPORT int CBS_asn1_bitstring_has_bit(const CBS *cbs, unsigned bit);
283
285
 
286
+ // CBS_asn1_oid_to_text interprets |cbs| as DER-encoded ASN.1 OBJECT IDENTIFIER
287
+ // contents (not including the element framing) and returns the ASCII
288
+ // representation (e.g., "1.2.840.113554.4.1.72585") in a newly-allocated
289
+ // string, or NULL on failure. The caller must release the result with
290
+ // |OPENSSL_free|.
291
+ OPENSSL_EXPORT char *CBS_asn1_oid_to_text(const CBS *cbs);
292
+
284
293
 
285
294
  // CRYPTO ByteBuilder.
286
295
  //
@@ -396,9 +405,7 @@ OPENSSL_EXPORT int CBB_add_u24_length_prefixed(CBB *cbb, CBB *out_contents);
396
405
 
397
406
  // CBB_add_asn1 sets |*out_contents| to a |CBB| into which the contents of an
398
407
  // ASN.1 object can be written. The |tag| argument will be used as the tag for
399
- // the object. Passing in |tag| number 31 will return in an error since only
400
- // single octet identifiers are supported. It returns one on success or zero
401
- // on error.
408
+ // the object. It returns one on success or zero on error.
402
409
  OPENSSL_EXPORT int CBB_add_asn1(CBB *cbb, CBB *out_contents, unsigned tag);
403
410
 
404
411
  // CBB_add_bytes appends |len| bytes from |data| to |cbb|. It returns one on
@@ -447,6 +454,15 @@ OPENSSL_EXPORT void CBB_discard_child(CBB *cbb);
447
454
  // error.
448
455
  OPENSSL_EXPORT int CBB_add_asn1_uint64(CBB *cbb, uint64_t value);
449
456
 
457
+ // CBB_add_asn1_octet_string writes an ASN.1 OCTET STRING into |cbb| with the
458
+ // given contents. It returns one on success and zero on error.
459
+ OPENSSL_EXPORT int CBB_add_asn1_octet_string(CBB *cbb, const uint8_t *data,
460
+ size_t data_len);
461
+
462
+ // CBB_add_asn1_bool writes an ASN.1 BOOLEAN into |cbb| which is true iff
463
+ // |value| is non-zero. It returns one on success and zero on error.
464
+ OPENSSL_EXPORT int CBB_add_asn1_bool(CBB *cbb, int value);
465
+
450
466
  // CBB_add_asn1_oid_from_text decodes |len| bytes from |text| as an ASCII OID
451
467
  // representation, e.g. "1.2.840.113554.4.1.72585", and writes the DER-encoded
452
468
  // contents to |cbb|. It returns one on success and zero on malloc failure or if
@@ -454,10 +470,19 @@ OPENSSL_EXPORT int CBB_add_asn1_uint64(CBB *cbb, uint64_t value);
454
470
  // the element's contents.
455
471
  //
456
472
  // This function considers OID strings with components which do not fit in a
457
- // |uint32_t| to be invalid.
473
+ // |uint64_t| to be invalid.
458
474
  OPENSSL_EXPORT int CBB_add_asn1_oid_from_text(CBB *cbb, const char *text,
459
475
  size_t len);
460
476
 
477
+ // CBB_flush_asn1_set_of calls |CBB_flush| on |cbb| and then reorders the
478
+ // contents for a DER-encoded ASN.1 SET OF type. It returns one on success and
479
+ // zero on failure. DER canonicalizes SET OF contents by sorting
480
+ // lexicographically by encoding. Call this function when encoding a SET OF
481
+ // type in an order that is not already known to be canonical.
482
+ //
483
+ // Note a SET type has a slightly different ordering than a SET OF.
484
+ OPENSSL_EXPORT int CBB_flush_asn1_set_of(CBB *cbb);
485
+
461
486
 
462
487
  #if defined(__cplusplus)
463
488
  } // extern C
@@ -58,6 +58,10 @@ OPENSSL_EXPORT int CRYPTO_has_asm(void);
58
58
  // which case it returns one.
59
59
  OPENSSL_EXPORT int FIPS_mode(void);
60
60
 
61
+ // BORINGSSL_self_test triggers the FIPS KAT-based self tests. It returns one
62
+ // on success and zero on error.
63
+ OPENSSL_EXPORT int BORINGSSL_self_test(void);
64
+
61
65
 
62
66
  // Deprecated functions.
63
67
 
@@ -105,10 +105,13 @@ typedef enum {
105
105
  // curve specified by |nid|, or NULL on error.
106
106
  //
107
107
  // The supported NIDs are:
108
- // NID_secp224r1,
109
- // NID_X9_62_prime256v1,
110
- // NID_secp384r1,
111
- // NID_secp521r1
108
+ // NID_secp224r1 (P-224),
109
+ // NID_X9_62_prime256v1 (P-256),
110
+ // NID_secp384r1 (P-384),
111
+ // NID_secp521r1 (P-521)
112
+ //
113
+ // If in doubt, use |NID_X9_62_prime256v1|, or see the curve25519.h header for
114
+ // more modern primitives.
112
115
  OPENSSL_EXPORT EC_GROUP *EC_GROUP_new_by_curve_name(int nid);
113
116
 
114
117
  // EC_GROUP_free frees |group| and the data that it points to.
@@ -209,6 +212,9 @@ OPENSSL_EXPORT int EC_POINTs_make_affine(const EC_GROUP *group, size_t num,
209
212
  // EC_POINT_get_affine_coordinates_GFp sets |x| and |y| to the affine value of
210
213
  // |point| using |ctx|, if it's not NULL. It returns one on success and zero
211
214
  // otherwise.
215
+ //
216
+ // Either |x| or |y| may be NULL to skip computing that coordinate. This is
217
+ // slightly faster in the common case where only the x-coordinate is needed.
212
218
  OPENSSL_EXPORT int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group,
213
219
  const EC_POINT *point,
214
220
  BIGNUM *x, BIGNUM *y,
@@ -99,9 +99,6 @@ OPENSSL_EXPORT EC_KEY *EC_KEY_new_by_curve_name(int nid);
99
99
  // EC_KEY_free frees all the data owned by |key| and |key| itself.
100
100
  OPENSSL_EXPORT void EC_KEY_free(EC_KEY *key);
101
101
 
102
- // EC_KEY_copy sets |dst| equal to |src| and returns |dst| or NULL on error.
103
- OPENSSL_EXPORT EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src);
104
-
105
102
  // EC_KEY_dup returns a fresh copy of |src| or NULL on error.
106
103
  OPENSSL_EXPORT EC_KEY *EC_KEY_dup(const EC_KEY *src);
107
104
 
@@ -116,14 +113,16 @@ OPENSSL_EXPORT int EC_KEY_is_opaque(const EC_KEY *key);
116
113
  OPENSSL_EXPORT const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
117
114
 
118
115
  // EC_KEY_set_group sets the |EC_GROUP| object that |key| will use to |group|.
119
- // It returns one on success and zero otherwise.
116
+ // It returns one on success and zero otherwise. If |key| already has a group,
117
+ // it is an error to change to a different one.
120
118
  OPENSSL_EXPORT int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group);
121
119
 
122
120
  // EC_KEY_get0_private_key returns a pointer to the private key inside |key|.
123
121
  OPENSSL_EXPORT const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key);
124
122
 
125
123
  // EC_KEY_set_private_key sets the private key of |key| to |priv|. It returns
126
- // one on success and zero otherwise.
124
+ // one on success and zero otherwise. |key| must already have had a group
125
+ // configured (see |EC_KEY_set_group| and |EC_KEY_new_by_curve_name|).
127
126
  OPENSSL_EXPORT int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv);
128
127
 
129
128
  // EC_KEY_get0_public_key returns a pointer to the public key point inside
@@ -131,7 +130,9 @@ OPENSSL_EXPORT int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv);
131
130
  OPENSSL_EXPORT const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key);
132
131
 
133
132
  // EC_KEY_set_public_key sets the public key of |key| to |pub|, by copying it.
134
- // It returns one on success and zero otherwise.
133
+ // It returns one on success and zero otherwise. |key| must already have had a
134
+ // group configured (see |EC_KEY_set_group| and |EC_KEY_new_by_curve_name|), and
135
+ // |pub| must also belong to that group.
135
136
  OPENSSL_EXPORT int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub);
136
137
 
137
138
  #define EC_PKEY_NO_PARAMETERS 0x001
@@ -262,14 +262,6 @@ OPENSSL_EXPORT void ERR_print_errors_fp(FILE *file);
262
262
  // ERR_clear_error clears the error queue for the current thread.
263
263
  OPENSSL_EXPORT void ERR_clear_error(void);
264
264
 
265
- // ERR_remove_thread_state clears the error queue for the current thread if
266
- // |tid| is NULL. Otherwise it calls |assert(0)|, because it's no longer
267
- // possible to delete the error queue for other threads.
268
- //
269
- // Error queues are thread-local data and are deleted automatically. You do not
270
- // need to call this function. Use |ERR_clear_error|.
271
- OPENSSL_EXPORT void ERR_remove_thread_state(const CRYPTO_THREADID *tid);
272
-
273
265
  // ERR_set_mark "marks" the most recent error for use with |ERR_pop_to_mark|.
274
266
  // It returns one if an error was marked and zero if there are no errors.
275
267
  OPENSSL_EXPORT int ERR_set_mark(void);
@@ -382,6 +374,14 @@ enum {
382
374
  // ERR_remove_state calls |ERR_clear_error|.
383
375
  OPENSSL_EXPORT void ERR_remove_state(unsigned long pid);
384
376
 
377
+ // ERR_remove_thread_state clears the error queue for the current thread if
378
+ // |tid| is NULL. Otherwise it calls |assert(0)|, because it's no longer
379
+ // possible to delete the error queue for other threads.
380
+ //
381
+ // Use |ERR_clear_error| instead. Note error queues are deleted automatically on
382
+ // thread exit. You do not need to call this function to release memory.
383
+ OPENSSL_EXPORT void ERR_remove_thread_state(const CRYPTO_THREADID *tid);
384
+
385
385
  // ERR_func_error_string returns the string "OPENSSL_internal".
386
386
  OPENSSL_EXPORT const char *ERR_func_error_string(uint32_t packed_error);
387
387
 
@@ -395,7 +395,7 @@ OPENSSL_EXPORT const char *ERR_func_error_string(uint32_t packed_error);
395
395
  //
396
396
  // TODO(fork): remove this function.
397
397
  OPENSSL_EXPORT char *ERR_error_string(uint32_t packed_error, char *buf);
398
- #define ERR_ERROR_STRING_BUF_LEN 256
398
+ #define ERR_ERROR_STRING_BUF_LEN 120
399
399
 
400
400
  // ERR_GET_FUNC returns zero. BoringSSL errors do not report a function code.
401
401
  #define ERR_GET_FUNC(packed_error) 0
@@ -757,7 +757,7 @@ OPENSSL_EXPORT void EVP_MD_do_all_sorted(void (*callback)(const EVP_MD *cipher,
757
757
  // RSA keys are serialized as a DER-encoded RSAPublicKey (RFC 3447) structure.
758
758
  // EC keys are serialized as a DER-encoded ECPrivateKey (RFC 5915) structure.
759
759
  //
760
- // Use |RSA_marshal_private_key| or |EC_marshal_private_key| instead.
760
+ // Use |RSA_marshal_private_key| or |EC_KEY_marshal_private_key| instead.
761
761
  OPENSSL_EXPORT int i2d_PrivateKey(const EVP_PKEY *key, uint8_t **outp);
762
762
 
763
763
  // i2d_PublicKey marshals a public key from |key| to a type-specific format.
@@ -117,6 +117,9 @@ OPENSSL_EXPORT void RSA_get0_crt_params(const RSA *rsa, const BIGNUM **out_dmp1,
117
117
  //
118
118
  // |d| may be NULL, but |n| and |e| must either be non-NULL or already
119
119
  // configured on |rsa|.
120
+ //
121
+ // It is an error to call this function after |rsa| has been used for a
122
+ // cryptographic operation. Construct a new |RSA| object instead.
120
123
  OPENSSL_EXPORT int RSA_set0_key(RSA *rsa, BIGNUM *n, BIGNUM *e, BIGNUM *d);
121
124
 
122
125
  // RSA_set0_factors sets |rsa|'s prime factors to |p| and |q|, if non-NULL, and
@@ -124,6 +127,9 @@ OPENSSL_EXPORT int RSA_set0_key(RSA *rsa, BIGNUM *n, BIGNUM *e, BIGNUM *d);
124
127
  // returns one. Otherwise, it returns zero.
125
128
  //
126
129
  // Each argument must either be non-NULL or already configured on |rsa|.
130
+ //
131
+ // It is an error to call this function after |rsa| has been used for a
132
+ // cryptographic operation. Construct a new |RSA| object instead.
127
133
  OPENSSL_EXPORT int RSA_set0_factors(RSA *rsa, BIGNUM *p, BIGNUM *q);
128
134
 
129
135
  // RSA_set0_crt_params sets |rsa|'s CRT parameters to |dmp1|, |dmq1|, and
@@ -131,6 +137,9 @@ OPENSSL_EXPORT int RSA_set0_factors(RSA *rsa, BIGNUM *p, BIGNUM *q);
131
137
  // ownership of its parameters and returns one. Otherwise, it returns zero.
132
138
  //
133
139
  // Each argument must either be non-NULL or already configured on |rsa|.
140
+ //
141
+ // It is an error to call this function after |rsa| has been used for a
142
+ // cryptographic operation. Construct a new |RSA| object instead.
134
143
  OPENSSL_EXPORT int RSA_set0_crt_params(RSA *rsa, BIGNUM *dmp1, BIGNUM *dmq1,
135
144
  BIGNUM *iqmp);
136
145
 
@@ -489,12 +498,6 @@ OPENSSL_EXPORT void *RSA_get_ex_data(const RSA *rsa, int idx);
489
498
  // API, like a platform key store.
490
499
  #define RSA_FLAG_OPAQUE 1
491
500
 
492
- // Deprecated and ignored.
493
- #define RSA_FLAG_CACHE_PUBLIC 2
494
-
495
- // Deprecated and ignored.
496
- #define RSA_FLAG_CACHE_PRIVATE 4
497
-
498
501
  // RSA_FLAG_NO_BLINDING disables blinding of private operations, which is a
499
502
  // dangerous thing to do. It is deprecated and should not be used. It will
500
503
  // be ignored whenever possible.
@@ -506,10 +509,6 @@ OPENSSL_EXPORT void *RSA_get_ex_data(const RSA *rsa, int idx);
506
509
  // RSA_FLAG_EXT_PKEY is deprecated and ignored.
507
510
  #define RSA_FLAG_EXT_PKEY 0x20
508
511
 
509
- // RSA_FLAG_SIGN_VER causes the |sign| and |verify| functions of |rsa_meth_st|
510
- // to be called when set.
511
- #define RSA_FLAG_SIGN_VER 0x40
512
-
513
512
 
514
513
  // RSA public exponent values.
515
514
 
@@ -519,6 +518,12 @@ OPENSSL_EXPORT void *RSA_get_ex_data(const RSA *rsa, int idx);
519
518
 
520
519
  // Deprecated functions.
521
520
 
521
+ #define RSA_METHOD_FLAG_NO_CHECK RSA_FLAG_OPAQUE
522
+
523
+ // RSA_flags returns the flags for |rsa|. These are a bitwise OR of |RSA_FLAG_*|
524
+ // constants.
525
+ OPENSSL_EXPORT int RSA_flags(const RSA *rsa);
526
+
522
527
  // RSA_blinding_on returns one.
523
528
  OPENSSL_EXPORT int RSA_blinding_on(RSA *rsa, BN_CTX *ctx);
524
529
 
@@ -631,6 +636,9 @@ typedef struct bn_blinding_st BN_BLINDING;
631
636
  struct rsa_st {
632
637
  RSA_METHOD *meth;
633
638
 
639
+ // Access to the following fields was historically allowed, but
640
+ // deprecated. Use |RSA_get0_*| and |RSA_set0_*| instead. Access to all other
641
+ // fields is forbidden and will cause threading errors.
634
642
  BIGNUM *n;
635
643
  BIGNUM *e;
636
644
  BIGNUM *d;
@@ -653,6 +661,18 @@ struct rsa_st {
653
661
  BN_MONT_CTX *mont_p;
654
662
  BN_MONT_CTX *mont_q;
655
663
 
664
+ // The following fields are copies of |d|, |dmp1|, and |dmq1|, respectively,
665
+ // but with the correct widths to prevent side channels. These must use
666
+ // separate copies due to threading concerns caused by OpenSSL's API
667
+ // mistakes. See https://github.com/openssl/openssl/issues/5158 and
668
+ // the |freeze_private_key| implementation.
669
+ BIGNUM *d_fixed, *dmp1_fixed, *dmq1_fixed;
670
+
671
+ // inv_small_mod_large_mont is q^-1 mod p in Montgomery form, using |mont_p|,
672
+ // if |p| >= |q|. Otherwise, it is p^-1 mod q in Montgomery form, using
673
+ // |mont_q|.
674
+ BIGNUM *inv_small_mod_large_mont;
675
+
656
676
  // num_blindings contains the size of the |blindings| and |blindings_inuse|
657
677
  // arrays. This member and the |blindings_inuse| array are protected by
658
678
  // |lock|.
@@ -662,6 +682,10 @@ struct rsa_st {
662
682
  // |blindings_inuse| from 0 to 1.
663
683
  BN_BLINDING **blindings;
664
684
  unsigned char *blindings_inuse;
685
+
686
+ // private_key_frozen is one if the key has been used for a private key
687
+ // operation and may no longer be mutated.
688
+ unsigned private_key_frozen:1;
665
689
  };
666
690
 
667
691
 
@@ -727,5 +751,6 @@ BORINGSSL_MAKE_DELETER(RSA, RSA_free)
727
751
  #define RSA_R_VALUE_MISSING 144
728
752
  #define RSA_R_WRONG_SIGNATURE_LENGTH 145
729
753
  #define RSA_R_PUBLIC_KEY_VALIDATION_FAILED 146
754
+ #define RSA_R_D_OUT_OF_RANGE 147
730
755
 
731
756
  #endif // OPENSSL_HEADER_RSA_H
@@ -192,7 +192,9 @@ OPENSSL_EXPORT const SSL_METHOD *TLS_method(void);
192
192
  OPENSSL_EXPORT const SSL_METHOD *DTLS_method(void);
193
193
 
194
194
  // TLS_with_buffers_method is like |TLS_method|, but avoids all use of
195
- // crypto/x509.
195
+ // crypto/x509. All client connections created with |TLS_with_buffers_method|
196
+ // will fail unless a certificate verifier is installed with
197
+ // |SSL_set_custom_verify| or |SSL_CTX_set_custom_verify|.
196
198
  OPENSSL_EXPORT const SSL_METHOD *TLS_with_buffers_method(void);
197
199
 
198
200
  // DTLS_with_buffers_method is like |DTLS_method|, but avoids all use of
@@ -532,6 +534,8 @@ OPENSSL_EXPORT int SSL_get_error(const SSL *ssl, int ret_code);
532
534
  // See also |SSL_CTX_set_custom_verify|.
533
535
  #define SSL_ERROR_WANT_CERTIFICATE_VERIFY 16
534
536
 
537
+ #define SSL_ERROR_HANDOFF 17
538
+
535
539
  // SSL_set_mtu sets the |ssl|'s MTU in DTLS to |mtu|. It returns one on success
536
540
  // and zero on failure.
537
541
  OPENSSL_EXPORT int SSL_set_mtu(SSL *ssl, unsigned mtu);
@@ -591,12 +595,7 @@ OPENSSL_EXPORT int DTLSv1_handle_timeout(SSL *ssl);
591
595
  #define DTLS1_VERSION 0xfeff
592
596
  #define DTLS1_2_VERSION 0xfefd
593
597
 
594
- #define TLS1_3_DRAFT_VERSION 0x7f12
595
- #define TLS1_3_DRAFT21_VERSION 0x7f15
596
- #define TLS1_3_DRAFT22_VERSION 0x7e04
597
- #define TLS1_3_EXPERIMENT_VERSION 0x7e01
598
- #define TLS1_3_EXPERIMENT2_VERSION 0x7e02
599
- #define TLS1_3_EXPERIMENT3_VERSION 0x7e03
598
+ #define TLS1_3_DRAFT23_VERSION 0x7f17
600
599
 
601
600
  // SSL_CTX_set_min_proto_version sets the minimum protocol version for |ctx| to
602
601
  // |version|. If |version| is zero, the default minimum version is used. It
@@ -2384,6 +2383,11 @@ OPENSSL_EXPORT int SSL_CTX_load_verify_locations(SSL_CTX *ctx,
2384
2383
  // either |X509_V_OK| or a |X509_V_ERR_*| value.
2385
2384
  OPENSSL_EXPORT long SSL_get_verify_result(const SSL *ssl);
2386
2385
 
2386
+ // SSL_alert_from_verify_result returns the SSL alert code, such as
2387
+ // |SSL_AD_CERTIFICATE_EXPIRED|, that corresponds to an |X509_V_ERR_*| value.
2388
+ // The return value is always an alert, even when |result| is |X509_V_OK|.
2389
+ OPENSSL_EXPORT int SSL_alert_from_verify_result(long result);
2390
+
2387
2391
  // SSL_get_ex_data_X509_STORE_CTX_idx returns the ex_data index used to look up
2388
2392
  // the |SSL| associated with an |X509_STORE_CTX| in the verify callback.
2389
2393
  OPENSSL_EXPORT int SSL_get_ex_data_X509_STORE_CTX_idx(void);
@@ -2783,6 +2787,33 @@ OPENSSL_EXPORT void (*SSL_CTX_get_channel_id_cb(SSL_CTX *ctx))(
2783
2787
  SSL *ssl, EVP_PKEY **out_pkey);
2784
2788
 
2785
2789
 
2790
+ // Token Binding.
2791
+ //
2792
+ // See draft-ietf-tokbind-protocol-16.
2793
+
2794
+ // SSL_set_token_binding_params sets |params| as the Token Binding Key
2795
+ // parameters (section 3 of draft-ietf-tokbind-protocol-16) to negotiate on the
2796
+ // connection. If this function is not called, or if |len| is 0, then this
2797
+ // endpoint will not attempt to negotiate Token Binding. |params| are provided
2798
+ // in preference order, with the more preferred parameters at the beginning of
2799
+ // the list. This function returns 1 on success and 0 on failure.
2800
+ OPENSSL_EXPORT int SSL_set_token_binding_params(SSL *ssl, const uint8_t *params,
2801
+ size_t len);
2802
+
2803
+ // SSL_is_token_binding_negotiated returns 1 if Token Binding was negotiated
2804
+ // on this connection and 0 otherwise. On a server, it is possible for this
2805
+ // function to return 1 when the client's view of the connection is that Token
2806
+ // Binding was not negotiated. This occurs when the server indicates a version
2807
+ // of Token Binding less than the client's minimum version.
2808
+ OPENSSL_EXPORT int SSL_is_token_binding_negotiated(const SSL *ssl);
2809
+
2810
+ // SSL_get_negotiated_token_binding_param returns the TokenBindingKeyParameters
2811
+ // enum value that was negotiated. It is only valid to call this function if
2812
+ // SSL_is_token_binding_negotiated returned 1, otherwise this function returns
2813
+ // an undefined value.
2814
+ OPENSSL_EXPORT uint8_t SSL_get_negotiated_token_binding_param(const SSL *ssl);
2815
+
2816
+
2786
2817
  // DTLS-SRTP.
2787
2818
  //
2788
2819
  // See RFC 5764.
@@ -2907,6 +2938,58 @@ OPENSSL_EXPORT const char *SSL_get_psk_identity_hint(const SSL *ssl);
2907
2938
  OPENSSL_EXPORT const char *SSL_get_psk_identity(const SSL *ssl);
2908
2939
 
2909
2940
 
2941
+ // Dummy post-quantum padding.
2942
+ //
2943
+ // Dummy post-quantum padding invovles the client (and later server) sending
2944
+ // useless, random-looking bytes in an extension in their ClientHello or
2945
+ // ServerHello. These extensions are sized to simulate a post-quantum
2946
+ // key-exchange and so enable measurement of the latency impact of the
2947
+ // additional bandwidth.
2948
+
2949
+ // SSL_set_dummy_pq_padding_size enables the sending of a dummy PQ padding
2950
+ // extension and configures its size. This is only effective for a client: a
2951
+ // server will echo an extension with one of equal length when we get to that
2952
+ // phase of the experiment. It returns one for success and zero otherwise.
2953
+ OPENSSL_EXPORT int SSL_set_dummy_pq_padding_size(SSL *ssl, size_t num_bytes);
2954
+
2955
+ // SSL_dummy_pq_padding_used returns one if the server echoed a dummy PQ padding
2956
+ // extension and zero otherwise. It may only be called on a client connection
2957
+ // once the ServerHello has been processed, otherwise it'll return zero.
2958
+ OPENSSL_EXPORT int SSL_dummy_pq_padding_used(SSL *ssl);
2959
+
2960
+
2961
+ // QUIC Transport Parameters.
2962
+ //
2963
+ // draft-ietf-quic-tls defines a new TLS extension quic_transport_parameters
2964
+ // used by QUIC for each endpoint to unilaterally declare its supported
2965
+ // transport parameters. draft-ietf-quic-transport (section 7.4) defines the
2966
+ // contents of that extension (a TransportParameters struct) and describes how
2967
+ // to handle it and its semantic meaning.
2968
+ //
2969
+ // BoringSSL handles this extension as an opaque byte string. The caller is
2970
+ // responsible for serializing and parsing it.
2971
+
2972
+ // SSL_set_quic_transport_params configures |ssl| to send |params| (of length
2973
+ // |params_len|) in the quic_transport_parameters extension in either the
2974
+ // ClientHello or EncryptedExtensions handshake message. This extension will
2975
+ // only be sent if the TLS version is at least 1.3, and for a server, only if
2976
+ // the client sent the extension. The buffer pointed to by |params| only need be
2977
+ // valid for the duration of the call to this function. This function returns 1
2978
+ // on success and 0 on failure.
2979
+ OPENSSL_EXPORT int SSL_set_quic_transport_params(SSL *ssl,
2980
+ const uint8_t *params,
2981
+ size_t params_len);
2982
+
2983
+ // SSL_get_peer_quic_transport_params provides the caller with the value of the
2984
+ // quic_transport_parameters extension sent by the peer. A pointer to the buffer
2985
+ // containing the TransportParameters will be put in |*out_params|, and its
2986
+ // length in |*params_len|. This buffer will be valid for the lifetime of the
2987
+ // |SSL|. If no params were received from the peer, |*out_params_len| will be 0.
2988
+ OPENSSL_EXPORT void SSL_get_peer_quic_transport_params(const SSL *ssl,
2989
+ const uint8_t **out_params,
2990
+ size_t *out_params_len);
2991
+
2992
+
2910
2993
  // Early data.
2911
2994
  //
2912
2995
  // WARNING: 0-RTT support in BoringSSL is currently experimental and not fully
@@ -2988,6 +3071,13 @@ OPENSSL_EXPORT int SSL_early_data_accepted(const SSL *ssl);
2988
3071
  // |SSL_ERROR_EARLY_DATA_REJECTED|.
2989
3072
  OPENSSL_EXPORT void SSL_reset_early_data_reject(SSL *ssl);
2990
3073
 
3074
+ // SSL_export_early_keying_material behaves like |SSL_export_keying_material|,
3075
+ // but it uses the early exporter. The operation will fail if |ssl| did not
3076
+ // negotiate TLS 1.3 or 0-RTT.
3077
+ OPENSSL_EXPORT int SSL_export_early_keying_material(
3078
+ SSL *ssl, uint8_t *out, size_t out_len, const char *label, size_t label_len,
3079
+ const uint8_t *context, size_t context_len);
3080
+
2991
3081
 
2992
3082
  // Alerts.
2993
3083
  //
@@ -3219,11 +3309,6 @@ OPENSSL_EXPORT int SSL_total_renegotiations(const SSL *ssl);
3219
3309
 
3220
3310
  enum tls13_variant_t {
3221
3311
  tls13_default = 0,
3222
- tls13_experiment = 1,
3223
- tls13_experiment2 = 2,
3224
- tls13_experiment3 = 3,
3225
- tls13_draft21 = 4,
3226
- tls13_draft22 = 5,
3227
3312
  };
3228
3313
 
3229
3314
  // SSL_CTX_set_tls13_variant sets which variant of TLS 1.3 we negotiate. On the
@@ -3477,6 +3562,16 @@ OPENSSL_EXPORT size_t SSL_max_seal_overhead(const SSL *ssl);
3477
3562
  // connections which resumed a session.
3478
3563
  OPENSSL_EXPORT int32_t SSL_get_ticket_age_skew(const SSL *ssl);
3479
3564
 
3565
+ // SSL_CTX_set_false_start_allowed_without_alpn configures whether connections
3566
+ // on |ctx| may use False Start (if |SSL_MODE_ENABLE_FALSE_START| is enabled)
3567
+ // without negotiating ALPN.
3568
+ OPENSSL_EXPORT void SSL_CTX_set_false_start_allowed_without_alpn(SSL_CTX *ctx,
3569
+ int allowed);
3570
+
3571
+ // SSL_is_draft_downgrade returns one if the TLS 1.3 anti-downgrade mechanism
3572
+ // would have aborted |ssl|'s handshake and zero otherwise.
3573
+ OPENSSL_EXPORT int SSL_is_draft_downgrade(const SSL *ssl);
3574
+
3480
3575
 
3481
3576
  // Deprecated functions.
3482
3577
 
@@ -3505,6 +3600,7 @@ OPENSSL_EXPORT const char *SSL_CIPHER_get_version(const SSL_CIPHER *cipher);
3505
3600
  OPENSSL_EXPORT char *SSL_CIPHER_get_rfc_name(const SSL_CIPHER *cipher);
3506
3601
 
3507
3602
  typedef void COMP_METHOD;
3603
+ typedef struct ssl_comp_st SSL_COMP;
3508
3604
 
3509
3605
  // SSL_COMP_get_compression_methods returns NULL.
3510
3606
  OPENSSL_EXPORT STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
@@ -3515,6 +3611,12 @@ OPENSSL_EXPORT int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm);
3515
3611
  // SSL_COMP_get_name returns NULL.
3516
3612
  OPENSSL_EXPORT const char *SSL_COMP_get_name(const COMP_METHOD *comp);
3517
3613
 
3614
+ // SSL_COMP_get0_name returns the |name| member of |comp|.
3615
+ OPENSSL_EXPORT const char *SSL_COMP_get0_name(const SSL_COMP *comp);
3616
+
3617
+ // SSL_COMP_get_id returns the |id| member of |comp|.
3618
+ OPENSSL_EXPORT int SSL_COMP_get_id(const SSL_COMP *comp);
3619
+
3518
3620
  // SSL_COMP_free_compression_methods does nothing.
3519
3621
  OPENSSL_EXPORT void SSL_COMP_free_compression_methods(void);
3520
3622
 
@@ -3531,17 +3633,12 @@ OPENSSL_EXPORT const SSL_METHOD *TLSv1_2_method(void);
3531
3633
  OPENSSL_EXPORT const SSL_METHOD *DTLSv1_method(void);
3532
3634
  OPENSSL_EXPORT const SSL_METHOD *DTLSv1_2_method(void);
3533
3635
 
3534
- // SSLv3_method returns an |SSL_METHOD| with no versions enabled.
3535
- OPENSSL_EXPORT const SSL_METHOD *SSLv3_method(void);
3536
-
3537
3636
  // These client- and server-specific methods call their corresponding generic
3538
3637
  // methods.
3539
3638
  OPENSSL_EXPORT const SSL_METHOD *TLS_server_method(void);
3540
3639
  OPENSSL_EXPORT const SSL_METHOD *TLS_client_method(void);
3541
3640
  OPENSSL_EXPORT const SSL_METHOD *SSLv23_server_method(void);
3542
3641
  OPENSSL_EXPORT const SSL_METHOD *SSLv23_client_method(void);
3543
- OPENSSL_EXPORT const SSL_METHOD *SSLv3_server_method(void);
3544
- OPENSSL_EXPORT const SSL_METHOD *SSLv3_client_method(void);
3545
3642
  OPENSSL_EXPORT const SSL_METHOD *TLSv1_server_method(void);
3546
3643
  OPENSSL_EXPORT const SSL_METHOD *TLSv1_client_method(void);
3547
3644
  OPENSSL_EXPORT const SSL_METHOD *TLSv1_1_server_method(void);
@@ -3746,8 +3843,6 @@ OPENSSL_EXPORT void SSL_set_tmp_dh_callback(SSL *ssl,
3746
3843
  #define SSL_set_timeout(session, timeout) \
3747
3844
  SSL_SESSION_set_timeout((session), (timeout))
3748
3845
 
3749
- typedef struct ssl_comp_st SSL_COMP;
3750
-
3751
3846
  struct ssl_comp_st {
3752
3847
  int id;
3753
3848
  const char *name;
@@ -3830,6 +3925,7 @@ OPENSSL_EXPORT void SSL_CTX_set_client_cert_cb(
3830
3925
  #define SSL_PENDING_TICKET 10
3831
3926
  #define SSL_EARLY_DATA_REJECTED 11
3832
3927
  #define SSL_CERTIFICATE_VERIFY 12
3928
+ #define SSL_HANDOFF 13
3833
3929
 
3834
3930
  // SSL_want returns one of the above values to determine what the most recent
3835
3931
  // operation on |ssl| was blocked on. Use |SSL_get_error| instead.
@@ -4365,6 +4461,53 @@ OPENSSL_EXPORT bool SealRecord(SSL *ssl, Span<uint8_t> out_prefix,
4365
4461
  Span<uint8_t> out, Span<uint8_t> out_suffix,
4366
4462
  Span<const uint8_t> in);
4367
4463
 
4464
+
4465
+ // *** EXPERIMENTAL — DO NOT USE WITHOUT CHECKING ***
4466
+ //
4467
+ // Split handshakes.
4468
+ //
4469
+ // Split handshakes allows the handshake part of a TLS connection to be
4470
+ // performed in a different process (or on a different machine) than the data
4471
+ // exchange. This only applies to servers.
4472
+ //
4473
+ // In the first part of a split handshake, an |SSL| (where the |SSL_CTX| has
4474
+ // been configured with |SSL_CTX_set_handoff_mode|) is used normally. Once the
4475
+ // ClientHello message has been received, the handshake will stop and
4476
+ // |SSL_get_error| will indicate |SSL_ERROR_HANDOFF|. At this point (and only
4477
+ // at this point), |SSL_serialize_handoff| can be called to write the “handoff”
4478
+ // state of the connection.
4479
+ //
4480
+ // Elsewhere, a fresh |SSL| can be used with |SSL_apply_handoff| to continue
4481
+ // the connection. The connection from the client is fed into this |SSL| until
4482
+ // the handshake completes normally. At this point (and only at this point),
4483
+ // |SSL_serialize_handback| can be called to serialize the result of the
4484
+ // handshake.
4485
+ //
4486
+ // Back at the first location, a fresh |SSL| can be used with
4487
+ // |SSL_apply_handback|. Then the client's connection can be processed mostly
4488
+ // as normal.
4489
+ //
4490
+ // Lastly, when a connection is in the handoff state, whether or not
4491
+ // |SSL_serialize_handoff| is called, |SSL_decline_handoff| will move it back
4492
+ // into a normal state where the connection can procede without impact.
4493
+ //
4494
+ // WARNING: Currently only works with TLS 1.0–1.2.
4495
+ // WARNING: The serialisation formats are not yet stable: version skew may be
4496
+ // fatal.
4497
+ // WARNING: The handback data contains sensitive key material and must be
4498
+ // protected.
4499
+ // WARNING: Some calls on the final |SSL| will not work. Just as an example,
4500
+ // calls like |SSL_get0_session_id_context| and |SSL_get_privatekey| won't
4501
+ // work because the certificate used for handshaking isn't available.
4502
+ // WARNING: |SSL_apply_handoff| may trigger “msg” callback calls.
4503
+
4504
+ OPENSSL_EXPORT void SSL_CTX_set_handoff_mode(SSL_CTX *ctx, bool on);
4505
+ OPENSSL_EXPORT bool SSL_serialize_handoff(const SSL *ssl, CBB *out);
4506
+ OPENSSL_EXPORT bool SSL_decline_handoff(SSL *ssl);
4507
+ OPENSSL_EXPORT bool SSL_apply_handoff(SSL *ssl, Span<const uint8_t> handoff);
4508
+ OPENSSL_EXPORT bool SSL_serialize_handback(const SSL *ssl, CBB *out);
4509
+ OPENSSL_EXPORT bool SSL_apply_handback(SSL *ssl, Span<const uint8_t> handback);
4510
+
4368
4511
  } // namespace bssl
4369
4512
 
4370
4513
  } // extern C++
@@ -4555,6 +4698,11 @@ OPENSSL_EXPORT bool SealRecord(SSL *ssl, Span<uint8_t> out_prefix,
4555
4698
  #define SSL_R_NO_SUPPORTED_VERSIONS_ENABLED 280
4556
4699
  #define SSL_R_APPLICATION_DATA_INSTEAD_OF_HANDSHAKE 281
4557
4700
  #define SSL_R_EMPTY_HELLO_RETRY_REQUEST 282
4701
+ #define SSL_R_EARLY_DATA_NOT_IN_USE 283
4702
+ #define SSL_R_HANDSHAKE_NOT_COMPLETE 284
4703
+ #define SSL_R_NEGOTIATED_TB_WITHOUT_EMS_OR_RI 285
4704
+ #define SSL_R_SERVER_ECHOED_INVALID_SESSION_ID 286
4705
+ #define SSL_R_PRIVATE_KEY_OPERATION_FAILED 287
4558
4706
  #define SSL_R_SSLV3_ALERT_CLOSE_NOTIFY 1000
4559
4707
  #define SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010
4560
4708
  #define SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020