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
@@ -56,12 +56,10 @@
56
56
 
57
57
  #include <openssl/evp.h>
58
58
 
59
- #include <stdio.h>
60
59
  #include <string.h>
61
60
 
62
61
  #include <openssl/err.h>
63
62
  #include <openssl/mem.h>
64
- #include <openssl/obj.h>
65
63
 
66
64
  #include "internal.h"
67
65
 
@@ -98,8 +96,7 @@ static EVP_PKEY_CTX *evp_pkey_ctx_new(EVP_PKEY *pkey, ENGINE *e, int id) {
98
96
 
99
97
  if (pmeth == NULL) {
100
98
  OPENSSL_PUT_ERROR(EVP, EVP_R_UNSUPPORTED_ALGORITHM);
101
- const char *name = OBJ_nid2sn(id);
102
- ERR_add_error_dataf("algorithm %d (%s)", id, name);
99
+ ERR_add_error_dataf("algorithm %d", id);
103
100
  return NULL;
104
101
  }
105
102
 
@@ -115,7 +112,8 @@ static EVP_PKEY_CTX *evp_pkey_ctx_new(EVP_PKEY *pkey, ENGINE *e, int id) {
115
112
  ret->operation = EVP_PKEY_OP_UNDEFINED;
116
113
 
117
114
  if (pkey) {
118
- ret->pkey = EVP_PKEY_up_ref(pkey);
115
+ EVP_PKEY_up_ref(pkey);
116
+ ret->pkey = pkey;
119
117
  }
120
118
 
121
119
  if (pmeth->init) {
@@ -168,14 +166,16 @@ EVP_PKEY_CTX *EVP_PKEY_CTX_dup(EVP_PKEY_CTX *pctx) {
168
166
  rctx->operation = pctx->operation;
169
167
 
170
168
  if (pctx->pkey) {
171
- rctx->pkey = EVP_PKEY_up_ref(pctx->pkey);
169
+ EVP_PKEY_up_ref(pctx->pkey);
170
+ rctx->pkey = pctx->pkey;
172
171
  if (rctx->pkey == NULL) {
173
172
  goto err;
174
173
  }
175
174
  }
176
175
 
177
176
  if (pctx->peerkey) {
178
- rctx->peerkey = EVP_PKEY_up_ref(pctx->peerkey);
177
+ EVP_PKEY_up_ref(pctx->peerkey);
178
+ rctx->peerkey = pctx->peerkey;
179
179
  if (rctx->peerkey == NULL) {
180
180
  goto err;
181
181
  }
@@ -59,36 +59,17 @@
59
59
 
60
60
  #include <openssl/base.h>
61
61
 
62
+ #include <openssl/rsa.h>
63
+
62
64
  #if defined(__cplusplus)
63
65
  extern "C" {
64
66
  #endif
65
67
 
66
68
 
67
- /* These values are flags for EVP_PKEY_ASN1_METHOD.flags. */
68
-
69
- /* ASN1_PKEY_SIGPARAM_NULL controls whether the default behavior of
70
- * EVP_DigestSignAlgorithm writes an explicit NULL parameter in the
71
- * AlgorithmIdentifier. */
72
- #define ASN1_PKEY_SIGPARAM_NULL 0x1
73
-
74
- /* evp_digest_sign_algorithm_result_t is the return value of the
75
- * digest_sign_algorithm function in EVP_PKEY_ASN1_METHOD. */
76
- typedef enum {
77
- /* EVP_DIGEST_SIGN_ALGORITHM_ERROR signals an error. */
78
- EVP_DIGEST_SIGN_ALGORITHM_ERROR = 0,
79
- /* EVP_DIGEST_SIGN_ALGORITHM_SUCCESS signals that the parameters were
80
- * serialized in the AlgorithmIdentifier. */
81
- EVP_DIGEST_SIGN_ALGORITHM_SUCCESS = 1,
82
- /* EVP_DIGEST_SIGN_ALGORITHM_DEFAULT signals that the parameters are
83
- * serialized using the default behavior. */
84
- EVP_DIGEST_SIGN_ALGORITHM_DEFAULT = 2,
85
- } evp_digest_sign_algorithm_result_t;
86
-
87
69
  struct evp_pkey_asn1_method_st {
88
70
  int pkey_id;
89
- unsigned long pkey_flags;
90
-
91
- const char *pem_str;
71
+ uint8_t oid[9];
72
+ uint8_t oid_len;
92
73
 
93
74
  /* pub_decode decodes |params| and |key| as a SubjectPublicKeyInfo
94
75
  * and writes the result into |out|. It returns one on success and zero on
@@ -104,7 +85,6 @@ struct evp_pkey_asn1_method_st {
104
85
  int (*pub_encode)(CBB *out, const EVP_PKEY *key);
105
86
 
106
87
  int (*pub_cmp)(const EVP_PKEY *a, const EVP_PKEY *b);
107
- int (*pub_print)(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx);
108
88
 
109
89
  /* priv_decode decodes |params| and |key| as a PrivateKeyInfo and writes the
110
90
  * result into |out|. It returns one on success and zero on error. |params| is
@@ -116,9 +96,6 @@ struct evp_pkey_asn1_method_st {
116
96
  * |out|. It returns one on success and zero on error. */
117
97
  int (*priv_encode)(CBB *out, const EVP_PKEY *key);
118
98
 
119
- int (*priv_print)(BIO *out, const EVP_PKEY *pkey, int indent,
120
- ASN1_PCTX *pctx);
121
-
122
99
  /* pkey_opaque returns 1 if the |pk| is opaque. Opaque keys are backed by
123
100
  * custom implementations which do not expose key material and parameters.*/
124
101
  int (*pkey_opaque)(const EVP_PKEY *pk);
@@ -135,27 +112,8 @@ struct evp_pkey_asn1_method_st {
135
112
  int (*param_missing)(const EVP_PKEY *pk);
136
113
  int (*param_copy)(EVP_PKEY *to, const EVP_PKEY *from);
137
114
  int (*param_cmp)(const EVP_PKEY *a, const EVP_PKEY *b);
138
- int (*param_print)(BIO *out, const EVP_PKEY *pkey, int indent,
139
- ASN1_PCTX *pctx);
140
- int (*sig_print)(BIO *out, const X509_ALGOR *sigalg, const ASN1_STRING *sig,
141
- int indent, ASN1_PCTX *pctx);
142
-
143
115
 
144
116
  void (*pkey_free)(EVP_PKEY *pkey);
145
-
146
- /* Legacy functions for old PEM */
147
-
148
- int (*old_priv_decode)(EVP_PKEY *pkey, const uint8_t **pder,
149
- int derlen);
150
-
151
- /* Converting parameters to/from AlgorithmIdentifier (X509_ALGOR). */
152
- int (*digest_verify_init_from_algorithm)(EVP_MD_CTX *ctx,
153
- X509_ALGOR *algor,
154
- EVP_PKEY *pkey);
155
- evp_digest_sign_algorithm_result_t (*digest_sign_algorithm)(
156
- EVP_MD_CTX *ctx,
157
- X509_ALGOR *algor);
158
-
159
117
  } /* EVP_PKEY_ASN1_METHOD */;
160
118
 
161
119
 
@@ -55,16 +55,11 @@
55
55
 
56
56
  #include <openssl/evp.h>
57
57
 
58
- #include <openssl/asn1.h>
59
- #include <openssl/asn1t.h>
60
58
  #include <openssl/digest.h>
61
59
  #include <openssl/bn.h>
62
60
  #include <openssl/bytestring.h>
63
61
  #include <openssl/dsa.h>
64
62
  #include <openssl/err.h>
65
- #include <openssl/mem.h>
66
- #include <openssl/obj.h>
67
- #include <openssl/x509.h>
68
63
 
69
64
  #include "internal.h"
70
65
 
@@ -111,10 +106,11 @@ static int dsa_pub_encode(CBB *out, const EVP_PKEY *key) {
111
106
  const int has_params = dsa->p != NULL && dsa->q != NULL && dsa->g != NULL;
112
107
 
113
108
  /* See RFC 5480, section 2. */
114
- CBB spki, algorithm, key_bitstring;
109
+ CBB spki, algorithm, oid, key_bitstring;
115
110
  if (!CBB_add_asn1(out, &spki, CBS_ASN1_SEQUENCE) ||
116
111
  !CBB_add_asn1(&spki, &algorithm, CBS_ASN1_SEQUENCE) ||
117
- !OBJ_nid2cbb(&algorithm, NID_dsa) ||
112
+ !CBB_add_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
113
+ !CBB_add_bytes(&oid, dsa_asn1_meth.oid, dsa_asn1_meth.oid_len) ||
118
114
  (has_params &&
119
115
  !DSA_marshal_parameters(&algorithm, dsa)) ||
120
116
  !CBB_add_asn1(&spki, &key_bitstring, CBS_ASN1_BITSTRING) ||
@@ -177,11 +173,12 @@ static int dsa_priv_encode(CBB *out, const EVP_PKEY *key) {
177
173
  }
178
174
 
179
175
  /* See PKCS#11, v2.40, section 2.5. */
180
- CBB pkcs8, algorithm, private_key;
176
+ CBB pkcs8, algorithm, oid, private_key;
181
177
  if (!CBB_add_asn1(out, &pkcs8, CBS_ASN1_SEQUENCE) ||
182
178
  !CBB_add_asn1_uint64(&pkcs8, 0 /* version */) ||
183
179
  !CBB_add_asn1(&pkcs8, &algorithm, CBS_ASN1_SEQUENCE) ||
184
- !OBJ_nid2cbb(&algorithm, NID_dsa) ||
180
+ !CBB_add_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
181
+ !CBB_add_bytes(&oid, dsa_asn1_meth.oid, dsa_asn1_meth.oid_len) ||
185
182
  !DSA_marshal_parameters(&algorithm, dsa) ||
186
183
  !CBB_add_asn1(&pkcs8, &private_key, CBS_ASN1_OCTETSTRING) ||
187
184
  !BN_marshal_asn1(&private_key, dsa->priv_key) ||
@@ -245,157 +242,17 @@ static int dsa_pub_cmp(const EVP_PKEY *a, const EVP_PKEY *b) {
245
242
 
246
243
  static void int_dsa_free(EVP_PKEY *pkey) { DSA_free(pkey->pkey.dsa); }
247
244
 
248
- static void update_buflen(const BIGNUM *b, size_t *pbuflen) {
249
- size_t i;
250
-
251
- if (!b) {
252
- return;
253
- }
254
- i = BN_num_bytes(b);
255
- if (*pbuflen < i) {
256
- *pbuflen = i;
257
- }
258
- }
259
-
260
- static int do_dsa_print(BIO *bp, const DSA *x, int off, int ptype) {
261
- uint8_t *m = NULL;
262
- int ret = 0;
263
- size_t buf_len = 0;
264
- const char *ktype = NULL;
265
-
266
- const BIGNUM *priv_key, *pub_key;
267
-
268
- priv_key = NULL;
269
- if (ptype == 2) {
270
- priv_key = x->priv_key;
271
- }
272
-
273
- pub_key = NULL;
274
- if (ptype > 0) {
275
- pub_key = x->pub_key;
276
- }
277
-
278
- ktype = "DSA-Parameters";
279
- if (ptype == 2) {
280
- ktype = "Private-Key";
281
- } else if (ptype == 1) {
282
- ktype = "Public-Key";
283
- }
284
-
285
- update_buflen(x->p, &buf_len);
286
- update_buflen(x->q, &buf_len);
287
- update_buflen(x->g, &buf_len);
288
- update_buflen(priv_key, &buf_len);
289
- update_buflen(pub_key, &buf_len);
290
-
291
- m = OPENSSL_malloc(buf_len + 10);
292
- if (m == NULL) {
293
- OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
294
- goto err;
295
- }
296
-
297
- if (priv_key) {
298
- if (!BIO_indent(bp, off, 128) ||
299
- BIO_printf(bp, "%s: (%d bit)\n", ktype, BN_num_bits(x->p)) <= 0) {
300
- goto err;
301
- }
302
- }
303
-
304
- if (!ASN1_bn_print(bp, "priv:", priv_key, m, off) ||
305
- !ASN1_bn_print(bp, "pub: ", pub_key, m, off) ||
306
- !ASN1_bn_print(bp, "P: ", x->p, m, off) ||
307
- !ASN1_bn_print(bp, "Q: ", x->q, m, off) ||
308
- !ASN1_bn_print(bp, "G: ", x->g, m, off)) {
309
- goto err;
310
- }
311
- ret = 1;
312
-
313
- err:
314
- OPENSSL_free(m);
315
- return ret;
316
- }
317
-
318
- static int dsa_param_print(BIO *bp, const EVP_PKEY *pkey, int indent,
319
- ASN1_PCTX *ctx) {
320
- return do_dsa_print(bp, pkey->pkey.dsa, indent, 0);
321
- }
322
-
323
- static int dsa_pub_print(BIO *bp, const EVP_PKEY *pkey, int indent,
324
- ASN1_PCTX *ctx) {
325
- return do_dsa_print(bp, pkey->pkey.dsa, indent, 1);
326
- }
327
-
328
- static int dsa_priv_print(BIO *bp, const EVP_PKEY *pkey, int indent,
329
- ASN1_PCTX *ctx) {
330
- return do_dsa_print(bp, pkey->pkey.dsa, indent, 2);
331
- }
332
-
333
- static int old_dsa_priv_decode(EVP_PKEY *pkey, const uint8_t **pder,
334
- int derlen) {
335
- DSA *dsa;
336
- dsa = d2i_DSAPrivateKey(NULL, pder, derlen);
337
- if (dsa == NULL) {
338
- OPENSSL_PUT_ERROR(EVP, ERR_R_DSA_LIB);
339
- return 0;
340
- }
341
- EVP_PKEY_assign_DSA(pkey, dsa);
342
- return 1;
343
- }
344
-
345
- static int dsa_sig_print(BIO *bp, const X509_ALGOR *sigalg,
346
- const ASN1_STRING *sig, int indent, ASN1_PCTX *pctx) {
347
- DSA_SIG *dsa_sig;
348
- const uint8_t *p;
349
-
350
- if (!sig) {
351
- return BIO_puts(bp, "\n") > 0;
352
- }
353
-
354
- p = sig->data;
355
- dsa_sig = d2i_DSA_SIG(NULL, &p, sig->length);
356
- if (dsa_sig == NULL) {
357
- return X509_signature_dump(bp, sig, indent);
358
- }
359
-
360
- int rv = 0;
361
- size_t buf_len = 0;
362
- uint8_t *m = NULL;
363
-
364
- update_buflen(dsa_sig->r, &buf_len);
365
- update_buflen(dsa_sig->s, &buf_len);
366
- m = OPENSSL_malloc(buf_len + 10);
367
- if (m == NULL) {
368
- OPENSSL_PUT_ERROR(EVP, ERR_R_MALLOC_FAILURE);
369
- goto err;
370
- }
371
-
372
- if (BIO_write(bp, "\n", 1) != 1 ||
373
- !ASN1_bn_print(bp, "r: ", dsa_sig->r, m, indent) ||
374
- !ASN1_bn_print(bp, "s: ", dsa_sig->s, m, indent)) {
375
- goto err;
376
- }
377
- rv = 1;
378
-
379
- err:
380
- OPENSSL_free(m);
381
- DSA_SIG_free(dsa_sig);
382
- return rv;
383
- }
384
-
385
245
  const EVP_PKEY_ASN1_METHOD dsa_asn1_meth = {
386
246
  EVP_PKEY_DSA,
387
- 0,
388
-
389
- "DSA",
247
+ /* 1.2.840.10040.4.1 */
248
+ {0x2a, 0x86, 0x48, 0xce, 0x38, 0x04, 0x01}, 7,
390
249
 
391
250
  dsa_pub_decode,
392
251
  dsa_pub_encode,
393
252
  dsa_pub_cmp,
394
- dsa_pub_print,
395
253
 
396
254
  dsa_priv_decode,
397
255
  dsa_priv_encode,
398
- dsa_priv_print,
399
256
 
400
257
  NULL /* pkey_opaque */,
401
258
  NULL /* pkey_supports_digest */,
@@ -406,12 +263,6 @@ const EVP_PKEY_ASN1_METHOD dsa_asn1_meth = {
406
263
  dsa_missing_parameters,
407
264
  dsa_copy_parameters,
408
265
  dsa_cmp_parameters,
409
- dsa_param_print,
410
- dsa_sig_print,
411
266
 
412
267
  int_dsa_free,
413
- old_dsa_priv_decode,
414
-
415
- NULL /* digest_verify_init_from_algorithm */,
416
- NULL /* digest_sign_algorithm */,
417
268
  };
@@ -66,7 +66,7 @@
66
66
  #include <openssl/ecdsa.h>
67
67
  #include <openssl/err.h>
68
68
  #include <openssl/mem.h>
69
- #include <openssl/obj.h>
69
+ #include <openssl/nid.h>
70
70
 
71
71
  #include "internal.h"
72
72
  #include "../ec/internal.h"
@@ -55,16 +55,12 @@
55
55
 
56
56
  #include <openssl/evp.h>
57
57
 
58
- #include <openssl/asn1t.h>
59
58
  #include <openssl/bn.h>
60
59
  #include <openssl/bytestring.h>
61
60
  #include <openssl/ec.h>
62
61
  #include <openssl/ec_key.h>
63
62
  #include <openssl/ecdsa.h>
64
63
  #include <openssl/err.h>
65
- #include <openssl/mem.h>
66
- #include <openssl/obj.h>
67
- #include <openssl/x509.h>
68
64
 
69
65
  #include "internal.h"
70
66
 
@@ -72,19 +68,15 @@
72
68
  static int eckey_pub_encode(CBB *out, const EVP_PKEY *key) {
73
69
  const EC_KEY *ec_key = key->pkey.ec;
74
70
  const EC_GROUP *group = EC_KEY_get0_group(ec_key);
75
- int curve_nid = EC_GROUP_get_curve_name(group);
76
- if (curve_nid == NID_undef) {
77
- OPENSSL_PUT_ERROR(EVP, EVP_R_NO_NID_FOR_CURVE);
78
- return 0;
79
- }
80
71
  const EC_POINT *public_key = EC_KEY_get0_public_key(ec_key);
81
72
 
82
73
  /* See RFC 5480, section 2. */
83
- CBB spki, algorithm, key_bitstring;
74
+ CBB spki, algorithm, oid, key_bitstring;
84
75
  if (!CBB_add_asn1(out, &spki, CBS_ASN1_SEQUENCE) ||
85
76
  !CBB_add_asn1(&spki, &algorithm, CBS_ASN1_SEQUENCE) ||
86
- !OBJ_nid2cbb(&algorithm, NID_X9_62_id_ecPublicKey) ||
87
- !OBJ_nid2cbb(&algorithm, curve_nid) ||
77
+ !CBB_add_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
78
+ !CBB_add_bytes(&oid, ec_asn1_meth.oid, ec_asn1_meth.oid_len) ||
79
+ !EC_KEY_marshal_curve_name(&algorithm, group) ||
88
80
  !CBB_add_asn1(&spki, &key_bitstring, CBS_ASN1_BITSTRING) ||
89
81
  !CBB_add_u8(&key_bitstring, 0 /* padding */) ||
90
82
  !EC_POINT_point2cbb(&key_bitstring, group, public_key,
@@ -101,31 +93,33 @@ static int eckey_pub_decode(EVP_PKEY *out, CBS *params, CBS *key) {
101
93
  /* See RFC 5480, section 2. */
102
94
 
103
95
  /* The parameters are a named curve. */
104
- CBS named_curve;
105
- if (!CBS_get_asn1(params, &named_curve, CBS_ASN1_OBJECT) ||
106
- CBS_len(params) != 0) {
96
+ EC_POINT *point = NULL;
97
+ EC_KEY *eckey = NULL;
98
+ EC_GROUP *group = EC_KEY_parse_curve_name(params);
99
+ if (group == NULL || CBS_len(params) != 0) {
107
100
  OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
108
- return 0;
101
+ goto err;
109
102
  }
110
103
 
111
- EC_KEY *eckey = EC_KEY_new_by_curve_name(OBJ_cbs2nid(&named_curve));
112
- if (eckey == NULL) {
113
- return 0;
104
+ eckey = EC_KEY_new();
105
+ if (eckey == NULL || !EC_KEY_set_group(eckey, group)) {
106
+ goto err;
114
107
  }
115
108
 
116
- EC_POINT *point = EC_POINT_new(EC_KEY_get0_group(eckey));
109
+ point = EC_POINT_new(group);
117
110
  if (point == NULL ||
118
- !EC_POINT_oct2point(EC_KEY_get0_group(eckey), point, CBS_data(key),
119
- CBS_len(key), NULL) ||
111
+ !EC_POINT_oct2point(group, point, CBS_data(key), CBS_len(key), NULL) ||
120
112
  !EC_KEY_set_public_key(eckey, point)) {
121
113
  goto err;
122
114
  }
123
115
 
116
+ EC_GROUP_free(group);
124
117
  EC_POINT_free(point);
125
118
  EVP_PKEY_assign_EC_KEY(out, eckey);
126
119
  return 1;
127
120
 
128
121
  err:
122
+ EC_GROUP_free(group);
129
123
  EC_POINT_free(point);
130
124
  EC_KEY_free(eckey);
131
125
  return 0;
@@ -169,11 +163,6 @@ static int eckey_priv_decode(EVP_PKEY *out, CBS *params, CBS *key) {
169
163
 
170
164
  static int eckey_priv_encode(CBB *out, const EVP_PKEY *key) {
171
165
  const EC_KEY *ec_key = key->pkey.ec;
172
- int curve_nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(ec_key));
173
- if (curve_nid == NID_undef) {
174
- OPENSSL_PUT_ERROR(EVP, EVP_R_NO_NID_FOR_CURVE);
175
- return 0;
176
- }
177
166
 
178
167
  /* Omit the redundant copy of the curve name. This contradicts RFC 5915 but
179
168
  * aligns with PKCS #11. SEC 1 only says they may be omitted if known by other
@@ -182,12 +171,13 @@ static int eckey_priv_encode(CBB *out, const EVP_PKEY *key) {
182
171
  unsigned enc_flags = EC_KEY_get_enc_flags(ec_key) | EC_PKEY_NO_PARAMETERS;
183
172
 
184
173
  /* See RFC 5915. */
185
- CBB pkcs8, algorithm, private_key;
174
+ CBB pkcs8, algorithm, oid, private_key;
186
175
  if (!CBB_add_asn1(out, &pkcs8, CBS_ASN1_SEQUENCE) ||
187
176
  !CBB_add_asn1_uint64(&pkcs8, 0 /* version */) ||
188
177
  !CBB_add_asn1(&pkcs8, &algorithm, CBS_ASN1_SEQUENCE) ||
189
- !OBJ_nid2cbb(&algorithm, NID_X9_62_id_ecPublicKey) ||
190
- !OBJ_nid2cbb(&algorithm, curve_nid) ||
178
+ !CBB_add_asn1(&algorithm, &oid, CBS_ASN1_OBJECT) ||
179
+ !CBB_add_bytes(&oid, ec_asn1_meth.oid, ec_asn1_meth.oid_len) ||
180
+ !EC_KEY_marshal_curve_name(&algorithm, EC_KEY_get0_group(ec_key)) ||
191
181
  !CBB_add_asn1(&pkcs8, &private_key, CBS_ASN1_OCTETSTRING) ||
192
182
  !EC_KEY_marshal_private_key(&private_key, ec_key, enc_flags) ||
193
183
  !CBB_flush(out)) {
@@ -237,153 +227,21 @@ static int ec_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b) {
237
227
 
238
228
  static void int_ec_free(EVP_PKEY *pkey) { EC_KEY_free(pkey->pkey.ec); }
239
229
 
240
- static int do_EC_KEY_print(BIO *bp, const EC_KEY *x, int off, int ktype) {
241
- uint8_t *buffer = NULL;
242
- const char *ecstr;
243
- size_t buf_len = 0, i;
244
- int ret = 0, reason = ERR_R_BIO_LIB;
245
- BN_CTX *ctx = NULL;
246
- const EC_GROUP *group;
247
- const EC_POINT *public_key;
248
- const BIGNUM *priv_key;
249
- uint8_t *pub_key_bytes = NULL;
250
- size_t pub_key_bytes_len = 0;
251
-
252
- if (x == NULL || (group = EC_KEY_get0_group(x)) == NULL) {
253
- reason = ERR_R_PASSED_NULL_PARAMETER;
254
- goto err;
255
- }
256
-
257
- ctx = BN_CTX_new();
258
- if (ctx == NULL) {
259
- reason = ERR_R_MALLOC_FAILURE;
260
- goto err;
261
- }
262
-
263
- if (ktype > 0) {
264
- public_key = EC_KEY_get0_public_key(x);
265
- if (public_key != NULL) {
266
- pub_key_bytes_len = EC_POINT_point2oct(
267
- group, public_key, EC_KEY_get_conv_form(x), NULL, 0, ctx);
268
- if (pub_key_bytes_len == 0) {
269
- reason = ERR_R_MALLOC_FAILURE;
270
- goto err;
271
- }
272
- pub_key_bytes = OPENSSL_malloc(pub_key_bytes_len);
273
- if (pub_key_bytes == NULL) {
274
- reason = ERR_R_MALLOC_FAILURE;
275
- goto err;
276
- }
277
- pub_key_bytes_len =
278
- EC_POINT_point2oct(group, public_key, EC_KEY_get_conv_form(x),
279
- pub_key_bytes, pub_key_bytes_len, ctx);
280
- if (pub_key_bytes_len == 0) {
281
- reason = ERR_R_MALLOC_FAILURE;
282
- goto err;
283
- }
284
- buf_len = pub_key_bytes_len;
285
- }
286
- }
287
-
288
- if (ktype == 2) {
289
- priv_key = EC_KEY_get0_private_key(x);
290
- if (priv_key && (i = (size_t)BN_num_bytes(priv_key)) > buf_len) {
291
- buf_len = i;
292
- }
293
- } else {
294
- priv_key = NULL;
295
- }
296
-
297
- if (ktype > 0) {
298
- buf_len += 10;
299
- if ((buffer = OPENSSL_malloc(buf_len)) == NULL) {
300
- reason = ERR_R_MALLOC_FAILURE;
301
- goto err;
302
- }
303
- }
304
- if (ktype == 2) {
305
- ecstr = "Private-Key";
306
- } else if (ktype == 1) {
307
- ecstr = "Public-Key";
308
- } else {
309
- ecstr = "ECDSA-Parameters";
310
- }
311
-
312
- if (!BIO_indent(bp, off, 128)) {
313
- goto err;
314
- }
315
- const BIGNUM *order = EC_GROUP_get0_order(group);
316
- if (BIO_printf(bp, "%s: (%d bit)\n", ecstr, BN_num_bits(order)) <= 0) {
317
- goto err;
318
- }
319
-
320
- if ((priv_key != NULL) &&
321
- !ASN1_bn_print(bp, "priv:", priv_key, buffer, off)) {
322
- goto err;
323
- }
324
- if (pub_key_bytes != NULL) {
325
- BIO_hexdump(bp, pub_key_bytes, pub_key_bytes_len, off);
326
- }
327
- /* TODO(fork): implement */
328
- /*
329
- if (!ECPKParameters_print(bp, group, off))
330
- goto err; */
331
- ret = 1;
332
-
333
- err:
334
- if (!ret) {
335
- OPENSSL_PUT_ERROR(EVP, reason);
336
- }
337
- OPENSSL_free(pub_key_bytes);
338
- BN_CTX_free(ctx);
339
- OPENSSL_free(buffer);
340
- return ret;
341
- }
342
-
343
- static int eckey_param_print(BIO *bp, const EVP_PKEY *pkey, int indent,
344
- ASN1_PCTX *ctx) {
345
- return do_EC_KEY_print(bp, pkey->pkey.ec, indent, 0);
346
- }
347
-
348
- static int eckey_pub_print(BIO *bp, const EVP_PKEY *pkey, int indent,
349
- ASN1_PCTX *ctx) {
350
- return do_EC_KEY_print(bp, pkey->pkey.ec, indent, 1);
351
- }
352
-
353
-
354
- static int eckey_priv_print(BIO *bp, const EVP_PKEY *pkey, int indent,
355
- ASN1_PCTX *ctx) {
356
- return do_EC_KEY_print(bp, pkey->pkey.ec, indent, 2);
357
- }
358
-
359
230
  static int eckey_opaque(const EVP_PKEY *pkey) {
360
231
  return EC_KEY_is_opaque(pkey->pkey.ec);
361
232
  }
362
233
 
363
- static int old_ec_priv_decode(EVP_PKEY *pkey, const uint8_t **pder,
364
- int derlen) {
365
- EC_KEY *ec;
366
- if (!(ec = d2i_ECPrivateKey(NULL, pder, derlen))) {
367
- OPENSSL_PUT_ERROR(EVP, EVP_R_DECODE_ERROR);
368
- return 0;
369
- }
370
- EVP_PKEY_assign_EC_KEY(pkey, ec);
371
- return 1;
372
- }
373
-
374
234
  const EVP_PKEY_ASN1_METHOD ec_asn1_meth = {
375
235
  EVP_PKEY_EC,
376
- 0,
377
- "EC",
236
+ /* 1.2.840.10045.2.1 */
237
+ {0x2a, 0x86, 0x48, 0xce, 0x3d, 0x02, 0x01}, 7,
378
238
 
379
239
  eckey_pub_decode,
380
240
  eckey_pub_encode,
381
241
  eckey_pub_cmp,
382
- eckey_pub_print,
383
242
 
384
243
  eckey_priv_decode,
385
244
  eckey_priv_encode,
386
- eckey_priv_print,
387
245
 
388
246
  eckey_opaque,
389
247
  0 /* pkey_supports_digest */,
@@ -394,12 +252,6 @@ const EVP_PKEY_ASN1_METHOD ec_asn1_meth = {
394
252
  ec_missing_parameters,
395
253
  ec_copy_parameters,
396
254
  ec_cmp_parameters,
397
- eckey_param_print,
398
- 0,
399
255
 
400
256
  int_ec_free,
401
- old_ec_priv_decode,
402
-
403
- NULL /* digest_verify_init_from_algorithm */,
404
- NULL /* digest_sign_algorithm */,
405
257
  };