grpc 1.0.1 → 1.1.2

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 (705) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3696 -867
  3. data/etc/roots.pem +39 -111
  4. data/include/grpc/byte_buffer.h +64 -1
  5. data/include/grpc/census.h +40 -96
  6. data/include/grpc/compression.h +2 -1
  7. data/include/grpc/grpc.h +42 -7
  8. data/include/grpc/grpc_posix.h +8 -5
  9. data/include/grpc/impl/codegen/atm.h +3 -0
  10. data/include/grpc/impl/codegen/atm_gcc_atomic.h +2 -0
  11. data/include/grpc/impl/codegen/atm_gcc_sync.h +8 -0
  12. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  13. data/include/grpc/impl/codegen/byte_buffer_reader.h +4 -4
  14. data/include/grpc/impl/codegen/compression_types.h +1 -1
  15. data/include/grpc/impl/codegen/connectivity_state.h +2 -0
  16. data/include/grpc/impl/codegen/exec_ctx_fwd.h +41 -0
  17. data/include/grpc/impl/codegen/gpr_slice.h +84 -0
  18. data/include/grpc/impl/codegen/{alloc.h → gpr_types.h} +30 -29
  19. data/include/grpc/impl/codegen/grpc_types.h +91 -9
  20. data/include/grpc/impl/codegen/port_platform.h +25 -92
  21. data/include/grpc/impl/codegen/slice.h +54 -97
  22. data/include/grpc/impl/codegen/sync.h +0 -253
  23. data/include/grpc/module.modulemap +0 -2
  24. data/include/grpc/slice.h +132 -0
  25. data/include/grpc/{impl/codegen/slice_buffer.h → slice_buffer.h} +22 -39
  26. data/include/grpc/support/alloc.h +40 -1
  27. data/include/grpc/support/log.h +80 -1
  28. data/include/grpc/support/log_windows.h +2 -0
  29. data/include/grpc/support/string_util.h +1 -1
  30. data/include/grpc/support/sync.h +252 -0
  31. data/include/grpc/support/time.h +67 -1
  32. data/src/boringssl/err_data.c +639 -627
  33. data/src/core/ext/census/base_resources.c +71 -0
  34. data/src/core/ext/census/base_resources.h +39 -0
  35. data/src/core/ext/census/gen/census.pb.c +26 -29
  36. data/src/core/ext/census/gen/census.pb.h +68 -67
  37. data/src/core/ext/census/gen/trace_context.pb.c +81 -0
  38. data/src/core/ext/census/gen/trace_context.pb.h +99 -0
  39. data/src/core/ext/census/grpc_filter.c +22 -16
  40. data/src/core/ext/census/grpc_plugin.c +2 -1
  41. data/src/core/ext/census/initialize.c +16 -4
  42. data/src/core/ext/census/mlog.h +1 -1
  43. data/src/core/ext/census/placeholders.c +0 -45
  44. data/src/core/ext/census/resource.c +312 -0
  45. data/src/core/ext/census/resource.h +63 -0
  46. data/src/core/ext/census/trace_context.c +86 -0
  47. data/src/core/ext/census/trace_context.h +68 -0
  48. data/src/core/ext/census/tracing.c +8 -2
  49. data/src/core/ext/{client_config → client_channel}/channel_connectivity.c +8 -4
  50. data/src/core/ext/client_channel/client_channel.c +1218 -0
  51. data/src/core/ext/{client_config → client_channel}/client_channel.h +8 -11
  52. data/src/core/ext/{client_config → client_channel}/client_channel_factory.c +33 -3
  53. data/src/core/ext/{client_config → client_channel}/client_channel_factory.h +15 -8
  54. data/src/core/ext/{client_config/client_config_plugin.c → client_channel/client_channel_plugin.c} +16 -15
  55. data/src/core/ext/{client_config → client_channel}/connector.c +1 -1
  56. data/src/core/ext/{client_config → client_channel}/connector.h +5 -8
  57. data/{include/grpc/support/slice_buffer.h → src/core/ext/client_channel/default_initial_connect_string.c} +4 -5
  58. data/src/core/ext/client_channel/http_connect_handshaker.c +399 -0
  59. data/src/core/ext/client_channel/http_connect_handshaker.h +52 -0
  60. data/src/core/ext/{client_config → client_channel}/initial_connect_string.c +6 -7
  61. data/src/core/ext/{client_config → client_channel}/initial_connect_string.h +10 -10
  62. data/src/core/ext/{client_config → client_channel}/lb_policy.c +11 -11
  63. data/src/core/ext/{client_config → client_channel}/lb_policy.h +68 -27
  64. data/src/core/ext/client_channel/lb_policy_factory.c +163 -0
  65. data/src/core/ext/{client_config → client_channel}/lb_policy_factory.h +64 -9
  66. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.c +6 -4
  67. data/src/core/ext/{client_config → client_channel}/lb_policy_registry.h +4 -4
  68. data/src/core/ext/{client_config → client_channel}/parse_address.c +21 -14
  69. data/src/core/ext/{client_config → client_channel}/parse_address.h +8 -10
  70. data/src/core/ext/{client_config → client_channel}/resolver.c +3 -4
  71. data/src/core/ext/{client_config → client_channel}/resolver.h +11 -15
  72. data/src/core/ext/{client_config → client_channel}/resolver_factory.c +4 -3
  73. data/src/core/ext/{client_config → client_channel}/resolver_factory.h +13 -11
  74. data/src/core/ext/{client_config → client_channel}/resolver_registry.c +54 -34
  75. data/src/core/ext/{client_config → client_channel}/resolver_registry.h +21 -8
  76. data/src/core/ext/{client_config → client_channel}/subchannel.c +208 -119
  77. data/src/core/ext/{client_config → client_channel}/subchannel.h +21 -11
  78. data/src/core/ext/{client_config → client_channel}/subchannel_index.c +6 -17
  79. data/src/core/ext/{client_config → client_channel}/subchannel_index.h +7 -7
  80. data/src/core/ext/{client_config → client_channel}/uri_parser.c +21 -28
  81. data/src/core/ext/{client_config → client_channel}/uri_parser.h +3 -3
  82. data/src/core/ext/lb_policy/grpclb/grpclb.c +1406 -0
  83. data/src/core/ext/lb_policy/grpclb/grpclb.h +44 -0
  84. data/src/core/ext/lb_policy/grpclb/load_balancer_api.c +117 -37
  85. data/src/core/ext/lb_policy/grpclb/load_balancer_api.h +31 -12
  86. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.c +6 -36
  87. data/src/core/ext/lb_policy/grpclb/proto/grpc/lb/v1/load_balancer.pb.h +22 -42
  88. data/src/core/ext/lb_policy/pick_first/pick_first.c +64 -46
  89. data/src/core/ext/lb_policy/round_robin/round_robin.c +324 -160
  90. data/src/core/ext/load_reporting/load_reporting.c +7 -56
  91. data/src/core/ext/load_reporting/load_reporting.h +41 -28
  92. data/src/core/ext/load_reporting/load_reporting_filter.c +132 -42
  93. data/src/core/ext/load_reporting/load_reporting_filter.h +1 -0
  94. data/src/core/ext/resolver/dns/native/dns_resolver.c +88 -80
  95. data/src/core/ext/resolver/sockaddr/sockaddr_resolver.c +57 -102
  96. data/src/core/ext/transport/chttp2/alpn/alpn.c +1 -1
  97. data/src/core/ext/transport/chttp2/client/chttp2_connector.c +253 -0
  98. data/src/core/{lib/iomgr/ev_poll_and_epoll_posix.h → ext/transport/chttp2/client/chttp2_connector.h} +5 -5
  99. data/src/core/ext/transport/chttp2/client/insecure/channel_create.c +31 -160
  100. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.c +5 -5
  101. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.c +44 -243
  102. data/src/core/ext/transport/chttp2/server/chttp2_server.c +342 -0
  103. data/src/core/ext/transport/chttp2/server/chttp2_server.h +47 -0
  104. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.c +11 -124
  105. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.c +20 -9
  106. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.c +28 -236
  107. data/src/core/ext/transport/chttp2/transport/bin_decoder.c +31 -27
  108. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +5 -4
  109. data/src/core/ext/transport/chttp2/transport/bin_encoder.c +25 -22
  110. data/src/core/ext/transport/chttp2/transport/bin_encoder.h +8 -7
  111. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +0 -3
  112. data/src/core/ext/transport/chttp2/transport/chttp2_transport.c +1345 -1521
  113. data/src/core/ext/transport/chttp2/transport/chttp2_transport.h +3 -1
  114. data/src/core/ext/transport/chttp2/transport/frame.h +3 -5
  115. data/src/core/ext/transport/chttp2/transport/frame_data.c +50 -47
  116. data/src/core/ext/transport/chttp2/transport/frame_data.h +8 -9
  117. data/src/core/ext/transport/chttp2/transport/frame_goaway.c +19 -21
  118. data/src/core/ext/transport/chttp2/transport/frame_goaway.h +9 -8
  119. data/src/core/ext/transport/chttp2/transport/frame_ping.c +13 -12
  120. data/src/core/ext/transport/chttp2/transport/frame_ping.h +6 -6
  121. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.c +31 -19
  122. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.h +8 -7
  123. data/src/core/ext/transport/chttp2/transport/frame_settings.c +22 -25
  124. data/src/core/ext/transport/chttp2/transport/frame_settings.h +9 -8
  125. data/src/core/ext/transport/chttp2/transport/frame_window_update.c +26 -18
  126. data/src/core/ext/transport/chttp2/transport/frame_window_update.h +5 -6
  127. data/src/core/ext/transport/chttp2/transport/hpack_encoder.c +68 -58
  128. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +8 -5
  129. data/src/core/ext/transport/chttp2/transport/hpack_parser.c +327 -214
  130. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +14 -9
  131. data/src/core/ext/transport/chttp2/transport/hpack_table.c +24 -19
  132. data/src/core/ext/transport/chttp2/transport/hpack_table.h +9 -6
  133. data/src/core/ext/transport/chttp2/transport/incoming_metadata.c +2 -2
  134. data/src/core/ext/transport/chttp2/transport/incoming_metadata.h +1 -1
  135. data/src/core/ext/transport/chttp2/transport/internal.h +284 -436
  136. data/src/core/ext/transport/chttp2/transport/parsing.c +355 -590
  137. data/src/core/ext/transport/chttp2/transport/stream_lists.c +36 -309
  138. data/src/core/ext/transport/chttp2/transport/stream_map.c +13 -34
  139. data/src/core/ext/transport/chttp2/transport/stream_map.h +3 -4
  140. data/src/core/ext/transport/chttp2/transport/writing.c +174 -286
  141. data/src/core/lib/channel/channel_args.c +70 -13
  142. data/src/core/lib/channel/channel_args.h +28 -2
  143. data/src/core/lib/channel/channel_stack.c +77 -28
  144. data/src/core/lib/channel/channel_stack.h +61 -23
  145. data/src/core/lib/channel/channel_stack_builder.c +33 -25
  146. data/src/core/lib/channel/channel_stack_builder.h +17 -8
  147. data/src/core/lib/channel/compress_filter.c +52 -36
  148. data/src/core/lib/channel/connected_channel.c +20 -12
  149. data/src/core/lib/channel/connected_channel.h +2 -1
  150. data/src/core/lib/channel/context.h +13 -1
  151. data/src/core/lib/channel/deadline_filter.c +344 -0
  152. data/src/core/lib/channel/deadline_filter.h +99 -0
  153. data/src/core/lib/channel/handshaker.c +240 -0
  154. data/src/core/lib/channel/handshaker.h +164 -0
  155. data/src/core/lib/{security/credentials/google_default/credentials_windows.c → channel/handshaker_factory.c} +16 -23
  156. data/src/core/lib/channel/handshaker_factory.h +66 -0
  157. data/src/core/lib/channel/handshaker_registry.c +113 -0
  158. data/src/core/{ext/client_config/client_config.h → lib/channel/handshaker_registry.h} +26 -16
  159. data/src/core/lib/channel/http_client_filter.c +248 -46
  160. data/src/core/lib/channel/http_client_filter.h +3 -0
  161. data/src/core/lib/channel/http_server_filter.c +136 -24
  162. data/src/core/lib/channel/message_size_filter.c +261 -0
  163. data/src/core/lib/channel/message_size_filter.h +39 -0
  164. data/src/core/lib/compression/message_compress.c +43 -37
  165. data/src/core/lib/compression/message_compress.h +7 -5
  166. data/src/core/lib/http/format_request.c +26 -11
  167. data/src/core/lib/http/format_request.h +7 -5
  168. data/src/core/lib/http/httpcli.c +45 -27
  169. data/src/core/lib/http/httpcli.h +4 -4
  170. data/src/core/lib/http/httpcli_security_connector.c +56 -46
  171. data/src/core/lib/http/parser.c +17 -14
  172. data/src/core/lib/http/parser.h +4 -2
  173. data/src/core/lib/iomgr/closure.c +49 -7
  174. data/src/core/lib/iomgr/closure.h +56 -14
  175. data/src/core/lib/iomgr/combiner.c +422 -0
  176. data/src/core/lib/iomgr/combiner.h +64 -0
  177. data/src/core/lib/iomgr/endpoint.c +8 -2
  178. data/src/core/lib/iomgr/endpoint.h +17 -7
  179. data/src/core/lib/iomgr/endpoint_pair.h +3 -2
  180. data/src/core/lib/iomgr/endpoint_pair_posix.c +9 -8
  181. data/src/core/{ext/client_config/lb_policy_factory.c → lib/iomgr/endpoint_pair_uv.c} +18 -13
  182. data/src/core/lib/iomgr/endpoint_pair_windows.c +7 -6
  183. data/src/core/lib/iomgr/error.c +72 -6
  184. data/src/core/lib/iomgr/error.h +30 -3
  185. data/src/core/lib/iomgr/ev_epoll_linux.c +500 -382
  186. data/src/core/lib/iomgr/ev_epoll_linux.h +3 -2
  187. data/src/core/lib/iomgr/ev_poll_posix.c +317 -30
  188. data/src/core/lib/iomgr/ev_poll_posix.h +1 -0
  189. data/src/core/lib/iomgr/ev_posix.c +26 -5
  190. data/src/core/lib/iomgr/ev_posix.h +12 -1
  191. data/src/core/lib/iomgr/exec_ctx.c +27 -94
  192. data/src/core/lib/iomgr/exec_ctx.h +19 -22
  193. data/src/core/lib/iomgr/executor.c +29 -8
  194. data/src/core/lib/iomgr/executor.h +2 -4
  195. data/src/core/lib/iomgr/iocp_windows.c +3 -4
  196. data/src/core/lib/iomgr/iomgr.c +14 -10
  197. data/src/core/lib/iomgr/iomgr.h +6 -2
  198. data/src/core/lib/iomgr/iomgr_posix.c +2 -2
  199. data/src/core/lib/iomgr/iomgr_uv.c +49 -0
  200. data/src/core/lib/iomgr/iomgr_windows.c +2 -2
  201. data/src/core/lib/iomgr/load_file.c +3 -3
  202. data/src/core/lib/iomgr/load_file.h +2 -2
  203. data/src/core/lib/iomgr/network_status_tracker.c +1 -1
  204. data/src/core/lib/iomgr/pollset_set_uv.c +62 -0
  205. data/src/core/lib/iomgr/pollset_set_windows.c +3 -3
  206. data/src/core/lib/iomgr/pollset_uv.c +142 -0
  207. data/src/core/lib/iomgr/pollset_uv.h +42 -0
  208. data/src/core/lib/iomgr/pollset_windows.c +5 -6
  209. data/src/core/lib/iomgr/port.h +129 -0
  210. data/src/core/lib/iomgr/resolve_address.h +2 -1
  211. data/src/core/lib/iomgr/resolve_address_posix.c +14 -13
  212. data/src/core/lib/iomgr/resolve_address_uv.c +233 -0
  213. data/src/core/lib/iomgr/resolve_address_windows.c +14 -12
  214. data/src/core/lib/iomgr/resource_quota.c +832 -0
  215. data/src/core/lib/iomgr/resource_quota.h +159 -0
  216. data/src/core/lib/iomgr/sockaddr.h +10 -2
  217. data/src/core/lib/iomgr/sockaddr_utils.c +63 -36
  218. data/src/core/lib/iomgr/sockaddr_utils.h +14 -14
  219. data/src/core/lib/iomgr/socket_mutator.c +98 -0
  220. data/src/core/lib/iomgr/socket_mutator.h +80 -0
  221. data/src/core/lib/iomgr/socket_utils.h +42 -0
  222. data/src/core/lib/iomgr/socket_utils_common_posix.c +28 -13
  223. data/src/core/lib/iomgr/socket_utils_linux.c +11 -5
  224. data/src/core/lib/iomgr/socket_utils_posix.c +10 -7
  225. data/src/core/lib/iomgr/socket_utils_posix.h +11 -4
  226. data/src/core/lib/iomgr/socket_utils_uv.c +49 -0
  227. data/src/core/lib/iomgr/socket_utils_windows.c +52 -0
  228. data/src/core/lib/iomgr/socket_windows.c +14 -6
  229. data/src/core/lib/iomgr/socket_windows.h +1 -0
  230. data/src/core/lib/iomgr/tcp_client.h +8 -2
  231. data/src/core/lib/iomgr/tcp_client_posix.c +131 -82
  232. data/src/core/lib/iomgr/tcp_client_posix.h +45 -0
  233. data/src/core/lib/iomgr/tcp_client_uv.c +190 -0
  234. data/src/core/lib/iomgr/tcp_client_windows.c +54 -30
  235. data/src/core/lib/iomgr/tcp_posix.c +135 -56
  236. data/src/core/lib/iomgr/tcp_posix.h +2 -2
  237. data/src/core/lib/iomgr/tcp_server.h +14 -6
  238. data/src/core/lib/iomgr/tcp_server_posix.c +154 -118
  239. data/src/core/lib/iomgr/tcp_server_uv.c +388 -0
  240. data/src/core/lib/iomgr/tcp_server_windows.c +127 -100
  241. data/src/core/lib/iomgr/tcp_uv.c +367 -0
  242. data/src/core/lib/iomgr/tcp_uv.h +59 -0
  243. data/src/core/lib/iomgr/tcp_windows.c +65 -48
  244. data/src/core/lib/iomgr/tcp_windows.h +3 -1
  245. data/src/core/lib/iomgr/timer.h +21 -21
  246. data/src/core/lib/iomgr/{timer.c → timer_generic.c} +15 -10
  247. data/src/core/lib/iomgr/timer_generic.h +49 -0
  248. data/src/core/lib/iomgr/timer_heap.c +6 -0
  249. data/src/core/lib/iomgr/timer_uv.c +99 -0
  250. data/src/core/lib/iomgr/timer_uv.h +47 -0
  251. data/src/core/lib/iomgr/udp_server.c +116 -98
  252. data/src/core/lib/iomgr/udp_server.h +5 -3
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +14 -6
  254. data/src/core/lib/iomgr/unix_sockets_posix.h +6 -5
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +4 -4
  256. data/src/core/lib/iomgr/wakeup_fd_cv.c +118 -0
  257. data/src/core/lib/iomgr/wakeup_fd_cv.h +80 -0
  258. data/src/core/lib/iomgr/wakeup_fd_eventfd.c +3 -3
  259. data/src/core/lib/iomgr/wakeup_fd_nospecial.c +3 -3
  260. data/src/core/lib/iomgr/wakeup_fd_pipe.c +12 -6
  261. data/src/core/lib/iomgr/wakeup_fd_posix.c +34 -5
  262. data/src/core/lib/iomgr/wakeup_fd_posix.h +5 -0
  263. data/src/core/lib/iomgr/workqueue.h +12 -20
  264. data/src/core/{ext/client_config/client_config.c → lib/iomgr/workqueue_uv.c} +24 -33
  265. data/{include/grpc/support/slice.h → src/core/lib/iomgr/workqueue_uv.h} +4 -6
  266. data/src/core/lib/iomgr/workqueue_windows.c +9 -8
  267. data/src/core/lib/json/json.c +3 -3
  268. data/src/core/lib/json/json.h +11 -11
  269. data/src/core/lib/json/json_reader.c +9 -5
  270. data/src/core/lib/profiling/basic_timers.c +10 -1
  271. data/src/core/lib/profiling/timers.h +2 -0
  272. data/src/core/lib/security/context/security_context.c +13 -3
  273. data/src/core/lib/security/context/security_context.h +20 -0
  274. data/src/core/lib/security/credentials/composite/composite_credentials.c +28 -14
  275. data/src/core/lib/security/credentials/composite/composite_credentials.h +2 -2
  276. data/src/core/lib/security/credentials/credentials.c +48 -19
  277. data/src/core/lib/security/credentials/credentials.h +36 -19
  278. data/src/core/lib/security/credentials/credentials_metadata.c +11 -8
  279. data/src/core/lib/security/credentials/fake/fake_credentials.c +15 -11
  280. data/src/core/lib/security/credentials/google_default/{credentials_posix.c → credentials_generic.c} +7 -14
  281. data/src/core/lib/security/credentials/google_default/google_default_credentials.c +33 -21
  282. data/src/core/lib/security/credentials/google_default/google_default_credentials.h +14 -0
  283. data/src/core/lib/security/credentials/iam/iam_credentials.c +3 -2
  284. data/src/core/lib/security/credentials/jwt/json_token.c +1 -0
  285. data/src/core/lib/security/credentials/jwt/json_token.h +1 -1
  286. data/src/core/lib/security/credentials/jwt/jwt_credentials.c +54 -19
  287. data/src/core/lib/security/credentials/jwt/jwt_credentials.h +2 -1
  288. data/src/core/lib/security/credentials/jwt/jwt_verifier.c +129 -79
  289. data/src/core/lib/security/credentials/jwt/jwt_verifier.h +9 -6
  290. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.c +63 -28
  291. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -1
  292. data/src/core/lib/security/credentials/plugin/plugin_credentials.c +32 -11
  293. data/src/core/lib/security/credentials/ssl/ssl_credentials.c +13 -9
  294. data/src/core/lib/security/transport/client_auth_filter.c +33 -27
  295. data/src/core/lib/security/transport/secure_endpoint.c +93 -68
  296. data/src/core/lib/security/transport/secure_endpoint.h +2 -2
  297. data/src/core/lib/security/transport/security_connector.c +133 -168
  298. data/src/core/lib/security/transport/security_connector.h +31 -46
  299. data/src/core/lib/security/transport/security_handshaker.c +501 -0
  300. data/src/core/lib/security/transport/{handshake.h → security_handshaker.h} +10 -10
  301. data/src/core/lib/security/transport/server_auth_filter.c +50 -38
  302. data/src/core/lib/security/util/b64.c +11 -8
  303. data/src/core/lib/security/util/b64.h +5 -4
  304. data/src/core/lib/slice/percent_encoding.c +182 -0
  305. data/src/core/lib/slice/percent_encoding.h +78 -0
  306. data/src/core/lib/{support → slice}/slice.c +81 -50
  307. data/src/core/lib/{support → slice}/slice_buffer.c +78 -60
  308. data/src/core/lib/slice/slice_internal.h +49 -0
  309. data/src/core/lib/slice/slice_string_helpers.c +90 -0
  310. data/src/core/lib/{iomgr/workqueue_posix.h → slice/slice_string_helpers.h} +18 -18
  311. data/src/core/lib/support/backoff.c +24 -13
  312. data/src/core/lib/support/backoff.h +5 -2
  313. data/src/core/lib/support/env.h +0 -2
  314. data/src/core/lib/support/log.c +5 -4
  315. data/src/core/lib/support/log_linux.c +0 -1
  316. data/src/core/lib/support/log_posix.c +1 -1
  317. data/src/core/lib/support/mpscq.c +83 -0
  318. data/src/core/lib/support/mpscq.h +65 -0
  319. data/src/core/lib/support/string.c +58 -49
  320. data/src/core/lib/support/string.h +11 -8
  321. data/src/core/lib/support/subprocess_posix.c +5 -2
  322. data/src/core/lib/support/thd.c +1 -1
  323. data/src/core/lib/support/time.c +43 -79
  324. data/src/core/lib/support/time_posix.c +1 -1
  325. data/src/core/lib/support/tmpfile.h +0 -2
  326. data/src/core/lib/surface/alarm.c +4 -1
  327. data/src/core/lib/surface/byte_buffer.c +17 -11
  328. data/src/core/lib/surface/byte_buffer_reader.c +23 -15
  329. data/src/core/lib/surface/call.c +294 -276
  330. data/src/core/lib/surface/call.h +24 -9
  331. data/src/core/lib/surface/call_log_batch.c +5 -3
  332. data/src/core/lib/surface/channel.c +127 -111
  333. data/src/core/lib/surface/channel.h +14 -5
  334. data/src/core/lib/surface/channel_init.c +1 -1
  335. data/src/core/lib/surface/channel_init.h +10 -1
  336. data/src/core/lib/surface/channel_ping.c +7 -6
  337. data/src/core/lib/surface/completion_queue.c +154 -18
  338. data/src/core/lib/surface/completion_queue.h +5 -0
  339. data/src/core/lib/surface/init.c +40 -6
  340. data/src/core/lib/surface/init.h +1 -0
  341. data/src/core/lib/surface/init_secure.c +5 -2
  342. data/src/core/lib/surface/lame_client.c +28 -18
  343. data/src/core/lib/surface/server.c +134 -87
  344. data/src/core/lib/surface/server.h +8 -0
  345. data/src/core/lib/surface/validate_metadata.c +1 -1
  346. data/src/core/lib/surface/version.c +3 -1
  347. data/src/core/lib/transport/byte_stream.c +7 -4
  348. data/src/core/lib/transport/byte_stream.h +6 -10
  349. data/src/core/lib/transport/connectivity_state.c +21 -12
  350. data/src/core/lib/transport/connectivity_state.h +4 -1
  351. data/src/core/lib/transport/mdstr_hash_table.c +118 -0
  352. data/src/core/lib/transport/mdstr_hash_table.h +77 -0
  353. data/src/core/lib/transport/metadata.c +83 -60
  354. data/src/core/lib/transport/metadata.h +41 -23
  355. data/src/core/lib/transport/metadata_batch.c +17 -11
  356. data/src/core/lib/transport/metadata_batch.h +20 -6
  357. data/src/core/lib/transport/pid_controller.c +57 -0
  358. data/src/core/lib/transport/pid_controller.h +64 -0
  359. data/src/core/lib/transport/service_config.c +251 -0
  360. data/src/core/lib/transport/service_config.h +71 -0
  361. data/src/core/lib/transport/static_metadata.c +18 -16
  362. data/src/core/lib/transport/static_metadata.h +113 -107
  363. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.c +3 -3
  364. data/src/core/{ext/transport/chttp2 → lib}/transport/timeout_encoding.h +7 -7
  365. data/src/core/lib/transport/transport.c +84 -23
  366. data/src/core/lib/transport/transport.h +53 -8
  367. data/src/core/lib/transport/transport_impl.h +3 -0
  368. data/src/core/lib/transport/transport_op_string.c +92 -20
  369. data/src/core/lib/tsi/ssl_transport_security.c +3 -1
  370. data/src/core/plugin_registry/grpc_plugin_registry.c +8 -4
  371. data/src/ruby/ext/grpc/extconf.rb +0 -1
  372. data/src/ruby/ext/grpc/rb_byte_buffer.c +8 -7
  373. data/src/ruby/ext/grpc/rb_call.c +15 -5
  374. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  375. data/src/ruby/ext/grpc/rb_compression_options.c +466 -0
  376. data/src/{core/ext/client_config/default_initial_connect_string.c → ruby/ext/grpc/rb_compression_options.h} +10 -5
  377. data/src/ruby/ext/grpc/rb_grpc.c +3 -1
  378. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +198 -190
  379. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +306 -294
  380. data/src/ruby/ext/grpc/rb_server.c +18 -12
  381. data/src/ruby/lib/grpc/errors.rb +154 -2
  382. data/src/ruby/lib/grpc/generic/active_call.rb +144 -63
  383. data/src/ruby/lib/grpc/generic/bidi_call.rb +18 -2
  384. data/src/ruby/lib/grpc/generic/client_stub.rb +7 -5
  385. data/src/ruby/lib/grpc/generic/rpc_desc.rb +39 -13
  386. data/src/ruby/lib/grpc/generic/rpc_server.rb +51 -24
  387. data/src/ruby/lib/grpc/generic/service.rb +3 -2
  388. data/src/ruby/lib/grpc/version.rb +1 -1
  389. data/src/ruby/pb/grpc/health/checker.rb +3 -1
  390. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +7 -0
  391. data/src/ruby/pb/test/client.rb +307 -7
  392. data/src/ruby/pb/test/server.rb +26 -1
  393. data/src/ruby/spec/compression_options_spec.rb +164 -0
  394. data/src/ruby/spec/error_sanity_spec.rb +64 -0
  395. data/src/ruby/spec/generic/active_call_spec.rb +290 -12
  396. data/src/ruby/spec/generic/client_stub_spec.rb +91 -41
  397. data/src/ruby/spec/generic/rpc_desc_spec.rb +36 -16
  398. data/src/ruby/spec/generic/rpc_server_pool_spec.rb +22 -28
  399. data/src/ruby/spec/generic/rpc_server_spec.rb +6 -6
  400. data/src/ruby/spec/pb/health/checker_spec.rb +27 -19
  401. data/src/ruby/spec/spec_helper.rb +2 -0
  402. data/third_party/boringssl/crypto/aes/aes.c +12 -12
  403. data/third_party/boringssl/crypto/aes/mode_wrappers.c +6 -2
  404. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +28 -13
  405. data/third_party/boringssl/crypto/asn1/a_gentm.c +2 -0
  406. data/third_party/boringssl/crypto/asn1/a_object.c +7 -3
  407. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  408. data/third_party/boringssl/crypto/asn1/a_time.c +0 -11
  409. data/third_party/boringssl/crypto/asn1/a_type.c +0 -2
  410. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -30
  411. data/third_party/boringssl/crypto/asn1/asn1_lib.c +56 -76
  412. data/third_party/boringssl/crypto/asn1/asn1_locl.h +0 -10
  413. data/third_party/boringssl/crypto/asn1/asn1_par.c +0 -322
  414. data/third_party/boringssl/crypto/asn1/f_enum.c +1 -108
  415. data/third_party/boringssl/crypto/asn1/f_int.c +1 -106
  416. data/third_party/boringssl/crypto/asn1/f_string.c +1 -106
  417. data/third_party/boringssl/crypto/asn1/tasn_dec.c +10 -14
  418. data/third_party/boringssl/crypto/asn1/tasn_enc.c +17 -11
  419. data/third_party/boringssl/crypto/asn1/tasn_typ.c +29 -42
  420. data/third_party/boringssl/crypto/asn1/tasn_utl.c +1 -1
  421. data/third_party/boringssl/crypto/base64/base64.c +249 -285
  422. data/third_party/boringssl/crypto/bio/bio.c +13 -23
  423. data/third_party/boringssl/crypto/bio/bio_mem.c +3 -2
  424. data/third_party/boringssl/crypto/bio/connect.c +12 -3
  425. data/third_party/boringssl/crypto/bio/fd.c +22 -15
  426. data/third_party/boringssl/crypto/bio/file.c +2 -38
  427. data/third_party/boringssl/crypto/bio/hexdump.c +1 -2
  428. data/third_party/boringssl/crypto/bio/internal.h +3 -0
  429. data/third_party/boringssl/crypto/bio/pair.c +1 -1
  430. data/third_party/boringssl/crypto/bio/socket.c +10 -2
  431. data/third_party/boringssl/crypto/bio/socket_helper.c +2 -2
  432. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -8
  433. data/third_party/boringssl/crypto/bn/bn.c +38 -0
  434. data/third_party/boringssl/crypto/bn/cmp.c +25 -0
  435. data/third_party/boringssl/crypto/bn/convert.c +73 -76
  436. data/third_party/boringssl/crypto/bn/div.c +136 -70
  437. data/third_party/boringssl/crypto/bn/exponentiation.c +86 -381
  438. data/third_party/boringssl/crypto/bn/gcd.c +213 -296
  439. data/third_party/boringssl/crypto/bn/generic.c +0 -80
  440. data/third_party/boringssl/crypto/bn/internal.h +15 -3
  441. data/third_party/boringssl/crypto/bn/montgomery.c +57 -207
  442. data/third_party/boringssl/crypto/bn/montgomery_inv.c +160 -0
  443. data/third_party/boringssl/crypto/bn/mul.c +2 -1
  444. data/third_party/boringssl/crypto/bn/prime.c +24 -8
  445. data/third_party/boringssl/crypto/bn/random.c +47 -33
  446. data/third_party/boringssl/crypto/bn/sqrt.c +4 -5
  447. data/third_party/boringssl/crypto/buf/buf.c +25 -21
  448. data/third_party/boringssl/crypto/bytestring/ber.c +1 -0
  449. data/third_party/boringssl/crypto/bytestring/cbb.c +50 -22
  450. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -4
  451. data/third_party/boringssl/crypto/chacha/{chacha_generic.c → chacha.c} +56 -29
  452. data/third_party/boringssl/crypto/cipher/aead.c +11 -22
  453. data/third_party/boringssl/crypto/cipher/cipher.c +2 -2
  454. data/third_party/boringssl/crypto/cipher/e_aes.c +53 -103
  455. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +2 -8
  456. data/third_party/boringssl/crypto/cipher/e_des.c +3 -5
  457. data/third_party/boringssl/crypto/cipher/e_null.c +1 -1
  458. data/third_party/boringssl/crypto/cipher/e_rc2.c +1 -1
  459. data/third_party/boringssl/crypto/cipher/e_rc4.c +1 -1
  460. data/third_party/boringssl/crypto/cipher/e_ssl3.c +3 -63
  461. data/third_party/boringssl/crypto/cipher/e_tls.c +12 -83
  462. data/third_party/boringssl/crypto/cipher/internal.h +8 -10
  463. data/third_party/boringssl/crypto/cipher/tls_cbc.c +69 -40
  464. data/third_party/boringssl/crypto/conf/conf.c +2 -1
  465. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +61 -0
  466. data/third_party/boringssl/crypto/cpu-arm-linux.c +360 -0
  467. data/third_party/boringssl/crypto/cpu-arm.c +0 -161
  468. data/third_party/boringssl/crypto/cpu-intel.c +5 -3
  469. data/third_party/boringssl/{ssl/test/scoped_types.h → crypto/cpu-ppc64le.c} +21 -9
  470. data/third_party/boringssl/crypto/crypto.c +29 -7
  471. data/third_party/boringssl/crypto/curve25519/curve25519.c +284 -242
  472. data/third_party/boringssl/crypto/curve25519/internal.h +64 -0
  473. data/third_party/boringssl/crypto/curve25519/spake25519.c +464 -0
  474. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +21 -0
  475. data/third_party/boringssl/crypto/dh/check.c +22 -6
  476. data/third_party/boringssl/crypto/dh/dh.c +45 -21
  477. data/third_party/boringssl/crypto/dh/dh_asn1.c +96 -20
  478. data/third_party/boringssl/crypto/dh/params.c +30 -78
  479. data/third_party/boringssl/crypto/digest/digest.c +3 -3
  480. data/third_party/boringssl/crypto/dsa/dsa.c +59 -29
  481. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +4 -0
  482. data/third_party/boringssl/crypto/ec/ec.c +84 -140
  483. data/third_party/boringssl/crypto/ec/ec_asn1.c +82 -52
  484. data/third_party/boringssl/crypto/ec/ec_key.c +15 -15
  485. data/third_party/boringssl/crypto/ec/ec_montgomery.c +87 -50
  486. data/third_party/boringssl/crypto/ec/internal.h +12 -36
  487. data/third_party/boringssl/crypto/ec/oct.c +11 -11
  488. data/third_party/boringssl/crypto/ec/p224-64.c +59 -116
  489. data/third_party/boringssl/crypto/ec/p256-64.c +88 -163
  490. data/third_party/boringssl/crypto/ec/p256-x86_64.c +46 -58
  491. data/third_party/boringssl/crypto/ec/simple.c +81 -201
  492. data/third_party/boringssl/crypto/ec/util-64.c +0 -74
  493. data/third_party/boringssl/crypto/ecdh/ecdh.c +7 -1
  494. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +28 -46
  495. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +1 -0
  496. data/third_party/boringssl/crypto/engine/engine.c +1 -1
  497. data/third_party/boringssl/crypto/err/err.c +3 -3
  498. data/third_party/boringssl/crypto/evp/evp.c +14 -59
  499. data/third_party/boringssl/crypto/evp/evp_asn1.c +144 -87
  500. data/third_party/boringssl/crypto/evp/evp_ctx.c +7 -7
  501. data/third_party/boringssl/crypto/evp/internal.h +4 -46
  502. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +8 -157
  503. data/third_party/boringssl/crypto/evp/p_ec.c +1 -1
  504. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +22 -170
  505. data/third_party/boringssl/crypto/evp/p_rsa.c +1 -1
  506. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +10 -548
  507. data/third_party/boringssl/crypto/evp/print.c +520 -0
  508. data/third_party/boringssl/crypto/ex_data.c +4 -6
  509. data/third_party/boringssl/crypto/hkdf/hkdf.c +38 -17
  510. data/third_party/boringssl/crypto/hmac/hmac.c +6 -6
  511. data/third_party/boringssl/crypto/internal.h +57 -77
  512. data/third_party/boringssl/crypto/lhash/lhash.c +6 -10
  513. data/third_party/boringssl/crypto/md4/md4.c +9 -0
  514. data/third_party/boringssl/crypto/mem.c +19 -19
  515. data/third_party/boringssl/crypto/modes/cfb.c +5 -6
  516. data/third_party/boringssl/crypto/modes/ctr.c +10 -18
  517. data/third_party/boringssl/crypto/modes/gcm.c +100 -66
  518. data/third_party/boringssl/crypto/modes/internal.h +15 -27
  519. data/third_party/boringssl/crypto/modes/ofb.c +9 -22
  520. data/third_party/boringssl/crypto/newhope/error_correction.c +131 -0
  521. data/third_party/boringssl/crypto/newhope/internal.h +71 -0
  522. data/third_party/boringssl/crypto/newhope/newhope.c +174 -0
  523. data/third_party/boringssl/crypto/newhope/ntt.c +148 -0
  524. data/third_party/boringssl/crypto/newhope/poly.c +183 -0
  525. data/third_party/boringssl/crypto/newhope/precomp.c +306 -0
  526. data/third_party/boringssl/crypto/newhope/reduce.c +42 -0
  527. data/third_party/boringssl/crypto/obj/obj.c +111 -135
  528. data/third_party/boringssl/crypto/obj/obj_dat.h +4 -10
  529. data/third_party/boringssl/crypto/pem/pem_lib.c +6 -43
  530. data/third_party/boringssl/crypto/pem/pem_pkey.c +10 -19
  531. data/third_party/boringssl/crypto/pkcs8/p5_pbe.c +1 -0
  532. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +2 -1
  533. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +2 -2
  534. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +95 -87
  535. data/third_party/boringssl/crypto/{test/test_util.h → poly1305/internal.h} +15 -10
  536. data/third_party/boringssl/crypto/poly1305/poly1305.c +8 -15
  537. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +1 -0
  538. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +3 -3
  539. data/third_party/boringssl/crypto/rand/deterministic.c +47 -0
  540. data/third_party/boringssl/crypto/rand/rand.c +4 -1
  541. data/third_party/boringssl/crypto/rand/urandom.c +5 -7
  542. data/third_party/boringssl/crypto/rand/windows.c +5 -8
  543. data/third_party/boringssl/crypto/rc4/rc4.c +24 -209
  544. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  545. data/third_party/boringssl/crypto/rsa/blinding.c +74 -232
  546. data/third_party/boringssl/crypto/rsa/internal.h +5 -13
  547. data/third_party/boringssl/crypto/rsa/padding.c +64 -63
  548. data/third_party/boringssl/crypto/rsa/rsa.c +50 -28
  549. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +8 -16
  550. data/third_party/boringssl/crypto/rsa/rsa_impl.c +134 -122
  551. data/third_party/boringssl/crypto/sha/sha256.c +2 -2
  552. data/third_party/boringssl/crypto/sha/sha512.c +7 -7
  553. data/third_party/boringssl/crypto/stack/stack.c +13 -22
  554. data/third_party/boringssl/crypto/thread.c +21 -12
  555. data/third_party/boringssl/crypto/thread_none.c +6 -2
  556. data/third_party/boringssl/crypto/thread_pthread.c +16 -7
  557. data/third_party/boringssl/crypto/thread_win.c +38 -85
  558. data/third_party/boringssl/crypto/x509/a_sign.c +3 -3
  559. data/third_party/boringssl/crypto/x509/a_strex.c +1 -1
  560. data/third_party/boringssl/crypto/x509/a_verify.c +2 -2
  561. data/third_party/boringssl/crypto/{evp → x509}/algorithm.c +37 -53
  562. data/third_party/boringssl/crypto/x509/asn1_gen.c +1 -2
  563. data/third_party/boringssl/crypto/x509/by_dir.c +6 -6
  564. data/third_party/boringssl/crypto/x509/internal.h +66 -0
  565. data/third_party/boringssl/crypto/x509/rsa_pss.c +385 -0
  566. data/third_party/boringssl/crypto/x509/t_x509.c +10 -12
  567. data/third_party/boringssl/crypto/x509/x509.c +5 -0
  568. data/third_party/boringssl/crypto/x509/x509_att.c +9 -3
  569. data/third_party/boringssl/crypto/x509/x509_lu.c +34 -44
  570. data/third_party/boringssl/crypto/x509/x509_obj.c +19 -2
  571. data/third_party/boringssl/crypto/x509/x509_r2x.c +9 -5
  572. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  573. data/third_party/boringssl/crypto/x509/x509_txt.c +5 -0
  574. data/third_party/boringssl/crypto/x509/x509_vfy.c +63 -32
  575. data/third_party/boringssl/crypto/x509/x509_vpm.c +29 -18
  576. data/third_party/boringssl/crypto/x509/x509cset.c +2 -1
  577. data/third_party/boringssl/crypto/x509/x_crl.c +2 -2
  578. data/third_party/boringssl/crypto/x509/x_name.c +14 -17
  579. data/third_party/boringssl/crypto/x509/x_pubkey.c +10 -7
  580. data/third_party/boringssl/crypto/x509/x_x509.c +67 -6
  581. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -2
  582. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +2 -1
  583. data/third_party/boringssl/crypto/x509v3/v3_conf.c +4 -3
  584. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +5 -0
  585. data/third_party/boringssl/crypto/x509v3/v3_prn.c +0 -3
  586. data/third_party/boringssl/crypto/x509v3/v3_purp.c +2 -2
  587. data/third_party/boringssl/crypto/x509v3/v3_utl.c +2 -1
  588. data/third_party/boringssl/include/openssl/aead.h +72 -73
  589. data/third_party/boringssl/include/openssl/arm_arch.h +0 -6
  590. data/third_party/boringssl/include/openssl/asn1.h +103 -235
  591. data/third_party/boringssl/include/openssl/asn1_mac.h +17 -74
  592. data/third_party/boringssl/include/openssl/asn1t.h +1 -11
  593. data/third_party/boringssl/include/openssl/base.h +145 -3
  594. data/third_party/boringssl/include/openssl/base64.h +20 -17
  595. data/third_party/boringssl/include/openssl/bio.h +59 -34
  596. data/third_party/boringssl/include/openssl/bn.h +118 -51
  597. data/third_party/boringssl/include/openssl/buf.h +15 -0
  598. data/third_party/boringssl/include/openssl/bytestring.h +52 -4
  599. data/third_party/boringssl/include/openssl/chacha.h +2 -2
  600. data/third_party/boringssl/include/openssl/cipher.h +18 -1
  601. data/third_party/boringssl/include/openssl/cmac.h +11 -0
  602. data/third_party/boringssl/include/openssl/conf.h +13 -2
  603. data/third_party/boringssl/include/openssl/cpu.h +20 -23
  604. data/third_party/boringssl/include/openssl/crypto.h +22 -1
  605. data/third_party/boringssl/include/openssl/curve25519.h +96 -4
  606. data/third_party/boringssl/include/openssl/dh.h +71 -16
  607. data/third_party/boringssl/include/openssl/digest.h +38 -11
  608. data/third_party/boringssl/include/openssl/dsa.h +40 -4
  609. data/third_party/boringssl/include/openssl/ec.h +44 -18
  610. data/third_party/boringssl/include/openssl/ec_key.h +27 -6
  611. data/third_party/boringssl/include/openssl/ecdsa.h +11 -0
  612. data/third_party/boringssl/include/openssl/engine.h +11 -0
  613. data/third_party/boringssl/include/openssl/evp.h +52 -88
  614. data/third_party/boringssl/include/openssl/hkdf.h +24 -4
  615. data/third_party/boringssl/include/openssl/hmac.h +20 -6
  616. data/third_party/boringssl/include/openssl/md4.h +4 -0
  617. data/third_party/boringssl/include/openssl/mem.h +19 -0
  618. data/third_party/boringssl/include/openssl/newhope.h +158 -0
  619. data/third_party/boringssl/include/openssl/nid.h +4166 -0
  620. data/third_party/boringssl/include/openssl/obj.h +31 -3
  621. data/third_party/boringssl/include/openssl/obj_mac.h +17 -4143
  622. data/third_party/boringssl/include/openssl/{opensslfeatures.h → opensslconf.h} +3 -3
  623. data/third_party/boringssl/include/openssl/pem.h +5 -0
  624. data/third_party/boringssl/include/openssl/pkcs8.h +12 -0
  625. data/third_party/boringssl/include/openssl/rand.h +6 -0
  626. data/third_party/boringssl/include/openssl/rc4.h +6 -0
  627. data/third_party/boringssl/{crypto/dh/internal.h → include/openssl/ripemd.h} +38 -11
  628. data/third_party/boringssl/include/openssl/rsa.h +127 -65
  629. data/third_party/boringssl/include/openssl/sha.h +14 -10
  630. data/third_party/boringssl/include/openssl/ssl.h +561 -275
  631. data/third_party/boringssl/include/openssl/ssl3.h +18 -25
  632. data/third_party/boringssl/include/openssl/stack.h +2 -4
  633. data/third_party/boringssl/include/openssl/stack_macros.h +321 -353
  634. data/third_party/boringssl/include/openssl/thread.h +31 -13
  635. data/third_party/boringssl/include/openssl/time_support.h +1 -0
  636. data/third_party/boringssl/include/openssl/tls1.h +37 -33
  637. data/third_party/boringssl/include/openssl/x509.h +69 -26
  638. data/third_party/boringssl/include/openssl/x509_vfy.h +12 -10
  639. data/third_party/boringssl/include/openssl/x509v3.h +23 -2
  640. data/third_party/boringssl/ssl/custom_extensions.c +3 -5
  641. data/third_party/boringssl/ssl/d1_both.c +463 -499
  642. data/third_party/boringssl/ssl/d1_lib.c +38 -109
  643. data/third_party/boringssl/ssl/d1_pkt.c +173 -334
  644. data/third_party/boringssl/ssl/d1_srtp.c +20 -18
  645. data/third_party/boringssl/ssl/{d1_meth.c → dtls_method.c} +88 -15
  646. data/third_party/boringssl/ssl/dtls_record.c +27 -26
  647. data/third_party/boringssl/ssl/{s3_clnt.c → handshake_client.c} +816 -904
  648. data/third_party/boringssl/ssl/handshake_server.c +1932 -0
  649. data/third_party/boringssl/ssl/internal.h +712 -439
  650. data/third_party/boringssl/ssl/s3_both.c +445 -257
  651. data/third_party/boringssl/ssl/s3_enc.c +53 -36
  652. data/third_party/boringssl/ssl/s3_lib.c +23 -268
  653. data/third_party/boringssl/ssl/s3_pkt.c +168 -364
  654. data/third_party/boringssl/ssl/ssl_aead_ctx.c +46 -17
  655. data/third_party/boringssl/ssl/ssl_asn1.c +56 -26
  656. data/third_party/boringssl/ssl/ssl_buffer.c +16 -24
  657. data/third_party/boringssl/ssl/ssl_cert.c +324 -49
  658. data/third_party/boringssl/ssl/ssl_cipher.c +205 -150
  659. data/third_party/boringssl/ssl/ssl_ecdh.c +287 -51
  660. data/third_party/boringssl/ssl/ssl_file.c +21 -68
  661. data/third_party/boringssl/ssl/ssl_lib.c +881 -510
  662. data/third_party/boringssl/ssl/ssl_rsa.c +404 -34
  663. data/third_party/boringssl/ssl/ssl_session.c +324 -103
  664. data/third_party/boringssl/ssl/ssl_stat.c +6 -88
  665. data/third_party/boringssl/ssl/t1_enc.c +23 -39
  666. data/third_party/boringssl/ssl/t1_lib.c +1120 -622
  667. data/third_party/boringssl/ssl/tls13_both.c +440 -0
  668. data/third_party/boringssl/ssl/tls13_client.c +682 -0
  669. data/third_party/boringssl/ssl/tls13_enc.c +391 -0
  670. data/third_party/boringssl/ssl/tls13_server.c +672 -0
  671. data/third_party/boringssl/ssl/{s3_meth.c → tls_method.c} +100 -21
  672. data/third_party/boringssl/ssl/tls_record.c +159 -77
  673. data/third_party/nanopb/pb.h +60 -28
  674. data/third_party/nanopb/pb_decode.c +120 -92
  675. data/third_party/nanopb/pb_decode.h +3 -3
  676. data/third_party/nanopb/pb_encode.c +73 -67
  677. data/third_party/nanopb/pb_encode.h +4 -4
  678. metadata +155 -89
  679. data/include/grpc/impl/codegen/byte_buffer.h +0 -122
  680. data/include/grpc/impl/codegen/log.h +0 -118
  681. data/include/grpc/impl/codegen/time.h +0 -130
  682. data/src/core/ext/client_config/client_channel.c +0 -593
  683. data/src/core/ext/client_config/subchannel_call_holder.c +0 -272
  684. data/src/core/ext/client_config/subchannel_call_holder.h +0 -99
  685. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +0 -2046
  686. data/src/core/lib/iomgr/workqueue_posix.c +0 -151
  687. data/src/core/lib/security/transport/handshake.c +0 -368
  688. data/third_party/boringssl/crypto/asn1/a_bytes.c +0 -308
  689. data/third_party/boringssl/crypto/asn1/bio_asn1.c +0 -477
  690. data/third_party/boringssl/crypto/asn1/bio_ndef.c +0 -251
  691. data/third_party/boringssl/crypto/asn1/t_pkey.c +0 -110
  692. data/third_party/boringssl/crypto/asn1/tasn_prn.c +0 -596
  693. data/third_party/boringssl/crypto/chacha/chacha_vec.c +0 -328
  694. data/third_party/boringssl/crypto/directory.h +0 -66
  695. data/third_party/boringssl/crypto/directory_posix.c +0 -108
  696. data/third_party/boringssl/crypto/directory_win.c +0 -144
  697. data/third_party/boringssl/crypto/test/scoped_types.h +0 -140
  698. data/third_party/boringssl/include/openssl/pqueue.h +0 -146
  699. data/third_party/boringssl/ssl/d1_clnt.c +0 -561
  700. data/third_party/boringssl/ssl/d1_srvr.c +0 -476
  701. data/third_party/boringssl/ssl/pqueue/pqueue.c +0 -197
  702. data/third_party/boringssl/ssl/s3_srvr.c +0 -2272
  703. data/third_party/boringssl/ssl/test/async_bio.h +0 -45
  704. data/third_party/boringssl/ssl/test/packeted_bio.h +0 -44
  705. data/third_party/boringssl/ssl/test/test_config.h +0 -110
@@ -21,80 +21,6 @@
21
21
 
22
22
  #include "internal.h"
23
23
 
24
- /* Convert an array of points into affine coordinates. (If the point at
25
- * infinity is found (Z = 0), it remains unchanged.) This function is
26
- * essentially an equivalent to EC_POINTs_make_affine(), but works with the
27
- * internal representation of points as used by ecp_nistp###.c rather than
28
- * with (BIGNUM-based) EC_POINT data structures. point_array is the
29
- * input/output buffer ('num' points in projective form, i.e. three
30
- * coordinates each), based on an internal representation of field elements
31
- * of size 'felem_size'. tmp_felems needs to point to a temporary array of
32
- * 'num'+1 field elements for storage of intermediate values. */
33
- void ec_GFp_nistp_points_make_affine_internal(
34
- size_t num, void *point_array, size_t felem_size, void *tmp_felems,
35
- void (*felem_one)(void *out), int (*felem_is_zero)(const void *in),
36
- void (*felem_assign)(void *out, const void *in),
37
- void (*felem_square)(void *out, const void *in),
38
- void (*felem_mul)(void *out, const void *in1, const void *in2),
39
- void (*felem_inv)(void *out, const void *in),
40
- void (*felem_contract)(void *out, const void *in)) {
41
- int i = 0;
42
-
43
- #define tmp_felem(I) (&((char *)tmp_felems)[(I)*felem_size])
44
- #define X(I) (&((char *)point_array)[3 * (I)*felem_size])
45
- #define Y(I) (&((char *)point_array)[(3 * (I) + 1) * felem_size])
46
- #define Z(I) (&((char *)point_array)[(3 * (I) + 2) * felem_size])
47
-
48
- if (!felem_is_zero(Z(0))) {
49
- felem_assign(tmp_felem(0), Z(0));
50
- } else {
51
- felem_one(tmp_felem(0));
52
- }
53
-
54
- for (i = 1; i < (int)num; i++) {
55
- if (!felem_is_zero(Z(i))) {
56
- felem_mul(tmp_felem(i), tmp_felem(i - 1), Z(i));
57
- } else {
58
- felem_assign(tmp_felem(i), tmp_felem(i - 1));
59
- }
60
- }
61
- /* Now each tmp_felem(i) is the product of Z(0) .. Z(i), skipping any
62
- * zero-valued factors: if Z(i) = 0, we essentially pretend that Z(i) = 1. */
63
-
64
- felem_inv(tmp_felem(num - 1), tmp_felem(num - 1));
65
- for (i = num - 1; i >= 0; i--) {
66
- if (i > 0) {
67
- /* tmp_felem(i-1) is the product of Z(0) .. Z(i-1), tmp_felem(i)
68
- * is the inverse of the product of Z(0) .. Z(i). */
69
- /* 1/Z(i) */
70
- felem_mul(tmp_felem(num), tmp_felem(i - 1), tmp_felem(i));
71
- } else {
72
- felem_assign(tmp_felem(num), tmp_felem(0)); /* 1/Z(0) */
73
- }
74
-
75
- if (!felem_is_zero(Z(i))) {
76
- if (i > 0) {
77
- /* For next iteration, replace tmp_felem(i-1) by its inverse. */
78
- felem_mul(tmp_felem(i - 1), tmp_felem(i), Z(i));
79
- }
80
-
81
- /* Convert point (X, Y, Z) into affine form (X/(Z^2), Y/(Z^3), 1). */
82
- felem_square(Z(i), tmp_felem(num)); /* 1/(Z^2) */
83
- felem_mul(X(i), X(i), Z(i)); /* X/(Z^2) */
84
- felem_mul(Z(i), Z(i), tmp_felem(num)); /* 1/(Z^3) */
85
- felem_mul(Y(i), Y(i), Z(i)); /* Y/(Z^3) */
86
- felem_contract(X(i), X(i));
87
- felem_contract(Y(i), Y(i));
88
- felem_one(Z(i));
89
- } else {
90
- if (i > 0) {
91
- /* For next iteration, replace tmp_felem(i-1) by its inverse. */
92
- felem_assign(tmp_felem(i - 1), tmp_felem(i));
93
- }
94
- }
95
- }
96
- }
97
-
98
24
  /* This function looks at 5+1 scalar bits (5 current, 1 adjacent less
99
25
  * significant bit), and recodes them into a signed digit for use in fast point
100
26
  * multiplication: the use of signed rather than unsigned digits means that
@@ -66,6 +66,7 @@
66
66
 
67
67
  #include <openssl/ecdh.h>
68
68
 
69
+ #include <limits.h>
69
70
  #include <string.h>
70
71
 
71
72
  #include <openssl/bn.h>
@@ -142,7 +143,12 @@ int ECDH_compute_key(void *out, size_t outlen, const EC_POINT *pub_key,
142
143
  memcpy(out, buf, outlen);
143
144
  }
144
145
 
145
- ret = outlen;
146
+ if (outlen > INT_MAX) {
147
+ OPENSSL_PUT_ERROR(ECDH, ERR_R_OVERFLOW);
148
+ goto err;
149
+ }
150
+
151
+ ret = (int)outlen;
146
152
 
147
153
  err:
148
154
  OPENSSL_free(buf);
@@ -79,10 +79,6 @@ int ECDSA_verify(int type, const uint8_t *digest, size_t digest_len,
79
79
  int ret = 0;
80
80
  uint8_t *der = NULL;
81
81
 
82
- if (eckey->ecdsa_meth && eckey->ecdsa_meth->verify) {
83
- return eckey->ecdsa_meth->verify(digest, digest_len, sig, sig_len, eckey);
84
- }
85
-
86
82
  /* Decode the ECDSA signature. */
87
83
  s = ECDSA_SIG_from_bytes(sig, sig_len);
88
84
  if (s == NULL) {
@@ -148,11 +144,6 @@ int ECDSA_do_verify(const uint8_t *digest, size_t digest_len,
148
144
  const EC_GROUP *group;
149
145
  const EC_POINT *pub_key;
150
146
 
151
- if (eckey->ecdsa_meth && eckey->ecdsa_meth->verify) {
152
- OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_NOT_IMPLEMENTED);
153
- return 0;
154
- }
155
-
156
147
  /* check input values */
157
148
  if ((group = EC_KEY_get0_group(eckey)) == NULL ||
158
149
  (pub_key = EC_KEY_get0_public_key(eckey)) == NULL ||
@@ -185,7 +176,8 @@ int ECDSA_do_verify(const uint8_t *digest, size_t digest_len,
185
176
  goto err;
186
177
  }
187
178
  /* calculate tmp1 = inv(S) mod order */
188
- if (!BN_mod_inverse(u2, sig->s, order, ctx)) {
179
+ int no_inverse;
180
+ if (!BN_mod_inverse_odd(u2, &no_inverse, sig->s, order, ctx)) {
189
181
  OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
190
182
  goto err;
191
183
  }
@@ -234,7 +226,7 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
234
226
  BIGNUM **rp, const uint8_t *digest,
235
227
  size_t digest_len) {
236
228
  BN_CTX *ctx = NULL;
237
- BIGNUM *k = NULL, *r = NULL, *X = NULL;
229
+ BIGNUM *k = NULL, *r = NULL, *tmp = NULL;
238
230
  EC_POINT *tmp_point = NULL;
239
231
  const EC_GROUP *group;
240
232
  int ret = 0;
@@ -255,8 +247,8 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
255
247
 
256
248
  k = BN_new(); /* this value is later returned in *kinvp */
257
249
  r = BN_new(); /* this value is later returned in *rp */
258
- X = BN_new();
259
- if (k == NULL || r == NULL || X == NULL) {
250
+ tmp = BN_new();
251
+ if (k == NULL || r == NULL || tmp == NULL) {
260
252
  OPENSSL_PUT_ERROR(ECDSA, ERR_R_MALLOC_FAILURE);
261
253
  goto err;
262
254
  }
@@ -272,20 +264,18 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
272
264
  /* If possible, we'll include the private key and message digest in the k
273
265
  * generation. The |digest| argument is only empty if |ECDSA_sign_setup| is
274
266
  * being used. */
275
- do {
276
- int ok;
277
-
278
- if (digest_len > 0) {
279
- ok = BN_generate_dsa_nonce(k, order, EC_KEY_get0_private_key(eckey),
280
- digest, digest_len, ctx);
281
- } else {
282
- ok = BN_rand_range(k, order);
283
- }
284
- if (!ok) {
285
- OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED);
286
- goto err;
287
- }
288
- } while (BN_is_zero(k));
267
+ if (digest_len > 0) {
268
+ do {
269
+ if (!BN_generate_dsa_nonce(k, order, EC_KEY_get0_private_key(eckey),
270
+ digest, digest_len, ctx)) {
271
+ OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED);
272
+ goto err;
273
+ }
274
+ } while (BN_is_zero(k));
275
+ } else if (!BN_rand_range_ex(k, 1, order)) {
276
+ OPENSSL_PUT_ERROR(ECDSA, ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED);
277
+ goto err;
278
+ }
289
279
 
290
280
  /* We do not want timing information to leak the length of k,
291
281
  * so we compute G*k using an equivalent scalar of fixed
@@ -305,33 +295,25 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
305
295
  OPENSSL_PUT_ERROR(ECDSA, ERR_R_EC_LIB);
306
296
  goto err;
307
297
  }
308
- if (!EC_POINT_get_affine_coordinates_GFp(group, tmp_point, X, NULL, ctx)) {
298
+ if (!EC_POINT_get_affine_coordinates_GFp(group, tmp_point, tmp, NULL,
299
+ ctx)) {
309
300
  OPENSSL_PUT_ERROR(ECDSA, ERR_R_EC_LIB);
310
301
  goto err;
311
302
  }
312
303
 
313
- if (!BN_nnmod(r, X, order, ctx)) {
304
+ if (!BN_nnmod(r, tmp, order, ctx)) {
314
305
  OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
315
306
  goto err;
316
307
  }
317
308
  } while (BN_is_zero(r));
318
309
 
319
- /* compute the inverse of k */
320
- if (ec_group_get_mont_data(group) != NULL) {
321
- /* We want inverse in constant time, therefore we use that the order must
322
- * be prime and thus we can use Fermat's Little Theorem. */
323
- if (!BN_set_word(X, 2) ||
324
- !BN_sub(X, order, X)) {
325
- OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
326
- goto err;
327
- }
328
- BN_set_flags(X, BN_FLG_CONSTTIME);
329
- if (!BN_mod_exp_mont_consttime(k, k, X, order, ctx,
330
- ec_group_get_mont_data(group))) {
331
- OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
332
- goto err;
333
- }
334
- } else if (!BN_mod_inverse(k, k, order, ctx)) {
310
+ /* Compute the inverse of k. The order is a prime, so use Fermat's Little
311
+ * Theorem. */
312
+ if (!BN_set_word(tmp, 2) ||
313
+ !BN_sub(tmp, order, tmp) ||
314
+ /* Note |ec_group_get_mont_data| may return NULL but |BN_mod_exp_mont|
315
+ * allows it to be. */
316
+ !BN_mod_exp_mont(k, k, tmp, order, ctx, ec_group_get_mont_data(group))) {
335
317
  OPENSSL_PUT_ERROR(ECDSA, ERR_R_BN_LIB);
336
318
  goto err;
337
319
  }
@@ -353,7 +335,7 @@ err:
353
335
  BN_CTX_free(ctx);
354
336
  }
355
337
  EC_POINT_free(tmp_point);
356
- BN_clear_free(X);
338
+ BN_clear_free(tmp);
357
339
  return ret;
358
340
  }
359
341
 
@@ -220,6 +220,7 @@ int i2d_ECDSA_SIG(const ECDSA_SIG *sig, uint8_t **outp) {
220
220
  CBB cbb;
221
221
  if (!CBB_init(&cbb, 0) ||
222
222
  !ECDSA_SIG_marshal(&cbb, sig)) {
223
+ CBB_cleanup(&cbb);
223
224
  return -1;
224
225
  }
225
226
  return CBB_finish_i2d(&cbb, outp);
@@ -93,4 +93,4 @@ void METHOD_unref(void *method_in) {
93
93
  assert(method->is_static);
94
94
  }
95
95
 
96
- OPENSSL_DECLARE_ERROR_REASON(ENGINE, OPERATION_NOT_SUPPORTED);
96
+ OPENSSL_DECLARE_ERROR_REASON(ENGINE, OPERATION_NOT_SUPPORTED)
@@ -114,9 +114,9 @@
114
114
  #include <string.h>
115
115
 
116
116
  #if defined(OPENSSL_WINDOWS)
117
- #pragma warning(push, 3)
117
+ OPENSSL_MSVC_PRAGMA(warning(push, 3))
118
118
  #include <windows.h>
119
- #pragma warning(pop)
119
+ OPENSSL_MSVC_PRAGMA(warning(pop))
120
120
  #endif
121
121
 
122
122
  #include <openssl/mem.h>
@@ -325,7 +325,7 @@ int ERR_get_next_error_library(void) {
325
325
 
326
326
  CRYPTO_STATIC_MUTEX_lock_write(&global_next_library_mutex);
327
327
  ret = global_next_library++;
328
- CRYPTO_STATIC_MUTEX_unlock(&global_next_library_mutex);
328
+ CRYPTO_STATIC_MUTEX_unlock_write(&global_next_library_mutex);
329
329
 
330
330
  return ret;
331
331
  }
@@ -59,12 +59,11 @@
59
59
  #include <assert.h>
60
60
  #include <string.h>
61
61
 
62
- #include <openssl/bio.h>
63
62
  #include <openssl/dsa.h>
64
63
  #include <openssl/ec.h>
65
64
  #include <openssl/err.h>
66
65
  #include <openssl/mem.h>
67
- #include <openssl/obj.h>
66
+ #include <openssl/nid.h>
68
67
  #include <openssl/rsa.h>
69
68
  #include <openssl/thread.h>
70
69
 
@@ -109,9 +108,9 @@ void EVP_PKEY_free(EVP_PKEY *pkey) {
109
108
  OPENSSL_free(pkey);
110
109
  }
111
110
 
112
- EVP_PKEY *EVP_PKEY_up_ref(EVP_PKEY *pkey) {
111
+ int EVP_PKEY_up_ref(EVP_PKEY *pkey) {
113
112
  CRYPTO_refcount_inc(&pkey->references);
114
- return pkey;
113
+ return 1;
115
114
  }
116
115
 
117
116
  int EVP_PKEY_is_opaque(const EVP_PKEY *pkey) {
@@ -195,8 +194,10 @@ int EVP_PKEY_id(const EVP_PKEY *pkey) {
195
194
  return pkey->type;
196
195
  }
197
196
 
198
- /* TODO(fork): remove the first argument. */
199
- const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pengine, int nid) {
197
+ /* evp_pkey_asn1_find returns the ASN.1 method table for the given |nid|, which
198
+ * should be one of the |EVP_PKEY_*| values. It returns NULL if |nid| is
199
+ * unknown. */
200
+ static const EVP_PKEY_ASN1_METHOD *evp_pkey_asn1_find(int nid) {
200
201
  switch (nid) {
201
202
  case EVP_PKEY_RSA:
202
203
  return &rsa_asn1_meth;
@@ -210,7 +211,7 @@ const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find(ENGINE **pengine, int nid) {
210
211
  }
211
212
 
212
213
  int EVP_PKEY_type(int nid) {
213
- const EVP_PKEY_ASN1_METHOD *meth = EVP_PKEY_asn1_find(NULL, nid);
214
+ const EVP_PKEY_ASN1_METHOD *meth = evp_pkey_asn1_find(nid);
214
215
  if (meth == NULL) {
215
216
  return NID_undef;
216
217
  }
@@ -301,6 +302,8 @@ EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey) {
301
302
  return ec_key;
302
303
  }
303
304
 
305
+ DH *EVP_PKEY_get0_DH(EVP_PKEY *pkey) { return NULL; }
306
+
304
307
  int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key) {
305
308
  if (!EVP_PKEY_set_type(pkey, type)) {
306
309
  return 0;
@@ -309,21 +312,6 @@ int EVP_PKEY_assign(EVP_PKEY *pkey, int type, void *key) {
309
312
  return key != NULL;
310
313
  }
311
314
 
312
- const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_find_str(ENGINE **pengine,
313
- const char *name,
314
- size_t len) {
315
- if (len == 3 && memcmp(name, "RSA", 3) == 0) {
316
- return &rsa_asn1_meth;
317
- }
318
- if (len == 2 && memcmp(name, "EC", 2) == 0) {
319
- return &ec_asn1_meth;
320
- }
321
- if (len == 3 && memcmp(name, "DSA", 3) == 0) {
322
- return &dsa_asn1_meth;
323
- }
324
- return NULL;
325
- }
326
-
327
315
  int EVP_PKEY_set_type(EVP_PKEY *pkey, int type) {
328
316
  const EVP_PKEY_ASN1_METHOD *ameth;
329
317
 
@@ -331,10 +319,10 @@ int EVP_PKEY_set_type(EVP_PKEY *pkey, int type) {
331
319
  free_it(pkey);
332
320
  }
333
321
 
334
- ameth = EVP_PKEY_asn1_find(NULL, type);
322
+ ameth = evp_pkey_asn1_find(type);
335
323
  if (ameth == NULL) {
336
324
  OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM);
337
- ERR_add_error_dataf("algorithm %d (%s)", type, OBJ_nid2sn(type));
325
+ ERR_add_error_dataf("algorithm %d", type);
338
326
  return 0;
339
327
  }
340
328
 
@@ -358,41 +346,6 @@ int EVP_PKEY_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b) {
358
346
  return -2;
359
347
  }
360
348
 
361
- static int print_unsupported(BIO *out, const EVP_PKEY *pkey, int indent,
362
- const char *kstr) {
363
- BIO_indent(out, indent, 128);
364
- BIO_printf(out, "%s algorithm \"%s\" unsupported\n", kstr,
365
- OBJ_nid2ln(pkey->type));
366
- return 1;
367
- }
368
-
369
- int EVP_PKEY_print_public(BIO *out, const EVP_PKEY *pkey, int indent,
370
- ASN1_PCTX *pctx) {
371
- if (pkey->ameth && pkey->ameth->pub_print) {
372
- return pkey->ameth->pub_print(out, pkey, indent, pctx);
373
- }
374
-
375
- return print_unsupported(out, pkey, indent, "Public Key");
376
- }
377
-
378
- int EVP_PKEY_print_private(BIO *out, const EVP_PKEY *pkey, int indent,
379
- ASN1_PCTX *pctx) {
380
- if (pkey->ameth && pkey->ameth->priv_print) {
381
- return pkey->ameth->priv_print(out, pkey, indent, pctx);
382
- }
383
-
384
- return print_unsupported(out, pkey, indent, "Private Key");
385
- }
386
-
387
- int EVP_PKEY_print_params(BIO *out, const EVP_PKEY *pkey, int indent,
388
- ASN1_PCTX *pctx) {
389
- if (pkey->ameth && pkey->ameth->param_print) {
390
- return pkey->ameth->param_print(out, pkey, indent, pctx);
391
- }
392
-
393
- return print_unsupported(out, pkey, indent, "Parameters");
394
- }
395
-
396
349
  int EVP_PKEY_CTX_set_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD *md) {
397
350
  return EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, EVP_PKEY_CTRL_MD, 0,
398
351
  (void *)md);
@@ -405,6 +358,8 @@ int EVP_PKEY_CTX_get_signature_md(EVP_PKEY_CTX *ctx, const EVP_MD **out_md) {
405
358
 
406
359
  void OpenSSL_add_all_algorithms(void) {}
407
360
 
361
+ void OPENSSL_add_all_algorithms_conf(void) {}
362
+
408
363
  void OpenSSL_add_all_ciphers(void) {}
409
364
 
410
365
  void OpenSSL_add_all_digests(void) {}
@@ -56,22 +56,51 @@
56
56
 
57
57
  #include <openssl/evp.h>
58
58
 
59
- #include <openssl/asn1.h>
59
+ #include <string.h>
60
+
60
61
  #include <openssl/bytestring.h>
62
+ #include <openssl/dsa.h>
63
+ #include <openssl/ec_key.h>
61
64
  #include <openssl/err.h>
62
- #include <openssl/obj.h>
63
- #include <openssl/x509.h>
65
+ #include <openssl/rsa.h>
64
66
 
65
67
  #include "internal.h"
68
+ #include "../internal.h"
69
+
70
+
71
+ static const EVP_PKEY_ASN1_METHOD *const kASN1Methods[] = {
72
+ &rsa_asn1_meth,
73
+ &ec_asn1_meth,
74
+ &dsa_asn1_meth,
75
+ };
76
+
77
+ static int parse_key_type(CBS *cbs, int *out_type) {
78
+ CBS oid;
79
+ if (!CBS_get_asn1(cbs, &oid, CBS_ASN1_OBJECT)) {
80
+ return 0;
81
+ }
82
+
83
+ unsigned i;
84
+ for (i = 0; i < OPENSSL_ARRAY_SIZE(kASN1Methods); i++) {
85
+ const EVP_PKEY_ASN1_METHOD *method = kASN1Methods[i];
86
+ if (CBS_len(&oid) == method->oid_len &&
87
+ memcmp(CBS_data(&oid), method->oid, method->oid_len) == 0) {
88
+ *out_type = method->pkey_id;
89
+ return 1;
90
+ }
91
+ }
66
92
 
93
+ return 0;
94
+ }
67
95
 
68
96
  EVP_PKEY *EVP_parse_public_key(CBS *cbs) {
69
97
  /* Parse the SubjectPublicKeyInfo. */
70
- CBS spki, algorithm, oid, key;
98
+ CBS spki, algorithm, key;
99
+ int type;
71
100
  uint8_t padding;
72
101
  if (!CBS_get_asn1(cbs, &spki, CBS_ASN1_SEQUENCE) ||
73
102
  !CBS_get_asn1(&spki, &algorithm, CBS_ASN1_SEQUENCE) ||
74
- !CBS_get_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
103
+ !parse_key_type(&algorithm, &type) ||
75
104
  !CBS_get_asn1(&spki, &key, CBS_ASN1_BITSTRING) ||
76
105
  CBS_len(&spki) != 0 ||
77
106
  /* Every key type defined encodes the key as a byte string with the same
@@ -85,7 +114,7 @@ EVP_PKEY *EVP_parse_public_key(CBS *cbs) {
85
114
  /* Set up an |EVP_PKEY| of the appropriate type. */
86
115
  EVP_PKEY *ret = EVP_PKEY_new();
87
116
  if (ret == NULL ||
88
- !EVP_PKEY_set_type(ret, OBJ_cbs2nid(&oid))) {
117
+ !EVP_PKEY_set_type(ret, type)) {
89
118
  goto err;
90
119
  }
91
120
 
@@ -106,7 +135,7 @@ err:
106
135
  }
107
136
 
108
137
  int EVP_marshal_public_key(CBB *cbb, const EVP_PKEY *key) {
109
- if (key->ameth->pub_encode == NULL) {
138
+ if (key->ameth == NULL || key->ameth->pub_encode == NULL) {
110
139
  OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM);
111
140
  return 0;
112
141
  }
@@ -116,13 +145,14 @@ int EVP_marshal_public_key(CBB *cbb, const EVP_PKEY *key) {
116
145
 
117
146
  EVP_PKEY *EVP_parse_private_key(CBS *cbs) {
118
147
  /* Parse the PrivateKeyInfo. */
119
- CBS pkcs8, algorithm, oid, key;
148
+ CBS pkcs8, algorithm, key;
120
149
  uint64_t version;
150
+ int type;
121
151
  if (!CBS_get_asn1(cbs, &pkcs8, CBS_ASN1_SEQUENCE) ||
122
152
  !CBS_get_asn1_uint64(&pkcs8, &version) ||
123
153
  version != 0 ||
124
154
  !CBS_get_asn1(&pkcs8, &algorithm, CBS_ASN1_SEQUENCE) ||
125
- !CBS_get_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
155
+ !parse_key_type(&algorithm, &type) ||
126
156
  !CBS_get_asn1(&pkcs8, &key, CBS_ASN1_OCTETSTRING)) {
127
157
  OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
128
158
  return NULL;
@@ -133,7 +163,7 @@ EVP_PKEY *EVP_parse_private_key(CBS *cbs) {
133
163
  /* Set up an |EVP_PKEY| of the appropriate type. */
134
164
  EVP_PKEY *ret = EVP_PKEY_new();
135
165
  if (ret == NULL ||
136
- !EVP_PKEY_set_type(ret, OBJ_cbs2nid(&oid))) {
166
+ !EVP_PKEY_set_type(ret, type)) {
137
167
  goto err;
138
168
  }
139
169
 
@@ -154,7 +184,7 @@ err:
154
184
  }
155
185
 
156
186
  int EVP_marshal_private_key(CBB *cbb, const EVP_PKEY *key) {
157
- if (key->ameth->priv_encode == NULL) {
187
+ if (key->ameth == NULL || key->ameth->priv_encode == NULL) {
158
188
  OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM);
159
189
  return 0;
160
190
  }
@@ -162,107 +192,134 @@ int EVP_marshal_private_key(CBB *cbb, const EVP_PKEY *key) {
162
192
  return key->ameth->priv_encode(cbb, key);
163
193
  }
164
194
 
165
- EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **out, const uint8_t **inp,
166
- long len) {
167
- EVP_PKEY *ret;
168
-
169
- if (out == NULL || *out == NULL) {
170
- ret = EVP_PKEY_new();
171
- if (ret == NULL) {
172
- OPENSSL_PUT_ERROR(EVP, ERR_R_EVP_LIB);
173
- return NULL;
174
- }
175
- } else {
176
- ret = *out;
177
- }
178
-
179
- if (!EVP_PKEY_set_type(ret, type)) {
180
- OPENSSL_PUT_ERROR(EVP, EVP_R_UNKNOWN_PUBLIC_KEY_TYPE);
181
- goto err;
195
+ static EVP_PKEY *old_priv_decode(CBS *cbs, int type) {
196
+ EVP_PKEY *ret = EVP_PKEY_new();
197
+ if (ret == NULL) {
198
+ return NULL;
182
199
  }
183
200
 
184
- const uint8_t *in = *inp;
185
- /* If trying to remove |old_priv_decode|, note that some code depends on this
186
- * function writing into |*out| and the |priv_decode| path doesn't support
187
- * that. */
188
- if (!ret->ameth->old_priv_decode ||
189
- !ret->ameth->old_priv_decode(ret, &in, len)) {
190
- if (ret->ameth->priv_decode) {
191
- /* Reset |in| in case |old_priv_decode| advanced it on error. */
192
- in = *inp;
193
- PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, &in, len);
194
- if (!p8) {
201
+ switch (type) {
202
+ case EVP_PKEY_EC: {
203
+ EC_KEY *ec_key = EC_KEY_parse_private_key(cbs, NULL);
204
+ if (ec_key == NULL || !EVP_PKEY_assign_EC_KEY(ret, ec_key)) {
205
+ EC_KEY_free(ec_key);
195
206
  goto err;
196
207
  }
197
- EVP_PKEY_free(ret);
198
- ret = EVP_PKCS82PKEY(p8);
199
- PKCS8_PRIV_KEY_INFO_free(p8);
200
- if (ret == NULL) {
208
+ return ret;
209
+ }
210
+ case EVP_PKEY_DSA: {
211
+ DSA *dsa = DSA_parse_private_key(cbs);
212
+ if (dsa == NULL || !EVP_PKEY_assign_DSA(ret, dsa)) {
213
+ DSA_free(dsa);
201
214
  goto err;
202
215
  }
203
- } else {
204
- OPENSSL_PUT_ERROR(EVP, ERR_R_ASN1_LIB);
216
+ return ret;
217
+ }
218
+ case EVP_PKEY_RSA: {
219
+ RSA *rsa = RSA_parse_private_key(cbs);
220
+ if (rsa == NULL || !EVP_PKEY_assign_RSA(ret, rsa)) {
221
+ RSA_free(rsa);
222
+ goto err;
223
+ }
224
+ return ret;
225
+ }
226
+ default:
227
+ OPENSSL_PUT_ERROR(EVP, EVP_R_UNKNOWN_PUBLIC_KEY_TYPE);
205
228
  goto err;
229
+ }
230
+
231
+ err:
232
+ EVP_PKEY_free(ret);
233
+ return NULL;
234
+ }
235
+
236
+ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **out, const uint8_t **inp,
237
+ long len) {
238
+ if (len < 0) {
239
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
240
+ return NULL;
241
+ }
242
+
243
+ /* Parse with the legacy format. */
244
+ CBS cbs;
245
+ CBS_init(&cbs, *inp, (size_t)len);
246
+ EVP_PKEY *ret = old_priv_decode(&cbs, type);
247
+ if (ret == NULL) {
248
+ /* Try again with PKCS#8. */
249
+ ERR_clear_error();
250
+ CBS_init(&cbs, *inp, (size_t)len);
251
+ ret = EVP_parse_private_key(&cbs);
252
+ if (ret == NULL) {
253
+ return NULL;
254
+ }
255
+ if (ret->type != type) {
256
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DIFFERENT_KEY_TYPES);
257
+ EVP_PKEY_free(ret);
258
+ return NULL;
206
259
  }
207
260
  }
208
261
 
209
262
  if (out != NULL) {
263
+ EVP_PKEY_free(*out);
210
264
  *out = ret;
211
265
  }
212
- *inp = in;
266
+ *inp = CBS_data(&cbs);
213
267
  return ret;
268
+ }
214
269
 
215
- err:
216
- if (out == NULL || *out != ret) {
217
- EVP_PKEY_free(ret);
270
+ /* num_elements parses one SEQUENCE from |in| and returns the number of elements
271
+ * in it. On parse error, it returns zero. */
272
+ static size_t num_elements(const uint8_t *in, size_t in_len) {
273
+ CBS cbs, sequence;
274
+ CBS_init(&cbs, in, (size_t)in_len);
275
+
276
+ if (!CBS_get_asn1(&cbs, &sequence, CBS_ASN1_SEQUENCE)) {
277
+ return 0;
218
278
  }
219
- return NULL;
279
+
280
+ size_t count = 0;
281
+ while (CBS_len(&sequence) > 0) {
282
+ if (!CBS_get_any_asn1_element(&sequence, NULL, NULL, NULL)) {
283
+ return 0;
284
+ }
285
+
286
+ count++;
287
+ }
288
+
289
+ return count;
220
290
  }
221
291
 
222
292
  EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **out, const uint8_t **inp, long len) {
223
- STACK_OF(ASN1_TYPE) *inkey;
224
- const uint8_t *p;
225
- int keytype;
226
- p = *inp;
227
-
228
- /* Dirty trick: read in the ASN1 data into out STACK_OF(ASN1_TYPE):
229
- * by analyzing it we can determine the passed structure: this
230
- * assumes the input is surrounded by an ASN1 SEQUENCE. */
231
- inkey = d2i_ASN1_SEQUENCE_ANY(NULL, &p, len);
232
- /* Since we only need to discern "traditional format" RSA and DSA
233
- * keys we can just count the elements. */
234
- if (sk_ASN1_TYPE_num(inkey) == 6) {
235
- keytype = EVP_PKEY_DSA;
236
- } else if (sk_ASN1_TYPE_num(inkey) == 4) {
237
- keytype = EVP_PKEY_EC;
238
- } else if (sk_ASN1_TYPE_num(inkey) == 3) {
239
- /* This seems to be PKCS8, not traditional format */
240
- p = *inp;
241
- PKCS8_PRIV_KEY_INFO *p8 = d2i_PKCS8_PRIV_KEY_INFO(NULL, &p, len);
242
- EVP_PKEY *ret;
243
-
244
- sk_ASN1_TYPE_pop_free(inkey, ASN1_TYPE_free);
245
- if (!p8) {
246
- OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_PUBLIC_KEY_TYPE);
247
- return NULL;
248
- }
249
- ret = EVP_PKCS82PKEY(p8);
250
- PKCS8_PRIV_KEY_INFO_free(p8);
251
- if (ret == NULL) {
252
- return NULL;
253
- }
293
+ if (len < 0) {
294
+ OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
295
+ return NULL;
296
+ }
254
297
 
255
- *inp = p;
256
- if (out) {
298
+ /* Parse the input as a PKCS#8 PrivateKeyInfo. */
299
+ CBS cbs;
300
+ CBS_init(&cbs, *inp, (size_t)len);
301
+ EVP_PKEY *ret = EVP_parse_private_key(&cbs);
302
+ if (ret != NULL) {
303
+ if (out != NULL) {
304
+ EVP_PKEY_free(*out);
257
305
  *out = ret;
258
306
  }
307
+ *inp = CBS_data(&cbs);
259
308
  return ret;
260
- } else {
261
- keytype = EVP_PKEY_RSA;
262
309
  }
310
+ ERR_clear_error();
263
311
 
264
- sk_ASN1_TYPE_pop_free(inkey, ASN1_TYPE_free);
265
- return d2i_PrivateKey(keytype, out, inp, len);
312
+ /* Count the elements to determine the legacy key format. */
313
+ switch (num_elements(*inp, (size_t)len)) {
314
+ case 4:
315
+ return d2i_PrivateKey(EVP_PKEY_EC, out, inp, len);
316
+
317
+ case 6:
318
+ return d2i_PrivateKey(EVP_PKEY_DSA, out, inp, len);
319
+
320
+ default:
321
+ return d2i_PrivateKey(EVP_PKEY_RSA, out, inp, len);
322
+ }
266
323
  }
267
324
 
268
325
  int i2d_PublicKey(EVP_PKEY *key, uint8_t **outp) {