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
@@ -54,20 +54,28 @@ typedef struct {
54
54
 
55
55
  typedef P256_POINT_AFFINE PRECOMP256_ROW[64];
56
56
 
57
- /* Functions implemented in assembly */
58
-
59
- /* Modular neg: res = -a mod P */
57
+ /* Arithmetic on field elements using Almost Montgomery Multiplication. The
58
+ * "almost" means, in particular, that the inputs and outputs of these
59
+ * functions are in the range [0, 2**BN_BITS2), not [0, P). Only
60
+ * |ecp_nistz256_from_mont| outputs a fully reduced value in [0, P). Almost
61
+ * Montgomery Arithmetic is described clearly in "Efficient Software
62
+ * Implementations of Modular Exponentiation" by Shay Gueron. */
63
+
64
+ /* Modular neg: res = -a mod P, where res is not fully reduced. */
60
65
  void ecp_nistz256_neg(BN_ULONG res[P256_LIMBS], const BN_ULONG a[P256_LIMBS]);
61
- /* Montgomery mul: res = a*b*2^-256 mod P */
66
+ /* Montgomery mul: res = a*b*2^-256 mod P, where res is not fully reduced. */
62
67
  void ecp_nistz256_mul_mont(BN_ULONG res[P256_LIMBS],
63
68
  const BN_ULONG a[P256_LIMBS],
64
69
  const BN_ULONG b[P256_LIMBS]);
65
- /* Montgomery sqr: res = a*a*2^-256 mod P */
70
+ /* Montgomery sqr: res = a*a*2^-256 mod P, where res is not fully reduced. */
66
71
  void ecp_nistz256_sqr_mont(BN_ULONG res[P256_LIMBS],
67
72
  const BN_ULONG a[P256_LIMBS]);
68
- /* Convert a number from Montgomery domain, by multiplying with 1 */
73
+ /* Convert a number from Montgomery domain, by multiplying with 1, where res
74
+ * will be fully reduced mod P. */
69
75
  void ecp_nistz256_from_mont(BN_ULONG res[P256_LIMBS],
70
76
  const BN_ULONG in[P256_LIMBS]);
77
+
78
+
71
79
  /* Functions that perform constant time access to the precomputed tables */
72
80
  void ecp_nistz256_select_w5(P256_POINT *val, const P256_POINT *in_t, int index);
73
81
  void ecp_nistz256_select_w7(P256_POINT_AFFINE *val,
@@ -205,9 +213,7 @@ static void ecp_nistz256_mod_inverse(BN_ULONG r[P256_LIMBS],
205
213
 
206
214
  ecp_nistz256_sqr_mont(res, res);
207
215
  ecp_nistz256_sqr_mont(res, res);
208
- ecp_nistz256_mul_mont(res, res, in);
209
-
210
- memcpy(r, res, sizeof(res));
216
+ ecp_nistz256_mul_mont(r, res, in);
211
217
  }
212
218
 
213
219
  /* ecp_nistz256_bignum_to_field_elem copies the contents of |in| to |out| and
@@ -314,7 +320,7 @@ static int ecp_nistz256_windowed_mul(const EC_GROUP *group, P256_POINT *r,
314
320
  ecp_nistz256_point_double(&row[10 - 1], &row[5 - 1]);
315
321
  ecp_nistz256_point_add(&row[15 - 1], &row[14 - 1], &row[1 - 1]);
316
322
  ecp_nistz256_point_add(&row[11 - 1], &row[10 - 1], &row[1 - 1]);
317
- ecp_nistz256_point_add(&row[16 - 1], &row[15 - 1], &row[1 - 1]);
323
+ ecp_nistz256_point_double(&row[16 - 1], &row[8 - 1]);
318
324
 
319
325
  BN_ULONG tmp[P256_LIMBS];
320
326
  alignas(32) P256_POINT h;
@@ -390,17 +396,6 @@ static int ecp_nistz256_points_mul(
390
396
  BN_CTX *new_ctx = NULL;
391
397
  int ctx_started = 0;
392
398
 
393
- /* Need 256 bits for space for all coordinates. */
394
- if (bn_wexpand(&r->X, P256_LIMBS) == NULL ||
395
- bn_wexpand(&r->Y, P256_LIMBS) == NULL ||
396
- bn_wexpand(&r->Z, P256_LIMBS) == NULL) {
397
- OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
398
- goto err;
399
- }
400
- r->X.top = P256_LIMBS;
401
- r->Y.top = P256_LIMBS;
402
- r->Z.top = P256_LIMBS;
403
-
404
399
  if (g_scalar != NULL) {
405
400
  if (BN_num_bits(g_scalar) > 256 || BN_is_negative(g_scalar)) {
406
401
  if (ctx == NULL) {
@@ -494,15 +489,12 @@ static int ecp_nistz256_points_mul(
494
489
  }
495
490
  }
496
491
 
497
- memcpy(r->X.d, p.p.X, sizeof(p.p.X));
498
- memcpy(r->Y.d, p.p.Y, sizeof(p.p.Y));
499
- memcpy(r->Z.d, p.p.Z, sizeof(p.p.Z));
500
-
501
492
  /* Not constant-time, but we're only operating on the public output. */
502
- bn_correct_top(&r->X);
503
- bn_correct_top(&r->Y);
504
- bn_correct_top(&r->Z);
505
- r->Z_is_one = BN_is_one(&r->Z);
493
+ if (!bn_set_words(&r->X, p.p.X, P256_LIMBS) ||
494
+ !bn_set_words(&r->Y, p.p.Y, P256_LIMBS) ||
495
+ !bn_set_words(&r->Z, p.p.Z, P256_LIMBS)) {
496
+ return 0;
497
+ }
506
498
 
507
499
  ret = 1;
508
500
 
@@ -518,8 +510,6 @@ static int ecp_nistz256_get_affine(const EC_GROUP *group, const EC_POINT *point,
518
510
  BIGNUM *x, BIGNUM *y, BN_CTX *ctx) {
519
511
  BN_ULONG z_inv2[P256_LIMBS];
520
512
  BN_ULONG z_inv3[P256_LIMBS];
521
- BN_ULONG x_aff[P256_LIMBS];
522
- BN_ULONG y_aff[P256_LIMBS];
523
513
  BN_ULONG point_x[P256_LIMBS], point_y[P256_LIMBS], point_z[P256_LIMBS];
524
514
 
525
515
  if (EC_POINT_is_at_infinity(group, point)) {
@@ -536,51 +526,49 @@ static int ecp_nistz256_get_affine(const EC_GROUP *group, const EC_POINT *point,
536
526
 
537
527
  ecp_nistz256_mod_inverse(z_inv3, point_z);
538
528
  ecp_nistz256_sqr_mont(z_inv2, z_inv3);
539
- ecp_nistz256_mul_mont(x_aff, z_inv2, point_x);
529
+
530
+ /* Unlike the |BN_mod_mul_montgomery|-based implementation, we cannot factor
531
+ * out the two calls to |ecp_nistz256_from_mont| into one call, because
532
+ * |ecp_nistz256_from_mont| must be the last operation to ensure that the
533
+ * result is fully reduced mod P. */
540
534
 
541
535
  if (x != NULL) {
542
- if (bn_wexpand(x, P256_LIMBS) == NULL) {
536
+ BN_ULONG x_aff[P256_LIMBS];
537
+ ecp_nistz256_mul_mont(x_aff, z_inv2, point_x);
538
+ ecp_nistz256_from_mont(x_aff, x_aff);
539
+ if (!bn_set_words(x, x_aff, P256_LIMBS)) {
543
540
  OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
544
541
  return 0;
545
542
  }
546
- x->top = P256_LIMBS;
547
- ecp_nistz256_from_mont(x->d, x_aff);
548
- bn_correct_top(x);
549
543
  }
550
544
 
551
545
  if (y != NULL) {
546
+ BN_ULONG y_aff[P256_LIMBS];
552
547
  ecp_nistz256_mul_mont(z_inv3, z_inv3, z_inv2);
553
548
  ecp_nistz256_mul_mont(y_aff, z_inv3, point_y);
554
- if (bn_wexpand(y, P256_LIMBS) == NULL) {
549
+ ecp_nistz256_from_mont(y_aff, y_aff);
550
+ if (!bn_set_words(y, y_aff, P256_LIMBS)) {
555
551
  OPENSSL_PUT_ERROR(EC, ERR_R_MALLOC_FAILURE);
556
552
  return 0;
557
553
  }
558
- y->top = P256_LIMBS;
559
- ecp_nistz256_from_mont(y->d, y_aff);
560
- bn_correct_top(y);
561
554
  }
562
555
 
563
556
  return 1;
564
557
  }
565
558
 
566
- const EC_METHOD *EC_GFp_nistz256_method(void) {
567
- static const EC_METHOD ret = {
568
- ec_GFp_mont_group_init,
569
- ec_GFp_mont_group_finish,
570
- ec_GFp_mont_group_copy,
571
- ec_GFp_mont_group_set_curve,
572
- ecp_nistz256_get_affine,
573
- ecp_nistz256_points_mul,
574
- 0 /* check_pub_key_order */,
575
- ec_GFp_mont_field_mul,
576
- ec_GFp_mont_field_sqr,
577
- ec_GFp_mont_field_encode,
578
- ec_GFp_mont_field_decode,
579
- ec_GFp_mont_field_set_to_one,
580
- };
581
-
582
- return &ret;
583
- }
559
+
560
+ const EC_METHOD EC_GFp_nistz256_method = {
561
+ ec_GFp_mont_group_init,
562
+ ec_GFp_mont_group_finish,
563
+ ec_GFp_mont_group_copy,
564
+ ec_GFp_mont_group_set_curve,
565
+ ecp_nistz256_get_affine,
566
+ ecp_nistz256_points_mul,
567
+ ec_GFp_mont_field_mul,
568
+ ec_GFp_mont_field_sqr,
569
+ ec_GFp_mont_field_encode,
570
+ ec_GFp_mont_field_decode,
571
+ };
584
572
 
585
573
  #endif /* !defined(OPENSSL_NO_ASM) && defined(OPENSSL_X86_64) && \
586
574
  !defined(OPENSSL_SMALL) */
@@ -82,16 +82,16 @@
82
82
  * field_sqr methods will be used for multiplication, and field_encode and
83
83
  * field_decode (if defined) will be used for converting between
84
84
  * representations.
85
-
86
- * Functions ec_GFp_simple_points_make_affine() and
87
- * ec_GFp_simple_point_get_affine_coordinates() specifically assume that if a
88
- * non-trivial representation is used, it is a Montgomery representation (i.e.
89
- * 'encoding' means multiplying by some factor R). */
85
+ *
86
+ * Functions here specifically assume that if a non-trivial representation is
87
+ * used, it is a Montgomery representation (i.e. 'encoding' means multiplying
88
+ * by some factor R). */
90
89
 
91
90
  int ec_GFp_simple_group_init(EC_GROUP *group) {
92
91
  BN_init(&group->field);
93
92
  BN_init(&group->a);
94
93
  BN_init(&group->b);
94
+ BN_init(&group->one);
95
95
  group->a_is_minus3 = 0;
96
96
  return 1;
97
97
  }
@@ -100,12 +100,14 @@ void ec_GFp_simple_group_finish(EC_GROUP *group) {
100
100
  BN_free(&group->field);
101
101
  BN_free(&group->a);
102
102
  BN_free(&group->b);
103
+ BN_free(&group->one);
103
104
  }
104
105
 
105
106
  int ec_GFp_simple_group_copy(EC_GROUP *dest, const EC_GROUP *src) {
106
107
  if (!BN_copy(&dest->field, &src->field) ||
107
108
  !BN_copy(&dest->a, &src->a) ||
108
- !BN_copy(&dest->b, &src->b)) {
109
+ !BN_copy(&dest->b, &src->b) ||
110
+ !BN_copy(&dest->one, &src->one)) {
109
111
  return 0;
110
112
  }
111
113
 
@@ -172,6 +174,14 @@ int ec_GFp_simple_group_set_curve(EC_GROUP *group, const BIGNUM *p,
172
174
  }
173
175
  group->a_is_minus3 = (0 == BN_cmp(tmp_a, &group->field));
174
176
 
177
+ if (group->meth->field_encode != NULL) {
178
+ if (!group->meth->field_encode(group, &group->one, BN_value_one(), ctx)) {
179
+ goto err;
180
+ }
181
+ } else if (!BN_copy(&group->one, BN_value_one())) {
182
+ goto err;
183
+ }
184
+
175
185
  ret = 1;
176
186
 
177
187
  err:
@@ -228,7 +238,6 @@ int ec_GFp_simple_point_init(EC_POINT *point) {
228
238
  BN_init(&point->X);
229
239
  BN_init(&point->Y);
230
240
  BN_init(&point->Z);
231
- point->Z_is_one = 0;
232
241
 
233
242
  return 1;
234
243
  }
@@ -243,7 +252,6 @@ void ec_GFp_simple_point_clear_finish(EC_POINT *point) {
243
252
  BN_clear_free(&point->X);
244
253
  BN_clear_free(&point->Y);
245
254
  BN_clear_free(&point->Z);
246
- point->Z_is_one = 0;
247
255
  }
248
256
 
249
257
  int ec_GFp_simple_point_copy(EC_POINT *dest, const EC_POINT *src) {
@@ -252,18 +260,32 @@ int ec_GFp_simple_point_copy(EC_POINT *dest, const EC_POINT *src) {
252
260
  !BN_copy(&dest->Z, &src->Z)) {
253
261
  return 0;
254
262
  }
255
- dest->Z_is_one = src->Z_is_one;
256
263
 
257
264
  return 1;
258
265
  }
259
266
 
260
267
  int ec_GFp_simple_point_set_to_infinity(const EC_GROUP *group,
261
268
  EC_POINT *point) {
262
- point->Z_is_one = 0;
263
269
  BN_zero(&point->Z);
264
270
  return 1;
265
271
  }
266
272
 
273
+ static int set_Jprojective_coordinate_GFp(const EC_GROUP *group, BIGNUM *out,
274
+ const BIGNUM *in, BN_CTX *ctx) {
275
+ if (in == NULL) {
276
+ return 1;
277
+ }
278
+ if (BN_is_negative(in) ||
279
+ BN_cmp(in, &group->field) >= 0) {
280
+ OPENSSL_PUT_ERROR(EC, EC_R_COORDINATES_OUT_OF_RANGE);
281
+ return 0;
282
+ }
283
+ if (group->meth->field_encode) {
284
+ return group->meth->field_encode(group, out, in, ctx);
285
+ }
286
+ return BN_copy(out, in) != NULL;
287
+ }
288
+
267
289
  int ec_GFp_simple_set_Jprojective_coordinates_GFp(
268
290
  const EC_GROUP *group, EC_POINT *point, const BIGNUM *x, const BIGNUM *y,
269
291
  const BIGNUM *z, BN_CTX *ctx) {
@@ -277,43 +299,10 @@ int ec_GFp_simple_set_Jprojective_coordinates_GFp(
277
299
  }
278
300
  }
279
301
 
280
- if (x != NULL) {
281
- if (!BN_nnmod(&point->X, x, &group->field, ctx)) {
282
- goto err;
283
- }
284
- if (group->meth->field_encode &&
285
- !group->meth->field_encode(group, &point->X, &point->X, ctx)) {
286
- goto err;
287
- }
288
- }
289
-
290
- if (y != NULL) {
291
- if (!BN_nnmod(&point->Y, y, &group->field, ctx)) {
292
- goto err;
293
- }
294
- if (group->meth->field_encode &&
295
- !group->meth->field_encode(group, &point->Y, &point->Y, ctx)) {
296
- goto err;
297
- }
298
- }
299
-
300
- if (z != NULL) {
301
- int Z_is_one;
302
-
303
- if (!BN_nnmod(&point->Z, z, &group->field, ctx)) {
304
- goto err;
305
- }
306
- Z_is_one = BN_is_one(&point->Z);
307
- if (group->meth->field_encode) {
308
- if (Z_is_one && (group->meth->field_set_to_one != 0)) {
309
- if (!group->meth->field_set_to_one(group, &point->Z, ctx)) {
310
- goto err;
311
- }
312
- } else if (!group->meth->field_encode(group, &point->Z, &point->Z, ctx)) {
313
- goto err;
314
- }
315
- }
316
- point->Z_is_one = Z_is_one;
302
+ if (!set_Jprojective_coordinate_GFp(group, &point->X, x, ctx) ||
303
+ !set_Jprojective_coordinate_GFp(group, &point->Y, y, ctx) ||
304
+ !set_Jprojective_coordinate_GFp(group, &point->Z, z, ctx)) {
305
+ goto err;
317
306
  }
318
307
 
319
308
  ret = 1;
@@ -379,109 +368,6 @@ int ec_GFp_simple_point_set_affine_coordinates(const EC_GROUP *group,
379
368
  BN_value_one(), ctx);
380
369
  }
381
370
 
382
- int ec_GFp_simple_point_get_affine_coordinates(const EC_GROUP *group,
383
- const EC_POINT *point, BIGNUM *x,
384
- BIGNUM *y, BN_CTX *ctx) {
385
- BN_CTX *new_ctx = NULL;
386
- BIGNUM *Z, *Z_1, *Z_2, *Z_3;
387
- const BIGNUM *Z_;
388
- int ret = 0;
389
-
390
- if (EC_POINT_is_at_infinity(group, point)) {
391
- OPENSSL_PUT_ERROR(EC, EC_R_POINT_AT_INFINITY);
392
- return 0;
393
- }
394
-
395
- if (ctx == NULL) {
396
- ctx = new_ctx = BN_CTX_new();
397
- if (ctx == NULL) {
398
- return 0;
399
- }
400
- }
401
-
402
- BN_CTX_start(ctx);
403
- Z = BN_CTX_get(ctx);
404
- Z_1 = BN_CTX_get(ctx);
405
- Z_2 = BN_CTX_get(ctx);
406
- Z_3 = BN_CTX_get(ctx);
407
- if (Z == NULL || Z_1 == NULL || Z_2 == NULL || Z_3 == NULL) {
408
- goto err;
409
- }
410
-
411
- /* transform (X, Y, Z) into (x, y) := (X/Z^2, Y/Z^3) */
412
-
413
- if (group->meth->field_decode) {
414
- if (!group->meth->field_decode(group, Z, &point->Z, ctx)) {
415
- goto err;
416
- }
417
- Z_ = Z;
418
- } else {
419
- Z_ = &point->Z;
420
- }
421
-
422
- if (BN_is_one(Z_)) {
423
- if (group->meth->field_decode) {
424
- if (x != NULL && !group->meth->field_decode(group, x, &point->X, ctx)) {
425
- goto err;
426
- }
427
- if (y != NULL && !group->meth->field_decode(group, y, &point->Y, ctx)) {
428
- goto err;
429
- }
430
- } else {
431
- if (x != NULL && !BN_copy(x, &point->X)) {
432
- goto err;
433
- }
434
- if (y != NULL && !BN_copy(y, &point->Y)) {
435
- goto err;
436
- }
437
- }
438
- } else {
439
- if (!BN_mod_inverse(Z_1, Z_, &group->field, ctx)) {
440
- OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
441
- goto err;
442
- }
443
-
444
- if (group->meth->field_encode == 0) {
445
- /* field_sqr works on standard representation */
446
- if (!group->meth->field_sqr(group, Z_2, Z_1, ctx)) {
447
- goto err;
448
- }
449
- } else if (!BN_mod_sqr(Z_2, Z_1, &group->field, ctx)) {
450
- goto err;
451
- }
452
-
453
- /* in the Montgomery case, field_mul will cancel out Montgomery factor in
454
- * X: */
455
- if (x != NULL && !group->meth->field_mul(group, x, &point->X, Z_2, ctx)) {
456
- goto err;
457
- }
458
-
459
- if (y != NULL) {
460
- if (group->meth->field_encode == 0) {
461
- /* field_mul works on standard representation */
462
- if (!group->meth->field_mul(group, Z_3, Z_2, Z_1, ctx)) {
463
- goto err;
464
- }
465
- } else if (!BN_mod_mul(Z_3, Z_2, Z_1, &group->field, ctx)) {
466
- goto err;
467
- }
468
-
469
- /* in the Montgomery case, field_mul will cancel out Montgomery factor in
470
- * Y: */
471
- if (!group->meth->field_mul(group, y, &point->Y, Z_3, ctx)) {
472
- goto err;
473
- }
474
- }
475
- }
476
-
477
- ret = 1;
478
-
479
- err:
480
- BN_CTX_end(ctx);
481
- BN_CTX_free(new_ctx);
482
- return ret;
483
- }
484
-
485
371
  int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
486
372
  const EC_POINT *b, BN_CTX *ctx) {
487
373
  int (*field_mul)(const EC_GROUP *, BIGNUM *, const BIGNUM *, const BIGNUM *,
@@ -531,7 +417,9 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
531
417
  */
532
418
 
533
419
  /* n1, n2 */
534
- if (b->Z_is_one) {
420
+ int b_Z_is_one = BN_cmp(&b->Z, &group->one) == 0;
421
+
422
+ if (b_Z_is_one) {
535
423
  if (!BN_copy(n1, &a->X) || !BN_copy(n2, &a->Y)) {
536
424
  goto end;
537
425
  }
@@ -552,7 +440,8 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
552
440
  }
553
441
 
554
442
  /* n3, n4 */
555
- if (a->Z_is_one) {
443
+ int a_Z_is_one = BN_cmp(&a->Z, &group->one) == 0;
444
+ if (a_Z_is_one) {
556
445
  if (!BN_copy(n3, &b->X) || !BN_copy(n4, &b->Y)) {
557
446
  goto end;
558
447
  }
@@ -590,7 +479,6 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
590
479
  } else {
591
480
  /* a is the inverse of b */
592
481
  BN_zero(&r->Z);
593
- r->Z_is_one = 0;
594
482
  ret = 1;
595
483
  goto end;
596
484
  }
@@ -605,16 +493,16 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
605
493
  /* 'n8' = n2 + n4 */
606
494
 
607
495
  /* Z_r */
608
- if (a->Z_is_one && b->Z_is_one) {
496
+ if (a_Z_is_one && b_Z_is_one) {
609
497
  if (!BN_copy(&r->Z, n5)) {
610
498
  goto end;
611
499
  }
612
500
  } else {
613
- if (a->Z_is_one) {
501
+ if (a_Z_is_one) {
614
502
  if (!BN_copy(n0, &b->Z)) {
615
503
  goto end;
616
504
  }
617
- } else if (b->Z_is_one) {
505
+ } else if (b_Z_is_one) {
618
506
  if (!BN_copy(n0, &a->Z)) {
619
507
  goto end;
620
508
  }
@@ -625,7 +513,7 @@ int ec_GFp_simple_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
625
513
  goto end;
626
514
  }
627
515
  }
628
- r->Z_is_one = 0;
516
+
629
517
  /* Z_r = Z_a * Z_b * n5 */
630
518
 
631
519
  /* X_r */
@@ -685,7 +573,6 @@ int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
685
573
 
686
574
  if (EC_POINT_is_at_infinity(group, a)) {
687
575
  BN_zero(&r->Z);
688
- r->Z_is_one = 0;
689
576
  return 1;
690
577
  }
691
578
 
@@ -715,7 +602,7 @@ int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
715
602
  */
716
603
 
717
604
  /* n1 */
718
- if (a->Z_is_one) {
605
+ if (BN_cmp(&a->Z, &group->one) == 0) {
719
606
  if (!field_sqr(group, n0, &a->X, ctx) ||
720
607
  !BN_mod_lshift1_quick(n1, n0, p) ||
721
608
  !BN_mod_add_quick(n0, n0, n1, p) ||
@@ -748,7 +635,7 @@ int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
748
635
  }
749
636
 
750
637
  /* Z_r */
751
- if (a->Z_is_one) {
638
+ if (BN_cmp(&a->Z, &group->one) == 0) {
752
639
  if (!BN_copy(n0, &a->Y)) {
753
640
  goto err;
754
641
  }
@@ -758,7 +645,6 @@ int ec_GFp_simple_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a,
758
645
  if (!BN_mod_lshift1_quick(&r->Z, n0, p)) {
759
646
  goto err;
760
647
  }
761
- r->Z_is_one = 0;
762
648
  /* Z_r = 2 * Y_a * Z_a */
763
649
 
764
650
  /* n2 */
@@ -810,7 +696,7 @@ int ec_GFp_simple_invert(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx) {
810
696
  }
811
697
 
812
698
  int ec_GFp_simple_is_at_infinity(const EC_GROUP *group, const EC_POINT *point) {
813
- return !point->Z_is_one && BN_is_zero(&point->Z);
699
+ return BN_is_zero(&point->Z);
814
700
  }
815
701
 
816
702
  int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
@@ -821,7 +707,7 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
821
707
  const BIGNUM *p;
822
708
  BN_CTX *new_ctx = NULL;
823
709
  BIGNUM *rh, *tmp, *Z4, *Z6;
824
- int ret = -1;
710
+ int ret = 0;
825
711
 
826
712
  if (EC_POINT_is_at_infinity(group, point)) {
827
713
  return 1;
@@ -834,7 +720,7 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
834
720
  if (ctx == NULL) {
835
721
  ctx = new_ctx = BN_CTX_new();
836
722
  if (ctx == NULL) {
837
- return -1;
723
+ return 0;
838
724
  }
839
725
  }
840
726
 
@@ -862,7 +748,7 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
862
748
  goto err;
863
749
  }
864
750
 
865
- if (!point->Z_is_one) {
751
+ if (BN_cmp(&point->Z, &group->one) != 0) {
866
752
  if (!field_sqr(group, tmp, &point->Z, ctx) ||
867
753
  !field_sqr(group, Z4, tmp, ctx) ||
868
754
  !field_mul(group, Z6, Z4, tmp, ctx)) {
@@ -891,8 +777,6 @@ int ec_GFp_simple_is_on_curve(const EC_GROUP *group, const EC_POINT *point,
891
777
  goto err;
892
778
  }
893
779
  } else {
894
- /* point->Z_is_one */
895
-
896
780
  /* rh := (rh + a)*X */
897
781
  if (!BN_mod_add_quick(rh, rh, &group->a, p) ||
898
782
  !field_mul(group, rh, rh, &point->X, ctx)) {
@@ -941,7 +825,10 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a,
941
825
  return 1;
942
826
  }
943
827
 
944
- if (a->Z_is_one && b->Z_is_one) {
828
+ int a_Z_is_one = BN_cmp(&a->Z, &group->one) == 0;
829
+ int b_Z_is_one = BN_cmp(&b->Z, &group->one) == 0;
830
+
831
+ if (a_Z_is_one && b_Z_is_one) {
945
832
  return ((BN_cmp(&a->X, &b->X) == 0) && BN_cmp(&a->Y, &b->Y) == 0) ? 0 : 1;
946
833
  }
947
834
 
@@ -970,7 +857,7 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a,
970
857
  * (X_a*Z_b^2, Y_a*Z_b^3) = (X_b*Z_a^2, Y_b*Z_a^3).
971
858
  */
972
859
 
973
- if (!b->Z_is_one) {
860
+ if (!b_Z_is_one) {
974
861
  if (!field_sqr(group, Zb23, &b->Z, ctx) ||
975
862
  !field_mul(group, tmp1, &a->X, Zb23, ctx)) {
976
863
  goto end;
@@ -979,7 +866,7 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a,
979
866
  } else {
980
867
  tmp1_ = &a->X;
981
868
  }
982
- if (!a->Z_is_one) {
869
+ if (!a_Z_is_one) {
983
870
  if (!field_sqr(group, Za23, &a->Z, ctx) ||
984
871
  !field_mul(group, tmp2, &b->X, Za23, ctx)) {
985
872
  goto end;
@@ -996,7 +883,7 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a,
996
883
  }
997
884
 
998
885
 
999
- if (!b->Z_is_one) {
886
+ if (!b_Z_is_one) {
1000
887
  if (!field_mul(group, Zb23, Zb23, &b->Z, ctx) ||
1001
888
  !field_mul(group, tmp1, &a->Y, Zb23, ctx)) {
1002
889
  goto end;
@@ -1005,7 +892,7 @@ int ec_GFp_simple_cmp(const EC_GROUP *group, const EC_POINT *a,
1005
892
  } else {
1006
893
  tmp1_ = &a->Y;
1007
894
  }
1008
- if (!a->Z_is_one) {
895
+ if (!a_Z_is_one) {
1009
896
  if (!field_mul(group, Za23, Za23, &a->Z, ctx) ||
1010
897
  !field_mul(group, tmp2, &b->Y, Za23, ctx)) {
1011
898
  goto end;
@@ -1036,7 +923,8 @@ int ec_GFp_simple_make_affine(const EC_GROUP *group, EC_POINT *point,
1036
923
  BIGNUM *x, *y;
1037
924
  int ret = 0;
1038
925
 
1039
- if (point->Z_is_one || EC_POINT_is_at_infinity(group, point)) {
926
+ if (BN_cmp(&point->Z, &group->one) == 0 ||
927
+ EC_POINT_is_at_infinity(group, point)) {
1040
928
  return 1;
1041
929
  }
1042
930
 
@@ -1058,7 +946,7 @@ int ec_GFp_simple_make_affine(const EC_GROUP *group, EC_POINT *point,
1058
946
  !EC_POINT_set_affine_coordinates_GFp(group, point, x, y, ctx)) {
1059
947
  goto err;
1060
948
  }
1061
- if (!point->Z_is_one) {
949
+ if (BN_cmp(&point->Z, &group->one) != 0) {
1062
950
  OPENSSL_PUT_ERROR(EC, ERR_R_INTERNAL_ERROR);
1063
951
  goto err;
1064
952
  }
@@ -1076,7 +964,6 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
1076
964
  BN_CTX *new_ctx = NULL;
1077
965
  BIGNUM *tmp, *tmp_Z;
1078
966
  BIGNUM **prod_Z = NULL;
1079
- size_t i;
1080
967
  int ret = 0;
1081
968
 
1082
969
  if (num == 0) {
@@ -1102,7 +989,7 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
1102
989
  goto err;
1103
990
  }
1104
991
  memset(prod_Z, 0, num * sizeof(prod_Z[0]));
1105
- for (i = 0; i < num; i++) {
992
+ for (size_t i = 0; i < num; i++) {
1106
993
  prod_Z[i] = BN_new();
1107
994
  if (prod_Z[i] == NULL) {
1108
995
  goto err;
@@ -1117,18 +1004,12 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
1117
1004
  goto err;
1118
1005
  }
1119
1006
  } else {
1120
- if (group->meth->field_set_to_one != 0) {
1121
- if (!group->meth->field_set_to_one(group, prod_Z[0], ctx)) {
1122
- goto err;
1123
- }
1124
- } else {
1125
- if (!BN_one(prod_Z[0])) {
1126
- goto err;
1127
- }
1007
+ if (BN_copy(prod_Z[0], &group->one) == NULL) {
1008
+ goto err;
1128
1009
  }
1129
1010
  }
1130
1011
 
1131
- for (i = 1; i < num; i++) {
1012
+ for (size_t i = 1; i < num; i++) {
1132
1013
  if (!BN_is_zero(&points[i]->Z)) {
1133
1014
  if (!group->meth->field_mul(group, prod_Z[i], prod_Z[i - 1],
1134
1015
  &points[i]->Z, ctx)) {
@@ -1141,10 +1022,16 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
1141
1022
  }
1142
1023
  }
1143
1024
 
1144
- /* Now use a single explicit inversion to replace every
1145
- * non-zero points[i]->Z by its inverse. */
1146
-
1147
- if (!BN_mod_inverse(tmp, prod_Z[num - 1], &group->field, ctx)) {
1025
+ /* Now use a single explicit inversion to replace every non-zero points[i]->Z
1026
+ * by its inverse. We use |BN_mod_inverse_odd| instead of doing a constant-
1027
+ * time inversion using Fermat's Little Theorem because this function is
1028
+ * usually only used for converting multiples of a public key point to
1029
+ * affine, and a public key point isn't secret. If we were to use Fermat's
1030
+ * Little Theorem then the cost of the inversion would usually be so high
1031
+ * that converting the multiples to affine would be counterproductive. */
1032
+ int no_inverse;
1033
+ if (!BN_mod_inverse_odd(tmp, &no_inverse, prod_Z[num - 1], &group->field,
1034
+ ctx)) {
1148
1035
  OPENSSL_PUT_ERROR(EC, ERR_R_BN_LIB);
1149
1036
  goto err;
1150
1037
  }
@@ -1159,7 +1046,7 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
1159
1046
  }
1160
1047
  }
1161
1048
 
1162
- for (i = num - 1; i > 0; --i) {
1049
+ for (size_t i = num - 1; i > 0; --i) {
1163
1050
  /* Loop invariant: tmp is the product of the inverses of
1164
1051
  * points[0]->Z .. points[i]->Z (zero-valued inputs skipped). */
1165
1052
  if (BN_is_zero(&points[i]->Z)) {
@@ -1183,7 +1070,7 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
1183
1070
  }
1184
1071
 
1185
1072
  /* Finally, fix up the X and Y coordinates for all points. */
1186
- for (i = 0; i < num; i++) {
1073
+ for (size_t i = 0; i < num; i++) {
1187
1074
  EC_POINT *p = points[i];
1188
1075
 
1189
1076
  if (!BN_is_zero(&p->Z)) {
@@ -1195,16 +1082,9 @@ int ec_GFp_simple_points_make_affine(const EC_GROUP *group, size_t num,
1195
1082
  goto err;
1196
1083
  }
1197
1084
 
1198
- if (group->meth->field_set_to_one != NULL) {
1199
- if (!group->meth->field_set_to_one(group, &p->Z, ctx)) {
1200
- goto err;
1201
- }
1202
- } else {
1203
- if (!BN_one(&p->Z)) {
1204
- goto err;
1205
- }
1085
+ if (BN_copy(&p->Z, &group->one) == NULL) {
1086
+ goto err;
1206
1087
  }
1207
- p->Z_is_one = 1;
1208
1088
  }
1209
1089
  }
1210
1090
 
@@ -1214,7 +1094,7 @@ err:
1214
1094
  BN_CTX_end(ctx);
1215
1095
  BN_CTX_free(new_ctx);
1216
1096
  if (prod_Z != NULL) {
1217
- for (i = 0; i < num; i++) {
1097
+ for (size_t i = 0; i < num; i++) {
1218
1098
  if (prod_Z[i] == NULL) {
1219
1099
  break;
1220
1100
  }