grpc 1.4.5 → 1.6.0.pre1

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 (928) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +1235 -1100
  3. data/etc/roots.pem +0 -412
  4. data/include/grpc/byte_buffer.h +10 -25
  5. data/include/grpc/byte_buffer_reader.h +10 -25
  6. data/include/grpc/census.h +10 -25
  7. data/include/grpc/compression.h +10 -25
  8. data/include/grpc/grpc.h +15 -26
  9. data/include/grpc/grpc_cronet.h +10 -25
  10. data/include/grpc/grpc_posix.h +10 -25
  11. data/include/grpc/grpc_security.h +10 -25
  12. data/include/grpc/grpc_security_constants.h +10 -25
  13. data/include/grpc/impl/codegen/atm.h +11 -25
  14. data/include/grpc/impl/codegen/atm_gcc_atomic.h +10 -25
  15. data/include/grpc/impl/codegen/atm_gcc_sync.h +10 -25
  16. data/include/grpc/impl/codegen/atm_windows.h +10 -25
  17. data/include/grpc/impl/codegen/byte_buffer_reader.h +11 -26
  18. data/include/grpc/impl/codegen/compression_types.h +12 -27
  19. data/include/grpc/impl/codegen/connectivity_state.h +10 -25
  20. data/include/grpc/impl/codegen/exec_ctx_fwd.h +10 -25
  21. data/include/grpc/impl/codegen/gpr_slice.h +10 -25
  22. data/include/grpc/impl/codegen/gpr_types.h +10 -25
  23. data/include/grpc/impl/codegen/grpc_types.h +42 -43
  24. data/include/grpc/impl/codegen/port_platform.h +10 -25
  25. data/include/grpc/impl/codegen/propagation_bits.h +10 -25
  26. data/include/grpc/impl/codegen/slice.h +13 -28
  27. data/include/grpc/impl/codegen/status.h +10 -25
  28. data/include/grpc/impl/codegen/sync.h +10 -25
  29. data/include/grpc/impl/codegen/sync_generic.h +10 -25
  30. data/include/grpc/impl/codegen/sync_posix.h +10 -25
  31. data/include/grpc/impl/codegen/sync_windows.h +10 -25
  32. data/include/grpc/load_reporting.h +10 -25
  33. data/include/grpc/slice.h +10 -25
  34. data/include/grpc/slice_buffer.h +10 -25
  35. data/include/grpc/status.h +10 -25
  36. data/include/grpc/support/alloc.h +10 -25
  37. data/include/grpc/support/atm.h +10 -25
  38. data/include/grpc/support/atm_gcc_atomic.h +10 -25
  39. data/include/grpc/support/atm_gcc_sync.h +10 -25
  40. data/include/grpc/support/atm_windows.h +10 -25
  41. data/include/grpc/support/avl.h +46 -49
  42. data/include/grpc/support/cmdline.h +10 -25
  43. data/include/grpc/support/cpu.h +10 -25
  44. data/include/grpc/support/histogram.h +10 -25
  45. data/include/grpc/support/host_port.h +10 -25
  46. data/include/grpc/support/log.h +10 -25
  47. data/include/grpc/support/log_windows.h +10 -25
  48. data/include/grpc/support/port_platform.h +10 -25
  49. data/include/grpc/support/string_util.h +10 -25
  50. data/include/grpc/support/subprocess.h +10 -25
  51. data/include/grpc/support/sync.h +10 -25
  52. data/include/grpc/support/sync_generic.h +10 -25
  53. data/include/grpc/support/sync_posix.h +10 -25
  54. data/include/grpc/support/sync_windows.h +10 -25
  55. data/include/grpc/support/thd.h +10 -25
  56. data/include/grpc/support/time.h +10 -25
  57. data/include/grpc/support/tls.h +10 -25
  58. data/include/grpc/support/tls_gcc.h +10 -25
  59. data/include/grpc/support/tls_msvc.h +10 -25
  60. data/include/grpc/support/tls_pthread.h +10 -25
  61. data/include/grpc/support/useful.h +10 -25
  62. data/include/grpc/support/workaround_list.h +11 -26
  63. data/src/boringssl/err_data.c +277 -259
  64. data/src/core/ext/census/aggregation.h +10 -25
  65. data/src/core/ext/census/base_resources.c +10 -25
  66. data/src/core/ext/census/base_resources.h +10 -25
  67. data/src/core/ext/census/census_interface.h +10 -25
  68. data/src/core/ext/census/census_rpc_stats.h +10 -25
  69. data/src/core/ext/census/context.c +10 -25
  70. data/src/core/ext/census/gen/census.pb.c +10 -25
  71. data/src/core/ext/census/gen/census.pb.h +10 -25
  72. data/src/core/ext/census/gen/trace_context.pb.c +10 -25
  73. data/src/core/ext/census/gen/trace_context.pb.h +10 -25
  74. data/src/core/ext/census/grpc_context.c +10 -25
  75. data/src/core/ext/census/grpc_filter.c +11 -26
  76. data/src/core/ext/census/grpc_filter.h +10 -25
  77. data/src/core/ext/census/grpc_plugin.c +10 -25
  78. data/src/core/ext/census/initialize.c +10 -25
  79. data/src/core/ext/census/intrusive_hash_map.c +10 -25
  80. data/src/core/ext/census/intrusive_hash_map.h +10 -25
  81. data/src/core/ext/census/intrusive_hash_map_internal.h +10 -25
  82. data/src/core/ext/census/mlog.c +10 -25
  83. data/src/core/ext/census/mlog.h +10 -25
  84. data/src/core/ext/census/operation.c +10 -25
  85. data/src/core/ext/census/placeholders.c +10 -25
  86. data/src/core/ext/census/resource.c +10 -25
  87. data/src/core/ext/census/resource.h +10 -25
  88. data/src/core/ext/census/rpc_metric_id.h +10 -25
  89. data/src/core/ext/census/trace_context.c +10 -25
  90. data/src/core/ext/census/trace_context.h +10 -25
  91. data/src/core/ext/census/trace_label.h +10 -25
  92. data/src/core/ext/census/trace_propagation.h +10 -25
  93. data/src/core/ext/census/trace_status.h +10 -25
  94. data/src/core/ext/census/trace_string.h +10 -25
  95. data/src/core/ext/census/tracing.c +10 -26
  96. data/src/core/ext/census/tracing.h +10 -25
  97. data/src/core/ext/filters/client_channel/channel_connectivity.c +20 -33
  98. data/src/core/ext/filters/client_channel/client_channel.c +617 -520
  99. data/src/core/ext/filters/client_channel/client_channel.h +15 -28
  100. data/src/core/ext/filters/client_channel/client_channel_factory.c +13 -31
  101. data/src/core/ext/filters/client_channel/client_channel_factory.h +10 -25
  102. data/src/core/ext/filters/client_channel/client_channel_plugin.c +16 -29
  103. data/src/core/ext/filters/client_channel/connector.c +10 -25
  104. data/src/core/ext/filters/client_channel/connector.h +10 -25
  105. data/src/core/ext/filters/client_channel/http_connect_handshaker.c +15 -30
  106. data/src/core/ext/filters/client_channel/http_connect_handshaker.h +10 -25
  107. data/src/core/ext/filters/client_channel/http_proxy.c +112 -38
  108. data/src/core/ext/filters/client_channel/http_proxy.h +10 -25
  109. data/src/core/ext/filters/client_channel/lb_policy.c +32 -36
  110. data/src/core/ext/filters/client_channel/lb_policy.h +24 -27
  111. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.c +14 -30
  112. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.h +10 -25
  113. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.c +464 -279
  114. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +10 -25
  115. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +15 -28
  116. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.c +40 -48
  117. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.c +65 -49
  118. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.h +31 -31
  119. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.c +47 -32
  120. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +11 -26
  121. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +13 -9
  122. data/src/core/ext/filters/client_channel/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +27 -21
  123. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.c +373 -136
  124. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.c +504 -279
  125. data/src/core/ext/filters/client_channel/lb_policy_factory.c +12 -31
  126. data/src/core/ext/filters/client_channel/lb_policy_factory.h +12 -27
  127. data/src/core/ext/filters/client_channel/lb_policy_registry.c +10 -25
  128. data/src/core/ext/filters/client_channel/lb_policy_registry.h +10 -25
  129. data/src/core/ext/filters/client_channel/parse_address.c +10 -25
  130. data/src/core/ext/filters/client_channel/parse_address.h +10 -25
  131. data/src/core/ext/filters/client_channel/proxy_mapper.c +10 -25
  132. data/src/core/ext/filters/client_channel/proxy_mapper.h +10 -25
  133. data/src/core/ext/filters/client_channel/proxy_mapper_registry.c +10 -25
  134. data/src/core/ext/filters/client_channel/proxy_mapper_registry.h +10 -25
  135. data/src/core/ext/filters/client_channel/resolver.c +33 -38
  136. data/src/core/ext/filters/client_channel/resolver.h +19 -30
  137. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.c +153 -50
  138. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +14 -27
  139. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.c +33 -30
  140. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.c +326 -116
  141. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +35 -36
  142. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.c +60 -0
  143. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.c +19 -34
  144. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.c +254 -0
  145. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +60 -0
  146. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.c +16 -28
  147. data/src/core/ext/filters/client_channel/resolver_factory.c +10 -25
  148. data/src/core/ext/filters/client_channel/resolver_factory.h +10 -25
  149. data/src/core/ext/filters/client_channel/resolver_registry.c +10 -25
  150. data/src/core/ext/filters/client_channel/resolver_registry.h +10 -25
  151. data/src/core/ext/filters/client_channel/retry_throttle.c +23 -34
  152. data/src/core/ext/filters/client_channel/retry_throttle.h +10 -25
  153. data/src/core/ext/filters/client_channel/subchannel.c +33 -55
  154. data/src/core/ext/filters/client_channel/subchannel.h +16 -26
  155. data/src/core/ext/filters/client_channel/subchannel_index.c +55 -92
  156. data/src/core/ext/filters/client_channel/subchannel_index.h +26 -29
  157. data/src/core/ext/filters/client_channel/uri_parser.c +10 -25
  158. data/src/core/ext/filters/client_channel/uri_parser.h +10 -25
  159. data/src/core/ext/filters/deadline/deadline_filter.c +30 -45
  160. data/src/core/ext/filters/deadline/deadline_filter.h +10 -25
  161. data/src/core/ext/filters/http/client/http_client_filter.c +255 -294
  162. data/src/core/ext/filters/http/client/http_client_filter.h +10 -25
  163. data/src/core/ext/filters/http/http_filters_plugin.c +11 -26
  164. data/src/core/ext/filters/http/message_compress/message_compress_filter.c +133 -105
  165. data/src/core/ext/filters/http/message_compress/message_compress_filter.h +10 -25
  166. data/src/core/ext/filters/http/server/http_server_filter.c +17 -32
  167. data/src/core/ext/filters/http/server/http_server_filter.h +10 -25
  168. data/src/core/ext/filters/load_reporting/load_reporting.c +11 -30
  169. data/src/core/ext/filters/load_reporting/load_reporting.h +10 -25
  170. data/src/core/ext/filters/load_reporting/load_reporting_filter.c +11 -26
  171. data/src/core/ext/filters/load_reporting/load_reporting_filter.h +10 -25
  172. data/src/core/ext/filters/max_age/max_age_filter.c +28 -43
  173. data/src/core/ext/filters/max_age/max_age_filter.h +10 -25
  174. data/src/core/ext/filters/message_size/message_size_filter.c +24 -37
  175. data/src/core/ext/filters/message_size/message_size_filter.h +10 -25
  176. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.c +16 -31
  177. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.h +10 -25
  178. data/src/core/ext/filters/workarounds/workaround_utils.c +12 -26
  179. data/src/core/ext/filters/workarounds/workaround_utils.h +11 -26
  180. data/src/core/ext/transport/chttp2/alpn/alpn.c +10 -25
  181. data/src/core/ext/transport/chttp2/alpn/alpn.h +10 -25
  182. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +13 -28
  183. data/src/core/ext/transport/chttp2/client/chttp2_connector.h +10 -25
  184. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +13 -30
  185. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +12 -29
  186. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +13 -30
  187. data/src/core/ext/transport/chttp2/server/chttp2_server.c +11 -26
  188. data/src/core/ext/transport/chttp2/server/chttp2_server.h +10 -25
  189. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +10 -25
  190. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +10 -25
  191. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +10 -25
  192. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +11 -25
  193. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +10 -25
  194. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +10 -25
  195. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +10 -25
  196. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +15 -27
  197. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +421 -443
  198. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +14 -25
  199. data/src/core/ext/transport/chttp2/transport/flow_control.c +500 -0
  200. data/src/core/ext/transport/chttp2/transport/frame.h +10 -25
  201. data/src/core/ext/transport/chttp2/transport/frame_data.c +20 -28
  202. data/src/core/ext/transport/chttp2/transport/frame_data.h +10 -25
  203. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +10 -25
  204. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +10 -25
  205. data/src/core/ext/transport/chttp2/transport/frame_ping.c +11 -26
  206. data/src/core/ext/transport/chttp2/transport/frame_ping.h +10 -25
  207. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +11 -26
  208. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +10 -25
  209. data/src/core/ext/transport/chttp2/transport/frame_settings.c +16 -29
  210. data/src/core/ext/transport/chttp2/transport/frame_settings.h +10 -25
  211. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +17 -33
  212. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +10 -25
  213. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +18 -31
  214. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +12 -25
  215. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +15 -30
  216. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +10 -25
  217. data/src/core/ext/transport/chttp2/transport/hpack_table.c +10 -25
  218. data/src/core/ext/transport/chttp2/transport/hpack_table.h +10 -25
  219. data/src/core/ext/transport/chttp2/transport/http2_settings.c +10 -25
  220. data/src/core/ext/transport/chttp2/transport/http2_settings.h +10 -25
  221. data/src/core/ext/transport/chttp2/transport/huffsyms.c +10 -25
  222. data/src/core/ext/transport/chttp2/transport/huffsyms.h +10 -25
  223. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +10 -25
  224. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +10 -25
  225. data/src/core/ext/transport/chttp2/transport/internal.h +191 -179
  226. data/src/core/ext/transport/chttp2/transport/parsing.c +33 -102
  227. data/src/core/ext/transport/chttp2/transport/stream_lists.c +26 -28
  228. data/src/core/ext/transport/chttp2/transport/stream_map.c +10 -25
  229. data/src/core/ext/transport/chttp2/transport/stream_map.h +10 -25
  230. data/src/core/ext/transport/chttp2/transport/varint.c +14 -25
  231. data/src/core/ext/transport/chttp2/transport/varint.h +10 -25
  232. data/src/core/ext/transport/chttp2/transport/writing.c +164 -106
  233. data/src/core/ext/transport/inproc/inproc_plugin.c +29 -0
  234. data/src/core/ext/transport/inproc/inproc_transport.c +1303 -0
  235. data/src/core/ext/transport/inproc/inproc_transport.h +41 -0
  236. data/src/core/lib/channel/channel_args.c +52 -27
  237. data/src/core/lib/channel/channel_args.h +18 -27
  238. data/src/core/lib/channel/channel_stack.c +11 -26
  239. data/src/core/lib/channel/channel_stack.h +12 -27
  240. data/src/core/lib/channel/channel_stack_builder.c +11 -26
  241. data/src/core/lib/channel/channel_stack_builder.h +10 -25
  242. data/src/core/lib/channel/connected_channel.c +10 -25
  243. data/src/core/lib/channel/connected_channel.h +10 -25
  244. data/src/core/lib/channel/context.h +10 -25
  245. data/src/core/lib/channel/handshaker.c +14 -29
  246. data/src/core/lib/channel/handshaker.h +10 -25
  247. data/src/core/lib/channel/handshaker_factory.c +10 -25
  248. data/src/core/lib/channel/handshaker_factory.h +10 -25
  249. data/src/core/lib/channel/handshaker_registry.c +10 -25
  250. data/src/core/lib/channel/handshaker_registry.h +10 -25
  251. data/src/core/lib/compression/algorithm_metadata.h +10 -25
  252. data/src/core/lib/compression/compression.c +10 -25
  253. data/src/core/lib/compression/message_compress.c +10 -25
  254. data/src/core/lib/compression/message_compress.h +10 -25
  255. data/src/core/lib/compression/stream_compression.c +191 -0
  256. data/src/core/lib/compression/stream_compression.h +90 -0
  257. data/src/core/lib/debug/trace.c +28 -29
  258. data/src/core/lib/debug/trace.h +16 -30
  259. data/src/core/lib/http/format_request.c +10 -25
  260. data/src/core/lib/http/format_request.h +10 -25
  261. data/src/core/lib/http/httpcli.c +19 -35
  262. data/src/core/lib/http/httpcli.h +10 -25
  263. data/src/core/lib/http/httpcli_security_connector.c +17 -30
  264. data/src/core/lib/http/parser.c +11 -26
  265. data/src/core/lib/http/parser.h +10 -25
  266. data/src/core/lib/iomgr/closure.c +62 -25
  267. data/src/core/lib/iomgr/closure.h +81 -26
  268. data/src/core/lib/iomgr/combiner.c +103 -200
  269. data/src/core/lib/iomgr/combiner.h +14 -32
  270. data/src/core/lib/iomgr/endpoint.c +10 -29
  271. data/src/core/lib/iomgr/endpoint.h +10 -29
  272. data/src/core/lib/iomgr/endpoint_pair.h +10 -25
  273. data/src/core/lib/iomgr/endpoint_pair_posix.c +10 -25
  274. data/src/core/lib/iomgr/endpoint_pair_uv.c +10 -25
  275. data/src/core/lib/iomgr/endpoint_pair_windows.c +10 -25
  276. data/src/core/lib/iomgr/error.c +45 -46
  277. data/src/core/lib/iomgr/error.h +21 -34
  278. data/src/core/lib/iomgr/error_internal.h +10 -25
  279. data/src/core/lib/iomgr/ev_epoll1_linux.c +279 -179
  280. data/src/core/lib/iomgr/ev_epoll1_linux.h +10 -25
  281. data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.c +75 -264
  282. data/src/core/lib/iomgr/ev_epoll_limited_pollers_linux.h +10 -25
  283. data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.c +44 -199
  284. data/src/core/lib/iomgr/ev_epoll_thread_pool_linux.h +10 -25
  285. data/src/core/lib/iomgr/ev_epollex_linux.c +184 -247
  286. data/src/core/lib/iomgr/ev_epollex_linux.h +10 -25
  287. data/src/core/lib/iomgr/ev_epollsig_linux.c +116 -323
  288. data/src/core/lib/iomgr/ev_epollsig_linux.h +10 -25
  289. data/src/core/lib/iomgr/ev_poll_posix.c +328 -184
  290. data/src/core/lib/iomgr/ev_poll_posix.h +10 -25
  291. data/src/core/lib/iomgr/ev_posix.c +25 -56
  292. data/src/core/lib/iomgr/ev_posix.h +15 -44
  293. data/src/core/lib/iomgr/ev_windows.c +11 -26
  294. data/src/core/lib/iomgr/exec_ctx.c +36 -45
  295. data/src/core/lib/iomgr/exec_ctx.h +10 -25
  296. data/src/core/lib/iomgr/executor.c +152 -127
  297. data/src/core/lib/iomgr/executor.h +18 -26
  298. data/src/core/lib/iomgr/gethostname.h +26 -0
  299. data/src/core/lib/iomgr/gethostname_fallback.c +27 -0
  300. data/src/core/lib/iomgr/gethostname_host_name_max.c +37 -0
  301. data/src/core/lib/iomgr/gethostname_sysconf.c +37 -0
  302. data/src/core/lib/iomgr/iocp_windows.c +10 -25
  303. data/src/core/lib/iomgr/iocp_windows.h +10 -25
  304. data/src/core/lib/iomgr/iomgr.c +17 -28
  305. data/src/core/lib/iomgr/iomgr.h +12 -27
  306. data/src/core/lib/iomgr/iomgr_internal.h +10 -25
  307. data/src/core/lib/iomgr/iomgr_posix.c +11 -26
  308. data/src/core/lib/iomgr/iomgr_posix.h +10 -25
  309. data/src/core/lib/iomgr/iomgr_uv.c +19 -26
  310. data/src/core/lib/iomgr/iomgr_uv.h +37 -0
  311. data/src/core/lib/iomgr/iomgr_windows.c +10 -25
  312. data/src/core/lib/iomgr/is_epollexclusive_available.c +10 -25
  313. data/src/core/lib/iomgr/is_epollexclusive_available.h +10 -25
  314. data/src/core/lib/iomgr/load_file.c +10 -25
  315. data/src/core/lib/iomgr/load_file.h +10 -25
  316. data/src/core/lib/iomgr/lockfree_event.c +22 -35
  317. data/src/core/lib/iomgr/lockfree_event.h +13 -27
  318. data/src/core/lib/iomgr/nameser.h +104 -0
  319. data/src/core/lib/iomgr/network_status_tracker.c +10 -25
  320. data/src/core/lib/iomgr/network_status_tracker.h +10 -25
  321. data/src/core/lib/iomgr/polling_entity.c +10 -25
  322. data/src/core/lib/iomgr/polling_entity.h +14 -34
  323. data/src/core/lib/iomgr/pollset.h +14 -25
  324. data/src/core/lib/iomgr/pollset_set.h +10 -25
  325. data/src/core/lib/iomgr/pollset_set_uv.c +10 -25
  326. data/src/core/lib/iomgr/pollset_set_windows.c +10 -25
  327. data/src/core/lib/iomgr/pollset_set_windows.h +10 -25
  328. data/src/core/lib/iomgr/pollset_uv.c +25 -26
  329. data/src/core/lib/iomgr/pollset_uv.h +10 -25
  330. data/src/core/lib/iomgr/pollset_windows.c +17 -27
  331. data/src/core/lib/iomgr/pollset_windows.h +10 -25
  332. data/src/core/lib/iomgr/port.h +24 -25
  333. data/src/core/lib/iomgr/resolve_address.h +10 -25
  334. data/src/core/lib/iomgr/resolve_address_posix.c +13 -28
  335. data/src/core/lib/iomgr/resolve_address_uv.c +31 -35
  336. data/src/core/lib/iomgr/resolve_address_windows.c +13 -28
  337. data/src/core/lib/iomgr/resource_quota.c +52 -67
  338. data/src/core/lib/iomgr/resource_quota.h +10 -25
  339. data/src/core/lib/iomgr/sockaddr.h +10 -25
  340. data/src/core/lib/iomgr/sockaddr_posix.h +10 -25
  341. data/src/core/lib/iomgr/sockaddr_utils.c +15 -25
  342. data/src/core/lib/iomgr/sockaddr_utils.h +12 -25
  343. data/src/core/lib/iomgr/sockaddr_windows.h +10 -25
  344. data/src/core/lib/iomgr/socket_factory_posix.c +13 -31
  345. data/src/core/lib/iomgr/socket_factory_posix.h +10 -25
  346. data/src/core/lib/iomgr/socket_mutator.c +14 -31
  347. data/src/core/lib/iomgr/socket_mutator.h +10 -25
  348. data/src/core/lib/iomgr/socket_utils.h +10 -25
  349. data/src/core/lib/iomgr/socket_utils_common_posix.c +10 -25
  350. data/src/core/lib/iomgr/socket_utils_linux.c +10 -25
  351. data/src/core/lib/iomgr/socket_utils_posix.c +10 -25
  352. data/src/core/lib/iomgr/socket_utils_posix.h +10 -25
  353. data/src/core/lib/iomgr/socket_utils_uv.c +10 -25
  354. data/src/core/lib/iomgr/socket_utils_windows.c +10 -25
  355. data/src/core/lib/iomgr/socket_windows.c +12 -27
  356. data/src/core/lib/iomgr/socket_windows.h +10 -25
  357. data/src/core/lib/iomgr/sys_epoll_wrapper.h +10 -25
  358. data/src/core/lib/iomgr/tcp_client.h +10 -25
  359. data/src/core/lib/iomgr/tcp_client_posix.c +21 -34
  360. data/src/core/lib/iomgr/tcp_client_posix.h +10 -25
  361. data/src/core/lib/iomgr/tcp_client_uv.c +18 -27
  362. data/src/core/lib/iomgr/tcp_client_windows.c +14 -29
  363. data/src/core/lib/iomgr/tcp_posix.c +36 -55
  364. data/src/core/lib/iomgr/tcp_posix.h +10 -25
  365. data/src/core/lib/iomgr/tcp_server.h +10 -25
  366. data/src/core/lib/iomgr/tcp_server_posix.c +16 -31
  367. data/src/core/lib/iomgr/tcp_server_utils_posix.h +10 -25
  368. data/src/core/lib/iomgr/tcp_server_utils_posix_common.c +11 -26
  369. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.c +10 -25
  370. data/src/core/lib/iomgr/tcp_server_utils_posix_noifaddrs.c +10 -25
  371. data/src/core/lib/iomgr/tcp_server_uv.c +103 -64
  372. data/src/core/lib/iomgr/tcp_server_windows.c +14 -29
  373. data/src/core/lib/iomgr/tcp_uv.c +41 -45
  374. data/src/core/lib/iomgr/tcp_uv.h +10 -25
  375. data/src/core/lib/iomgr/tcp_windows.c +39 -53
  376. data/src/core/lib/iomgr/tcp_windows.h +10 -25
  377. data/src/core/lib/iomgr/time_averaged_stats.c +10 -25
  378. data/src/core/lib/iomgr/time_averaged_stats.h +10 -25
  379. data/src/core/lib/iomgr/timer.h +18 -27
  380. data/src/core/lib/iomgr/timer_generic.c +91 -87
  381. data/src/core/lib/iomgr/timer_generic.h +10 -25
  382. data/src/core/lib/iomgr/timer_heap.c +10 -25
  383. data/src/core/lib/iomgr/timer_heap.h +10 -25
  384. data/src/core/lib/iomgr/timer_manager.c +178 -100
  385. data/src/core/lib/iomgr/timer_manager.h +10 -25
  386. data/src/core/lib/iomgr/timer_uv.c +23 -33
  387. data/src/core/lib/iomgr/timer_uv.h +10 -25
  388. data/src/core/lib/iomgr/udp_server.c +17 -32
  389. data/src/core/lib/iomgr/udp_server.h +10 -25
  390. data/src/core/lib/iomgr/unix_sockets_posix.c +10 -25
  391. data/src/core/lib/iomgr/unix_sockets_posix.h +10 -25
  392. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +10 -25
  393. data/src/core/lib/iomgr/wakeup_fd_cv.c +10 -25
  394. data/src/core/lib/iomgr/wakeup_fd_cv.h +13 -28
  395. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +10 -25
  396. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +10 -25
  397. data/src/core/lib/iomgr/wakeup_fd_pipe.c +10 -25
  398. data/src/core/lib/iomgr/wakeup_fd_pipe.h +10 -25
  399. data/src/core/lib/iomgr/wakeup_fd_posix.c +10 -25
  400. data/src/core/lib/iomgr/wakeup_fd_posix.h +10 -25
  401. data/src/core/lib/json/json.c +10 -25
  402. data/src/core/lib/json/json.h +10 -25
  403. data/src/core/lib/json/json_common.h +10 -25
  404. data/src/core/lib/json/json_reader.c +11 -25
  405. data/src/core/lib/json/json_reader.h +10 -25
  406. data/src/core/lib/json/json_string.c +10 -25
  407. data/src/core/lib/json/json_writer.c +10 -25
  408. data/src/core/lib/json/json_writer.h +10 -25
  409. data/src/core/lib/profiling/basic_timers.c +10 -25
  410. data/src/core/lib/profiling/stap_timers.c +10 -25
  411. data/src/core/lib/profiling/timers.h +10 -25
  412. data/src/core/lib/security/context/security_context.c +32 -40
  413. data/src/core/lib/security/context/security_context.h +15 -26
  414. data/src/core/lib/security/credentials/composite/composite_credentials.c +76 -81
  415. data/src/core/lib/security/credentials/composite/composite_credentials.h +10 -25
  416. data/src/core/lib/security/credentials/credentials.c +29 -49
  417. data/src/core/lib/security/credentials/credentials.h +48 -61
  418. data/src/core/lib/security/credentials/credentials_metadata.c +34 -78
  419. data/src/core/lib/security/credentials/fake/fake_credentials.c +33 -56
  420. data/src/core/lib/security/credentials/fake/fake_credentials.h +12 -27
  421. data/src/core/lib/security/credentials/google_default/credentials_generic.c +10 -25
  422. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +12 -27
  423. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +10 -25
  424. data/src/core/lib/security/credentials/iam/iam_credentials.c +40 -40
  425. data/src/core/lib/security/credentials/iam/iam_credentials.h +11 -26
  426. data/src/core/lib/security/credentials/jwt/json_token.c +10 -25
  427. data/src/core/lib/security/credentials/jwt/json_token.h +10 -25
  428. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +45 -48
  429. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +11 -26
  430. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +53 -33
  431. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +10 -25
  432. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +155 -87
  433. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +24 -28
  434. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +118 -82
  435. data/src/core/lib/security/credentials/plugin/plugin_credentials.h +24 -27
  436. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -32
  437. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +10 -25
  438. data/src/core/lib/security/transport/auth_filters.h +10 -25
  439. data/src/core/lib/security/transport/client_auth_filter.c +217 -112
  440. data/src/core/lib/security/transport/lb_targets_info.c +16 -32
  441. data/src/core/lib/security/transport/lb_targets_info.h +10 -25
  442. data/src/core/lib/security/transport/secure_endpoint.c +29 -43
  443. data/src/core/lib/security/transport/secure_endpoint.h +10 -25
  444. data/src/core/lib/security/transport/security_connector.c +80 -61
  445. data/src/core/lib/security/transport/security_connector.h +35 -35
  446. data/src/core/lib/security/transport/security_handshaker.c +18 -33
  447. data/src/core/lib/security/transport/security_handshaker.h +10 -25
  448. data/src/core/lib/security/transport/server_auth_filter.c +62 -116
  449. data/src/core/lib/security/transport/tsi_error.c +10 -25
  450. data/src/core/lib/security/transport/tsi_error.h +10 -25
  451. data/src/core/lib/security/util/json_util.c +10 -25
  452. data/src/core/lib/security/util/json_util.h +10 -25
  453. data/src/core/lib/slice/b64.c +10 -25
  454. data/src/core/lib/slice/b64.h +10 -25
  455. data/src/core/lib/slice/percent_encoding.c +10 -25
  456. data/src/core/lib/slice/percent_encoding.h +10 -25
  457. data/src/core/lib/slice/slice.c +10 -25
  458. data/src/core/lib/slice/slice_buffer.c +10 -25
  459. data/src/core/lib/slice/slice_hash_table.c +48 -26
  460. data/src/core/lib/slice/slice_hash_table.h +26 -28
  461. data/src/core/lib/slice/slice_intern.c +10 -25
  462. data/src/core/lib/slice/slice_internal.h +10 -25
  463. data/src/core/lib/slice/slice_string_helpers.c +10 -25
  464. data/src/core/lib/slice/slice_string_helpers.h +10 -25
  465. data/src/core/lib/support/alloc.c +10 -25
  466. data/src/core/lib/support/arena.c +12 -27
  467. data/src/core/lib/support/arena.h +10 -25
  468. data/src/core/lib/support/atm.c +17 -32
  469. data/src/core/lib/support/atomic.h +10 -25
  470. data/src/core/lib/support/atomic_with_atm.h +10 -25
  471. data/src/core/lib/support/atomic_with_std.h +10 -25
  472. data/src/core/lib/support/avl.c +101 -101
  473. data/src/core/lib/support/backoff.c +10 -25
  474. data/src/core/lib/support/backoff.h +10 -25
  475. data/src/core/lib/support/block_annotate.h +10 -25
  476. data/src/core/lib/support/cmdline.c +10 -25
  477. data/src/core/lib/support/cpu_iphone.c +10 -25
  478. data/src/core/lib/support/cpu_linux.c +10 -25
  479. data/src/core/lib/support/cpu_posix.c +10 -25
  480. data/src/core/lib/support/cpu_windows.c +10 -25
  481. data/src/core/lib/support/env.h +16 -25
  482. data/src/core/lib/support/env_linux.c +30 -37
  483. data/src/core/lib/support/env_posix.c +15 -25
  484. data/src/core/lib/support/env_windows.c +15 -25
  485. data/src/core/lib/support/histogram.c +10 -25
  486. data/src/core/lib/support/host_port.c +10 -25
  487. data/src/core/lib/support/log.c +20 -29
  488. data/src/core/lib/support/log_android.c +10 -25
  489. data/src/core/lib/support/log_linux.c +13 -26
  490. data/src/core/lib/support/log_posix.c +10 -25
  491. data/src/core/lib/support/log_windows.c +10 -25
  492. data/src/core/lib/support/memory.h +10 -25
  493. data/src/core/lib/support/mpscq.c +11 -49
  494. data/src/core/lib/support/mpscq.h +11 -50
  495. data/src/core/lib/support/murmur_hash.c +12 -25
  496. data/src/core/lib/support/murmur_hash.h +10 -25
  497. data/src/core/lib/support/spinlock.h +10 -25
  498. data/src/core/lib/support/stack_lockfree.c +10 -25
  499. data/src/core/lib/support/stack_lockfree.h +10 -25
  500. data/src/core/lib/support/string.c +10 -25
  501. data/src/core/lib/support/string.h +10 -25
  502. data/src/core/lib/support/string_posix.c +10 -25
  503. data/src/core/lib/support/string_util_windows.c +10 -25
  504. data/src/core/lib/support/string_windows.c +10 -25
  505. data/src/core/lib/support/string_windows.h +10 -25
  506. data/src/core/lib/support/subprocess_posix.c +10 -25
  507. data/src/core/lib/support/subprocess_windows.c +10 -25
  508. data/src/core/lib/support/sync.c +10 -25
  509. data/src/core/lib/support/sync_posix.c +10 -25
  510. data/src/core/lib/support/sync_windows.c +10 -25
  511. data/src/core/lib/support/thd.c +10 -25
  512. data/src/core/lib/support/thd_internal.h +10 -25
  513. data/src/core/lib/support/thd_posix.c +10 -25
  514. data/src/core/lib/support/thd_windows.c +10 -25
  515. data/src/core/lib/support/time.c +10 -25
  516. data/src/core/lib/support/time_posix.c +10 -25
  517. data/src/core/lib/support/time_precise.c +18 -33
  518. data/src/core/lib/support/time_precise.h +10 -25
  519. data/src/core/lib/support/time_windows.c +10 -25
  520. data/src/core/lib/support/tls_pthread.c +10 -25
  521. data/src/core/lib/support/tmpfile.h +10 -25
  522. data/src/core/lib/support/tmpfile_msys.c +10 -25
  523. data/src/core/lib/support/tmpfile_posix.c +10 -25
  524. data/src/core/lib/support/tmpfile_windows.c +10 -25
  525. data/src/core/lib/support/wrap_memcpy.c +10 -25
  526. data/src/core/lib/surface/alarm.c +78 -35
  527. data/src/core/lib/surface/alarm_internal.h +40 -0
  528. data/src/core/lib/surface/api_trace.c +11 -26
  529. data/src/core/lib/surface/api_trace.h +10 -25
  530. data/src/core/lib/surface/byte_buffer.c +10 -25
  531. data/src/core/lib/surface/byte_buffer_reader.c +10 -25
  532. data/src/core/lib/surface/call.c +64 -84
  533. data/src/core/lib/surface/call.h +11 -26
  534. data/src/core/lib/surface/call_details.c +10 -25
  535. data/src/core/lib/surface/call_log_batch.c +10 -25
  536. data/src/core/lib/surface/call_test_only.h +10 -25
  537. data/src/core/lib/surface/channel.c +11 -26
  538. data/src/core/lib/surface/channel.h +11 -26
  539. data/src/core/lib/surface/channel_init.c +10 -25
  540. data/src/core/lib/surface/channel_init.h +10 -25
  541. data/src/core/lib/surface/channel_ping.c +12 -27
  542. data/src/core/lib/surface/channel_stack_type.c +10 -25
  543. data/src/core/lib/surface/channel_stack_type.h +10 -25
  544. data/src/core/lib/surface/completion_queue.c +442 -331
  545. data/src/core/lib/surface/completion_queue.h +16 -33
  546. data/src/core/lib/surface/completion_queue_factory.c +10 -25
  547. data/src/core/lib/surface/completion_queue_factory.h +10 -25
  548. data/src/core/lib/surface/event_string.c +10 -25
  549. data/src/core/lib/surface/event_string.h +10 -25
  550. data/src/core/lib/surface/init.c +38 -47
  551. data/src/core/lib/surface/init.h +10 -25
  552. data/src/core/lib/surface/init_secure.c +20 -27
  553. data/src/core/lib/surface/lame_client.cc +14 -29
  554. data/src/core/lib/surface/lame_client.h +10 -25
  555. data/src/core/lib/surface/metadata_array.c +10 -25
  556. data/src/core/lib/surface/server.c +128 -81
  557. data/src/core/lib/surface/server.h +10 -25
  558. data/src/core/lib/surface/validate_metadata.c +10 -25
  559. data/src/core/lib/surface/validate_metadata.h +10 -25
  560. data/src/core/lib/surface/version.c +11 -26
  561. data/src/core/lib/transport/bdp_estimator.c +19 -29
  562. data/src/core/lib/transport/bdp_estimator.h +16 -29
  563. data/src/core/lib/transport/byte_stream.c +127 -36
  564. data/src/core/lib/transport/byte_stream.h +88 -46
  565. data/src/core/lib/transport/connectivity_state.c +17 -31
  566. data/src/core/lib/transport/connectivity_state.h +10 -25
  567. data/src/core/lib/transport/error_utils.c +10 -25
  568. data/src/core/lib/transport/error_utils.h +10 -25
  569. data/src/core/lib/transport/http2_errors.h +10 -25
  570. data/src/core/lib/transport/metadata.c +87 -85
  571. data/src/core/lib/transport/metadata.h +15 -28
  572. data/src/core/lib/transport/metadata_batch.c +10 -25
  573. data/src/core/lib/transport/metadata_batch.h +10 -25
  574. data/src/core/lib/transport/pid_controller.c +10 -25
  575. data/src/core/lib/transport/pid_controller.h +10 -25
  576. data/src/core/lib/transport/service_config.c +11 -26
  577. data/src/core/lib/transport/service_config.h +10 -25
  578. data/src/core/lib/transport/static_metadata.c +12 -26
  579. data/src/core/lib/transport/static_metadata.h +10 -25
  580. data/src/core/lib/transport/status_conversion.c +10 -25
  581. data/src/core/lib/transport/status_conversion.h +10 -25
  582. data/src/core/lib/transport/timeout_encoding.c +10 -25
  583. data/src/core/lib/transport/timeout_encoding.h +10 -25
  584. data/src/core/lib/transport/transport.c +60 -53
  585. data/src/core/lib/transport/transport.h +36 -34
  586. data/src/core/lib/transport/transport_impl.h +10 -25
  587. data/src/core/lib/transport/transport_op_string.c +10 -28
  588. data/src/core/plugin_registry/grpc_plugin_registry.c +22 -25
  589. data/src/core/tsi/fake_transport_security.c +199 -94
  590. data/src/core/tsi/fake_transport_security.h +11 -26
  591. data/src/core/tsi/gts_transport_security.c +40 -0
  592. data/src/core/tsi/gts_transport_security.h +37 -0
  593. data/src/core/tsi/ssl_transport_security.c +13 -32
  594. data/src/core/tsi/ssl_transport_security.h +10 -25
  595. data/src/core/tsi/ssl_types.h +10 -25
  596. data/src/core/tsi/transport_security.c +48 -78
  597. data/src/core/tsi/transport_security.h +18 -27
  598. data/src/core/tsi/transport_security_adapter.c +17 -29
  599. data/src/core/tsi/transport_security_adapter.h +10 -25
  600. data/src/core/tsi/transport_security_grpc.c +64 -0
  601. data/src/core/tsi/transport_security_grpc.h +80 -0
  602. data/src/core/tsi/transport_security_interface.h +21 -27
  603. data/src/ruby/bin/apis/google/protobuf/empty.rb +10 -25
  604. data/src/ruby/bin/apis/pubsub_demo.rb +10 -25
  605. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub.rb +10 -25
  606. data/src/ruby/bin/apis/tech/pubsub/proto/pubsub_services.rb +10 -25
  607. data/src/ruby/bin/math_client.rb +10 -25
  608. data/src/ruby/bin/math_server.rb +10 -25
  609. data/src/ruby/bin/math_services_pb.rb +10 -25
  610. data/src/ruby/bin/noproto_client.rb +10 -25
  611. data/src/ruby/bin/noproto_server.rb +10 -25
  612. data/src/ruby/ext/grpc/extconf.rb +10 -25
  613. data/src/ruby/ext/grpc/rb_byte_buffer.c +10 -25
  614. data/src/ruby/ext/grpc/rb_byte_buffer.h +10 -25
  615. data/src/ruby/ext/grpc/rb_call.c +44 -25
  616. data/src/ruby/ext/grpc/rb_call.h +10 -25
  617. data/src/ruby/ext/grpc/rb_call_credentials.c +10 -25
  618. data/src/ruby/ext/grpc/rb_call_credentials.h +10 -25
  619. data/src/ruby/ext/grpc/rb_channel.c +10 -25
  620. data/src/ruby/ext/grpc/rb_channel.h +10 -25
  621. data/src/ruby/ext/grpc/rb_channel_args.c +10 -25
  622. data/src/ruby/ext/grpc/rb_channel_args.h +10 -25
  623. data/src/ruby/ext/grpc/rb_channel_credentials.c +10 -25
  624. data/src/ruby/ext/grpc/rb_channel_credentials.h +10 -25
  625. data/src/ruby/ext/grpc/rb_completion_queue.c +10 -25
  626. data/src/ruby/ext/grpc/rb_completion_queue.h +10 -25
  627. data/src/ruby/ext/grpc/rb_compression_options.c +10 -25
  628. data/src/ruby/ext/grpc/rb_compression_options.h +10 -25
  629. data/src/ruby/ext/grpc/rb_event_thread.c +10 -25
  630. data/src/ruby/ext/grpc/rb_event_thread.h +10 -25
  631. data/src/ruby/ext/grpc/rb_grpc.c +10 -25
  632. data/src/ruby/ext/grpc/rb_grpc.h +10 -25
  633. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +10 -25
  634. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +16 -31
  635. data/src/ruby/ext/grpc/rb_loader.c +10 -25
  636. data/src/ruby/ext/grpc/rb_loader.h +10 -25
  637. data/src/ruby/ext/grpc/rb_server.c +10 -25
  638. data/src/ruby/ext/grpc/rb_server.h +10 -25
  639. data/src/ruby/ext/grpc/rb_server_credentials.c +10 -25
  640. data/src/ruby/ext/grpc/rb_server_credentials.h +10 -25
  641. data/src/ruby/lib/grpc.rb +10 -25
  642. data/src/ruby/lib/grpc/core/time_consts.rb +10 -25
  643. data/src/ruby/lib/grpc/errors.rb +16 -30
  644. data/src/ruby/lib/grpc/generic/active_call.rb +25 -27
  645. data/src/ruby/lib/grpc/generic/bidi_call.rb +17 -27
  646. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -25
  647. data/src/ruby/lib/grpc/generic/rpc_desc.rb +10 -25
  648. data/src/ruby/lib/grpc/generic/rpc_server.rb +10 -25
  649. data/src/ruby/lib/grpc/generic/service.rb +10 -25
  650. data/src/ruby/lib/grpc/grpc.rb +10 -25
  651. data/src/ruby/lib/grpc/logconfig.rb +10 -25
  652. data/src/ruby/lib/grpc/notifier.rb +10 -25
  653. data/src/ruby/lib/grpc/version.rb +11 -26
  654. data/src/ruby/pb/generate_proto_ruby.sh +10 -25
  655. data/src/ruby/pb/grpc/health/checker.rb +10 -25
  656. data/src/ruby/pb/grpc/health/v1/health_services_pb.rb +10 -25
  657. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services_pb.rb +10 -25
  658. data/src/ruby/pb/grpc/testing/metrics_services_pb.rb +10 -25
  659. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +10 -25
  660. data/src/ruby/pb/test/client.rb +10 -25
  661. data/src/ruby/pb/test/server.rb +10 -25
  662. data/src/ruby/spec/call_credentials_spec.rb +10 -25
  663. data/src/ruby/spec/call_spec.rb +43 -25
  664. data/src/ruby/spec/channel_connection_spec.rb +10 -25
  665. data/src/ruby/spec/channel_credentials_spec.rb +11 -26
  666. data/src/ruby/spec/channel_spec.rb +10 -25
  667. data/src/ruby/spec/client_auth_spec.rb +10 -25
  668. data/src/ruby/spec/client_server_spec.rb +66 -25
  669. data/src/ruby/spec/compression_options_spec.rb +10 -25
  670. data/src/ruby/spec/error_sanity_spec.rb +10 -25
  671. data/src/ruby/spec/generic/active_call_spec.rb +10 -25
  672. data/src/ruby/spec/generic/client_stub_spec.rb +146 -35
  673. data/src/ruby/spec/generic/rpc_desc_spec.rb +10 -25
  674. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +10 -25
  675. data/src/ruby/spec/generic/rpc_server_spec.rb +124 -34
  676. data/src/ruby/spec/generic/service_spec.rb +10 -25
  677. data/src/ruby/spec/pb/duplicate/codegen_spec.rb +10 -25
  678. data/src/ruby/spec/pb/health/checker_spec.rb +10 -25
  679. data/src/ruby/spec/server_credentials_spec.rb +10 -25
  680. data/src/ruby/spec/server_spec.rb +10 -25
  681. data/src/ruby/spec/spec_helper.rb +10 -25
  682. data/src/ruby/spec/time_consts_spec.rb +10 -25
  683. data/third_party/boringssl/crypto/aes/key_wrap.c +138 -0
  684. data/third_party/boringssl/crypto/asn1/a_bitstr.c +6 -3
  685. data/third_party/boringssl/crypto/asn1/a_enum.c +4 -1
  686. data/third_party/boringssl/crypto/asn1/a_gentm.c +20 -15
  687. data/third_party/boringssl/crypto/asn1/a_int.c +7 -4
  688. data/third_party/boringssl/crypto/asn1/a_object.c +5 -2
  689. data/third_party/boringssl/crypto/asn1/a_time.c +0 -1
  690. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -2
  691. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -2
  692. data/third_party/boringssl/crypto/asn1/asn1_locl.h +35 -0
  693. data/third_party/boringssl/crypto/asn1/tasn_dec.c +3 -1
  694. data/third_party/boringssl/crypto/asn1/tasn_enc.c +6 -3
  695. data/third_party/boringssl/crypto/asn1/tasn_new.c +12 -7
  696. data/third_party/boringssl/crypto/asn1/tasn_utl.c +22 -8
  697. data/third_party/boringssl/crypto/{time_support.c → asn1/time_support.c} +1 -1
  698. data/third_party/boringssl/crypto/asn1/x_long.c +5 -2
  699. data/third_party/boringssl/crypto/base64/base64.c +7 -5
  700. data/third_party/boringssl/crypto/bio/bio.c +24 -10
  701. data/third_party/boringssl/crypto/bio/bio_mem.c +12 -10
  702. data/third_party/boringssl/crypto/bio/connect.c +7 -18
  703. data/third_party/boringssl/crypto/bio/fd.c +3 -6
  704. data/third_party/boringssl/crypto/bio/file.c +6 -6
  705. data/third_party/boringssl/crypto/bio/hexdump.c +4 -2
  706. data/third_party/boringssl/crypto/bio/pair.c +30 -344
  707. data/third_party/boringssl/crypto/bio/socket.c +6 -7
  708. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -3
  709. data/third_party/boringssl/crypto/bn/add.c +1 -1
  710. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +11 -10
  711. data/third_party/boringssl/crypto/bn/bn.c +6 -20
  712. data/third_party/boringssl/crypto/bn/cmp.c +14 -0
  713. data/third_party/boringssl/crypto/bn/convert.c +73 -2
  714. data/third_party/boringssl/crypto/bn/ctx.c +3 -1
  715. data/third_party/boringssl/crypto/bn/div.c +108 -51
  716. data/third_party/boringssl/crypto/bn/exponentiation.c +15 -33
  717. data/third_party/boringssl/crypto/bn/gcd.c +29 -22
  718. data/third_party/boringssl/crypto/bn/generic.c +71 -67
  719. data/third_party/boringssl/crypto/bn/internal.h +19 -6
  720. data/third_party/boringssl/crypto/bn/kronecker.c +1 -0
  721. data/third_party/boringssl/crypto/bn/montgomery.c +9 -10
  722. data/third_party/boringssl/crypto/bn/montgomery_inv.c +47 -0
  723. data/third_party/boringssl/crypto/bn/mul.c +11 -9
  724. data/third_party/boringssl/crypto/bn/random.c +6 -3
  725. data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -65
  726. data/third_party/boringssl/crypto/bn/rsaz_exp.h +0 -3
  727. data/third_party/boringssl/crypto/bn/shift.c +9 -1
  728. data/third_party/boringssl/crypto/bn/sqrt.c +3 -1
  729. data/third_party/boringssl/crypto/buf/buf.c +6 -4
  730. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +2 -1
  731. data/third_party/boringssl/crypto/bytestring/ber.c +2 -1
  732. data/third_party/boringssl/crypto/bytestring/cbb.c +9 -7
  733. data/third_party/boringssl/crypto/bytestring/cbs.c +54 -2
  734. data/third_party/boringssl/crypto/chacha/chacha.c +1 -1
  735. data/third_party/boringssl/crypto/cipher/aead.c +3 -3
  736. data/third_party/boringssl/crypto/cipher/cipher.c +18 -13
  737. data/third_party/boringssl/crypto/cipher/e_aes.c +335 -281
  738. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +113 -137
  739. data/third_party/boringssl/crypto/cipher/e_null.c +2 -1
  740. data/third_party/boringssl/crypto/cipher/e_rc2.c +54 -49
  741. data/third_party/boringssl/crypto/cipher/e_ssl3.c +4 -3
  742. data/third_party/boringssl/crypto/cipher/e_tls.c +5 -5
  743. data/third_party/boringssl/crypto/cipher/tls_cbc.c +41 -112
  744. data/third_party/boringssl/crypto/cmac/cmac.c +6 -4
  745. data/third_party/boringssl/crypto/conf/conf.c +6 -3
  746. data/third_party/boringssl/crypto/cpu-arm-linux.c +2 -2
  747. data/third_party/boringssl/crypto/curve25519/curve25519.c +28 -34
  748. data/third_party/boringssl/crypto/curve25519/spake25519.c +7 -6
  749. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +2 -1
  750. data/third_party/boringssl/crypto/des/des.c +1 -1
  751. data/third_party/boringssl/crypto/des/internal.h +58 -46
  752. data/third_party/boringssl/crypto/dh/dh.c +4 -8
  753. data/third_party/boringssl/crypto/digest/digest.c +5 -2
  754. data/third_party/boringssl/crypto/digest/digests.c +70 -33
  755. data/third_party/boringssl/crypto/digest/md32_common.h +39 -27
  756. data/third_party/boringssl/crypto/dsa/dsa.c +11 -19
  757. data/third_party/boringssl/crypto/ec/ec.c +1 -1
  758. data/third_party/boringssl/crypto/ec/ec_asn1.c +3 -2
  759. data/third_party/boringssl/crypto/ec/ec_key.c +1 -1
  760. data/third_party/boringssl/crypto/ec/ec_montgomery.c +6 -11
  761. data/third_party/boringssl/crypto/ec/oct.c +2 -14
  762. data/third_party/boringssl/crypto/ec/p224-64.c +78 -122
  763. data/third_party/boringssl/crypto/ec/p256-64.c +93 -133
  764. data/third_party/boringssl/crypto/ec/p256-x86_64.c +48 -61
  765. data/third_party/boringssl/crypto/ec/p256-x86_64.h +113 -0
  766. data/third_party/boringssl/crypto/ec/simple.c +2 -1
  767. data/third_party/boringssl/crypto/ec/wnaf.c +52 -43
  768. data/third_party/boringssl/crypto/ecdh/ecdh.c +4 -2
  769. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +17 -16
  770. data/third_party/boringssl/crypto/engine/engine.c +3 -1
  771. data/third_party/boringssl/crypto/err/err.c +5 -5
  772. data/third_party/boringssl/crypto/evp/evp.c +1 -1
  773. data/third_party/boringssl/crypto/evp/evp_asn1.c +1 -1
  774. data/third_party/boringssl/crypto/evp/evp_ctx.c +23 -29
  775. data/third_party/boringssl/crypto/evp/p_ec.c +2 -1
  776. data/third_party/boringssl/crypto/evp/p_rsa.c +9 -3
  777. data/third_party/boringssl/crypto/evp/pbkdf.c +3 -1
  778. data/third_party/boringssl/crypto/hkdf/hkdf.c +3 -1
  779. data/third_party/boringssl/crypto/hmac/hmac.c +4 -2
  780. data/third_party/boringssl/crypto/internal.h +81 -0
  781. data/third_party/boringssl/crypto/lhash/lhash.c +7 -13
  782. data/third_party/boringssl/crypto/md4/md4.c +20 -18
  783. data/third_party/boringssl/crypto/md5/md5.c +31 -21
  784. data/third_party/boringssl/crypto/mem.c +4 -10
  785. data/third_party/boringssl/crypto/modes/cbc.c +2 -6
  786. data/third_party/boringssl/crypto/modes/cfb.c +2 -2
  787. data/third_party/boringssl/crypto/modes/ctr.c +1 -1
  788. data/third_party/boringssl/crypto/modes/gcm.c +117 -334
  789. data/third_party/boringssl/crypto/modes/internal.h +107 -84
  790. data/third_party/boringssl/crypto/modes/ofb.c +3 -3
  791. data/third_party/boringssl/crypto/modes/polyval.c +94 -0
  792. data/third_party/boringssl/crypto/obj/obj.c +13 -8
  793. data/third_party/boringssl/crypto/obj/obj_dat.h +6109 -5187
  794. data/third_party/boringssl/crypto/obj/obj_xref.c +55 -57
  795. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -3
  796. data/third_party/boringssl/crypto/pkcs8/internal.h +27 -8
  797. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +137 -352
  798. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +371 -364
  799. data/third_party/boringssl/crypto/poly1305/poly1305.c +12 -18
  800. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +2 -2
  801. data/third_party/boringssl/crypto/{newhope/reduce.c → pool/internal.h} +24 -21
  802. data/third_party/boringssl/crypto/pool/pool.c +200 -0
  803. data/third_party/boringssl/crypto/rand/deterministic.c +6 -5
  804. data/third_party/boringssl/crypto/rand/fuchsia.c +43 -0
  805. data/third_party/boringssl/crypto/rand/rand.c +7 -7
  806. data/third_party/boringssl/crypto/rand/urandom.c +136 -22
  807. data/third_party/boringssl/crypto/rand/windows.c +2 -2
  808. data/third_party/boringssl/crypto/rsa/blinding.c +2 -1
  809. data/third_party/boringssl/crypto/rsa/padding.c +11 -11
  810. data/third_party/boringssl/crypto/rsa/rsa.c +4 -4
  811. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +7 -1
  812. data/third_party/boringssl/crypto/rsa/rsa_impl.c +41 -80
  813. data/third_party/boringssl/crypto/sha/sha1-altivec.c +346 -0
  814. data/third_party/boringssl/crypto/sha/sha1.c +60 -42
  815. data/third_party/boringssl/crypto/sha/sha256.c +4 -2
  816. data/third_party/boringssl/crypto/sha/sha512.c +9 -7
  817. data/third_party/boringssl/crypto/stack/stack.c +10 -7
  818. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  819. data/third_party/boringssl/crypto/thread_win.c +2 -2
  820. data/third_party/boringssl/crypto/x509/a_verify.c +1 -1
  821. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -1
  822. data/third_party/boringssl/crypto/x509/by_dir.c +1 -1
  823. data/third_party/boringssl/crypto/x509/t_x509.c +78 -38
  824. data/third_party/boringssl/crypto/x509/x509_cmp.c +8 -5
  825. data/third_party/boringssl/crypto/x509/x509_lu.c +6 -1
  826. data/third_party/boringssl/crypto/x509/x509_obj.c +4 -1
  827. data/third_party/boringssl/crypto/x509/x509_vfy.c +42 -8
  828. data/third_party/boringssl/crypto/x509/x509_vpm.c +8 -6
  829. data/third_party/boringssl/crypto/x509/x509name.c +4 -1
  830. data/third_party/boringssl/crypto/x509/x_crl.c +4 -2
  831. data/third_party/boringssl/crypto/x509/x_name.c +23 -13
  832. data/third_party/boringssl/crypto/x509/x_pkey.c +4 -1
  833. data/third_party/boringssl/crypto/x509/x_x509.c +42 -3
  834. data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
  835. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  836. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +1 -1
  837. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +4 -1
  838. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +4 -1
  839. data/third_party/boringssl/crypto/x509v3/v3_pci.c +6 -3
  840. data/third_party/boringssl/crypto/x509v3/v3_purp.c +13 -21
  841. data/third_party/boringssl/crypto/x509v3/v3_utl.c +19 -33
  842. data/third_party/boringssl/include/openssl/aead.h +9 -20
  843. data/third_party/boringssl/include/openssl/aes.h +21 -9
  844. data/third_party/boringssl/include/openssl/asn1.h +9 -1
  845. data/third_party/boringssl/include/openssl/base.h +33 -6
  846. data/third_party/boringssl/include/openssl/bio.h +10 -103
  847. data/third_party/boringssl/include/openssl/bn.h +58 -42
  848. data/third_party/boringssl/include/openssl/bytestring.h +17 -0
  849. data/third_party/boringssl/include/openssl/cipher.h +4 -3
  850. data/third_party/boringssl/include/openssl/conf.h +4 -1
  851. data/third_party/boringssl/include/openssl/curve25519.h +13 -0
  852. data/third_party/boringssl/include/openssl/digest.h +5 -3
  853. data/third_party/boringssl/include/openssl/dsa.h +5 -5
  854. data/third_party/boringssl/include/openssl/ec.h +2 -2
  855. data/third_party/boringssl/include/openssl/ecdh.h +3 -4
  856. data/third_party/boringssl/include/openssl/ecdsa.h +10 -10
  857. data/third_party/boringssl/include/openssl/err.h +5 -5
  858. data/third_party/boringssl/include/openssl/evp.h +11 -7
  859. data/third_party/boringssl/include/openssl/lhash.h +2 -3
  860. data/third_party/boringssl/include/openssl/lhash_macros.h +56 -14
  861. data/third_party/boringssl/include/openssl/nid.h +2949 -2916
  862. data/third_party/boringssl/include/openssl/obj.h +1 -1
  863. data/third_party/boringssl/include/openssl/pkcs8.h +21 -42
  864. data/third_party/boringssl/include/openssl/pool.h +87 -0
  865. data/third_party/boringssl/include/openssl/rand.h +1 -1
  866. data/third_party/boringssl/include/openssl/rsa.h +4 -2
  867. data/third_party/boringssl/include/openssl/sha.h +0 -4
  868. data/third_party/boringssl/include/openssl/ssl.h +327 -662
  869. data/third_party/boringssl/include/openssl/ssl3.h +1 -21
  870. data/third_party/boringssl/include/openssl/stack.h +1 -0
  871. data/third_party/boringssl/include/openssl/stack_macros.h +85 -0
  872. data/third_party/boringssl/include/openssl/tls1.h +23 -52
  873. data/third_party/boringssl/include/openssl/type_check.h +4 -0
  874. data/third_party/boringssl/include/openssl/x509.h +10 -59
  875. data/third_party/boringssl/include/openssl/x509_vfy.h +7 -1
  876. data/third_party/boringssl/include/openssl/x509v3.h +4 -4
  877. data/third_party/boringssl/ssl/bio_ssl.c +175 -0
  878. data/third_party/boringssl/ssl/custom_extensions.c +24 -21
  879. data/third_party/boringssl/ssl/d1_both.c +259 -289
  880. data/third_party/boringssl/ssl/d1_lib.c +8 -20
  881. data/third_party/boringssl/ssl/d1_pkt.c +6 -15
  882. data/third_party/boringssl/ssl/dtls_method.c +22 -8
  883. data/third_party/boringssl/ssl/dtls_record.c +27 -2
  884. data/third_party/boringssl/ssl/handshake_client.c +460 -579
  885. data/third_party/boringssl/ssl/handshake_server.c +662 -644
  886. data/third_party/boringssl/ssl/internal.h +1009 -375
  887. data/third_party/boringssl/ssl/s3_both.c +312 -162
  888. data/third_party/boringssl/ssl/s3_lib.c +12 -128
  889. data/third_party/boringssl/ssl/s3_pkt.c +22 -30
  890. data/third_party/boringssl/ssl/ssl_aead_ctx.c +28 -22
  891. data/third_party/boringssl/ssl/ssl_asn1.c +210 -114
  892. data/third_party/boringssl/ssl/ssl_buffer.c +2 -1
  893. data/third_party/boringssl/ssl/ssl_cert.c +417 -219
  894. data/third_party/boringssl/ssl/ssl_cipher.c +191 -393
  895. data/third_party/boringssl/ssl/ssl_ecdh.c +19 -164
  896. data/third_party/boringssl/ssl/ssl_file.c +0 -11
  897. data/third_party/boringssl/ssl/ssl_lib.c +325 -652
  898. data/third_party/boringssl/ssl/{ssl_rsa.c → ssl_privkey.c} +21 -131
  899. data/third_party/boringssl/ssl/ssl_privkey_cc.cc +76 -0
  900. data/third_party/boringssl/ssl/ssl_session.c +206 -95
  901. data/third_party/boringssl/ssl/ssl_stat.c +18 -84
  902. data/third_party/boringssl/ssl/{s3_enc.c → ssl_transcript.c} +150 -157
  903. data/third_party/boringssl/ssl/ssl_x509.c +815 -0
  904. data/third_party/boringssl/ssl/t1_enc.c +188 -174
  905. data/third_party/boringssl/ssl/t1_lib.c +1064 -764
  906. data/third_party/boringssl/ssl/tls13_both.c +290 -96
  907. data/third_party/boringssl/ssl/tls13_client.c +344 -314
  908. data/third_party/boringssl/ssl/tls13_enc.c +239 -200
  909. data/third_party/boringssl/ssl/tls13_server.c +374 -366
  910. data/third_party/boringssl/ssl/tls_method.c +40 -5
  911. data/third_party/boringssl/ssl/tls_record.c +166 -71
  912. metadata +39 -25
  913. data/src/core/lib/iomgr/workqueue.h +0 -87
  914. data/src/core/lib/iomgr/workqueue_uv.c +0 -65
  915. data/src/core/lib/iomgr/workqueue_uv.h +0 -37
  916. data/src/core/lib/iomgr/workqueue_windows.c +0 -63
  917. data/src/core/lib/iomgr/workqueue_windows.h +0 -37
  918. data/third_party/boringssl/crypto/bio/buffer.c +0 -496
  919. data/third_party/boringssl/crypto/newhope/error_correction.c +0 -131
  920. data/third_party/boringssl/crypto/newhope/internal.h +0 -71
  921. data/third_party/boringssl/crypto/newhope/newhope.c +0 -174
  922. data/third_party/boringssl/crypto/newhope/ntt.c +0 -148
  923. data/third_party/boringssl/crypto/newhope/poly.c +0 -183
  924. data/third_party/boringssl/crypto/newhope/precomp.c +0 -306
  925. data/third_party/boringssl/crypto/obj/obj_xref.h +0 -96
  926. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +0 -151
  927. data/third_party/boringssl/include/openssl/newhope.h +0 -158
  928. data/third_party/boringssl/include/openssl/time_support.h +0 -91
@@ -65,42 +65,35 @@
65
65
  #include <openssl/mem.h>
66
66
  #include <openssl/type_check.h>
67
67
  #include <openssl/x509.h>
68
+ #include <openssl/x509v3.h>
68
69
 
69
70
  #include "internal.h"
70
71
 
71
72
 
72
- static int ssl_set_cert(CERT *c, X509 *x509);
73
- static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey);
74
-
75
- static int is_key_type_supported(int key_type) {
73
+ int ssl_is_key_type_supported(int key_type) {
76
74
  return key_type == EVP_PKEY_RSA || key_type == EVP_PKEY_EC;
77
75
  }
78
76
 
79
- int SSL_use_certificate(SSL *ssl, X509 *x) {
80
- if (x == NULL) {
81
- OPENSSL_PUT_ERROR(SSL, ERR_R_PASSED_NULL_PARAMETER);
77
+ static int ssl_set_pkey(CERT *cert, EVP_PKEY *pkey) {
78
+ if (!ssl_is_key_type_supported(pkey->type)) {
79
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE);
82
80
  return 0;
83
81
  }
84
- return ssl_set_cert(ssl->cert, x);
85
- }
86
82
 
87
- int SSL_use_certificate_ASN1(SSL *ssl, const uint8_t *der, size_t der_len) {
88
- if (der_len > LONG_MAX) {
89
- OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW);
83
+ if (cert->chain != NULL &&
84
+ sk_CRYPTO_BUFFER_value(cert->chain, 0) != NULL &&
85
+ /* Sanity-check that the private key and the certificate match, unless
86
+ * the key is opaque (in case of, say, a smartcard). */
87
+ !EVP_PKEY_is_opaque(pkey) &&
88
+ !ssl_cert_check_private_key(cert, pkey)) {
90
89
  return 0;
91
90
  }
92
91
 
93
- const uint8_t *p = der;
94
- X509 *x509 = d2i_X509(NULL, &p, (long)der_len);
95
- if (x509 == NULL || p != der + der_len) {
96
- OPENSSL_PUT_ERROR(SSL, ERR_R_ASN1_LIB);
97
- X509_free(x509);
98
- return 0;
99
- }
92
+ EVP_PKEY_free(cert->privatekey);
93
+ EVP_PKEY_up_ref(pkey);
94
+ cert->privatekey = pkey;
100
95
 
101
- int ret = SSL_use_certificate(ssl, x509);
102
- X509_free(x509);
103
- return ret;
96
+ return 1;
104
97
  }
105
98
 
106
99
  int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa) {
@@ -127,52 +120,13 @@ int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa) {
127
120
  return ret;
128
121
  }
129
122
 
130
- static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey) {
131
- if (!is_key_type_supported(pkey->type)) {
132
- OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE);
133
- return 0;
134
- }
135
-
136
- if (c->x509 != NULL) {
137
- /* Sanity-check that the private key and the certificate match, unless the
138
- * key is opaque (in case of, say, a smartcard). */
139
- if (!EVP_PKEY_is_opaque(pkey) &&
140
- !X509_check_private_key(c->x509, pkey)) {
141
- X509_free(c->x509);
142
- c->x509 = NULL;
143
- return 0;
144
- }
145
- }
146
-
147
- EVP_PKEY_free(c->privatekey);
148
- EVP_PKEY_up_ref(pkey);
149
- c->privatekey = pkey;
150
-
151
- return 1;
152
- }
153
-
154
- int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const uint8_t *der, size_t der_len) {
155
- RSA *rsa = RSA_private_key_from_bytes(der, der_len);
156
- if (rsa == NULL) {
157
- OPENSSL_PUT_ERROR(SSL, ERR_R_ASN1_LIB);
158
- return 0;
159
- }
160
-
161
- int ret = SSL_use_RSAPrivateKey(ssl, rsa);
162
- RSA_free(rsa);
163
- return ret;
164
- }
165
-
166
123
  int SSL_use_PrivateKey(SSL *ssl, EVP_PKEY *pkey) {
167
- int ret;
168
-
169
124
  if (pkey == NULL) {
170
125
  OPENSSL_PUT_ERROR(SSL, ERR_R_PASSED_NULL_PARAMETER);
171
126
  return 0;
172
127
  }
173
128
 
174
- ret = ssl_set_pkey(ssl->cert, pkey);
175
- return ret;
129
+ return ssl_set_pkey(ssl->cert, pkey);
176
130
  }
177
131
 
178
132
  int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const uint8_t *der,
@@ -195,72 +149,6 @@ int SSL_use_PrivateKey_ASN1(int type, SSL *ssl, const uint8_t *der,
195
149
  return ret;
196
150
  }
197
151
 
198
- int SSL_CTX_use_certificate(SSL_CTX *ctx, X509 *x) {
199
- if (x == NULL) {
200
- OPENSSL_PUT_ERROR(SSL, ERR_R_PASSED_NULL_PARAMETER);
201
- return 0;
202
- }
203
-
204
- return ssl_set_cert(ctx->cert, x);
205
- }
206
-
207
- static int ssl_set_cert(CERT *c, X509 *x) {
208
- EVP_PKEY *pkey = X509_get_pubkey(x);
209
- if (pkey == NULL) {
210
- OPENSSL_PUT_ERROR(SSL, SSL_R_X509_LIB);
211
- return 0;
212
- }
213
-
214
- if (!is_key_type_supported(pkey->type)) {
215
- OPENSSL_PUT_ERROR(SSL, SSL_R_UNKNOWN_CERTIFICATE_TYPE);
216
- EVP_PKEY_free(pkey);
217
- return 0;
218
- }
219
-
220
- if (c->privatekey != NULL) {
221
- /* Sanity-check that the private key and the certificate match, unless the
222
- * key is opaque (in case of, say, a smartcard). */
223
- if (!EVP_PKEY_is_opaque(c->privatekey) &&
224
- !X509_check_private_key(x, c->privatekey)) {
225
- /* don't fail for a cert/key mismatch, just free current private key
226
- * (when switching to a different cert & key, first this function should
227
- * be used, then ssl_set_pkey */
228
- EVP_PKEY_free(c->privatekey);
229
- c->privatekey = NULL;
230
- /* clear error queue */
231
- ERR_clear_error();
232
- }
233
- }
234
-
235
- EVP_PKEY_free(pkey);
236
-
237
- X509_free(c->x509);
238
- X509_up_ref(x);
239
- c->x509 = x;
240
-
241
- return 1;
242
- }
243
-
244
- int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, size_t der_len,
245
- const uint8_t *der) {
246
- if (der_len > LONG_MAX) {
247
- OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW);
248
- return 0;
249
- }
250
-
251
- const uint8_t *p = der;
252
- X509 *x509 = d2i_X509(NULL, &p, (long)der_len);
253
- if (x509 == NULL || p != der + der_len) {
254
- OPENSSL_PUT_ERROR(SSL, ERR_R_ASN1_LIB);
255
- X509_free(x509);
256
- return 0;
257
- }
258
-
259
- int ret = SSL_CTX_use_certificate(ctx, x509);
260
- X509_free(x509);
261
- return ret;
262
- }
263
-
264
152
  int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa) {
265
153
  int ret;
266
154
  EVP_PKEY *pkey;
@@ -338,6 +226,8 @@ void SSL_CTX_set_private_key_method(SSL_CTX *ctx,
338
226
 
339
227
  static int set_signing_algorithm_prefs(CERT *cert, const uint16_t *prefs,
340
228
  size_t num_prefs) {
229
+ OPENSSL_free(cert->sigalgs);
230
+
341
231
  cert->num_sigalgs = 0;
342
232
  cert->sigalgs = BUF_memdup(prefs, num_prefs * sizeof(prefs[0]));
343
233
  if (cert->sigalgs == NULL) {
@@ -360,13 +250,13 @@ int SSL_set_signing_algorithm_prefs(SSL *ssl, const uint16_t *prefs,
360
250
  return set_signing_algorithm_prefs(ssl->cert, prefs, num_prefs);
361
251
  }
362
252
 
363
- OPENSSL_COMPILE_ASSERT(sizeof(int) >= 2 * sizeof(uint16_t),
364
- digest_list_conversion_cannot_overflow);
365
-
366
253
  int SSL_set_private_key_digest_prefs(SSL *ssl, const int *digest_nids,
367
254
  size_t num_digests) {
368
255
  OPENSSL_free(ssl->cert->sigalgs);
369
256
 
257
+ OPENSSL_COMPILE_ASSERT(sizeof(int) >= 2 * sizeof(uint16_t),
258
+ digest_list_conversion_cannot_overflow);
259
+
370
260
  ssl->cert->num_sigalgs = 0;
371
261
  ssl->cert->sigalgs = OPENSSL_malloc(sizeof(uint16_t) * 2 * num_digests);
372
262
  if (ssl->cert->sigalgs == NULL) {
@@ -0,0 +1,76 @@
1
+ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
2
+ * All rights reserved.
3
+ *
4
+ * This package is an SSL implementation written
5
+ * by Eric Young (eay@cryptsoft.com).
6
+ * The implementation was written so as to conform with Netscapes SSL.
7
+ *
8
+ * This library is free for commercial and non-commercial use as long as
9
+ * the following conditions are aheared to. The following conditions
10
+ * apply to all code found in this distribution, be it the RC4, RSA,
11
+ * lhash, DES, etc., code; not just the SSL code. The SSL documentation
12
+ * included with this distribution is covered by the same copyright terms
13
+ * except that the holder is Tim Hudson (tjh@cryptsoft.com).
14
+ *
15
+ * Copyright remains Eric Young's, and as such any Copyright notices in
16
+ * the code are not to be removed.
17
+ * If this package is used in a product, Eric Young should be given attribution
18
+ * as the author of the parts of the library used.
19
+ * This can be in the form of a textual message at program startup or
20
+ * in documentation (online or textual) provided with the package.
21
+ *
22
+ * Redistribution and use in source and binary forms, with or without
23
+ * modification, are permitted provided that the following conditions
24
+ * are met:
25
+ * 1. Redistributions of source code must retain the copyright
26
+ * notice, this list of conditions and the following disclaimer.
27
+ * 2. Redistributions in binary form must reproduce the above copyright
28
+ * notice, this list of conditions and the following disclaimer in the
29
+ * documentation and/or other materials provided with the distribution.
30
+ * 3. All advertising materials mentioning features or use of this software
31
+ * must display the following acknowledgement:
32
+ * "This product includes cryptographic software written by
33
+ * Eric Young (eay@cryptsoft.com)"
34
+ * The word 'cryptographic' can be left out if the rouines from the library
35
+ * being used are not cryptographic related :-).
36
+ * 4. If you include any Windows specific code (or a derivative thereof) from
37
+ * the apps directory (application code) you must include an acknowledgement:
38
+ * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
39
+ *
40
+ * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
41
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
42
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
43
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
44
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
45
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
46
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
48
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
49
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
50
+ * SUCH DAMAGE.
51
+ *
52
+ * The licence and distribution terms for any publically available version or
53
+ * derivative of this code cannot be changed. i.e. this code cannot simply be
54
+ * copied and put under another distribution licence
55
+ * [including the GNU Public Licence.] */
56
+
57
+ #include <openssl/ssl.h>
58
+
59
+ #include <openssl/err.h>
60
+ #include <openssl/rsa.h>
61
+
62
+
63
+ /* This function has been converted to C++ to check if all of libssl's
64
+ * consumers' toolchains are capable of handling C++11. Once all problems in
65
+ * consumer toolchains are found and fixed, we will convert the rest of
66
+ * libssl. */
67
+
68
+ int SSL_use_RSAPrivateKey_ASN1(SSL *ssl, const uint8_t *der, size_t der_len) {
69
+ bssl::UniquePtr<RSA> rsa(RSA_private_key_from_bytes(der, der_len));
70
+ if (!rsa) {
71
+ OPENSSL_PUT_ERROR(SSL, ERR_R_ASN1_LIB);
72
+ return 0;
73
+ }
74
+
75
+ return SSL_use_RSAPrivateKey(ssl, rsa.get());
76
+ }
@@ -160,35 +160,42 @@ static void SSL_SESSION_list_remove(SSL_CTX *ctx, SSL_SESSION *session);
160
160
  static void SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *session);
161
161
  static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *session, int lock);
162
162
 
163
- SSL_SESSION *SSL_SESSION_new(void) {
163
+ SSL_SESSION *ssl_session_new(const SSL_X509_METHOD *x509_method) {
164
164
  SSL_SESSION *session = OPENSSL_malloc(sizeof(SSL_SESSION));
165
165
  if (session == NULL) {
166
166
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
167
167
  return 0;
168
168
  }
169
- memset(session, 0, sizeof(SSL_SESSION));
169
+ OPENSSL_memset(session, 0, sizeof(SSL_SESSION));
170
170
 
171
+ session->x509_method = x509_method;
171
172
  session->verify_result = X509_V_ERR_INVALID_CALL;
172
173
  session->references = 1;
173
174
  session->timeout = SSL_DEFAULT_SESSION_TIMEOUT;
175
+ session->auth_timeout = SSL_DEFAULT_SESSION_TIMEOUT;
174
176
  session->time = (long)time(NULL);
175
177
  CRYPTO_new_ex_data(&session->ex_data);
176
178
  return session;
177
179
  }
178
180
 
181
+ SSL_SESSION *SSL_SESSION_new(const SSL_CTX *ctx) {
182
+ return ssl_session_new(ctx->x509_method);
183
+ }
184
+
179
185
  SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
180
- SSL_SESSION *new_session = SSL_SESSION_new();
186
+ SSL_SESSION *new_session = ssl_session_new(session->x509_method);
181
187
  if (new_session == NULL) {
182
188
  goto err;
183
189
  }
184
190
 
191
+ new_session->is_server = session->is_server;
185
192
  new_session->ssl_version = session->ssl_version;
186
193
  new_session->sid_ctx_length = session->sid_ctx_length;
187
- memcpy(new_session->sid_ctx, session->sid_ctx, session->sid_ctx_length);
194
+ OPENSSL_memcpy(new_session->sid_ctx, session->sid_ctx, session->sid_ctx_length);
188
195
 
189
196
  /* Copy the key material. */
190
197
  new_session->master_key_length = session->master_key_length;
191
- memcpy(new_session->master_key, session->master_key,
198
+ OPENSSL_memcpy(new_session->master_key, session->master_key,
192
199
  session->master_key_length);
193
200
  new_session->cipher = session->cipher;
194
201
 
@@ -199,16 +206,24 @@ SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
199
206
  goto err;
200
207
  }
201
208
  }
202
- if (session->peer != NULL) {
203
- X509_up_ref(session->peer);
204
- new_session->peer = session->peer;
205
- }
206
- if (session->cert_chain != NULL) {
207
- new_session->cert_chain = X509_chain_up_ref(session->cert_chain);
208
- if (new_session->cert_chain == NULL) {
209
+ if (session->certs != NULL) {
210
+ new_session->certs = sk_CRYPTO_BUFFER_new_null();
211
+ if (new_session->certs == NULL) {
209
212
  goto err;
210
213
  }
214
+ for (size_t i = 0; i < sk_CRYPTO_BUFFER_num(session->certs); i++) {
215
+ CRYPTO_BUFFER *buffer = sk_CRYPTO_BUFFER_value(session->certs, i);
216
+ if (!sk_CRYPTO_BUFFER_push(new_session->certs, buffer)) {
217
+ goto err;
218
+ }
219
+ CRYPTO_BUFFER_up_ref(buffer);
220
+ }
211
221
  }
222
+
223
+ if (!session->x509_method->session_dup(new_session, session)) {
224
+ goto err;
225
+ }
226
+
212
227
  new_session->verify_result = session->verify_result;
213
228
 
214
229
  new_session->ocsp_response_length = session->ocsp_response_length;
@@ -231,36 +246,49 @@ SSL_SESSION *SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
231
246
  }
232
247
  }
233
248
 
234
- memcpy(new_session->peer_sha256, session->peer_sha256, SHA256_DIGEST_LENGTH);
249
+ OPENSSL_memcpy(new_session->peer_sha256, session->peer_sha256,
250
+ SHA256_DIGEST_LENGTH);
235
251
  new_session->peer_sha256_valid = session->peer_sha256_valid;
236
252
 
253
+ if (session->tlsext_hostname != NULL) {
254
+ new_session->tlsext_hostname = BUF_strdup(session->tlsext_hostname);
255
+ if (new_session->tlsext_hostname == NULL) {
256
+ goto err;
257
+ }
258
+ }
259
+
260
+ new_session->peer_signature_algorithm = session->peer_signature_algorithm;
261
+
237
262
  new_session->timeout = session->timeout;
263
+ new_session->auth_timeout = session->auth_timeout;
238
264
  new_session->time = session->time;
239
265
 
240
266
  /* Copy non-authentication connection properties. */
241
267
  if (dup_flags & SSL_SESSION_INCLUDE_NONAUTH) {
242
268
  new_session->session_id_length = session->session_id_length;
243
- memcpy(new_session->session_id, session->session_id,
244
- session->session_id_length);
269
+ OPENSSL_memcpy(new_session->session_id, session->session_id,
270
+ session->session_id_length);
245
271
 
246
- new_session->key_exchange_info = session->key_exchange_info;
272
+ new_session->group_id = session->group_id;
247
273
 
248
- if (session->tlsext_hostname != NULL) {
249
- new_session->tlsext_hostname = BUF_strdup(session->tlsext_hostname);
250
- if (new_session->tlsext_hostname == NULL) {
251
- goto err;
252
- }
253
- }
254
-
255
- memcpy(new_session->original_handshake_hash,
256
- session->original_handshake_hash,
257
- session->original_handshake_hash_len);
274
+ OPENSSL_memcpy(new_session->original_handshake_hash,
275
+ session->original_handshake_hash,
276
+ session->original_handshake_hash_len);
258
277
  new_session->original_handshake_hash_len =
259
278
  session->original_handshake_hash_len;
260
279
  new_session->tlsext_tick_lifetime_hint = session->tlsext_tick_lifetime_hint;
261
- new_session->ticket_flags = session->ticket_flags;
262
280
  new_session->ticket_age_add = session->ticket_age_add;
281
+ new_session->ticket_max_early_data = session->ticket_max_early_data;
263
282
  new_session->extended_master_secret = session->extended_master_secret;
283
+
284
+ if (session->early_alpn != NULL) {
285
+ new_session->early_alpn =
286
+ BUF_memdup(session->early_alpn, session->early_alpn_len);
287
+ if (new_session->early_alpn == NULL) {
288
+ goto err;
289
+ }
290
+ }
291
+ new_session->early_alpn_len = session->early_alpn_len;
264
292
  }
265
293
 
266
294
  /* Copy the ticket. */
@@ -286,6 +314,52 @@ err:
286
314
  return 0;
287
315
  }
288
316
 
317
+ void ssl_session_rebase_time(SSL *ssl, SSL_SESSION *session) {
318
+ struct timeval now;
319
+ ssl_get_current_time(ssl, &now);
320
+
321
+ /* To avoid overflows and underflows, if we've gone back in time or any value
322
+ * is negative, update the time, but mark the session expired. */
323
+ if (session->time > now.tv_sec ||
324
+ session->time < 0 ||
325
+ now.tv_sec < 0) {
326
+ session->time = now.tv_sec;
327
+ session->timeout = 0;
328
+ session->auth_timeout = 0;
329
+ return;
330
+ }
331
+
332
+ /* Adjust the session time and timeouts. If the session has already expired,
333
+ * clamp the timeouts at zero. */
334
+ long delta = now.tv_sec - session->time;
335
+ session->time = now.tv_sec;
336
+ if (session->timeout < delta) {
337
+ session->timeout = 0;
338
+ } else {
339
+ session->timeout -= delta;
340
+ }
341
+ if (session->auth_timeout < delta) {
342
+ session->auth_timeout = 0;
343
+ } else {
344
+ session->auth_timeout -= delta;
345
+ }
346
+ }
347
+
348
+ void ssl_session_renew_timeout(SSL *ssl, SSL_SESSION *session, long timeout) {
349
+ /* Rebase the timestamp relative to the current time so |timeout| is measured
350
+ * correctly. */
351
+ ssl_session_rebase_time(ssl, session);
352
+
353
+ if (session->timeout > timeout) {
354
+ return;
355
+ }
356
+
357
+ session->timeout = timeout;
358
+ if (session->timeout > session->auth_timeout) {
359
+ session->timeout = session->auth_timeout;
360
+ }
361
+ }
362
+
289
363
  int SSL_SESSION_up_ref(SSL_SESSION *session) {
290
364
  CRYPTO_refcount_inc(&session->references);
291
365
  return 1;
@@ -301,13 +375,14 @@ void SSL_SESSION_free(SSL_SESSION *session) {
301
375
 
302
376
  OPENSSL_cleanse(session->master_key, sizeof(session->master_key));
303
377
  OPENSSL_cleanse(session->session_id, sizeof(session->session_id));
304
- X509_free(session->peer);
305
- sk_X509_pop_free(session->cert_chain, X509_free);
378
+ sk_CRYPTO_BUFFER_pop_free(session->certs, CRYPTO_BUFFER_free);
379
+ session->x509_method->session_clear(session);
306
380
  OPENSSL_free(session->tlsext_hostname);
307
381
  OPENSSL_free(session->tlsext_tick);
308
382
  OPENSSL_free(session->tlsext_signed_cert_timestamp_list);
309
383
  OPENSSL_free(session->ocsp_response);
310
384
  OPENSSL_free(session->psk_identity);
385
+ OPENSSL_free(session->early_alpn);
311
386
  OPENSSL_cleanse(session, sizeof(*session));
312
387
  OPENSSL_free(session);
313
388
  }
@@ -333,7 +408,7 @@ long SSL_SESSION_get_time(const SSL_SESSION *session) {
333
408
  }
334
409
 
335
410
  X509 *SSL_SESSION_get0_peer(const SSL_SESSION *session) {
336
- return session->peer;
411
+ return session->x509_peer;
337
412
  }
338
413
 
339
414
  size_t SSL_SESSION_get_master_key(const SSL_SESSION *session, uint8_t *out,
@@ -345,7 +420,7 @@ size_t SSL_SESSION_get_master_key(const SSL_SESSION *session, uint8_t *out,
345
420
  if (max_out > (size_t)session->master_key_length) {
346
421
  max_out = (size_t)session->master_key_length;
347
422
  }
348
- memcpy(out, session->master_key, max_out);
423
+ OPENSSL_memcpy(out, session->master_key, max_out);
349
424
  return max_out;
350
425
  }
351
426
 
@@ -364,18 +439,20 @@ long SSL_SESSION_set_timeout(SSL_SESSION *session, long timeout) {
364
439
  }
365
440
 
366
441
  session->timeout = timeout;
442
+ session->auth_timeout = timeout;
367
443
  return 1;
368
444
  }
369
445
 
370
446
  int SSL_SESSION_set1_id_context(SSL_SESSION *session, const uint8_t *sid_ctx,
371
- unsigned sid_ctx_len) {
372
- if (sid_ctx_len > SSL_MAX_SID_CTX_LENGTH) {
447
+ size_t sid_ctx_len) {
448
+ if (sid_ctx_len > sizeof(session->sid_ctx)) {
373
449
  OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_SESSION_ID_CONTEXT_TOO_LONG);
374
450
  return 0;
375
451
  }
376
452
 
377
- session->sid_ctx_length = sid_ctx_len;
378
- memcpy(session->sid_ctx, sid_ctx, sid_ctx_len);
453
+ assert(sizeof(session->sid_ctx) < 256);
454
+ session->sid_ctx_length = (uint8_t)sid_ctx_len;
455
+ OPENSSL_memcpy(session->sid_ctx, sid_ctx, sid_ctx_len);
379
456
 
380
457
  return 1;
381
458
  }
@@ -391,8 +468,8 @@ SSL_SESSION *SSL_get_session(const SSL *ssl) {
391
468
  if (!SSL_in_init(ssl)) {
392
469
  return ssl->s3->established_session;
393
470
  }
394
- if (ssl->s3->new_session != NULL) {
395
- return ssl->s3->new_session;
471
+ if (ssl->s3->hs->new_session != NULL) {
472
+ return ssl->s3->hs->new_session;
396
473
  }
397
474
  return ssl->session;
398
475
  }
@@ -425,31 +502,51 @@ void *SSL_SESSION_get_ex_data(const SSL_SESSION *session, int idx) {
425
502
  return CRYPTO_get_ex_data(&session->ex_data, idx);
426
503
  }
427
504
 
428
- int ssl_get_new_session(SSL *ssl, int is_server) {
505
+ const EVP_MD *SSL_SESSION_get_digest(const SSL_SESSION *session,
506
+ const SSL *ssl) {
507
+ uint16_t version;
508
+ if (!ssl->method->version_from_wire(&version, session->ssl_version)) {
509
+ return NULL;
510
+ }
511
+
512
+ return ssl_get_handshake_digest(session->cipher->algorithm_prf, version);
513
+ }
514
+
515
+ int ssl_get_new_session(SSL_HANDSHAKE *hs, int is_server) {
516
+ SSL *const ssl = hs->ssl;
429
517
  if (ssl->mode & SSL_MODE_NO_SESSION_CREATION) {
430
518
  OPENSSL_PUT_ERROR(SSL, SSL_R_SESSION_MAY_NOT_BE_CREATED);
431
519
  return 0;
432
520
  }
433
521
 
434
- SSL_SESSION *session = SSL_SESSION_new();
522
+ SSL_SESSION *session = ssl_session_new(ssl->ctx->x509_method);
435
523
  if (session == NULL) {
436
524
  return 0;
437
525
  }
438
526
 
527
+ session->is_server = is_server;
528
+ session->ssl_version = ssl->version;
529
+
439
530
  /* Fill in the time from the |SSL_CTX|'s clock. */
440
531
  struct timeval now;
441
532
  ssl_get_current_time(ssl, &now);
442
533
  session->time = now.tv_sec;
443
534
 
444
- /* If the context has a default timeout, use it over the default. */
445
- if (ssl->initial_ctx->session_timeout != 0) {
535
+ uint16_t version = ssl3_protocol_version(ssl);
536
+ if (version >= TLS1_3_VERSION) {
537
+ /* TLS 1.3 uses tickets as authenticators, so we are willing to use them for
538
+ * longer. */
539
+ session->timeout = ssl->initial_ctx->session_psk_dhe_timeout;
540
+ session->auth_timeout = SSL_DEFAULT_SESSION_AUTH_TIMEOUT;
541
+ } else {
542
+ /* TLS 1.2 resumption does not incorporate new key material, so we use a
543
+ * much shorter timeout. */
446
544
  session->timeout = ssl->initial_ctx->session_timeout;
545
+ session->auth_timeout = ssl->initial_ctx->session_timeout;
447
546
  }
448
547
 
449
- session->ssl_version = ssl->version;
450
-
451
548
  if (is_server) {
452
- if (ssl->tlsext_ticket_expected) {
549
+ if (hs->ticket_expected || version >= TLS1_3_VERSION) {
453
550
  /* Don't set session IDs for sessions resumed with tickets. This will keep
454
551
  * them out of the session cache. */
455
552
  session->session_id_length = 0;
@@ -459,31 +556,24 @@ int ssl_get_new_session(SSL *ssl, int is_server) {
459
556
  goto err;
460
557
  }
461
558
  }
462
-
463
- if (ssl->tlsext_hostname != NULL) {
464
- session->tlsext_hostname = BUF_strdup(ssl->tlsext_hostname);
465
- if (session->tlsext_hostname == NULL) {
466
- OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
467
- goto err;
468
- }
469
- }
470
559
  } else {
471
560
  session->session_id_length = 0;
472
561
  }
473
562
 
474
- if (ssl->sid_ctx_length > sizeof(session->sid_ctx)) {
563
+ if (ssl->cert->sid_ctx_length > sizeof(session->sid_ctx)) {
475
564
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
476
565
  goto err;
477
566
  }
478
- memcpy(session->sid_ctx, ssl->sid_ctx, ssl->sid_ctx_length);
479
- session->sid_ctx_length = ssl->sid_ctx_length;
567
+ OPENSSL_memcpy(session->sid_ctx, ssl->cert->sid_ctx,
568
+ ssl->cert->sid_ctx_length);
569
+ session->sid_ctx_length = ssl->cert->sid_ctx_length;
480
570
 
481
571
  /* The session is marked not resumable until it is completely filled in. */
482
572
  session->not_resumable = 1;
483
573
  session->verify_result = X509_V_ERR_INVALID_CALL;
484
574
 
485
- SSL_SESSION_free(ssl->s3->new_session);
486
- ssl->s3->new_session = session;
575
+ SSL_SESSION_free(hs->new_session);
576
+ hs->new_session = session;
487
577
  ssl_set_session(ssl, NULL);
488
578
  return 1;
489
579
 
@@ -538,7 +628,7 @@ int ssl_encrypt_ticket(SSL *ssl, CBB *out, const SSL_SESSION *session) {
538
628
  NULL)) {
539
629
  goto err;
540
630
  }
541
- memcpy(key_name, tctx->tlsext_tick_key_name, 16);
631
+ OPENSSL_memcpy(key_name, tctx->tlsext_tick_key_name, 16);
542
632
  }
543
633
 
544
634
  uint8_t *ptr;
@@ -550,7 +640,7 @@ int ssl_encrypt_ticket(SSL *ssl, CBB *out, const SSL_SESSION *session) {
550
640
 
551
641
  size_t total = 0;
552
642
  #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
553
- memcpy(ptr, session_buf, session_len);
643
+ OPENSSL_memcpy(ptr, session_buf, session_len);
554
644
  total = session_len;
555
645
  #else
556
646
  int len;
@@ -589,8 +679,9 @@ int ssl_session_is_context_valid(const SSL *ssl, const SSL_SESSION *session) {
589
679
  return 0;
590
680
  }
591
681
 
592
- return session->sid_ctx_length == ssl->sid_ctx_length &&
593
- memcmp(session->sid_ctx, ssl->sid_ctx, ssl->sid_ctx_length) == 0;
682
+ return session->sid_ctx_length == ssl->cert->sid_ctx_length &&
683
+ OPENSSL_memcmp(session->sid_ctx, ssl->cert->sid_ctx,
684
+ ssl->cert->sid_ctx_length) == 0;
594
685
  }
595
686
 
596
687
  int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session) {
@@ -600,7 +691,36 @@ int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session) {
600
691
 
601
692
  struct timeval now;
602
693
  ssl_get_current_time(ssl, &now);
603
- return session->timeout >= (long)now.tv_sec - session->time;
694
+
695
+ /* Reject tickets from the future to avoid underflow. */
696
+ if ((long)now.tv_sec < session->time) {
697
+ return 0;
698
+ }
699
+
700
+ return session->timeout > (long)now.tv_sec - session->time;
701
+ }
702
+
703
+ int ssl_session_is_resumable(const SSL_HANDSHAKE *hs,
704
+ const SSL_SESSION *session) {
705
+ const SSL *const ssl = hs->ssl;
706
+ return ssl_session_is_context_valid(ssl, session) &&
707
+ /* The session must have been created by the same type of end point as
708
+ * we're now using it with. */
709
+ ssl->server == session->is_server &&
710
+ /* The session must not be expired. */
711
+ ssl_session_is_time_valid(ssl, session) &&
712
+ /* Only resume if the session's version matches the negotiated
713
+ * version. */
714
+ ssl->version == session->ssl_version &&
715
+ /* Only resume if the session's cipher matches the negotiated one. */
716
+ hs->new_cipher == session->cipher &&
717
+ /* If the session contains a client certificate (either the full
718
+ * certificate or just the hash) then require that the form of the
719
+ * certificate matches the current configuration. */
720
+ ((sk_CRYPTO_BUFFER_num(session->certs) == 0 &&
721
+ !session->peer_sha256_valid) ||
722
+ session->peer_sha256_valid ==
723
+ ssl->retain_only_sha256_of_client_certs);
604
724
  }
605
725
 
606
726
  /* ssl_lookup_session looks up |session_id| in the session cache and sets
@@ -622,7 +742,7 @@ static enum ssl_session_result_t ssl_lookup_session(
622
742
  SSL_SESSION data;
623
743
  data.ssl_version = ssl->version;
624
744
  data.session_id_length = session_id_len;
625
- memcpy(data.session_id, session_id, session_id_len);
745
+ OPENSSL_memcpy(data.session_id, session_id, session_id_len);
626
746
 
627
747
  CRYPTO_MUTEX_lock_read(&ssl->initial_ctx->lock);
628
748
  session = lh_SSL_SESSION_retrieve(ssl->initial_ctx->sessions, &data);
@@ -663,15 +783,8 @@ static enum ssl_session_result_t ssl_lookup_session(
663
783
  }
664
784
  }
665
785
 
666
- if (session == NULL) {
667
- return ssl_session_success;
668
- }
669
-
670
- if (!ssl_session_is_context_valid(ssl, session)) {
671
- /* The client did not offer a suitable ticket or session ID. */
672
- SSL_SESSION_free(session);
673
- session = NULL;
674
- } else if (!ssl_session_is_time_valid(ssl, session)) {
786
+ if (session != NULL &&
787
+ !ssl_session_is_time_valid(ssl, session)) {
675
788
  /* The session was from the cache, so remove it. */
676
789
  SSL_CTX_remove_session(ssl->initial_ctx, session);
677
790
  SSL_SESSION_free(session);
@@ -683,8 +796,8 @@ static enum ssl_session_result_t ssl_lookup_session(
683
796
  }
684
797
 
685
798
  enum ssl_session_result_t ssl_get_prev_session(
686
- SSL *ssl, SSL_SESSION **out_session, int *out_send_ticket,
687
- const struct ssl_early_callback_ctx *ctx) {
799
+ SSL *ssl, SSL_SESSION **out_session, int *out_tickets_supported,
800
+ int *out_renew_ticket, const SSL_CLIENT_HELLO *client_hello) {
688
801
  /* This is used only by servers. */
689
802
  assert(ssl->server);
690
803
  SSL_SESSION *session = NULL;
@@ -696,28 +809,26 @@ enum ssl_session_result_t ssl_get_prev_session(
696
809
  const int tickets_supported =
697
810
  !(SSL_get_options(ssl) & SSL_OP_NO_TICKET) &&
698
811
  ssl->version > SSL3_VERSION &&
699
- SSL_early_callback_ctx_extension_get(ctx, TLSEXT_TYPE_session_ticket,
700
- &ticket, &ticket_len);
812
+ SSL_early_callback_ctx_extension_get(
813
+ client_hello, TLSEXT_TYPE_session_ticket, &ticket, &ticket_len);
701
814
  if (tickets_supported && ticket_len > 0) {
702
815
  if (!tls_process_ticket(ssl, &session, &renew_ticket, ticket, ticket_len,
703
- ctx->session_id, ctx->session_id_len)) {
816
+ client_hello->session_id,
817
+ client_hello->session_id_len)) {
704
818
  return ssl_session_error;
705
819
  }
706
820
  } else {
707
821
  /* The client didn't send a ticket, so the session ID is a real ID. */
708
822
  enum ssl_session_result_t lookup_ret = ssl_lookup_session(
709
- ssl, &session, ctx->session_id, ctx->session_id_len);
823
+ ssl, &session, client_hello->session_id, client_hello->session_id_len);
710
824
  if (lookup_ret != ssl_session_success) {
711
825
  return lookup_ret;
712
826
  }
713
827
  }
714
828
 
715
829
  *out_session = session;
716
- if (session != NULL) {
717
- *out_send_ticket = renew_ticket;
718
- } else {
719
- *out_send_ticket = tickets_supported;
720
- }
830
+ *out_tickets_supported = tickets_supported;
831
+ *out_renew_ticket = renew_ticket;
721
832
  return ssl_session_success;
722
833
  }
723
834
 
@@ -800,7 +911,9 @@ static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *session, int lock) {
800
911
 
801
912
  int SSL_set_session(SSL *ssl, SSL_SESSION *session) {
802
913
  /* SSL_set_session may only be called before the handshake has started. */
803
- if (ssl->state != SSL_ST_INIT || ssl->s3->initial_handshake_complete) {
914
+ if (ssl->s3->initial_handshake_complete ||
915
+ ssl->s3->hs == NULL ||
916
+ ssl->s3->hs->state != SSL_ST_INIT) {
804
917
  abort();
805
918
  }
806
919
 
@@ -825,6 +938,11 @@ long SSL_CTX_set_timeout(SSL_CTX *ctx, long timeout) {
825
938
  return 0;
826
939
  }
827
940
 
941
+ /* Historically, zero was treated as |SSL_DEFAULT_SESSION_TIMEOUT|. */
942
+ if (timeout == 0) {
943
+ timeout = SSL_DEFAULT_SESSION_TIMEOUT;
944
+ }
945
+
828
946
  long old_timeout = ctx->session_timeout;
829
947
  ctx->session_timeout = timeout;
830
948
  return old_timeout;
@@ -838,6 +956,10 @@ long SSL_CTX_get_timeout(const SSL_CTX *ctx) {
838
956
  return ctx->session_timeout;
839
957
  }
840
958
 
959
+ void SSL_CTX_set_session_psk_dhe_timeout(SSL_CTX *ctx, long timeout) {
960
+ ctx->session_psk_dhe_timeout = timeout;
961
+ }
962
+
841
963
  typedef struct timeout_param_st {
842
964
  SSL_CTX *ctx;
843
965
  long time;
@@ -964,17 +1086,6 @@ void (*SSL_CTX_get_info_callback(SSL_CTX *ctx))(const SSL *ssl, int type,
964
1086
  return ctx->info_callback;
965
1087
  }
966
1088
 
967
- void SSL_CTX_set_client_cert_cb(SSL_CTX *ctx, int (*cb)(SSL *ssl,
968
- X509 **out_x509,
969
- EVP_PKEY **out_pkey)) {
970
- ctx->client_cert_cb = cb;
971
- }
972
-
973
- int (*SSL_CTX_get_client_cert_cb(SSL_CTX *ctx))(SSL *ssl, X509 **out_x509,
974
- EVP_PKEY **out_pkey) {
975
- return ctx->client_cert_cb;
976
- }
977
-
978
1089
  void SSL_CTX_set_channel_id_cb(SSL_CTX *ctx,
979
1090
  void (*cb)(SSL *ssl, EVP_PKEY **pkey)) {
980
1091
  ctx->channel_id_cb = cb;