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
@@ -209,6 +209,7 @@ static void BN_RECP_CTX_init(BN_RECP_CTX *recp) {
209
209
  BN_init(&recp->N);
210
210
  BN_init(&recp->Nr);
211
211
  recp->num_bits = 0;
212
+ recp->shift = 0;
212
213
  recp->flags = 0;
213
214
  }
214
215
 
@@ -575,41 +576,7 @@ err:
575
576
 
576
577
  int BN_mod_exp(BIGNUM *r, const BIGNUM *a, const BIGNUM *p, const BIGNUM *m,
577
578
  BN_CTX *ctx) {
578
- /* For even modulus m = 2^k*m_odd, it might make sense to compute
579
- * a^p mod m_odd and a^p mod 2^k separately (with Montgomery
580
- * exponentiation for the odd part), using appropriate exponent
581
- * reductions, and combine the results using the CRT.
582
- *
583
- * For now, we use Montgomery only if the modulus is odd; otherwise,
584
- * exponentiation using the reciprocal-based quick remaindering
585
- * algorithm is used.
586
- *
587
- * (Timing obtained with expspeed.c [computations a^p mod m
588
- * where a, p, m are of the same length: 256, 512, 1024, 2048,
589
- * 4096, 8192 bits], compared to the running time of the
590
- * standard algorithm:
591
- *
592
- * BN_mod_exp_mont 33 .. 40 % [AMD K6-2, Linux, debug configuration]
593
- * 55 .. 77 % [UltraSparc processor, but
594
- * debug-solaris-sparcv8-gcc conf.]
595
- *
596
- * BN_mod_exp_recp 50 .. 70 % [AMD K6-2, Linux, debug configuration]
597
- * 62 .. 118 % [UltraSparc, debug-solaris-sparcv8-gcc]
598
- *
599
- * On the Sparc, BN_mod_exp_recp was faster than BN_mod_exp_mont
600
- * at 2048 and more bits, but at 512 and 1024 bits, it was
601
- * slower even than the standard algorithm!
602
- *
603
- * "Real" timings [linux-elf, solaris-sparcv9-gcc configurations]
604
- * should be obtained when the new Montgomery reduction code
605
- * has been integrated into OpenSSL.) */
606
-
607
579
  if (BN_is_odd(m)) {
608
- if (a->top == 1 && !a->neg && BN_get_flags(p, BN_FLG_CONSTTIME) == 0) {
609
- BN_ULONG A = a->d[0];
610
- return BN_mod_exp_mont_word(r, A, p, m, ctx, NULL);
611
- }
612
-
613
580
  return BN_mod_exp_mont(r, a, p, m, ctx, NULL);
614
581
  }
615
582
 
@@ -787,29 +754,65 @@ err:
787
754
  * pattern as far as cache lines are concerned. The following functions are
788
755
  * used to transfer a BIGNUM from/to that table. */
789
756
  static int copy_to_prebuf(const BIGNUM *b, int top, unsigned char *buf, int idx,
790
- int width) {
791
- size_t i, j;
757
+ int window) {
758
+ int i, j;
759
+ const int width = 1 << window;
760
+ BN_ULONG *table = (BN_ULONG *) buf;
792
761
 
793
762
  if (top > b->top) {
794
763
  top = b->top; /* this works because 'buf' is explicitly zeroed */
795
764
  }
796
- for (i = 0, j = idx; i < top * sizeof b->d[0]; i++, j += width) {
797
- buf[j] = ((unsigned char *)b->d)[i];
765
+
766
+ for (i = 0, j = idx; i < top; i++, j += width) {
767
+ table[j] = b->d[i];
798
768
  }
799
769
 
800
770
  return 1;
801
771
  }
802
772
 
803
773
  static int copy_from_prebuf(BIGNUM *b, int top, unsigned char *buf, int idx,
804
- int width) {
805
- size_t i, j;
774
+ int window) {
775
+ int i, j;
776
+ const int width = 1 << window;
777
+ volatile BN_ULONG *table = (volatile BN_ULONG *)buf;
806
778
 
807
779
  if (bn_wexpand(b, top) == NULL) {
808
780
  return 0;
809
781
  }
810
782
 
811
- for (i = 0, j = idx; i < top * sizeof b->d[0]; i++, j += width) {
812
- ((unsigned char *)b->d)[i] = buf[j];
783
+ if (window <= 3) {
784
+ for (i = 0; i < top; i++, table += width) {
785
+ BN_ULONG acc = 0;
786
+
787
+ for (j = 0; j < width; j++) {
788
+ acc |= table[j] & ((BN_ULONG)0 - (constant_time_eq_int(j, idx) & 1));
789
+ }
790
+
791
+ b->d[i] = acc;
792
+ }
793
+ } else {
794
+ int xstride = 1 << (window - 2);
795
+ BN_ULONG y0, y1, y2, y3;
796
+
797
+ i = idx >> (window - 2); /* equivalent of idx / xstride */
798
+ idx &= xstride - 1; /* equivalent of idx % xstride */
799
+
800
+ y0 = (BN_ULONG)0 - (constant_time_eq_int(i, 0) & 1);
801
+ y1 = (BN_ULONG)0 - (constant_time_eq_int(i, 1) & 1);
802
+ y2 = (BN_ULONG)0 - (constant_time_eq_int(i, 2) & 1);
803
+ y3 = (BN_ULONG)0 - (constant_time_eq_int(i, 3) & 1);
804
+
805
+ for (i = 0; i < top; i++, table += width) {
806
+ BN_ULONG acc = 0;
807
+
808
+ for (j = 0; j < xstride; j++) {
809
+ acc |= ((table[j + 0 * xstride] & y0) | (table[j + 1 * xstride] & y1) |
810
+ (table[j + 2 * xstride] & y2) | (table[j + 3 * xstride] & y3)) &
811
+ ((BN_ULONG)0 - (constant_time_eq_int(j, idx) & 1));
812
+ }
813
+
814
+ b->d[i] = acc;
815
+ }
813
816
  }
814
817
 
815
818
  b->top = top;
@@ -891,8 +894,6 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
891
894
  return BN_one(rr);
892
895
  }
893
896
 
894
- BN_CTX_start(ctx);
895
-
896
897
  /* Allocate a montgomery context if it was not supplied by the caller. */
897
898
  if (mont == NULL) {
898
899
  new_mont = BN_MONT_CTX_new();
@@ -935,9 +936,8 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
935
936
  #if defined(OPENSSL_BN_ASM_MONT5)
936
937
  if (window >= 5) {
937
938
  window = 5; /* ~5% improvement for RSA2048 sign, and even for RSA4096 */
938
- if ((top & 7) == 0) {
939
- powerbufLen += 2 * top * sizeof(m->d[0]);
940
- }
939
+ /* reserve space for mont->N.d[] copy */
940
+ powerbufLen += top * sizeof(mont->N.d[0]);
941
941
  }
942
942
  #endif
943
943
 
@@ -992,7 +992,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
992
992
 
993
993
  /* prepare a^1 in Montgomery domain */
994
994
  if (a->neg || BN_ucmp(a, m) >= 0) {
995
- if (!BN_mod(&am, a, m, ctx) ||
995
+ if (!BN_nnmod(&am, a, m, ctx) ||
996
996
  !BN_to_montgomery(&am, &am, mont, ctx)) {
997
997
  goto err;
998
998
  }
@@ -1008,7 +1008,8 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
1008
1008
  /* Dedicated window==4 case improves 512-bit RSA sign by ~15%, but as
1009
1009
  * 512-bit RSA is hardly relevant, we omit it to spare size... */
1010
1010
  if (window == 5 && top > 1) {
1011
- const BN_ULONG *np = mont->N.d, *n0 = mont->n0, *np2;
1011
+ const BN_ULONG *n0 = mont->n0;
1012
+ BN_ULONG *np;
1012
1013
 
1013
1014
  /* BN_to_montgomery can contaminate words above .top
1014
1015
  * [in BN_DEBUG[_DEBUG] build]... */
@@ -1019,14 +1020,9 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
1019
1020
  tmp.d[i] = 0;
1020
1021
  }
1021
1022
 
1022
- if (top & 7) {
1023
- np2 = np;
1024
- } else {
1025
- BN_ULONG *np_double = am.d + top;
1026
- for (i = 0; i < top; i++) {
1027
- np_double[2 * i] = np[i];
1028
- }
1029
- np2 = np_double;
1023
+ /* copy mont->N.d[] to improve cache locality */
1024
+ for (np = am.d + top, i = 0; i < top; i++) {
1025
+ np[i] = mont->N.d[i];
1030
1026
  }
1031
1027
 
1032
1028
  bn_scatter5(tmp.d, top, powerbuf, 0);
@@ -1041,7 +1037,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
1041
1037
  }
1042
1038
  for (i = 3; i < 8; i += 2) {
1043
1039
  int j;
1044
- bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np2, n0, top, i - 1);
1040
+ bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np, n0, top, i - 1);
1045
1041
  bn_scatter5(tmp.d, top, powerbuf, i);
1046
1042
  for (j = 2 * i; j < 32; j *= 2) {
1047
1043
  bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
@@ -1049,13 +1045,13 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
1049
1045
  }
1050
1046
  }
1051
1047
  for (; i < 16; i += 2) {
1052
- bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np2, n0, top, i - 1);
1048
+ bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np, n0, top, i - 1);
1053
1049
  bn_scatter5(tmp.d, top, powerbuf, i);
1054
1050
  bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
1055
1051
  bn_scatter5(tmp.d, top, powerbuf, 2 * i);
1056
1052
  }
1057
1053
  for (; i < 32; i += 2) {
1058
- bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np2, n0, top, i - 1);
1054
+ bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np, n0, top, i - 1);
1059
1055
  bn_scatter5(tmp.d, top, powerbuf, i);
1060
1056
  }
1061
1057
 
@@ -1103,7 +1099,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
1103
1099
  wvalue >>= (bits - 4) & 7;
1104
1100
  wvalue &= 0x1f;
1105
1101
  bits -= 5;
1106
- bn_power5(tmp.d, tmp.d, powerbuf, np2, n0, top, wvalue);
1102
+ bn_power5(tmp.d, tmp.d, powerbuf, np, n0, top, wvalue);
1107
1103
  }
1108
1104
  while (bits >= 0) {
1109
1105
  /* Read five bits from |bits-4| through |bits|, inclusive. */
@@ -1112,11 +1108,11 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
1112
1108
  wvalue >>= first_bit & 7;
1113
1109
  wvalue &= 0x1f;
1114
1110
  bits -= 5;
1115
- bn_power5(tmp.d, tmp.d, powerbuf, np2, n0, top, wvalue);
1111
+ bn_power5(tmp.d, tmp.d, powerbuf, np, n0, top, wvalue);
1116
1112
  }
1117
1113
  }
1118
1114
 
1119
- ret = bn_from_montgomery(tmp.d, tmp.d, NULL, np2, n0, top);
1115
+ ret = bn_from_montgomery(tmp.d, tmp.d, NULL, np, n0, top);
1120
1116
  tmp.top = top;
1121
1117
  bn_correct_top(&tmp);
1122
1118
  if (ret) {
@@ -1128,8 +1124,8 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
1128
1124
  } else
1129
1125
  #endif
1130
1126
  {
1131
- if (!copy_to_prebuf(&tmp, top, powerbuf, 0, numPowers) ||
1132
- !copy_to_prebuf(&am, top, powerbuf, 1, numPowers)) {
1127
+ if (!copy_to_prebuf(&tmp, top, powerbuf, 0, window) ||
1128
+ !copy_to_prebuf(&am, top, powerbuf, 1, window)) {
1133
1129
  goto err;
1134
1130
  }
1135
1131
 
@@ -1140,13 +1136,13 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
1140
1136
  */
1141
1137
  if (window > 1) {
1142
1138
  if (!BN_mod_mul_montgomery(&tmp, &am, &am, mont, ctx) ||
1143
- !copy_to_prebuf(&tmp, top, powerbuf, 2, numPowers)) {
1139
+ !copy_to_prebuf(&tmp, top, powerbuf, 2, window)) {
1144
1140
  goto err;
1145
1141
  }
1146
1142
  for (i = 3; i < numPowers; i++) {
1147
1143
  /* Calculate a^i = a^(i-1) * a */
1148
1144
  if (!BN_mod_mul_montgomery(&tmp, &am, &tmp, mont, ctx) ||
1149
- !copy_to_prebuf(&tmp, top, powerbuf, i, numPowers)) {
1145
+ !copy_to_prebuf(&tmp, top, powerbuf, i, window)) {
1150
1146
  goto err;
1151
1147
  }
1152
1148
  }
@@ -1156,7 +1152,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
1156
1152
  for (wvalue = 0, i = bits % window; i >= 0; i--, bits--) {
1157
1153
  wvalue = (wvalue << 1) + BN_is_bit_set(p, bits);
1158
1154
  }
1159
- if (!copy_from_prebuf(&tmp, top, powerbuf, wvalue, numPowers)) {
1155
+ if (!copy_from_prebuf(&tmp, top, powerbuf, wvalue, window)) {
1160
1156
  goto err;
1161
1157
  }
1162
1158
 
@@ -1175,7 +1171,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
1175
1171
  }
1176
1172
 
1177
1173
  /* Fetch the appropriate pre-computed value from the pre-buf */
1178
- if (!copy_from_prebuf(&am, top, powerbuf, wvalue, numPowers)) {
1174
+ if (!copy_from_prebuf(&am, top, powerbuf, wvalue, window)) {
1179
1175
  goto err;
1180
1176
  }
1181
1177
 
@@ -1198,158 +1194,27 @@ err:
1198
1194
  OPENSSL_cleanse(powerbuf, powerbufLen);
1199
1195
  OPENSSL_free(powerbufFree);
1200
1196
  }
1201
- BN_CTX_end(ctx);
1202
1197
  return (ret);
1203
1198
  }
1204
1199
 
1205
1200
  int BN_mod_exp_mont_word(BIGNUM *rr, BN_ULONG a, const BIGNUM *p,
1206
1201
  const BIGNUM *m, BN_CTX *ctx,
1207
1202
  const BN_MONT_CTX *mont) {
1208
- BN_MONT_CTX *new_mont = NULL;
1209
- int b, bits, ret = 0;
1210
- int r_is_one;
1211
- BN_ULONG w, next_w;
1212
- BIGNUM *d, *r, *t;
1213
- BIGNUM *swap_tmp;
1214
- #define BN_MOD_MUL_WORD(r, w, m) \
1215
- (BN_mul_word(r, (w)) && \
1216
- (/* BN_ucmp(r, (m)) < 0 ? 1 :*/ \
1217
- (BN_mod(t, r, m, ctx) && (swap_tmp = r, r = t, t = swap_tmp, 1))))
1218
- /* BN_MOD_MUL_WORD is only used with 'w' large, so the BN_ucmp test is
1219
- * probably more overhead than always using BN_mod (which uses BN_copy if a
1220
- * similar test returns true). We can use BN_mod and do not need BN_nnmod
1221
- * because our accumulator is never negative (the result of BN_mod does not
1222
- * depend on the sign of the modulus). */
1223
- #define BN_TO_MONTGOMERY_WORD(r, w, mont) \
1224
- (BN_set_word(r, (w)) && BN_to_montgomery(r, r, (mont), ctx))
1225
-
1226
- if (BN_get_flags(p, BN_FLG_CONSTTIME) != 0) {
1227
- /* BN_FLG_CONSTTIME only supported by BN_mod_exp_mont() */
1228
- OPENSSL_PUT_ERROR(BN, ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED);
1229
- return 0;
1230
- }
1231
-
1232
- if (!BN_is_odd(m)) {
1233
- OPENSSL_PUT_ERROR(BN, BN_R_CALLED_WITH_EVEN_MODULUS);
1234
- return 0;
1235
- }
1203
+ BIGNUM a_bignum;
1204
+ BN_init(&a_bignum);
1236
1205
 
1237
- if (m->top == 1) {
1238
- a %= m->d[0]; /* make sure that 'a' is reduced */
1239
- }
1240
-
1241
- bits = BN_num_bits(p);
1242
- if (bits == 0) {
1243
- /* x**0 mod 1 is still zero. */
1244
- if (BN_is_one(m)) {
1245
- BN_zero(rr);
1246
- return 1;
1247
- }
1248
- return BN_one(rr);
1249
- }
1250
- if (a == 0) {
1251
- BN_zero(rr);
1252
- return 1;
1253
- }
1206
+ int ret = 0;
1254
1207
 
1255
- BN_CTX_start(ctx);
1256
- d = BN_CTX_get(ctx);
1257
- r = BN_CTX_get(ctx);
1258
- t = BN_CTX_get(ctx);
1259
- if (d == NULL || r == NULL || t == NULL) {
1208
+ if (!BN_set_word(&a_bignum, a)) {
1209
+ OPENSSL_PUT_ERROR(BN, ERR_R_INTERNAL_ERROR);
1260
1210
  goto err;
1261
1211
  }
1262
1212
 
1263
- /* Allocate a montgomery context if it was not supplied by the caller. */
1264
- if (mont == NULL) {
1265
- new_mont = BN_MONT_CTX_new();
1266
- if (new_mont == NULL || !BN_MONT_CTX_set(new_mont, m, ctx)) {
1267
- goto err;
1268
- }
1269
- mont = new_mont;
1270
- }
1271
-
1272
- r_is_one = 1; /* except for Montgomery factor */
1273
-
1274
- /* bits-1 >= 0 */
1275
-
1276
- /* The result is accumulated in the product r*w. */
1277
- w = a; /* bit 'bits-1' of 'p' is always set */
1278
- for (b = bits - 2; b >= 0; b--) {
1279
- /* First, square r*w. */
1280
- next_w = w * w;
1281
- if ((next_w / w) != w) {
1282
- /* overflow */
1283
- if (r_is_one) {
1284
- if (!BN_TO_MONTGOMERY_WORD(r, w, mont)) {
1285
- goto err;
1286
- }
1287
- r_is_one = 0;
1288
- } else {
1289
- if (!BN_MOD_MUL_WORD(r, w, m)) {
1290
- goto err;
1291
- }
1292
- }
1293
- next_w = 1;
1294
- }
1295
-
1296
- w = next_w;
1297
- if (!r_is_one) {
1298
- if (!BN_mod_mul_montgomery(r, r, r, mont, ctx)) {
1299
- goto err;
1300
- }
1301
- }
1302
-
1303
- /* Second, multiply r*w by 'a' if exponent bit is set. */
1304
- if (BN_is_bit_set(p, b)) {
1305
- next_w = w * a;
1306
- if ((next_w / a) != w) {
1307
- /* overflow */
1308
- if (r_is_one) {
1309
- if (!BN_TO_MONTGOMERY_WORD(r, w, mont)) {
1310
- goto err;
1311
- }
1312
- r_is_one = 0;
1313
- } else {
1314
- if (!BN_MOD_MUL_WORD(r, w, m)) {
1315
- goto err;
1316
- }
1317
- }
1318
- next_w = a;
1319
- }
1320
- w = next_w;
1321
- }
1322
- }
1323
-
1324
- /* Finally, set r:=r*w. */
1325
- if (w != 1) {
1326
- if (r_is_one) {
1327
- if (!BN_TO_MONTGOMERY_WORD(r, w, mont)) {
1328
- goto err;
1329
- }
1330
- r_is_one = 0;
1331
- } else {
1332
- if (!BN_MOD_MUL_WORD(r, w, m)) {
1333
- goto err;
1334
- }
1335
- }
1336
- }
1337
-
1338
- if (r_is_one) {
1339
- /* can happen only if a == 1*/
1340
- if (!BN_one(rr)) {
1341
- goto err;
1342
- }
1343
- } else {
1344
- if (!BN_from_montgomery(rr, r, mont, ctx)) {
1345
- goto err;
1346
- }
1347
- }
1348
- ret = 1;
1213
+ ret = BN_mod_exp_mont(rr, &a_bignum, p, m, ctx, mont);
1349
1214
 
1350
1215
  err:
1351
- BN_MONT_CTX_free(new_mont);
1352
- BN_CTX_end(ctx);
1216
+ BN_free(&a_bignum);
1217
+
1353
1218
  return ret;
1354
1219
  }
1355
1220
 
@@ -1358,36 +1223,11 @@ err:
1358
1223
  int BN_mod_exp2_mont(BIGNUM *rr, const BIGNUM *a1, const BIGNUM *p1,
1359
1224
  const BIGNUM *a2, const BIGNUM *p2, const BIGNUM *m,
1360
1225
  BN_CTX *ctx, const BN_MONT_CTX *mont) {
1361
- int i, j, bits, b, bits1, bits2, ret = 0, wpos1, wpos2, window1, window2,
1362
- wvalue1, wvalue2;
1363
- int r_is_one = 1;
1364
- BIGNUM *d, *r;
1365
- const BIGNUM *a_mod_m;
1366
- /* Tables of variables obtained from 'ctx' */
1367
- BIGNUM *val1[TABLE_SIZE], *val2[TABLE_SIZE];
1368
- BN_MONT_CTX *new_mont = NULL;
1369
-
1370
- if (!(m->d[0] & 1)) {
1371
- OPENSSL_PUT_ERROR(BN, BN_R_CALLED_WITH_EVEN_MODULUS);
1372
- return 0;
1373
- }
1374
- bits1 = BN_num_bits(p1);
1375
- bits2 = BN_num_bits(p2);
1376
- if (bits1 == 0 && bits2 == 0) {
1377
- ret = BN_one(rr);
1378
- return ret;
1379
- }
1380
-
1381
- bits = (bits1 > bits2) ? bits1 : bits2;
1226
+ BIGNUM tmp;
1227
+ BN_init(&tmp);
1382
1228
 
1383
- BN_CTX_start(ctx);
1384
- d = BN_CTX_get(ctx);
1385
- r = BN_CTX_get(ctx);
1386
- val1[0] = BN_CTX_get(ctx);
1387
- val2[0] = BN_CTX_get(ctx);
1388
- if (!d || !r || !val1[0] || !val2[0]) {
1389
- goto err;
1390
- }
1229
+ int ret = 0;
1230
+ BN_MONT_CTX *new_mont = NULL;
1391
1231
 
1392
1232
  /* Allocate a montgomery context if it was not supplied by the caller. */
1393
1233
  if (mont == NULL) {
@@ -1398,156 +1238,21 @@ int BN_mod_exp2_mont(BIGNUM *rr, const BIGNUM *a1, const BIGNUM *p1,
1398
1238
  mont = new_mont;
1399
1239
  }
1400
1240
 
1401
- window1 = BN_window_bits_for_exponent_size(bits1);
1402
- window2 = BN_window_bits_for_exponent_size(bits2);
1403
-
1404
- /* Build table for a1: val1[i] := a1^(2*i + 1) mod m for i = 0 ..
1405
- * 2^(window1-1) */
1406
- if (a1->neg || BN_ucmp(a1, m) >= 0) {
1407
- if (!BN_mod(val1[0], a1, m, ctx)) {
1408
- goto err;
1409
- }
1410
- a_mod_m = val1[0];
1411
- } else {
1412
- a_mod_m = a1;
1413
- }
1414
-
1415
- if (BN_is_zero(a_mod_m)) {
1416
- BN_zero(rr);
1417
- ret = 1;
1418
- goto err;
1419
- }
1420
-
1421
- if (!BN_to_montgomery(val1[0], a_mod_m, mont, ctx)) {
1241
+ /* BN_mod_mul_montgomery removes one Montgomery factor, so passing one
1242
+ * Montgomery-encoded and one non-Montgomery-encoded value gives a
1243
+ * non-Montgomery-encoded result. */
1244
+ if (!BN_mod_exp_mont(rr, a1, p1, m, ctx, mont) ||
1245
+ !BN_mod_exp_mont(&tmp, a2, p2, m, ctx, mont) ||
1246
+ !BN_to_montgomery(rr, rr, mont, ctx) ||
1247
+ !BN_mod_mul_montgomery(rr, rr, &tmp, mont, ctx)) {
1422
1248
  goto err;
1423
1249
  }
1424
1250
 
1425
- if (window1 > 1) {
1426
- if (!BN_mod_mul_montgomery(d, val1[0], val1[0], mont, ctx)) {
1427
- goto err;
1428
- }
1429
-
1430
- j = 1 << (window1 - 1);
1431
- for (i = 1; i < j; i++) {
1432
- if (((val1[i] = BN_CTX_get(ctx)) == NULL) ||
1433
- !BN_mod_mul_montgomery(val1[i], val1[i - 1], d, mont, ctx)) {
1434
- goto err;
1435
- }
1436
- }
1437
- }
1438
-
1439
- /* Build table for a2: val2[i] := a2^(2*i + 1) mod m for i = 0 ..
1440
- * 2^(window2-1) */
1441
- if (a2->neg || BN_ucmp(a2, m) >= 0) {
1442
- if (!BN_mod(val2[0], a2, m, ctx)) {
1443
- goto err;
1444
- }
1445
- a_mod_m = val2[0];
1446
- } else {
1447
- a_mod_m = a2;
1448
- }
1449
-
1450
- if (BN_is_zero(a_mod_m)) {
1451
- BN_zero(rr);
1452
- ret = 1;
1453
- goto err;
1454
- }
1455
-
1456
- if (!BN_to_montgomery(val2[0], a_mod_m, mont, ctx)) {
1457
- goto err;
1458
- }
1459
-
1460
- if (window2 > 1) {
1461
- if (!BN_mod_mul_montgomery(d, val2[0], val2[0], mont, ctx)) {
1462
- goto err;
1463
- }
1464
-
1465
- j = 1 << (window2 - 1);
1466
- for (i = 1; i < j; i++) {
1467
- if (((val2[i] = BN_CTX_get(ctx)) == NULL) ||
1468
- !BN_mod_mul_montgomery(val2[i], val2[i - 1], d, mont, ctx)) {
1469
- goto err;
1470
- }
1471
- }
1472
- }
1473
-
1474
- /* Now compute the power product, using independent windows. */
1475
- r_is_one = 1;
1476
- wvalue1 = 0; /* The 'value' of the first window */
1477
- wvalue2 = 0; /* The 'value' of the second window */
1478
- wpos1 = 0; /* If wvalue1 > 0, the bottom bit of the first window */
1479
- wpos2 = 0; /* If wvalue2 > 0, the bottom bit of the second window */
1480
-
1481
- if (!BN_to_montgomery(r, BN_value_one(), mont, ctx)) {
1482
- goto err;
1483
- }
1484
-
1485
- for (b = bits - 1; b >= 0; b--) {
1486
- if (!r_is_one) {
1487
- if (!BN_mod_mul_montgomery(r, r, r, mont, ctx)) {
1488
- goto err;
1489
- }
1490
- }
1491
-
1492
- if (!wvalue1 && BN_is_bit_set(p1, b)) {
1493
- /* consider bits b-window1+1 .. b for this window */
1494
- i = b - window1 + 1;
1495
- /* works for i<0 */
1496
- while (!BN_is_bit_set(p1, i)) {
1497
- i++;
1498
- }
1499
- wpos1 = i;
1500
- wvalue1 = 1;
1501
- for (i = b - 1; i >= wpos1; i--) {
1502
- wvalue1 <<= 1;
1503
- if (BN_is_bit_set(p1, i)) {
1504
- wvalue1++;
1505
- }
1506
- }
1507
- }
1508
-
1509
- if (!wvalue2 && BN_is_bit_set(p2, b)) {
1510
- /* consider bits b-window2+1 .. b for this window */
1511
- i = b - window2 + 1;
1512
- while (!BN_is_bit_set(p2, i)) {
1513
- i++;
1514
- }
1515
- wpos2 = i;
1516
- wvalue2 = 1;
1517
- for (i = b - 1; i >= wpos2; i--) {
1518
- wvalue2 <<= 1;
1519
- if (BN_is_bit_set(p2, i)) {
1520
- wvalue2++;
1521
- }
1522
- }
1523
- }
1524
-
1525
- if (wvalue1 && b == wpos1) {
1526
- /* wvalue1 is odd and < 2^window1 */
1527
- if (!BN_mod_mul_montgomery(r, r, val1[wvalue1 >> 1], mont, ctx)) {
1528
- goto err;
1529
- }
1530
- wvalue1 = 0;
1531
- r_is_one = 0;
1532
- }
1533
-
1534
- if (wvalue2 && b == wpos2) {
1535
- /* wvalue2 is odd and < 2^window2 */
1536
- if (!BN_mod_mul_montgomery(r, r, val2[wvalue2 >> 1], mont, ctx)) {
1537
- goto err;
1538
- }
1539
- wvalue2 = 0;
1540
- r_is_one = 0;
1541
- }
1542
- }
1543
-
1544
- if (!BN_from_montgomery(rr, r, mont, ctx)) {
1545
- goto err;
1546
- }
1547
1251
  ret = 1;
1548
1252
 
1549
1253
  err:
1550
1254
  BN_MONT_CTX_free(new_mont);
1551
- BN_CTX_end(ctx);
1255
+ BN_free(&tmp);
1256
+
1552
1257
  return ret;
1553
1258
  }