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
@@ -0,0 +1,47 @@
1
+ /* Copyright (c) 2016, Google Inc.
2
+ *
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ #include <openssl/rand.h>
16
+
17
+ #if defined(BORINGSSL_UNSAFE_FUZZER_MODE)
18
+
19
+ #include <string.h>
20
+
21
+ #include <openssl/chacha.h>
22
+
23
+ #include "internal.h"
24
+
25
+
26
+ /* g_num_calls is the number of calls to |CRYPTO_sysrand| that have occured.
27
+ *
28
+ * TODO(davidben): This is intentionally not thread-safe. If the fuzzer mode is
29
+ * ever used in a multi-threaded program, replace this with a thread-local. (A
30
+ * mutex would not be deterministic.) */
31
+ static uint64_t g_num_calls = 0;
32
+
33
+ void RAND_reset_for_fuzzing(void) { g_num_calls = 0; }
34
+
35
+ void CRYPTO_sysrand(uint8_t *out, size_t requested) {
36
+ static const uint8_t kZeroKey[32];
37
+
38
+ uint8_t nonce[12];
39
+ memset(nonce, 0, sizeof(nonce));
40
+ memcpy(nonce, &g_num_calls, sizeof(g_num_calls));
41
+
42
+ memset(out, 0, requested);
43
+ CRYPTO_chacha_20(out, out, requested, kZeroKey, nonce, 0);
44
+ g_num_calls++;
45
+ }
46
+
47
+ #endif /* BORINGSSL_UNSAFE_FUZZER_MODE */
@@ -72,7 +72,8 @@ static void rand_thread_state_free(void *state) {
72
72
  OPENSSL_free(state);
73
73
  }
74
74
 
75
- #if defined(OPENSSL_X86_64) && !defined(OPENSSL_NO_ASM)
75
+ #if defined(OPENSSL_X86_64) && !defined(OPENSSL_NO_ASM) && \
76
+ !defined(BORINGSSL_UNSAFE_FUZZER_MODE)
76
77
 
77
78
  /* These functions are defined in asm/rdrand-x86_64.pl */
78
79
  extern int CRYPTO_rdrand(uint8_t out[8]);
@@ -239,3 +240,5 @@ RAND_METHOD *RAND_SSLeay(void) {
239
240
  }
240
241
 
241
242
  void RAND_set_rand_method(const RAND_METHOD *method) {}
243
+
244
+ void RAND_cleanup(void) {}
@@ -14,7 +14,7 @@
14
14
 
15
15
  #include <openssl/rand.h>
16
16
 
17
- #if !defined(OPENSSL_WINDOWS)
17
+ #if !defined(OPENSSL_WINDOWS) && !defined(BORINGSSL_UNSAFE_FUZZER_MODE)
18
18
 
19
19
  #include <assert.h>
20
20
  #include <errno.h>
@@ -69,7 +69,7 @@ static void init_once(void) {
69
69
  CRYPTO_STATIC_MUTEX_lock_read(&requested_lock);
70
70
  urandom_buffering = urandom_buffering_requested;
71
71
  int fd = urandom_fd_requested;
72
- CRYPTO_STATIC_MUTEX_unlock(&requested_lock);
72
+ CRYPTO_STATIC_MUTEX_unlock_read(&requested_lock);
73
73
 
74
74
  if (fd == -2) {
75
75
  do {
@@ -96,8 +96,6 @@ static void init_once(void) {
96
96
  urandom_fd = fd;
97
97
  }
98
98
 
99
- void RAND_cleanup(void) {}
100
-
101
99
  void RAND_set_urandom_fd(int fd) {
102
100
  fd = dup(fd);
103
101
  if (fd < 0) {
@@ -106,7 +104,7 @@ void RAND_set_urandom_fd(int fd) {
106
104
 
107
105
  CRYPTO_STATIC_MUTEX_lock_write(&requested_lock);
108
106
  urandom_fd_requested = fd;
109
- CRYPTO_STATIC_MUTEX_unlock(&requested_lock);
107
+ CRYPTO_STATIC_MUTEX_unlock_write(&requested_lock);
110
108
 
111
109
  CRYPTO_once(&once, init_once);
112
110
  if (urandom_fd != fd) {
@@ -127,7 +125,7 @@ void RAND_enable_fork_unsafe_buffering(int fd) {
127
125
  CRYPTO_STATIC_MUTEX_lock_write(&requested_lock);
128
126
  urandom_buffering_requested = 1;
129
127
  urandom_fd_requested = fd;
130
- CRYPTO_STATIC_MUTEX_unlock(&requested_lock);
128
+ CRYPTO_STATIC_MUTEX_unlock_write(&requested_lock);
131
129
 
132
130
  CRYPTO_once(&once, init_once);
133
131
  if (urandom_buffering != 1 || (fd >= 0 && urandom_fd != fd)) {
@@ -220,4 +218,4 @@ void CRYPTO_sysrand(uint8_t *out, size_t requested) {
220
218
  }
221
219
  }
222
220
 
223
- #endif /* !OPENSSL_WINDOWS */
221
+ #endif /* !OPENSSL_WINDOWS && !BORINGSSL_UNSAFE_FUZZER_MODE */
@@ -14,12 +14,12 @@
14
14
 
15
15
  #include <openssl/rand.h>
16
16
 
17
- #if defined(OPENSSL_WINDOWS)
17
+ #if defined(OPENSSL_WINDOWS) && !defined(BORINGSSL_UNSAFE_FUZZER_MODE)
18
18
 
19
19
  #include <limits.h>
20
20
  #include <stdlib.h>
21
21
 
22
- #pragma warning(push, 3)
22
+ OPENSSL_MSVC_PRAGMA(warning(push, 3))
23
23
 
24
24
  #include <windows.h>
25
25
 
@@ -30,19 +30,16 @@
30
30
  #include <ntsecapi.h>
31
31
  #undef SystemFunction036
32
32
 
33
- #pragma warning(pop)
33
+ OPENSSL_MSVC_PRAGMA(warning(pop))
34
34
 
35
35
  #include "internal.h"
36
36
 
37
37
 
38
- void RAND_cleanup(void) {
39
- }
40
-
41
38
  void CRYPTO_sysrand(uint8_t *out, size_t requested) {
42
39
  while (requested > 0) {
43
40
  ULONG output_bytes_this_pass = ULONG_MAX;
44
41
  if (requested < output_bytes_this_pass) {
45
- output_bytes_this_pass = requested;
42
+ output_bytes_this_pass = (ULONG)requested;
46
43
  }
47
44
  if (RtlGenRandom(out, output_bytes_this_pass) == FALSE) {
48
45
  abort();
@@ -53,4 +50,4 @@ void CRYPTO_sysrand(uint8_t *out, size_t requested) {
53
50
  return;
54
51
  }
55
52
 
56
- #endif /* OPENSSL_WINDOWS */
53
+ #endif /* OPENSSL_WINDOWS && !BORINGSSL_UNSAFE_FUZZER_MODE */
@@ -56,228 +56,43 @@
56
56
 
57
57
  #include <openssl/rc4.h>
58
58
 
59
- #if defined(OPENSSL_NO_ASM) || \
60
- (!defined(OPENSSL_X86_64) && !defined(OPENSSL_X86))
61
-
62
- #if defined(OPENSSL_64_BIT)
63
- #define RC4_CHUNK uint64_t
64
- #elif defined(OPENSSL_32_BIT)
65
- #define RC4_CHUNK uint32_t
66
- #else
67
- #error "Unknown word size"
68
- #endif
69
-
70
-
71
- /* RC4 as implemented from a posting from
72
- * Newsgroups: sci.crypt
73
- * From: sterndark@netcom.com (David Sterndark)
74
- * Subject: RC4 Algorithm revealed.
75
- * Message-ID: <sternCvKL4B.Hyy@netcom.com>
76
- * Date: Wed, 14 Sep 1994 06:35:31 GMT */
77
59
 
78
60
  void RC4(RC4_KEY *key, size_t len, const uint8_t *in, uint8_t *out) {
79
- uint32_t *d;
80
- uint32_t x, y, tx, ty;
81
- size_t i;
82
-
83
- x = key->x;
84
- y = key->y;
85
- d = key->data;
86
-
87
- #define RC4_STEP \
88
- (x = (x + 1) & 0xff, tx = d[x], y = (tx + y) & 0xff, ty = d[y], d[y] = tx, \
89
- d[x] = ty, (RC4_CHUNK)d[(tx + ty) & 0xff])
90
-
91
- if ((((size_t)in & (sizeof(RC4_CHUNK) - 1)) |
92
- ((size_t)out & (sizeof(RC4_CHUNK) - 1))) == 0) {
93
- RC4_CHUNK ichunk, otp;
94
- const union {
95
- long one;
96
- char little;
97
- } is_endian = {1};
98
-
99
- /* I reckon we can afford to implement both endian
100
- * cases and to decide which way to take at run-time
101
- * because the machine code appears to be very compact
102
- * and redundant 1-2KB is perfectly tolerable (i.e.
103
- * in case the compiler fails to eliminate it:-). By
104
- * suggestion from Terrel Larson <terr@terralogic.net>
105
- * who also stands for the is_endian union:-)
106
- *
107
- * Special notes.
108
- *
109
- * - is_endian is declared automatic as doing otherwise
110
- * (declaring static) prevents gcc from eliminating
111
- * the redundant code;
112
- * - compilers (those I've tried) don't seem to have
113
- * problems eliminating either the operators guarded
114
- * by "if (sizeof(RC4_CHUNK)==8)" or the condition
115
- * expressions themselves so I've got 'em to replace
116
- * corresponding #ifdefs from the previous version;
117
- * - I chose to let the redundant switch cases when
118
- * sizeof(RC4_CHUNK)!=8 be (were also #ifdefed
119
- * before);
120
- * - in case you wonder "&(sizeof(RC4_CHUNK)*8-1)" in
121
- * [LB]ESHFT guards against "shift is out of range"
122
- * warnings when sizeof(RC4_CHUNK)!=8
123
- *
124
- * <appro@fy.chalmers.se> */
125
- if (!is_endian.little) { /* BIG-ENDIAN CASE */
126
- #define BESHFT(c) \
127
- (((sizeof(RC4_CHUNK) - (c) - 1) * 8) & (sizeof(RC4_CHUNK) * 8 - 1))
128
- for (; len & (0 - sizeof(RC4_CHUNK)); len -= sizeof(RC4_CHUNK)) {
129
- ichunk = *(RC4_CHUNK *)in;
130
- otp = RC4_STEP << BESHFT(0);
131
- otp |= RC4_STEP << BESHFT(1);
132
- otp |= RC4_STEP << BESHFT(2);
133
- otp |= RC4_STEP << BESHFT(3);
134
- #if defined(OPENSSL_64_BIT)
135
- otp |= RC4_STEP << BESHFT(4);
136
- otp |= RC4_STEP << BESHFT(5);
137
- otp |= RC4_STEP << BESHFT(6);
138
- otp |= RC4_STEP << BESHFT(7);
139
- #endif
140
- *(RC4_CHUNK *)out = otp ^ ichunk;
141
- in += sizeof(RC4_CHUNK);
142
- out += sizeof(RC4_CHUNK);
143
- }
144
- } else { /* LITTLE-ENDIAN CASE */
145
- #define LESHFT(c) (((c) * 8) & (sizeof(RC4_CHUNK) * 8 - 1))
146
- for (; len & (0 - sizeof(RC4_CHUNK)); len -= sizeof(RC4_CHUNK)) {
147
- ichunk = *(RC4_CHUNK *)in;
148
- otp = RC4_STEP;
149
- otp |= RC4_STEP << 8;
150
- otp |= RC4_STEP << 16;
151
- otp |= RC4_STEP << 24;
152
- #if defined(OPENSSL_64_BIT)
153
- otp |= RC4_STEP << LESHFT(4);
154
- otp |= RC4_STEP << LESHFT(5);
155
- otp |= RC4_STEP << LESHFT(6);
156
- otp |= RC4_STEP << LESHFT(7);
157
- #endif
158
- *(RC4_CHUNK *)out = otp ^ ichunk;
159
- in += sizeof(RC4_CHUNK);
160
- out += sizeof(RC4_CHUNK);
161
- }
162
- }
61
+ uint32_t x = key->x;
62
+ uint32_t y = key->y;
63
+ uint32_t *d = key->data;
64
+
65
+ for (size_t i = 0; i < len; i++) {
66
+ x = (x + 1) & 0xff;
67
+ uint32_t tx = d[x];
68
+ y = (tx + y) & 0xff;
69
+ uint32_t ty = d[y];
70
+ d[x] = ty;
71
+ d[y] = tx;
72
+ out[i] = d[(tx + ty) & 0xff] ^ in[i];
163
73
  }
164
- #define LOOP(in, out) \
165
- x = ((x + 1) & 0xff); \
166
- tx = d[x]; \
167
- y = (tx + y) & 0xff; \
168
- d[x] = ty = d[y]; \
169
- d[y] = tx; \
170
- (out) = d[(tx + ty) & 0xff] ^ (in);
171
-
172
- #ifndef RC4_INDEX
173
- #define RC4_LOOP(a, b, i) LOOP(*((a)++), *((b)++))
174
- #else
175
- #define RC4_LOOP(a, b, i) LOOP(a[i], b[i])
176
- #endif
177
74
 
178
- i = len >> 3;
179
- if (i) {
180
- for (;;) {
181
- RC4_LOOP(in, out, 0);
182
- RC4_LOOP(in, out, 1);
183
- RC4_LOOP(in, out, 2);
184
- RC4_LOOP(in, out, 3);
185
- RC4_LOOP(in, out, 4);
186
- RC4_LOOP(in, out, 5);
187
- RC4_LOOP(in, out, 6);
188
- RC4_LOOP(in, out, 7);
189
- #ifdef RC4_INDEX
190
- in += 8;
191
- out += 8;
192
- #endif
193
- if (--i == 0) {
194
- break;
195
- }
196
- }
197
- }
198
- i = len & 0x07;
199
- if (i) {
200
- for (;;) {
201
- RC4_LOOP(in, out, 0);
202
- if (--i == 0) {
203
- break;
204
- }
205
- RC4_LOOP(in, out, 1);
206
- if (--i == 0) {
207
- break;
208
- }
209
- RC4_LOOP(in, out, 2);
210
- if (--i == 0) {
211
- break;
212
- }
213
- RC4_LOOP(in, out, 3);
214
- if (--i == 0) {
215
- break;
216
- }
217
- RC4_LOOP(in, out, 4);
218
- if (--i == 0) {
219
- break;
220
- }
221
- RC4_LOOP(in, out, 5);
222
- if (--i == 0) {
223
- break;
224
- }
225
- RC4_LOOP(in, out, 6);
226
- if (--i == 0) {
227
- break;
228
- }
229
- }
230
- }
231
75
  key->x = x;
232
76
  key->y = y;
233
77
  }
234
78
 
235
79
  void RC4_set_key(RC4_KEY *rc4key, unsigned len, const uint8_t *key) {
236
- uint32_t tmp;
237
- unsigned i, id1, id2;
238
- uint32_t *d;
239
-
240
- d = &rc4key->data[0];
80
+ uint32_t *d = &rc4key->data[0];
241
81
  rc4key->x = 0;
242
82
  rc4key->y = 0;
243
- id1 = id2 = 0;
244
83
 
245
- #define SK_LOOP(d, n) \
246
- { \
247
- tmp = d[(n)]; \
248
- id2 = (key[id1] + tmp + id2) & 0xff; \
249
- if (++id1 == len) \
250
- id1 = 0; \
251
- d[(n)] = d[id2]; \
252
- d[id2] = tmp; \
253
- }
254
-
255
- for (i = 0; i < 256; i++) {
84
+ for (unsigned i = 0; i < 256; i++) {
256
85
  d[i] = i;
257
86
  }
258
- for (i = 0; i < 256; i += 4) {
259
- SK_LOOP(d, i + 0);
260
- SK_LOOP(d, i + 1);
261
- SK_LOOP(d, i + 2);
262
- SK_LOOP(d, i + 3);
263
- }
264
- }
265
87
 
266
- #else
267
-
268
- /* In this case several functions are provided by asm code. However, one cannot
269
- * control asm symbol visibility with command line flags and such so they are
270
- * always hidden and wrapped by these C functions, which can be so
271
- * controlled. */
272
-
273
- void asm_RC4(RC4_KEY *key, size_t len, const uint8_t *in, uint8_t *out);
274
- void RC4(RC4_KEY *key, size_t len, const uint8_t *in, uint8_t *out) {
275
- asm_RC4(key, len, in, out);
276
- }
277
-
278
- void asm_RC4_set_key(RC4_KEY *rc4key, unsigned len, const uint8_t *key);
279
- void RC4_set_key(RC4_KEY *rc4key, unsigned len, const uint8_t *key) {
280
- asm_RC4_set_key(rc4key, len, key);
88
+ unsigned id1 = 0, id2 = 0;
89
+ for (unsigned i = 0; i < 256; i++) {
90
+ uint32_t tmp = d[i];
91
+ id2 = (key[id1] + tmp + id2) & 0xff;
92
+ if (++id1 == len) {
93
+ id1 = 0;
94
+ }
95
+ d[i] = d[id2];
96
+ d[id2] = tmp;
97
+ }
281
98
  }
282
-
283
- #endif /* OPENSSL_NO_ASM || (!OPENSSL_X86_64 && !OPENSSL_X86) */
@@ -31,7 +31,7 @@ void CRYPTO_refcount_inc(CRYPTO_refcount_t *count) {
31
31
  if (*count < CRYPTO_REFCOUNT_MAX) {
32
32
  (*count)++;
33
33
  }
34
- CRYPTO_STATIC_MUTEX_unlock(&g_refcount_lock);
34
+ CRYPTO_STATIC_MUTEX_unlock_write(&g_refcount_lock);
35
35
  }
36
36
 
37
37
  int CRYPTO_refcount_dec_and_test_zero(CRYPTO_refcount_t *count) {
@@ -45,7 +45,7 @@ int CRYPTO_refcount_dec_and_test_zero(CRYPTO_refcount_t *count) {
45
45
  (*count)--;
46
46
  }
47
47
  ret = (*count == 0);
48
- CRYPTO_STATIC_MUTEX_unlock(&g_refcount_lock);
48
+ CRYPTO_STATIC_MUTEX_unlock_write(&g_refcount_lock);
49
49
 
50
50
  return ret;
51
51
  }
@@ -120,53 +120,35 @@
120
120
  #define BN_BLINDING_COUNTER 32
121
121
 
122
122
  struct bn_blinding_st {
123
- BIGNUM *A;
124
- BIGNUM *Ai;
125
- BIGNUM *e;
126
- BIGNUM *mod;
127
- int counter;
128
- /* mont is the Montgomery context used for this |BN_BLINDING|. It is not
129
- * owned and must outlive this structure. */
130
- const BN_MONT_CTX *mont;
131
- int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
132
- const BIGNUM *m, BN_CTX *ctx, const BN_MONT_CTX *mont);
123
+ BIGNUM *A; /* The base blinding factor, Montgomery-encoded. */
124
+ BIGNUM *Ai; /* The inverse of the blinding factor, Montgomery-encoded. */
125
+ unsigned counter;
133
126
  };
134
127
 
135
- BN_BLINDING *BN_BLINDING_new(const BIGNUM *A, const BIGNUM *Ai, BIGNUM *mod) {
136
- BN_BLINDING *ret = NULL;
128
+ static int bn_blinding_create_param(BN_BLINDING *b, const BIGNUM *e,
129
+ const BN_MONT_CTX *mont, BN_CTX *ctx);
137
130
 
138
- ret = (BN_BLINDING*) OPENSSL_malloc(sizeof(BN_BLINDING));
131
+ BN_BLINDING *BN_BLINDING_new(void) {
132
+ BN_BLINDING *ret = OPENSSL_malloc(sizeof(BN_BLINDING));
139
133
  if (ret == NULL) {
140
134
  OPENSSL_PUT_ERROR(RSA, ERR_R_MALLOC_FAILURE);
141
135
  return NULL;
142
136
  }
143
137
  memset(ret, 0, sizeof(BN_BLINDING));
144
- if (A != NULL) {
145
- ret->A = BN_dup(A);
146
- if (ret->A == NULL) {
147
- goto err;
148
- }
149
- }
150
- if (Ai != NULL) {
151
- ret->Ai = BN_dup(Ai);
152
- if (ret->Ai == NULL) {
153
- goto err;
154
- }
155
- }
156
138
 
157
- /* save a copy of mod in the BN_BLINDING structure */
158
- ret->mod = BN_dup(mod);
159
- if (ret->mod == NULL) {
139
+ ret->A = BN_new();
140
+ if (ret->A == NULL) {
160
141
  goto err;
161
142
  }
162
- if (BN_get_flags(mod, BN_FLG_CONSTTIME) != 0) {
163
- BN_set_flags(ret->mod, BN_FLG_CONSTTIME);
143
+
144
+ ret->Ai = BN_new();
145
+ if (ret->Ai == NULL) {
146
+ goto err;
164
147
  }
165
148
 
166
- /* Set the counter to the special value -1
167
- * to indicate that this is never-used fresh blinding
168
- * that does not need updating before first use. */
169
- ret->counter = -1;
149
+ /* The blinding values need to be created before this blinding can be used. */
150
+ ret->counter = BN_BLINDING_COUNTER - 1;
151
+
170
152
  return ret;
171
153
 
172
154
  err:
@@ -181,242 +163,102 @@ void BN_BLINDING_free(BN_BLINDING *r) {
181
163
 
182
164
  BN_free(r->A);
183
165
  BN_free(r->Ai);
184
- BN_free(r->e);
185
- BN_free(r->mod);
186
166
  OPENSSL_free(r);
187
167
  }
188
168
 
189
- int BN_BLINDING_update(BN_BLINDING *b, BN_CTX *ctx) {
190
- int ret = 0;
191
-
192
- if (b->A == NULL || b->Ai == NULL) {
193
- OPENSSL_PUT_ERROR(RSA, RSA_R_BN_NOT_INITIALIZED);
194
- goto err;
195
- }
196
-
197
- if (b->counter == -1) {
198
- b->counter = 0;
199
- }
200
-
201
- if (++b->counter == BN_BLINDING_COUNTER && b->e != NULL) {
169
+ static int bn_blinding_update(BN_BLINDING *b, const BIGNUM *e,
170
+ const BN_MONT_CTX *mont, BN_CTX *ctx) {
171
+ if (++b->counter == BN_BLINDING_COUNTER) {
202
172
  /* re-create blinding parameters */
203
- if (!BN_BLINDING_create_param(b, NULL, NULL, ctx, NULL, NULL)) {
173
+ if (!bn_blinding_create_param(b, e, mont, ctx)) {
204
174
  goto err;
205
175
  }
176
+ b->counter = 0;
206
177
  } else {
207
- if (!BN_mod_mul(b->A, b->A, b->A, b->mod, ctx)) {
208
- goto err;
209
- }
210
- if (!BN_mod_mul(b->Ai, b->Ai, b->Ai, b->mod, ctx)) {
178
+ if (!BN_mod_mul_montgomery(b->A, b->A, b->A, mont, ctx) ||
179
+ !BN_mod_mul_montgomery(b->Ai, b->Ai, b->Ai, mont, ctx)) {
211
180
  goto err;
212
181
  }
213
182
  }
214
183
 
215
- ret = 1;
184
+ return 1;
216
185
 
217
186
  err:
218
- if (b->counter == BN_BLINDING_COUNTER) {
219
- b->counter = 0;
220
- }
221
- return ret;
222
- }
187
+ /* |A| and |Ai| may be in an inconsistent state so they both need to be
188
+ * replaced the next time this blinding is used. Note that this is only
189
+ * sufficient because support for |BN_BLINDING_NO_UPDATE| and
190
+ * |BN_BLINDING_NO_RECREATE| was previously dropped. */
191
+ b->counter = BN_BLINDING_COUNTER - 1;
223
192
 
224
- int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, BN_CTX *ctx) {
225
- int ret = 1;
226
-
227
- if (b->A == NULL || b->Ai == NULL) {
228
- OPENSSL_PUT_ERROR(RSA, RSA_R_BN_NOT_INITIALIZED);
229
- return 0;
230
- }
193
+ return 0;
194
+ }
231
195
 
232
- if (b->counter == -1) {
233
- /* Fresh blinding, doesn't need updating. */
234
- b->counter = 0;
235
- } else if (!BN_BLINDING_update(b, ctx)) {
196
+ int BN_BLINDING_convert(BIGNUM *n, BN_BLINDING *b, const BIGNUM *e,
197
+ const BN_MONT_CTX *mont, BN_CTX *ctx) {
198
+ /* |n| is not Montgomery-encoded and |b->A| is. |BN_mod_mul_montgomery|
199
+ * cancels one Montgomery factor, so the resulting value of |n| is unencoded.
200
+ */
201
+ if (!bn_blinding_update(b, e, mont, ctx) ||
202
+ !BN_mod_mul_montgomery(n, n, b->A, mont, ctx)) {
236
203
  return 0;
237
204
  }
238
205
 
239
- if (!BN_mod_mul(n, n, b->A, b->mod, ctx)) {
240
- ret = 0;
241
- }
242
-
243
- return ret;
206
+ return 1;
244
207
  }
245
208
 
246
- int BN_BLINDING_invert(BIGNUM *n, const BN_BLINDING *b, BN_CTX *ctx) {
247
- if (b->Ai == NULL) {
248
- OPENSSL_PUT_ERROR(RSA, RSA_R_BN_NOT_INITIALIZED);
249
- return 0;
250
- }
251
- return BN_mod_mul(n, n, b->Ai, b->mod, ctx);
209
+ int BN_BLINDING_invert(BIGNUM *n, const BN_BLINDING *b, BN_MONT_CTX *mont,
210
+ BN_CTX *ctx) {
211
+ /* |n| is not Montgomery-encoded and |b->A| is. |BN_mod_mul_montgomery|
212
+ * cancels one Montgomery factor, so the resulting value of |n| is unencoded.
213
+ */
214
+ return BN_mod_mul_montgomery(n, n, b->Ai, mont, ctx);
252
215
  }
253
216
 
254
- BN_BLINDING *BN_BLINDING_create_param(
255
- BN_BLINDING *b, const BIGNUM *e, BIGNUM *m, BN_CTX *ctx,
256
- int (*bn_mod_exp)(BIGNUM *r, const BIGNUM *a, const BIGNUM *p,
257
- const BIGNUM *m, BN_CTX *ctx, const BN_MONT_CTX *mont),
258
- const BN_MONT_CTX *mont) {
217
+ static int bn_blinding_create_param(BN_BLINDING *b, const BIGNUM *e,
218
+ const BN_MONT_CTX *mont, BN_CTX *ctx) {
259
219
  int retry_counter = 32;
260
- BN_BLINDING *ret = NULL;
261
-
262
- if (b == NULL) {
263
- ret = BN_BLINDING_new(NULL, NULL, m);
264
- } else {
265
- ret = b;
266
- }
267
-
268
- if (ret == NULL) {
269
- goto err;
270
- }
271
-
272
- if (ret->A == NULL && (ret->A = BN_new()) == NULL) {
273
- goto err;
274
- }
275
- if (ret->Ai == NULL && (ret->Ai = BN_new()) == NULL) {
276
- goto err;
277
- }
278
-
279
- if (e != NULL) {
280
- BN_free(ret->e);
281
- ret->e = BN_dup(e);
282
- }
283
- if (ret->e == NULL) {
284
- goto err;
285
- }
286
-
287
- if (bn_mod_exp != NULL) {
288
- ret->bn_mod_exp = bn_mod_exp;
289
- }
290
- if (mont != NULL) {
291
- ret->mont = mont;
292
- }
293
220
 
294
221
  do {
295
- if (!BN_rand_range(ret->A, ret->mod)) {
296
- goto err;
222
+ if (!BN_rand_range_ex(b->A, 1, &mont->N)) {
223
+ OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
224
+ return 0;
297
225
  }
298
226
 
299
- int no_inverse;
300
- if (BN_mod_inverse_ex(ret->Ai, &no_inverse, ret->A, ret->mod, ctx) == NULL) {
301
- /* this should almost never happen for good RSA keys */
302
- if (no_inverse) {
303
- if (retry_counter-- == 0) {
304
- OPENSSL_PUT_ERROR(RSA, RSA_R_TOO_MANY_ITERATIONS);
305
- goto err;
306
- }
307
- ERR_clear_error();
308
- } else {
309
- goto err;
310
- }
311
- } else {
312
- break;
227
+ /* |BN_from_montgomery| + |BN_mod_inverse_blinded| is equivalent to, but
228
+ * more efficient than, |BN_mod_inverse_blinded| + |BN_to_montgomery|. */
229
+ if (!BN_from_montgomery(b->Ai, b->A, mont, ctx)) {
230
+ OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
231
+ return 0;
313
232
  }
314
- } while (1);
315
233
 
316
- if (ret->bn_mod_exp != NULL && ret->mont != NULL) {
317
- if (!ret->bn_mod_exp(ret->A, ret->A, ret->e, ret->mod, ctx, ret->mont)) {
318
- goto err;
319
- }
320
- } else {
321
- if (!BN_mod_exp(ret->A, ret->A, ret->e, ret->mod, ctx)) {
322
- goto err;
234
+ int no_inverse;
235
+ if (BN_mod_inverse_blinded(b->Ai, &no_inverse, b->Ai, mont, ctx)) {
236
+ break;
323
237
  }
324
- }
325
-
326
- return ret;
327
-
328
- err:
329
- if (b == NULL) {
330
- BN_BLINDING_free(ret);
331
- ret = NULL;
332
- }
333
-
334
- return ret;
335
- }
336
-
337
- static BIGNUM *rsa_get_public_exp(const BIGNUM *d, const BIGNUM *p,
338
- const BIGNUM *q, BN_CTX *ctx) {
339
- BIGNUM *ret = NULL, *r0, *r1, *r2;
340
-
341
- if (d == NULL || p == NULL || q == NULL) {
342
- return NULL;
343
- }
344
-
345
- BN_CTX_start(ctx);
346
- r0 = BN_CTX_get(ctx);
347
- r1 = BN_CTX_get(ctx);
348
- r2 = BN_CTX_get(ctx);
349
- if (r2 == NULL) {
350
- goto err;
351
- }
352
-
353
- if (!BN_sub(r1, p, BN_value_one())) {
354
- goto err;
355
- }
356
- if (!BN_sub(r2, q, BN_value_one())) {
357
- goto err;
358
- }
359
- if (!BN_mul(r0, r1, r2, ctx)) {
360
- goto err;
361
- }
362
-
363
- ret = BN_mod_inverse(NULL, d, r0, ctx);
364
-
365
- err:
366
- BN_CTX_end(ctx);
367
- return ret;
368
- }
369
-
370
- BN_BLINDING *rsa_setup_blinding(RSA *rsa, BN_CTX *in_ctx) {
371
- BIGNUM local_n;
372
- BIGNUM *e, *n;
373
- BN_CTX *ctx;
374
- BN_BLINDING *ret = NULL;
375
- BN_MONT_CTX *mont_ctx = NULL;
376
238
 
377
- if (in_ctx == NULL) {
378
- ctx = BN_CTX_new();
379
- if (ctx == NULL) {
239
+ if (!no_inverse) {
240
+ OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
380
241
  return 0;
381
242
  }
382
- } else {
383
- ctx = in_ctx;
384
- }
385
-
386
- if (rsa->e == NULL) {
387
- e = rsa_get_public_exp(rsa->d, rsa->p, rsa->q, ctx);
388
- if (e == NULL) {
389
- OPENSSL_PUT_ERROR(RSA, RSA_R_NO_PUBLIC_EXPONENT);
390
- goto err;
391
- }
392
- } else {
393
- e = rsa->e;
394
- }
395
243
 
396
- n = &local_n;
397
- BN_with_flags(n, rsa->n, BN_FLG_CONSTTIME);
398
-
399
- if (rsa->flags & RSA_FLAG_CACHE_PUBLIC) {
400
- mont_ctx = BN_MONT_CTX_set_locked(&rsa->mont_n, &rsa->lock, rsa->n, ctx);
401
- if (mont_ctx == NULL) {
402
- goto err;
244
+ /* For reasonably-sized RSA keys, it should almost never be the case that a
245
+ * random value doesn't have an inverse. */
246
+ if (retry_counter-- == 0) {
247
+ OPENSSL_PUT_ERROR(RSA, RSA_R_TOO_MANY_ITERATIONS);
248
+ return 0;
403
249
  }
404
- }
250
+ ERR_clear_error();
251
+ } while (1);
405
252
 
406
- ret = BN_BLINDING_create_param(NULL, e, n, ctx, rsa->meth->bn_mod_exp,
407
- mont_ctx);
408
- if (ret == NULL) {
409
- OPENSSL_PUT_ERROR(RSA, ERR_R_BN_LIB);
410
- goto err;
253
+ if (!BN_mod_exp_mont(b->A, b->A, e, &mont->N, ctx, mont)) {
254
+ OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
255
+ return 0;
411
256
  }
412
257
 
413
- err:
414
- if (in_ctx == NULL) {
415
- BN_CTX_free(ctx);
416
- }
417
- if (rsa->e == NULL) {
418
- BN_free(e);
258
+ if (!BN_to_montgomery(b->A, b->A, mont, ctx)) {
259
+ OPENSSL_PUT_ERROR(RSA, ERR_R_INTERNAL_ERROR);
260
+ return 0;
419
261
  }
420
262
 
421
- return ret;
263
+ return 1;
422
264
  }