grpc 0.13.1 → 0.14.1.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 (724) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2098 -828
  3. data/include/grpc/byte_buffer.h +1 -1
  4. data/include/grpc/byte_buffer_reader.h +1 -20
  5. data/include/grpc/census.h +4 -4
  6. data/include/grpc/compression.h +6 -5
  7. data/include/grpc/grpc.h +31 -20
  8. data/include/grpc/grpc_security.h +17 -31
  9. data/include/grpc/grpc_security_constants.h +114 -0
  10. data/include/grpc/grpc_zookeeper.h +1 -1
  11. data/include/grpc/impl/codegen/alloc.h +1 -1
  12. data/include/grpc/impl/codegen/atm.h +1 -1
  13. data/include/grpc/impl/codegen/atm_gcc_atomic.h +1 -1
  14. data/include/grpc/impl/codegen/atm_gcc_sync.h +1 -1
  15. data/include/grpc/impl/codegen/atm_win32.h +1 -1
  16. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  17. data/{src/core/client_config/lb_policies/round_robin.h → include/grpc/impl/codegen/byte_buffer_reader.h} +19 -8
  18. data/include/grpc/impl/codegen/grpc_types.h +20 -3
  19. data/include/grpc/impl/codegen/log.h +9 -2
  20. data/include/grpc/impl/codegen/port_platform.h +102 -17
  21. data/include/grpc/impl/codegen/propagation_bits.h +3 -3
  22. data/include/grpc/impl/codegen/slice.h +3 -3
  23. data/include/grpc/impl/codegen/slice_buffer.h +3 -3
  24. data/include/grpc/impl/codegen/status.h +1 -1
  25. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  26. data/include/grpc/impl/codegen/sync_posix.h +1 -1
  27. data/include/grpc/impl/codegen/sync_win32.h +1 -1
  28. data/include/grpc/impl/codegen/time.h +3 -3
  29. data/include/grpc/status.h +1 -1
  30. data/include/grpc/support/alloc.h +1 -1
  31. data/include/grpc/support/atm.h +1 -1
  32. data/include/grpc/support/atm_gcc_atomic.h +4 -4
  33. data/include/grpc/support/atm_gcc_sync.h +1 -1
  34. data/include/grpc/support/atm_win32.h +1 -1
  35. data/include/grpc/support/avl.h +1 -1
  36. data/include/grpc/support/cmdline.h +1 -1
  37. data/include/grpc/support/cpu.h +1 -1
  38. data/include/grpc/support/histogram.h +1 -1
  39. data/include/grpc/support/host_port.h +1 -1
  40. data/include/grpc/support/log.h +1 -1
  41. data/include/grpc/support/log_win32.h +1 -1
  42. data/include/grpc/support/port_platform.h +1 -1
  43. data/include/grpc/support/slice.h +1 -1
  44. data/include/grpc/support/slice_buffer.h +1 -1
  45. data/include/grpc/support/string_util.h +3 -1
  46. data/include/grpc/support/subprocess.h +2 -2
  47. data/include/grpc/support/sync.h +1 -1
  48. data/include/grpc/support/sync_generic.h +1 -1
  49. data/include/grpc/support/sync_posix.h +1 -1
  50. data/include/grpc/support/sync_win32.h +1 -1
  51. data/include/grpc/support/thd.h +1 -1
  52. data/include/grpc/support/time.h +1 -1
  53. data/include/grpc/support/tls.h +1 -1
  54. data/include/grpc/support/tls_gcc.h +45 -1
  55. data/include/grpc/support/tls_msvc.h +3 -3
  56. data/include/grpc/support/tls_pthread.h +1 -1
  57. data/include/grpc/support/useful.h +1 -1
  58. data/src/boringssl/err_data.c +258 -252
  59. data/src/core/{census → ext/census}/aggregation.h +3 -3
  60. data/src/core/{statistics → ext/census}/census_interface.h +3 -3
  61. data/src/core/{statistics → ext/census}/census_rpc_stats.h +4 -4
  62. data/src/core/{census → ext/census}/context.c +2 -2
  63. data/src/core/{census → ext/census}/grpc_context.c +2 -2
  64. data/src/core/{census → ext/census}/grpc_filter.c +30 -16
  65. data/src/core/{census → ext/census}/grpc_filter.h +4 -4
  66. data/src/core/ext/census/grpc_plugin.c +82 -0
  67. data/src/core/{census → ext/census}/initialize.c +1 -1
  68. data/src/core/{census → ext/census}/mlog.c +2 -2
  69. data/src/core/{census → ext/census}/mlog.h +4 -4
  70. data/src/core/{census → ext/census}/operation.c +0 -0
  71. data/src/core/{census → ext/census}/placeholders.c +0 -0
  72. data/src/core/{census → ext/census}/rpc_metric_id.h +3 -3
  73. data/src/core/{census → ext/census}/tracing.c +0 -0
  74. data/src/core/{surface → ext/client_config}/channel_connectivity.c +8 -21
  75. data/src/core/{channel → ext/client_config}/client_channel.c +80 -35
  76. data/src/core/{channel → ext/client_config}/client_channel.h +5 -5
  77. data/src/core/{client_config/subchannel_factory.c → ext/client_config/client_channel_factory.c} +14 -6
  78. data/src/core/ext/client_config/client_channel_factory.h +85 -0
  79. data/src/core/{client_config → ext/client_config}/client_config.c +4 -2
  80. data/src/core/{client_config → ext/client_config}/client_config.h +4 -4
  81. data/src/core/ext/client_config/client_config_plugin.c +95 -0
  82. data/src/core/{client_config → ext/client_config}/connector.c +2 -2
  83. data/src/core/{client_config → ext/client_config}/connector.h +7 -10
  84. data/src/core/{client_config → ext/client_config}/default_initial_connect_string.c +1 -1
  85. data/src/core/{client_config → ext/client_config}/initial_connect_string.c +1 -1
  86. data/src/core/{client_config → ext/client_config}/initial_connect_string.h +4 -4
  87. data/src/core/{client_config → ext/client_config}/lb_policy.c +12 -3
  88. data/src/core/{client_config → ext/client_config}/lb_policy.h +19 -6
  89. data/src/core/{client_config → ext/client_config}/lb_policy_factory.c +4 -3
  90. data/src/core/{client_config → ext/client_config}/lb_policy_factory.h +14 -9
  91. data/src/core/{client_config → ext/client_config}/lb_policy_registry.c +4 -9
  92. data/src/core/{client_config → ext/client_config}/lb_policy_registry.h +7 -6
  93. data/src/core/ext/client_config/parse_address.c +137 -0
  94. data/src/core/ext/client_config/parse_address.h +56 -0
  95. data/src/core/{client_config → ext/client_config}/resolver.c +1 -1
  96. data/src/core/{client_config → ext/client_config}/resolver.h +6 -6
  97. data/src/core/{client_config → ext/client_config}/resolver_factory.c +1 -1
  98. data/src/core/{client_config → ext/client_config}/resolver_factory.h +7 -7
  99. data/src/core/{client_config → ext/client_config}/resolver_registry.c +25 -11
  100. data/src/core/{client_config → ext/client_config}/resolver_registry.h +9 -5
  101. data/src/core/{client_config → ext/client_config}/subchannel.c +90 -126
  102. data/src/core/{client_config → ext/client_config}/subchannel.h +15 -15
  103. data/src/core/{channel → ext/client_config}/subchannel_call_holder.c +9 -8
  104. data/src/core/{channel → ext/client_config}/subchannel_call_holder.h +7 -7
  105. data/src/core/{client_config → ext/client_config}/subchannel_index.c +3 -2
  106. data/src/core/{client_config → ext/client_config}/subchannel_index.h +5 -5
  107. data/src/core/{client_config → ext/client_config}/uri_parser.c +69 -1
  108. data/src/core/{client_config → ext/client_config}/uri_parser.h +15 -3
  109. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.c +18 -9
  110. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.h +5 -5
  111. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.c +1 -1
  112. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.h +0 -0
  113. data/src/core/{client_config/lb_policies → ext/lb_policy/pick_first}/pick_first.c +95 -32
  114. data/src/core/{client_config/lb_policies → ext/lb_policy/round_robin}/round_robin.c +98 -34
  115. data/src/core/{client_config/resolvers → ext/resolver/dns/native}/dns_resolver.c +83 -39
  116. data/src/core/{client_config/resolvers → ext/resolver/sockaddr}/sockaddr_resolver.c +66 -169
  117. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.c +1 -1
  118. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.h +3 -3
  119. data/src/core/{surface → ext/transport/chttp2/client/insecure}/channel_create.c +65 -59
  120. data/src/core/{surface → ext/transport/chttp2/client/secure}/secure_channel_create.c +77 -69
  121. data/src/core/{surface → ext/transport/chttp2/server/insecure}/server_chttp2.c +8 -11
  122. data/src/core/{security → ext/transport/chttp2/server/secure}/server_secure_chttp2.c +14 -17
  123. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.c +28 -74
  124. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.h +5 -5
  125. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +46 -0
  126. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.c +551 -310
  127. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.h +5 -5
  128. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame.h +3 -3
  129. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.c +30 -14
  130. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.h +10 -7
  131. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.c +2 -2
  132. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.h +5 -5
  133. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.c +2 -2
  134. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.h +5 -5
  135. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.c +9 -5
  136. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.h +8 -6
  137. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.c +6 -6
  138. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.h +5 -5
  139. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.c +11 -5
  140. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.h +8 -6
  141. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.c +21 -12
  142. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.h +8 -6
  143. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.c +42 -25
  144. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.h +7 -7
  145. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.c +21 -11
  146. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.h +4 -4
  147. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/http2_errors.h +3 -3
  148. data/src/core/ext/transport/chttp2/transport/huffsyms.c +105 -0
  149. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/huffsyms.h +3 -3
  150. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.c +2 -2
  151. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.h +4 -4
  152. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/internal.h +81 -37
  153. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/parsing.c +54 -21
  154. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.c +1 -1
  155. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.h +4 -4
  156. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_lists.c +10 -2
  157. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.c +1 -1
  158. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.h +3 -3
  159. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.c +4 -4
  160. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.h +4 -4
  161. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.c +1 -1
  162. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.h +3 -3
  163. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/writing.c +30 -20
  164. data/src/core/{channel → lib/channel}/channel_args.c +3 -15
  165. data/src/core/{channel → lib/channel}/channel_args.h +11 -15
  166. data/src/core/{channel → lib/channel}/channel_stack.c +5 -3
  167. data/src/core/{channel → lib/channel}/channel_stack.h +13 -8
  168. data/src/core/lib/channel/channel_stack_builder.c +277 -0
  169. data/src/core/lib/channel/channel_stack_builder.h +161 -0
  170. data/src/core/{channel → lib/channel}/compress_filter.c +51 -16
  171. data/src/core/{channel → lib/channel}/compress_filter.h +6 -4
  172. data/src/core/{channel → lib/channel}/connected_channel.c +34 -24
  173. data/src/core/lib/channel/connected_channel.h +42 -0
  174. data/src/core/{channel → lib/channel}/context.h +3 -3
  175. data/src/core/{channel → lib/channel}/http_client_filter.c +24 -13
  176. data/src/core/{channel → lib/channel}/http_client_filter.h +4 -4
  177. data/src/core/{channel → lib/channel}/http_server_filter.c +39 -19
  178. data/src/core/{channel → lib/channel}/http_server_filter.h +4 -4
  179. data/src/core/{compression → lib/compression}/algorithm_metadata.h +4 -4
  180. data/src/core/{compression → lib/compression}/compression_algorithm.c +46 -9
  181. data/src/core/{compression → lib/compression}/message_compress.c +1 -1
  182. data/src/core/{compression → lib/compression}/message_compress.h +3 -3
  183. data/src/core/{debug → lib/debug}/trace.c +2 -2
  184. data/src/core/{debug → lib/debug}/trace.h +3 -3
  185. data/src/core/{httpcli → lib/http}/format_request.c +8 -8
  186. data/src/core/{httpcli → lib/http}/format_request.h +4 -4
  187. data/src/core/{httpcli → lib/http}/httpcli.c +24 -19
  188. data/src/core/{httpcli → lib/http}/httpcli.h +14 -33
  189. data/src/core/{httpcli → lib/http}/httpcli_security_connector.c +5 -5
  190. data/src/core/lib/http/parser.c +341 -0
  191. data/src/core/lib/http/parser.h +119 -0
  192. data/src/core/{iomgr → lib/iomgr}/closure.c +8 -2
  193. data/src/core/{iomgr → lib/iomgr}/closure.h +7 -4
  194. data/src/core/{iomgr → lib/iomgr}/endpoint.c +1 -1
  195. data/src/core/{iomgr → lib/iomgr}/endpoint.h +5 -5
  196. data/src/core/{iomgr → lib/iomgr}/endpoint_pair.h +4 -4
  197. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_posix.c +8 -7
  198. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_windows.c +4 -4
  199. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +1936 -0
  200. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.h +41 -0
  201. data/src/core/lib/iomgr/ev_posix.c +164 -0
  202. data/src/core/lib/iomgr/ev_posix.h +158 -0
  203. data/src/core/{iomgr → lib/iomgr}/exec_ctx.c +78 -3
  204. data/src/core/{iomgr → lib/iomgr}/exec_ctx.h +25 -10
  205. data/src/core/{iomgr → lib/iomgr}/executor.c +3 -3
  206. data/src/core/{iomgr → lib/iomgr}/executor.h +5 -5
  207. data/src/core/{iomgr → lib/iomgr}/iocp_windows.c +6 -6
  208. data/src/core/{iomgr → lib/iomgr}/iocp_windows.h +5 -5
  209. data/src/core/{iomgr → lib/iomgr}/iomgr.c +13 -10
  210. data/src/core/{iomgr → lib/iomgr}/iomgr.h +3 -3
  211. data/src/core/{iomgr → lib/iomgr}/iomgr_internal.h +5 -9
  212. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.c +6 -6
  213. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.h +4 -4
  214. data/src/core/{iomgr → lib/iomgr}/iomgr_windows.c +7 -4
  215. data/src/core/{iomgr → lib/iomgr}/pollset.h +11 -11
  216. data/src/core/{iomgr → lib/iomgr}/pollset_set.h +5 -5
  217. data/src/core/{iomgr → lib/iomgr}/pollset_set_windows.c +2 -2
  218. data/src/core/lib/iomgr/pollset_set_windows.h +39 -0
  219. data/src/core/{iomgr → lib/iomgr}/pollset_windows.c +7 -7
  220. data/src/core/{iomgr → lib/iomgr}/pollset_windows.h +8 -5
  221. data/src/core/{iomgr → lib/iomgr}/resolve_address.h +10 -9
  222. data/src/core/{iomgr → lib/iomgr}/resolve_address_posix.c +22 -22
  223. data/src/core/{iomgr → lib/iomgr}/resolve_address_windows.c +20 -12
  224. data/src/core/{iomgr → lib/iomgr}/sockaddr.h +5 -5
  225. data/src/core/{iomgr → lib/iomgr}/sockaddr_posix.h +5 -5
  226. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.c +9 -16
  227. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.h +4 -4
  228. data/src/core/{iomgr → lib/iomgr}/sockaddr_win32.h +6 -4
  229. data/src/core/{iomgr → lib/iomgr}/socket_utils_common_posix.c +29 -7
  230. data/src/core/{iomgr → lib/iomgr}/socket_utils_linux.c +2 -2
  231. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.c +1 -1
  232. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.h +14 -4
  233. data/src/core/{iomgr → lib/iomgr}/socket_windows.c +7 -5
  234. data/src/core/{iomgr → lib/iomgr}/socket_windows.h +6 -6
  235. data/src/core/{iomgr → lib/iomgr}/tcp_client.h +6 -6
  236. data/src/core/{iomgr → lib/iomgr}/tcp_client_posix.c +33 -18
  237. data/src/core/{iomgr → lib/iomgr}/tcp_client_windows.c +30 -20
  238. data/src/core/{iomgr → lib/iomgr}/tcp_posix.c +9 -10
  239. data/src/core/{iomgr → lib/iomgr}/tcp_posix.h +6 -6
  240. data/src/core/{iomgr → lib/iomgr}/tcp_server.h +6 -6
  241. data/src/core/{iomgr → lib/iomgr}/tcp_server_posix.c +24 -37
  242. data/src/core/{iomgr → lib/iomgr}/tcp_server_windows.c +8 -36
  243. data/src/core/{iomgr → lib/iomgr}/tcp_windows.c +27 -17
  244. data/src/core/{iomgr → lib/iomgr}/tcp_windows.h +5 -5
  245. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.c +1 -1
  246. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.h +3 -3
  247. data/src/core/{iomgr → lib/iomgr}/timer.c +31 -4
  248. data/src/core/{iomgr → lib/iomgr}/timer.h +6 -7
  249. data/src/core/{iomgr → lib/iomgr}/timer_heap.c +2 -2
  250. data/src/core/{iomgr → lib/iomgr}/timer_heap.h +4 -4
  251. data/src/core/{iomgr → lib/iomgr}/udp_server.c +13 -37
  252. data/src/core/{iomgr → lib/iomgr}/udp_server.h +11 -10
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +89 -0
  254. data/src/core/{client_config/resolvers/sockaddr_resolver.h → lib/iomgr/unix_sockets_posix.h} +15 -11
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +59 -0
  256. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_eventfd.c +2 -2
  257. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_nospecial.c +1 -1
  258. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.c +8 -3
  259. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.h +4 -4
  260. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.c +2 -2
  261. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.h +3 -3
  262. data/src/core/{iomgr → lib/iomgr}/workqueue.h +10 -10
  263. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.c +5 -6
  264. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.h +5 -5
  265. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.c +1 -1
  266. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.h +3 -3
  267. data/src/core/{json → lib/json}/json.c +1 -1
  268. data/src/core/{json → lib/json}/json.h +4 -4
  269. data/src/core/{json → lib/json}/json_common.h +3 -3
  270. data/src/core/{json → lib/json}/json_reader.c +16 -4
  271. data/src/core/{json → lib/json}/json_reader.h +4 -4
  272. data/src/core/{json → lib/json}/json_string.c +4 -4
  273. data/src/core/{json → lib/json}/json_writer.c +1 -1
  274. data/src/core/{json → lib/json}/json_writer.h +4 -4
  275. data/src/core/{profiling → lib/profiling}/basic_timers.c +3 -2
  276. data/src/core/{profiling → lib/profiling}/stap_timers.c +2 -2
  277. data/src/core/{profiling → lib/profiling}/timers.h +3 -3
  278. data/src/core/{security → lib/security}/auth_filters.h +4 -4
  279. data/src/core/{security → lib/security}/b64.c +2 -2
  280. data/src/core/{security → lib/security}/b64.h +4 -4
  281. data/src/core/{security → lib/security}/client_auth_filter.c +16 -16
  282. data/src/core/{security → lib/security}/credentials.c +42 -26
  283. data/src/core/{security → lib/security}/credentials.h +11 -10
  284. data/src/core/{security → lib/security}/credentials_metadata.c +1 -1
  285. data/src/core/{security → lib/security}/credentials_posix.c +3 -3
  286. data/src/core/{security → lib/security}/credentials_win32.c +3 -3
  287. data/src/core/{security → lib/security}/google_default_credentials.c +10 -9
  288. data/src/core/{security → lib/security}/handshake.c +4 -4
  289. data/src/core/{security → lib/security}/handshake.h +6 -6
  290. data/src/core/{security → lib/security}/json_token.c +4 -4
  291. data/src/core/{security → lib/security}/json_token.h +4 -4
  292. data/src/core/{security → lib/security}/jwt_verifier.c +14 -14
  293. data/src/core/{security → lib/security}/jwt_verifier.h +5 -5
  294. data/src/core/{security → lib/security}/secure_endpoint.c +9 -8
  295. data/src/core/{security → lib/security}/secure_endpoint.h +4 -4
  296. data/src/core/{security → lib/security}/security_connector.c +53 -21
  297. data/src/core/{security → lib/security}/security_connector.h +8 -8
  298. data/src/core/{security → lib/security}/security_context.c +5 -5
  299. data/src/core/{security → lib/security}/security_context.h +5 -5
  300. data/src/core/{security → lib/security}/server_auth_filter.c +9 -9
  301. data/src/core/{support → lib/support}/alloc.c +5 -3
  302. data/src/core/{support → lib/support}/avl.c +1 -1
  303. data/src/core/lib/support/backoff.c +76 -0
  304. data/src/core/lib/support/backoff.h +68 -0
  305. data/src/core/{support → lib/support}/block_annotate.h +3 -3
  306. data/src/core/{support → lib/support}/cmdline.c +1 -1
  307. data/src/core/{support → lib/support}/cpu_iphone.c +0 -0
  308. data/src/core/{support → lib/support}/cpu_linux.c +2 -2
  309. data/src/core/{support → lib/support}/cpu_posix.c +2 -2
  310. data/src/core/{support → lib/support}/cpu_windows.c +0 -0
  311. data/src/core/{support → lib/support}/env.h +3 -3
  312. data/src/core/{support → lib/support}/env_linux.c +3 -3
  313. data/src/core/{support → lib/support}/env_posix.c +2 -2
  314. data/src/core/{support → lib/support}/env_win32.c +27 -21
  315. data/src/core/{support → lib/support}/histogram.c +1 -1
  316. data/src/core/{support → lib/support}/host_port.c +1 -1
  317. data/src/core/{support → lib/support}/load_file.c +4 -4
  318. data/src/core/{support → lib/support}/load_file.h +4 -4
  319. data/src/core/{support → lib/support}/log.c +33 -0
  320. data/src/core/{support → lib/support}/log_android.c +2 -2
  321. data/src/core/{support → lib/support}/log_linux.c +6 -5
  322. data/src/core/{support → lib/support}/log_posix.c +3 -3
  323. data/src/core/{support → lib/support}/log_win32.c +8 -22
  324. data/src/core/{support → lib/support}/murmur_hash.c +1 -1
  325. data/src/core/{support → lib/support}/murmur_hash.h +3 -3
  326. data/src/core/{support → lib/support}/slice.c +0 -0
  327. data/src/core/{support → lib/support}/slice_buffer.c +0 -0
  328. data/src/core/{support → lib/support}/stack_lockfree.c +7 -7
  329. data/src/core/{support → lib/support}/stack_lockfree.h +3 -3
  330. data/src/core/{support → lib/support}/string.c +1 -1
  331. data/src/core/{support → lib/support}/string.h +4 -4
  332. data/src/core/{support → lib/support}/string_posix.c +1 -1
  333. data/src/core/{support/string_win32.c → lib/support/string_util_win32.c} +23 -38
  334. data/src/core/lib/support/string_win32.c +83 -0
  335. data/src/core/{support → lib/support}/string_win32.h +3 -3
  336. data/src/core/{support → lib/support}/subprocess_posix.c +3 -3
  337. data/src/core/{support → lib/support}/subprocess_windows.c +3 -3
  338. data/src/core/{support → lib/support}/sync.c +2 -2
  339. data/src/core/{support → lib/support}/sync_posix.c +3 -3
  340. data/src/core/{support → lib/support}/sync_win32.c +1 -1
  341. data/src/core/{support → lib/support}/thd.c +0 -0
  342. data/src/core/{support → lib/support}/thd_internal.h +3 -3
  343. data/src/core/{support → lib/support}/thd_posix.c +4 -3
  344. data/src/core/{support → lib/support}/thd_win32.c +1 -1
  345. data/src/core/{support → lib/support}/time.c +2 -2
  346. data/src/core/{support → lib/support}/time_posix.c +12 -6
  347. data/src/core/{support → lib/support}/time_precise.c +0 -0
  348. data/src/core/{support → lib/support}/time_precise.h +3 -3
  349. data/src/core/{support → lib/support}/time_win32.c +7 -7
  350. data/src/core/{support → lib/support}/tls_pthread.c +0 -0
  351. data/src/core/{support → lib/support}/tmpfile.h +4 -4
  352. data/src/core/lib/support/tmpfile_msys.c +73 -0
  353. data/src/core/{support → lib/support}/tmpfile_posix.c +5 -5
  354. data/src/core/{support → lib/support}/tmpfile_win32.c +5 -5
  355. data/src/core/{support → lib/support}/wrap_memcpy.c +0 -0
  356. data/src/core/{surface → lib/surface}/alarm.c +3 -3
  357. data/src/core/{surface → lib/surface}/api_trace.c +1 -1
  358. data/src/core/{surface → lib/surface}/api_trace.h +4 -4
  359. data/src/core/{surface → lib/surface}/byte_buffer.c +3 -3
  360. data/src/core/{surface → lib/surface}/byte_buffer_reader.c +3 -3
  361. data/src/core/{surface → lib/surface}/call.c +145 -73
  362. data/src/core/{surface → lib/surface}/call.h +14 -7
  363. data/src/core/{surface → lib/surface}/call_details.c +1 -1
  364. data/src/core/{surface → lib/surface}/call_log_batch.c +2 -2
  365. data/src/core/{surface → lib/surface}/call_test_only.h +3 -3
  366. data/src/core/{surface → lib/surface}/channel.c +33 -34
  367. data/src/core/{surface → lib/surface}/channel.h +9 -9
  368. data/src/core/lib/surface/channel_init.c +140 -0
  369. data/src/core/lib/surface/channel_init.h +87 -0
  370. data/src/core/{surface → lib/surface}/channel_ping.c +4 -4
  371. data/src/core/lib/surface/channel_stack_type.c +54 -0
  372. data/src/core/{httpcli/parser.h → lib/surface/channel_stack_type.h} +22 -28
  373. data/src/core/{surface → lib/surface}/completion_queue.c +15 -11
  374. data/src/core/{surface → lib/surface}/completion_queue.h +4 -4
  375. data/src/core/{surface → lib/surface}/event_string.c +2 -2
  376. data/src/core/{surface → lib/surface}/event_string.h +3 -3
  377. data/src/core/lib/surface/init.c +217 -0
  378. data/src/core/{surface → lib/surface}/init.h +4 -3
  379. data/src/core/lib/surface/init_secure.c +89 -0
  380. data/src/core/{surface → lib/surface}/lame_client.c +31 -19
  381. data/src/core/{iomgr/pollset_set_windows.h → lib/surface/lame_client.h} +7 -5
  382. data/src/core/{surface → lib/surface}/metadata_array.c +1 -1
  383. data/src/core/{surface → lib/surface}/server.c +208 -183
  384. data/src/core/{surface → lib/surface}/server.h +6 -11
  385. data/src/core/{surface → lib/surface}/surface_trace.h +5 -5
  386. data/src/core/{surface → lib/surface}/validate_metadata.c +1 -1
  387. data/src/core/{surface → lib/surface}/version.c +2 -2
  388. data/src/core/{transport → lib/transport}/byte_stream.c +1 -1
  389. data/src/core/{transport → lib/transport}/byte_stream.h +4 -4
  390. data/src/core/{transport → lib/transport}/connectivity_state.c +2 -2
  391. data/src/core/{transport → lib/transport}/connectivity_state.h +4 -4
  392. data/src/core/{transport → lib/transport}/metadata.c +71 -19
  393. data/src/core/{transport → lib/transport}/metadata.h +11 -4
  394. data/src/core/{transport → lib/transport}/metadata_batch.c +2 -2
  395. data/src/core/{transport → lib/transport}/metadata_batch.h +4 -4
  396. data/src/core/{transport → lib/transport}/static_metadata.c +100 -32
  397. data/src/core/{transport → lib/transport}/static_metadata.h +58 -58
  398. data/src/core/{transport → lib/transport}/transport.c +25 -5
  399. data/src/core/{transport → lib/transport}/transport.h +41 -16
  400. data/src/core/{transport → lib/transport}/transport_impl.h +8 -5
  401. data/src/core/{transport → lib/transport}/transport_op_string.c +2 -2
  402. data/src/core/{tsi → lib/tsi}/fake_transport_security.c +18 -14
  403. data/src/core/{tsi → lib/tsi}/fake_transport_security.h +4 -4
  404. data/src/core/{tsi → lib/tsi}/ssl_transport_security.c +173 -63
  405. data/src/core/{tsi → lib/tsi}/ssl_transport_security.h +24 -6
  406. data/src/core/{tsi → lib/tsi}/ssl_types.h +3 -3
  407. data/src/core/{tsi → lib/tsi}/transport_security.c +12 -28
  408. data/src/core/{tsi → lib/tsi}/transport_security.h +4 -4
  409. data/src/core/{tsi → lib/tsi}/transport_security_interface.h +12 -3
  410. data/src/core/plugin_registry/grpc_plugin_registry.c +66 -0
  411. data/src/ruby/ext/grpc/extconf.rb +14 -20
  412. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -3
  413. data/src/ruby/ext/grpc/rb_call.c +37 -4
  414. data/src/ruby/ext/grpc/rb_call_credentials.c +13 -3
  415. data/src/ruby/ext/grpc/rb_channel.c +2 -3
  416. data/src/ruby/ext/grpc/rb_channel_args.c +2 -3
  417. data/src/ruby/ext/grpc/rb_channel_credentials.c +31 -3
  418. data/src/ruby/ext/grpc/rb_completion_queue.c +2 -2
  419. data/src/ruby/ext/grpc/rb_event_thread.c +1 -1
  420. data/src/ruby/ext/grpc/rb_grpc.c +4 -2
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +8 -0
  422. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +14 -2
  423. data/src/ruby/ext/grpc/rb_server.c +2 -3
  424. data/src/ruby/ext/grpc/rb_server_credentials.c +16 -13
  425. data/src/ruby/ext/grpc/rb_signal.c +70 -0
  426. data/src/ruby/ext/grpc/rb_signal.h +39 -0
  427. data/src/ruby/lib/grpc.rb +21 -13
  428. data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
  429. data/src/ruby/lib/grpc/errors.rb +2 -2
  430. data/src/ruby/lib/grpc/generic/active_call.rb +10 -3
  431. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
  432. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -7
  433. data/src/ruby/lib/grpc/generic/rpc_desc.rb +2 -2
  434. data/src/ruby/lib/grpc/generic/rpc_server.rb +21 -61
  435. data/src/ruby/lib/grpc/generic/service.rb +5 -15
  436. data/src/ruby/lib/grpc/grpc.rb +3 -3
  437. data/src/ruby/{bin/interop/interop_server.rb → lib/grpc/signals.rb} +39 -20
  438. data/src/ruby/lib/grpc/version.rb +2 -2
  439. data/src/ruby/pb/generate_proto_ruby.sh +9 -2
  440. data/src/ruby/pb/grpc/health/checker.rb +1 -1
  441. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb +28 -0
  442. data/src/ruby/pb/grpc/testing/metrics.rb +28 -0
  443. data/src/ruby/pb/grpc/testing/metrics_services.rb +27 -0
  444. data/src/ruby/pb/test/client.rb +12 -23
  445. data/src/ruby/pb/test/server.rb +1 -1
  446. data/src/ruby/spec/client_server_spec.rb +1 -1
  447. data/src/ruby/spec/generic/client_stub_spec.rb +18 -17
  448. data/src/ruby/spec/generic/rpc_server_spec.rb +23 -7
  449. data/src/ruby/spec/generic/service_spec.rb +0 -69
  450. data/src/ruby/{bin/interop/interop_client.rb → spec/pb/duplicate/codegen_spec.rb} +41 -21
  451. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  452. data/third_party/boringssl/crypto/asn1/a_bitstr.c +184 -176
  453. data/third_party/boringssl/crypto/asn1/a_bool.c +42 -44
  454. data/third_party/boringssl/crypto/asn1/a_bytes.c +236 -245
  455. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +173 -192
  456. data/third_party/boringssl/crypto/asn1/a_dup.c +43 -35
  457. data/third_party/boringssl/crypto/asn1/a_enum.c +107 -109
  458. data/third_party/boringssl/crypto/asn1/a_gentm.c +180 -181
  459. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +73 -80
  460. data/third_party/boringssl/crypto/asn1/a_int.c +357 -353
  461. data/third_party/boringssl/crypto/asn1/a_mbstr.c +272 -253
  462. data/third_party/boringssl/crypto/asn1/a_object.c +293 -309
  463. data/third_party/boringssl/crypto/asn1/a_octet.c +13 -6
  464. data/third_party/boringssl/crypto/asn1/a_print.c +54 -52
  465. data/third_party/boringssl/crypto/asn1/a_strnid.c +179 -157
  466. data/third_party/boringssl/crypto/asn1/a_time.c +125 -129
  467. data/third_party/boringssl/crypto/asn1/a_type.c +79 -86
  468. data/third_party/boringssl/crypto/asn1/a_utctm.c +246 -255
  469. data/third_party/boringssl/crypto/asn1/a_utf8.c +159 -135
  470. data/third_party/boringssl/crypto/asn1/asn1_lib.c +361 -368
  471. data/third_party/boringssl/crypto/asn1/asn1_locl.h +11 -11
  472. data/third_party/boringssl/crypto/asn1/asn1_par.c +309 -351
  473. data/third_party/boringssl/crypto/asn1/asn_pack.c +30 -29
  474. data/third_party/boringssl/crypto/asn1/bio_asn1.c +375 -394
  475. data/third_party/boringssl/crypto/asn1/bio_ndef.c +146 -149
  476. data/third_party/boringssl/crypto/asn1/f_enum.c +128 -134
  477. data/third_party/boringssl/crypto/asn1/f_int.c +131 -139
  478. data/third_party/boringssl/crypto/asn1/f_string.c +125 -133
  479. data/third_party/boringssl/crypto/asn1/t_bitst.c +30 -29
  480. data/third_party/boringssl/crypto/asn1/t_pkey.c +45 -47
  481. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1099 -1216
  482. data/third_party/boringssl/crypto/asn1/tasn_enc.c +556 -592
  483. data/third_party/boringssl/crypto/asn1/tasn_fre.c +175 -193
  484. data/third_party/boringssl/crypto/asn1/tasn_new.c +271 -288
  485. data/third_party/boringssl/crypto/asn1/tasn_prn.c +462 -508
  486. data/third_party/boringssl/crypto/asn1/tasn_typ.c +28 -21
  487. data/third_party/boringssl/crypto/asn1/x_bignum.c +62 -52
  488. data/third_party/boringssl/crypto/asn1/x_long.c +101 -86
  489. data/third_party/boringssl/crypto/bio/buffer.c +3 -3
  490. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +8 -68
  491. data/third_party/boringssl/crypto/bn/bn.c +1 -1
  492. data/third_party/boringssl/crypto/bn/bn_asn1.c +9 -22
  493. data/third_party/boringssl/crypto/bn/convert.c +9 -4
  494. data/third_party/boringssl/crypto/bn/div.c +0 -20
  495. data/third_party/boringssl/crypto/bn/exponentiation.c +22 -13
  496. data/third_party/boringssl/crypto/bn/generic.c +6 -242
  497. data/third_party/boringssl/crypto/bn/internal.h +9 -70
  498. data/third_party/boringssl/crypto/bn/montgomery.c +1 -2
  499. data/third_party/boringssl/crypto/bn/mul.c +6 -26
  500. data/third_party/boringssl/crypto/bn/rsaz_exp.c +21 -28
  501. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +51 -0
  502. data/third_party/boringssl/crypto/bytestring/ber.c +128 -87
  503. data/third_party/boringssl/crypto/bytestring/cbb.c +37 -3
  504. data/third_party/boringssl/crypto/bytestring/internal.h +39 -10
  505. data/third_party/boringssl/crypto/chacha/chacha_vec.c +18 -13
  506. data/third_party/boringssl/crypto/cipher/e_aes.c +2 -2
  507. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +4 -9
  508. data/third_party/boringssl/crypto/cipher/tls_cbc.c +39 -10
  509. data/third_party/boringssl/crypto/conf/conf.c +9 -0
  510. data/third_party/boringssl/crypto/cpu-intel.c +1 -1
  511. data/third_party/boringssl/crypto/crypto.c +2 -0
  512. data/third_party/boringssl/crypto/curve25519/curve25519.c +125 -120
  513. data/third_party/boringssl/crypto/curve25519/internal.h +45 -0
  514. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +225 -0
  515. data/third_party/boringssl/crypto/dh/check.c +32 -10
  516. data/third_party/boringssl/crypto/dh/dh.c +1 -1
  517. data/third_party/boringssl/crypto/digest/md32_common.h +0 -60
  518. data/third_party/boringssl/crypto/dsa/dsa.c +47 -21
  519. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +249 -64
  520. data/third_party/boringssl/crypto/ec/ec.c +45 -31
  521. data/third_party/boringssl/crypto/ec/ec_asn1.c +315 -382
  522. data/third_party/boringssl/crypto/ec/ec_key.c +1 -4
  523. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -9
  524. data/third_party/boringssl/crypto/ec/internal.h +1 -19
  525. data/third_party/boringssl/crypto/ec/oct.c +12 -0
  526. data/third_party/boringssl/crypto/ec/p224-64.c +4 -65
  527. data/third_party/boringssl/crypto/ec/p256-64.c +9 -71
  528. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +1 -6
  529. data/third_party/boringssl/crypto/ec/p256-x86_64.c +3 -13
  530. data/third_party/boringssl/crypto/ec/simple.c +0 -76
  531. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +1 -1
  532. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +10 -24
  533. data/third_party/boringssl/crypto/evp/evp.c +4 -3
  534. data/third_party/boringssl/crypto/evp/evp_asn1.c +101 -0
  535. data/third_party/boringssl/crypto/evp/evp_ctx.c +22 -51
  536. data/third_party/boringssl/crypto/evp/internal.h +28 -27
  537. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +78 -249
  538. data/third_party/boringssl/crypto/evp/p_ec.c +19 -66
  539. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +74 -231
  540. data/third_party/boringssl/crypto/evp/p_rsa.c +90 -13
  541. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +49 -48
  542. data/third_party/boringssl/crypto/internal.h +16 -1
  543. data/third_party/boringssl/crypto/mem.c +2 -2
  544. data/third_party/boringssl/crypto/modes/ctr.c +2 -1
  545. data/third_party/boringssl/crypto/modes/gcm.c +5 -3
  546. data/third_party/boringssl/crypto/obj/obj_dat.h +6 -3
  547. data/third_party/boringssl/crypto/pem/pem_all.c +83 -102
  548. data/third_party/boringssl/crypto/pem/pem_info.c +286 -309
  549. data/third_party/boringssl/crypto/pem/pem_lib.c +690 -710
  550. data/third_party/boringssl/crypto/pem/pem_oth.c +15 -16
  551. data/third_party/boringssl/crypto/pem/pem_pk8.c +132 -119
  552. data/third_party/boringssl/crypto/pem/pem_pkey.c +144 -220
  553. data/third_party/boringssl/crypto/pem/pem_x509.c +3 -3
  554. data/third_party/boringssl/crypto/pem/pem_xaux.c +5 -4
  555. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +54 -60
  556. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +3 -1
  557. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +48 -50
  558. data/third_party/boringssl/crypto/rand/rand.c +2 -0
  559. data/third_party/boringssl/crypto/rsa/blinding.c +8 -48
  560. data/third_party/boringssl/crypto/rsa/internal.h +1 -9
  561. data/third_party/boringssl/crypto/rsa/padding.c +73 -77
  562. data/third_party/boringssl/crypto/rsa/rsa.c +1 -1
  563. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +27 -46
  564. data/third_party/boringssl/crypto/rsa/rsa_impl.c +23 -34
  565. data/third_party/boringssl/crypto/test/scoped_types.h +3 -0
  566. data/third_party/boringssl/crypto/thread_win.c +15 -13
  567. data/third_party/boringssl/crypto/time_support.c +0 -6
  568. data/third_party/boringssl/crypto/x509/a_digest.c +26 -27
  569. data/third_party/boringssl/crypto/x509/a_sign.c +63 -64
  570. data/third_party/boringssl/crypto/x509/a_strex.c +482 -413
  571. data/third_party/boringssl/crypto/x509/a_verify.c +45 -51
  572. data/third_party/boringssl/crypto/x509/asn1_gen.c +715 -769
  573. data/third_party/boringssl/crypto/x509/by_dir.c +355 -393
  574. data/third_party/boringssl/crypto/x509/by_file.c +186 -206
  575. data/third_party/boringssl/crypto/x509/charmap.h +11 -11
  576. data/third_party/boringssl/crypto/x509/i2d_pr.c +21 -22
  577. data/third_party/boringssl/crypto/x509/t_crl.c +50 -51
  578. data/third_party/boringssl/crypto/x509/t_x509.c +414 -406
  579. data/third_party/boringssl/crypto/x509/t_x509a.c +44 -42
  580. data/third_party/boringssl/crypto/x509/vpm_int.h +13 -13
  581. data/third_party/boringssl/crypto/x509/x509_att.c +241 -219
  582. data/third_party/boringssl/crypto/x509/x509_cmp.c +343 -359
  583. data/third_party/boringssl/crypto/x509/x509_d2.c +36 -35
  584. data/third_party/boringssl/crypto/x509/x509_def.c +23 -13
  585. data/third_party/boringssl/crypto/x509/x509_ext.c +75 -75
  586. data/third_party/boringssl/crypto/x509/x509_lu.c +574 -612
  587. data/third_party/boringssl/crypto/x509/x509_obj.c +104 -115
  588. data/third_party/boringssl/crypto/x509/x509_r2x.c +40 -40
  589. data/third_party/boringssl/crypto/x509/x509_req.c +181 -174
  590. data/third_party/boringssl/crypto/x509/x509_set.c +71 -76
  591. data/third_party/boringssl/crypto/x509/x509_trs.c +193 -171
  592. data/third_party/boringssl/crypto/x509/x509_txt.c +135 -138
  593. data/third_party/boringssl/crypto/x509/x509_v3.c +174 -167
  594. data/third_party/boringssl/crypto/x509/x509_vfy.c +2079 -2130
  595. data/third_party/boringssl/crypto/x509/x509_vpm.c +486 -522
  596. data/third_party/boringssl/crypto/x509/x509cset.c +96 -99
  597. data/third_party/boringssl/crypto/x509/x509name.c +280 -275
  598. data/third_party/boringssl/crypto/x509/x509rset.c +15 -14
  599. data/third_party/boringssl/crypto/x509/x509spki.c +62 -60
  600. data/third_party/boringssl/crypto/x509/x509type.c +58 -60
  601. data/third_party/boringssl/crypto/x509/x_algor.c +70 -73
  602. data/third_party/boringssl/crypto/x509/x_all.c +282 -328
  603. data/third_party/boringssl/crypto/x509/x_attrib.c +36 -42
  604. data/third_party/boringssl/crypto/x509/x_crl.c +397 -418
  605. data/third_party/boringssl/crypto/x509/x_exten.c +5 -5
  606. data/third_party/boringssl/crypto/x509/x_info.c +30 -27
  607. data/third_party/boringssl/crypto/x509/x_name.c +387 -388
  608. data/third_party/boringssl/crypto/x509/x_pkey.c +32 -29
  609. data/third_party/boringssl/crypto/x509/x_pubkey.c +261 -280
  610. data/third_party/boringssl/crypto/x509/x_req.c +30 -33
  611. data/third_party/boringssl/crypto/x509/x_sig.c +2 -2
  612. data/third_party/boringssl/crypto/x509/x_spki.c +9 -7
  613. data/third_party/boringssl/crypto/x509/x_val.c +2 -2
  614. data/third_party/boringssl/crypto/x509/x_x509.c +120 -119
  615. data/third_party/boringssl/crypto/x509/x_x509a.c +99 -91
  616. data/third_party/boringssl/crypto/x509v3/ext_dat.h +57 -51
  617. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +199 -214
  618. data/third_party/boringssl/crypto/x509v3/pcy_data.c +57 -64
  619. data/third_party/boringssl/crypto/x509v3/pcy_int.h +95 -90
  620. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +86 -87
  621. data/third_party/boringssl/crypto/x509v3/pcy_map.c +61 -64
  622. data/third_party/boringssl/crypto/x509v3/pcy_node.c +108 -117
  623. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +676 -724
  624. data/third_party/boringssl/crypto/x509v3/v3_akey.c +128 -136
  625. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +7 -6
  626. data/third_party/boringssl/crypto/x509v3/v3_alt.c +499 -507
  627. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +54 -47
  628. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +67 -67
  629. data/third_party/boringssl/crypto/x509v3/v3_conf.c +330 -328
  630. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +354 -338
  631. data/third_party/boringssl/crypto/x509v3/v3_crld.c +441 -496
  632. data/third_party/boringssl/crypto/x509v3/v3_enum.c +35 -33
  633. data/third_party/boringssl/crypto/x509v3/v3_extku.c +66 -63
  634. data/third_party/boringssl/crypto/x509v3/v3_genn.c +157 -159
  635. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +45 -43
  636. data/third_party/boringssl/crypto/x509v3/v3_info.c +124 -112
  637. data/third_party/boringssl/crypto/x509v3/v3_int.c +30 -26
  638. data/third_party/boringssl/crypto/x509v3/v3_lib.c +231 -204
  639. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +353 -381
  640. data/third_party/boringssl/crypto/x509v3/v3_pci.c +252 -270
  641. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +9 -8
  642. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +58 -61
  643. data/third_party/boringssl/crypto/x509v3/v3_pku.c +35 -34
  644. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +72 -74
  645. data/third_party/boringssl/crypto/x509v3/v3_prn.c +146 -121
  646. data/third_party/boringssl/crypto/x509v3/v3_purp.c +651 -582
  647. data/third_party/boringssl/crypto/x509v3/v3_skey.c +76 -72
  648. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +139 -131
  649. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1072 -1068
  650. data/third_party/boringssl/include/openssl/asn1.h +40 -38
  651. data/third_party/boringssl/include/openssl/base.h +10 -1
  652. data/third_party/boringssl/include/openssl/bio.h +10 -11
  653. data/third_party/boringssl/include/openssl/bn.h +12 -9
  654. data/third_party/boringssl/include/openssl/buf.h +1 -1
  655. data/third_party/boringssl/include/openssl/bytestring.h +29 -0
  656. data/third_party/boringssl/include/openssl/conf.h +25 -0
  657. data/third_party/boringssl/include/openssl/crypto.h +6 -1
  658. data/third_party/boringssl/include/openssl/curve25519.h +6 -3
  659. data/third_party/boringssl/include/openssl/dh.h +7 -3
  660. data/third_party/boringssl/include/openssl/dsa.h +108 -51
  661. data/third_party/boringssl/include/openssl/ec.h +46 -21
  662. data/third_party/boringssl/include/openssl/ec_key.h +78 -42
  663. data/third_party/boringssl/include/openssl/ecdsa.h +4 -4
  664. data/third_party/boringssl/include/openssl/err.h +3 -2
  665. data/third_party/boringssl/include/openssl/evp.h +120 -37
  666. data/third_party/boringssl/include/openssl/mem.h +4 -13
  667. data/third_party/boringssl/include/openssl/obj_mac.h +4 -0
  668. data/third_party/boringssl/include/openssl/pem.h +0 -9
  669. data/third_party/boringssl/include/openssl/pkcs8.h +6 -2
  670. data/third_party/boringssl/include/openssl/rand.h +3 -0
  671. data/third_party/boringssl/include/openssl/rsa.h +42 -42
  672. data/third_party/boringssl/include/openssl/ssl.h +115 -41
  673. data/third_party/boringssl/include/openssl/stack.h +0 -3
  674. data/third_party/boringssl/include/openssl/stack_macros.h +0 -256
  675. data/third_party/boringssl/include/openssl/tls1.h +1 -1
  676. data/third_party/boringssl/include/openssl/x509.h +0 -2
  677. data/third_party/boringssl/include/openssl/x509_vfy.h +5 -0
  678. data/third_party/boringssl/ssl/d1_both.c +102 -101
  679. data/third_party/boringssl/ssl/d1_clnt.c +145 -150
  680. data/third_party/boringssl/ssl/d1_lib.c +63 -62
  681. data/third_party/boringssl/ssl/d1_pkt.c +73 -71
  682. data/third_party/boringssl/ssl/d1_srvr.c +116 -125
  683. data/third_party/boringssl/ssl/dtls_record.c +3 -3
  684. data/third_party/boringssl/ssl/internal.h +210 -208
  685. data/third_party/boringssl/ssl/pqueue/pqueue.c +2 -2
  686. data/third_party/boringssl/ssl/s3_both.c +116 -130
  687. data/third_party/boringssl/ssl/s3_clnt.c +589 -740
  688. data/third_party/boringssl/ssl/s3_enc.c +52 -151
  689. data/third_party/boringssl/ssl/s3_lib.c +70 -76
  690. data/third_party/boringssl/ssl/s3_pkt.c +105 -144
  691. data/third_party/boringssl/ssl/s3_srvr.c +542 -806
  692. data/third_party/boringssl/ssl/ssl_aead_ctx.c +1 -1
  693. data/third_party/boringssl/ssl/ssl_cert.c +2 -2
  694. data/third_party/boringssl/ssl/ssl_cipher.c +7 -3
  695. data/third_party/boringssl/ssl/ssl_ecdh.c +374 -0
  696. data/third_party/boringssl/ssl/ssl_lib.c +260 -221
  697. data/third_party/boringssl/ssl/ssl_session.c +17 -17
  698. data/third_party/boringssl/ssl/t1_enc.c +128 -273
  699. data/third_party/boringssl/ssl/t1_lib.c +134 -258
  700. data/third_party/boringssl/ssl/test/test_config.h +2 -0
  701. data/third_party/boringssl/ssl/tls_record.c +52 -15
  702. metadata +385 -359
  703. data/src/core/channel/client_uchannel.c +0 -243
  704. data/src/core/channel/client_uchannel.h +0 -60
  705. data/src/core/channel/connected_channel.h +0 -51
  706. data/src/core/client_config/lb_policies/pick_first.h +0 -43
  707. data/src/core/client_config/resolvers/dns_resolver.h +0 -42
  708. data/src/core/client_config/subchannel_factory.h +0 -66
  709. data/src/core/httpcli/parser.c +0 -211
  710. data/src/core/iomgr/fd_posix.c +0 -451
  711. data/src/core/iomgr/fd_posix.h +0 -192
  712. data/src/core/iomgr/pollset_multipoller_with_epoll.c +0 -324
  713. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +0 -234
  714. data/src/core/iomgr/pollset_posix.c +0 -633
  715. data/src/core/iomgr/pollset_posix.h +0 -153
  716. data/src/core/iomgr/pollset_set_posix.c +0 -202
  717. data/src/core/iomgr/pollset_set_posix.h +0 -45
  718. data/src/core/surface/init.c +0 -174
  719. data/src/core/surface/init_secure.c +0 -42
  720. data/src/core/surface/server_create.c +0 -48
  721. data/src/core/transport/chttp2/huffsyms.c +0 -297
  722. data/src/ruby/bin/grpc_ruby_interop_client +0 -33
  723. data/src/ruby/bin/grpc_ruby_interop_server +0 -33
  724. data/third_party/boringssl/crypto/dsa/internal.h +0 -78
@@ -161,7 +161,7 @@ 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
163
  SSL_SESSION *SSL_SESSION_new(void) {
164
- SSL_SESSION *session = (SSL_SESSION *)OPENSSL_malloc(sizeof(SSL_SESSION));
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;
@@ -430,7 +430,7 @@ enum ssl_session_result_t ssl_get_prev_session(
430
430
  /* This is used only by servers. */
431
431
  assert(ssl->server);
432
432
  SSL_SESSION *session = NULL;
433
- int send_ticket = 0;
433
+ int renew_ticket = 0;
434
434
 
435
435
  /* If tickets are disabled, always behave as if no tickets are present. */
436
436
  const uint8_t *ticket = NULL;
@@ -440,24 +440,27 @@ enum ssl_session_result_t ssl_get_prev_session(
440
440
  ssl->version > SSL3_VERSION &&
441
441
  SSL_early_callback_ctx_extension_get(ctx, TLSEXT_TYPE_session_ticket,
442
442
  &ticket, &ticket_len);
443
- if (tickets_supported) {
444
- if (!tls_process_ticket(ssl, &session, &send_ticket, ticket, ticket_len,
443
+ int from_cache = 0;
444
+ if (tickets_supported && ticket_len > 0) {
445
+ if (!tls_process_ticket(ssl, &session, &renew_ticket, ticket, ticket_len,
445
446
  ctx->session_id, ctx->session_id_len)) {
446
447
  return ssl_session_error;
447
448
  }
448
449
  } else {
449
- /* The client does not support session tickets, so the session ID should be
450
- * used instead. */
450
+ /* The client didn't send a ticket, so the session ID is a real ID. */
451
451
  enum ssl_session_result_t lookup_ret = ssl_lookup_session(
452
452
  ssl, &session, ctx->session_id, ctx->session_id_len);
453
453
  if (lookup_ret != ssl_session_success) {
454
454
  return lookup_ret;
455
455
  }
456
+ from_cache = 1;
456
457
  }
457
458
 
458
459
  if (session == NULL ||
459
460
  session->sid_ctx_length != ssl->sid_ctx_length ||
460
461
  memcmp(session->sid_ctx, ssl->sid_ctx, ssl->sid_ctx_length) != 0) {
462
+ /* The client did not offer a suitable ticket or session ID. If supported,
463
+ * the new session should use a ticket. */
461
464
  goto no_session;
462
465
  }
463
466
 
@@ -471,11 +474,12 @@ enum ssl_session_result_t ssl_get_prev_session(
471
474
  * effectively disable the session cache by accident without anyone
472
475
  * noticing). */
473
476
  OPENSSL_PUT_ERROR(SSL, SSL_R_SESSION_ID_CONTEXT_UNINITIALIZED);
474
- goto fatal_error;
477
+ SSL_SESSION_free(session);
478
+ return ssl_session_error;
475
479
  }
476
480
 
477
481
  if (session->timeout < (long)(time(NULL) - session->time)) {
478
- if (!tickets_supported) {
482
+ if (from_cache) {
479
483
  /* The session was from the cache, so remove it. */
480
484
  SSL_CTX_remove_session(ssl->initial_ctx, session);
481
485
  }
@@ -483,13 +487,9 @@ enum ssl_session_result_t ssl_get_prev_session(
483
487
  }
484
488
 
485
489
  *out_session = session;
486
- *out_send_ticket = send_ticket;
490
+ *out_send_ticket = renew_ticket;
487
491
  return ssl_session_success;
488
492
 
489
- fatal_error:
490
- SSL_SESSION_free(session);
491
- return ssl_session_error;
492
-
493
493
  no_session:
494
494
  *out_session = NULL;
495
495
  *out_send_ticket = tickets_supported;
@@ -645,10 +645,10 @@ void SSL_CTX_flush_sessions(SSL_CTX *ctx, long time) {
645
645
  CRYPTO_MUTEX_unlock(&ctx->lock);
646
646
  }
647
647
 
648
- int ssl_clear_bad_session(SSL *s) {
649
- if (s->session != NULL && !(s->shutdown & SSL_SENT_SHUTDOWN) &&
650
- !SSL_in_init(s)) {
651
- SSL_CTX_remove_session(s->ctx, s->session);
648
+ int ssl_clear_bad_session(SSL *ssl) {
649
+ if (ssl->session != NULL && !(ssl->shutdown & SSL_SENT_SHUTDOWN) &&
650
+ !SSL_in_init(ssl)) {
651
+ SSL_CTX_remove_session(ssl->ctx, ssl->session);
652
652
  return 1;
653
653
  }
654
654
 
@@ -224,18 +224,17 @@ err:
224
224
  return ret;
225
225
  }
226
226
 
227
- int tls1_prf(SSL *s, uint8_t *out, size_t out_len, const uint8_t *secret,
228
- size_t secret_len, const char *label, size_t label_len,
229
- const uint8_t *seed1, size_t seed1_len,
230
- const uint8_t *seed2, size_t seed2_len) {
231
-
227
+ static int tls1_prf(const SSL *ssl, uint8_t *out, size_t out_len,
228
+ const uint8_t *secret, size_t secret_len, const char *label,
229
+ size_t label_len, const uint8_t *seed1, size_t seed1_len,
230
+ const uint8_t *seed2, size_t seed2_len) {
232
231
  if (out_len == 0) {
233
232
  return 1;
234
233
  }
235
234
 
236
235
  memset(out, 0, out_len);
237
236
 
238
- uint32_t algorithm_prf = ssl_get_algorithm_prf(s);
237
+ uint32_t algorithm_prf = ssl_get_algorithm_prf(ssl);
239
238
  if (algorithm_prf == SSL_HANDSHAKE_MAC_DEFAULT) {
240
239
  /* If using the MD5/SHA1 PRF, |secret| is partitioned between SHA-1 and
241
240
  * MD5, MD5 first. */
@@ -260,17 +259,12 @@ int tls1_prf(SSL *s, uint8_t *out, size_t out_len, const uint8_t *secret,
260
259
  return 1;
261
260
  }
262
261
 
263
- static int tls1_generate_key_block(SSL *s, uint8_t *out, size_t out_len) {
264
- return s->enc_method->prf(s, out, out_len, s->session->master_key,
265
- s->session->master_key_length,
266
- TLS_MD_KEY_EXPANSION_CONST,
267
- TLS_MD_KEY_EXPANSION_CONST_SIZE,
268
- s->s3->server_random, SSL3_RANDOM_SIZE,
269
- s->s3->client_random,
270
- SSL3_RANDOM_SIZE);
271
- }
262
+ int tls1_change_cipher_state(SSL *ssl, int which) {
263
+ /* Ensure the key block is set up. */
264
+ if (!tls1_setup_key_block(ssl)) {
265
+ return 0;
266
+ }
272
267
 
273
- int tls1_change_cipher_state(SSL *s, int which) {
274
268
  /* is_read is true if we have just read a ChangeCipherSpec message - i.e. we
275
269
  * need to update the read cipherspec. Otherwise we have just written one. */
276
270
  const char is_read = (which & SSL3_CC_READ) != 0;
@@ -279,63 +273,28 @@ int tls1_change_cipher_state(SSL *s, int which) {
279
273
  * or a server reading a client's ChangeCipherSpec. */
280
274
  const char use_client_keys = which == SSL3_CHANGE_CIPHER_CLIENT_WRITE ||
281
275
  which == SSL3_CHANGE_CIPHER_SERVER_READ;
282
- const uint8_t *client_write_mac_secret, *server_write_mac_secret, *mac_secret;
283
- const uint8_t *client_write_key, *server_write_key, *key;
284
- const uint8_t *client_write_iv, *server_write_iv, *iv;
285
- const EVP_AEAD *aead = s->s3->tmp.new_aead;
286
- size_t key_len, iv_len, mac_secret_len;
287
- const uint8_t *key_data;
288
-
289
- /* Reset sequence number to zero. */
290
- if (is_read) {
291
- if (SSL_IS_DTLS(s)) {
292
- s->d1->r_epoch++;
293
- memset(&s->d1->bitmap, 0, sizeof(s->d1->bitmap));
294
- }
295
- memset(s->s3->read_sequence, 0, sizeof(s->s3->read_sequence));
296
- } else {
297
- if (SSL_IS_DTLS(s)) {
298
- s->d1->w_epoch++;
299
- memcpy(s->d1->last_write_sequence, s->s3->write_sequence,
300
- sizeof(s->s3->write_sequence));
301
- }
302
- memset(s->s3->write_sequence, 0, sizeof(s->s3->write_sequence));
303
- }
304
276
 
305
- mac_secret_len = s->s3->tmp.new_mac_secret_len;
306
- iv_len = s->s3->tmp.new_fixed_iv_len;
277
+ size_t mac_secret_len = ssl->s3->tmp.new_mac_secret_len;
278
+ size_t key_len = ssl->s3->tmp.new_key_len;
279
+ size_t iv_len = ssl->s3->tmp.new_fixed_iv_len;
280
+ assert((mac_secret_len + key_len + iv_len) * 2 ==
281
+ ssl->s3->tmp.key_block_length);
307
282
 
308
- if (aead == NULL) {
309
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
310
- return 0;
311
- }
312
-
313
- key_len = EVP_AEAD_key_length(aead);
314
- if (mac_secret_len > 0) {
315
- /* For "stateful" AEADs (i.e. compatibility with pre-AEAD cipher
316
- * suites) the key length reported by |EVP_AEAD_key_length| will
317
- * include the MAC and IV key bytes. */
318
- if (key_len < mac_secret_len + iv_len) {
319
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
320
- return 0;
321
- }
322
- key_len -= mac_secret_len + iv_len;
323
- }
324
-
325
- key_data = s->s3->tmp.key_block;
326
- client_write_mac_secret = key_data;
283
+ const uint8_t *key_data = ssl->s3->tmp.key_block;
284
+ const uint8_t *client_write_mac_secret = key_data;
327
285
  key_data += mac_secret_len;
328
- server_write_mac_secret = key_data;
286
+ const uint8_t *server_write_mac_secret = key_data;
329
287
  key_data += mac_secret_len;
330
- client_write_key = key_data;
288
+ const uint8_t *client_write_key = key_data;
331
289
  key_data += key_len;
332
- server_write_key = key_data;
290
+ const uint8_t *server_write_key = key_data;
333
291
  key_data += key_len;
334
- client_write_iv = key_data;
292
+ const uint8_t *client_write_iv = key_data;
335
293
  key_data += iv_len;
336
- server_write_iv = key_data;
294
+ const uint8_t *server_write_iv = key_data;
337
295
  key_data += iv_len;
338
296
 
297
+ const uint8_t *mac_secret, *key, *iv;
339
298
  if (use_client_keys) {
340
299
  mac_secret = client_write_mac_secret;
341
300
  key = client_write_key;
@@ -346,50 +305,51 @@ int tls1_change_cipher_state(SSL *s, int which) {
346
305
  iv = server_write_iv;
347
306
  }
348
307
 
349
- if (key_data - s->s3->tmp.key_block != s->s3->tmp.key_block_length) {
350
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
308
+ SSL_AEAD_CTX *aead_ctx =
309
+ SSL_AEAD_CTX_new(is_read ? evp_aead_open : evp_aead_seal,
310
+ ssl3_protocol_version(ssl), ssl->s3->tmp.new_cipher, key,
311
+ key_len, mac_secret, mac_secret_len, iv, iv_len);
312
+ if (aead_ctx == NULL) {
351
313
  return 0;
352
314
  }
353
315
 
354
316
  if (is_read) {
355
- SSL_AEAD_CTX_free(s->aead_read_ctx);
356
- s->aead_read_ctx = SSL_AEAD_CTX_new(
357
- evp_aead_open, ssl3_version_from_wire(s, s->version),
358
- s->s3->tmp.new_cipher, key, key_len, mac_secret, mac_secret_len, iv,
359
- iv_len);
360
- return s->aead_read_ctx != NULL;
317
+ ssl_set_read_state(ssl, aead_ctx);
318
+ } else {
319
+ ssl_set_write_state(ssl, aead_ctx);
361
320
  }
321
+ return 1;
322
+ }
362
323
 
363
- SSL_AEAD_CTX_free(s->aead_write_ctx);
364
- s->aead_write_ctx = SSL_AEAD_CTX_new(
365
- evp_aead_seal, ssl3_version_from_wire(s, s->version),
366
- s->s3->tmp.new_cipher, key, key_len, mac_secret, mac_secret_len, iv,
367
- iv_len);
368
- return s->aead_write_ctx != NULL;
324
+ size_t SSL_get_key_block_len(const SSL *ssl) {
325
+ return 2 * ((size_t)ssl->s3->tmp.new_mac_secret_len +
326
+ (size_t)ssl->s3->tmp.new_key_len +
327
+ (size_t)ssl->s3->tmp.new_fixed_iv_len);
369
328
  }
370
329
 
371
- int tls1_setup_key_block(SSL *s) {
372
- uint8_t *p;
373
- const EVP_AEAD *aead = NULL;
374
- int ret = 0;
375
- size_t mac_secret_len, fixed_iv_len, variable_iv_len, key_len;
376
- size_t key_block_len;
330
+ int SSL_generate_key_block(const SSL *ssl, uint8_t *out, size_t out_len) {
331
+ return ssl->s3->enc_method->prf(
332
+ ssl, out, out_len, ssl->session->master_key,
333
+ ssl->session->master_key_length, TLS_MD_KEY_EXPANSION_CONST,
334
+ TLS_MD_KEY_EXPANSION_CONST_SIZE, ssl->s3->server_random, SSL3_RANDOM_SIZE,
335
+ ssl->s3->client_random, SSL3_RANDOM_SIZE);
336
+ }
377
337
 
378
- if (s->s3->tmp.key_block_length != 0) {
338
+ int tls1_setup_key_block(SSL *ssl) {
339
+ if (ssl->s3->tmp.key_block_length != 0) {
379
340
  return 1;
380
341
  }
381
342
 
382
- if (s->session->cipher == NULL) {
383
- goto cipher_unavailable_err;
384
- }
385
-
386
- if (!ssl_cipher_get_evp_aead(&aead, &mac_secret_len, &fixed_iv_len,
387
- s->session->cipher,
388
- ssl3_version_from_wire(s, s->version))) {
389
- goto cipher_unavailable_err;
343
+ const EVP_AEAD *aead = NULL;
344
+ size_t mac_secret_len, fixed_iv_len;
345
+ if (ssl->session->cipher == NULL ||
346
+ !ssl_cipher_get_evp_aead(&aead, &mac_secret_len, &fixed_iv_len,
347
+ ssl->session->cipher,
348
+ ssl3_protocol_version(ssl))) {
349
+ OPENSSL_PUT_ERROR(SSL, SSL_R_CIPHER_OR_HASH_UNAVAILABLE);
350
+ return 0;
390
351
  }
391
- key_len = EVP_AEAD_key_length(aead);
392
- variable_iv_len = EVP_AEAD_nonce_length(aead);
352
+ size_t key_len = EVP_AEAD_key_length(aead);
393
353
  if (mac_secret_len > 0) {
394
354
  /* For "stateful" AEADs (i.e. compatibility with pre-AEAD cipher suites) the
395
355
  * key length reported by |EVP_AEAD_key_length| will include the MAC key
@@ -399,58 +359,43 @@ int tls1_setup_key_block(SSL *s) {
399
359
  return 0;
400
360
  }
401
361
  key_len -= mac_secret_len + fixed_iv_len;
402
- } else {
403
- /* The nonce is split into a fixed portion and a variable portion. */
404
- if (variable_iv_len < fixed_iv_len) {
405
- OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
406
- return 0;
407
- }
408
- variable_iv_len -= fixed_iv_len;
409
362
  }
410
363
 
411
364
  assert(mac_secret_len < 256);
365
+ assert(key_len < 256);
412
366
  assert(fixed_iv_len < 256);
413
- assert(variable_iv_len < 256);
414
367
 
415
- s->s3->tmp.new_aead = aead;
416
- s->s3->tmp.new_mac_secret_len = (uint8_t)mac_secret_len;
417
- s->s3->tmp.new_fixed_iv_len = (uint8_t)fixed_iv_len;
418
- s->s3->tmp.new_variable_iv_len = (uint8_t)variable_iv_len;
368
+ ssl->s3->tmp.new_mac_secret_len = (uint8_t)mac_secret_len;
369
+ ssl->s3->tmp.new_key_len = (uint8_t)key_len;
370
+ ssl->s3->tmp.new_fixed_iv_len = (uint8_t)fixed_iv_len;
419
371
 
420
- key_block_len = key_len + mac_secret_len + fixed_iv_len;
421
- key_block_len *= 2;
372
+ size_t key_block_len = SSL_get_key_block_len(ssl);
422
373
 
423
- ssl3_cleanup_key_block(s);
374
+ ssl3_cleanup_key_block(ssl);
424
375
 
425
- p = (uint8_t *)OPENSSL_malloc(key_block_len);
426
- if (p == NULL) {
376
+ uint8_t *keyblock = OPENSSL_malloc(key_block_len);
377
+ if (keyblock == NULL) {
427
378
  OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
428
- goto err;
379
+ return 0;
429
380
  }
430
381
 
431
- s->s3->tmp.key_block_length = key_block_len;
432
- s->s3->tmp.key_block = p;
433
-
434
- if (!tls1_generate_key_block(s, p, key_block_len)) {
435
- goto err;
382
+ if (!SSL_generate_key_block(ssl, keyblock, key_block_len)) {
383
+ OPENSSL_free(keyblock);
384
+ return 0;
436
385
  }
437
386
 
438
- ret = 1;
439
-
440
- err:
441
- return ret;
442
-
443
- cipher_unavailable_err:
444
- OPENSSL_PUT_ERROR(SSL, SSL_R_CIPHER_OR_HASH_UNAVAILABLE);
445
- return 0;
387
+ assert(key_block_len < 256);
388
+ ssl->s3->tmp.key_block_length = (uint8_t)key_block_len;
389
+ ssl->s3->tmp.key_block = keyblock;
390
+ return 1;
446
391
  }
447
392
 
448
- int tls1_cert_verify_mac(SSL *s, int md_nid, uint8_t *out) {
393
+ static int tls1_cert_verify_mac(SSL *ssl, int md_nid, uint8_t *out) {
449
394
  const EVP_MD_CTX *ctx_template;
450
395
  if (md_nid == NID_md5) {
451
- ctx_template = &s->s3->handshake_md5;
452
- } else if (md_nid == EVP_MD_CTX_type(&s->s3->handshake_hash)) {
453
- ctx_template = &s->s3->handshake_hash;
396
+ ctx_template = &ssl->s3->handshake_md5;
397
+ } else if (md_nid == EVP_MD_CTX_type(&ssl->s3->handshake_hash)) {
398
+ ctx_template = &ssl->s3->handshake_hash;
454
399
  } else {
455
400
  OPENSSL_PUT_ERROR(SSL, SSL_R_NO_REQUIRED_DIGEST);
456
401
  return 0;
@@ -498,15 +443,15 @@ err:
498
443
  * written or -1 in the event of an error. This function works on a copy of the
499
444
  * underlying digests so can be called multiple times and prior to the final
500
445
  * update etc. */
501
- int tls1_handshake_digest(SSL *s, uint8_t *out, size_t out_len) {
446
+ int tls1_handshake_digest(SSL *ssl, uint8_t *out, size_t out_len) {
502
447
  size_t md5_len = 0;
503
- if (EVP_MD_CTX_md(&s->s3->handshake_md5) != NULL &&
504
- !append_digest(&s->s3->handshake_md5, out, &md5_len, out_len)) {
448
+ if (EVP_MD_CTX_md(&ssl->s3->handshake_md5) != NULL &&
449
+ !append_digest(&ssl->s3->handshake_md5, out, &md5_len, out_len)) {
505
450
  return -1;
506
451
  }
507
452
 
508
453
  size_t len;
509
- if (!append_digest(&s->s3->handshake_hash, out + md5_len, &len,
454
+ if (!append_digest(&ssl->s3->handshake_hash, out + md5_len, &len,
510
455
  out_len - md5_len)) {
511
456
  return -1;
512
457
  }
@@ -514,55 +459,58 @@ int tls1_handshake_digest(SSL *s, uint8_t *out, size_t out_len) {
514
459
  return (int)(md5_len + len);
515
460
  }
516
461
 
517
- int tls1_final_finish_mac(SSL *s, const char *str, int slen, uint8_t *out) {
518
- uint8_t buf[2 * EVP_MAX_MD_SIZE];
519
- int err = 0;
520
- int digests_len;
521
-
462
+ static int tls1_final_finish_mac(SSL *ssl, int from_server, uint8_t *out) {
522
463
  /* At this point, the handshake should have released the handshake buffer on
523
464
  * its own. */
524
- assert(s->s3->handshake_buffer == NULL);
465
+ assert(ssl->s3->handshake_buffer == NULL);
525
466
 
526
- digests_len = tls1_handshake_digest(s, buf, sizeof(buf));
527
- if (digests_len < 0) {
528
- err = 1;
529
- digests_len = 0;
467
+ const char *label = TLS_MD_CLIENT_FINISH_CONST;
468
+ size_t label_len = TLS_MD_SERVER_FINISH_CONST_SIZE;
469
+ if (from_server) {
470
+ label = TLS_MD_SERVER_FINISH_CONST;
471
+ label_len = TLS_MD_SERVER_FINISH_CONST_SIZE;
530
472
  }
531
473
 
532
- if (!s->enc_method->prf(s, out, 12, s->session->master_key,
533
- s->session->master_key_length, str, slen, buf,
534
- digests_len, NULL, 0)) {
535
- err = 1;
474
+ uint8_t buf[EVP_MAX_MD_SIZE];
475
+ int digests_len = tls1_handshake_digest(ssl, buf, sizeof(buf));
476
+ if (digests_len < 0) {
477
+ return 0;
536
478
  }
537
479
 
538
- if (err) {
480
+ static const size_t kFinishedLen = 12;
481
+ if (!ssl->s3->enc_method->prf(ssl, out, kFinishedLen,
482
+ ssl->session->master_key,
483
+ ssl->session->master_key_length, label,
484
+ label_len, buf, digests_len, NULL, 0)) {
539
485
  return 0;
540
- } else {
541
- return 12;
542
486
  }
487
+
488
+ return (int)kFinishedLen;
543
489
  }
544
490
 
545
- int tls1_generate_master_secret(SSL *s, uint8_t *out, const uint8_t *premaster,
491
+ int tls1_generate_master_secret(SSL *ssl, uint8_t *out,
492
+ const uint8_t *premaster,
546
493
  size_t premaster_len) {
547
- if (s->s3->tmp.extended_master_secret) {
548
- uint8_t digests[2 * EVP_MAX_MD_SIZE];
549
- int digests_len = tls1_handshake_digest(s, digests, sizeof(digests));
494
+ if (ssl->s3->tmp.extended_master_secret) {
495
+ uint8_t digests[EVP_MAX_MD_SIZE];
496
+ int digests_len = tls1_handshake_digest(ssl, digests, sizeof(digests));
550
497
  if (digests_len == -1) {
551
498
  return 0;
552
499
  }
553
500
 
554
- if (!s->enc_method->prf(s, out, SSL3_MASTER_SECRET_SIZE, premaster,
555
- premaster_len, TLS_MD_EXTENDED_MASTER_SECRET_CONST,
556
- TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE, digests,
557
- digests_len, NULL, 0)) {
501
+ if (!ssl->s3->enc_method->prf(ssl, out, SSL3_MASTER_SECRET_SIZE, premaster,
502
+ premaster_len,
503
+ TLS_MD_EXTENDED_MASTER_SECRET_CONST,
504
+ TLS_MD_EXTENDED_MASTER_SECRET_CONST_SIZE,
505
+ digests, digests_len, NULL, 0)) {
558
506
  return 0;
559
507
  }
560
508
  } else {
561
- if (!s->enc_method->prf(s, out, SSL3_MASTER_SECRET_SIZE, premaster,
562
- premaster_len, TLS_MD_MASTER_SECRET_CONST,
563
- TLS_MD_MASTER_SECRET_CONST_SIZE,
564
- s->s3->client_random, SSL3_RANDOM_SIZE,
565
- s->s3->server_random, SSL3_RANDOM_SIZE)) {
509
+ if (!ssl->s3->enc_method->prf(ssl, out, SSL3_MASTER_SECRET_SIZE, premaster,
510
+ premaster_len, TLS_MD_MASTER_SECRET_CONST,
511
+ TLS_MD_MASTER_SECRET_CONST_SIZE,
512
+ ssl->s3->client_random, SSL3_RANDOM_SIZE,
513
+ ssl->s3->server_random, SSL3_RANDOM_SIZE)) {
566
514
  return 0;
567
515
  }
568
516
  }
@@ -570,12 +518,11 @@ int tls1_generate_master_secret(SSL *s, uint8_t *out, const uint8_t *premaster,
570
518
  return SSL3_MASTER_SECRET_SIZE;
571
519
  }
572
520
 
573
- int tls1_export_keying_material(SSL *s, uint8_t *out, size_t out_len,
574
- const char *label, size_t label_len,
575
- const uint8_t *context, size_t context_len,
576
- int use_context) {
577
- if (!s->s3->have_version || s->version == SSL3_VERSION) {
578
- OPENSSL_PUT_ERROR(SSL, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
521
+ int SSL_export_keying_material(SSL *ssl, uint8_t *out, size_t out_len,
522
+ const char *label, size_t label_len,
523
+ const uint8_t *context, size_t context_len,
524
+ int use_context) {
525
+ if (!ssl->s3->have_version || ssl->version == SSL3_VERSION) {
579
526
  return 0;
580
527
  }
581
528
 
@@ -593,116 +540,24 @@ int tls1_export_keying_material(SSL *s, uint8_t *out, size_t out_len,
593
540
  return 0;
594
541
  }
595
542
 
596
- memcpy(seed, s->s3->client_random, SSL3_RANDOM_SIZE);
597
- memcpy(seed + SSL3_RANDOM_SIZE, s->s3->server_random, SSL3_RANDOM_SIZE);
543
+ memcpy(seed, ssl->s3->client_random, SSL3_RANDOM_SIZE);
544
+ memcpy(seed + SSL3_RANDOM_SIZE, ssl->s3->server_random, SSL3_RANDOM_SIZE);
598
545
  if (use_context) {
599
546
  seed[2 * SSL3_RANDOM_SIZE] = (uint8_t)(context_len >> 8);
600
547
  seed[2 * SSL3_RANDOM_SIZE + 1] = (uint8_t)context_len;
601
548
  memcpy(seed + 2 * SSL3_RANDOM_SIZE + 2, context, context_len);
602
549
  }
603
550
 
604
- int ret = s->enc_method->prf(s, out, out_len, s->session->master_key,
605
- s->session->master_key_length, label, label_len,
606
- seed, seed_len, NULL, 0);
551
+ int ret =
552
+ ssl->s3->enc_method->prf(ssl, out, out_len, ssl->session->master_key,
553
+ ssl->session->master_key_length, label,
554
+ label_len, seed, seed_len, NULL, 0);
607
555
  OPENSSL_free(seed);
608
556
  return ret;
609
557
  }
610
558
 
611
- int tls1_alert_code(int code) {
612
- switch (code) {
613
- case SSL_AD_CLOSE_NOTIFY:
614
- return SSL3_AD_CLOSE_NOTIFY;
615
-
616
- case SSL_AD_UNEXPECTED_MESSAGE:
617
- return SSL3_AD_UNEXPECTED_MESSAGE;
618
-
619
- case SSL_AD_BAD_RECORD_MAC:
620
- return SSL3_AD_BAD_RECORD_MAC;
621
-
622
- case SSL_AD_DECRYPTION_FAILED:
623
- return TLS1_AD_DECRYPTION_FAILED;
624
-
625
- case SSL_AD_RECORD_OVERFLOW:
626
- return TLS1_AD_RECORD_OVERFLOW;
627
-
628
- case SSL_AD_DECOMPRESSION_FAILURE:
629
- return SSL3_AD_DECOMPRESSION_FAILURE;
630
-
631
- case SSL_AD_HANDSHAKE_FAILURE:
632
- return SSL3_AD_HANDSHAKE_FAILURE;
633
-
634
- case SSL_AD_NO_CERTIFICATE:
635
- return -1;
636
-
637
- case SSL_AD_BAD_CERTIFICATE:
638
- return SSL3_AD_BAD_CERTIFICATE;
639
-
640
- case SSL_AD_UNSUPPORTED_CERTIFICATE:
641
- return SSL3_AD_UNSUPPORTED_CERTIFICATE;
642
-
643
- case SSL_AD_CERTIFICATE_REVOKED:
644
- return SSL3_AD_CERTIFICATE_REVOKED;
645
-
646
- case SSL_AD_CERTIFICATE_EXPIRED:
647
- return SSL3_AD_CERTIFICATE_EXPIRED;
648
-
649
- case SSL_AD_CERTIFICATE_UNKNOWN:
650
- return SSL3_AD_CERTIFICATE_UNKNOWN;
651
-
652
- case SSL_AD_ILLEGAL_PARAMETER:
653
- return SSL3_AD_ILLEGAL_PARAMETER;
654
-
655
- case SSL_AD_UNKNOWN_CA:
656
- return TLS1_AD_UNKNOWN_CA;
657
-
658
- case SSL_AD_ACCESS_DENIED:
659
- return TLS1_AD_ACCESS_DENIED;
660
-
661
- case SSL_AD_DECODE_ERROR:
662
- return TLS1_AD_DECODE_ERROR;
663
-
664
- case SSL_AD_DECRYPT_ERROR:
665
- return TLS1_AD_DECRYPT_ERROR;
666
- case SSL_AD_EXPORT_RESTRICTION:
667
- return TLS1_AD_EXPORT_RESTRICTION;
668
-
669
- case SSL_AD_PROTOCOL_VERSION:
670
- return TLS1_AD_PROTOCOL_VERSION;
671
-
672
- case SSL_AD_INSUFFICIENT_SECURITY:
673
- return TLS1_AD_INSUFFICIENT_SECURITY;
674
-
675
- case SSL_AD_INTERNAL_ERROR:
676
- return TLS1_AD_INTERNAL_ERROR;
677
-
678
- case SSL_AD_USER_CANCELLED:
679
- return TLS1_AD_USER_CANCELLED;
680
-
681
- case SSL_AD_NO_RENEGOTIATION:
682
- return TLS1_AD_NO_RENEGOTIATION;
683
-
684
- case SSL_AD_UNSUPPORTED_EXTENSION:
685
- return TLS1_AD_UNSUPPORTED_EXTENSION;
686
-
687
- case SSL_AD_CERTIFICATE_UNOBTAINABLE:
688
- return TLS1_AD_CERTIFICATE_UNOBTAINABLE;
689
-
690
- case SSL_AD_UNRECOGNIZED_NAME:
691
- return TLS1_AD_UNRECOGNIZED_NAME;
692
-
693
- case SSL_AD_BAD_CERTIFICATE_STATUS_RESPONSE:
694
- return TLS1_AD_BAD_CERTIFICATE_STATUS_RESPONSE;
695
-
696
- case SSL_AD_BAD_CERTIFICATE_HASH_VALUE:
697
- return TLS1_AD_BAD_CERTIFICATE_HASH_VALUE;
698
-
699
- case SSL_AD_UNKNOWN_PSK_IDENTITY:
700
- return TLS1_AD_UNKNOWN_PSK_IDENTITY;
701
-
702
- case SSL_AD_INAPPROPRIATE_FALLBACK:
703
- return SSL3_AD_INAPPROPRIATE_FALLBACK;
704
-
705
- default:
706
- return -1;
707
- }
708
- }
559
+ const SSL3_ENC_METHOD TLSv1_enc_data = {
560
+ tls1_prf,
561
+ tls1_final_finish_mac,
562
+ tls1_cert_verify_mac,
563
+ };