grpc 0.13.1 → 0.14.1.pre1

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 (724) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2098 -828
  3. data/include/grpc/byte_buffer.h +1 -1
  4. data/include/grpc/byte_buffer_reader.h +1 -20
  5. data/include/grpc/census.h +4 -4
  6. data/include/grpc/compression.h +6 -5
  7. data/include/grpc/grpc.h +31 -20
  8. data/include/grpc/grpc_security.h +17 -31
  9. data/include/grpc/grpc_security_constants.h +114 -0
  10. data/include/grpc/grpc_zookeeper.h +1 -1
  11. data/include/grpc/impl/codegen/alloc.h +1 -1
  12. data/include/grpc/impl/codegen/atm.h +1 -1
  13. data/include/grpc/impl/codegen/atm_gcc_atomic.h +1 -1
  14. data/include/grpc/impl/codegen/atm_gcc_sync.h +1 -1
  15. data/include/grpc/impl/codegen/atm_win32.h +1 -1
  16. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  17. data/{src/core/client_config/lb_policies/round_robin.h → include/grpc/impl/codegen/byte_buffer_reader.h} +19 -8
  18. data/include/grpc/impl/codegen/grpc_types.h +20 -3
  19. data/include/grpc/impl/codegen/log.h +9 -2
  20. data/include/grpc/impl/codegen/port_platform.h +102 -17
  21. data/include/grpc/impl/codegen/propagation_bits.h +3 -3
  22. data/include/grpc/impl/codegen/slice.h +3 -3
  23. data/include/grpc/impl/codegen/slice_buffer.h +3 -3
  24. data/include/grpc/impl/codegen/status.h +1 -1
  25. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  26. data/include/grpc/impl/codegen/sync_posix.h +1 -1
  27. data/include/grpc/impl/codegen/sync_win32.h +1 -1
  28. data/include/grpc/impl/codegen/time.h +3 -3
  29. data/include/grpc/status.h +1 -1
  30. data/include/grpc/support/alloc.h +1 -1
  31. data/include/grpc/support/atm.h +1 -1
  32. data/include/grpc/support/atm_gcc_atomic.h +4 -4
  33. data/include/grpc/support/atm_gcc_sync.h +1 -1
  34. data/include/grpc/support/atm_win32.h +1 -1
  35. data/include/grpc/support/avl.h +1 -1
  36. data/include/grpc/support/cmdline.h +1 -1
  37. data/include/grpc/support/cpu.h +1 -1
  38. data/include/grpc/support/histogram.h +1 -1
  39. data/include/grpc/support/host_port.h +1 -1
  40. data/include/grpc/support/log.h +1 -1
  41. data/include/grpc/support/log_win32.h +1 -1
  42. data/include/grpc/support/port_platform.h +1 -1
  43. data/include/grpc/support/slice.h +1 -1
  44. data/include/grpc/support/slice_buffer.h +1 -1
  45. data/include/grpc/support/string_util.h +3 -1
  46. data/include/grpc/support/subprocess.h +2 -2
  47. data/include/grpc/support/sync.h +1 -1
  48. data/include/grpc/support/sync_generic.h +1 -1
  49. data/include/grpc/support/sync_posix.h +1 -1
  50. data/include/grpc/support/sync_win32.h +1 -1
  51. data/include/grpc/support/thd.h +1 -1
  52. data/include/grpc/support/time.h +1 -1
  53. data/include/grpc/support/tls.h +1 -1
  54. data/include/grpc/support/tls_gcc.h +45 -1
  55. data/include/grpc/support/tls_msvc.h +3 -3
  56. data/include/grpc/support/tls_pthread.h +1 -1
  57. data/include/grpc/support/useful.h +1 -1
  58. data/src/boringssl/err_data.c +258 -252
  59. data/src/core/{census → ext/census}/aggregation.h +3 -3
  60. data/src/core/{statistics → ext/census}/census_interface.h +3 -3
  61. data/src/core/{statistics → ext/census}/census_rpc_stats.h +4 -4
  62. data/src/core/{census → ext/census}/context.c +2 -2
  63. data/src/core/{census → ext/census}/grpc_context.c +2 -2
  64. data/src/core/{census → ext/census}/grpc_filter.c +30 -16
  65. data/src/core/{census → ext/census}/grpc_filter.h +4 -4
  66. data/src/core/ext/census/grpc_plugin.c +82 -0
  67. data/src/core/{census → ext/census}/initialize.c +1 -1
  68. data/src/core/{census → ext/census}/mlog.c +2 -2
  69. data/src/core/{census → ext/census}/mlog.h +4 -4
  70. data/src/core/{census → ext/census}/operation.c +0 -0
  71. data/src/core/{census → ext/census}/placeholders.c +0 -0
  72. data/src/core/{census → ext/census}/rpc_metric_id.h +3 -3
  73. data/src/core/{census → ext/census}/tracing.c +0 -0
  74. data/src/core/{surface → ext/client_config}/channel_connectivity.c +8 -21
  75. data/src/core/{channel → ext/client_config}/client_channel.c +80 -35
  76. data/src/core/{channel → ext/client_config}/client_channel.h +5 -5
  77. data/src/core/{client_config/subchannel_factory.c → ext/client_config/client_channel_factory.c} +14 -6
  78. data/src/core/ext/client_config/client_channel_factory.h +85 -0
  79. data/src/core/{client_config → ext/client_config}/client_config.c +4 -2
  80. data/src/core/{client_config → ext/client_config}/client_config.h +4 -4
  81. data/src/core/ext/client_config/client_config_plugin.c +95 -0
  82. data/src/core/{client_config → ext/client_config}/connector.c +2 -2
  83. data/src/core/{client_config → ext/client_config}/connector.h +7 -10
  84. data/src/core/{client_config → ext/client_config}/default_initial_connect_string.c +1 -1
  85. data/src/core/{client_config → ext/client_config}/initial_connect_string.c +1 -1
  86. data/src/core/{client_config → ext/client_config}/initial_connect_string.h +4 -4
  87. data/src/core/{client_config → ext/client_config}/lb_policy.c +12 -3
  88. data/src/core/{client_config → ext/client_config}/lb_policy.h +19 -6
  89. data/src/core/{client_config → ext/client_config}/lb_policy_factory.c +4 -3
  90. data/src/core/{client_config → ext/client_config}/lb_policy_factory.h +14 -9
  91. data/src/core/{client_config → ext/client_config}/lb_policy_registry.c +4 -9
  92. data/src/core/{client_config → ext/client_config}/lb_policy_registry.h +7 -6
  93. data/src/core/ext/client_config/parse_address.c +137 -0
  94. data/src/core/ext/client_config/parse_address.h +56 -0
  95. data/src/core/{client_config → ext/client_config}/resolver.c +1 -1
  96. data/src/core/{client_config → ext/client_config}/resolver.h +6 -6
  97. data/src/core/{client_config → ext/client_config}/resolver_factory.c +1 -1
  98. data/src/core/{client_config → ext/client_config}/resolver_factory.h +7 -7
  99. data/src/core/{client_config → ext/client_config}/resolver_registry.c +25 -11
  100. data/src/core/{client_config → ext/client_config}/resolver_registry.h +9 -5
  101. data/src/core/{client_config → ext/client_config}/subchannel.c +90 -126
  102. data/src/core/{client_config → ext/client_config}/subchannel.h +15 -15
  103. data/src/core/{channel → ext/client_config}/subchannel_call_holder.c +9 -8
  104. data/src/core/{channel → ext/client_config}/subchannel_call_holder.h +7 -7
  105. data/src/core/{client_config → ext/client_config}/subchannel_index.c +3 -2
  106. data/src/core/{client_config → ext/client_config}/subchannel_index.h +5 -5
  107. data/src/core/{client_config → ext/client_config}/uri_parser.c +69 -1
  108. data/src/core/{client_config → ext/client_config}/uri_parser.h +15 -3
  109. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.c +18 -9
  110. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.h +5 -5
  111. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.c +1 -1
  112. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.h +0 -0
  113. data/src/core/{client_config/lb_policies → ext/lb_policy/pick_first}/pick_first.c +95 -32
  114. data/src/core/{client_config/lb_policies → ext/lb_policy/round_robin}/round_robin.c +98 -34
  115. data/src/core/{client_config/resolvers → ext/resolver/dns/native}/dns_resolver.c +83 -39
  116. data/src/core/{client_config/resolvers → ext/resolver/sockaddr}/sockaddr_resolver.c +66 -169
  117. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.c +1 -1
  118. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.h +3 -3
  119. data/src/core/{surface → ext/transport/chttp2/client/insecure}/channel_create.c +65 -59
  120. data/src/core/{surface → ext/transport/chttp2/client/secure}/secure_channel_create.c +77 -69
  121. data/src/core/{surface → ext/transport/chttp2/server/insecure}/server_chttp2.c +8 -11
  122. data/src/core/{security → ext/transport/chttp2/server/secure}/server_secure_chttp2.c +14 -17
  123. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.c +28 -74
  124. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.h +5 -5
  125. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +46 -0
  126. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.c +551 -310
  127. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.h +5 -5
  128. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame.h +3 -3
  129. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.c +30 -14
  130. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.h +10 -7
  131. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.c +2 -2
  132. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.h +5 -5
  133. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.c +2 -2
  134. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.h +5 -5
  135. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.c +9 -5
  136. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.h +8 -6
  137. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.c +6 -6
  138. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.h +5 -5
  139. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.c +11 -5
  140. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.h +8 -6
  141. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.c +21 -12
  142. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.h +8 -6
  143. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.c +42 -25
  144. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.h +7 -7
  145. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.c +21 -11
  146. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.h +4 -4
  147. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/http2_errors.h +3 -3
  148. data/src/core/ext/transport/chttp2/transport/huffsyms.c +105 -0
  149. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/huffsyms.h +3 -3
  150. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.c +2 -2
  151. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.h +4 -4
  152. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/internal.h +81 -37
  153. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/parsing.c +54 -21
  154. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.c +1 -1
  155. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.h +4 -4
  156. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_lists.c +10 -2
  157. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.c +1 -1
  158. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.h +3 -3
  159. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.c +4 -4
  160. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.h +4 -4
  161. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.c +1 -1
  162. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.h +3 -3
  163. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/writing.c +30 -20
  164. data/src/core/{channel → lib/channel}/channel_args.c +3 -15
  165. data/src/core/{channel → lib/channel}/channel_args.h +11 -15
  166. data/src/core/{channel → lib/channel}/channel_stack.c +5 -3
  167. data/src/core/{channel → lib/channel}/channel_stack.h +13 -8
  168. data/src/core/lib/channel/channel_stack_builder.c +277 -0
  169. data/src/core/lib/channel/channel_stack_builder.h +161 -0
  170. data/src/core/{channel → lib/channel}/compress_filter.c +51 -16
  171. data/src/core/{channel → lib/channel}/compress_filter.h +6 -4
  172. data/src/core/{channel → lib/channel}/connected_channel.c +34 -24
  173. data/src/core/lib/channel/connected_channel.h +42 -0
  174. data/src/core/{channel → lib/channel}/context.h +3 -3
  175. data/src/core/{channel → lib/channel}/http_client_filter.c +24 -13
  176. data/src/core/{channel → lib/channel}/http_client_filter.h +4 -4
  177. data/src/core/{channel → lib/channel}/http_server_filter.c +39 -19
  178. data/src/core/{channel → lib/channel}/http_server_filter.h +4 -4
  179. data/src/core/{compression → lib/compression}/algorithm_metadata.h +4 -4
  180. data/src/core/{compression → lib/compression}/compression_algorithm.c +46 -9
  181. data/src/core/{compression → lib/compression}/message_compress.c +1 -1
  182. data/src/core/{compression → lib/compression}/message_compress.h +3 -3
  183. data/src/core/{debug → lib/debug}/trace.c +2 -2
  184. data/src/core/{debug → lib/debug}/trace.h +3 -3
  185. data/src/core/{httpcli → lib/http}/format_request.c +8 -8
  186. data/src/core/{httpcli → lib/http}/format_request.h +4 -4
  187. data/src/core/{httpcli → lib/http}/httpcli.c +24 -19
  188. data/src/core/{httpcli → lib/http}/httpcli.h +14 -33
  189. data/src/core/{httpcli → lib/http}/httpcli_security_connector.c +5 -5
  190. data/src/core/lib/http/parser.c +341 -0
  191. data/src/core/lib/http/parser.h +119 -0
  192. data/src/core/{iomgr → lib/iomgr}/closure.c +8 -2
  193. data/src/core/{iomgr → lib/iomgr}/closure.h +7 -4
  194. data/src/core/{iomgr → lib/iomgr}/endpoint.c +1 -1
  195. data/src/core/{iomgr → lib/iomgr}/endpoint.h +5 -5
  196. data/src/core/{iomgr → lib/iomgr}/endpoint_pair.h +4 -4
  197. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_posix.c +8 -7
  198. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_windows.c +4 -4
  199. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +1936 -0
  200. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.h +41 -0
  201. data/src/core/lib/iomgr/ev_posix.c +164 -0
  202. data/src/core/lib/iomgr/ev_posix.h +158 -0
  203. data/src/core/{iomgr → lib/iomgr}/exec_ctx.c +78 -3
  204. data/src/core/{iomgr → lib/iomgr}/exec_ctx.h +25 -10
  205. data/src/core/{iomgr → lib/iomgr}/executor.c +3 -3
  206. data/src/core/{iomgr → lib/iomgr}/executor.h +5 -5
  207. data/src/core/{iomgr → lib/iomgr}/iocp_windows.c +6 -6
  208. data/src/core/{iomgr → lib/iomgr}/iocp_windows.h +5 -5
  209. data/src/core/{iomgr → lib/iomgr}/iomgr.c +13 -10
  210. data/src/core/{iomgr → lib/iomgr}/iomgr.h +3 -3
  211. data/src/core/{iomgr → lib/iomgr}/iomgr_internal.h +5 -9
  212. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.c +6 -6
  213. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.h +4 -4
  214. data/src/core/{iomgr → lib/iomgr}/iomgr_windows.c +7 -4
  215. data/src/core/{iomgr → lib/iomgr}/pollset.h +11 -11
  216. data/src/core/{iomgr → lib/iomgr}/pollset_set.h +5 -5
  217. data/src/core/{iomgr → lib/iomgr}/pollset_set_windows.c +2 -2
  218. data/src/core/lib/iomgr/pollset_set_windows.h +39 -0
  219. data/src/core/{iomgr → lib/iomgr}/pollset_windows.c +7 -7
  220. data/src/core/{iomgr → lib/iomgr}/pollset_windows.h +8 -5
  221. data/src/core/{iomgr → lib/iomgr}/resolve_address.h +10 -9
  222. data/src/core/{iomgr → lib/iomgr}/resolve_address_posix.c +22 -22
  223. data/src/core/{iomgr → lib/iomgr}/resolve_address_windows.c +20 -12
  224. data/src/core/{iomgr → lib/iomgr}/sockaddr.h +5 -5
  225. data/src/core/{iomgr → lib/iomgr}/sockaddr_posix.h +5 -5
  226. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.c +9 -16
  227. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.h +4 -4
  228. data/src/core/{iomgr → lib/iomgr}/sockaddr_win32.h +6 -4
  229. data/src/core/{iomgr → lib/iomgr}/socket_utils_common_posix.c +29 -7
  230. data/src/core/{iomgr → lib/iomgr}/socket_utils_linux.c +2 -2
  231. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.c +1 -1
  232. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.h +14 -4
  233. data/src/core/{iomgr → lib/iomgr}/socket_windows.c +7 -5
  234. data/src/core/{iomgr → lib/iomgr}/socket_windows.h +6 -6
  235. data/src/core/{iomgr → lib/iomgr}/tcp_client.h +6 -6
  236. data/src/core/{iomgr → lib/iomgr}/tcp_client_posix.c +33 -18
  237. data/src/core/{iomgr → lib/iomgr}/tcp_client_windows.c +30 -20
  238. data/src/core/{iomgr → lib/iomgr}/tcp_posix.c +9 -10
  239. data/src/core/{iomgr → lib/iomgr}/tcp_posix.h +6 -6
  240. data/src/core/{iomgr → lib/iomgr}/tcp_server.h +6 -6
  241. data/src/core/{iomgr → lib/iomgr}/tcp_server_posix.c +24 -37
  242. data/src/core/{iomgr → lib/iomgr}/tcp_server_windows.c +8 -36
  243. data/src/core/{iomgr → lib/iomgr}/tcp_windows.c +27 -17
  244. data/src/core/{iomgr → lib/iomgr}/tcp_windows.h +5 -5
  245. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.c +1 -1
  246. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.h +3 -3
  247. data/src/core/{iomgr → lib/iomgr}/timer.c +31 -4
  248. data/src/core/{iomgr → lib/iomgr}/timer.h +6 -7
  249. data/src/core/{iomgr → lib/iomgr}/timer_heap.c +2 -2
  250. data/src/core/{iomgr → lib/iomgr}/timer_heap.h +4 -4
  251. data/src/core/{iomgr → lib/iomgr}/udp_server.c +13 -37
  252. data/src/core/{iomgr → lib/iomgr}/udp_server.h +11 -10
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +89 -0
  254. data/src/core/{client_config/resolvers/sockaddr_resolver.h → lib/iomgr/unix_sockets_posix.h} +15 -11
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +59 -0
  256. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_eventfd.c +2 -2
  257. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_nospecial.c +1 -1
  258. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.c +8 -3
  259. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.h +4 -4
  260. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.c +2 -2
  261. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.h +3 -3
  262. data/src/core/{iomgr → lib/iomgr}/workqueue.h +10 -10
  263. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.c +5 -6
  264. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.h +5 -5
  265. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.c +1 -1
  266. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.h +3 -3
  267. data/src/core/{json → lib/json}/json.c +1 -1
  268. data/src/core/{json → lib/json}/json.h +4 -4
  269. data/src/core/{json → lib/json}/json_common.h +3 -3
  270. data/src/core/{json → lib/json}/json_reader.c +16 -4
  271. data/src/core/{json → lib/json}/json_reader.h +4 -4
  272. data/src/core/{json → lib/json}/json_string.c +4 -4
  273. data/src/core/{json → lib/json}/json_writer.c +1 -1
  274. data/src/core/{json → lib/json}/json_writer.h +4 -4
  275. data/src/core/{profiling → lib/profiling}/basic_timers.c +3 -2
  276. data/src/core/{profiling → lib/profiling}/stap_timers.c +2 -2
  277. data/src/core/{profiling → lib/profiling}/timers.h +3 -3
  278. data/src/core/{security → lib/security}/auth_filters.h +4 -4
  279. data/src/core/{security → lib/security}/b64.c +2 -2
  280. data/src/core/{security → lib/security}/b64.h +4 -4
  281. data/src/core/{security → lib/security}/client_auth_filter.c +16 -16
  282. data/src/core/{security → lib/security}/credentials.c +42 -26
  283. data/src/core/{security → lib/security}/credentials.h +11 -10
  284. data/src/core/{security → lib/security}/credentials_metadata.c +1 -1
  285. data/src/core/{security → lib/security}/credentials_posix.c +3 -3
  286. data/src/core/{security → lib/security}/credentials_win32.c +3 -3
  287. data/src/core/{security → lib/security}/google_default_credentials.c +10 -9
  288. data/src/core/{security → lib/security}/handshake.c +4 -4
  289. data/src/core/{security → lib/security}/handshake.h +6 -6
  290. data/src/core/{security → lib/security}/json_token.c +4 -4
  291. data/src/core/{security → lib/security}/json_token.h +4 -4
  292. data/src/core/{security → lib/security}/jwt_verifier.c +14 -14
  293. data/src/core/{security → lib/security}/jwt_verifier.h +5 -5
  294. data/src/core/{security → lib/security}/secure_endpoint.c +9 -8
  295. data/src/core/{security → lib/security}/secure_endpoint.h +4 -4
  296. data/src/core/{security → lib/security}/security_connector.c +53 -21
  297. data/src/core/{security → lib/security}/security_connector.h +8 -8
  298. data/src/core/{security → lib/security}/security_context.c +5 -5
  299. data/src/core/{security → lib/security}/security_context.h +5 -5
  300. data/src/core/{security → lib/security}/server_auth_filter.c +9 -9
  301. data/src/core/{support → lib/support}/alloc.c +5 -3
  302. data/src/core/{support → lib/support}/avl.c +1 -1
  303. data/src/core/lib/support/backoff.c +76 -0
  304. data/src/core/lib/support/backoff.h +68 -0
  305. data/src/core/{support → lib/support}/block_annotate.h +3 -3
  306. data/src/core/{support → lib/support}/cmdline.c +1 -1
  307. data/src/core/{support → lib/support}/cpu_iphone.c +0 -0
  308. data/src/core/{support → lib/support}/cpu_linux.c +2 -2
  309. data/src/core/{support → lib/support}/cpu_posix.c +2 -2
  310. data/src/core/{support → lib/support}/cpu_windows.c +0 -0
  311. data/src/core/{support → lib/support}/env.h +3 -3
  312. data/src/core/{support → lib/support}/env_linux.c +3 -3
  313. data/src/core/{support → lib/support}/env_posix.c +2 -2
  314. data/src/core/{support → lib/support}/env_win32.c +27 -21
  315. data/src/core/{support → lib/support}/histogram.c +1 -1
  316. data/src/core/{support → lib/support}/host_port.c +1 -1
  317. data/src/core/{support → lib/support}/load_file.c +4 -4
  318. data/src/core/{support → lib/support}/load_file.h +4 -4
  319. data/src/core/{support → lib/support}/log.c +33 -0
  320. data/src/core/{support → lib/support}/log_android.c +2 -2
  321. data/src/core/{support → lib/support}/log_linux.c +6 -5
  322. data/src/core/{support → lib/support}/log_posix.c +3 -3
  323. data/src/core/{support → lib/support}/log_win32.c +8 -22
  324. data/src/core/{support → lib/support}/murmur_hash.c +1 -1
  325. data/src/core/{support → lib/support}/murmur_hash.h +3 -3
  326. data/src/core/{support → lib/support}/slice.c +0 -0
  327. data/src/core/{support → lib/support}/slice_buffer.c +0 -0
  328. data/src/core/{support → lib/support}/stack_lockfree.c +7 -7
  329. data/src/core/{support → lib/support}/stack_lockfree.h +3 -3
  330. data/src/core/{support → lib/support}/string.c +1 -1
  331. data/src/core/{support → lib/support}/string.h +4 -4
  332. data/src/core/{support → lib/support}/string_posix.c +1 -1
  333. data/src/core/{support/string_win32.c → lib/support/string_util_win32.c} +23 -38
  334. data/src/core/lib/support/string_win32.c +83 -0
  335. data/src/core/{support → lib/support}/string_win32.h +3 -3
  336. data/src/core/{support → lib/support}/subprocess_posix.c +3 -3
  337. data/src/core/{support → lib/support}/subprocess_windows.c +3 -3
  338. data/src/core/{support → lib/support}/sync.c +2 -2
  339. data/src/core/{support → lib/support}/sync_posix.c +3 -3
  340. data/src/core/{support → lib/support}/sync_win32.c +1 -1
  341. data/src/core/{support → lib/support}/thd.c +0 -0
  342. data/src/core/{support → lib/support}/thd_internal.h +3 -3
  343. data/src/core/{support → lib/support}/thd_posix.c +4 -3
  344. data/src/core/{support → lib/support}/thd_win32.c +1 -1
  345. data/src/core/{support → lib/support}/time.c +2 -2
  346. data/src/core/{support → lib/support}/time_posix.c +12 -6
  347. data/src/core/{support → lib/support}/time_precise.c +0 -0
  348. data/src/core/{support → lib/support}/time_precise.h +3 -3
  349. data/src/core/{support → lib/support}/time_win32.c +7 -7
  350. data/src/core/{support → lib/support}/tls_pthread.c +0 -0
  351. data/src/core/{support → lib/support}/tmpfile.h +4 -4
  352. data/src/core/lib/support/tmpfile_msys.c +73 -0
  353. data/src/core/{support → lib/support}/tmpfile_posix.c +5 -5
  354. data/src/core/{support → lib/support}/tmpfile_win32.c +5 -5
  355. data/src/core/{support → lib/support}/wrap_memcpy.c +0 -0
  356. data/src/core/{surface → lib/surface}/alarm.c +3 -3
  357. data/src/core/{surface → lib/surface}/api_trace.c +1 -1
  358. data/src/core/{surface → lib/surface}/api_trace.h +4 -4
  359. data/src/core/{surface → lib/surface}/byte_buffer.c +3 -3
  360. data/src/core/{surface → lib/surface}/byte_buffer_reader.c +3 -3
  361. data/src/core/{surface → lib/surface}/call.c +145 -73
  362. data/src/core/{surface → lib/surface}/call.h +14 -7
  363. data/src/core/{surface → lib/surface}/call_details.c +1 -1
  364. data/src/core/{surface → lib/surface}/call_log_batch.c +2 -2
  365. data/src/core/{surface → lib/surface}/call_test_only.h +3 -3
  366. data/src/core/{surface → lib/surface}/channel.c +33 -34
  367. data/src/core/{surface → lib/surface}/channel.h +9 -9
  368. data/src/core/lib/surface/channel_init.c +140 -0
  369. data/src/core/lib/surface/channel_init.h +87 -0
  370. data/src/core/{surface → lib/surface}/channel_ping.c +4 -4
  371. data/src/core/lib/surface/channel_stack_type.c +54 -0
  372. data/src/core/{httpcli/parser.h → lib/surface/channel_stack_type.h} +22 -28
  373. data/src/core/{surface → lib/surface}/completion_queue.c +15 -11
  374. data/src/core/{surface → lib/surface}/completion_queue.h +4 -4
  375. data/src/core/{surface → lib/surface}/event_string.c +2 -2
  376. data/src/core/{surface → lib/surface}/event_string.h +3 -3
  377. data/src/core/lib/surface/init.c +217 -0
  378. data/src/core/{surface → lib/surface}/init.h +4 -3
  379. data/src/core/lib/surface/init_secure.c +89 -0
  380. data/src/core/{surface → lib/surface}/lame_client.c +31 -19
  381. data/src/core/{iomgr/pollset_set_windows.h → lib/surface/lame_client.h} +7 -5
  382. data/src/core/{surface → lib/surface}/metadata_array.c +1 -1
  383. data/src/core/{surface → lib/surface}/server.c +208 -183
  384. data/src/core/{surface → lib/surface}/server.h +6 -11
  385. data/src/core/{surface → lib/surface}/surface_trace.h +5 -5
  386. data/src/core/{surface → lib/surface}/validate_metadata.c +1 -1
  387. data/src/core/{surface → lib/surface}/version.c +2 -2
  388. data/src/core/{transport → lib/transport}/byte_stream.c +1 -1
  389. data/src/core/{transport → lib/transport}/byte_stream.h +4 -4
  390. data/src/core/{transport → lib/transport}/connectivity_state.c +2 -2
  391. data/src/core/{transport → lib/transport}/connectivity_state.h +4 -4
  392. data/src/core/{transport → lib/transport}/metadata.c +71 -19
  393. data/src/core/{transport → lib/transport}/metadata.h +11 -4
  394. data/src/core/{transport → lib/transport}/metadata_batch.c +2 -2
  395. data/src/core/{transport → lib/transport}/metadata_batch.h +4 -4
  396. data/src/core/{transport → lib/transport}/static_metadata.c +100 -32
  397. data/src/core/{transport → lib/transport}/static_metadata.h +58 -58
  398. data/src/core/{transport → lib/transport}/transport.c +25 -5
  399. data/src/core/{transport → lib/transport}/transport.h +41 -16
  400. data/src/core/{transport → lib/transport}/transport_impl.h +8 -5
  401. data/src/core/{transport → lib/transport}/transport_op_string.c +2 -2
  402. data/src/core/{tsi → lib/tsi}/fake_transport_security.c +18 -14
  403. data/src/core/{tsi → lib/tsi}/fake_transport_security.h +4 -4
  404. data/src/core/{tsi → lib/tsi}/ssl_transport_security.c +173 -63
  405. data/src/core/{tsi → lib/tsi}/ssl_transport_security.h +24 -6
  406. data/src/core/{tsi → lib/tsi}/ssl_types.h +3 -3
  407. data/src/core/{tsi → lib/tsi}/transport_security.c +12 -28
  408. data/src/core/{tsi → lib/tsi}/transport_security.h +4 -4
  409. data/src/core/{tsi → lib/tsi}/transport_security_interface.h +12 -3
  410. data/src/core/plugin_registry/grpc_plugin_registry.c +66 -0
  411. data/src/ruby/ext/grpc/extconf.rb +14 -20
  412. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -3
  413. data/src/ruby/ext/grpc/rb_call.c +37 -4
  414. data/src/ruby/ext/grpc/rb_call_credentials.c +13 -3
  415. data/src/ruby/ext/grpc/rb_channel.c +2 -3
  416. data/src/ruby/ext/grpc/rb_channel_args.c +2 -3
  417. data/src/ruby/ext/grpc/rb_channel_credentials.c +31 -3
  418. data/src/ruby/ext/grpc/rb_completion_queue.c +2 -2
  419. data/src/ruby/ext/grpc/rb_event_thread.c +1 -1
  420. data/src/ruby/ext/grpc/rb_grpc.c +4 -2
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +8 -0
  422. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +14 -2
  423. data/src/ruby/ext/grpc/rb_server.c +2 -3
  424. data/src/ruby/ext/grpc/rb_server_credentials.c +16 -13
  425. data/src/ruby/ext/grpc/rb_signal.c +70 -0
  426. data/src/ruby/ext/grpc/rb_signal.h +39 -0
  427. data/src/ruby/lib/grpc.rb +21 -13
  428. data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
  429. data/src/ruby/lib/grpc/errors.rb +2 -2
  430. data/src/ruby/lib/grpc/generic/active_call.rb +10 -3
  431. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
  432. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -7
  433. data/src/ruby/lib/grpc/generic/rpc_desc.rb +2 -2
  434. data/src/ruby/lib/grpc/generic/rpc_server.rb +21 -61
  435. data/src/ruby/lib/grpc/generic/service.rb +5 -15
  436. data/src/ruby/lib/grpc/grpc.rb +3 -3
  437. data/src/ruby/{bin/interop/interop_server.rb → lib/grpc/signals.rb} +39 -20
  438. data/src/ruby/lib/grpc/version.rb +2 -2
  439. data/src/ruby/pb/generate_proto_ruby.sh +9 -2
  440. data/src/ruby/pb/grpc/health/checker.rb +1 -1
  441. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb +28 -0
  442. data/src/ruby/pb/grpc/testing/metrics.rb +28 -0
  443. data/src/ruby/pb/grpc/testing/metrics_services.rb +27 -0
  444. data/src/ruby/pb/test/client.rb +12 -23
  445. data/src/ruby/pb/test/server.rb +1 -1
  446. data/src/ruby/spec/client_server_spec.rb +1 -1
  447. data/src/ruby/spec/generic/client_stub_spec.rb +18 -17
  448. data/src/ruby/spec/generic/rpc_server_spec.rb +23 -7
  449. data/src/ruby/spec/generic/service_spec.rb +0 -69
  450. data/src/ruby/{bin/interop/interop_client.rb → spec/pb/duplicate/codegen_spec.rb} +41 -21
  451. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  452. data/third_party/boringssl/crypto/asn1/a_bitstr.c +184 -176
  453. data/third_party/boringssl/crypto/asn1/a_bool.c +42 -44
  454. data/third_party/boringssl/crypto/asn1/a_bytes.c +236 -245
  455. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +173 -192
  456. data/third_party/boringssl/crypto/asn1/a_dup.c +43 -35
  457. data/third_party/boringssl/crypto/asn1/a_enum.c +107 -109
  458. data/third_party/boringssl/crypto/asn1/a_gentm.c +180 -181
  459. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +73 -80
  460. data/third_party/boringssl/crypto/asn1/a_int.c +357 -353
  461. data/third_party/boringssl/crypto/asn1/a_mbstr.c +272 -253
  462. data/third_party/boringssl/crypto/asn1/a_object.c +293 -309
  463. data/third_party/boringssl/crypto/asn1/a_octet.c +13 -6
  464. data/third_party/boringssl/crypto/asn1/a_print.c +54 -52
  465. data/third_party/boringssl/crypto/asn1/a_strnid.c +179 -157
  466. data/third_party/boringssl/crypto/asn1/a_time.c +125 -129
  467. data/third_party/boringssl/crypto/asn1/a_type.c +79 -86
  468. data/third_party/boringssl/crypto/asn1/a_utctm.c +246 -255
  469. data/third_party/boringssl/crypto/asn1/a_utf8.c +159 -135
  470. data/third_party/boringssl/crypto/asn1/asn1_lib.c +361 -368
  471. data/third_party/boringssl/crypto/asn1/asn1_locl.h +11 -11
  472. data/third_party/boringssl/crypto/asn1/asn1_par.c +309 -351
  473. data/third_party/boringssl/crypto/asn1/asn_pack.c +30 -29
  474. data/third_party/boringssl/crypto/asn1/bio_asn1.c +375 -394
  475. data/third_party/boringssl/crypto/asn1/bio_ndef.c +146 -149
  476. data/third_party/boringssl/crypto/asn1/f_enum.c +128 -134
  477. data/third_party/boringssl/crypto/asn1/f_int.c +131 -139
  478. data/third_party/boringssl/crypto/asn1/f_string.c +125 -133
  479. data/third_party/boringssl/crypto/asn1/t_bitst.c +30 -29
  480. data/third_party/boringssl/crypto/asn1/t_pkey.c +45 -47
  481. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1099 -1216
  482. data/third_party/boringssl/crypto/asn1/tasn_enc.c +556 -592
  483. data/third_party/boringssl/crypto/asn1/tasn_fre.c +175 -193
  484. data/third_party/boringssl/crypto/asn1/tasn_new.c +271 -288
  485. data/third_party/boringssl/crypto/asn1/tasn_prn.c +462 -508
  486. data/third_party/boringssl/crypto/asn1/tasn_typ.c +28 -21
  487. data/third_party/boringssl/crypto/asn1/x_bignum.c +62 -52
  488. data/third_party/boringssl/crypto/asn1/x_long.c +101 -86
  489. data/third_party/boringssl/crypto/bio/buffer.c +3 -3
  490. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +8 -68
  491. data/third_party/boringssl/crypto/bn/bn.c +1 -1
  492. data/third_party/boringssl/crypto/bn/bn_asn1.c +9 -22
  493. data/third_party/boringssl/crypto/bn/convert.c +9 -4
  494. data/third_party/boringssl/crypto/bn/div.c +0 -20
  495. data/third_party/boringssl/crypto/bn/exponentiation.c +22 -13
  496. data/third_party/boringssl/crypto/bn/generic.c +6 -242
  497. data/third_party/boringssl/crypto/bn/internal.h +9 -70
  498. data/third_party/boringssl/crypto/bn/montgomery.c +1 -2
  499. data/third_party/boringssl/crypto/bn/mul.c +6 -26
  500. data/third_party/boringssl/crypto/bn/rsaz_exp.c +21 -28
  501. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +51 -0
  502. data/third_party/boringssl/crypto/bytestring/ber.c +128 -87
  503. data/third_party/boringssl/crypto/bytestring/cbb.c +37 -3
  504. data/third_party/boringssl/crypto/bytestring/internal.h +39 -10
  505. data/third_party/boringssl/crypto/chacha/chacha_vec.c +18 -13
  506. data/third_party/boringssl/crypto/cipher/e_aes.c +2 -2
  507. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +4 -9
  508. data/third_party/boringssl/crypto/cipher/tls_cbc.c +39 -10
  509. data/third_party/boringssl/crypto/conf/conf.c +9 -0
  510. data/third_party/boringssl/crypto/cpu-intel.c +1 -1
  511. data/third_party/boringssl/crypto/crypto.c +2 -0
  512. data/third_party/boringssl/crypto/curve25519/curve25519.c +125 -120
  513. data/third_party/boringssl/crypto/curve25519/internal.h +45 -0
  514. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +225 -0
  515. data/third_party/boringssl/crypto/dh/check.c +32 -10
  516. data/third_party/boringssl/crypto/dh/dh.c +1 -1
  517. data/third_party/boringssl/crypto/digest/md32_common.h +0 -60
  518. data/third_party/boringssl/crypto/dsa/dsa.c +47 -21
  519. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +249 -64
  520. data/third_party/boringssl/crypto/ec/ec.c +45 -31
  521. data/third_party/boringssl/crypto/ec/ec_asn1.c +315 -382
  522. data/third_party/boringssl/crypto/ec/ec_key.c +1 -4
  523. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -9
  524. data/third_party/boringssl/crypto/ec/internal.h +1 -19
  525. data/third_party/boringssl/crypto/ec/oct.c +12 -0
  526. data/third_party/boringssl/crypto/ec/p224-64.c +4 -65
  527. data/third_party/boringssl/crypto/ec/p256-64.c +9 -71
  528. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +1 -6
  529. data/third_party/boringssl/crypto/ec/p256-x86_64.c +3 -13
  530. data/third_party/boringssl/crypto/ec/simple.c +0 -76
  531. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +1 -1
  532. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +10 -24
  533. data/third_party/boringssl/crypto/evp/evp.c +4 -3
  534. data/third_party/boringssl/crypto/evp/evp_asn1.c +101 -0
  535. data/third_party/boringssl/crypto/evp/evp_ctx.c +22 -51
  536. data/third_party/boringssl/crypto/evp/internal.h +28 -27
  537. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +78 -249
  538. data/third_party/boringssl/crypto/evp/p_ec.c +19 -66
  539. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +74 -231
  540. data/third_party/boringssl/crypto/evp/p_rsa.c +90 -13
  541. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +49 -48
  542. data/third_party/boringssl/crypto/internal.h +16 -1
  543. data/third_party/boringssl/crypto/mem.c +2 -2
  544. data/third_party/boringssl/crypto/modes/ctr.c +2 -1
  545. data/third_party/boringssl/crypto/modes/gcm.c +5 -3
  546. data/third_party/boringssl/crypto/obj/obj_dat.h +6 -3
  547. data/third_party/boringssl/crypto/pem/pem_all.c +83 -102
  548. data/third_party/boringssl/crypto/pem/pem_info.c +286 -309
  549. data/third_party/boringssl/crypto/pem/pem_lib.c +690 -710
  550. data/third_party/boringssl/crypto/pem/pem_oth.c +15 -16
  551. data/third_party/boringssl/crypto/pem/pem_pk8.c +132 -119
  552. data/third_party/boringssl/crypto/pem/pem_pkey.c +144 -220
  553. data/third_party/boringssl/crypto/pem/pem_x509.c +3 -3
  554. data/third_party/boringssl/crypto/pem/pem_xaux.c +5 -4
  555. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +54 -60
  556. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +3 -1
  557. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +48 -50
  558. data/third_party/boringssl/crypto/rand/rand.c +2 -0
  559. data/third_party/boringssl/crypto/rsa/blinding.c +8 -48
  560. data/third_party/boringssl/crypto/rsa/internal.h +1 -9
  561. data/third_party/boringssl/crypto/rsa/padding.c +73 -77
  562. data/third_party/boringssl/crypto/rsa/rsa.c +1 -1
  563. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +27 -46
  564. data/third_party/boringssl/crypto/rsa/rsa_impl.c +23 -34
  565. data/third_party/boringssl/crypto/test/scoped_types.h +3 -0
  566. data/third_party/boringssl/crypto/thread_win.c +15 -13
  567. data/third_party/boringssl/crypto/time_support.c +0 -6
  568. data/third_party/boringssl/crypto/x509/a_digest.c +26 -27
  569. data/third_party/boringssl/crypto/x509/a_sign.c +63 -64
  570. data/third_party/boringssl/crypto/x509/a_strex.c +482 -413
  571. data/third_party/boringssl/crypto/x509/a_verify.c +45 -51
  572. data/third_party/boringssl/crypto/x509/asn1_gen.c +715 -769
  573. data/third_party/boringssl/crypto/x509/by_dir.c +355 -393
  574. data/third_party/boringssl/crypto/x509/by_file.c +186 -206
  575. data/third_party/boringssl/crypto/x509/charmap.h +11 -11
  576. data/third_party/boringssl/crypto/x509/i2d_pr.c +21 -22
  577. data/third_party/boringssl/crypto/x509/t_crl.c +50 -51
  578. data/third_party/boringssl/crypto/x509/t_x509.c +414 -406
  579. data/third_party/boringssl/crypto/x509/t_x509a.c +44 -42
  580. data/third_party/boringssl/crypto/x509/vpm_int.h +13 -13
  581. data/third_party/boringssl/crypto/x509/x509_att.c +241 -219
  582. data/third_party/boringssl/crypto/x509/x509_cmp.c +343 -359
  583. data/third_party/boringssl/crypto/x509/x509_d2.c +36 -35
  584. data/third_party/boringssl/crypto/x509/x509_def.c +23 -13
  585. data/third_party/boringssl/crypto/x509/x509_ext.c +75 -75
  586. data/third_party/boringssl/crypto/x509/x509_lu.c +574 -612
  587. data/third_party/boringssl/crypto/x509/x509_obj.c +104 -115
  588. data/third_party/boringssl/crypto/x509/x509_r2x.c +40 -40
  589. data/third_party/boringssl/crypto/x509/x509_req.c +181 -174
  590. data/third_party/boringssl/crypto/x509/x509_set.c +71 -76
  591. data/third_party/boringssl/crypto/x509/x509_trs.c +193 -171
  592. data/third_party/boringssl/crypto/x509/x509_txt.c +135 -138
  593. data/third_party/boringssl/crypto/x509/x509_v3.c +174 -167
  594. data/third_party/boringssl/crypto/x509/x509_vfy.c +2079 -2130
  595. data/third_party/boringssl/crypto/x509/x509_vpm.c +486 -522
  596. data/third_party/boringssl/crypto/x509/x509cset.c +96 -99
  597. data/third_party/boringssl/crypto/x509/x509name.c +280 -275
  598. data/third_party/boringssl/crypto/x509/x509rset.c +15 -14
  599. data/third_party/boringssl/crypto/x509/x509spki.c +62 -60
  600. data/third_party/boringssl/crypto/x509/x509type.c +58 -60
  601. data/third_party/boringssl/crypto/x509/x_algor.c +70 -73
  602. data/third_party/boringssl/crypto/x509/x_all.c +282 -328
  603. data/third_party/boringssl/crypto/x509/x_attrib.c +36 -42
  604. data/third_party/boringssl/crypto/x509/x_crl.c +397 -418
  605. data/third_party/boringssl/crypto/x509/x_exten.c +5 -5
  606. data/third_party/boringssl/crypto/x509/x_info.c +30 -27
  607. data/third_party/boringssl/crypto/x509/x_name.c +387 -388
  608. data/third_party/boringssl/crypto/x509/x_pkey.c +32 -29
  609. data/third_party/boringssl/crypto/x509/x_pubkey.c +261 -280
  610. data/third_party/boringssl/crypto/x509/x_req.c +30 -33
  611. data/third_party/boringssl/crypto/x509/x_sig.c +2 -2
  612. data/third_party/boringssl/crypto/x509/x_spki.c +9 -7
  613. data/third_party/boringssl/crypto/x509/x_val.c +2 -2
  614. data/third_party/boringssl/crypto/x509/x_x509.c +120 -119
  615. data/third_party/boringssl/crypto/x509/x_x509a.c +99 -91
  616. data/third_party/boringssl/crypto/x509v3/ext_dat.h +57 -51
  617. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +199 -214
  618. data/third_party/boringssl/crypto/x509v3/pcy_data.c +57 -64
  619. data/third_party/boringssl/crypto/x509v3/pcy_int.h +95 -90
  620. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +86 -87
  621. data/third_party/boringssl/crypto/x509v3/pcy_map.c +61 -64
  622. data/third_party/boringssl/crypto/x509v3/pcy_node.c +108 -117
  623. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +676 -724
  624. data/third_party/boringssl/crypto/x509v3/v3_akey.c +128 -136
  625. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +7 -6
  626. data/third_party/boringssl/crypto/x509v3/v3_alt.c +499 -507
  627. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +54 -47
  628. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +67 -67
  629. data/third_party/boringssl/crypto/x509v3/v3_conf.c +330 -328
  630. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +354 -338
  631. data/third_party/boringssl/crypto/x509v3/v3_crld.c +441 -496
  632. data/third_party/boringssl/crypto/x509v3/v3_enum.c +35 -33
  633. data/third_party/boringssl/crypto/x509v3/v3_extku.c +66 -63
  634. data/third_party/boringssl/crypto/x509v3/v3_genn.c +157 -159
  635. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +45 -43
  636. data/third_party/boringssl/crypto/x509v3/v3_info.c +124 -112
  637. data/third_party/boringssl/crypto/x509v3/v3_int.c +30 -26
  638. data/third_party/boringssl/crypto/x509v3/v3_lib.c +231 -204
  639. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +353 -381
  640. data/third_party/boringssl/crypto/x509v3/v3_pci.c +252 -270
  641. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +9 -8
  642. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +58 -61
  643. data/third_party/boringssl/crypto/x509v3/v3_pku.c +35 -34
  644. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +72 -74
  645. data/third_party/boringssl/crypto/x509v3/v3_prn.c +146 -121
  646. data/third_party/boringssl/crypto/x509v3/v3_purp.c +651 -582
  647. data/third_party/boringssl/crypto/x509v3/v3_skey.c +76 -72
  648. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +139 -131
  649. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1072 -1068
  650. data/third_party/boringssl/include/openssl/asn1.h +40 -38
  651. data/third_party/boringssl/include/openssl/base.h +10 -1
  652. data/third_party/boringssl/include/openssl/bio.h +10 -11
  653. data/third_party/boringssl/include/openssl/bn.h +12 -9
  654. data/third_party/boringssl/include/openssl/buf.h +1 -1
  655. data/third_party/boringssl/include/openssl/bytestring.h +29 -0
  656. data/third_party/boringssl/include/openssl/conf.h +25 -0
  657. data/third_party/boringssl/include/openssl/crypto.h +6 -1
  658. data/third_party/boringssl/include/openssl/curve25519.h +6 -3
  659. data/third_party/boringssl/include/openssl/dh.h +7 -3
  660. data/third_party/boringssl/include/openssl/dsa.h +108 -51
  661. data/third_party/boringssl/include/openssl/ec.h +46 -21
  662. data/third_party/boringssl/include/openssl/ec_key.h +78 -42
  663. data/third_party/boringssl/include/openssl/ecdsa.h +4 -4
  664. data/third_party/boringssl/include/openssl/err.h +3 -2
  665. data/third_party/boringssl/include/openssl/evp.h +120 -37
  666. data/third_party/boringssl/include/openssl/mem.h +4 -13
  667. data/third_party/boringssl/include/openssl/obj_mac.h +4 -0
  668. data/third_party/boringssl/include/openssl/pem.h +0 -9
  669. data/third_party/boringssl/include/openssl/pkcs8.h +6 -2
  670. data/third_party/boringssl/include/openssl/rand.h +3 -0
  671. data/third_party/boringssl/include/openssl/rsa.h +42 -42
  672. data/third_party/boringssl/include/openssl/ssl.h +115 -41
  673. data/third_party/boringssl/include/openssl/stack.h +0 -3
  674. data/third_party/boringssl/include/openssl/stack_macros.h +0 -256
  675. data/third_party/boringssl/include/openssl/tls1.h +1 -1
  676. data/third_party/boringssl/include/openssl/x509.h +0 -2
  677. data/third_party/boringssl/include/openssl/x509_vfy.h +5 -0
  678. data/third_party/boringssl/ssl/d1_both.c +102 -101
  679. data/third_party/boringssl/ssl/d1_clnt.c +145 -150
  680. data/third_party/boringssl/ssl/d1_lib.c +63 -62
  681. data/third_party/boringssl/ssl/d1_pkt.c +73 -71
  682. data/third_party/boringssl/ssl/d1_srvr.c +116 -125
  683. data/third_party/boringssl/ssl/dtls_record.c +3 -3
  684. data/third_party/boringssl/ssl/internal.h +210 -208
  685. data/third_party/boringssl/ssl/pqueue/pqueue.c +2 -2
  686. data/third_party/boringssl/ssl/s3_both.c +116 -130
  687. data/third_party/boringssl/ssl/s3_clnt.c +589 -740
  688. data/third_party/boringssl/ssl/s3_enc.c +52 -151
  689. data/third_party/boringssl/ssl/s3_lib.c +70 -76
  690. data/third_party/boringssl/ssl/s3_pkt.c +105 -144
  691. data/third_party/boringssl/ssl/s3_srvr.c +542 -806
  692. data/third_party/boringssl/ssl/ssl_aead_ctx.c +1 -1
  693. data/third_party/boringssl/ssl/ssl_cert.c +2 -2
  694. data/third_party/boringssl/ssl/ssl_cipher.c +7 -3
  695. data/third_party/boringssl/ssl/ssl_ecdh.c +374 -0
  696. data/third_party/boringssl/ssl/ssl_lib.c +260 -221
  697. data/third_party/boringssl/ssl/ssl_session.c +17 -17
  698. data/third_party/boringssl/ssl/t1_enc.c +128 -273
  699. data/third_party/boringssl/ssl/t1_lib.c +134 -258
  700. data/third_party/boringssl/ssl/test/test_config.h +2 -0
  701. data/third_party/boringssl/ssl/tls_record.c +52 -15
  702. metadata +385 -359
  703. data/src/core/channel/client_uchannel.c +0 -243
  704. data/src/core/channel/client_uchannel.h +0 -60
  705. data/src/core/channel/connected_channel.h +0 -51
  706. data/src/core/client_config/lb_policies/pick_first.h +0 -43
  707. data/src/core/client_config/resolvers/dns_resolver.h +0 -42
  708. data/src/core/client_config/subchannel_factory.h +0 -66
  709. data/src/core/httpcli/parser.c +0 -211
  710. data/src/core/iomgr/fd_posix.c +0 -451
  711. data/src/core/iomgr/fd_posix.h +0 -192
  712. data/src/core/iomgr/pollset_multipoller_with_epoll.c +0 -324
  713. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +0 -234
  714. data/src/core/iomgr/pollset_posix.c +0 -633
  715. data/src/core/iomgr/pollset_posix.h +0 -153
  716. data/src/core/iomgr/pollset_set_posix.c +0 -202
  717. data/src/core/iomgr/pollset_set_posix.h +0 -45
  718. data/src/core/surface/init.c +0 -174
  719. data/src/core/surface/init_secure.c +0 -42
  720. data/src/core/surface/server_create.c +0 -48
  721. data/src/core/transport/chttp2/huffsyms.c +0 -297
  722. data/src/ruby/bin/grpc_ruby_interop_client +0 -33
  723. data/src/ruby/bin/grpc_ruby_interop_server +0 -33
  724. data/third_party/boringssl/crypto/dsa/internal.h +0 -78
@@ -84,8 +84,8 @@ void CBB_cleanup(CBB *cbb) {
84
84
  cbb->base = NULL;
85
85
  }
86
86
 
87
- static int cbb_buffer_add(struct cbb_buffer_st *base, uint8_t **out,
88
- size_t len) {
87
+ static int cbb_buffer_reserve(struct cbb_buffer_st *base, uint8_t **out,
88
+ size_t len) {
89
89
  size_t newlen;
90
90
 
91
91
  if (base == NULL) {
@@ -121,7 +121,17 @@ static int cbb_buffer_add(struct cbb_buffer_st *base, uint8_t **out,
121
121
  if (out) {
122
122
  *out = base->buf + base->len;
123
123
  }
124
- base->len = newlen;
124
+
125
+ return 1;
126
+ }
127
+
128
+ static int cbb_buffer_add(struct cbb_buffer_st *base, uint8_t **out,
129
+ size_t len) {
130
+ if (!cbb_buffer_reserve(base, out, len)) {
131
+ return 0;
132
+ }
133
+ /* This will not overflow or |cbb_buffer_reserve| would have failed. */
134
+ base->len += len;
125
135
  return 1;
126
136
  }
127
137
 
@@ -251,6 +261,11 @@ int CBB_flush(CBB *cbb) {
251
261
  return 1;
252
262
  }
253
263
 
264
+ const uint8_t *CBB_data(const CBB *cbb) {
265
+ assert(cbb->child == NULL);
266
+ return cbb->base->buf + cbb->offset + cbb->pending_len_len;
267
+ }
268
+
254
269
  size_t CBB_len(const CBB *cbb) {
255
270
  assert(cbb->child == NULL);
256
271
  assert(cbb->offset + cbb->pending_len_len <= cbb->base->len);
@@ -339,6 +354,25 @@ int CBB_add_space(CBB *cbb, uint8_t **out_data, size_t len) {
339
354
  return 1;
340
355
  }
341
356
 
357
+ int CBB_reserve(CBB *cbb, uint8_t **out_data, size_t len) {
358
+ if (!CBB_flush(cbb) ||
359
+ !cbb_buffer_reserve(cbb->base, out_data, len)) {
360
+ return 0;
361
+ }
362
+ return 1;
363
+ }
364
+
365
+ int CBB_did_write(CBB *cbb, size_t len) {
366
+ size_t newlen = cbb->base->len + len;
367
+ if (cbb->child != NULL ||
368
+ newlen < cbb->base->len ||
369
+ newlen > cbb->base->cap) {
370
+ return 0;
371
+ }
372
+ cbb->base->len = newlen;
373
+ return 1;
374
+ }
375
+
342
376
  int CBB_add_u8(CBB *cbb, uint8_t value) {
343
377
  if (!CBB_flush(cbb)) {
344
378
  return 0;
@@ -22,22 +22,51 @@ extern "C" {
22
22
  #endif
23
23
 
24
24
 
25
- /* CBS_asn1_ber_to_der reads an ASN.1 structure from |in|. If it finds
26
- * indefinite-length elements then it attempts to convert the BER data to DER
27
- * and sets |*out| and |*out_length| to describe a malloced buffer containing
28
- * the DER data. Additionally, |*in| will be advanced over the ASN.1 data.
25
+ /* CBS_asn1_ber_to_der reads a BER element from |in|. If it finds
26
+ * indefinite-length elements or constructed strings then it converts the BER
27
+ * data to DER and sets |*out| and |*out_length| to describe a malloced buffer
28
+ * containing the DER data. Additionally, |*in| will be advanced over the BER
29
+ * element.
29
30
  *
30
- * If it doesn't find any indefinite-length elements then it sets |*out| to
31
- * NULL and |*in| is unmodified.
31
+ * If it doesn't find any indefinite-length elements or constructed strings then
32
+ * it sets |*out| to NULL and |*in| is unmodified.
32
33
  *
33
- * A sufficiently complex ASN.1 structure will break this function because it's
34
- * not possible to generically convert BER to DER without knowledge of the
35
- * structure itself. However, this sufficies to handle the PKCS#7 and #12 output
36
- * from NSS.
34
+ * This function should successfully process any valid BER input, however it
35
+ * will not convert all of BER's deviations from DER. BER is ambiguous between
36
+ * implicitly-tagged SEQUENCEs of strings and implicitly-tagged constructed
37
+ * strings. Implicitly-tagged strings must be parsed with
38
+ * |CBS_get_ber_implicitly_tagged_string| instead of |CBS_get_asn1|. The caller
39
+ * must also account for BER variations in the contents of a primitive.
37
40
  *
38
41
  * It returns one on success and zero otherwise. */
39
42
  OPENSSL_EXPORT int CBS_asn1_ber_to_der(CBS *in, uint8_t **out, size_t *out_len);
40
43
 
44
+ /* CBS_get_asn1_implicit_string parses a BER string of primitive type
45
+ * |inner_tag| implicitly-tagged with |outer_tag|. It sets |out| to the
46
+ * contents. If concatenation was needed, it sets |*out_storage| to a buffer
47
+ * which the caller must release with |OPENSSL_free|. Otherwise, it sets
48
+ * |*out_storage| to NULL.
49
+ *
50
+ * This function does not parse all of BER. It requires the string be
51
+ * definite-length. Constructed strings are allowed, but all children of the
52
+ * outermost element must be primitive. The caller should use
53
+ * |CBS_asn1_ber_to_der| before running this function.
54
+ *
55
+ * It returns one on success and zero otherwise. */
56
+ OPENSSL_EXPORT int CBS_get_asn1_implicit_string(CBS *in, CBS *out,
57
+ uint8_t **out_storage,
58
+ unsigned outer_tag,
59
+ unsigned inner_tag);
60
+
61
+ /* CBB_finish_i2d calls |CBB_finish| on |cbb| which must have been initialized
62
+ * with |CBB_init|. If |outp| is not NULL then the result is written to |*outp|
63
+ * and |*outp| is advanced just past the output. It returns the number of bytes
64
+ * in the result, whether written or not, or a negative value on error. On
65
+ * error, it calls |CBB_cleanup| on |cbb|.
66
+ *
67
+ * This function may be used to help implement legacy i2d ASN.1 functions. */
68
+ int CBB_finish_i2d(CBB *cbb, uint8_t **outp);
69
+
41
70
 
42
71
  #if defined(__cplusplus)
43
72
  } /* extern C */
@@ -25,6 +25,9 @@
25
25
 
26
26
  #include <openssl/chacha.h>
27
27
 
28
+ #include "../internal.h"
29
+
30
+
28
31
  #if defined(ASM_GEN) || \
29
32
  !defined(OPENSSL_WINDOWS) && \
30
33
  (defined(OPENSSL_X86_64) || defined(OPENSSL_X86)) && defined(__SSE2__)
@@ -80,8 +83,8 @@ typedef unsigned vec __attribute__((vector_size(16)));
80
83
  #define VBPI 3
81
84
  #endif
82
85
  #define ONE (vec) _mm_set_epi32(0, 0, 0, 1)
83
- #define LOAD(m) (vec) _mm_loadu_si128((__m128i *)(m))
84
- #define LOAD_ALIGNED(m) (vec) _mm_load_si128((__m128i *)(m))
86
+ #define LOAD(m) (vec) _mm_loadu_si128((const __m128i *)(m))
87
+ #define LOAD_ALIGNED(m) (vec) _mm_load_si128((const __m128i *)(m))
85
88
  #define STORE(m, r) _mm_storeu_si128((__m128i *)(m), (__m128i)(r))
86
89
  #define ROTV1(x) (vec) _mm_shuffle_epi32((__m128i)x, _MM_SHUFFLE(0, 3, 2, 1))
87
90
  #define ROTV2(x) (vec) _mm_shuffle_epi32((__m128i)x, _MM_SHUFFLE(1, 0, 3, 2))
@@ -157,26 +160,28 @@ void CRYPTO_chacha_20(
157
160
  const uint8_t nonce[12],
158
161
  uint32_t counter)
159
162
  {
160
- unsigned iters, i, *op=(unsigned *)out, *ip=(unsigned *)in, *kp;
163
+ unsigned iters, i;
164
+ unsigned *op = (unsigned *)out;
165
+ const unsigned *ip = (const unsigned *)in;
166
+ const unsigned *kp = (const unsigned *)key;
161
167
  #if defined(__ARM_NEON__)
162
168
  uint32_t np[3];
163
- uint8_t alignment_buffer[16] __attribute__((aligned(16)));
169
+ alignas(16) uint8_t alignment_buffer[16];
164
170
  #endif
165
171
  vec s0, s1, s2, s3;
166
- __attribute__ ((aligned (16))) unsigned chacha_const[] =
172
+ alignas(16) unsigned chacha_const[] =
167
173
  {0x61707865,0x3320646E,0x79622D32,0x6B206574};
168
- kp = (unsigned *)key;
169
174
  #if defined(__ARM_NEON__)
170
175
  memcpy(np, nonce, 12);
171
176
  #endif
172
177
  s0 = LOAD_ALIGNED(chacha_const);
173
- s1 = LOAD(&((vec*)kp)[0]);
174
- s2 = LOAD(&((vec*)kp)[1]);
178
+ s1 = LOAD(&((const vec*)kp)[0]);
179
+ s2 = LOAD(&((const vec*)kp)[1]);
175
180
  s3 = (vec){
176
181
  counter,
177
- ((uint32_t*)nonce)[0],
178
- ((uint32_t*)nonce)[1],
179
- ((uint32_t*)nonce)[2]
182
+ ((const uint32_t*)nonce)[0],
183
+ ((const uint32_t*)nonce)[1],
184
+ ((const uint32_t*)nonce)[2]
180
185
  };
181
186
 
182
187
  for (iters = 0; iters < inlen/(BPI*64); iters++)
@@ -286,7 +291,7 @@ void CRYPTO_chacha_20(
286
291
  inlen = inlen % 64;
287
292
  if (inlen)
288
293
  {
289
- __attribute__ ((aligned (16))) vec buf[4];
294
+ alignas(16) vec buf[4];
290
295
  vec v0,v1,v2,v3;
291
296
  v0 = s0; v1 = s1; v2 = s2; v3 = s3;
292
297
  for (i = CHACHA_RNDS/2; i; i--)
@@ -316,7 +321,7 @@ void CRYPTO_chacha_20(
316
321
  buf[0] = REVV_BE(v0 + s0);
317
322
 
318
323
  for (i=inlen & ~15; i<inlen; i++)
319
- ((char *)op)[i] = ((char *)ip)[i] ^ ((char *)buf)[i];
324
+ ((char *)op)[i] = ((const char *)ip)[i] ^ ((const char *)buf)[i];
320
325
  }
321
326
  }
322
327
 
@@ -384,7 +384,7 @@ static int aes_ecb_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out, const uint8_t *in,
384
384
 
385
385
  static int aes_ctr_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out, const uint8_t *in,
386
386
  size_t len) {
387
- unsigned int num = ctx->num;
387
+ unsigned num = (unsigned)ctx->num;
388
388
  EVP_AES_KEY *dat = (EVP_AES_KEY *)ctx->cipher_data;
389
389
 
390
390
  if (dat->stream.ctr) {
@@ -394,7 +394,7 @@ static int aes_ctr_cipher(EVP_CIPHER_CTX *ctx, uint8_t *out, const uint8_t *in,
394
394
  CRYPTO_ctr128_encrypt(in, out, len, &dat->ks, ctx->iv, ctx->buf, &num,
395
395
  dat->block);
396
396
  }
397
- ctx->num = (size_t)num;
397
+ ctx->num = (int)num;
398
398
  return 1;
399
399
  }
400
400
 
@@ -23,6 +23,7 @@
23
23
  #include <openssl/poly1305.h>
24
24
 
25
25
  #include "internal.h"
26
+ #include "../internal.h"
26
27
 
27
28
 
28
29
  #define POLY1305_TAG_LEN 16
@@ -79,12 +80,6 @@ static void poly1305_update_length(poly1305_state *poly1305, size_t data_len) {
79
80
  CRYPTO_poly1305_update(poly1305, length_bytes, sizeof(length_bytes));
80
81
  }
81
82
 
82
- #if defined(__arm__)
83
- #define ALIGNED __attribute__((aligned(16)))
84
- #else
85
- #define ALIGNED
86
- #endif
87
-
88
83
  typedef void (*aead_poly1305_update)(poly1305_state *ctx, const uint8_t *ad,
89
84
  size_t ad_len, const uint8_t *ciphertext,
90
85
  size_t ciphertext_len);
@@ -98,7 +93,7 @@ static void aead_poly1305(aead_poly1305_update update,
98
93
  const uint8_t nonce[12], const uint8_t *ad,
99
94
  size_t ad_len, const uint8_t *ciphertext,
100
95
  size_t ciphertext_len) {
101
- uint8_t poly1305_key[32] ALIGNED;
96
+ alignas(16) uint8_t poly1305_key[32];
102
97
  memset(poly1305_key, 0, sizeof(poly1305_key));
103
98
  CRYPTO_chacha_20(poly1305_key, poly1305_key, sizeof(poly1305_key),
104
99
  c20_ctx->key, nonce, 0);
@@ -139,7 +134,7 @@ static int seal_impl(aead_poly1305_update poly1305_update,
139
134
 
140
135
  CRYPTO_chacha_20(out, in, in_len, c20_ctx->key, nonce, 1);
141
136
 
142
- uint8_t tag[POLY1305_TAG_LEN] ALIGNED;
137
+ alignas(16) uint8_t tag[POLY1305_TAG_LEN];
143
138
  aead_poly1305(poly1305_update, tag, c20_ctx, nonce, ad, ad_len, out, in_len);
144
139
 
145
140
  memcpy(out + in_len, tag, c20_ctx->tag_len);
@@ -173,7 +168,7 @@ static int open_impl(aead_poly1305_update poly1305_update,
173
168
  }
174
169
 
175
170
  plaintext_len = in_len - c20_ctx->tag_len;
176
- uint8_t tag[POLY1305_TAG_LEN] ALIGNED;
171
+ alignas(16) uint8_t tag[POLY1305_TAG_LEN];
177
172
  aead_poly1305(poly1305_update, tag, c20_ctx, nonce, ad, ad_len, in,
178
173
  plaintext_len);
179
174
  if (CRYPTO_memcmp(tag, in + plaintext_len, c20_ctx->tag_len) != 0) {
@@ -146,7 +146,6 @@ void EVP_tls_cbc_copy_mac(uint8_t *out, unsigned md_size,
146
146
  * the MAC's position can only vary by 255 bytes. */
147
147
  unsigned scan_start = 0;
148
148
  unsigned i, j;
149
- unsigned div_spoiler;
150
149
  unsigned rotate_offset;
151
150
 
152
151
  assert(orig_len >= in_len);
@@ -161,16 +160,46 @@ void EVP_tls_cbc_copy_mac(uint8_t *out, unsigned md_size,
161
160
  if (orig_len > md_size + 255 + 1) {
162
161
  scan_start = orig_len - (md_size + 255 + 1);
163
162
  }
164
- /* div_spoiler contains a multiple of md_size that is used to cause the
165
- * modulo operation to be constant time. Without this, the time varies
166
- * based on the amount of padding when running on Intel chips at least.
163
+
164
+ /* Ideally the next statement would be:
165
+ *
166
+ * rotate_offset = (mac_start - scan_start) % md_size;
167
167
  *
168
- * The aim of right-shifting md_size is so that the compiler doesn't
169
- * figure out that it can remove div_spoiler as that would require it
170
- * to prove that md_size is always even, which I hope is beyond it. */
171
- div_spoiler = md_size >> 1;
172
- div_spoiler <<= (sizeof(div_spoiler) - 1) * 8;
173
- rotate_offset = (div_spoiler + mac_start - scan_start) % md_size;
168
+ * However, division is not a constant-time operation (at least on Intel
169
+ * chips). Thus we enumerate the possible values of md_size and handle each
170
+ * separately. The value of |md_size| is public information (it's determined
171
+ * by the cipher suite in the ServerHello) so our timing can vary based on
172
+ * its value. */
173
+
174
+ rotate_offset = mac_start - scan_start;
175
+ /* rotate_offset can be, at most, 255 (bytes of padding) + 1 (padding length)
176
+ * + md_size = 256 + 48 (since SHA-384 is the largest hash) = 304. */
177
+ assert(rotate_offset <= 304);
178
+
179
+ if (md_size == 16) {
180
+ rotate_offset &= 15;
181
+ } else if (md_size == 20) {
182
+ /* 1/20 is approximated as 25/512 and then Barrett reduction is used.
183
+ * Analytically, this is correct for 0 <= rotate_offset <= 853. */
184
+ unsigned q = (rotate_offset * 25) >> 9;
185
+ rotate_offset -= q * 20;
186
+ rotate_offset -=
187
+ constant_time_select(constant_time_ge(rotate_offset, 20), 20, 0);
188
+ } else if (md_size == 32) {
189
+ rotate_offset &= 31;
190
+ } else if (md_size == 48) {
191
+ /* 1/48 is approximated as 10/512 and then Barrett reduction is used.
192
+ * Analytically, this is correct for 0 <= rotate_offset <= 768. */
193
+ unsigned q = (rotate_offset * 10) >> 9;
194
+ rotate_offset -= q * 48;
195
+ rotate_offset -=
196
+ constant_time_select(constant_time_ge(rotate_offset, 48), 48, 0);
197
+ } else {
198
+ /* This should be impossible therefore this path doesn't run in constant
199
+ * time. */
200
+ assert(0);
201
+ rotate_offset = rotate_offset % md_size;
202
+ }
174
203
 
175
204
  memset(rotated_mac, 0, md_size);
176
205
  for (i = scan_start, j = 0; i < orig_len; i++) {
@@ -776,3 +776,12 @@ int CONF_parse_list(const char *list, char sep, int remove_whitespace,
776
776
  lstart = p + 1;
777
777
  }
778
778
  }
779
+
780
+ int CONF_modules_load_file(CONF_MUST_BE_NULL *filename, const char *appname,
781
+ unsigned long flags) {
782
+ return 1;
783
+ }
784
+
785
+ void CONF_modules_free(void) {}
786
+
787
+ void OPENSSL_config(CONF_MUST_BE_NULL *config_name) {}
@@ -127,7 +127,7 @@ static void handle_cpu_env(uint32_t *out, const char *in) {
127
127
  const int invert = in[0] == '~';
128
128
  uint64_t v;
129
129
 
130
- if (!sscanf(in + invert, "%" PRIi64, &v)) {
130
+ if (!sscanf(in + invert, "%" PRIu64, &v)) {
131
131
  return;
132
132
  }
133
133
 
@@ -138,3 +138,5 @@ int CRYPTO_malloc_init(void) {
138
138
  }
139
139
 
140
140
  void ENGINE_load_builtin_engines(void) {}
141
+
142
+ void OPENSSL_load_builtin_modules(void) {}
@@ -17,8 +17,7 @@
17
17
  * public domain but this file has the ISC license just to keep licencing
18
18
  * simple.
19
19
  *
20
- * The field functions are shared by Ed25519 and X25519, although Ed25519 is
21
- * disabled when |OPENSSL_SMALL| is defined. */
20
+ * The field functions are shared by Ed25519 and X25519 where possible. */
22
21
 
23
22
  #include <openssl/curve25519.h>
24
23
 
@@ -29,6 +28,8 @@
29
28
  #include <openssl/rand.h>
30
29
  #include <openssl/sha.h>
31
30
 
31
+ #include "internal.h"
32
+
32
33
 
33
34
  /* fe means field element. Here the field is \Z/(2^255-19). An element t,
34
35
  * entries t[0]...t[9], represents the integer t[0]+2^26 t[1]+2^51 t[2]+2^77
@@ -226,21 +227,6 @@ static void fe_1(fe h) {
226
227
  h[0] = 1;
227
228
  }
228
229
 
229
- /* Replace (f,g) with (g,f) if b == 1;
230
- * replace (f,g) with (f,g) if b == 0.
231
- *
232
- * Preconditions: b in {0,1}. */
233
- static void fe_cswap(fe f, fe g, unsigned int b) {
234
- b = 0-b;
235
- unsigned i;
236
- for (i = 0; i < 10; i++) {
237
- int32_t x = f[i] ^ g[i];
238
- x &= b;
239
- f[i] ^= x;
240
- g[i] ^= x;
241
- }
242
- }
243
-
244
230
  /* h = f + g
245
231
  * Can overlap h with f or g.
246
232
  *
@@ -721,73 +707,6 @@ static void fe_invert(fe out, const fe z) {
721
707
  fe_mul(out, t1, t0);
722
708
  }
723
709
 
724
- /* h = f * 121666
725
- * Can overlap h with f.
726
- *
727
- * Preconditions:
728
- * |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
729
- *
730
- * Postconditions:
731
- * |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. */
732
- static void fe_mul121666(fe h, fe f) {
733
- int32_t f0 = f[0];
734
- int32_t f1 = f[1];
735
- int32_t f2 = f[2];
736
- int32_t f3 = f[3];
737
- int32_t f4 = f[4];
738
- int32_t f5 = f[5];
739
- int32_t f6 = f[6];
740
- int32_t f7 = f[7];
741
- int32_t f8 = f[8];
742
- int32_t f9 = f[9];
743
- int64_t h0 = f0 * (int64_t) 121666;
744
- int64_t h1 = f1 * (int64_t) 121666;
745
- int64_t h2 = f2 * (int64_t) 121666;
746
- int64_t h3 = f3 * (int64_t) 121666;
747
- int64_t h4 = f4 * (int64_t) 121666;
748
- int64_t h5 = f5 * (int64_t) 121666;
749
- int64_t h6 = f6 * (int64_t) 121666;
750
- int64_t h7 = f7 * (int64_t) 121666;
751
- int64_t h8 = f8 * (int64_t) 121666;
752
- int64_t h9 = f9 * (int64_t) 121666;
753
- int64_t carry0;
754
- int64_t carry1;
755
- int64_t carry2;
756
- int64_t carry3;
757
- int64_t carry4;
758
- int64_t carry5;
759
- int64_t carry6;
760
- int64_t carry7;
761
- int64_t carry8;
762
- int64_t carry9;
763
-
764
- carry9 = (h9 + (int64_t) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;
765
- carry1 = (h1 + (int64_t) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;
766
- carry3 = (h3 + (int64_t) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;
767
- carry5 = (h5 + (int64_t) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;
768
- carry7 = (h7 + (int64_t) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;
769
-
770
- carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
771
- carry2 = (h2 + (int64_t) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;
772
- carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
773
- carry6 = (h6 + (int64_t) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;
774
- carry8 = (h8 + (int64_t) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;
775
-
776
- h[0] = h0;
777
- h[1] = h1;
778
- h[2] = h2;
779
- h[3] = h3;
780
- h[4] = h4;
781
- h[5] = h5;
782
- h[6] = h6;
783
- h[7] = h7;
784
- h[8] = h8;
785
- h[9] = h9;
786
- }
787
-
788
- /* Ed25519 support is disabled when built with |OPENSSL_SMALL|. */
789
- #if !defined(OPENSSL_SMALL)
790
-
791
710
  /* h = -f
792
711
  *
793
712
  * Preconditions:
@@ -1130,7 +1049,7 @@ static const fe d = {-10913610, 13857413, -15372611, 6949391, 114729,
1130
1049
  static const fe sqrtm1 = {-32595792, -7943725, 9377950, 3500415, 12389472,
1131
1050
  -272473, -25146209, -2005654, 326686, 11406482};
1132
1051
 
1133
- static int ge_frombytes_negate_vartime(ge_p3 *h, const uint8_t *s) {
1052
+ static int ge_frombytes_vartime(ge_p3 *h, const uint8_t *s) {
1134
1053
  fe u;
1135
1054
  fe v;
1136
1055
  fe v3;
@@ -1165,7 +1084,7 @@ static int ge_frombytes_negate_vartime(ge_p3 *h, const uint8_t *s) {
1165
1084
  fe_mul(h->X, h->X, sqrtm1);
1166
1085
  }
1167
1086
 
1168
- if (fe_isnegative(h->X) == (s[31] >> 7)) {
1087
+ if (fe_isnegative(h->X) != (s[31] >> 7)) {
1169
1088
  fe_neg(h->X, h->X);
1170
1089
  }
1171
1090
 
@@ -1329,20 +1248,17 @@ static void cmov(ge_precomp *t, ge_precomp *u, uint8_t b) {
1329
1248
  fe_cmov(t->xy2d, u->xy2d, b);
1330
1249
  }
1331
1250
 
1332
- #if 0
1251
+ #if defined(OPENSSL_SMALL)
1333
1252
 
1334
- /* At the moment, building with |OPENSSL_SMALL| causes Ed25519 to be disabled.
1335
- * In the future we might enable it but, in that case, we'll still probably
1336
- * want to keep the size down. This block of code replaces the standard
1337
- * base-point table with a much smaller one. The standard table is 30,720 bytes
1338
- * while this one is just 960.
1253
+ /* This block of code replaces the standard base-point table with a much smaller
1254
+ * one. The standard table is 30,720 bytes while this one is just 960.
1339
1255
  *
1340
1256
  * This table contains 15 pairs of group elements, (x, y), where each field
1341
1257
  * element is serialised with |fe_tobytes|. If |i| is the index of the group
1342
1258
  * element then consider i+1 as a four-bit number: (i₀, i₁, i₂, i₃) (where i₀
1343
1259
  * is the most significant bit). The value of the group element is then:
1344
1260
  * (i₀×2^192 + i₁×2^128 + i₂×2^64 + i₃)G, where G is the generator. */
1345
- static const uint8_t kSmallPrecomp[15 * 2 * 32] = {
1261
+ static const uint8_t k25519SmallPrecomp[15 * 2 * 32] = {
1346
1262
  0x1a, 0xd5, 0x25, 0x8f, 0x60, 0x2d, 0x56, 0xc9, 0xb2, 0xa7, 0x25, 0x95,
1347
1263
  0x60, 0xc7, 0x2c, 0x69, 0x5c, 0xdc, 0xd6, 0xfd, 0x31, 0xe2, 0xa4, 0xc0,
1348
1264
  0xfe, 0x53, 0x6e, 0xcd, 0xd3, 0x36, 0x69, 0x21, 0x58, 0x66, 0x66, 0x66,
@@ -1426,12 +1342,13 @@ static const uint8_t kSmallPrecomp[15 * 2 * 32] = {
1426
1342
  };
1427
1343
 
1428
1344
  static void ge_scalarmult_base(ge_p3 *h, const uint8_t a[32]) {
1429
- /* kSmallPrecomp is first expanded into matching |ge_precomp| elements. */
1345
+ /* k25519SmallPrecomp is first expanded into matching |ge_precomp|
1346
+ * elements. */
1430
1347
  ge_precomp multiples[15];
1431
1348
 
1432
1349
  unsigned i;
1433
1350
  for (i = 0; i < 15; i++) {
1434
- const uint8_t *bytes = &kSmallPrecomp[i*(2 * 32)];
1351
+ const uint8_t *bytes = &k25519SmallPrecomp[i*(2 * 32)];
1435
1352
  fe x, y;
1436
1353
  fe_frombytes(x, bytes);
1437
1354
  fe_frombytes(y, bytes + 32);
@@ -1443,7 +1360,7 @@ static void ge_scalarmult_base(ge_p3 *h, const uint8_t a[32]) {
1443
1360
  fe_mul(out->xy2d, out->xy2d, d2);
1444
1361
  }
1445
1362
 
1446
- /* See the comment above |kSmallPrecomp| about the structure of the
1363
+ /* See the comment above |k25519SmallPrecomp| about the structure of the
1447
1364
  * precomputed elements. This loop does 64 additions and 64 doublings to
1448
1365
  * calculate the result. */
1449
1366
  ge_p3_0(h);
@@ -1477,8 +1394,8 @@ static void ge_scalarmult_base(ge_p3 *h, const uint8_t a[32]) {
1477
1394
 
1478
1395
  #else
1479
1396
 
1480
- /* base[i][j] = (j+1)*256^i*B */
1481
- static ge_precomp base[32][8] = {
1397
+ /* k25519Precomp[i][j] = (j+1)*256^i*B */
1398
+ static ge_precomp k25519Precomp[32][8] = {
1482
1399
  {
1483
1400
  {
1484
1401
  {25967493, -14356035, 29566456, 3660896, -12694345, 4014787,
@@ -3605,14 +3522,14 @@ static void table_select(ge_precomp *t, int pos, signed char b) {
3605
3522
  uint8_t babs = b - (((-bnegative) & b) << 1);
3606
3523
 
3607
3524
  ge_precomp_0(t);
3608
- cmov(t, &base[pos][0], equal(babs, 1));
3609
- cmov(t, &base[pos][1], equal(babs, 2));
3610
- cmov(t, &base[pos][2], equal(babs, 3));
3611
- cmov(t, &base[pos][3], equal(babs, 4));
3612
- cmov(t, &base[pos][4], equal(babs, 5));
3613
- cmov(t, &base[pos][5], equal(babs, 6));
3614
- cmov(t, &base[pos][6], equal(babs, 7));
3615
- cmov(t, &base[pos][7], equal(babs, 8));
3525
+ cmov(t, &k25519Precomp[pos][0], equal(babs, 1));
3526
+ cmov(t, &k25519Precomp[pos][1], equal(babs, 2));
3527
+ cmov(t, &k25519Precomp[pos][2], equal(babs, 3));
3528
+ cmov(t, &k25519Precomp[pos][3], equal(babs, 4));
3529
+ cmov(t, &k25519Precomp[pos][4], equal(babs, 5));
3530
+ cmov(t, &k25519Precomp[pos][5], equal(babs, 6));
3531
+ cmov(t, &k25519Precomp[pos][6], equal(babs, 7));
3532
+ cmov(t, &k25519Precomp[pos][7], equal(babs, 8));
3616
3533
  fe_copy(minust.yplusx, t->yminusx);
3617
3534
  fe_copy(minust.yminusx, t->yplusx);
3618
3535
  fe_neg(minust.xy2d, t->xy2d);
@@ -4738,10 +4655,13 @@ int ED25519_verify(const uint8_t *message, size_t message_len,
4738
4655
  const uint8_t signature[64], const uint8_t public_key[32]) {
4739
4656
  ge_p3 A;
4740
4657
  if ((signature[63] & 224) != 0 ||
4741
- ge_frombytes_negate_vartime(&A, public_key) != 0) {
4658
+ ge_frombytes_vartime(&A, public_key) != 0) {
4742
4659
  return 0;
4743
4660
  }
4744
4661
 
4662
+ fe_neg(A.X, A.X);
4663
+ fe_neg(A.T, A.T);
4664
+
4745
4665
  uint8_t pkcopy[32];
4746
4666
  memcpy(pkcopy, public_key, 32);
4747
4667
  uint8_t rcopy[32];
@@ -4768,7 +4688,94 @@ int ED25519_verify(const uint8_t *message, size_t message_len,
4768
4688
  return CRYPTO_memcmp(rcheck, rcopy, sizeof(rcheck)) == 0;
4769
4689
  }
4770
4690
 
4771
- #endif
4691
+
4692
+ #if defined(BORINGSSL_X25519_X86_64)
4693
+
4694
+ static void x25519_scalar_mult(uint8_t out[32], const uint8_t scalar[32],
4695
+ const uint8_t point[32]) {
4696
+ x25519_x86_64(out, scalar, point);
4697
+ }
4698
+
4699
+ #else
4700
+
4701
+ /* Replace (f,g) with (g,f) if b == 1;
4702
+ * replace (f,g) with (f,g) if b == 0.
4703
+ *
4704
+ * Preconditions: b in {0,1}. */
4705
+ static void fe_cswap(fe f, fe g, unsigned int b) {
4706
+ b = 0-b;
4707
+ unsigned i;
4708
+ for (i = 0; i < 10; i++) {
4709
+ int32_t x = f[i] ^ g[i];
4710
+ x &= b;
4711
+ f[i] ^= x;
4712
+ g[i] ^= x;
4713
+ }
4714
+ }
4715
+
4716
+ /* h = f * 121666
4717
+ * Can overlap h with f.
4718
+ *
4719
+ * Preconditions:
4720
+ * |f| bounded by 1.1*2^26,1.1*2^25,1.1*2^26,1.1*2^25,etc.
4721
+ *
4722
+ * Postconditions:
4723
+ * |h| bounded by 1.1*2^25,1.1*2^24,1.1*2^25,1.1*2^24,etc. */
4724
+ static void fe_mul121666(fe h, fe f) {
4725
+ int32_t f0 = f[0];
4726
+ int32_t f1 = f[1];
4727
+ int32_t f2 = f[2];
4728
+ int32_t f3 = f[3];
4729
+ int32_t f4 = f[4];
4730
+ int32_t f5 = f[5];
4731
+ int32_t f6 = f[6];
4732
+ int32_t f7 = f[7];
4733
+ int32_t f8 = f[8];
4734
+ int32_t f9 = f[9];
4735
+ int64_t h0 = f0 * (int64_t) 121666;
4736
+ int64_t h1 = f1 * (int64_t) 121666;
4737
+ int64_t h2 = f2 * (int64_t) 121666;
4738
+ int64_t h3 = f3 * (int64_t) 121666;
4739
+ int64_t h4 = f4 * (int64_t) 121666;
4740
+ int64_t h5 = f5 * (int64_t) 121666;
4741
+ int64_t h6 = f6 * (int64_t) 121666;
4742
+ int64_t h7 = f7 * (int64_t) 121666;
4743
+ int64_t h8 = f8 * (int64_t) 121666;
4744
+ int64_t h9 = f9 * (int64_t) 121666;
4745
+ int64_t carry0;
4746
+ int64_t carry1;
4747
+ int64_t carry2;
4748
+ int64_t carry3;
4749
+ int64_t carry4;
4750
+ int64_t carry5;
4751
+ int64_t carry6;
4752
+ int64_t carry7;
4753
+ int64_t carry8;
4754
+ int64_t carry9;
4755
+
4756
+ carry9 = (h9 + (int64_t) (1<<24)) >> 25; h0 += carry9 * 19; h9 -= carry9 << 25;
4757
+ carry1 = (h1 + (int64_t) (1<<24)) >> 25; h2 += carry1; h1 -= carry1 << 25;
4758
+ carry3 = (h3 + (int64_t) (1<<24)) >> 25; h4 += carry3; h3 -= carry3 << 25;
4759
+ carry5 = (h5 + (int64_t) (1<<24)) >> 25; h6 += carry5; h5 -= carry5 << 25;
4760
+ carry7 = (h7 + (int64_t) (1<<24)) >> 25; h8 += carry7; h7 -= carry7 << 25;
4761
+
4762
+ carry0 = (h0 + (int64_t) (1<<25)) >> 26; h1 += carry0; h0 -= carry0 << 26;
4763
+ carry2 = (h2 + (int64_t) (1<<25)) >> 26; h3 += carry2; h2 -= carry2 << 26;
4764
+ carry4 = (h4 + (int64_t) (1<<25)) >> 26; h5 += carry4; h4 -= carry4 << 26;
4765
+ carry6 = (h6 + (int64_t) (1<<25)) >> 26; h7 += carry6; h6 -= carry6 << 26;
4766
+ carry8 = (h8 + (int64_t) (1<<25)) >> 26; h9 += carry8; h8 -= carry8 << 26;
4767
+
4768
+ h[0] = h0;
4769
+ h[1] = h1;
4770
+ h[2] = h2;
4771
+ h[3] = h3;
4772
+ h[4] = h4;
4773
+ h[5] = h5;
4774
+ h[6] = h6;
4775
+ h[7] = h7;
4776
+ h[8] = h8;
4777
+ h[9] = h9;
4778
+ }
4772
4779
 
4773
4780
  static void x25519_scalar_mult_generic(uint8_t out[32],
4774
4781
  const uint8_t scalar[32],
@@ -4821,15 +4828,9 @@ static void x25519_scalar_mult_generic(uint8_t out[32],
4821
4828
  fe_tobytes(out, x2);
4822
4829
  }
4823
4830
 
4824
- #if defined(OPENSSL_ARM)
4825
- /* x25519_NEON is defined in asm/x25519-arm.S. */
4826
- void x25519_NEON(uint8_t out[32], const uint8_t scalar[32],
4827
- const uint8_t point[32]);
4828
- #endif
4829
-
4830
4831
  static void x25519_scalar_mult(uint8_t out[32], const uint8_t scalar[32],
4831
4832
  const uint8_t point[32]) {
4832
- #if defined(OPENSSL_ARM)
4833
+ #if defined(BORINGSSL_X25519_NEON)
4833
4834
  if (CRYPTO_is_NEON_capable()) {
4834
4835
  x25519_NEON(out, scalar, point);
4835
4836
  return;
@@ -4839,6 +4840,9 @@ static void x25519_scalar_mult(uint8_t out[32], const uint8_t scalar[32],
4839
4840
  x25519_scalar_mult_generic(out, scalar, point);
4840
4841
  }
4841
4842
 
4843
+ #endif /* BORINGSSL_X25519_X86_64 */
4844
+
4845
+
4842
4846
  void X25519_keypair(uint8_t out_public_value[32], uint8_t out_private_key[32]) {
4843
4847
  RAND_bytes(out_private_key, 32);
4844
4848
  X25519_public_from_private(out_public_value, out_private_key);
@@ -4852,10 +4856,11 @@ int X25519(uint8_t out_shared_key[32], const uint8_t private_key[32],
4852
4856
  return CRYPTO_memcmp(kZeros, out_shared_key, 32) != 0;
4853
4857
  }
4854
4858
 
4855
- #if defined(OPENSSL_SMALL)
4859
+ #if defined(BORINGSSL_X25519_X86_64)
4856
4860
 
4857
- /* When |OPENSSL_SMALL| is set, base point multiplication is done with the
4858
- * Montgomery ladder because the Ed25519 code isn't included. */
4861
+ /* When |BORINGSSL_X25519_X86_64| is set, base point multiplication is done with
4862
+ * the Montgomery ladder because it's faster. Otherwise it's done using the
4863
+ * Ed25519 tables. */
4859
4864
 
4860
4865
  void X25519_public_from_private(uint8_t out_public_value[32],
4861
4866
  const uint8_t private_key[32]) {
@@ -4867,7 +4872,7 @@ void X25519_public_from_private(uint8_t out_public_value[32],
4867
4872
 
4868
4873
  void X25519_public_from_private(uint8_t out_public_value[32],
4869
4874
  const uint8_t private_key[32]) {
4870
- #if defined(OPENSSL_ARM)
4875
+ #if defined(BORINGSSL_X25519_NEON)
4871
4876
  if (CRYPTO_is_NEON_capable()) {
4872
4877
  static const uint8_t kMongomeryBasePoint[32] = {9};
4873
4878
  x25519_NEON(out_public_value, private_key, kMongomeryBasePoint);
@@ -4894,4 +4899,4 @@ void X25519_public_from_private(uint8_t out_public_value[32],
4894
4899
  fe_tobytes(out_public_value, zplusy);
4895
4900
  }
4896
4901
 
4897
- #endif
4902
+ #endif /* BORINGSSL_X25519_X86_64 */