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
@@ -96,15 +96,6 @@ struct ec_method_st {
96
96
  int (*mul)(const EC_GROUP *group, EC_POINT *r, const BIGNUM *g_scalar,
97
97
  const EC_POINT *p, const BIGNUM *p_scalar, BN_CTX *ctx);
98
98
 
99
- /* |check_pub_key_order| checks that the public key is in the proper subgroup
100
- * by checking that |pub_key*group->order| is the point at infinity. This may
101
- * be NULL for |EC_METHOD|s specialized for prime-order curves (i.e. with
102
- * cofactor one), as this check is not necessary for such curves (See section
103
- * A.3 of the NSA's "Suite B Implementer's Guide to FIPS 186-3
104
- * (ECDSA)"). */
105
- int (*check_pub_key_order)(const EC_GROUP *group, const EC_POINT *pub_key,
106
- BN_CTX *ctx);
107
-
108
99
  /* 'field_mul' and 'field_sqr' can be used by 'add' and 'dbl' so that the
109
100
  * same implementations of point operations can be used with different
110
101
  * optimized implementations of expensive field operations: */
@@ -116,16 +107,15 @@ struct ec_method_st {
116
107
  BN_CTX *); /* e.g. to Montgomery */
117
108
  int (*field_decode)(const EC_GROUP *, BIGNUM *r, const BIGNUM *a,
118
109
  BN_CTX *); /* e.g. from Montgomery */
119
- int (*field_set_to_one)(const EC_GROUP *, BIGNUM *r, BN_CTX *);
120
110
  } /* EC_METHOD */;
121
111
 
122
- const EC_METHOD* EC_GFp_mont_method(void);
112
+ extern const EC_METHOD EC_GFp_mont_method;
123
113
 
124
114
  struct ec_group_st {
125
115
  const EC_METHOD *meth;
126
116
 
127
117
  EC_POINT *generator;
128
- BIGNUM order, cofactor;
118
+ BIGNUM order;
129
119
 
130
120
  int curve_name; /* optional NID for named curve */
131
121
 
@@ -141,7 +131,8 @@ struct ec_group_st {
141
131
  int a_is_minus3; /* enable optimized point arithmetics for special case */
142
132
 
143
133
  BN_MONT_CTX *mont; /* Montgomery structure. */
144
- BIGNUM *one; /* The value one */
134
+
135
+ BIGNUM one; /* The value one. */
145
136
  } /* EC_GROUP */;
146
137
 
147
138
  struct ec_point_st {
@@ -151,7 +142,6 @@ struct ec_point_st {
151
142
  BIGNUM Y;
152
143
  BIGNUM Z; /* Jacobian projective coordinates:
153
144
  * (X, Y, Z) represents (X/Z^2, Y/Z^3) if Z != 0 */
154
- int Z_is_one; /* enable optimized point arithmetics for special case */
155
145
  } /* EC_POINT */;
156
146
 
157
147
  EC_GROUP *ec_group_new(const EC_METHOD *meth);
@@ -190,9 +180,6 @@ int ec_GFp_simple_get_Jprojective_coordinates_GFp(const EC_GROUP *,
190
180
  int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *, EC_POINT *,
191
181
  const BIGNUM *x, const BIGNUM *y,
192
182
  BN_CTX *);
193
- int ec_GFp_simple_point_get_affine_coordinates(const EC_GROUP *,
194
- const EC_POINT *, BIGNUM *x,
195
- BIGNUM *y, BN_CTX *);
196
183
  int ec_GFp_simple_set_compressed_coordinates(const EC_GROUP *, EC_POINT *,
197
184
  const BIGNUM *x, int y_bit,
198
185
  BN_CTX *);
@@ -227,30 +214,20 @@ int ec_GFp_mont_field_encode(const EC_GROUP *, BIGNUM *r, const BIGNUM *a,
227
214
  BN_CTX *);
228
215
  int ec_GFp_mont_field_decode(const EC_GROUP *, BIGNUM *r, const BIGNUM *a,
229
216
  BN_CTX *);
230
- int ec_GFp_mont_field_set_to_one(const EC_GROUP *, BIGNUM *r, BN_CTX *);
231
217
 
232
218
  int ec_point_set_Jprojective_coordinates_GFp(const EC_GROUP *group,
233
219
  EC_POINT *point, const BIGNUM *x,
234
220
  const BIGNUM *y, const BIGNUM *z,
235
221
  BN_CTX *ctx);
236
222
 
237
- void ec_GFp_nistp_points_make_affine_internal(
238
- size_t num, void *point_array, size_t felem_size, void *tmp_felems,
239
- void (*felem_one)(void *out), int (*felem_is_zero)(const void *in),
240
- void (*felem_assign)(void *out, const void *in),
241
- void (*felem_square)(void *out, const void *in),
242
- void (*felem_mul)(void *out, const void *in1, const void *in2),
243
- void (*felem_inv)(void *out, const void *in),
244
- void (*felem_contract)(void *out, const void *in));
245
-
246
223
  void ec_GFp_nistp_recode_scalar_bits(uint8_t *sign, uint8_t *digit, uint8_t in);
247
224
 
248
- const EC_METHOD *EC_GFp_nistp224_method(void);
249
- const EC_METHOD *EC_GFp_nistp256_method(void);
225
+ extern const EC_METHOD EC_GFp_nistp224_method;
226
+ extern const EC_METHOD EC_GFp_nistp256_method;
250
227
 
251
- /* Returns GFp methods using montgomery multiplication, with x86-64
252
- * optimized P256. See http://eprint.iacr.org/2013/816. */
253
- const EC_METHOD *EC_GFp_nistz256_method(void);
228
+ /* EC_GFp_nistz256_method is a GFp method using montgomery multiplication, with
229
+ * x86-64 optimized P256. See http://eprint.iacr.org/2013/816. */
230
+ extern const EC_METHOD EC_GFp_nistz256_method;
254
231
 
255
232
  struct ec_key_st {
256
233
  EC_GROUP *group;
@@ -274,9 +251,6 @@ struct curve_data {
274
251
  const char *comment;
275
252
  /* param_len is the number of bytes needed to store a field element. */
276
253
  uint8_t param_len;
277
- /* cofactor is the cofactor of the group (i.e. the number of elements in the
278
- * group divided by the size of the main subgroup. */
279
- uint8_t cofactor; /* promoted to BN_ULONG */
280
254
  /* data points to an array of 6*|param_len| bytes which hold the field
281
255
  * elements of the following (in big-endian order): prime, a, b, generator x,
282
256
  * generator y, order. */
@@ -285,8 +259,10 @@ struct curve_data {
285
259
 
286
260
  struct built_in_curve {
287
261
  int nid;
262
+ uint8_t oid[8];
263
+ uint8_t oid_len;
288
264
  const struct curve_data *data;
289
- const EC_METHOD *(*method)(void);
265
+ const EC_METHOD *method;
290
266
  };
291
267
 
292
268
  /* OPENSSL_built_in_curves is terminated with an entry where |nid| is
@@ -281,10 +281,15 @@ int EC_POINT_point2cbb(CBB *out, const EC_GROUP *group, const EC_POINT *point,
281
281
  }
282
282
 
283
283
  int ec_GFp_simple_set_compressed_coordinates(const EC_GROUP *group,
284
- EC_POINT *point, const BIGNUM *x_,
284
+ EC_POINT *point, const BIGNUM *x,
285
285
  int y_bit, BN_CTX *ctx) {
286
+ if (BN_is_negative(x) || BN_cmp(x, &group->field) >= 0) {
287
+ OPENSSL_PUT_ERROR(EC, EC_R_INVALID_COMPRESSION_BIT);
288
+ return 0;
289
+ }
290
+
286
291
  BN_CTX *new_ctx = NULL;
287
- BIGNUM *tmp1, *tmp2, *x, *y;
292
+ BIGNUM *tmp1, *tmp2, *y;
288
293
  int ret = 0;
289
294
 
290
295
  ERR_clear_error();
@@ -301,7 +306,6 @@ int ec_GFp_simple_set_compressed_coordinates(const EC_GROUP *group,
301
306
  BN_CTX_start(ctx);
302
307
  tmp1 = BN_CTX_get(ctx);
303
308
  tmp2 = BN_CTX_get(ctx);
304
- x = BN_CTX_get(ctx);
305
309
  y = BN_CTX_get(ctx);
306
310
  if (y == NULL) {
307
311
  goto err;
@@ -312,19 +316,15 @@ int ec_GFp_simple_set_compressed_coordinates(const EC_GROUP *group,
312
316
  * so y is one of the square roots of x^3 + a*x + b. */
313
317
 
314
318
  /* tmp1 := x^3 */
315
- if (!BN_nnmod(x, x_, &group->field, ctx)) {
316
- goto err;
317
- }
318
-
319
319
  if (group->meth->field_decode == 0) {
320
320
  /* field_{sqr,mul} work on standard representation */
321
- if (!group->meth->field_sqr(group, tmp2, x_, ctx) ||
322
- !group->meth->field_mul(group, tmp1, tmp2, x_, ctx)) {
321
+ if (!group->meth->field_sqr(group, tmp2, x, ctx) ||
322
+ !group->meth->field_mul(group, tmp1, tmp2, x, ctx)) {
323
323
  goto err;
324
324
  }
325
325
  } else {
326
- if (!BN_mod_sqr(tmp2, x_, &group->field, ctx) ||
327
- !BN_mod_mul(tmp1, tmp2, x_, &group->field, ctx)) {
326
+ if (!BN_mod_sqr(tmp2, x, &group->field, ctx) ||
327
+ !BN_mod_mul(tmp1, tmp2, x, &group->field, ctx)) {
328
328
  goto err;
329
329
  }
330
330
  }
@@ -26,7 +26,6 @@
26
26
  #include <openssl/ec.h>
27
27
  #include <openssl/err.h>
28
28
  #include <openssl/mem.h>
29
- #include <openssl/obj.h>
30
29
 
31
30
  #include <string.h>
32
31
 
@@ -193,8 +192,7 @@ static void bin28_to_felem(felem out, const u8 in[28]) {
193
192
  }
194
193
 
195
194
  static void felem_to_bin28(u8 out[28], const felem in) {
196
- unsigned i;
197
- for (i = 0; i < 7; ++i) {
195
+ for (size_t i = 0; i < 7; ++i) {
198
196
  out[i] = in[0] >> (8 * i);
199
197
  out[i + 7] = in[1] >> (8 * i);
200
198
  out[i + 14] = in[2] >> (8 * i);
@@ -203,9 +201,8 @@ static void felem_to_bin28(u8 out[28], const felem in) {
203
201
  }
204
202
 
205
203
  /* To preserve endianness when using BN_bn2bin and BN_bin2bn */
206
- static void flip_endian(u8 *out, const u8 *in, unsigned len) {
207
- unsigned i;
208
- for (i = 0; i < len; ++i) {
204
+ static void flip_endian(u8 *out, const u8 *in, size_t len) {
205
+ for (size_t i = 0; i < len; ++i) {
209
206
  out[i] = in[len - 1 - i];
210
207
  }
211
208
  }
@@ -215,7 +212,7 @@ static int BN_to_felem(felem out, const BIGNUM *bn) {
215
212
  /* BN_bn2bin eats leading zeroes */
216
213
  felem_bytearray b_out;
217
214
  memset(b_out, 0, sizeof(b_out));
218
- unsigned num_bytes = BN_num_bytes(bn);
215
+ size_t num_bytes = BN_num_bytes(bn);
219
216
  if (num_bytes > sizeof(b_out) ||
220
217
  BN_is_negative(bn)) {
221
218
  OPENSSL_PUT_ERROR(EC, EC_R_BIGNUM_OUT_OF_RANGE);
@@ -242,13 +239,6 @@ static BIGNUM *felem_to_BN(BIGNUM *out, const felem in) {
242
239
  * expected to be correct in general - e.g., multiplication with a large scalar
243
240
  * will cause an overflow. */
244
241
 
245
- static void felem_one(felem out) {
246
- out[0] = 1;
247
- out[1] = 0;
248
- out[2] = 0;
249
- out[3] = 0;
250
- }
251
-
252
242
  static void felem_assign(felem out, const felem in) {
253
243
  out[0] = in[0];
254
244
  out[1] = in[1];
@@ -460,18 +450,6 @@ static void felem_reduce(felem out, const widefelem in) {
460
450
  out[3] = output[3];
461
451
  }
462
452
 
463
- static void felem_square_reduce(felem out, const felem in) {
464
- widefelem tmp;
465
- felem_square(tmp, in);
466
- felem_reduce(out, tmp);
467
- }
468
-
469
- static void felem_mul_reduce(felem out, const felem in1, const felem in2) {
470
- widefelem tmp;
471
- felem_mul(tmp, in1, in2);
472
- felem_reduce(out, tmp);
473
- }
474
-
475
453
  /* Reduce to unique minimal representation.
476
454
  * Requires 0 <= in < 2*p (always call felem_reduce first) */
477
455
  static void felem_contract(felem out, const felem in) {
@@ -539,16 +517,11 @@ static limb felem_is_zero(const felem in) {
539
517
  return (zero | two224m96p1 | two225m97p2);
540
518
  }
541
519
 
542
- static limb felem_is_zero_int(const felem in) {
543
- return (int)(felem_is_zero(in) & ((limb)1));
544
- }
545
-
546
520
  /* Invert a field element */
547
521
  /* Computation chain copied from djb's code */
548
522
  static void felem_inv(felem out, const felem in) {
549
523
  felem ftmp, ftmp2, ftmp3, ftmp4;
550
524
  widefelem tmp;
551
- unsigned i;
552
525
 
553
526
  felem_square(tmp, in);
554
527
  felem_reduce(ftmp, tmp); /* 2 */
@@ -568,7 +541,7 @@ static void felem_inv(felem out, const felem in) {
568
541
  felem_reduce(ftmp, tmp); /* 2^6 - 1 */
569
542
  felem_square(tmp, ftmp);
570
543
  felem_reduce(ftmp2, tmp); /* 2^7 - 2 */
571
- for (i = 0; i < 5; ++i) { /* 2^12 - 2^6 */
544
+ for (size_t i = 0; i < 5; ++i) { /* 2^12 - 2^6 */
572
545
  felem_square(tmp, ftmp2);
573
546
  felem_reduce(ftmp2, tmp);
574
547
  }
@@ -576,7 +549,7 @@ static void felem_inv(felem out, const felem in) {
576
549
  felem_reduce(ftmp2, tmp); /* 2^12 - 1 */
577
550
  felem_square(tmp, ftmp2);
578
551
  felem_reduce(ftmp3, tmp); /* 2^13 - 2 */
579
- for (i = 0; i < 11; ++i) {/* 2^24 - 2^12 */
552
+ for (size_t i = 0; i < 11; ++i) {/* 2^24 - 2^12 */
580
553
  felem_square(tmp, ftmp3);
581
554
  felem_reduce(ftmp3, tmp);
582
555
  }
@@ -584,7 +557,7 @@ static void felem_inv(felem out, const felem in) {
584
557
  felem_reduce(ftmp2, tmp); /* 2^24 - 1 */
585
558
  felem_square(tmp, ftmp2);
586
559
  felem_reduce(ftmp3, tmp); /* 2^25 - 2 */
587
- for (i = 0; i < 23; ++i) {/* 2^48 - 2^24 */
560
+ for (size_t i = 0; i < 23; ++i) {/* 2^48 - 2^24 */
588
561
  felem_square(tmp, ftmp3);
589
562
  felem_reduce(ftmp3, tmp);
590
563
  }
@@ -592,7 +565,7 @@ static void felem_inv(felem out, const felem in) {
592
565
  felem_reduce(ftmp3, tmp); /* 2^48 - 1 */
593
566
  felem_square(tmp, ftmp3);
594
567
  felem_reduce(ftmp4, tmp); /* 2^49 - 2 */
595
- for (i = 0; i < 47; ++i) {/* 2^96 - 2^48 */
568
+ for (size_t i = 0; i < 47; ++i) {/* 2^96 - 2^48 */
596
569
  felem_square(tmp, ftmp4);
597
570
  felem_reduce(ftmp4, tmp);
598
571
  }
@@ -600,13 +573,13 @@ static void felem_inv(felem out, const felem in) {
600
573
  felem_reduce(ftmp3, tmp); /* 2^96 - 1 */
601
574
  felem_square(tmp, ftmp3);
602
575
  felem_reduce(ftmp4, tmp); /* 2^97 - 2 */
603
- for (i = 0; i < 23; ++i) {/* 2^120 - 2^24 */
576
+ for (size_t i = 0; i < 23; ++i) {/* 2^120 - 2^24 */
604
577
  felem_square(tmp, ftmp4);
605
578
  felem_reduce(ftmp4, tmp);
606
579
  }
607
580
  felem_mul(tmp, ftmp2, ftmp4);
608
581
  felem_reduce(ftmp2, tmp); /* 2^120 - 1 */
609
- for (i = 0; i < 6; ++i) { /* 2^126 - 2^6 */
582
+ for (size_t i = 0; i < 6; ++i) { /* 2^126 - 2^6 */
610
583
  felem_square(tmp, ftmp2);
611
584
  felem_reduce(ftmp2, tmp);
612
585
  }
@@ -616,7 +589,7 @@ static void felem_inv(felem out, const felem in) {
616
589
  felem_reduce(ftmp, tmp); /* 2^127 - 2 */
617
590
  felem_mul(tmp, ftmp, in);
618
591
  felem_reduce(ftmp, tmp); /* 2^127 - 1 */
619
- for (i = 0; i < 97; ++i) {/* 2^224 - 2^97 */
592
+ for (size_t i = 0; i < 97; ++i) {/* 2^224 - 2^97 */
620
593
  felem_square(tmp, ftmp);
621
594
  felem_reduce(ftmp, tmp);
622
595
  }
@@ -628,10 +601,9 @@ static void felem_inv(felem out, const felem in) {
628
601
  * if icopy == 1, copy in to out,
629
602
  * if icopy == 0, copy out to itself. */
630
603
  static void copy_conditional(felem out, const felem in, limb icopy) {
631
- unsigned i;
632
604
  /* icopy is a (64-bit) 0 or 1, so copy is either all-zero or all-one */
633
605
  const limb copy = -icopy;
634
- for (i = 0; i < 4; ++i) {
606
+ for (size_t i = 0; i < 4; ++i) {
635
607
  const limb tmp = copy & (in[i] ^ out[i]);
636
608
  out[i] ^= tmp;
637
609
  }
@@ -885,13 +857,12 @@ static void point_add(felem x3, felem y3, felem z3, const felem x1,
885
857
 
886
858
  /* select_point selects the |idx|th point from a precomputation table and
887
859
  * copies it to out. */
888
- static void select_point(const u64 idx, unsigned int size,
860
+ static void select_point(const u64 idx, size_t size,
889
861
  const felem pre_comp[/*size*/][3], felem out[3]) {
890
- unsigned i, j;
891
862
  limb *outlimbs = &out[0][0];
892
863
  memset(outlimbs, 0, 3 * sizeof(felem));
893
864
 
894
- for (i = 0; i < size; i++) {
865
+ for (size_t i = 0; i < size; i++) {
895
866
  const limb *inlimbs = &pre_comp[i][0][0];
896
867
  u64 mask = i ^ idx;
897
868
  mask |= mask >> 4;
@@ -899,14 +870,14 @@ static void select_point(const u64 idx, unsigned int size,
899
870
  mask |= mask >> 1;
900
871
  mask &= 1;
901
872
  mask--;
902
- for (j = 0; j < 4 * 3; j++) {
873
+ for (size_t j = 0; j < 4 * 3; j++) {
903
874
  outlimbs[j] |= inlimbs[j] & mask;
904
875
  }
905
876
  }
906
877
  }
907
878
 
908
879
  /* get_bit returns the |i|th bit in |in| */
909
- static char get_bit(const felem_bytearray in, unsigned i) {
880
+ static char get_bit(const felem_bytearray in, size_t i) {
910
881
  if (i >= 224) {
911
882
  return 0;
912
883
  }
@@ -920,11 +891,8 @@ static char get_bit(const felem_bytearray in, unsigned i) {
920
891
  * Output point (X, Y, Z) is stored in x_out, y_out, z_out */
921
892
  static void batch_mul(felem x_out, felem y_out, felem z_out,
922
893
  const felem_bytearray scalars[],
923
- const unsigned num_points, const u8 *g_scalar,
924
- const int mixed, const felem pre_comp[][17][3]) {
925
- int i, skip;
926
- unsigned num;
927
- unsigned gen_mul = (g_scalar != NULL);
894
+ const size_t num_points, const u8 *g_scalar,
895
+ const felem pre_comp[][17][3]) {
928
896
  felem nq[3], tmp[4];
929
897
  u64 bits;
930
898
  u8 sign, digit;
@@ -935,15 +903,16 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
935
903
  /* Loop over all scalars msb-to-lsb, interleaving additions
936
904
  * of multiples of the generator (two in each of the last 28 rounds)
937
905
  * and additions of other points multiples (every 5th round). */
938
- skip = 1; /* save two point operations in the first round */
939
- for (i = (num_points ? 220 : 27); i >= 0; --i) {
906
+ int skip = 1; /* save two point operations in the first round */
907
+ size_t i = num_points != 0 ? 220 : 27;
908
+ for (;;) {
940
909
  /* double */
941
910
  if (!skip) {
942
911
  point_double(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2]);
943
912
  }
944
913
 
945
914
  /* add multiples of the generator */
946
- if (gen_mul && (i <= 27)) {
915
+ if (g_scalar != NULL && i <= 27) {
947
916
  /* first, look 28 bits upwards */
948
917
  bits = get_bit(g_scalar, i + 196) << 3;
949
918
  bits |= get_bit(g_scalar, i + 140) << 2;
@@ -972,8 +941,9 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
972
941
  }
973
942
 
974
943
  /* do other additions every 5 doublings */
975
- if (num_points && (i % 5 == 0)) {
944
+ if (num_points != 0 && i % 5 == 0) {
976
945
  /* loop over all scalars */
946
+ size_t num;
977
947
  for (num = 0; num < num_points; ++num) {
978
948
  bits = get_bit(scalars[num], i + 4) << 5;
979
949
  bits |= get_bit(scalars[num], i + 3) << 4;
@@ -989,14 +959,19 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
989
959
  copy_conditional(tmp[1], tmp[3], sign);
990
960
 
991
961
  if (!skip) {
992
- point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], mixed, tmp[0],
993
- tmp[1], tmp[2]);
962
+ point_add(nq[0], nq[1], nq[2], nq[0], nq[1], nq[2], 0 /* mixed */,
963
+ tmp[0], tmp[1], tmp[2]);
994
964
  } else {
995
965
  memcpy(nq, tmp, 3 * sizeof(felem));
996
966
  skip = 0;
997
967
  }
998
968
  }
999
969
  }
970
+
971
+ if (i == 0) {
972
+ break;
973
+ }
974
+ --i;
1000
975
  }
1001
976
  felem_assign(x_out, nq[0]);
1002
977
  felem_assign(y_out, nq[1]);
@@ -1005,10 +980,10 @@ static void batch_mul(felem x_out, felem y_out, felem z_out,
1005
980
 
1006
981
  /* Takes the Jacobian coordinates (X, Y, Z) of a point and returns
1007
982
  * (X', Y') = (X/Z^2, Y/Z^3) */
1008
- int ec_GFp_nistp224_point_get_affine_coordinates(const EC_GROUP *group,
1009
- const EC_POINT *point,
1010
- BIGNUM *x, BIGNUM *y,
1011
- BN_CTX *ctx) {
983
+ static int ec_GFp_nistp224_point_get_affine_coordinates(const EC_GROUP *group,
984
+ const EC_POINT *point,
985
+ BIGNUM *x, BIGNUM *y,
986
+ BN_CTX *ctx) {
1012
987
  felem z1, z2, x_in, y_in, x_out, y_out;
1013
988
  widefelem tmp;
1014
989
 
@@ -1047,23 +1022,12 @@ int ec_GFp_nistp224_point_get_affine_coordinates(const EC_GROUP *group,
1047
1022
  return 1;
1048
1023
  }
1049
1024
 
1050
- static void make_points_affine(size_t num, felem points[/*num*/][3],
1051
- felem tmp_felems[/*num+1*/]) {
1052
- /* Runs in constant time, unless an input is the point at infinity
1053
- * (which normally shouldn't happen). */
1054
- ec_GFp_nistp_points_make_affine_internal(
1055
- num, points, sizeof(felem), tmp_felems, (void (*)(void *))felem_one,
1056
- (int (*)(const void *))felem_is_zero_int,
1057
- (void (*)(void *, const void *))felem_assign,
1058
- (void (*)(void *, const void *))felem_square_reduce,
1059
- (void (*)(void *, const void *, const void *))felem_mul_reduce,
1060
- (void (*)(void *, const void *))felem_inv,
1061
- (void (*)(void *, const void *))felem_contract);
1062
- }
1063
-
1064
- int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
1065
- const BIGNUM *g_scalar, const EC_POINT *p_,
1066
- const BIGNUM *p_scalar_, BN_CTX *ctx) {
1025
+ static int ec_GFp_nistp224_points_mul(const EC_GROUP *group,
1026
+ EC_POINT *r,
1027
+ const BIGNUM *g_scalar,
1028
+ const EC_POINT *p_,
1029
+ const BIGNUM *p_scalar_,
1030
+ BN_CTX *ctx) {
1067
1031
  /* TODO: This function used to take |points| and |scalars| as arrays of
1068
1032
  * |num| elements. The code below should be simplified to work in terms of
1069
1033
  * |p_| and |p_scalar_|. */
@@ -1072,17 +1036,12 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
1072
1036
  BIGNUM const *const *scalars = p_ != NULL ? &p_scalar_ : NULL;
1073
1037
 
1074
1038
  int ret = 0;
1075
- int j;
1076
- unsigned i;
1077
- int mixed = 0;
1078
1039
  BN_CTX *new_ctx = NULL;
1079
1040
  BIGNUM *x, *y, *z, *tmp_scalar;
1080
1041
  felem_bytearray g_secret;
1081
1042
  felem_bytearray *secrets = NULL;
1082
1043
  felem(*pre_comp)[17][3] = NULL;
1083
- felem *tmp_felems = NULL;
1084
1044
  felem_bytearray tmp;
1085
- unsigned num_bytes;
1086
1045
  size_t num_points = num;
1087
1046
  felem x_in, y_in, z_in, x_out, y_out, z_out;
1088
1047
  const EC_POINT *p = NULL;
@@ -1105,19 +1064,10 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
1105
1064
  }
1106
1065
 
1107
1066
  if (num_points > 0) {
1108
- if (num_points >= 3) {
1109
- /* unless we precompute multiples for just one or two points,
1110
- * converting those into affine form is time well spent */
1111
- mixed = 1;
1112
- }
1113
1067
  secrets = OPENSSL_malloc(num_points * sizeof(felem_bytearray));
1114
1068
  pre_comp = OPENSSL_malloc(num_points * sizeof(felem[17][3]));
1115
- if (mixed) {
1116
- tmp_felems = OPENSSL_malloc((num_points * 17 + 1) * sizeof(felem));
1117
- }
1118
1069
  if (secrets == NULL ||
1119
- pre_comp == NULL ||
1120
- (mixed && tmp_felems == NULL)) {
1070
+ pre_comp == NULL) {
1121
1071
  OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
1122
1072
  goto err;
1123
1073
  }
@@ -1126,7 +1076,7 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
1126
1076
  * i.e., they contribute nothing to the linear combination */
1127
1077
  memset(secrets, 0, num_points * sizeof(felem_bytearray));
1128
1078
  memset(pre_comp, 0, num_points * 17 * 3 * sizeof(felem));
1129
- for (i = 0; i < num_points; ++i) {
1079
+ for (size_t i = 0; i < num_points; ++i) {
1130
1080
  if (i == num) {
1131
1081
  /* the generator */
1132
1082
  p = EC_GROUP_get0_generator(group);
@@ -1138,6 +1088,7 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
1138
1088
  }
1139
1089
 
1140
1090
  if (p_scalar != NULL && p != NULL) {
1091
+ size_t num_bytes;
1141
1092
  /* reduce g_scalar to 0 <= g_scalar < 2^224 */
1142
1093
  if (BN_num_bits(p_scalar) > 224 || BN_is_negative(p_scalar)) {
1143
1094
  /* this is an unusual input, and we don't guarantee
@@ -1163,7 +1114,7 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
1163
1114
  felem_assign(pre_comp[i][1][1], y_out);
1164
1115
  felem_assign(pre_comp[i][1][2], z_out);
1165
1116
 
1166
- for (j = 2; j <= 16; ++j) {
1117
+ for (size_t j = 2; j <= 16; ++j) {
1167
1118
  if (j & 1) {
1168
1119
  point_add(pre_comp[i][j][0], pre_comp[i][j][1], pre_comp[i][j][2],
1169
1120
  pre_comp[i][1][0], pre_comp[i][1][1], pre_comp[i][1][2],
@@ -1177,14 +1128,11 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
1177
1128
  }
1178
1129
  }
1179
1130
  }
1180
-
1181
- if (mixed) {
1182
- make_points_affine(num_points * 17, pre_comp[0], tmp_felems);
1183
- }
1184
1131
  }
1185
1132
 
1186
1133
  if (g_scalar != NULL) {
1187
1134
  memset(g_secret, 0, sizeof(g_secret));
1135
+ size_t num_bytes;
1188
1136
  /* reduce g_scalar to 0 <= g_scalar < 2^224 */
1189
1137
  if (BN_num_bits(g_scalar) > 224 || BN_is_negative(g_scalar)) {
1190
1138
  /* this is an unusual input, and we don't guarantee constant-timeness */
@@ -1200,7 +1148,7 @@ int ec_GFp_nistp224_points_mul(const EC_GROUP *group, EC_POINT *r,
1200
1148
  flip_endian(g_secret, tmp, num_bytes);
1201
1149
  }
1202
1150
  batch_mul(x_out, y_out, z_out, (const felem_bytearray(*))secrets,
1203
- num_points, g_scalar != NULL ? g_secret : NULL, mixed,
1151
+ num_points, g_scalar != NULL ? g_secret : NULL,
1204
1152
  (const felem(*)[17][3])pre_comp);
1205
1153
 
1206
1154
  /* reduce the output to its unique minimal representation */
@@ -1220,25 +1168,20 @@ err:
1220
1168
  BN_CTX_free(new_ctx);
1221
1169
  OPENSSL_free(secrets);
1222
1170
  OPENSSL_free(pre_comp);
1223
- OPENSSL_free(tmp_felems);
1224
1171
  return ret;
1225
1172
  }
1226
1173
 
1227
- const EC_METHOD *EC_GFp_nistp224_method(void) {
1228
- static const EC_METHOD ret = {ec_GFp_simple_group_init,
1229
- ec_GFp_simple_group_finish,
1230
- ec_GFp_simple_group_copy,
1231
- ec_GFp_simple_group_set_curve,
1232
- ec_GFp_nistp224_point_get_affine_coordinates,
1233
- ec_GFp_nistp224_points_mul,
1234
- 0 /* check_pub_key_order */,
1235
- ec_GFp_simple_field_mul,
1236
- ec_GFp_simple_field_sqr,
1237
- 0 /* field_encode */,
1238
- 0 /* field_decode */,
1239
- 0 /* field_set_to_one */};
1240
-
1241
- return &ret;
1242
- }
1174
+ const EC_METHOD EC_GFp_nistp224_method = {
1175
+ ec_GFp_simple_group_init,
1176
+ ec_GFp_simple_group_finish,
1177
+ ec_GFp_simple_group_copy,
1178
+ ec_GFp_simple_group_set_curve,
1179
+ ec_GFp_nistp224_point_get_affine_coordinates,
1180
+ ec_GFp_nistp224_points_mul,
1181
+ ec_GFp_simple_field_mul,
1182
+ ec_GFp_simple_field_sqr,
1183
+ NULL /* field_encode */,
1184
+ NULL /* field_decode */,
1185
+ };
1243
1186
 
1244
1187
  #endif /* 64_BIT && !WINDOWS && !SMALL */