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
@@ -27,7 +27,6 @@
27
27
  #include <openssl/ec.h>
28
28
  #include <openssl/err.h>
29
29
  #include <openssl/mem.h>
30
- #include <openssl/obj.h>
31
30
 
32
31
  #include <string.h>
33
32
 
@@ -94,9 +93,8 @@ static void smallfelem_to_bin32(u8 out[32], const smallfelem in) {
94
93
  }
95
94
 
96
95
  /* To preserve endianness when using BN_bn2bin and BN_bin2bn. */
97
- static void flip_endian(u8 *out, const u8 *in, unsigned len) {
98
- unsigned i;
99
- for (i = 0; i < len; ++i) {
96
+ static void flip_endian(u8 *out, const u8 *in, size_t len) {
97
+ for (size_t i = 0; i < len; ++i) {
100
98
  out[i] = in[len - 1 - i];
101
99
  }
102
100
  }
@@ -111,7 +109,7 @@ static int BN_to_felem(felem out, const BIGNUM *bn) {
111
109
  felem_bytearray b_out;
112
110
  /* BN_bn2bin eats leading zeroes */
113
111
  memset(b_out, 0, sizeof(b_out));
114
- unsigned num_bytes = BN_num_bytes(bn);
112
+ size_t num_bytes = BN_num_bytes(bn);
115
113
  if (num_bytes > sizeof(b_out)) {
116
114
  OPENSSL_PUT_ERROR(EC, EC_R_BIGNUM_OUT_OF_RANGE);
117
115
  return 0;
@@ -134,20 +132,6 @@ static BIGNUM *smallfelem_to_BN(BIGNUM *out, const smallfelem in) {
134
132
 
135
133
  /* Field operations. */
136
134
 
137
- static void smallfelem_one(smallfelem out) {
138
- out[0] = 1;
139
- out[1] = 0;
140
- out[2] = 0;
141
- out[3] = 0;
142
- }
143
-
144
- static void smallfelem_assign(smallfelem out, const smallfelem in) {
145
- out[0] = in[0];
146
- out[1] = in[1];
147
- out[2] = in[2];
148
- out[3] = in[3];
149
- }
150
-
151
135
  static void felem_assign(felem out, const felem in) {
152
136
  out[0] = in[0];
153
137
  out[1] = in[1];
@@ -343,8 +327,7 @@ static void felem_shrink(smallfelem out, const felem in) {
343
327
  * conditionally subtract kPrime if tmp[3] is large enough. */
344
328
  high = tmp[3] >> 64;
345
329
  /* As tmp[3] < 2^65, high is either 1 or 0 */
346
- high <<= 63;
347
- high >>= 63;
330
+ high = ~(high - 1);
348
331
  /* high is:
349
332
  * all ones if the high word of tmp[3] is 1
350
333
  * all zeros if the high word of tmp[3] if 0 */
@@ -735,8 +718,7 @@ static void felem_contract(smallfelem out, const felem in) {
735
718
  * each u64, from most-significant to least significant. For each one, if
736
719
  * all words so far have been equal (m is all ones) then a non-equal
737
720
  * result is the answer. Otherwise we continue. */
738
- unsigned i;
739
- for (i = 3; i < 4; i--) {
721
+ for (size_t i = 3; i < 4; i--) {
740
722
  u64 equal;
741
723
  uint128_t a = ((uint128_t)kPrime[i]) - out[i];
742
724
  /* if out[i] > kPrime[i] then a will underflow and the high 64-bits
@@ -779,25 +761,6 @@ static void felem_contract(smallfelem out, const felem in) {
779
761
  subtract_u64(&out[3], &carry, result & kPrime[3]);
780
762
  }
781
763
 
782
- static void smallfelem_square_contract(smallfelem out, const smallfelem in) {
783
- longfelem longtmp;
784
- felem tmp;
785
-
786
- smallfelem_square(longtmp, in);
787
- felem_reduce(tmp, longtmp);
788
- felem_contract(out, tmp);
789
- }
790
-
791
- static void smallfelem_mul_contract(smallfelem out, const smallfelem in1,
792
- const smallfelem in2) {
793
- longfelem longtmp;
794
- felem tmp;
795
-
796
- smallfelem_mul(longtmp, in1, in2);
797
- felem_reduce(tmp, longtmp);
798
- felem_contract(out, tmp);
799
- }
800
-
801
764
  /* felem_is_zero returns a limb with all bits set if |in| == 0 (mod p) and 0
802
765
  * otherwise.
803
766
  * On entry:
@@ -834,10 +797,6 @@ static limb smallfelem_is_zero(const smallfelem small) {
834
797
  return result;
835
798
  }
836
799
 
837
- static int smallfelem_is_zero_int(const smallfelem small) {
838
- return (int)(smallfelem_is_zero(small) & ((limb)1));
839
- }
840
-
841
800
  /* felem_inv calculates |out| = |in|^{-1}
842
801
  *
843
802
  * Based on Fermat's Little Theorem:
@@ -849,7 +808,6 @@ static void felem_inv(felem out, const felem in) {
849
808
  /* each e_I will hold |in|^{2^I - 1} */
850
809
  felem e2, e4, e8, e16, e32, e64;
851
810
  longfelem tmp;
852
- unsigned i;
853
811
 
854
812
  felem_square(tmp, in);
855
813
  felem_reduce(ftmp, tmp); /* 2^1 */
@@ -874,47 +832,47 @@ static void felem_inv(felem out, const felem in) {
874
832
  felem_mul(tmp, ftmp, e4);
875
833
  felem_reduce(ftmp, tmp); /* 2^8 - 2^0 */
876
834
  felem_assign(e8, ftmp);
877
- for (i = 0; i < 8; i++) {
835
+ for (size_t i = 0; i < 8; i++) {
878
836
  felem_square(tmp, ftmp);
879
837
  felem_reduce(ftmp, tmp);
880
838
  } /* 2^16 - 2^8 */
881
839
  felem_mul(tmp, ftmp, e8);
882
840
  felem_reduce(ftmp, tmp); /* 2^16 - 2^0 */
883
841
  felem_assign(e16, ftmp);
884
- for (i = 0; i < 16; i++) {
842
+ for (size_t i = 0; i < 16; i++) {
885
843
  felem_square(tmp, ftmp);
886
844
  felem_reduce(ftmp, tmp);
887
845
  } /* 2^32 - 2^16 */
888
846
  felem_mul(tmp, ftmp, e16);
889
847
  felem_reduce(ftmp, tmp); /* 2^32 - 2^0 */
890
848
  felem_assign(e32, ftmp);
891
- for (i = 0; i < 32; i++) {
849
+ for (size_t i = 0; i < 32; i++) {
892
850
  felem_square(tmp, ftmp);
893
851
  felem_reduce(ftmp, tmp);
894
852
  } /* 2^64 - 2^32 */
895
853
  felem_assign(e64, ftmp);
896
854
  felem_mul(tmp, ftmp, in);
897
855
  felem_reduce(ftmp, tmp); /* 2^64 - 2^32 + 2^0 */
898
- for (i = 0; i < 192; i++) {
856
+ for (size_t i = 0; i < 192; i++) {
899
857
  felem_square(tmp, ftmp);
900
858
  felem_reduce(ftmp, tmp);
901
859
  } /* 2^256 - 2^224 + 2^192 */
902
860
 
903
861
  felem_mul(tmp, e64, e32);
904
862
  felem_reduce(ftmp2, tmp); /* 2^64 - 2^0 */
905
- for (i = 0; i < 16; i++) {
863
+ for (size_t i = 0; i < 16; i++) {
906
864
  felem_square(tmp, ftmp2);
907
865
  felem_reduce(ftmp2, tmp);
908
866
  } /* 2^80 - 2^16 */
909
867
  felem_mul(tmp, ftmp2, e16);
910
868
  felem_reduce(ftmp2, tmp); /* 2^80 - 2^0 */
911
- for (i = 0; i < 8; i++) {
869
+ for (size_t i = 0; i < 8; i++) {
912
870
  felem_square(tmp, ftmp2);
913
871
  felem_reduce(ftmp2, tmp);
914
872
  } /* 2^88 - 2^8 */
915
873
  felem_mul(tmp, ftmp2, e8);
916
874
  felem_reduce(ftmp2, tmp); /* 2^88 - 2^0 */
917
- for (i = 0; i < 4; i++) {
875
+ for (size_t i = 0; i < 4; i++) {
918
876
  felem_square(tmp, ftmp2);
919
877
  felem_reduce(ftmp2, tmp);
920
878
  } /* 2^92 - 2^4 */
@@ -937,14 +895,6 @@ static void felem_inv(felem out, const felem in) {
937
895
  felem_reduce(out, tmp); /* 2^256 - 2^224 + 2^192 + 2^96 - 3 */
938
896
  }
939
897
 
940
- static void smallfelem_inv_contract(smallfelem out, const smallfelem in) {
941
- felem tmp;
942
-
943
- smallfelem_expand(tmp, in);
944
- felem_inv(tmp, tmp);
945
- felem_contract(out, tmp);
946
- }
947
-
948
898
  /* Group operations
949
899
  * ----------------
950
900
  *
@@ -1055,8 +1005,7 @@ static void point_double_small(smallfelem x_out, smallfelem y_out,
1055
1005
 
1056
1006
  /* copy_conditional copies in to out iff mask is all ones. */
1057
1007
  static void copy_conditional(felem out, const felem in, limb mask) {
1058
- unsigned i;
1059
- for (i = 0; i < NLIMBS; ++i) {
1008
+ for (size_t i = 0; i < NLIMBS; ++i) {
1060
1009
  const limb tmp = mask & (in[i] ^ out[i]);
1061
1010
  out[i] ^= tmp;
1062
1011
  }
@@ -1064,9 +1013,8 @@ static void copy_conditional(felem out, const felem in, limb mask) {
1064
1013
 
1065
1014
  /* copy_small_conditional copies in to out iff mask is all ones. */
1066
1015
  static void copy_small_conditional(felem out, const smallfelem in, limb mask) {
1067
- unsigned i;
1068
1016
  const u64 mask64 = mask;
1069
- for (i = 0; i < NLIMBS; ++i) {
1017
+ for (size_t i = 0; i < NLIMBS; ++i) {
1070
1018
  out[i] = ((limb)(in[i] & mask64)) | (out[i] & ~mask);
1071
1019
  }
1072
1020
  }
@@ -1448,13 +1396,13 @@ static const smallfelem g_pre_comp[2][16][3] = {
1448
1396
 
1449
1397
  /* select_point selects the |idx|th point from a precomputation table and
1450
1398
  * copies it to out. */
1451
- static void select_point(const u64 idx, unsigned int size,
1452
- const smallfelem pre_comp[16][3], smallfelem out[3]) {
1453
- unsigned i, j;
1399
+ static void select_point(const u64 idx, size_t size,
1400
+ const smallfelem pre_comp[/*size*/][3],
1401
+ smallfelem out[3]) {
1454
1402
  u64 *outlimbs = &out[0][0];
1455
1403
  memset(outlimbs, 0, 3 * sizeof(smallfelem));
1456
1404
 
1457
- for (i = 0; i < size; i++) {
1405
+ for (size_t i = 0; i < size; i++) {
1458
1406
  const u64 *inlimbs = (const u64 *)&pre_comp[i][0][0];
1459
1407
  u64 mask = i ^ idx;
1460
1408
  mask |= mask >> 4;
@@ -1462,7 +1410,7 @@ static void select_point(const u64 idx, unsigned int size,
1462
1410
  mask |= mask >> 1;
1463
1411
  mask &= 1;
1464
1412
  mask--;
1465
- for (j = 0; j < NLIMBS * 3; j++) {
1413
+ for (size_t j = 0; j < NLIMBS * 3; j++) {
1466
1414
  outlimbs[j] |= inlimbs[j] & mask;
1467
1415
  }
1468
1416
  }
@@ -1483,10 +1431,8 @@ static char get_bit(const felem_bytearray in, int i) {
1483
1431
  * Output point (X, Y, Z) is stored in x_out, y_out, z_out. */
1484
1432
  static void batch_mul(felem x_out, felem y_out, felem z_out,
1485
1433
  const felem_bytearray scalars[],
1486
- const unsigned num_points, const u8 *g_scalar,
1487
- const int mixed, const smallfelem pre_comp[][17][3]) {
1488
- int i, skip;
1489
- unsigned num, gen_mul = (g_scalar != NULL);
1434
+ const size_t num_points, const u8 *g_scalar,
1435
+ const smallfelem pre_comp[][17][3]) {
1490
1436
  felem nq[3], ftmp;
1491
1437
  smallfelem tmp[3];
1492
1438
  u64 bits;
@@ -1499,16 +1445,16 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
1499
1445
  * of the generator (two in each of the last 32 rounds) and additions of
1500
1446
  * other points multiples (every 5th round). */
1501
1447
 
1502
- skip = 1; /* save two point operations in the first
1503
- * round */
1504
- for (i = (num_points ? 255 : 31); i >= 0; --i) {
1448
+ int skip = 1; /* save two point operations in the first round */
1449
+ size_t i = num_points != 0 ? 255 : 31;
1450
+ for (;;) {
1505
1451
  /* double */
1506
1452
  if (!skip) {
1507
1453
  point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
1508
1454
  }
1509
1455
 
1510
1456
  /* add multiples of the generator */
1511
- if (gen_mul && i <= 31) {
1457
+ if (g_scalar != NULL && i <= 31) {
1512
1458
  /* first, look 32 bits upwards */
1513
1459
  bits = get_bit(g_scalar, i + 224) << 3;
1514
1460
  bits |= get_bit(g_scalar, i + 160) << 2;
@@ -1518,9 +1464,8 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
1518
1464
  select_point(bits, 16, g_pre_comp[1], tmp);
1519
1465
 
1520
1466
  if (!skip) {
1521
- /* Arg 1 below is for "mixed" */
1522
- point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1, tmp[0], tmp[1],
1523
- tmp[2]);
1467
+ point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */,
1468
+ tmp[0], tmp[1], tmp[2]);
1524
1469
  } else {
1525
1470
  smallfelem_expand(nq[0], tmp[0]);
1526
1471
  smallfelem_expand(nq[1], tmp[1]);
@@ -1535,14 +1480,14 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
1535
1480
  bits |= get_bit(g_scalar, i);
1536
1481
  /* select the point to add, in constant time */
1537
1482
  select_point(bits, 16, g_pre_comp[0], tmp);
1538
- /* Arg 1 below is for "mixed" */
1539
- point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1, tmp[0], tmp[1],
1540
- tmp[2]);
1483
+ point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 1 /* mixed */, tmp[0],
1484
+ tmp[1], tmp[2]);
1541
1485
  }
1542
1486
 
1543
1487
  /* do other additions every 5 doublings */
1544
- if (num_points && (i % 5 == 0)) {
1488
+ if (num_points != 0 && i % 5 == 0) {
1545
1489
  /* loop over all scalars */
1490
+ size_t num;
1546
1491
  for (num = 0; num < num_points; ++num) {
1547
1492
  bits = get_bit(scalars[num], i + 4) << 5;
1548
1493
  bits |= get_bit(scalars[num], i + 3) << 4;
@@ -1560,8 +1505,8 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
1560
1505
  felem_contract(tmp[1], ftmp);
1561
1506
 
1562
1507
  if (!skip) {
1563
- point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], mixed, tmp[0],
1564
- tmp[1], tmp[2]);
1508
+ point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 0 /* mixed */,
1509
+ tmp[0], tmp[1], tmp[2]);
1565
1510
  } else {
1566
1511
  smallfelem_expand(nq[0], tmp[0]);
1567
1512
  smallfelem_expand(nq[1], tmp[1]);
@@ -1570,6 +1515,11 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
1570
1515
  }
1571
1516
  }
1572
1517
  }
1518
+
1519
+ if (i == 0) {
1520
+ break;
1521
+ }
1522
+ --i;
1573
1523
  }
1574
1524
  felem_assign(x_out, nq[0]);
1575
1525
  felem_assign(y_out, nq[1]);
@@ -1583,10 +1533,10 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
1583
1533
 
1584
1534
  /* Takes the Jacobian coordinates (X, Y, Z) of a point and returns (X', Y') =
1585
1535
  * (X/Z^2, Y/Z^3). */
1586
- int ec_GFp_nistp256_point_get_affine_coordinates(const EC_GROUP *group,
1587
- const EC_POINT *point,
1588
- BIGNUM *x, BIGNUM *y,
1589
- BN_CTX *ctx) {
1536
+ static int ec_GFp_nistp256_point_get_affine_coordinates(const EC_GROUP *group,
1537
+ const EC_POINT *point,
1538
+ BIGNUM *x, BIGNUM *y,
1539
+ BN_CTX *ctx) {
1590
1540
  felem z1, z2, x_in, y_in;
1591
1541
  smallfelem x_out, y_out;
1592
1542
  longfelem tmp;
@@ -1603,45 +1553,38 @@ int ec_GFp_nistp256_point_get_affine_coordinates(const EC_GROUP *group,
1603
1553
  felem_inv(z2, z1);
1604
1554
  felem_square(tmp, z2);
1605
1555
  felem_reduce(z1, tmp);
1606
- felem_mul(tmp, x_in, z1);
1607
- felem_reduce(x_in, tmp);
1608
- felem_contract(x_out, x_in);
1609
- if (x != NULL && !smallfelem_to_BN(x, x_out)) {
1610
- OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
1611
- return 0;
1556
+
1557
+ if (x != NULL) {
1558
+ felem_mul(tmp, x_in, z1);
1559
+ felem_reduce(x_in, tmp);
1560
+ felem_contract(x_out, x_in);
1561
+ if (!smallfelem_to_BN(x, x_out)) {
1562
+ OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
1563
+ return 0;
1564
+ }
1612
1565
  }
1613
- felem_mul(tmp, z1, z2);
1614
- felem_reduce(z1, tmp);
1615
- felem_mul(tmp, y_in, z1);
1616
- felem_reduce(y_in, tmp);
1617
- felem_contract(y_out, y_in);
1618
- if (y != NULL && !smallfelem_to_BN(y, y_out)) {
1619
- OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
1620
- return 0;
1566
+
1567
+ if (y != NULL) {
1568
+ felem_mul(tmp, z1, z2);
1569
+ felem_reduce(z1, tmp);
1570
+ felem_mul(tmp, y_in, z1);
1571
+ felem_reduce(y_in, tmp);
1572
+ felem_contract(y_out, y_in);
1573
+ if (!smallfelem_to_BN(y, y_out)) {
1574
+ OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
1575
+ return 0;
1576
+ }
1621
1577
  }
1622
- return 1;
1623
- }
1624
1578
 
1625
- /* points below is of size |num|, and tmp_smallfelems is of size |num+1| */
1626
- static void make_points_affine(size_t num, smallfelem points[][3],
1627
- smallfelem tmp_smallfelems[]) {
1628
- /* Runs in constant time, unless an input is the point at infinity (which
1629
- * normally shouldn't happen). */
1630
- ec_GFp_nistp_points_make_affine_internal(
1631
- num, points, sizeof(smallfelem), tmp_smallfelems,
1632
- (void (*)(void *))smallfelem_one,
1633
- (int (*)(const void *))smallfelem_is_zero_int,
1634
- (void (*)(void *, const void *))smallfelem_assign,
1635
- (void (*)(void *, const void *))smallfelem_square_contract,
1636
- (void (*)(void *, const void *, const void *))smallfelem_mul_contract,
1637
- (void (*)(void *, const void *))smallfelem_inv_contract,
1638
- /* nothing to contract */
1639
- (void (*)(void *, const void *))smallfelem_assign);
1579
+ return 1;
1640
1580
  }
1641
1581
 
1642
- int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
1643
- const BIGNUM *g_scalar, const EC_POINT *p_,
1644
- const BIGNUM *p_scalar_, BN_CTX *ctx) {
1582
+ static int ec_GFp_nistp256_points_mul(const EC_GROUP *group,
1583
+ EC_POINT *r,
1584
+ const BIGNUM *g_scalar,
1585
+ const EC_POINT *p_,
1586
+ const BIGNUM *p_scalar_,
1587
+ BN_CTX *ctx) {
1645
1588
  /* TODO: This function used to take |points| and |scalars| as arrays of
1646
1589
  * |num| elements. The code below should be simplified to work in terms of |p|
1647
1590
  * and |p_scalar|. */
@@ -1650,16 +1593,12 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
1650
1593
  BIGNUM const *const *scalars = p_ != NULL ? &p_scalar_ : NULL;
1651
1594
 
1652
1595
  int ret = 0;
1653
- int j;
1654
- int mixed = 0;
1655
1596
  BN_CTX *new_ctx = NULL;
1656
1597
  BIGNUM *x, *y, *z, *tmp_scalar;
1657
1598
  felem_bytearray g_secret;
1658
1599
  felem_bytearray *secrets = NULL;
1659
1600
  smallfelem(*pre_comp)[17][3] = NULL;
1660
- smallfelem *tmp_smallfelems = NULL;
1661
1601
  felem_bytearray tmp;
1662
- unsigned i, num_bytes;
1663
1602
  size_t num_points = num;
1664
1603
  smallfelem x_in, y_in, z_in;
1665
1604
  felem x_out, y_out, z_out;
@@ -1682,19 +1621,9 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
1682
1621
  }
1683
1622
 
1684
1623
  if (num_points > 0) {
1685
- if (num_points >= 3) {
1686
- /* unless we precompute multiples for just one or two points,
1687
- * converting those into affine form is time well spent */
1688
- mixed = 1;
1689
- }
1690
1624
  secrets = OPENSSL_malloc(num_points * sizeof(felem_bytearray));
1691
1625
  pre_comp = OPENSSL_malloc(num_points * sizeof(smallfelem[17][3]));
1692
- if (mixed) {
1693
- tmp_smallfelems =
1694
- OPENSSL_malloc((num_points * 17 + 1) * sizeof(smallfelem));
1695
- }
1696
- if (secrets == NULL || pre_comp == NULL ||
1697
- (mixed && tmp_smallfelems == NULL)) {
1626
+ if (secrets == NULL || pre_comp == NULL) {
1698
1627
  OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
1699
1628
  goto err;
1700
1629
  }
@@ -1703,7 +1632,7 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
1703
1632
  * i.e., they contribute nothing to the linear combination. */
1704
1633
  memset(secrets, 0, num_points * sizeof(felem_bytearray));
1705
1634
  memset(pre_comp, 0, num_points * 17 * 3 * sizeof(smallfelem));
1706
- for (i = 0; i < num_points; ++i) {
1635
+ for (size_t i = 0; i < num_points; ++i) {
1707
1636
  if (i == num) {
1708
1637
  /* we didn't have a valid precomputation, so we pick the generator. */
1709
1638
  p = EC_GROUP_get0_generator(group);
@@ -1714,6 +1643,7 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
1714
1643
  p_scalar = scalars[i];
1715
1644
  }
1716
1645
  if (p_scalar != NULL && p != NULL) {
1646
+ size_t num_bytes;
1717
1647
  /* reduce g_scalar to 0 <= g_scalar < 2^256 */
1718
1648
  if (BN_num_bits(p_scalar) > 256 || BN_is_negative(p_scalar)) {
1719
1649
  /* this is an unusual input, and we don't guarantee
@@ -1736,7 +1666,7 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
1736
1666
  felem_shrink(pre_comp[i][1][0], x_out);
1737
1667
  felem_shrink(pre_comp[i][1][1], y_out);
1738
1668
  felem_shrink(pre_comp[i][1][2], z_out);
1739
- for (j = 2; j <= 16; ++j) {
1669
+ for (size_t j = 2; j <= 16; ++j) {
1740
1670
  if (j & 1) {
1741
1671
  point_add_small(pre_comp[i][j][0], pre_comp[i][j][1],
1742
1672
  pre_comp[i][j][2], pre_comp[i][1][0],
@@ -1751,12 +1681,11 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
1751
1681
  }
1752
1682
  }
1753
1683
  }
1754
- if (mixed) {
1755
- make_points_affine(num_points * 17, pre_comp[0], tmp_smallfelems);
1756
- }
1757
1684
  }
1758
1685
 
1759
1686
  if (g_scalar != NULL) {
1687
+ size_t num_bytes;
1688
+
1760
1689
  memset(g_secret, 0, sizeof(g_secret));
1761
1690
  /* reduce g_scalar to 0 <= g_scalar < 2^256 */
1762
1691
  if (BN_num_bits(g_scalar) > 256 || BN_is_negative(g_scalar)) {
@@ -1773,7 +1702,7 @@ int ec_GFp_nistp256_points_mul(const EC_GROUP *group, EC_POINT *r,
1773
1702
  flip_endian(g_secret, tmp, num_bytes);
1774
1703
  }
1775
1704
  batch_mul(x_out, y_out, z_out, (const felem_bytearray(*))secrets,
1776
- num_points, g_scalar != NULL ? g_secret : NULL, mixed,
1705
+ num_points, g_scalar != NULL ? g_secret : NULL,
1777
1706
  (const smallfelem(*)[17][3])pre_comp);
1778
1707
 
1779
1708
  /* reduce the output to its unique minimal representation */
@@ -1793,24 +1722,20 @@ err:
1793
1722
  BN_CTX_free(new_ctx);
1794
1723
  OPENSSL_free(secrets);
1795
1724
  OPENSSL_free(pre_comp);
1796
- OPENSSL_free(tmp_smallfelems);
1797
1725
  return ret;
1798
1726
  }
1799
1727
 
1800
- const EC_METHOD *EC_GFp_nistp256_method(void) {
1801
- static const EC_METHOD ret = {
1802
- ec_GFp_simple_group_init,
1803
- ec_GFp_simple_group_finish,
1804
- ec_GFp_simple_group_copy,
1805
- ec_GFp_simple_group_set_curve,
1806
- ec_GFp_nistp256_point_get_affine_coordinates,
1807
- ec_GFp_nistp256_points_mul,
1808
- 0 /* check_pub_key_order */,
1809
- ec_GFp_simple_field_mul, ec_GFp_simple_field_sqr,
1810
- 0 /* field_encode */, 0 /* field_decode */, 0 /* field_set_to_one */
1811
- };
1812
-
1813
- return &ret;
1814
- }
1728
+ const EC_METHOD EC_GFp_nistp256_method = {
1729
+ ec_GFp_simple_group_init,
1730
+ ec_GFp_simple_group_finish,
1731
+ ec_GFp_simple_group_copy,
1732
+ ec_GFp_simple_group_set_curve,
1733
+ ec_GFp_nistp256_point_get_affine_coordinates,
1734
+ ec_GFp_nistp256_points_mul,
1735
+ ec_GFp_simple_field_mul,
1736
+ ec_GFp_simple_field_sqr,
1737
+ NULL /* field_encode */,
1738
+ NULL /* field_decode */,
1739
+ };
1815
1740
 
1816
1741
  #endif /* 64_BIT && !WINDOWS */