grpc 1.24.0 → 1.25.0

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 (505) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +306 -243
  3. data/etc/roots.pem +0 -100
  4. data/include/grpc/grpc_security.h +44 -18
  5. data/include/grpc/impl/codegen/grpc_types.h +15 -0
  6. data/include/grpc/impl/codegen/port_platform.h +27 -11
  7. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  8. data/src/boringssl/err_data.c +695 -650
  9. data/src/core/ext/filters/client_channel/client_channel.cc +257 -179
  10. data/src/core/ext/filters/client_channel/client_channel.h +24 -0
  11. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +2 -3
  12. data/src/core/ext/filters/client_channel/client_channel_factory.h +1 -5
  13. data/src/core/ext/filters/client_channel/health/health_check_client.cc +18 -45
  14. data/src/core/ext/filters/client_channel/health/health_check_client.h +5 -13
  15. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
  16. data/src/core/ext/filters/client_channel/lb_policy.cc +2 -3
  17. data/src/core/ext/filters/client_channel/lb_policy.h +65 -55
  18. data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +14 -14
  19. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +113 -36
  20. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +14 -19
  21. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +36 -13
  22. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +3 -10
  23. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.cc +814 -1589
  24. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +2 -5
  25. data/src/core/ext/filters/client_channel/lb_policy_factory.h +3 -6
  26. data/src/core/ext/filters/client_channel/resolver.cc +1 -2
  27. data/src/core/ext/filters/client_channel/resolver.h +8 -16
  28. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +25 -8
  29. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +46 -12
  30. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +10 -17
  31. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_libuv.cc +7 -8
  32. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +4 -4
  33. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +111 -44
  34. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +22 -14
  35. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +1 -1
  36. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +2 -2
  37. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +29 -10
  38. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +27 -36
  39. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +7 -10
  40. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +60 -16
  41. data/src/core/ext/filters/client_channel/resolver_factory.h +4 -8
  42. data/src/core/ext/filters/client_channel/resolver_registry.cc +1 -1
  43. data/src/core/ext/filters/client_channel/resolver_registry.h +1 -1
  44. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +7 -10
  45. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +7 -8
  46. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +1 -1
  47. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -5
  48. data/src/core/ext/filters/client_channel/retry_throttle.h +1 -4
  49. data/src/core/ext/filters/client_channel/service_config.h +8 -8
  50. data/src/core/ext/filters/client_channel/subchannel.cc +53 -86
  51. data/src/core/ext/filters/client_channel/subchannel.h +7 -9
  52. data/src/core/ext/filters/client_channel/subchannel_interface.h +9 -13
  53. data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +3 -6
  54. data/src/core/ext/filters/client_channel/{lb_policy/xds/xds_load_balancer_api.cc → xds/xds_api.cc} +169 -52
  55. data/src/core/ext/filters/client_channel/xds/xds_api.h +171 -0
  56. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.cc +450 -0
  57. data/src/core/ext/filters/client_channel/xds/xds_bootstrap.h +99 -0
  58. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel.h +8 -6
  59. data/src/core/ext/filters/client_channel/xds/xds_channel_args.h +26 -0
  60. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_channel_secure.cc +28 -11
  61. data/src/core/ext/filters/client_channel/xds/xds_client.cc +1413 -0
  62. data/src/core/ext/filters/client_channel/xds/xds_client.h +221 -0
  63. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.cc +1 -5
  64. data/src/core/ext/filters/client_channel/{lb_policy/xds → xds}/xds_client_stats.h +3 -4
  65. data/src/core/ext/filters/deadline/deadline_filter.cc +20 -20
  66. data/src/core/ext/filters/http/client/http_client_filter.cc +15 -15
  67. data/src/core/ext/filters/http/client_authority_filter.cc +14 -14
  68. data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +12 -12
  69. data/src/core/ext/filters/max_age/max_age_filter.cc +59 -50
  70. data/src/core/ext/filters/message_size/message_size_filter.cc +18 -18
  71. data/src/core/ext/filters/workarounds/workaround_cronet_compression_filter.cc +15 -14
  72. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +233 -175
  73. data/src/core/ext/transport/chttp2/transport/flow_control.h +21 -24
  74. data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +253 -163
  75. data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +24 -12
  76. data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +2 -3
  77. data/src/core/ext/transport/chttp2/transport/internal.h +13 -15
  78. data/src/core/ext/transport/chttp2/transport/writing.cc +3 -0
  79. data/src/core/ext/transport/inproc/inproc_transport.cc +20 -13
  80. data/src/core/lib/channel/channel_args.cc +16 -0
  81. data/src/core/lib/channel/channel_args.h +22 -0
  82. data/src/core/lib/channel/channelz.cc +5 -6
  83. data/src/core/lib/channel/channelz.h +1 -1
  84. data/src/core/lib/channel/connected_channel.cc +20 -20
  85. data/src/core/lib/channel/handshaker.h +3 -4
  86. data/src/core/lib/channel/handshaker_factory.h +1 -3
  87. data/src/core/lib/debug/trace.h +3 -2
  88. data/src/core/lib/gprpp/arena.cc +3 -3
  89. data/src/core/lib/gprpp/arena.h +2 -3
  90. data/src/core/lib/gprpp/inlined_vector.h +9 -0
  91. data/src/core/lib/gprpp/map.h +3 -501
  92. data/src/core/lib/gprpp/memory.h +45 -41
  93. data/src/core/lib/gprpp/mpscq.cc +108 -0
  94. data/src/core/lib/gprpp/mpscq.h +98 -0
  95. data/src/core/lib/gprpp/orphanable.h +6 -11
  96. data/src/core/lib/gprpp/ref_counted.h +25 -19
  97. data/src/core/lib/gprpp/set.h +33 -0
  98. data/src/core/lib/gprpp/thd.h +2 -4
  99. data/src/core/lib/http/httpcli.cc +1 -1
  100. data/src/core/lib/http/httpcli_security_connector.cc +15 -11
  101. data/src/core/lib/http/parser.cc +1 -1
  102. data/src/core/lib/iomgr/buffer_list.cc +4 -5
  103. data/src/core/lib/iomgr/buffer_list.h +5 -6
  104. data/src/core/lib/iomgr/call_combiner.cc +4 -5
  105. data/src/core/lib/iomgr/call_combiner.h +2 -2
  106. data/src/core/lib/iomgr/cfstream_handle.h +3 -5
  107. data/src/core/lib/iomgr/closure.h +8 -3
  108. data/src/core/lib/iomgr/combiner.cc +45 -82
  109. data/src/core/lib/iomgr/combiner.h +32 -8
  110. data/src/core/lib/iomgr/endpoint_cfstream.cc +5 -3
  111. data/src/core/lib/iomgr/ev_epoll1_linux.cc +19 -15
  112. data/src/core/lib/iomgr/ev_poll_posix.cc +3 -1
  113. data/src/core/lib/iomgr/exec_ctx.h +4 -3
  114. data/src/core/lib/iomgr/executor.cc +4 -2
  115. data/src/core/lib/iomgr/executor.h +3 -0
  116. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  117. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  118. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  119. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  120. data/src/core/lib/iomgr/resource_quota.h +13 -9
  121. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  122. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  123. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  124. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  125. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  126. data/src/core/lib/iomgr/tcp_server.h +1 -4
  127. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  128. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  129. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  130. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  131. data/src/core/lib/iomgr/udp_server.cc +3 -2
  132. data/src/core/lib/iomgr/udp_server.h +6 -12
  133. data/src/core/lib/json/json.h +1 -1
  134. data/src/core/lib/json/json_string.cc +2 -2
  135. data/src/core/lib/profiling/basic_timers.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  137. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  138. data/src/core/lib/security/credentials/credentials.h +4 -20
  139. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  140. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  141. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  142. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  143. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  144. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  145. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  146. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  147. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  148. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  149. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  150. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  152. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  153. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  154. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  155. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  156. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  157. data/src/core/lib/slice/slice.cc +2 -10
  158. data/src/core/lib/slice/slice_hash_table.h +4 -6
  159. data/src/core/lib/slice/slice_intern.cc +42 -39
  160. data/src/core/lib/slice/slice_internal.h +3 -3
  161. data/src/core/lib/slice/slice_utils.h +21 -4
  162. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  163. data/src/core/lib/surface/call.cc +3 -3
  164. data/src/core/lib/surface/channel.cc +7 -0
  165. data/src/core/lib/surface/completion_queue.cc +12 -11
  166. data/src/core/lib/surface/completion_queue.h +4 -2
  167. data/src/core/lib/surface/init.cc +1 -0
  168. data/src/core/lib/surface/lame_client.cc +33 -18
  169. data/src/core/lib/surface/server.cc +77 -76
  170. data/src/core/lib/surface/version.cc +1 -1
  171. data/src/core/lib/transport/byte_stream.h +3 -7
  172. data/src/core/lib/transport/connectivity_state.cc +112 -98
  173. data/src/core/lib/transport/connectivity_state.h +100 -50
  174. data/src/core/lib/transport/static_metadata.cc +276 -288
  175. data/src/core/lib/transport/static_metadata.h +73 -76
  176. data/src/core/lib/transport/status_conversion.cc +1 -1
  177. data/src/core/lib/transport/status_metadata.cc +1 -1
  178. data/src/core/lib/transport/transport.cc +2 -2
  179. data/src/core/lib/transport/transport.h +12 -4
  180. data/src/core/lib/transport/transport_op_string.cc +14 -11
  181. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  183. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  184. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  185. data/src/core/tsi/fake_transport_security.cc +7 -5
  186. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  187. data/src/core/tsi/local_transport_security.cc +8 -6
  188. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  189. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  191. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  192. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  193. data/src/core/tsi/ssl_transport_security.cc +12 -12
  194. data/src/core/tsi/ssl_transport_security.h +2 -2
  195. data/src/core/tsi/transport_security_grpc.cc +7 -0
  196. data/src/core/tsi/transport_security_grpc.h +6 -0
  197. data/src/ruby/ext/grpc/extconf.rb +1 -0
  198. data/src/ruby/ext/grpc/rb_call.c +1 -1
  199. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  200. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  201. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  202. data/src/ruby/lib/grpc/version.rb +1 -1
  203. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  204. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  205. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  206. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  207. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  208. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  209. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  210. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  211. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  212. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  213. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  214. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  215. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  216. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  217. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  218. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  219. data/third_party/boringssl/crypto/bio/file.c +5 -2
  220. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  221. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  222. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  223. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  224. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  225. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  226. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  227. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  228. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  229. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  230. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  233. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  234. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  235. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  236. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  237. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  238. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  239. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  240. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  241. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  242. data/third_party/boringssl/crypto/crypto.c +39 -22
  243. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  244. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  245. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  246. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  247. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  248. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  249. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  250. data/third_party/boringssl/crypto/err/err.c +2 -0
  251. data/third_party/boringssl/crypto/err/internal.h +2 -2
  252. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  253. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  254. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  255. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  256. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  257. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  258. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  259. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  260. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  261. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  262. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  264. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  265. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  266. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  267. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  268. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  269. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  270. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  271. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  273. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  275. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  276. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  278. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  279. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  281. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  282. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  283. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  284. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  286. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  287. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  291. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  292. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  293. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  294. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  297. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  298. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  299. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  300. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  304. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  307. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  308. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  309. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  310. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  311. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  312. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  313. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  314. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  315. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  316. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  318. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  319. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  320. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  321. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  322. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  324. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  325. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  326. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  329. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  330. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  331. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  334. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  335. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  336. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  337. data/third_party/boringssl/crypto/internal.h +95 -20
  338. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  339. data/third_party/boringssl/crypto/mem.c +39 -2
  340. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  341. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  342. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  343. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  344. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  345. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  347. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  348. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  349. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  351. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  352. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  353. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  354. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  355. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  356. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  357. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  358. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  359. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  360. data/third_party/boringssl/crypto/thread_none.c +2 -2
  361. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  362. data/third_party/boringssl/crypto/thread_win.c +38 -19
  363. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  364. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  365. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  366. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  367. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  368. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  369. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  370. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  372. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  373. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  374. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  375. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  376. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  377. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  378. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  379. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  380. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  381. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  382. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  383. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  384. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  387. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  389. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  390. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  391. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  392. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  393. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  395. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  396. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  397. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  398. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  399. data/third_party/boringssl/include/openssl/aead.h +45 -19
  400. data/third_party/boringssl/include/openssl/aes.h +32 -7
  401. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  402. data/third_party/boringssl/include/openssl/base.h +120 -6
  403. data/third_party/boringssl/include/openssl/base64.h +4 -1
  404. data/third_party/boringssl/include/openssl/bio.h +112 -81
  405. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  406. data/third_party/boringssl/include/openssl/bn.h +55 -29
  407. data/third_party/boringssl/include/openssl/buf.h +2 -2
  408. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  409. data/third_party/boringssl/include/openssl/cast.h +2 -2
  410. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  411. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  412. data/third_party/boringssl/include/openssl/conf.h +3 -6
  413. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  414. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  415. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  416. data/third_party/boringssl/include/openssl/dh.h +3 -2
  417. data/third_party/boringssl/include/openssl/digest.h +21 -7
  418. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  419. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  420. data/third_party/boringssl/include/openssl/ec.h +25 -21
  421. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  422. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  423. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  424. data/third_party/boringssl/include/openssl/engine.h +4 -4
  425. data/third_party/boringssl/include/openssl/err.h +3 -0
  426. data/third_party/boringssl/include/openssl/evp.h +199 -42
  427. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  428. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  429. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  430. data/third_party/boringssl/include/openssl/md4.h +6 -4
  431. data/third_party/boringssl/include/openssl/md5.h +6 -4
  432. data/third_party/boringssl/include/openssl/mem.h +6 -2
  433. data/third_party/boringssl/include/openssl/nid.h +3 -0
  434. data/third_party/boringssl/include/openssl/obj.h +3 -0
  435. data/third_party/boringssl/include/openssl/pem.h +102 -64
  436. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  437. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  438. data/third_party/boringssl/include/openssl/pool.h +13 -2
  439. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  440. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  441. data/third_party/boringssl/include/openssl/sha.h +40 -28
  442. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  443. data/third_party/boringssl/include/openssl/span.h +17 -9
  444. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  445. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  446. data/third_party/boringssl/include/openssl/stack.h +134 -77
  447. data/third_party/boringssl/include/openssl/thread.h +1 -1
  448. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  449. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  450. data/third_party/boringssl/include/openssl/x509.h +28 -3
  451. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  452. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  453. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  454. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  455. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  456. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  457. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  458. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  459. data/third_party/boringssl/ssl/handoff.cc +295 -91
  460. data/third_party/boringssl/ssl/handshake.cc +133 -72
  461. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  462. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  463. data/third_party/boringssl/ssl/internal.h +1413 -928
  464. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  465. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  466. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  467. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  468. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  469. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  470. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  471. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  472. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  473. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  474. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  475. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  476. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  477. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  478. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  479. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  480. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  481. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  482. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  483. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  484. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  485. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  486. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  487. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  488. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  489. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  490. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  491. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  492. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  493. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  494. data/third_party/upb/upb/port_def.inc +1 -1
  495. data/third_party/upb/upb/table.c +2 -1
  496. metadata +72 -44
  497. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  498. data/src/core/lib/gpr/mpscq.cc +0 -117
  499. data/src/core/lib/gpr/mpscq.h +0 -88
  500. data/src/core/lib/gprpp/abstract.h +0 -47
  501. data/src/core/lib/gprpp/pair.h +0 -38
  502. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  503. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  504. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  505. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -54,10 +54,6 @@
54
54
  * copied and put under another distribution licence
55
55
  * [including the GNU Public Licence.] */
56
56
 
57
- #if !defined(__STDC_FORMAT_MACROS)
58
- #define __STDC_FORMAT_MACROS
59
- #endif
60
-
61
57
  #include <openssl/cpu.h>
62
58
 
63
59
 
@@ -127,9 +123,17 @@ static uint64_t OPENSSL_xgetbv(uint32_t xcr) {
127
123
  // and |out[1]|. See the comment in |OPENSSL_cpuid_setup| about this.
128
124
  static void handle_cpu_env(uint32_t *out, const char *in) {
129
125
  const int invert = in[0] == '~';
126
+ const int hex = in[invert] == '0' && in[invert+1] == 'x';
127
+
128
+ int sscanf_result;
130
129
  uint64_t v;
130
+ if (hex) {
131
+ sscanf_result = sscanf(in + invert + 2, "%" PRIx64, &v);
132
+ } else {
133
+ sscanf_result = sscanf(in + invert, "%" PRIu64, &v);
134
+ }
131
135
 
132
- if (!sscanf(in + invert, "%" PRIu64, &v)) {
136
+ if (!sscanf_result) {
133
137
  return;
134
138
  }
135
139
 
@@ -156,50 +160,43 @@ void OPENSSL_cpuid_setup(void) {
156
160
  edx == 0x69746e65 /* enti */ &&
157
161
  ecx == 0x444d4163 /* cAMD */;
158
162
 
159
- int has_amd_xop = 0;
160
- if (is_amd) {
161
- // AMD-specific logic.
162
- // See http://developer.amd.com/wordpress/media/2012/10/254811.pdf
163
- OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 0x80000000);
164
- uint32_t num_extended_ids = eax;
165
- if (num_extended_ids >= 0x80000001) {
166
- OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 0x80000001);
167
- if (ecx & (1u << 11)) {
168
- has_amd_xop = 1;
169
- }
170
- }
171
- }
172
-
173
- uint32_t extended_features = 0;
163
+ uint32_t extended_features[2] = {0};
174
164
  if (num_ids >= 7) {
175
165
  OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 7);
176
- extended_features = ebx;
177
- }
178
-
179
- // Determine the number of cores sharing an L1 data cache to adjust the
180
- // hyper-threading bit.
181
- uint32_t cores_per_cache = 0;
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.
185
- cores_per_cache = 1;
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?
189
- OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 4);
190
- cores_per_cache = 1 + ((eax >> 14) & 0xfff);
166
+ extended_features[0] = ebx;
167
+ extended_features[1] = ecx;
191
168
  }
192
169
 
193
170
  OPENSSL_cpuid(&eax, &ebx, &ecx, &edx, 1);
194
171
 
195
- // Adjust the hyper-threading bit.
196
- if (edx & (1u << 28)) {
197
- uint32_t num_logical_cores = (ebx >> 16) & 0xff;
198
- if (cores_per_cache == 1 || num_logical_cores <= 1) {
199
- edx &= ~(1u << 28);
172
+ if (is_amd) {
173
+ // See https://www.amd.com/system/files/TechDocs/25481.pdf, page 10.
174
+ const uint32_t base_family = (eax >> 8) & 15;
175
+ const uint32_t base_model = (eax >> 4) & 15;
176
+
177
+ uint32_t family = base_family;
178
+ uint32_t model = base_model;
179
+ if (base_family == 0xf) {
180
+ const uint32_t ext_family = (eax >> 20) & 255;
181
+ family += ext_family;
182
+ const uint32_t ext_model = (eax >> 16) & 15;
183
+ model |= ext_model << 4;
184
+ }
185
+
186
+ if (family < 0x17 || (family == 0x17 && 0x70 <= model && model <= 0x7f)) {
187
+ // Disable RDRAND on AMD families before 0x17 (Zen) due to reported
188
+ // failures after suspend.
189
+ // https://bugzilla.redhat.com/show_bug.cgi?id=1150286
190
+ // Also disable for family 0x17, models 0x70–0x7f, due to possible RDRAND
191
+ // failures there too.
192
+ ecx &= ~(1u << 30);
200
193
  }
201
194
  }
202
195
 
196
+ // Force the hyper-threading bit so that the more conservative path is always
197
+ // chosen.
198
+ edx |= 1u << 28;
199
+
203
200
  // Reserved bit #20 was historically repurposed to control the in-memory
204
201
  // representation of RC4 state. Always set it to zero.
205
202
  edx &= ~(1u << 20);
@@ -219,12 +216,9 @@ void OPENSSL_cpuid_setup(void) {
219
216
  edx &= ~(1u << 30);
220
217
  }
221
218
 
222
- // The SDBG bit is repurposed to denote AMD XOP support.
223
- if (has_amd_xop) {
224
- ecx |= (1u << 11);
225
- } else {
226
- ecx &= ~(1u << 11);
227
- }
219
+ // The SDBG bit is repurposed to denote AMD XOP support. Don't ever use AMD
220
+ // XOP code paths.
221
+ ecx &= ~(1u << 11);
228
222
 
229
223
  uint64_t xcr0 = 0;
230
224
  if (ecx & (1u << 27)) {
@@ -241,26 +235,26 @@ void OPENSSL_cpuid_setup(void) {
241
235
  //
242
236
  // TODO(davidben): Should bits 17 and 26-28 also be cleared? Upstream
243
237
  // doesn't clear those.
244
- extended_features &=
238
+ extended_features[0] &=
245
239
  ~((1u << 5) | (1u << 16) | (1u << 21) | (1u << 30) | (1u << 31));
246
240
  }
247
241
  // See Intel manual, volume 1, section 15.2.
248
242
  if ((xcr0 & 0xe6) != 0xe6) {
249
243
  // Clear AVX512F. Note we don't touch other AVX512 extensions because they
250
244
  // can be used with YMM.
251
- extended_features &= ~(1u << 16);
245
+ extended_features[0] &= ~(1u << 16);
252
246
  }
253
247
 
254
248
  // Disable ADX instructions on Knights Landing. See OpenSSL commit
255
249
  // 64d92d74985ebb3d0be58a9718f9e080a14a8e7f.
256
250
  if ((ecx & (1u << 26)) == 0) {
257
- extended_features &= ~(1u << 19);
251
+ extended_features[0] &= ~(1u << 19);
258
252
  }
259
253
 
260
254
  OPENSSL_ia32cap_P[0] = edx;
261
255
  OPENSSL_ia32cap_P[1] = ecx;
262
- OPENSSL_ia32cap_P[2] = extended_features;
263
- OPENSSL_ia32cap_P[3] = 0;
256
+ OPENSSL_ia32cap_P[2] = extended_features[0];
257
+ OPENSSL_ia32cap_P[3] = extended_features[1];
264
258
 
265
259
  const char *env1, *env2;
266
260
  env1 = getenv("OPENSSL_ia32cap");
@@ -36,8 +36,8 @@
36
36
  #define BORINGSSL_NO_STATIC_INITIALIZER
37
37
  #endif
38
38
 
39
- #endif /* !OPENSSL_NO_ASM && (OPENSSL_X86 || OPENSSL_X86_64 ||
40
- OPENSSL_ARM || OPENSSL_AARCH64) */
39
+ #endif // !NO_ASM && !STATIC_ARMCAP &&
40
+ // (X86 || X86_64 || ARM || AARCH64 || PPC64LE)
41
41
 
42
42
 
43
43
  // Our assembly does not use the GOT to reference symbols, which means
@@ -60,8 +60,7 @@
60
60
  // that tests the capability values will still skip the constructor but, so
61
61
  // far, the init constructor function only sets the capability variables.
62
62
 
63
- #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
64
-
63
+ #if defined(BORINGSSL_DISPATCH_TEST)
65
64
  // This value must be explicitly initialised to zero in order to work around a
66
65
  // bug in libtool or the linker on OS X.
67
66
  //
@@ -69,6 +68,12 @@
69
68
  // archive, linking on OS X will fail to resolve common symbols. By
70
69
  // initialising it to zero, it becomes a "data symbol", which isn't so
71
70
  // affected.
71
+ HIDDEN uint8_t BORINGSSL_function_hit[7] = {0};
72
+ #endif
73
+
74
+ #if defined(OPENSSL_X86) || defined(OPENSSL_X86_64)
75
+
76
+ // This value must be explicitly initialized to zero. See similar comment above.
72
77
  HIDDEN uint32_t OPENSSL_ia32cap_P[4] = {0};
73
78
 
74
79
  #elif defined(OPENSSL_PPC64LE)
@@ -82,7 +87,8 @@ HIDDEN unsigned long OPENSSL_ppc64le_hwcap2 = 0;
82
87
  #if defined(OPENSSL_STATIC_ARMCAP)
83
88
 
84
89
  HIDDEN uint32_t OPENSSL_armcap_P =
85
- #if defined(OPENSSL_STATIC_ARMCAP_NEON) || defined(__ARM_NEON__)
90
+ #if defined(OPENSSL_STATIC_ARMCAP_NEON) || \
91
+ (defined(__ARM_NEON__) || defined(__ARM_NEON))
86
92
  ARMV7_NEON |
87
93
  #endif
88
94
  #if defined(OPENSSL_STATIC_ARMCAP_AES) || defined(__ARM_FEATURE_CRYPTO)
@@ -101,6 +107,10 @@ HIDDEN uint32_t OPENSSL_armcap_P =
101
107
 
102
108
  #else
103
109
  HIDDEN uint32_t OPENSSL_armcap_P = 0;
110
+
111
+ uint32_t *OPENSSL_get_armcap_pointer_for_test(void) {
112
+ return &OPENSSL_armcap_P;
113
+ }
104
114
  #endif
105
115
 
106
116
  #endif
@@ -164,31 +174,36 @@ int CRYPTO_has_asm(void) {
164
174
  #endif
165
175
  }
166
176
 
167
- const char *SSLeay_version(int unused) {
168
- return "BoringSSL";
177
+ const char *SSLeay_version(int which) { return OpenSSL_version(which); }
178
+
179
+ const char *OpenSSL_version(int which) {
180
+ switch (which) {
181
+ case OPENSSL_VERSION:
182
+ return "BoringSSL";
183
+ case OPENSSL_CFLAGS:
184
+ return "compiler: n/a";
185
+ case OPENSSL_BUILT_ON:
186
+ return "built on: n/a";
187
+ case OPENSSL_PLATFORM:
188
+ return "platform: n/a";
189
+ case OPENSSL_DIR:
190
+ return "OPENSSLDIR: n/a";
191
+ default:
192
+ return "not available";
193
+ }
169
194
  }
170
195
 
171
- const char *OpenSSL_version(int unused) {
172
- return "BoringSSL";
173
- }
196
+ unsigned long SSLeay(void) { return OPENSSL_VERSION_NUMBER; }
174
197
 
175
- unsigned long SSLeay(void) {
176
- return OPENSSL_VERSION_NUMBER;
177
- }
198
+ unsigned long OpenSSL_version_num(void) { return OPENSSL_VERSION_NUMBER; }
178
199
 
179
- unsigned long OpenSSL_version_num(void) {
180
- return OPENSSL_VERSION_NUMBER;
181
- }
200
+ int CRYPTO_malloc_init(void) { return 1; }
182
201
 
183
- int CRYPTO_malloc_init(void) {
184
- return 1;
185
- }
202
+ int OPENSSL_malloc_init(void) { return 1; }
186
203
 
187
204
  void ENGINE_load_builtin_engines(void) {}
188
205
 
189
- int ENGINE_register_all_complete(void) {
190
- return 1;
191
- }
206
+ int ENGINE_register_all_complete(void) { return 1; }
192
207
 
193
208
  void OPENSSL_load_builtin_modules(void) {}
194
209
 
@@ -196,3 +211,5 @@ int OPENSSL_init_crypto(uint64_t opts, const OPENSSL_INIT_SETTINGS *settings) {
196
211
  CRYPTO_library_init();
197
212
  return 1;
198
213
  }
214
+
215
+ void OPENSSL_cleanup(void) {}
@@ -481,7 +481,7 @@ int SPAKE2_process_msg(SPAKE2_CTX *ctx, uint8_t *out_key, size_t *out_key_len,
481
481
  }
482
482
 
483
483
  ge_p3 Qstar;
484
- if (0 != x25519_ge_frombytes_vartime(&Qstar, their_msg)) {
484
+ if (!x25519_ge_frombytes_vartime(&Qstar, their_msg)) {
485
485
  // Point received from peer was not on the curve.
486
486
  return 0;
487
487
  }
@@ -79,7 +79,7 @@
79
79
  #define OPENSSL_DSA_MAX_MODULUS_BITS 10000
80
80
 
81
81
  // Primality test according to FIPS PUB 186[-1], Appendix 2.1: 50 rounds of
82
- // Rabin-Miller
82
+ // Miller-Rabin.
83
83
  #define DSS_prime_checks 50
84
84
 
85
85
  static int dsa_sign_setup(const DSA *dsa, BN_CTX *ctx_in, BIGNUM **out_kinv,
@@ -256,7 +256,7 @@ int DSA_generate_parameters_ex(DSA *dsa, unsigned bits, const uint8_t *seed_in,
256
256
  // Find q.
257
257
  for (;;) {
258
258
  // step 1
259
- if (!BN_GENCB_call(cb, 0, m++)) {
259
+ if (!BN_GENCB_call(cb, BN_GENCB_GENERATED, m++)) {
260
260
  goto err;
261
261
  }
262
262
 
@@ -319,7 +319,7 @@ int DSA_generate_parameters_ex(DSA *dsa, unsigned bits, const uint8_t *seed_in,
319
319
  n = (bits - 1) / 160;
320
320
 
321
321
  for (;;) {
322
- if ((counter != 0) && !BN_GENCB_call(cb, 0, counter)) {
322
+ if ((counter != 0) && !BN_GENCB_call(cb, BN_GENCB_GENERATED, counter)) {
323
323
  goto err;
324
324
  }
325
325
 
@@ -541,22 +541,51 @@ void DSA_SIG_free(DSA_SIG *sig) {
541
541
  OPENSSL_free(sig);
542
542
  }
543
543
 
544
+ // mod_mul_consttime sets |r| to |a| * |b| modulo |mont->N|, treating |a| and
545
+ // |b| as secret. This function internally uses Montgomery reduction, but
546
+ // neither inputs nor outputs are in Montgomery form.
547
+ static int mod_mul_consttime(BIGNUM *r, const BIGNUM *a, const BIGNUM *b,
548
+ const BN_MONT_CTX *mont, BN_CTX *ctx) {
549
+ BN_CTX_start(ctx);
550
+ BIGNUM *tmp = BN_CTX_get(ctx);
551
+ // |BN_mod_mul_montgomery| removes a factor of R, so we cancel it with a
552
+ // single |BN_to_montgomery| which adds one factor of R.
553
+ int ok = tmp != NULL &&
554
+ BN_to_montgomery(tmp, a, mont, ctx) &&
555
+ BN_mod_mul_montgomery(r, tmp, b, mont, ctx);
556
+ BN_CTX_end(ctx);
557
+ return ok;
558
+ }
559
+
544
560
  DSA_SIG *DSA_do_sign(const uint8_t *digest, size_t digest_len, const DSA *dsa) {
561
+ if (!dsa->p || !dsa->q || !dsa->g) {
562
+ OPENSSL_PUT_ERROR(DSA, DSA_R_MISSING_PARAMETERS);
563
+ return NULL;
564
+ }
565
+
566
+ // Reject invalid parameters. In particular, the algorithm will infinite loop
567
+ // if |g| is zero.
568
+ if (BN_is_zero(dsa->p) || BN_is_zero(dsa->q) || BN_is_zero(dsa->g)) {
569
+ OPENSSL_PUT_ERROR(DSA, DSA_R_INVALID_PARAMETERS);
570
+ return NULL;
571
+ }
572
+
573
+ // We only support DSA keys that are a multiple of 8 bits. (This is a weaker
574
+ // check than the one in |DSA_do_check_signature|, which only allows 160-,
575
+ // 224-, and 256-bit keys.
576
+ if (BN_num_bits(dsa->q) % 8 != 0) {
577
+ OPENSSL_PUT_ERROR(DSA, DSA_R_BAD_Q_VALUE);
578
+ return NULL;
579
+ }
580
+
545
581
  BIGNUM *kinv = NULL, *r = NULL, *s = NULL;
546
582
  BIGNUM m;
547
583
  BIGNUM xr;
548
584
  BN_CTX *ctx = NULL;
549
- int reason = ERR_R_BN_LIB;
550
585
  DSA_SIG *ret = NULL;
551
586
 
552
587
  BN_init(&m);
553
588
  BN_init(&xr);
554
-
555
- if (!dsa->p || !dsa->q || !dsa->g) {
556
- reason = DSA_R_MISSING_PARAMETERS;
557
- goto err;
558
- }
559
-
560
589
  s = BN_new();
561
590
  if (s == NULL) {
562
591
  goto err;
@@ -572,9 +601,9 @@ redo:
572
601
  }
573
602
 
574
603
  if (digest_len > BN_num_bytes(dsa->q)) {
575
- // if the digest length is greater than the size of q use the
576
- // BN_num_bits(dsa->q) leftmost bits of the digest, see
577
- // fips 186-3, 4.2
604
+ // If the digest length is greater than the size of |dsa->q| use the
605
+ // BN_num_bits(dsa->q) leftmost bits of the digest, see FIPS 186-3, 4.2.
606
+ // Note the above check that |dsa->q| is a multiple of 8 bits.
578
607
  digest_len = BN_num_bytes(dsa->q);
579
608
  }
580
609
 
@@ -582,19 +611,23 @@ redo:
582
611
  goto err;
583
612
  }
584
613
 
585
- // Compute s = inv(k) (m + xr) mod q
586
- if (!BN_mod_mul(&xr, dsa->priv_key, r, dsa->q, ctx)) {
587
- goto err; // s = xr
588
- }
589
- if (!BN_add(s, &xr, &m)) {
590
- goto err; // s = m + xr
591
- }
592
- if (BN_cmp(s, dsa->q) > 0) {
593
- if (!BN_sub(s, s, dsa->q)) {
594
- goto err;
595
- }
614
+ // |m| is bounded by 2^(num_bits(q)), which is slightly looser than q. This
615
+ // violates |bn_mod_add_consttime| and |mod_mul_consttime|'s preconditions.
616
+ // (The underlying algorithms could accept looser bounds, but we reduce for
617
+ // simplicity.)
618
+ size_t q_width = bn_minimal_width(dsa->q);
619
+ if (!bn_resize_words(&m, q_width) ||
620
+ !bn_resize_words(&xr, q_width)) {
621
+ goto err;
596
622
  }
597
- if (!BN_mod_mul(s, s, kinv, dsa->q, ctx)) {
623
+ bn_reduce_once_in_place(m.d, 0 /* no carry word */, dsa->q->d,
624
+ xr.d /* scratch space */, q_width);
625
+
626
+ // Compute s = inv(k) (m + xr) mod q. Note |dsa->method_mont_q| is
627
+ // initialized by |dsa_sign_setup|.
628
+ if (!mod_mul_consttime(&xr, dsa->priv_key, r, dsa->method_mont_q, ctx) ||
629
+ !bn_mod_add_consttime(s, &xr, &m, dsa->q, ctx) ||
630
+ !mod_mul_consttime(s, s, kinv, dsa->method_mont_q, ctx)) {
598
631
  goto err;
599
632
  }
600
633
 
@@ -612,7 +645,7 @@ redo:
612
645
 
613
646
  err:
614
647
  if (ret == NULL) {
615
- OPENSSL_PUT_ERROR(DSA, reason);
648
+ OPENSSL_PUT_ERROR(DSA, ERR_R_BN_LIB);
616
649
  BN_free(r);
617
650
  BN_free(s);
618
651
  }
@@ -648,7 +681,7 @@ int DSA_do_check_signature(int *out_valid, const uint8_t *digest,
648
681
  }
649
682
 
650
683
  i = BN_num_bits(dsa->q);
651
- // fips 186-3 allows only different sizes for q
684
+ // FIPS 186-3 allows only different sizes for q.
652
685
  if (i != 160 && i != 224 && i != 256) {
653
686
  OPENSSL_PUT_ERROR(DSA, DSA_R_BAD_Q_VALUE);
654
687
  return 0;
@@ -832,29 +865,18 @@ int DSA_size(const DSA *dsa) {
832
865
  return ret;
833
866
  }
834
867
 
835
- static int dsa_sign_setup(const DSA *dsa, BN_CTX *ctx_in, BIGNUM **out_kinv,
868
+ static int dsa_sign_setup(const DSA *dsa, BN_CTX *ctx, BIGNUM **out_kinv,
836
869
  BIGNUM **out_r) {
837
- BN_CTX *ctx;
838
- BIGNUM k, *kinv = NULL, *r = NULL;
839
- int ret = 0;
840
-
841
870
  if (!dsa->p || !dsa->q || !dsa->g) {
842
871
  OPENSSL_PUT_ERROR(DSA, DSA_R_MISSING_PARAMETERS);
843
872
  return 0;
844
873
  }
845
874
 
875
+ int ret = 0;
876
+ BIGNUM k;
846
877
  BN_init(&k);
847
-
848
- ctx = ctx_in;
849
- if (ctx == NULL) {
850
- ctx = BN_CTX_new();
851
- if (ctx == NULL) {
852
- goto err;
853
- }
854
- }
855
-
856
- r = BN_new();
857
- kinv = BN_new();
878
+ BIGNUM *r = BN_new();
879
+ BIGNUM *kinv = BN_new();
858
880
  if (r == NULL || kinv == NULL ||
859
881
  // Get random k
860
882
  !BN_rand_range_ex(&k, 1, dsa->q) ||
@@ -867,32 +889,34 @@ static int dsa_sign_setup(const DSA *dsa, BN_CTX *ctx_in, BIGNUM **out_kinv,
867
889
  // Compute r = (g^k mod p) mod q
868
890
  !BN_mod_exp_mont_consttime(r, dsa->g, &k, dsa->p, ctx,
869
891
  dsa->method_mont_p) ||
892
+ // Note |BN_mod| below is not constant-time and may leak information about
893
+ // |r|. |dsa->p| may be significantly larger than |dsa->q|, so this is not
894
+ // easily performed in constant-time with Montgomery reduction.
895
+ //
896
+ // However, |r| at this point is g^k (mod p). It is almost the value of
897
+ // |r| revealed in the signature anyway (g^k (mod p) (mod q)), going from
898
+ // it to |k| would require computing a discrete log.
870
899
  !BN_mod(r, r, dsa->q, ctx) ||
871
900
  // Compute part of 's = inv(k) (m + xr) mod q' using Fermat's Little
872
901
  // Theorem.
873
902
  !bn_mod_inverse_prime(kinv, &k, dsa->q, ctx, dsa->method_mont_q)) {
903
+ OPENSSL_PUT_ERROR(DSA, ERR_R_BN_LIB);
874
904
  goto err;
875
905
  }
876
906
 
877
907
  BN_clear_free(*out_kinv);
878
908
  *out_kinv = kinv;
879
909
  kinv = NULL;
910
+
880
911
  BN_clear_free(*out_r);
881
912
  *out_r = r;
913
+ r = NULL;
914
+
882
915
  ret = 1;
883
916
 
884
917
  err:
885
- if (!ret) {
886
- OPENSSL_PUT_ERROR(DSA, ERR_R_BN_LIB);
887
- if (r != NULL) {
888
- BN_clear_free(r);
889
- }
890
- }
891
-
892
- if (ctx_in == NULL) {
893
- BN_CTX_free(ctx);
894
- }
895
918
  BN_clear_free(&k);
919
+ BN_clear_free(r);
896
920
  BN_clear_free(kinv);
897
921
  return ret;
898
922
  }