grpc 1.9.1 → 1.10.0.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 (637) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2654 -953
  3. data/etc/roots.pem +282 -683
  4. data/include/grpc/compression.h +9 -26
  5. data/include/grpc/grpc.h +10 -24
  6. data/include/grpc/grpc_security.h +7 -1
  7. data/include/grpc/impl/codegen/compression_types.h +5 -62
  8. data/include/grpc/impl/codegen/grpc_types.h +10 -6
  9. data/include/grpc/module.modulemap +1 -10
  10. data/include/grpc/support/alloc.h +3 -2
  11. data/include/grpc/support/log.h +1 -2
  12. data/{src/core/lib/gpr/thd_internal.h → include/grpc/support/thd_id.h} +23 -9
  13. data/src/boringssl/err_data.c +550 -496
  14. data/src/core/ext/census/grpc_context.cc +2 -1
  15. data/src/core/ext/filters/client_channel/backup_poller.cc +5 -4
  16. data/src/core/ext/filters/client_channel/channel_connectivity.cc +7 -7
  17. data/src/core/ext/filters/client_channel/client_channel.cc +162 -172
  18. data/src/core/ext/filters/client_channel/client_channel_factory.cc +4 -2
  19. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +10 -10
  20. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +18 -14
  21. data/src/core/ext/filters/client_channel/http_proxy.cc +3 -1
  22. data/src/core/ext/filters/client_channel/lb_policy.cc +21 -105
  23. data/src/core/ext/filters/client_channel/lb_policy.h +166 -170
  24. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +41 -36
  25. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +1452 -1459
  26. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +3 -2
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +7 -8
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +27 -27
  30. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +279 -304
  31. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +358 -330
  32. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.cc +30 -41
  33. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +7 -14
  34. data/src/core/ext/filters/client_channel/lb_policy_factory.cc +8 -21
  35. data/src/core/ext/filters/client_channel/lb_policy_factory.h +23 -27
  36. data/src/core/ext/filters/client_channel/lb_policy_registry.cc +58 -33
  37. data/src/core/ext/filters/client_channel/lb_policy_registry.h +25 -12
  38. data/src/core/ext/filters/client_channel/parse_address.cc +10 -8
  39. data/src/core/ext/filters/client_channel/proxy_mapper_registry.cc +2 -2
  40. data/src/core/ext/filters/client_channel/resolver.cc +6 -52
  41. data/src/core/ext/filters/client_channel/resolver.h +98 -55
  42. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +266 -237
  43. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +5 -5
  44. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +31 -27
  45. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +244 -207
  46. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +161 -148
  47. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +47 -31
  48. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +126 -126
  49. data/src/core/ext/filters/client_channel/resolver_factory.h +33 -32
  50. data/src/core/ext/filters/client_channel/resolver_registry.cc +110 -90
  51. data/src/core/ext/filters/client_channel/resolver_registry.h +49 -36
  52. data/src/core/ext/filters/client_channel/retry_throttle.cc +29 -22
  53. data/src/core/ext/filters/client_channel/subchannel.cc +173 -173
  54. data/src/core/ext/filters/client_channel/subchannel.h +38 -45
  55. data/src/core/ext/filters/client_channel/subchannel_index.cc +44 -40
  56. data/src/core/ext/filters/client_channel/uri_parser.cc +3 -3
  57. data/src/core/ext/filters/deadline/deadline_filter.cc +27 -18
  58. data/src/core/ext/filters/http/client/http_client_filter.cc +26 -23
  59. data/src/core/ext/filters/http/http_filters_plugin.cc +3 -2
  60. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +78 -110
  61. data/src/core/ext/filters/http/server/http_server_filter.cc +29 -26
  62. data/src/core/ext/filters/load_reporting/server_load_reporting_filter.cc +9 -11
  63. data/src/core/ext/filters/load_reporting/server_load_reporting_plugin.cc +2 -1
  64. data/src/core/ext/filters/max_age/max_age_filter.cc +14 -14
  65. data/src/core/ext/filters/message_size/message_size_filter.cc +20 -18
  66. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +4 -4
  67. data/src/core/ext/filters/workarounds/workaround_utils.cc +4 -4
  68. data/src/core/ext/transport/chttp2/alpn/alpn.cc +2 -1
  69. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +10 -10
  70. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +4 -4
  71. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +11 -12
  72. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +16 -13
  73. data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +36 -9
  74. data/src/core/ext/transport/chttp2/transport/bin_decoder.h +3 -0
  75. data/src/core/ext/transport/chttp2/transport/bin_encoder.cc +17 -14
  76. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +139 -145
  77. data/src/core/ext/transport/chttp2/transport/flow_control.cc +16 -14
  78. data/src/core/ext/transport/chttp2/transport/flow_control.h +8 -7
  79. data/src/core/ext/transport/chttp2/transport/frame_data.cc +35 -33
  80. data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +27 -25
  81. data/src/core/ext/transport/chttp2/transport/frame_ping.cc +12 -12
  82. data/src/core/ext/transport/chttp2/transport/frame_rst_stream.cc +16 -15
  83. data/src/core/ext/transport/chttp2/transport/frame_settings.cc +19 -19
  84. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +11 -11
  85. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +23 -22
  86. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +35 -35
  87. data/src/core/ext/transport/chttp2/transport/hpack_table.cc +10 -7
  88. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +2 -2
  89. data/src/core/ext/transport/chttp2/transport/incoming_metadata.cc +2 -2
  90. data/src/core/ext/transport/chttp2/transport/internal.h +1 -1
  91. data/src/core/ext/transport/chttp2/transport/parsing.cc +35 -39
  92. data/src/core/ext/transport/chttp2/transport/stream_map.cc +8 -7
  93. data/src/core/ext/transport/chttp2/transport/varint.cc +5 -5
  94. data/src/core/ext/transport/chttp2/transport/writing.cc +18 -18
  95. data/src/core/ext/transport/inproc/inproc_transport.cc +43 -23
  96. data/src/core/lib/{gpr → avl}/avl.cc +61 -57
  97. data/{include/grpc/support → src/core/lib/avl}/avl.h +25 -35
  98. data/src/core/lib/backoff/backoff.cc +6 -5
  99. data/src/core/lib/channel/channel_args.cc +23 -109
  100. data/src/core/lib/channel/channel_args.h +5 -31
  101. data/src/core/lib/channel/channel_stack.cc +11 -8
  102. data/src/core/lib/channel/channel_stack_builder.cc +10 -7
  103. data/src/core/lib/channel/connected_channel.cc +18 -17
  104. data/src/core/lib/channel/handshaker.cc +8 -8
  105. data/src/core/lib/channel/handshaker_registry.cc +3 -2
  106. data/src/core/lib/compression/algorithm_metadata.h +13 -6
  107. data/src/core/lib/compression/compression.cc +72 -183
  108. data/src/core/lib/compression/compression_internal.cc +274 -0
  109. data/src/core/lib/compression/compression_internal.h +86 -0
  110. data/src/core/lib/compression/message_compress.cc +15 -15
  111. data/src/core/lib/compression/message_compress.h +4 -3
  112. data/src/core/lib/compression/stream_compression_gzip.cc +8 -8
  113. data/src/core/lib/compression/stream_compression_identity.cc +1 -1
  114. data/src/core/lib/debug/stats.cc +10 -8
  115. data/src/core/lib/debug/stats_data.cc +2 -1
  116. data/src/core/lib/debug/trace.cc +3 -3
  117. data/src/core/lib/gpr/alloc.cc +7 -11
  118. data/src/core/lib/gpr/arena.cc +34 -12
  119. data/src/core/lib/gpr/atm.cc +2 -1
  120. data/src/core/lib/gpr/cpu_linux.cc +3 -3
  121. data/src/core/lib/gpr/cpu_posix.cc +2 -1
  122. data/src/core/lib/gpr/env.h +1 -1
  123. data/src/core/lib/gpr/env_linux.cc +1 -1
  124. data/src/core/lib/gpr/env_windows.cc +4 -4
  125. data/src/core/lib/gpr/fork.cc +16 -2
  126. data/src/core/lib/gpr/host_port.cc +5 -4
  127. data/{include/grpc/support → src/core/lib/gpr}/host_port.h +5 -13
  128. data/src/core/lib/gpr/log.cc +5 -4
  129. data/src/core/lib/gpr/log_linux.cc +1 -1
  130. data/src/core/lib/gpr/mpscq.cc +1 -0
  131. data/src/core/lib/gpr/murmur_hash.cc +4 -4
  132. data/src/core/lib/gpr/string.cc +19 -16
  133. data/src/core/lib/gpr/string_posix.cc +3 -3
  134. data/src/core/lib/gpr/sync_posix.cc +5 -9
  135. data/src/core/lib/gpr/thd.cc +3 -3
  136. data/{include/grpc/support → src/core/lib/gpr}/thd.h +20 -28
  137. data/src/core/lib/gpr/thd_posix.cc +6 -4
  138. data/src/core/lib/gpr/thd_windows.cc +3 -1
  139. data/src/core/lib/gpr/time.cc +6 -4
  140. data/src/core/lib/gpr/time_posix.cc +2 -2
  141. data/{include/grpc/support → src/core/lib/gpr}/tls.h +6 -6
  142. data/{include/grpc/support → src/core/lib/gpr}/tls_gcc.h +3 -3
  143. data/{include/grpc/support → src/core/lib/gpr}/tls_msvc.h +3 -3
  144. data/src/core/lib/gpr/tls_pthread.cc +1 -1
  145. data/{include/grpc/support → src/core/lib/gpr}/tls_pthread.h +3 -3
  146. data/{include/grpc/support → src/core/lib/gpr}/useful.h +3 -3
  147. data/src/core/lib/{gpr++ → gprpp}/abstract.h +3 -3
  148. data/src/core/lib/{gpr++ → gprpp}/atomic.h +5 -5
  149. data/src/core/lib/{gpr++ → gprpp}/atomic_with_atm.h +3 -3
  150. data/src/core/lib/{gpr++ → gprpp}/atomic_with_std.h +3 -3
  151. data/src/core/lib/{gpr++ → gprpp}/debug_location.h +3 -3
  152. data/src/core/lib/{gpr++ → gprpp}/inlined_vector.h +44 -22
  153. data/src/core/lib/{gpr++ → gprpp}/manual_constructor.h +2 -2
  154. data/src/core/lib/{gpr++ → gprpp}/memory.h +14 -5
  155. data/src/core/lib/{gpr++ → gprpp}/orphanable.h +39 -14
  156. data/src/core/lib/{gpr++ → gprpp}/ref_counted.h +42 -10
  157. data/src/core/lib/{gpr++ → gprpp}/ref_counted_ptr.h +18 -8
  158. data/src/core/lib/http/format_request.cc +3 -3
  159. data/src/core/lib/http/httpcli.cc +6 -7
  160. data/src/core/lib/http/httpcli_security_connector.cc +10 -10
  161. data/src/core/lib/http/parser.cc +16 -12
  162. data/src/core/lib/iomgr/call_combiner.cc +12 -13
  163. data/src/core/lib/iomgr/closure.h +4 -6
  164. data/src/core/lib/iomgr/combiner.cc +10 -21
  165. data/src/core/lib/iomgr/error.cc +50 -55
  166. data/src/core/lib/iomgr/ev_epoll1_linux.cc +41 -52
  167. data/src/core/lib/iomgr/ev_epollex_linux.cc +80 -28
  168. data/src/core/lib/iomgr/ev_epollsig_linux.cc +23 -30
  169. data/src/core/lib/iomgr/ev_poll_posix.cc +52 -46
  170. data/src/core/lib/iomgr/ev_posix.cc +47 -6
  171. data/src/core/lib/iomgr/exec_ctx.cc +10 -10
  172. data/src/core/lib/iomgr/exec_ctx.h +1 -1
  173. data/src/core/lib/iomgr/executor.cc +16 -13
  174. data/src/core/lib/iomgr/fork_posix.cc +1 -3
  175. data/src/core/lib/iomgr/gethostname_host_name_max.cc +1 -1
  176. data/src/core/lib/iomgr/iocp_windows.cc +1 -2
  177. data/src/core/lib/iomgr/iomgr.cc +2 -2
  178. data/src/core/lib/iomgr/iomgr_uv.cc +2 -0
  179. data/src/core/lib/iomgr/iomgr_uv.h +1 -1
  180. data/src/core/lib/iomgr/is_epollexclusive_available.cc +5 -4
  181. data/src/core/lib/iomgr/load_file.cc +3 -3
  182. data/src/core/lib/iomgr/pollset_windows.cc +1 -1
  183. data/src/core/lib/iomgr/resolve_address_posix.cc +10 -9
  184. data/src/core/lib/iomgr/resolve_address_uv.cc +2 -2
  185. data/src/core/lib/iomgr/resolve_address_windows.cc +3 -2
  186. data/src/core/lib/iomgr/resource_quota.cc +36 -34
  187. data/src/core/lib/iomgr/sockaddr_utils.cc +39 -23
  188. data/src/core/lib/iomgr/socket_factory_posix.cc +5 -5
  189. data/src/core/lib/iomgr/socket_mutator.cc +7 -7
  190. data/src/core/lib/iomgr/socket_utils_common_posix.cc +7 -4
  191. data/src/core/lib/iomgr/socket_utils_linux.cc +3 -2
  192. data/src/core/lib/iomgr/tcp_client_posix.cc +7 -6
  193. data/src/core/lib/iomgr/tcp_client_windows.cc +0 -1
  194. data/src/core/lib/iomgr/tcp_posix.cc +47 -55
  195. data/src/core/lib/iomgr/tcp_server_posix.cc +12 -10
  196. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +7 -5
  197. data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +4 -3
  198. data/src/core/lib/iomgr/tcp_windows.cc +1 -1
  199. data/src/core/lib/iomgr/timer_generic.cc +16 -14
  200. data/src/core/lib/iomgr/timer_heap.cc +8 -7
  201. data/src/core/lib/iomgr/timer_manager.cc +4 -3
  202. data/src/core/lib/iomgr/udp_server.cc +24 -16
  203. data/src/core/lib/iomgr/unix_sockets_posix.cc +15 -10
  204. data/src/core/lib/iomgr/wakeup_fd_cv.cc +6 -5
  205. data/src/core/lib/iomgr/wakeup_fd_eventfd.cc +1 -2
  206. data/src/core/lib/json/json.cc +1 -1
  207. data/src/core/lib/json/json_reader.cc +8 -6
  208. data/src/core/lib/json/json_string.cc +19 -18
  209. data/src/core/lib/json/json_writer.cc +10 -8
  210. data/src/core/lib/profiling/basic_timers.cc +1 -1
  211. data/src/core/lib/profiling/timers.h +3 -20
  212. data/src/core/lib/security/context/security_context.cc +16 -14
  213. data/src/core/lib/security/credentials/composite/composite_credentials.cc +17 -14
  214. data/src/core/lib/security/credentials/credentials.cc +9 -8
  215. data/src/core/lib/security/credentials/credentials.h +1 -1
  216. data/src/core/lib/security/credentials/credentials_metadata.cc +2 -2
  217. data/src/core/lib/security/credentials/fake/fake_credentials.cc +12 -13
  218. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -4
  219. data/src/core/lib/security/credentials/iam/iam_credentials.cc +5 -3
  220. data/src/core/lib/security/credentials/jwt/json_token.cc +4 -3
  221. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +7 -7
  222. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +21 -18
  223. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +23 -18
  224. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +11 -7
  225. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +22 -21
  226. data/src/core/lib/security/{transport → security_connector}/security_connector.cc +46 -43
  227. data/src/core/lib/security/{transport → security_connector}/security_connector.h +3 -3
  228. data/src/core/lib/security/transport/client_auth_filter.cc +32 -34
  229. data/src/core/lib/security/transport/lb_targets_info.cc +7 -5
  230. data/src/core/lib/security/transport/secure_endpoint.cc +21 -21
  231. data/src/core/lib/security/transport/security_handshaker.cc +19 -18
  232. data/src/core/lib/security/transport/security_handshaker.h +1 -1
  233. data/src/core/lib/security/transport/server_auth_filter.cc +21 -21
  234. data/src/core/lib/slice/b64.cc +19 -16
  235. data/src/core/lib/slice/percent_encoding.cc +5 -5
  236. data/src/core/lib/slice/slice.cc +35 -33
  237. data/src/core/lib/slice/slice_buffer.cc +16 -14
  238. data/src/core/lib/slice/slice_hash_table.cc +3 -2
  239. data/src/core/lib/slice/slice_intern.cc +21 -25
  240. data/src/core/lib/slice/slice_string_helpers.cc +45 -9
  241. data/src/core/lib/slice/slice_string_helpers.h +6 -0
  242. data/src/core/lib/surface/byte_buffer.cc +2 -2
  243. data/src/core/lib/surface/byte_buffer_reader.cc +6 -3
  244. data/src/core/lib/surface/call.cc +171 -260
  245. data/src/core/lib/surface/call_test_only.h +1 -13
  246. data/src/core/lib/surface/channel.cc +20 -43
  247. data/src/core/lib/surface/channel_init.cc +7 -7
  248. data/src/core/lib/surface/channel_ping.cc +2 -2
  249. data/src/core/lib/surface/completion_queue.cc +69 -75
  250. data/src/core/lib/surface/init.cc +4 -5
  251. data/src/core/lib/surface/init_secure.cc +1 -1
  252. data/src/core/lib/surface/lame_client.cc +1 -1
  253. data/src/core/lib/surface/server.cc +64 -59
  254. data/src/core/lib/surface/version.cc +2 -2
  255. data/src/core/lib/transport/bdp_estimator.cc +6 -5
  256. data/src/core/lib/transport/byte_stream.cc +23 -14
  257. data/src/core/lib/transport/byte_stream.h +1 -1
  258. data/src/core/lib/transport/connectivity_state.cc +9 -13
  259. data/src/core/lib/transport/error_utils.cc +10 -7
  260. data/src/core/lib/transport/metadata.cc +27 -26
  261. data/src/core/lib/transport/metadata.h +1 -1
  262. data/src/core/lib/transport/pid_controller.cc +2 -1
  263. data/src/core/lib/transport/service_config.cc +5 -5
  264. data/src/core/lib/transport/static_metadata.cc +225 -222
  265. data/src/core/lib/transport/static_metadata.h +77 -76
  266. data/src/core/lib/transport/timeout_encoding.cc +3 -2
  267. data/src/core/lib/transport/transport.cc +6 -5
  268. data/src/core/lib/transport/transport_op_string.cc +0 -1
  269. data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
  270. data/src/core/tsi/alts_transport_security.cc +61 -0
  271. data/src/core/tsi/{gts_transport_security.h → alts_transport_security.h} +16 -8
  272. data/src/core/tsi/fake_transport_security.cc +59 -43
  273. data/src/core/tsi/ssl_transport_security.cc +122 -107
  274. data/src/core/tsi/transport_security.cc +3 -3
  275. data/src/core/tsi/transport_security_adapter.cc +16 -10
  276. data/src/ruby/bin/apis/pubsub_demo.rb +1 -1
  277. data/src/ruby/ext/grpc/rb_channel.c +3 -4
  278. data/src/ruby/ext/grpc/rb_compression_options.c +13 -3
  279. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +4 -76
  280. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +8 -120
  281. data/src/ruby/ext/grpc/rb_server.c +52 -28
  282. data/src/ruby/lib/grpc/generic/rpc_server.rb +7 -4
  283. data/src/ruby/lib/grpc/version.rb +1 -1
  284. data/src/ruby/pb/test/client.rb +1 -1
  285. data/src/ruby/pb/test/server.rb +1 -1
  286. data/src/ruby/spec/client_server_spec.rb +4 -2
  287. data/src/ruby/spec/generic/active_call_spec.rb +2 -1
  288. data/src/ruby/spec/generic/client_stub_spec.rb +32 -8
  289. data/src/ruby/spec/server_spec.rb +26 -7
  290. data/third_party/boringssl/crypto/asn1/a_bitstr.c +7 -2
  291. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +15 -0
  292. data/third_party/boringssl/crypto/asn1/a_gentm.c +1 -1
  293. data/third_party/boringssl/crypto/asn1/a_print.c +0 -28
  294. data/third_party/boringssl/crypto/asn1/a_strnid.c +3 -0
  295. data/third_party/boringssl/crypto/asn1/a_time.c +17 -9
  296. data/third_party/boringssl/crypto/asn1/a_utctm.c +1 -1
  297. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -49
  298. data/third_party/boringssl/crypto/asn1/asn1_locl.h +1 -1
  299. data/third_party/boringssl/crypto/asn1/tasn_dec.c +9 -9
  300. data/third_party/boringssl/crypto/asn1/tasn_enc.c +0 -6
  301. data/third_party/boringssl/crypto/asn1/time_support.c +5 -5
  302. data/third_party/boringssl/crypto/base64/base64.c +65 -43
  303. data/third_party/boringssl/crypto/bio/bio.c +134 -110
  304. data/third_party/boringssl/crypto/bio/bio_mem.c +9 -9
  305. data/third_party/boringssl/crypto/bio/connect.c +17 -17
  306. data/third_party/boringssl/crypto/bio/fd.c +2 -1
  307. data/third_party/boringssl/crypto/bio/file.c +14 -14
  308. data/third_party/boringssl/crypto/bio/hexdump.c +15 -16
  309. data/third_party/boringssl/crypto/bio/internal.h +14 -14
  310. data/third_party/boringssl/crypto/bio/pair.c +45 -45
  311. data/third_party/boringssl/crypto/bio/printf.c +6 -10
  312. data/third_party/boringssl/crypto/{bn → bn_extra}/bn_asn1.c +9 -9
  313. data/third_party/boringssl/crypto/{bn → bn_extra}/convert.c +18 -223
  314. data/third_party/boringssl/crypto/buf/buf.c +20 -44
  315. data/third_party/boringssl/crypto/bytestring/ber.c +35 -35
  316. data/third_party/boringssl/crypto/bytestring/cbb.c +24 -24
  317. data/third_party/boringssl/crypto/bytestring/cbs.c +33 -37
  318. data/third_party/boringssl/crypto/bytestring/internal.h +38 -38
  319. data/third_party/boringssl/crypto/chacha/chacha.c +7 -7
  320. data/third_party/boringssl/crypto/{asn1/t_bitst.c → cipher_extra/cipher_extra.c} +49 -38
  321. data/third_party/boringssl/crypto/{cipher → cipher_extra}/derive_key.c +0 -2
  322. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +281 -0
  323. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +867 -0
  324. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +326 -0
  325. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_null.c +0 -1
  326. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc2.c +22 -10
  327. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_rc4.c +0 -0
  328. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_ssl3.c +120 -64
  329. data/third_party/boringssl/crypto/{cipher → cipher_extra}/e_tls.c +220 -141
  330. data/third_party/boringssl/crypto/{asn1/x_bignum.c → cipher_extra/internal.h} +61 -86
  331. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +482 -0
  332. data/third_party/boringssl/crypto/cmac/cmac.c +20 -20
  333. data/third_party/boringssl/crypto/conf/conf.c +32 -20
  334. data/third_party/boringssl/crypto/conf/internal.h +3 -3
  335. data/third_party/boringssl/crypto/cpu-aarch64-linux.c +5 -5
  336. data/third_party/boringssl/crypto/cpu-arm-linux.c +44 -41
  337. data/third_party/boringssl/crypto/cpu-intel.c +68 -43
  338. data/third_party/boringssl/crypto/cpu-ppc64le.c +5 -7
  339. data/third_party/boringssl/crypto/crypto.c +54 -32
  340. data/third_party/boringssl/crypto/curve25519/curve25519.c +269 -269
  341. data/third_party/boringssl/crypto/curve25519/internal.h +28 -8
  342. data/third_party/boringssl/crypto/curve25519/spake25519.c +180 -106
  343. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +9 -9
  344. data/third_party/boringssl/crypto/dh/check.c +33 -34
  345. data/third_party/boringssl/crypto/dh/dh.c +72 -36
  346. data/third_party/boringssl/crypto/dh/dh_asn1.c +1 -1
  347. data/third_party/boringssl/crypto/dh/params.c +1 -161
  348. data/third_party/boringssl/crypto/digest_extra/digest_extra.c +240 -0
  349. data/third_party/boringssl/crypto/dsa/dsa.c +127 -87
  350. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +1 -1
  351. data/third_party/boringssl/crypto/{ec → ec_extra}/ec_asn1.c +83 -70
  352. data/third_party/boringssl/crypto/ecdh/ecdh.c +1 -1
  353. data/third_party/boringssl/crypto/{ecdsa → ecdsa_extra}/ecdsa_asn1.c +86 -31
  354. data/third_party/boringssl/crypto/engine/engine.c +6 -6
  355. data/third_party/boringssl/crypto/err/err.c +197 -106
  356. data/third_party/boringssl/crypto/err/internal.h +58 -0
  357. data/third_party/boringssl/crypto/evp/digestsign.c +86 -14
  358. data/third_party/boringssl/crypto/evp/evp.c +6 -11
  359. data/third_party/boringssl/crypto/evp/evp_asn1.c +17 -17
  360. data/third_party/boringssl/crypto/evp/evp_ctx.c +15 -11
  361. data/third_party/boringssl/crypto/evp/internal.h +66 -51
  362. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +11 -11
  363. data/third_party/boringssl/crypto/evp/p_ec.c +10 -8
  364. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +11 -12
  365. data/third_party/boringssl/crypto/evp/p_ed25519.c +71 -0
  366. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +190 -0
  367. data/third_party/boringssl/crypto/evp/p_rsa.c +50 -95
  368. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +28 -18
  369. data/third_party/boringssl/crypto/evp/pbkdf.c +49 -56
  370. data/third_party/boringssl/crypto/evp/print.c +5 -36
  371. data/third_party/boringssl/crypto/evp/scrypt.c +209 -0
  372. data/third_party/boringssl/crypto/ex_data.c +15 -45
  373. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +100 -0
  374. data/third_party/boringssl/crypto/fipsmodule/bcm.c +679 -0
  375. data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/internal.h +40 -27
  376. data/third_party/boringssl/crypto/{bn → fipsmodule/bn}/rsaz_exp.h +0 -0
  377. data/third_party/boringssl/crypto/{cipher → fipsmodule/cipher}/internal.h +34 -67
  378. data/third_party/boringssl/crypto/fipsmodule/delocate.h +88 -0
  379. data/third_party/boringssl/crypto/{des → fipsmodule/des}/internal.h +18 -4
  380. data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/internal.h +18 -18
  381. data/third_party/boringssl/crypto/{digest → fipsmodule/digest}/md32_common.h +58 -64
  382. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/internal.h +58 -52
  383. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64-table.h +11 -11
  384. data/third_party/boringssl/crypto/{ec → fipsmodule/ec}/p256-x86_64.h +32 -32
  385. data/third_party/boringssl/crypto/{rand/internal.h → fipsmodule/is_fips.c} +10 -15
  386. data/third_party/boringssl/crypto/{modes → fipsmodule/modes}/internal.h +112 -119
  387. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +92 -0
  388. data/third_party/boringssl/crypto/{rsa → fipsmodule/rsa}/internal.h +36 -49
  389. data/third_party/boringssl/crypto/hkdf/hkdf.c +6 -6
  390. data/third_party/boringssl/crypto/internal.h +301 -233
  391. data/third_party/boringssl/crypto/lhash/lhash.c +26 -45
  392. data/third_party/boringssl/crypto/mem.c +76 -33
  393. data/third_party/boringssl/crypto/obj/obj.c +44 -28
  394. data/third_party/boringssl/crypto/obj/obj_dat.h +102 -34
  395. data/third_party/boringssl/crypto/obj/obj_xref.c +6 -6
  396. data/third_party/boringssl/crypto/pem/pem_info.c +3 -5
  397. data/third_party/boringssl/crypto/pem/pem_lib.c +1 -6
  398. data/third_party/boringssl/crypto/pem/pem_pk8.c +1 -0
  399. data/third_party/boringssl/crypto/pem/pem_pkey.c +1 -1
  400. data/third_party/boringssl/crypto/pem/pem_xaux.c +0 -2
  401. data/third_party/boringssl/crypto/pkcs7/internal.h +49 -0
  402. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +166 -0
  403. data/third_party/boringssl/crypto/{x509/pkcs7.c → pkcs7/pkcs7_x509.c} +27 -147
  404. data/third_party/boringssl/crypto/pkcs8/internal.h +34 -16
  405. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +120 -39
  406. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +144 -857
  407. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +789 -0
  408. data/third_party/boringssl/crypto/poly1305/internal.h +4 -3
  409. data/third_party/boringssl/crypto/poly1305/poly1305.c +14 -14
  410. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +11 -11
  411. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +41 -41
  412. data/third_party/boringssl/crypto/pool/internal.h +2 -2
  413. data/third_party/boringssl/crypto/pool/pool.c +15 -15
  414. data/third_party/boringssl/crypto/{rand → rand_extra}/deterministic.c +7 -7
  415. data/third_party/boringssl/crypto/rand_extra/forkunsafe.c +46 -0
  416. data/third_party/boringssl/crypto/{rand → rand_extra}/fuchsia.c +7 -7
  417. data/third_party/boringssl/crypto/rand_extra/rand_extra.c +70 -0
  418. data/third_party/boringssl/crypto/{rand → rand_extra}/windows.c +5 -5
  419. data/third_party/boringssl/crypto/refcount_c11.c +2 -2
  420. data/third_party/boringssl/crypto/refcount_lock.c +1 -1
  421. data/third_party/boringssl/crypto/{rsa → rsa_extra}/rsa_asn1.c +12 -120
  422. data/third_party/boringssl/crypto/stack/stack.c +13 -13
  423. data/third_party/boringssl/crypto/thread_none.c +1 -1
  424. data/third_party/boringssl/crypto/thread_pthread.c +1 -1
  425. data/third_party/boringssl/crypto/thread_win.c +40 -40
  426. data/third_party/boringssl/crypto/x509/a_sign.c +5 -12
  427. data/third_party/boringssl/crypto/x509/a_verify.c +6 -18
  428. data/third_party/boringssl/crypto/x509/algorithm.c +22 -6
  429. data/third_party/boringssl/crypto/x509/asn1_gen.c +30 -7
  430. data/third_party/boringssl/crypto/x509/by_dir.c +2 -2
  431. data/third_party/boringssl/crypto/x509/by_file.c +2 -2
  432. data/third_party/boringssl/crypto/x509/rsa_pss.c +5 -5
  433. data/third_party/boringssl/crypto/x509/t_x509.c +2 -1
  434. data/third_party/boringssl/crypto/x509/x509_def.c +5 -0
  435. data/third_party/boringssl/crypto/x509/x509_lu.c +35 -4
  436. data/third_party/boringssl/crypto/x509/x509_set.c +10 -0
  437. data/third_party/boringssl/crypto/x509/x509_vfy.c +20 -17
  438. data/third_party/boringssl/crypto/x509/x_name.c +13 -16
  439. data/third_party/boringssl/crypto/x509/x_x509.c +3 -3
  440. data/third_party/boringssl/crypto/x509/x_x509a.c +0 -7
  441. data/third_party/boringssl/crypto/x509v3/ext_dat.h +8 -0
  442. data/third_party/boringssl/crypto/x509v3/pcy_int.h +2 -2
  443. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +0 -9
  444. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -1
  445. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +25 -15
  446. data/third_party/boringssl/crypto/x509v3/v3_alt.c +21 -11
  447. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +9 -3
  448. data/third_party/boringssl/crypto/x509v3/v3_info.c +22 -14
  449. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +27 -11
  450. data/third_party/boringssl/crypto/x509v3/v3_pci.c +0 -33
  451. data/third_party/boringssl/crypto/x509v3/v3_utl.c +4 -4
  452. data/third_party/boringssl/include/openssl/aead.h +280 -191
  453. data/third_party/boringssl/include/openssl/aes.h +50 -50
  454. data/third_party/boringssl/include/openssl/arm_arch.h +12 -12
  455. data/third_party/boringssl/include/openssl/asn1.h +14 -77
  456. data/third_party/boringssl/include/openssl/asn1t.h +11 -15
  457. data/third_party/boringssl/include/openssl/base.h +78 -51
  458. data/third_party/boringssl/include/openssl/base64.h +68 -68
  459. data/third_party/boringssl/include/openssl/bio.h +472 -406
  460. data/third_party/boringssl/include/openssl/blowfish.h +1 -1
  461. data/third_party/boringssl/include/openssl/bn.h +454 -435
  462. data/third_party/boringssl/include/openssl/buf.h +27 -27
  463. data/third_party/boringssl/include/openssl/bytestring.h +282 -267
  464. data/third_party/boringssl/include/openssl/cast.h +2 -2
  465. data/third_party/boringssl/include/openssl/chacha.h +5 -5
  466. data/third_party/boringssl/include/openssl/cipher.h +209 -200
  467. data/third_party/boringssl/include/openssl/cmac.h +27 -27
  468. data/third_party/boringssl/include/openssl/conf.h +49 -46
  469. data/third_party/boringssl/include/openssl/cpu.h +60 -45
  470. data/third_party/boringssl/include/openssl/crypto.h +59 -35
  471. data/third_party/boringssl/include/openssl/curve25519.h +97 -92
  472. data/third_party/boringssl/include/openssl/des.h +25 -25
  473. data/third_party/boringssl/include/openssl/dh.h +98 -97
  474. data/third_party/boringssl/include/openssl/digest.h +143 -114
  475. data/third_party/boringssl/include/openssl/dsa.h +217 -202
  476. data/third_party/boringssl/include/openssl/ec.h +132 -131
  477. data/third_party/boringssl/include/openssl/ec_key.h +132 -128
  478. data/third_party/boringssl/include/openssl/ecdh.h +9 -9
  479. data/third_party/boringssl/include/openssl/ecdsa.h +66 -66
  480. data/third_party/boringssl/include/openssl/engine.h +38 -38
  481. data/third_party/boringssl/include/openssl/err.h +189 -219
  482. data/third_party/boringssl/include/openssl/evp.h +473 -397
  483. data/third_party/boringssl/include/openssl/ex_data.h +46 -56
  484. data/third_party/boringssl/include/openssl/hkdf.h +17 -17
  485. data/third_party/boringssl/include/openssl/hmac.h +55 -43
  486. data/third_party/boringssl/include/openssl/is_boringssl.h +16 -0
  487. data/third_party/boringssl/include/openssl/lhash.h +67 -67
  488. data/third_party/boringssl/include/openssl/lhash_macros.h +4 -4
  489. data/third_party/boringssl/include/openssl/md4.h +14 -14
  490. data/third_party/boringssl/include/openssl/md5.h +14 -14
  491. data/third_party/boringssl/include/openssl/mem.h +39 -33
  492. data/third_party/boringssl/include/openssl/nid.h +43 -0
  493. data/third_party/boringssl/include/openssl/obj.h +93 -87
  494. data/third_party/boringssl/include/openssl/opensslconf.h +8 -1
  495. data/third_party/boringssl/include/openssl/pem.h +2 -122
  496. data/third_party/boringssl/include/openssl/pkcs7.h +68 -2
  497. data/third_party/boringssl/include/openssl/pkcs8.h +81 -66
  498. data/third_party/boringssl/include/openssl/poly1305.h +11 -11
  499. data/third_party/boringssl/include/openssl/pool.h +29 -25
  500. data/third_party/boringssl/include/openssl/rand.h +48 -45
  501. data/third_party/boringssl/include/openssl/rc4.h +9 -9
  502. data/third_party/boringssl/include/openssl/ripemd.h +13 -13
  503. data/third_party/boringssl/include/openssl/rsa.h +371 -340
  504. data/third_party/boringssl/include/openssl/sha.h +71 -71
  505. data/third_party/boringssl/include/openssl/span.h +191 -0
  506. data/third_party/boringssl/include/openssl/ssl.h +2639 -2519
  507. data/third_party/boringssl/include/openssl/ssl3.h +39 -122
  508. data/third_party/boringssl/include/openssl/stack.h +355 -164
  509. data/third_party/boringssl/include/openssl/thread.h +43 -43
  510. data/third_party/boringssl/include/openssl/tls1.h +60 -63
  511. data/third_party/boringssl/include/openssl/type_check.h +10 -14
  512. data/third_party/boringssl/include/openssl/x509.h +41 -116
  513. data/third_party/boringssl/include/openssl/x509_vfy.h +17 -25
  514. data/third_party/boringssl/include/openssl/x509v3.h +27 -21
  515. data/third_party/boringssl/ssl/{bio_ssl.c → bio_ssl.cc} +9 -5
  516. data/third_party/boringssl/ssl/{custom_extensions.c → custom_extensions.cc} +19 -12
  517. data/third_party/boringssl/ssl/{d1_both.c → d1_both.cc} +224 -193
  518. data/third_party/boringssl/ssl/{d1_lib.c → d1_lib.cc} +86 -79
  519. data/third_party/boringssl/ssl/{d1_pkt.c → d1_pkt.cc} +55 -87
  520. data/third_party/boringssl/ssl/{d1_srtp.c → d1_srtp.cc} +12 -16
  521. data/third_party/boringssl/ssl/{dtls_method.c → dtls_method.cc} +33 -50
  522. data/third_party/boringssl/ssl/{dtls_record.c → dtls_record.cc} +76 -64
  523. data/third_party/boringssl/ssl/handshake.cc +547 -0
  524. data/third_party/boringssl/ssl/handshake_client.cc +1828 -0
  525. data/third_party/boringssl/ssl/handshake_server.cc +1672 -0
  526. data/third_party/boringssl/ssl/internal.h +2027 -1280
  527. data/third_party/boringssl/ssl/s3_both.cc +603 -0
  528. data/third_party/boringssl/ssl/{s3_lib.c → s3_lib.cc} +22 -10
  529. data/third_party/boringssl/ssl/{s3_pkt.c → s3_pkt.cc} +171 -75
  530. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +415 -0
  531. data/third_party/boringssl/ssl/{ssl_asn1.c → ssl_asn1.cc} +257 -261
  532. data/third_party/boringssl/ssl/{ssl_buffer.c → ssl_buffer.cc} +81 -97
  533. data/third_party/boringssl/ssl/{ssl_cert.c → ssl_cert.cc} +304 -414
  534. data/third_party/boringssl/ssl/{ssl_cipher.c → ssl_cipher.cc} +427 -505
  535. data/third_party/boringssl/ssl/{ssl_file.c → ssl_file.cc} +24 -16
  536. data/third_party/boringssl/ssl/ssl_key_share.cc +245 -0
  537. data/third_party/boringssl/ssl/{ssl_lib.c → ssl_lib.cc} +665 -828
  538. data/third_party/boringssl/ssl/ssl_privkey.cc +518 -0
  539. data/third_party/boringssl/ssl/{ssl_session.c → ssl_session.cc} +596 -471
  540. data/third_party/boringssl/ssl/{ssl_stat.c → ssl_stat.cc} +5 -224
  541. data/third_party/boringssl/ssl/{ssl_transcript.c → ssl_transcript.cc} +117 -140
  542. data/third_party/boringssl/ssl/ssl_versions.cc +439 -0
  543. data/third_party/boringssl/ssl/{ssl_x509.c → ssl_x509.cc} +751 -267
  544. data/third_party/boringssl/ssl/{t1_enc.c → t1_enc.cc} +120 -161
  545. data/third_party/boringssl/ssl/{t1_lib.c → t1_lib.cc} +859 -966
  546. data/third_party/boringssl/ssl/{tls13_both.c → tls13_both.cc} +202 -284
  547. data/third_party/boringssl/ssl/tls13_client.cc +842 -0
  548. data/third_party/boringssl/ssl/{tls13_enc.c → tls13_enc.cc} +108 -90
  549. data/third_party/boringssl/ssl/tls13_server.cc +967 -0
  550. data/third_party/boringssl/ssl/{tls_method.c → tls_method.cc} +94 -73
  551. data/third_party/boringssl/ssl/tls_record.cc +675 -0
  552. metadata +117 -168
  553. data/include/grpc/support/cmdline.h +0 -88
  554. data/include/grpc/support/subprocess.h +0 -44
  555. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -29
  556. data/src/core/ext/filters/client_channel/resolver_factory.cc +0 -40
  557. data/src/core/lib/gpr/cmdline.cc +0 -330
  558. data/src/core/lib/gpr/subprocess_posix.cc +0 -99
  559. data/src/core/lib/gpr/subprocess_windows.cc +0 -126
  560. data/src/core/lib/surface/alarm.cc +0 -137
  561. data/src/core/lib/surface/alarm_internal.h +0 -40
  562. data/src/core/tsi/gts_transport_security.cc +0 -40
  563. data/third_party/boringssl/crypto/aes/aes.c +0 -1142
  564. data/third_party/boringssl/crypto/aes/internal.h +0 -87
  565. data/third_party/boringssl/crypto/aes/key_wrap.c +0 -138
  566. data/third_party/boringssl/crypto/aes/mode_wrappers.c +0 -112
  567. data/third_party/boringssl/crypto/asn1/x_long.c +0 -200
  568. data/third_party/boringssl/crypto/bn/add.c +0 -377
  569. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +0 -532
  570. data/third_party/boringssl/crypto/bn/bn.c +0 -365
  571. data/third_party/boringssl/crypto/bn/cmp.c +0 -239
  572. data/third_party/boringssl/crypto/bn/ctx.c +0 -313
  573. data/third_party/boringssl/crypto/bn/div.c +0 -728
  574. data/third_party/boringssl/crypto/bn/exponentiation.c +0 -1240
  575. data/third_party/boringssl/crypto/bn/gcd.c +0 -635
  576. data/third_party/boringssl/crypto/bn/generic.c +0 -707
  577. data/third_party/boringssl/crypto/bn/kronecker.c +0 -176
  578. data/third_party/boringssl/crypto/bn/montgomery.c +0 -409
  579. data/third_party/boringssl/crypto/bn/montgomery_inv.c +0 -207
  580. data/third_party/boringssl/crypto/bn/mul.c +0 -871
  581. data/third_party/boringssl/crypto/bn/prime.c +0 -861
  582. data/third_party/boringssl/crypto/bn/random.c +0 -343
  583. data/third_party/boringssl/crypto/bn/rsaz_exp.c +0 -254
  584. data/third_party/boringssl/crypto/bn/shift.c +0 -307
  585. data/third_party/boringssl/crypto/bn/sqrt.c +0 -506
  586. data/third_party/boringssl/crypto/cipher/aead.c +0 -156
  587. data/third_party/boringssl/crypto/cipher/cipher.c +0 -657
  588. data/third_party/boringssl/crypto/cipher/e_aes.c +0 -1771
  589. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +0 -276
  590. data/third_party/boringssl/crypto/cipher/e_des.c +0 -205
  591. data/third_party/boringssl/crypto/cipher/tls_cbc.c +0 -482
  592. data/third_party/boringssl/crypto/des/des.c +0 -771
  593. data/third_party/boringssl/crypto/digest/digest.c +0 -251
  594. data/third_party/boringssl/crypto/digest/digests.c +0 -358
  595. data/third_party/boringssl/crypto/ec/ec.c +0 -847
  596. data/third_party/boringssl/crypto/ec/ec_key.c +0 -479
  597. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -303
  598. data/third_party/boringssl/crypto/ec/oct.c +0 -416
  599. data/third_party/boringssl/crypto/ec/p224-64.c +0 -1143
  600. data/third_party/boringssl/crypto/ec/p256-64.c +0 -1701
  601. data/third_party/boringssl/crypto/ec/p256-x86_64.c +0 -561
  602. data/third_party/boringssl/crypto/ec/simple.c +0 -1118
  603. data/third_party/boringssl/crypto/ec/util-64.c +0 -109
  604. data/third_party/boringssl/crypto/ec/wnaf.c +0 -458
  605. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +0 -479
  606. data/third_party/boringssl/crypto/hmac/hmac.c +0 -215
  607. data/third_party/boringssl/crypto/md4/md4.c +0 -236
  608. data/third_party/boringssl/crypto/md5/md5.c +0 -285
  609. data/third_party/boringssl/crypto/modes/cbc.c +0 -212
  610. data/third_party/boringssl/crypto/modes/cfb.c +0 -230
  611. data/third_party/boringssl/crypto/modes/ctr.c +0 -219
  612. data/third_party/boringssl/crypto/modes/gcm.c +0 -1071
  613. data/third_party/boringssl/crypto/modes/ofb.c +0 -95
  614. data/third_party/boringssl/crypto/modes/polyval.c +0 -94
  615. data/third_party/boringssl/crypto/pkcs8/p8_pkey.c +0 -85
  616. data/third_party/boringssl/crypto/rand/rand.c +0 -244
  617. data/third_party/boringssl/crypto/rand/urandom.c +0 -335
  618. data/third_party/boringssl/crypto/rsa/blinding.c +0 -265
  619. data/third_party/boringssl/crypto/rsa/padding.c +0 -708
  620. data/third_party/boringssl/crypto/rsa/rsa.c +0 -830
  621. data/third_party/boringssl/crypto/rsa/rsa_impl.c +0 -1100
  622. data/third_party/boringssl/crypto/sha/sha1-altivec.c +0 -346
  623. data/third_party/boringssl/crypto/sha/sha1.c +0 -355
  624. data/third_party/boringssl/crypto/sha/sha256.c +0 -329
  625. data/third_party/boringssl/crypto/sha/sha512.c +0 -609
  626. data/third_party/boringssl/crypto/x509/x509type.c +0 -126
  627. data/third_party/boringssl/include/openssl/stack_macros.h +0 -3987
  628. data/third_party/boringssl/ssl/handshake_client.c +0 -1883
  629. data/third_party/boringssl/ssl/handshake_server.c +0 -1950
  630. data/third_party/boringssl/ssl/s3_both.c +0 -895
  631. data/third_party/boringssl/ssl/ssl_aead_ctx.c +0 -335
  632. data/third_party/boringssl/ssl/ssl_ecdh.c +0 -465
  633. data/third_party/boringssl/ssl/ssl_privkey.c +0 -683
  634. data/third_party/boringssl/ssl/ssl_privkey_cc.cc +0 -76
  635. data/third_party/boringssl/ssl/tls13_client.c +0 -712
  636. data/third_party/boringssl/ssl/tls13_server.c +0 -680
  637. data/third_party/boringssl/ssl/tls_record.c +0 -556
@@ -60,13 +60,13 @@
60
60
 
61
61
  struct cmac_ctx_st {
62
62
  EVP_CIPHER_CTX cipher_ctx;
63
- /* k1 and k2 are the CMAC subkeys. See
64
- * https://tools.ietf.org/html/rfc4493#section-2.3 */
63
+ // k1 and k2 are the CMAC subkeys. See
64
+ // https://tools.ietf.org/html/rfc4493#section-2.3
65
65
  uint8_t k1[AES_BLOCK_SIZE];
66
66
  uint8_t k2[AES_BLOCK_SIZE];
67
- /* Last (possibly partial) scratch */
67
+ // Last (possibly partial) scratch
68
68
  uint8_t block[AES_BLOCK_SIZE];
69
- /* block_used contains the number of valid bytes in |block|. */
69
+ // block_used contains the number of valid bytes in |block|.
70
70
  unsigned block_used;
71
71
  };
72
72
 
@@ -124,20 +124,20 @@ void CMAC_CTX_free(CMAC_CTX *ctx) {
124
124
  OPENSSL_free(ctx);
125
125
  }
126
126
 
127
- /* binary_field_mul_x treats the 128 bits at |in| as an element of GF(2¹²⁸)
128
- * with a hard-coded reduction polynomial and sets |out| as x times the
129
- * input.
130
- *
131
- * See https://tools.ietf.org/html/rfc4493#section-2.3 */
127
+ // binary_field_mul_x treats the 128 bits at |in| as an element of GF(2¹²⁸)
128
+ // with a hard-coded reduction polynomial and sets |out| as x times the
129
+ // input.
130
+ //
131
+ // See https://tools.ietf.org/html/rfc4493#section-2.3
132
132
  static void binary_field_mul_x(uint8_t out[16], const uint8_t in[16]) {
133
133
  unsigned i;
134
134
 
135
- /* Shift |in| to left, including carry. */
135
+ // Shift |in| to left, including carry.
136
136
  for (i = 0; i < 15; i++) {
137
137
  out[i] = (in[i] << 1) | (in[i+1] >> 7);
138
138
  }
139
139
 
140
- /* If MSB set fixup with R. */
140
+ // If MSB set fixup with R.
141
141
  const uint8_t carry = in[0] >> 7;
142
142
  out[i] = (in[i] << 1) ^ ((0 - carry) & 0x87);
143
143
  }
@@ -152,7 +152,7 @@ int CMAC_Init(CMAC_CTX *ctx, const void *key, size_t key_len,
152
152
  EVP_CIPHER_key_length(cipher) != key_len ||
153
153
  !EVP_EncryptInit_ex(&ctx->cipher_ctx, cipher, NULL, key, kZeroIV) ||
154
154
  !EVP_Cipher(&ctx->cipher_ctx, scratch, kZeroIV, AES_BLOCK_SIZE) ||
155
- /* Reset context again ready for first data. */
155
+ // Reset context again ready for first data.
156
156
  !EVP_EncryptInit_ex(&ctx->cipher_ctx, NULL, NULL, NULL, kZeroIV)) {
157
157
  return 0;
158
158
  }
@@ -183,11 +183,11 @@ int CMAC_Update(CMAC_CTX *ctx, const uint8_t *in, size_t in_len) {
183
183
  in_len -= todo;
184
184
  ctx->block_used += todo;
185
185
 
186
- /* If |in_len| is zero then either |ctx->block_used| is less than
187
- * |AES_BLOCK_SIZE|, in which case we can stop here, or |ctx->block_used|
188
- * is exactly |AES_BLOCK_SIZE| but there's no more data to process. In the
189
- * latter case we don't want to process this block now because it might be
190
- * the last block and that block is treated specially. */
186
+ // If |in_len| is zero then either |ctx->block_used| is less than
187
+ // |AES_BLOCK_SIZE|, in which case we can stop here, or |ctx->block_used|
188
+ // is exactly |AES_BLOCK_SIZE| but there's no more data to process. In the
189
+ // latter case we don't want to process this block now because it might be
190
+ // the last block and that block is treated specially.
191
191
  if (in_len == 0) {
192
192
  return 1;
193
193
  }
@@ -199,7 +199,7 @@ int CMAC_Update(CMAC_CTX *ctx, const uint8_t *in, size_t in_len) {
199
199
  }
200
200
  }
201
201
 
202
- /* Encrypt all but one of the remaining blocks. */
202
+ // Encrypt all but one of the remaining blocks.
203
203
  while (in_len > AES_BLOCK_SIZE) {
204
204
  if (!EVP_Cipher(&ctx->cipher_ctx, scratch, in, AES_BLOCK_SIZE)) {
205
205
  return 0;
@@ -223,8 +223,8 @@ int CMAC_Final(CMAC_CTX *ctx, uint8_t *out, size_t *out_len) {
223
223
  const uint8_t *mask = ctx->k1;
224
224
 
225
225
  if (ctx->block_used != AES_BLOCK_SIZE) {
226
- /* If the last block is incomplete, terminate it with a single 'one' bit
227
- * followed by zeros. */
226
+ // If the last block is incomplete, terminate it with a single 'one' bit
227
+ // followed by zeros.
228
228
  ctx->block[ctx->block_used] = 0x80;
229
229
  OPENSSL_memset(ctx->block + ctx->block_used + 1, 0,
230
230
  AES_BLOCK_SIZE - (ctx->block_used + 1));
@@ -69,6 +69,10 @@
69
69
  #include "../internal.h"
70
70
 
71
71
 
72
+ // The maximum length we can grow a value to after variable expansion. 64k
73
+ // should be more than enough for all reasonable uses.
74
+ #define MAX_CONF_VALUE_LENGTH 65536
75
+
72
76
  static uint32_t conf_value_hash(const CONF_VALUE *v) {
73
77
  return (lh_strhash(v->section) << 2) ^ lh_strhash(v->name);
74
78
  }
@@ -259,7 +263,7 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from) {
259
263
  } else if (IS_EOF(conf, *from)) {
260
264
  break;
261
265
  } else if (*from == '$') {
262
- /* try to expand it */
266
+ // try to expand it
263
267
  rrp = NULL;
264
268
  s = &(from[1]);
265
269
  if (*s == '{') {
@@ -299,14 +303,14 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from) {
299
303
  }
300
304
  e++;
301
305
  }
302
- /* So at this point we have
303
- * np which is the start of the name string which is
304
- * '\0' terminated.
305
- * cp which is the start of the section string which is
306
- * '\0' terminated.
307
- * e is the 'next point after'.
308
- * r and rr are the chars replaced by the '\0'
309
- * rp and rrp is where 'r' and 'rr' came from. */
306
+ // So at this point we have
307
+ // np which is the start of the name string which is
308
+ // '\0' terminated.
309
+ // cp which is the start of the section string which is
310
+ // '\0' terminated.
311
+ // e is the 'next point after'.
312
+ // r and rr are the chars replaced by the '\0'
313
+ // rp and rrp is where 'r' and 'rr' came from.
310
314
  p = NCONF_get_string(conf, cp, np);
311
315
  if (rrp != NULL) {
312
316
  *rrp = rr;
@@ -316,7 +320,15 @@ static int str_copy(CONF *conf, char *section, char **pto, char *from) {
316
320
  OPENSSL_PUT_ERROR(CONF, CONF_R_VARIABLE_HAS_NO_VALUE);
317
321
  goto err;
318
322
  }
319
- BUF_MEM_grow_clean(buf, (strlen(p) + buf->length - (e - from)));
323
+ size_t newsize = strlen(p) + buf->length - (e - from);
324
+ if (newsize > MAX_CONF_VALUE_LENGTH) {
325
+ OPENSSL_PUT_ERROR(CONF, CONF_R_VARIABLE_EXPANSION_TOO_LONG);
326
+ goto err;
327
+ }
328
+ if (!BUF_MEM_grow_clean(buf, newsize)) {
329
+ OPENSSL_PUT_ERROR(CONF, ERR_R_MALLOC_FAILURE);
330
+ goto err;
331
+ }
320
332
  while (*p) {
321
333
  buf->data[to++] = *(p++);
322
334
  }
@@ -554,25 +566,25 @@ static int def_load_bio(CONF *conf, BIO *in, long *out_error_line) {
554
566
  i--;
555
567
  }
556
568
  }
557
- /* we removed some trailing stuff so there is a new
558
- * line on the end. */
569
+ // we removed some trailing stuff so there is a new
570
+ // line on the end.
559
571
  if (ii && i == ii) {
560
- again = 1; /* long line */
572
+ again = 1; // long line
561
573
  } else {
562
574
  p[i] = '\0';
563
- eline++; /* another input line */
575
+ eline++; // another input line
564
576
  }
565
577
 
566
- /* we now have a line with trailing \r\n removed */
578
+ // we now have a line with trailing \r\n removed
567
579
 
568
- /* i is the number of bytes */
580
+ // i is the number of bytes
569
581
  bufnum += i;
570
582
 
571
583
  v = NULL;
572
- /* check for line continuation */
584
+ // check for line continuation
573
585
  if (bufnum >= 1) {
574
- /* If we have bytes and the last char '\\' and
575
- * second last char is not '\\' */
586
+ // If we have bytes and the last char '\\' and
587
+ // second last char is not '\\'
576
588
  p = &(buff->data[bufnum - 1]);
577
589
  if (IS_ESC(conf, p[0]) && ((bufnum <= 1) || !IS_ESC(conf, p[-1]))) {
578
590
  bufnum--;
@@ -588,7 +600,7 @@ static int def_load_bio(CONF *conf, BIO *in, long *out_error_line) {
588
600
  clear_comments(conf, buf);
589
601
  s = eat_ws(conf, buf);
590
602
  if (IS_EOF(conf, *s)) {
591
- continue; /* blank line */
603
+ continue; // blank line
592
604
  }
593
605
  if (*s == '[') {
594
606
  char *ss;
@@ -20,12 +20,12 @@ extern "C" {
20
20
  #endif
21
21
 
22
22
 
23
- /* CONF_VALUE_new returns a freshly allocated and zeroed |CONF_VALUE|. */
23
+ // CONF_VALUE_new returns a freshly allocated and zeroed |CONF_VALUE|.
24
24
  CONF_VALUE *CONF_VALUE_new(void);
25
25
 
26
26
 
27
27
  #if defined(__cplusplus)
28
- } /* extern C */
28
+ } // extern C
29
29
  #endif
30
30
 
31
- #endif /* OPENSSL_HEADER_CRYPTO_CONF_INTERNAL_H */
31
+ #endif // OPENSSL_HEADER_CRYPTO_CONF_INTERNAL_H
@@ -28,8 +28,8 @@ extern uint32_t OPENSSL_armcap_P;
28
28
  void OPENSSL_cpuid_setup(void) {
29
29
  unsigned long hwcap = getauxval(AT_HWCAP);
30
30
 
31
- /* See /usr/include/asm/hwcap.h on an aarch64 installation for the source of
32
- * these values. */
31
+ // See /usr/include/asm/hwcap.h on an aarch64 installation for the source of
32
+ // these values.
33
33
  static const unsigned long kNEON = 1 << 1;
34
34
  static const unsigned long kAES = 1 << 3;
35
35
  static const unsigned long kPMULL = 1 << 4;
@@ -37,8 +37,8 @@ void OPENSSL_cpuid_setup(void) {
37
37
  static const unsigned long kSHA256 = 1 << 6;
38
38
 
39
39
  if ((hwcap & kNEON) == 0) {
40
- /* Matching OpenSSL, if NEON is missing, don't report other features
41
- * either. */
40
+ // Matching OpenSSL, if NEON is missing, don't report other features
41
+ // either.
42
42
  return;
43
43
  }
44
44
 
@@ -58,4 +58,4 @@ void OPENSSL_cpuid_setup(void) {
58
58
  }
59
59
  }
60
60
 
61
- #endif /* OPENSSL_AARCH64 && !OPENSSL_STATIC_ARMCAP */
61
+ #endif // OPENSSL_AARCH64 && !OPENSSL_STATIC_ARMCAP
@@ -34,15 +34,15 @@
34
34
 
35
35
  #define HWCAP_NEON (1 << 12)
36
36
 
37
- /* See /usr/include/asm/hwcap.h on an ARM installation for the source of
38
- * these values. */
37
+ // See /usr/include/asm/hwcap.h on an ARM installation for the source of
38
+ // these values.
39
39
  #define HWCAP2_AES (1 << 0)
40
40
  #define HWCAP2_PMULL (1 << 1)
41
41
  #define HWCAP2_SHA1 (1 << 2)
42
42
  #define HWCAP2_SHA2 (1 << 3)
43
43
 
44
- /* |getauxval| is not available on Android until API level 20. Link it as a weak
45
- * symbol and use other methods as fallback. */
44
+ // |getauxval| is not available on Android until API level 20. Link it as a weak
45
+ // symbol and use other methods as fallback.
46
46
  unsigned long getauxval(unsigned long type) __attribute__((weak));
47
47
 
48
48
  static int open_eintr(const char *path, int flags) {
@@ -61,8 +61,8 @@ static ssize_t read_eintr(int fd, void *out, size_t len) {
61
61
  return ret;
62
62
  }
63
63
 
64
- /* read_full reads exactly |len| bytes from |fd| to |out|. On error or end of
65
- * file, it returns zero. */
64
+ // read_full reads exactly |len| bytes from |fd| to |out|. On error or end of
65
+ // file, it returns zero.
66
66
  static int read_full(int fd, void *out, size_t len) {
67
67
  char *outp = out;
68
68
  while (len > 0) {
@@ -76,9 +76,9 @@ static int read_full(int fd, void *out, size_t len) {
76
76
  return 1;
77
77
  }
78
78
 
79
- /* read_file opens |path| and reads until end-of-file. On success, it returns
80
- * one and sets |*out_ptr| and |*out_len| to a newly-allocated buffer with the
81
- * contents. Otherwise, it returns zero. */
79
+ // read_file opens |path| and reads until end-of-file. On success, it returns
80
+ // one and sets |*out_ptr| and |*out_len| to a newly-allocated buffer with the
81
+ // contents. Otherwise, it returns zero.
82
82
  static int read_file(char **out_ptr, size_t *out_len, const char *path) {
83
83
  int fd = open_eintr(path, O_RDONLY);
84
84
  if (fd < 0) {
@@ -128,7 +128,7 @@ err:
128
128
  return ret;
129
129
  }
130
130
 
131
- /* getauxval_proc behaves like |getauxval| but reads from /proc/self/auxv. */
131
+ // getauxval_proc behaves like |getauxval| but reads from /proc/self/auxv.
132
132
  static unsigned long getauxval_proc(unsigned long type) {
133
133
  int fd = open_eintr("/proc/self/auxv", O_RDONLY);
134
134
  if (fd < 0) {
@@ -164,16 +164,16 @@ static int STRING_PIECE_equals(const STRING_PIECE *a, const char *b) {
164
164
  return a->len == b_len && OPENSSL_memcmp(a->data, b, b_len) == 0;
165
165
  }
166
166
 
167
- /* STRING_PIECE_split finds the first occurence of |sep| in |in| and, if found,
168
- * sets |*out_left| and |*out_right| to |in| split before and after it. It
169
- * returns one if |sep| was found and zero otherwise. */
167
+ // STRING_PIECE_split finds the first occurence of |sep| in |in| and, if found,
168
+ // sets |*out_left| and |*out_right| to |in| split before and after it. It
169
+ // returns one if |sep| was found and zero otherwise.
170
170
  static int STRING_PIECE_split(STRING_PIECE *out_left, STRING_PIECE *out_right,
171
171
  const STRING_PIECE *in, char sep) {
172
172
  const char *p = OPENSSL_memchr(in->data, sep, in->len);
173
173
  if (p == NULL) {
174
174
  return 0;
175
175
  }
176
- /* |out_left| or |out_right| may alias |in|, so make a copy. */
176
+ // |out_left| or |out_right| may alias |in|, so make a copy.
177
177
  STRING_PIECE in_copy = *in;
178
178
  out_left->data = in_copy.data;
179
179
  out_left->len = p - in_copy.data;
@@ -182,7 +182,7 @@ static int STRING_PIECE_split(STRING_PIECE *out_left, STRING_PIECE *out_right,
182
182
  return 1;
183
183
  }
184
184
 
185
- /* STRING_PIECE_trim removes leading and trailing whitespace from |s|. */
185
+ // STRING_PIECE_trim removes leading and trailing whitespace from |s|.
186
186
  static void STRING_PIECE_trim(STRING_PIECE *s) {
187
187
  while (s->len != 0 && (s->data[0] == ' ' || s->data[0] == '\t')) {
188
188
  s->data++;
@@ -194,12 +194,12 @@ static void STRING_PIECE_trim(STRING_PIECE *s) {
194
194
  }
195
195
  }
196
196
 
197
- /* extract_cpuinfo_field extracts a /proc/cpuinfo field named |field| from
198
- * |in|. If found, it sets |*out| to the value and returns one. Otherwise, it
199
- * returns zero. */
197
+ // extract_cpuinfo_field extracts a /proc/cpuinfo field named |field| from
198
+ // |in|. If found, it sets |*out| to the value and returns one. Otherwise, it
199
+ // returns zero.
200
200
  static int extract_cpuinfo_field(STRING_PIECE *out, const STRING_PIECE *in,
201
201
  const char *field) {
202
- /* Process |in| one line at a time. */
202
+ // Process |in| one line at a time.
203
203
  STRING_PIECE remaining = *in, line;
204
204
  while (STRING_PIECE_split(&line, &remaining, &remaining, '\n')) {
205
205
  STRING_PIECE key, value;
@@ -224,8 +224,8 @@ static int cpuinfo_field_equals(const STRING_PIECE *cpuinfo, const char *field,
224
224
  STRING_PIECE_equals(&extracted, value);
225
225
  }
226
226
 
227
- /* has_list_item treats |list| as a space-separated list of items and returns
228
- * one if |item| is contained in |list| and zero otherwise. */
227
+ // has_list_item treats |list| as a space-separated list of items and returns
228
+ // one if |item| is contained in |list| and zero otherwise.
229
229
  static int has_list_item(const STRING_PIECE *list, const char *item) {
230
230
  STRING_PIECE remaining = *list, feature;
231
231
  while (STRING_PIECE_split(&feature, &remaining, &remaining, ' ')) {
@@ -238,11 +238,11 @@ static int has_list_item(const STRING_PIECE *list, const char *item) {
238
238
 
239
239
  static unsigned long get_hwcap_cpuinfo(const STRING_PIECE *cpuinfo) {
240
240
  if (cpuinfo_field_equals(cpuinfo, "CPU architecture", "8")) {
241
- /* This is a 32-bit ARM binary running on a 64-bit kernel. NEON is always
242
- * available on ARMv8. Linux omits required features, so reading the
243
- * "Features" line does not work. (For simplicity, use strict equality. We
244
- * assume everything running on future ARM architectures will have a
245
- * working |getauxval|.) */
241
+ // This is a 32-bit ARM binary running on a 64-bit kernel. NEON is always
242
+ // available on ARMv8. Linux omits required features, so reading the
243
+ // "Features" line does not work. (For simplicity, use strict equality. We
244
+ // assume everything running on future ARM architectures will have a
245
+ // working |getauxval|.)
246
246
  return HWCAP_NEON;
247
247
  }
248
248
 
@@ -276,8 +276,8 @@ static unsigned long get_hwcap2_cpuinfo(const STRING_PIECE *cpuinfo) {
276
276
  return ret;
277
277
  }
278
278
 
279
- /* has_broken_neon returns one if |in| matches a CPU known to have a broken
280
- * NEON unit. See https://crbug.com/341598. */
279
+ // has_broken_neon returns one if |in| matches a CPU known to have a broken
280
+ // NEON unit. See https://crbug.com/341598.
281
281
  static int has_broken_neon(const STRING_PIECE *cpuinfo) {
282
282
  return cpuinfo_field_equals(cpuinfo, "CPU implementer", "0x51") &&
283
283
  cpuinfo_field_equals(cpuinfo, "CPU architecture", "7") &&
@@ -288,7 +288,7 @@ static int has_broken_neon(const STRING_PIECE *cpuinfo) {
288
288
 
289
289
  extern uint32_t OPENSSL_armcap_P;
290
290
 
291
- static int g_has_broken_neon;
291
+ static int g_has_broken_neon, g_needs_hwcap2_workaround;
292
292
 
293
293
  void OPENSSL_cpuid_setup(void) {
294
294
  char *cpuinfo_data;
@@ -300,13 +300,13 @@ void OPENSSL_cpuid_setup(void) {
300
300
  cpuinfo.data = cpuinfo_data;
301
301
  cpuinfo.len = cpuinfo_len;
302
302
 
303
- /* |getauxval| is not available on Android until API level 20. If it is
304
- * unavailable, read from /proc/self/auxv as a fallback. This is unreadable
305
- * on some versions of Android, so further fall back to /proc/cpuinfo.
306
- *
307
- * See
308
- * https://android.googlesource.com/platform/ndk/+/882ac8f3392858991a0e1af33b4b7387ec856bd2
309
- * and b/13679666 (Google-internal) for details. */
303
+ // |getauxval| is not available on Android until API level 20. If it is
304
+ // unavailable, read from /proc/self/auxv as a fallback. This is unreadable
305
+ // on some versions of Android, so further fall back to /proc/cpuinfo.
306
+ //
307
+ // See
308
+ // https://android.googlesource.com/platform/ndk/+/882ac8f3392858991a0e1af33b4b7387ec856bd2
309
+ // and b/13679666 (Google-internal) for details.
310
310
  unsigned long hwcap = 0;
311
311
  if (getauxval != NULL) {
312
312
  hwcap = getauxval(AT_HWCAP);
@@ -318,24 +318,25 @@ void OPENSSL_cpuid_setup(void) {
318
318
  hwcap = get_hwcap_cpuinfo(&cpuinfo);
319
319
  }
320
320
 
321
- /* Clear NEON support if known broken. */
321
+ // Clear NEON support if known broken.
322
322
  g_has_broken_neon = has_broken_neon(&cpuinfo);
323
323
  if (g_has_broken_neon) {
324
324
  hwcap &= ~HWCAP_NEON;
325
325
  }
326
326
 
327
- /* Matching OpenSSL, only report other features if NEON is present. */
327
+ // Matching OpenSSL, only report other features if NEON is present.
328
328
  if (hwcap & HWCAP_NEON) {
329
329
  OPENSSL_armcap_P |= ARMV7_NEON;
330
330
 
331
- /* Some ARMv8 Android devices don't expose AT_HWCAP2. Fall back to
332
- * /proc/cpuinfo. See https://crbug.com/596156. */
331
+ // Some ARMv8 Android devices don't expose AT_HWCAP2. Fall back to
332
+ // /proc/cpuinfo. See https://crbug.com/596156.
333
333
  unsigned long hwcap2 = 0;
334
334
  if (getauxval != NULL) {
335
335
  hwcap2 = getauxval(AT_HWCAP2);
336
336
  }
337
337
  if (hwcap2 == 0) {
338
338
  hwcap2 = get_hwcap2_cpuinfo(&cpuinfo);
339
+ g_needs_hwcap2_workaround = hwcap2 != 0;
339
340
  }
340
341
 
341
342
  if (hwcap2 & HWCAP2_AES) {
@@ -357,4 +358,6 @@ void OPENSSL_cpuid_setup(void) {
357
358
 
358
359
  int CRYPTO_has_broken_NEON(void) { return g_has_broken_neon; }
359
360
 
360
- #endif /* OPENSSL_ARM && !OPENSSL_STATIC_ARMCAP */
361
+ int CRYPTO_needs_hwcap2_workaround(void) { return g_needs_hwcap2_workaround; }
362
+
363
+ #endif // OPENSSL_ARM && !OPENSSL_STATIC_ARMCAP
@@ -68,7 +68,7 @@
68
68
  #include <stdlib.h>
69
69
  #include <string.h>
70
70
 
71
- #if defined(OPENSSL_WINDOWS)
71
+ #if defined(_MSC_VER)
72
72
  OPENSSL_MSVC_PRAGMA(warning(push, 3))
73
73
  #include <immintrin.h>
74
74
  #include <intrin.h>
@@ -78,12 +78,12 @@ OPENSSL_MSVC_PRAGMA(warning(pop))
78
78
  #include "internal.h"
79
79
 
80
80
 
81
- /* OPENSSL_cpuid runs the cpuid instruction. |leaf| is passed in as EAX and ECX
82
- * is set to zero. It writes EAX, EBX, ECX, and EDX to |*out_eax| through
83
- * |*out_edx|. */
81
+ // OPENSSL_cpuid runs the cpuid instruction. |leaf| is passed in as EAX and ECX
82
+ // is set to zero. It writes EAX, EBX, ECX, and EDX to |*out_eax| through
83
+ // |*out_edx|.
84
84
  static void OPENSSL_cpuid(uint32_t *out_eax, uint32_t *out_ebx,
85
85
  uint32_t *out_ecx, uint32_t *out_edx, uint32_t leaf) {
86
- #if defined(OPENSSL_WINDOWS)
86
+ #if defined(_MSC_VER)
87
87
  int tmp[4];
88
88
  __cpuid(tmp, (int)leaf);
89
89
  *out_eax = (uint32_t)tmp[0];
@@ -91,8 +91,8 @@ static void OPENSSL_cpuid(uint32_t *out_eax, uint32_t *out_ebx,
91
91
  *out_ecx = (uint32_t)tmp[2];
92
92
  *out_edx = (uint32_t)tmp[3];
93
93
  #elif defined(__pic__) && defined(OPENSSL_32_BIT)
94
- /* Inline assembly may not clobber the PIC register. For 32-bit, this is EBX.
95
- * See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47602. */
94
+ // Inline assembly may not clobber the PIC register. For 32-bit, this is EBX.
95
+ // See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47602.
96
96
  __asm__ volatile (
97
97
  "xor %%ecx, %%ecx\n"
98
98
  "mov %%ebx, %%edi\n"
@@ -111,10 +111,10 @@ static void OPENSSL_cpuid(uint32_t *out_eax, uint32_t *out_ebx,
111
111
  #endif
112
112
  }
113
113
 
114
- /* OPENSSL_xgetbv returns the value of an Intel Extended Control Register (XCR).
115
- * Currently only XCR0 is defined by Intel so |xcr| should always be zero. */
114
+ // OPENSSL_xgetbv returns the value of an Intel Extended Control Register (XCR).
115
+ // Currently only XCR0 is defined by Intel so |xcr| should always be zero.
116
116
  static uint64_t OPENSSL_xgetbv(uint32_t xcr) {
117
- #if defined(OPENSSL_WINDOWS)
117
+ #if defined(_MSC_VER)
118
118
  return (uint64_t)_xgetbv(xcr);
119
119
  #else
120
120
  uint32_t eax, edx;
@@ -123,8 +123,8 @@ static uint64_t OPENSSL_xgetbv(uint32_t xcr) {
123
123
  #endif
124
124
  }
125
125
 
126
- /* handle_cpu_env applies the value from |in| to the CPUID values in |out[0]|
127
- * and |out[1]|. See the comment in |OPENSSL_cpuid_setup| about this. */
126
+ // handle_cpu_env applies the value from |in| to the CPUID values in |out[0]|
127
+ // and |out[1]|. See the comment in |OPENSSL_cpuid_setup| about this.
128
128
  static void handle_cpu_env(uint32_t *out, const char *in) {
129
129
  const int invert = in[0] == '~';
130
130
  uint64_t v;
@@ -143,7 +143,7 @@ static void handle_cpu_env(uint32_t *out, const char *in) {
143
143
  }
144
144
 
145
145
  void OPENSSL_cpuid_setup(void) {
146
- /* Determine the vendor and maximum input value. */
146
+ // Determine the vendor and maximum input value.
147
147
  uint32_t eax, ebx, ecx, edx;
148
148
  OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 0);
149
149
 
@@ -158,8 +158,8 @@ void OPENSSL_cpuid_setup(void) {
158
158
 
159
159
  int has_amd_xop = 0;
160
160
  if (is_amd) {
161
- /* AMD-specific logic.
162
- * See http://developer.amd.com/wordpress/media/2012/10/254811.pdf */
161
+ // AMD-specific logic.
162
+ // See http://developer.amd.com/wordpress/media/2012/10/254811.pdf
163
163
  OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 0x80000000);
164
164
  uint32_t num_extended_ids = eax;
165
165
  if (num_extended_ids >= 0x80000001) {
@@ -176,23 +176,23 @@ void OPENSSL_cpuid_setup(void) {
176
176
  extended_features = ebx;
177
177
  }
178
178
 
179
- /* Determine the number of cores sharing an L1 data cache to adjust the
180
- * hyper-threading bit. */
179
+ // Determine the number of cores sharing an L1 data cache to adjust the
180
+ // hyper-threading bit.
181
181
  uint32_t cores_per_cache = 0;
182
182
  if (is_amd) {
183
- /* AMD CPUs never share an L1 data cache between threads but do set the HTT
184
- * bit on multi-core CPUs. */
183
+ // AMD CPUs never share an L1 data cache between threads but do set the HTT
184
+ // bit on multi-core CPUs.
185
185
  cores_per_cache = 1;
186
186
  } else if (num_ids >= 4) {
187
- /* TODO(davidben): The Intel manual says this CPUID leaf enumerates all
188
- * caches using ECX and doesn't say which is first. Does this matter? */
187
+ // TODO(davidben): The Intel manual says this CPUID leaf enumerates all
188
+ // caches using ECX and doesn't say which is first. Does this matter?
189
189
  OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 4);
190
190
  cores_per_cache = 1 + ((eax >> 14) & 0xfff);
191
191
  }
192
192
 
193
193
  OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 1);
194
194
 
195
- /* Adjust the hyper-threading bit. */
195
+ // Adjust the hyper-threading bit.
196
196
  if (edx & (1 << 28)) {
197
197
  uint32_t num_logical_cores = (ebx >> 16) & 0xff;
198
198
  if (cores_per_cache == 1 || num_logical_cores <= 1) {
@@ -200,18 +200,26 @@ void OPENSSL_cpuid_setup(void) {
200
200
  }
201
201
  }
202
202
 
203
- /* Reserved bit #20 was historically repurposed to control the in-memory
204
- * representation of RC4 state. Always set it to zero. */
203
+ // Reserved bit #20 was historically repurposed to control the in-memory
204
+ // representation of RC4 state. Always set it to zero.
205
205
  edx &= ~(1 << 20);
206
206
 
207
- /* Reserved bit #30 is repurposed to signal an Intel CPU. */
207
+ // Reserved bit #30 is repurposed to signal an Intel CPU.
208
208
  if (is_intel) {
209
209
  edx |= (1 << 30);
210
+
211
+ // Clear the XSAVE bit on Knights Landing to mimic Silvermont. This enables
212
+ // some Silvermont-specific codepaths which perform better. See OpenSSL
213
+ // commit 64d92d74985ebb3d0be58a9718f9e080a14a8e7f.
214
+ if ((eax & 0x0fff0ff0) == 0x00050670 /* Knights Landing */ ||
215
+ (eax & 0x0fff0ff0) == 0x00080650 /* Knights Mill (per SDE) */) {
216
+ ecx &= ~(1 << 26);
217
+ }
210
218
  } else {
211
219
  edx &= ~(1 << 30);
212
220
  }
213
221
 
214
- /* The SDBG bit is repurposed to denote AMD XOP support. */
222
+ // The SDBG bit is repurposed to denote AMD XOP support.
215
223
  if (has_amd_xop) {
216
224
  ecx |= (1 << 11);
217
225
  } else {
@@ -220,16 +228,33 @@ void OPENSSL_cpuid_setup(void) {
220
228
 
221
229
  uint64_t xcr0 = 0;
222
230
  if (ecx & (1 << 27)) {
223
- /* XCR0 may only be queried if the OSXSAVE bit is set. */
231
+ // XCR0 may only be queried if the OSXSAVE bit is set.
224
232
  xcr0 = OPENSSL_xgetbv(0);
225
233
  }
226
- /* See Intel manual, section 14.3. */
234
+ // See Intel manual, volume 1, section 14.3.
227
235
  if ((xcr0 & 6) != 6) {
228
- /* YMM registers cannot be used. */
229
- ecx &= ~(1 << 28); /* AVX */
230
- ecx &= ~(1 << 12); /* FMA */
231
- ecx &= ~(1 << 11); /* AMD XOP */
232
- extended_features &= ~(1 << 5); /* AVX2 */
236
+ // YMM registers cannot be used.
237
+ ecx &= ~(1 << 28); // AVX
238
+ ecx &= ~(1 << 12); // FMA
239
+ ecx &= ~(1 << 11); // AMD XOP
240
+ // Clear AVX2 and AVX512* bits.
241
+ //
242
+ // TODO(davidben): Should bits 17 and 26-28 also be cleared? Upstream
243
+ // doesn't clear those.
244
+ extended_features &=
245
+ ~((1 << 5) | (1 << 16) | (1 << 21) | (1 << 30) | (1 << 31));
246
+ }
247
+ // See Intel manual, volume 1, section 15.2.
248
+ if ((xcr0 & 0xe6) != 0xe6) {
249
+ // Clear AVX512F. Note we don't touch other AVX512 extensions because they
250
+ // can be used with YMM.
251
+ extended_features &= ~(1 << 16);
252
+ }
253
+
254
+ // Disable ADX instructions on Knights Landing. See OpenSSL commit
255
+ // 64d92d74985ebb3d0be58a9718f9e080a14a8e7f.
256
+ if ((ecx & (1 << 26)) == 0) {
257
+ extended_features &= ~(1 << 19);
233
258
  }
234
259
 
235
260
  OPENSSL_ia32cap_P[0] = edx;
@@ -243,15 +268,15 @@ void OPENSSL_cpuid_setup(void) {
243
268
  return;
244
269
  }
245
270
 
246
- /* OPENSSL_ia32cap can contain zero, one or two values, separated with a ':'.
247
- * Each value is a 64-bit, unsigned value which may start with "0x" to
248
- * indicate a hex value. Prior to the 64-bit value, a '~' may be given.
249
- *
250
- * If '~' isn't present, then the value is taken as the result of the CPUID.
251
- * Otherwise the value is inverted and ANDed with the probed CPUID result.
252
- *
253
- * The first value determines OPENSSL_ia32cap_P[0] and [1]. The second [2]
254
- * and [3]. */
271
+ // OPENSSL_ia32cap can contain zero, one or two values, separated with a ':'.
272
+ // Each value is a 64-bit, unsigned value which may start with "0x" to
273
+ // indicate a hex value. Prior to the 64-bit value, a '~' may be given.
274
+ //
275
+ // If '~' isn't present, then the value is taken as the result of the CPUID.
276
+ // Otherwise the value is inverted and ANDed with the probed CPUID result.
277
+ //
278
+ // The first value determines OPENSSL_ia32cap_P[0] and [1]. The second [2]
279
+ // and [3].
255
280
 
256
281
  handle_cpu_env(&OPENSSL_ia32cap_P[0], env1);
257
282
  env2 = strchr(env1, ':');
@@ -260,4 +285,4 @@ void OPENSSL_cpuid_setup(void) {
260
285
  }
261
286
  }
262
287
 
263
- #endif /* !OPENSSL_NO_ASM && (OPENSSL_X86 || OPENSSL_X86_64) */
288
+ #endif // !OPENSSL_NO_ASM && (OPENSSL_X86 || OPENSSL_X86_64)