grpc 1.24.0 → 1.25.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 (504) 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/exec_ctx.h +4 -3
  113. data/src/core/lib/iomgr/executor.cc +4 -2
  114. data/src/core/lib/iomgr/executor.h +3 -0
  115. data/src/core/lib/iomgr/executor/mpmcqueue.h +3 -6
  116. data/src/core/lib/iomgr/executor/threadpool.cc +1 -2
  117. data/src/core/lib/iomgr/executor/threadpool.h +7 -11
  118. data/src/core/lib/iomgr/resource_quota.cc +55 -51
  119. data/src/core/lib/iomgr/resource_quota.h +13 -9
  120. data/src/core/lib/iomgr/socket_utils_common_posix.cc +13 -0
  121. data/src/core/lib/iomgr/socket_utils_posix.h +4 -0
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +4 -11
  123. data/src/core/lib/iomgr/tcp_custom.cc +9 -7
  124. data/src/core/lib/iomgr/tcp_posix.cc +20 -16
  125. data/src/core/lib/iomgr/tcp_server.h +1 -4
  126. data/src/core/lib/iomgr/tcp_server_custom.cc +5 -5
  127. data/src/core/lib/iomgr/tcp_server_posix.cc +1 -1
  128. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +2 -11
  129. data/src/core/lib/iomgr/timer_custom.cc +2 -2
  130. data/src/core/lib/iomgr/udp_server.cc +3 -2
  131. data/src/core/lib/iomgr/udp_server.h +6 -12
  132. data/src/core/lib/json/json.h +1 -1
  133. data/src/core/lib/json/json_string.cc +2 -2
  134. data/src/core/lib/profiling/basic_timers.cc +2 -2
  135. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -2
  136. data/src/core/lib/security/credentials/alts/grpc_alts_credentials_server_options.cc +1 -1
  137. data/src/core/lib/security/credentials/credentials.h +4 -20
  138. data/src/core/lib/security/credentials/fake/fake_credentials.cc +4 -4
  139. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +1 -3
  140. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +64 -0
  141. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +4 -4
  142. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +9 -7
  143. data/src/core/lib/security/security_connector/load_system_roots_linux.cc +2 -0
  144. data/src/core/lib/security/security_connector/local/local_security_connector.cc +4 -4
  145. data/src/core/lib/security/security_connector/security_connector.cc +1 -0
  146. data/src/core/lib/security/security_connector/security_connector.h +19 -17
  147. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +8 -5
  148. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  149. data/src/core/lib/security/security_connector/ssl_utils.h +1 -1
  150. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.cc +14 -6
  151. data/src/core/lib/security/security_connector/tls/spiffe_security_connector.h +4 -2
  152. data/src/core/lib/security/transport/client_auth_filter.cc +17 -17
  153. data/src/core/lib/security/transport/security_handshaker.cc +29 -13
  154. data/src/core/lib/security/transport/security_handshaker.h +4 -2
  155. data/src/core/lib/security/transport/server_auth_filter.cc +14 -14
  156. data/src/core/lib/slice/slice.cc +2 -10
  157. data/src/core/lib/slice/slice_hash_table.h +4 -6
  158. data/src/core/lib/slice/slice_intern.cc +42 -39
  159. data/src/core/lib/slice/slice_internal.h +3 -3
  160. data/src/core/lib/slice/slice_utils.h +21 -4
  161. data/src/core/lib/slice/slice_weak_hash_table.h +4 -6
  162. data/src/core/lib/surface/call.cc +3 -3
  163. data/src/core/lib/surface/channel.cc +7 -0
  164. data/src/core/lib/surface/completion_queue.cc +12 -11
  165. data/src/core/lib/surface/completion_queue.h +4 -2
  166. data/src/core/lib/surface/init.cc +1 -0
  167. data/src/core/lib/surface/lame_client.cc +33 -18
  168. data/src/core/lib/surface/server.cc +77 -76
  169. data/src/core/lib/surface/version.cc +1 -1
  170. data/src/core/lib/transport/byte_stream.h +3 -7
  171. data/src/core/lib/transport/connectivity_state.cc +112 -98
  172. data/src/core/lib/transport/connectivity_state.h +100 -50
  173. data/src/core/lib/transport/static_metadata.cc +276 -288
  174. data/src/core/lib/transport/static_metadata.h +73 -76
  175. data/src/core/lib/transport/status_conversion.cc +1 -1
  176. data/src/core/lib/transport/status_metadata.cc +1 -1
  177. data/src/core/lib/transport/transport.cc +2 -2
  178. data/src/core/lib/transport/transport.h +12 -4
  179. data/src/core/lib/transport/transport_op_string.cc +14 -11
  180. data/src/core/tsi/alts/frame_protector/alts_unseal_privacy_integrity_crypter.cc +1 -1
  181. data/src/core/tsi/alts/handshaker/alts_shared_resource.cc +1 -1
  182. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +5 -5
  183. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +12 -2
  184. data/src/core/tsi/fake_transport_security.cc +7 -5
  185. data/src/core/tsi/grpc_shadow_boringssl.h +2918 -2627
  186. data/src/core/tsi/local_transport_security.cc +8 -6
  187. data/src/core/tsi/ssl/session_cache/ssl_session.h +1 -3
  188. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -2
  189. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +7 -5
  190. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -6
  191. data/src/core/tsi/ssl/session_cache/ssl_session_openssl.cc +1 -2
  192. data/src/core/tsi/ssl_transport_security.cc +12 -12
  193. data/src/core/tsi/ssl_transport_security.h +2 -2
  194. data/src/core/tsi/transport_security_grpc.cc +7 -0
  195. data/src/core/tsi/transport_security_grpc.h +6 -0
  196. data/src/ruby/ext/grpc/extconf.rb +1 -0
  197. data/src/ruby/ext/grpc/rb_call.c +1 -1
  198. data/src/ruby/ext/grpc/rb_channel.c +1 -1
  199. data/src/ruby/lib/grpc/generic/bidi_call.rb +1 -1
  200. data/src/ruby/lib/grpc/generic/rpc_server.rb +1 -1
  201. data/src/ruby/lib/grpc/version.rb +1 -1
  202. data/src/ruby/spec/google_rpc_status_utils_spec.rb +2 -2
  203. data/third_party/boringssl/crypto/asn1/a_bool.c +18 -5
  204. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +17 -221
  205. data/third_party/boringssl/crypto/asn1/a_dup.c +0 -24
  206. data/third_party/boringssl/crypto/asn1/a_enum.c +2 -2
  207. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +10 -72
  208. data/third_party/boringssl/crypto/asn1/a_int.c +12 -71
  209. data/third_party/boringssl/crypto/asn1/a_mbstr.c +110 -216
  210. data/third_party/boringssl/crypto/asn1/a_object.c +16 -5
  211. data/third_party/boringssl/crypto/asn1/a_strnid.c +1 -0
  212. data/third_party/boringssl/crypto/asn1/asn1_lib.c +5 -1
  213. data/third_party/boringssl/crypto/asn1/tasn_enc.c +3 -1
  214. data/third_party/boringssl/crypto/base64/base64.c +2 -2
  215. data/third_party/boringssl/crypto/bio/bio.c +73 -9
  216. data/third_party/boringssl/crypto/bio/connect.c +4 -0
  217. data/third_party/boringssl/crypto/bio/fd.c +4 -0
  218. data/third_party/boringssl/crypto/bio/file.c +5 -2
  219. data/third_party/boringssl/crypto/bio/socket.c +4 -0
  220. data/third_party/boringssl/crypto/bio/socket_helper.c +4 -0
  221. data/third_party/boringssl/crypto/bn_extra/convert.c +11 -7
  222. data/third_party/boringssl/crypto/bytestring/ber.c +8 -4
  223. data/third_party/boringssl/crypto/bytestring/cbb.c +19 -7
  224. data/third_party/boringssl/crypto/bytestring/cbs.c +28 -15
  225. data/third_party/boringssl/crypto/bytestring/internal.h +28 -7
  226. data/third_party/boringssl/crypto/bytestring/unicode.c +155 -0
  227. data/third_party/boringssl/crypto/chacha/chacha.c +36 -19
  228. data/third_party/boringssl/crypto/chacha/internal.h +45 -0
  229. data/third_party/boringssl/crypto/cipher_extra/cipher_extra.c +29 -0
  230. data/third_party/boringssl/crypto/cipher_extra/e_aesccm.c +269 -25
  231. data/third_party/boringssl/crypto/cipher_extra/e_aesctrhmac.c +16 -14
  232. data/third_party/boringssl/crypto/cipher_extra/e_aesgcmsiv.c +54 -38
  233. data/third_party/boringssl/crypto/cipher_extra/e_chacha20poly1305.c +133 -41
  234. data/third_party/boringssl/crypto/cipher_extra/e_tls.c +23 -15
  235. data/third_party/boringssl/crypto/cipher_extra/tls_cbc.c +24 -15
  236. data/third_party/boringssl/crypto/cmac/cmac.c +62 -25
  237. data/third_party/boringssl/crypto/conf/conf.c +7 -0
  238. data/third_party/boringssl/crypto/cpu-arm-linux.c +4 -148
  239. data/third_party/boringssl/crypto/cpu-arm-linux.h +201 -0
  240. data/third_party/boringssl/crypto/cpu-intel.c +45 -51
  241. data/third_party/boringssl/crypto/crypto.c +39 -22
  242. data/third_party/boringssl/crypto/curve25519/spake25519.c +1 -1
  243. data/third_party/boringssl/crypto/dsa/dsa.c +77 -53
  244. data/third_party/boringssl/crypto/ec_extra/ec_asn1.c +20 -8
  245. data/third_party/boringssl/crypto/ec_extra/ec_derive.c +96 -0
  246. data/third_party/boringssl/crypto/{ecdh/ecdh.c → ecdh_extra/ecdh_extra.c} +20 -58
  247. data/third_party/boringssl/crypto/ecdsa_extra/ecdsa_asn1.c +1 -9
  248. data/third_party/boringssl/crypto/engine/engine.c +2 -1
  249. data/third_party/boringssl/crypto/err/err.c +2 -0
  250. data/third_party/boringssl/crypto/err/internal.h +2 -2
  251. data/third_party/boringssl/crypto/evp/evp.c +89 -8
  252. data/third_party/boringssl/crypto/evp/evp_asn1.c +56 -5
  253. data/third_party/boringssl/crypto/evp/evp_ctx.c +52 -14
  254. data/third_party/boringssl/crypto/evp/internal.h +18 -1
  255. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +5 -0
  256. data/third_party/boringssl/crypto/evp/p_ec.c +51 -3
  257. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +6 -7
  258. data/third_party/boringssl/crypto/evp/p_ed25519.c +36 -3
  259. data/third_party/boringssl/crypto/evp/p_ed25519_asn1.c +76 -45
  260. data/third_party/boringssl/crypto/evp/p_rsa.c +3 -1
  261. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +5 -0
  262. data/third_party/boringssl/crypto/evp/p_x25519.c +110 -0
  263. data/third_party/boringssl/crypto/evp/p_x25519_asn1.c +249 -0
  264. data/third_party/boringssl/crypto/evp/scrypt.c +6 -2
  265. data/third_party/boringssl/crypto/fipsmodule/aes/aes.c +34 -274
  266. data/third_party/boringssl/crypto/fipsmodule/aes/internal.h +161 -21
  267. data/third_party/boringssl/crypto/fipsmodule/aes/key_wrap.c +111 -13
  268. data/third_party/boringssl/crypto/fipsmodule/aes/mode_wrappers.c +17 -21
  269. data/third_party/boringssl/crypto/fipsmodule/bcm.c +119 -7
  270. data/third_party/boringssl/crypto/fipsmodule/bn/bn.c +19 -2
  271. data/third_party/boringssl/crypto/fipsmodule/bn/cmp.c +2 -2
  272. data/third_party/boringssl/crypto/fipsmodule/bn/ctx.c +93 -160
  273. data/third_party/boringssl/crypto/fipsmodule/bn/div.c +48 -57
  274. data/third_party/boringssl/crypto/fipsmodule/bn/div_extra.c +87 -0
  275. data/third_party/boringssl/crypto/fipsmodule/bn/exponentiation.c +143 -211
  276. data/third_party/boringssl/crypto/fipsmodule/bn/gcd.c +0 -305
  277. data/third_party/boringssl/crypto/fipsmodule/bn/gcd_extra.c +325 -0
  278. data/third_party/boringssl/crypto/fipsmodule/bn/internal.h +168 -50
  279. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery.c +68 -92
  280. data/third_party/boringssl/crypto/fipsmodule/bn/montgomery_inv.c +7 -6
  281. data/third_party/boringssl/crypto/fipsmodule/bn/mul.c +11 -14
  282. data/third_party/boringssl/crypto/fipsmodule/bn/prime.c +358 -443
  283. data/third_party/boringssl/crypto/fipsmodule/bn/random.c +25 -35
  284. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.c +20 -25
  285. data/third_party/boringssl/crypto/fipsmodule/bn/rsaz_exp.h +76 -5
  286. data/third_party/boringssl/crypto/fipsmodule/bn/shift.c +14 -14
  287. data/third_party/boringssl/crypto/fipsmodule/cipher/cipher.c +7 -2
  288. data/third_party/boringssl/crypto/fipsmodule/cipher/e_aes.c +383 -516
  289. data/third_party/boringssl/crypto/fipsmodule/cipher/e_des.c +4 -0
  290. data/third_party/boringssl/crypto/fipsmodule/cipher/internal.h +3 -4
  291. data/third_party/boringssl/crypto/fipsmodule/delocate.h +3 -2
  292. data/third_party/boringssl/crypto/fipsmodule/digest/digest.c +32 -17
  293. data/third_party/boringssl/crypto/fipsmodule/digest/md32_common.h +3 -3
  294. data/third_party/boringssl/crypto/fipsmodule/ec/ec.c +228 -122
  295. data/third_party/boringssl/crypto/fipsmodule/ec/ec_key.c +34 -8
  296. data/third_party/boringssl/crypto/fipsmodule/ec/ec_montgomery.c +311 -98
  297. data/third_party/boringssl/crypto/fipsmodule/ec/felem.c +82 -0
  298. data/third_party/boringssl/crypto/fipsmodule/ec/internal.h +263 -97
  299. data/third_party/boringssl/crypto/fipsmodule/ec/oct.c +22 -59
  300. data/third_party/boringssl/crypto/fipsmodule/ec/p224-64.c +317 -234
  301. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64-table.h +9473 -9475
  302. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.c +313 -109
  303. data/third_party/boringssl/crypto/fipsmodule/ec/p256-x86_64.h +36 -0
  304. data/third_party/boringssl/crypto/fipsmodule/ec/scalar.c +96 -0
  305. data/third_party/boringssl/crypto/fipsmodule/ec/simple.c +126 -792
  306. data/third_party/boringssl/crypto/fipsmodule/ec/simple_mul.c +84 -0
  307. data/third_party/boringssl/crypto/fipsmodule/ec/util.c +163 -12
  308. data/third_party/boringssl/crypto/fipsmodule/ec/wnaf.c +84 -211
  309. data/third_party/boringssl/crypto/fipsmodule/ecdh/ecdh.c +122 -0
  310. data/third_party/boringssl/crypto/fipsmodule/ecdsa/ecdsa.c +60 -205
  311. data/third_party/boringssl/crypto/fipsmodule/fips_shared_support.c +32 -0
  312. data/third_party/boringssl/crypto/fipsmodule/is_fips.c +2 -0
  313. data/third_party/boringssl/crypto/fipsmodule/md4/md4.c +3 -1
  314. data/third_party/boringssl/crypto/fipsmodule/md5/internal.h +37 -0
  315. data/third_party/boringssl/crypto/fipsmodule/md5/md5.c +11 -8
  316. data/third_party/boringssl/crypto/fipsmodule/modes/cbc.c +35 -79
  317. data/third_party/boringssl/crypto/fipsmodule/modes/cfb.c +7 -39
  318. data/third_party/boringssl/crypto/fipsmodule/modes/ctr.c +7 -27
  319. data/third_party/boringssl/crypto/fipsmodule/modes/gcm.c +123 -309
  320. data/third_party/boringssl/crypto/fipsmodule/modes/internal.h +189 -126
  321. data/third_party/boringssl/crypto/fipsmodule/modes/ofb.c +3 -2
  322. data/third_party/boringssl/crypto/fipsmodule/rand/ctrdrbg.c +2 -2
  323. data/third_party/boringssl/crypto/fipsmodule/rand/internal.h +35 -0
  324. data/third_party/boringssl/crypto/fipsmodule/rand/rand.c +24 -19
  325. data/third_party/boringssl/crypto/fipsmodule/rand/urandom.c +256 -77
  326. data/third_party/boringssl/crypto/fipsmodule/rsa/padding.c +10 -7
  327. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa.c +5 -1
  328. data/third_party/boringssl/crypto/fipsmodule/rsa/rsa_impl.c +131 -14
  329. data/third_party/boringssl/crypto/fipsmodule/self_check/self_check.c +83 -10
  330. data/third_party/boringssl/crypto/fipsmodule/sha/internal.h +53 -0
  331. data/third_party/boringssl/crypto/fipsmodule/sha/sha1.c +9 -13
  332. data/third_party/boringssl/crypto/fipsmodule/sha/sha256.c +18 -12
  333. data/third_party/boringssl/crypto/fipsmodule/sha/sha512.c +95 -168
  334. data/third_party/boringssl/crypto/hrss/hrss.c +2201 -0
  335. data/third_party/boringssl/crypto/hrss/internal.h +62 -0
  336. data/third_party/boringssl/crypto/internal.h +95 -20
  337. data/third_party/boringssl/crypto/lhash/lhash.c +45 -33
  338. data/third_party/boringssl/crypto/mem.c +39 -2
  339. data/third_party/boringssl/crypto/obj/obj.c +4 -4
  340. data/third_party/boringssl/crypto/obj/obj_dat.h +6181 -875
  341. data/third_party/boringssl/crypto/pem/pem_all.c +2 -3
  342. data/third_party/boringssl/crypto/pem/pem_info.c +144 -162
  343. data/third_party/boringssl/crypto/pem/pem_lib.c +53 -52
  344. data/third_party/boringssl/crypto/pem/pem_pkey.c +13 -21
  345. data/third_party/boringssl/crypto/pkcs7/pkcs7.c +15 -22
  346. data/third_party/boringssl/crypto/pkcs7/pkcs7_x509.c +168 -16
  347. data/third_party/boringssl/crypto/pkcs8/internal.h +11 -0
  348. data/third_party/boringssl/crypto/pkcs8/p5_pbev2.c +24 -15
  349. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +42 -25
  350. data/third_party/boringssl/crypto/pkcs8/pkcs8_x509.c +559 -43
  351. data/third_party/boringssl/crypto/pool/internal.h +1 -1
  352. data/third_party/boringssl/crypto/pool/pool.c +21 -0
  353. data/third_party/boringssl/crypto/rand_extra/deterministic.c +8 -0
  354. data/third_party/boringssl/crypto/rand_extra/fuchsia.c +1 -14
  355. data/third_party/boringssl/crypto/refcount_lock.c +2 -2
  356. data/third_party/boringssl/crypto/rsa_extra/rsa_print.c +22 -0
  357. data/third_party/boringssl/crypto/siphash/siphash.c +80 -0
  358. data/third_party/boringssl/crypto/stack/stack.c +83 -32
  359. data/third_party/boringssl/crypto/thread_none.c +2 -2
  360. data/third_party/boringssl/crypto/thread_pthread.c +2 -2
  361. data/third_party/boringssl/crypto/thread_win.c +38 -19
  362. data/third_party/boringssl/crypto/x509/a_strex.c +22 -2
  363. data/third_party/boringssl/crypto/x509/asn1_gen.c +2 -1
  364. data/third_party/boringssl/crypto/x509/by_dir.c +7 -0
  365. data/third_party/boringssl/crypto/x509/by_file.c +12 -10
  366. data/third_party/boringssl/crypto/x509/t_crl.c +5 -8
  367. data/third_party/boringssl/crypto/x509/t_req.c +1 -3
  368. data/third_party/boringssl/crypto/x509/t_x509.c +5 -8
  369. data/third_party/boringssl/crypto/x509/x509_cmp.c +1 -1
  370. data/third_party/boringssl/crypto/x509/x509_def.c +1 -1
  371. data/third_party/boringssl/crypto/x509/x509_lu.c +114 -5
  372. data/third_party/boringssl/crypto/x509/x509_req.c +20 -0
  373. data/third_party/boringssl/crypto/x509/x509_set.c +5 -0
  374. data/third_party/boringssl/crypto/x509/x509_trs.c +1 -0
  375. data/third_party/boringssl/crypto/x509/x509_txt.c +4 -5
  376. data/third_party/boringssl/crypto/x509/x509_vfy.c +145 -138
  377. data/third_party/boringssl/crypto/x509/x509_vpm.c +2 -0
  378. data/third_party/boringssl/crypto/x509/x509cset.c +40 -0
  379. data/third_party/boringssl/crypto/x509/x509name.c +2 -3
  380. data/third_party/boringssl/crypto/x509/x_all.c +109 -210
  381. data/third_party/boringssl/crypto/x509/x_x509.c +6 -0
  382. data/third_party/boringssl/crypto/x509v3/ext_dat.h +1 -3
  383. data/third_party/boringssl/crypto/x509v3/internal.h +56 -0
  384. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +2 -0
  385. data/third_party/boringssl/crypto/x509v3/pcy_node.c +1 -0
  386. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +4 -2
  387. data/third_party/boringssl/crypto/x509v3/v3_akey.c +5 -2
  388. data/third_party/boringssl/crypto/x509v3/v3_alt.c +19 -13
  389. data/third_party/boringssl/crypto/x509v3/v3_conf.c +2 -1
  390. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +3 -2
  391. data/third_party/boringssl/crypto/x509v3/v3_genn.c +1 -6
  392. data/third_party/boringssl/crypto/x509v3/v3_lib.c +1 -0
  393. data/third_party/boringssl/crypto/x509v3/v3_ocsp.c +68 -0
  394. data/third_party/boringssl/crypto/x509v3/v3_pci.c +2 -1
  395. data/third_party/boringssl/crypto/x509v3/v3_purp.c +47 -69
  396. data/third_party/boringssl/crypto/x509v3/v3_skey.c +5 -2
  397. data/third_party/boringssl/crypto/x509v3/v3_utl.c +69 -25
  398. data/third_party/boringssl/include/openssl/aead.h +45 -19
  399. data/third_party/boringssl/include/openssl/aes.h +32 -7
  400. data/third_party/boringssl/include/openssl/asn1.h +7 -77
  401. data/third_party/boringssl/include/openssl/base.h +120 -6
  402. data/third_party/boringssl/include/openssl/base64.h +4 -1
  403. data/third_party/boringssl/include/openssl/bio.h +112 -81
  404. data/third_party/boringssl/include/openssl/blowfish.h +3 -3
  405. data/third_party/boringssl/include/openssl/bn.h +55 -29
  406. data/third_party/boringssl/include/openssl/buf.h +2 -2
  407. data/third_party/boringssl/include/openssl/bytestring.h +54 -32
  408. data/third_party/boringssl/include/openssl/cast.h +2 -2
  409. data/third_party/boringssl/include/openssl/cipher.h +46 -16
  410. data/third_party/boringssl/include/openssl/cmac.h +6 -2
  411. data/third_party/boringssl/include/openssl/conf.h +3 -6
  412. data/third_party/boringssl/include/openssl/cpu.h +25 -9
  413. data/third_party/boringssl/include/openssl/crypto.h +32 -10
  414. data/third_party/boringssl/include/openssl/curve25519.h +4 -4
  415. data/third_party/boringssl/include/openssl/dh.h +3 -2
  416. data/third_party/boringssl/include/openssl/digest.h +21 -7
  417. data/third_party/boringssl/include/openssl/dsa.h +8 -2
  418. data/third_party/boringssl/include/openssl/e_os2.h +18 -0
  419. data/third_party/boringssl/include/openssl/ec.h +25 -21
  420. data/third_party/boringssl/include/openssl/ec_key.h +36 -8
  421. data/third_party/boringssl/include/openssl/ecdh.h +17 -0
  422. data/third_party/boringssl/include/openssl/ecdsa.h +3 -3
  423. data/third_party/boringssl/include/openssl/engine.h +4 -4
  424. data/third_party/boringssl/include/openssl/err.h +3 -0
  425. data/third_party/boringssl/include/openssl/evp.h +199 -42
  426. data/third_party/boringssl/include/openssl/hmac.h +4 -4
  427. data/third_party/boringssl/include/openssl/hrss.h +100 -0
  428. data/third_party/boringssl/include/openssl/lhash.h +131 -23
  429. data/third_party/boringssl/include/openssl/md4.h +6 -4
  430. data/third_party/boringssl/include/openssl/md5.h +6 -4
  431. data/third_party/boringssl/include/openssl/mem.h +6 -2
  432. data/third_party/boringssl/include/openssl/nid.h +3 -0
  433. data/third_party/boringssl/include/openssl/obj.h +3 -0
  434. data/third_party/boringssl/include/openssl/pem.h +102 -64
  435. data/third_party/boringssl/include/openssl/pkcs7.h +136 -3
  436. data/third_party/boringssl/include/openssl/pkcs8.h +42 -3
  437. data/third_party/boringssl/include/openssl/pool.h +13 -2
  438. data/third_party/boringssl/include/openssl/ripemd.h +5 -4
  439. data/third_party/boringssl/include/openssl/rsa.h +46 -15
  440. data/third_party/boringssl/include/openssl/sha.h +40 -28
  441. data/third_party/boringssl/include/openssl/siphash.h +37 -0
  442. data/third_party/boringssl/include/openssl/span.h +17 -9
  443. data/third_party/boringssl/include/openssl/ssl.h +766 -393
  444. data/third_party/boringssl/include/openssl/ssl3.h +4 -3
  445. data/third_party/boringssl/include/openssl/stack.h +134 -77
  446. data/third_party/boringssl/include/openssl/thread.h +1 -1
  447. data/third_party/boringssl/include/openssl/tls1.h +25 -9
  448. data/third_party/boringssl/include/openssl/type_check.h +14 -15
  449. data/third_party/boringssl/include/openssl/x509.h +28 -3
  450. data/third_party/boringssl/include/openssl/x509_vfy.h +98 -32
  451. data/third_party/boringssl/include/openssl/x509v3.h +17 -13
  452. data/third_party/boringssl/ssl/d1_both.cc +9 -18
  453. data/third_party/boringssl/ssl/d1_lib.cc +4 -3
  454. data/third_party/boringssl/ssl/d1_pkt.cc +4 -4
  455. data/third_party/boringssl/ssl/d1_srtp.cc +15 -15
  456. data/third_party/boringssl/ssl/dtls_method.cc +0 -1
  457. data/third_party/boringssl/ssl/dtls_record.cc +28 -28
  458. data/third_party/boringssl/ssl/handoff.cc +295 -91
  459. data/third_party/boringssl/ssl/handshake.cc +133 -72
  460. data/third_party/boringssl/ssl/handshake_client.cc +218 -189
  461. data/third_party/boringssl/ssl/handshake_server.cc +399 -272
  462. data/third_party/boringssl/ssl/internal.h +1413 -928
  463. data/third_party/boringssl/ssl/s3_both.cc +175 -36
  464. data/third_party/boringssl/ssl/s3_lib.cc +9 -13
  465. data/third_party/boringssl/ssl/s3_pkt.cc +63 -29
  466. data/third_party/boringssl/ssl/ssl_aead_ctx.cc +55 -35
  467. data/third_party/boringssl/ssl/ssl_asn1.cc +57 -73
  468. data/third_party/boringssl/ssl/ssl_buffer.cc +13 -12
  469. data/third_party/boringssl/ssl/ssl_cert.cc +313 -210
  470. data/third_party/boringssl/ssl/ssl_cipher.cc +159 -221
  471. data/third_party/boringssl/ssl/ssl_file.cc +2 -0
  472. data/third_party/boringssl/ssl/ssl_key_share.cc +164 -19
  473. data/third_party/boringssl/ssl/ssl_lib.cc +847 -555
  474. data/third_party/boringssl/ssl/ssl_privkey.cc +441 -111
  475. data/third_party/boringssl/ssl/ssl_session.cc +230 -178
  476. data/third_party/boringssl/ssl/ssl_transcript.cc +21 -142
  477. data/third_party/boringssl/ssl/ssl_versions.cc +88 -93
  478. data/third_party/boringssl/ssl/ssl_x509.cc +279 -218
  479. data/third_party/boringssl/ssl/t1_enc.cc +5 -96
  480. data/third_party/boringssl/ssl/t1_lib.cc +931 -678
  481. data/third_party/boringssl/ssl/tls13_both.cc +251 -121
  482. data/third_party/boringssl/ssl/tls13_client.cc +129 -73
  483. data/third_party/boringssl/ssl/tls13_enc.cc +350 -282
  484. data/third_party/boringssl/ssl/tls13_server.cc +259 -192
  485. data/third_party/boringssl/ssl/tls_method.cc +26 -21
  486. data/third_party/boringssl/ssl/tls_record.cc +42 -47
  487. data/third_party/boringssl/third_party/fiat/curve25519.c +261 -1324
  488. data/third_party/boringssl/third_party/fiat/curve25519_32.h +911 -0
  489. data/third_party/boringssl/third_party/fiat/curve25519_64.h +559 -0
  490. data/third_party/boringssl/third_party/fiat/p256.c +238 -999
  491. data/third_party/boringssl/third_party/fiat/p256_32.h +3226 -0
  492. data/third_party/boringssl/third_party/fiat/p256_64.h +1217 -0
  493. data/third_party/upb/upb/port_def.inc +1 -1
  494. data/third_party/upb/upb/table.c +2 -1
  495. metadata +71 -43
  496. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_load_balancer_api.h +0 -127
  497. data/src/core/lib/gpr/mpscq.cc +0 -117
  498. data/src/core/lib/gpr/mpscq.h +0 -88
  499. data/src/core/lib/gprpp/abstract.h +0 -47
  500. data/src/core/lib/gprpp/pair.h +0 -38
  501. data/third_party/boringssl/crypto/cipher_extra/e_ssl3.c +0 -460
  502. data/third_party/boringssl/crypto/fipsmodule/modes/ccm.c +0 -256
  503. data/third_party/boringssl/include/openssl/lhash_macros.h +0 -174
  504. data/third_party/boringssl/ssl/custom_extensions.cc +0 -265
@@ -23,7 +23,7 @@ extern "C" {
23
23
  #endif
24
24
 
25
25
 
26
- DECLARE_LHASH_OF(CRYPTO_BUFFER);
26
+ DECLARE_LHASH_OF(CRYPTO_BUFFER)
27
27
 
28
28
  struct crypto_buffer_st {
29
29
  CRYPTO_BUFFER_POOL *pool;
@@ -26,6 +26,8 @@
26
26
  #include "internal.h"
27
27
 
28
28
 
29
+ DEFINE_LHASH_OF(CRYPTO_BUFFER)
30
+
29
31
  static uint32_t CRYPTO_BUFFER_hash(const CRYPTO_BUFFER *buf) {
30
32
  return OPENSSL_hash32(buf->data, buf->len);
31
33
  }
@@ -135,6 +137,25 @@ CRYPTO_BUFFER *CRYPTO_BUFFER_new(const uint8_t *data, size_t len,
135
137
  return buf;
136
138
  }
137
139
 
140
+ CRYPTO_BUFFER *CRYPTO_BUFFER_alloc(uint8_t **out_data, size_t len) {
141
+ CRYPTO_BUFFER *const buf = OPENSSL_malloc(sizeof(CRYPTO_BUFFER));
142
+ if (buf == NULL) {
143
+ return NULL;
144
+ }
145
+ OPENSSL_memset(buf, 0, sizeof(CRYPTO_BUFFER));
146
+
147
+ buf->data = OPENSSL_malloc(len);
148
+ if (len != 0 && buf->data == NULL) {
149
+ OPENSSL_free(buf);
150
+ return NULL;
151
+ }
152
+ buf->len = len;
153
+ buf->references = 1;
154
+
155
+ *out_data = buf->data;
156
+ return buf;
157
+ }
158
+
138
159
  CRYPTO_BUFFER* CRYPTO_BUFFER_new_from_CBS(CBS *cbs, CRYPTO_BUFFER_POOL *pool) {
139
160
  return CRYPTO_BUFFER_new(CBS_data(cbs), CBS_len(cbs), pool);
140
161
  }
@@ -45,4 +45,12 @@ void CRYPTO_sysrand(uint8_t *out, size_t requested) {
45
45
  g_num_calls++;
46
46
  }
47
47
 
48
+ void CRYPTO_sysrand_for_seed(uint8_t *out, size_t requested) {
49
+ CRYPTO_sysrand(out, requested);
50
+ }
51
+
52
+ void CRYPTO_sysrand_if_available(uint8_t *out, size_t requested) {
53
+ CRYPTO_sysrand(out, requested);
54
+ }
55
+
48
56
  #endif // BORINGSSL_UNSAFE_DETERMINISTIC_MODE
@@ -24,20 +24,7 @@
24
24
  #include "../fipsmodule/rand/internal.h"
25
25
 
26
26
  void CRYPTO_sysrand(uint8_t *out, size_t requested) {
27
- while (requested > 0) {
28
- size_t output_bytes_this_pass = ZX_CPRNG_DRAW_MAX_LEN;
29
- if (requested < output_bytes_this_pass) {
30
- output_bytes_this_pass = requested;
31
- }
32
- size_t bytes_drawn;
33
- zx_status_t status =
34
- zx_cprng_draw(out, output_bytes_this_pass, &bytes_drawn);
35
- if (status != ZX_OK) {
36
- abort();
37
- }
38
- requested -= bytes_drawn;
39
- out += bytes_drawn;
40
- }
27
+ zx_cprng_draw(out, requested);
41
28
  }
42
29
 
43
30
  #endif // OPENSSL_FUCHSIA && !BORINGSSL_UNSAFE_DETERMINISTIC_MODE
@@ -21,8 +21,8 @@
21
21
 
22
22
  #if !defined(OPENSSL_C11_ATOMIC)
23
23
 
24
- OPENSSL_COMPILE_ASSERT((CRYPTO_refcount_t)-1 == CRYPTO_REFCOUNT_MAX,
25
- CRYPTO_REFCOUNT_MAX_is_incorrect);
24
+ OPENSSL_STATIC_ASSERT((CRYPTO_refcount_t)-1 == CRYPTO_REFCOUNT_MAX,
25
+ "CRYPTO_REFCOUNT_MAX is incorrect");
26
26
 
27
27
  static struct CRYPTO_STATIC_MUTEX g_refcount_lock = CRYPTO_STATIC_MUTEX_INIT;
28
28
 
@@ -0,0 +1,22 @@
1
+ /*
2
+ * Copyright 2006-2017 The OpenSSL Project Authors. All Rights Reserved.
3
+ *
4
+ * Licensed under the OpenSSL license (the "License"). You may not use
5
+ * this file except in compliance with the License. You can obtain a copy
6
+ * in the file LICENSE in the source distribution or at
7
+ * https://www.openssl.org/source/license.html
8
+ */
9
+
10
+ #include <openssl/rsa.h>
11
+
12
+ #include <openssl/evp.h>
13
+
14
+
15
+ int RSA_print(BIO *bio, const RSA *rsa, int indent) {
16
+ EVP_PKEY *pkey = EVP_PKEY_new();
17
+ int ret = pkey != NULL &&
18
+ EVP_PKEY_set1_RSA(pkey, (RSA *)rsa) &&
19
+ EVP_PKEY_print_private(bio, pkey, indent, NULL);
20
+ EVP_PKEY_free(pkey);
21
+ return ret;
22
+ }
@@ -0,0 +1,80 @@
1
+ /* Copyright (c) 2019, Google Inc.
2
+ *
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ #include <stdint.h>
16
+ #include <string.h>
17
+
18
+ #include <openssl/siphash.h>
19
+
20
+
21
+ static void siphash_round(uint64_t v[4]) {
22
+ v[0] += v[1];
23
+ v[2] += v[3];
24
+ v[1] = (v[1] << 13) | (v[1] >> (64 - 13));
25
+ v[3] = (v[3] << 16) | (v[3] >> (64 - 16));
26
+ v[1] ^= v[0];
27
+ v[3] ^= v[2];
28
+ v[0] = (v[0] << 32) | (v[0] >> 32);
29
+ v[2] += v[1];
30
+ v[0] += v[3];
31
+ v[1] = (v[1] << 17) | (v[1] >> (64 - 17));
32
+ v[3] = (v[3] << 21) | (v[3] >> (64 - 21));
33
+ v[1] ^= v[2];
34
+ v[3] ^= v[0];
35
+ v[2] = (v[2] << 32) | (v[2] >> 32);
36
+ }
37
+
38
+ uint64_t SIPHASH_24(const uint64_t key[2], const uint8_t *input,
39
+ size_t input_len) {
40
+ const size_t orig_input_len = input_len;
41
+
42
+ uint64_t v[4];
43
+ v[0] = key[0] ^ UINT64_C(0x736f6d6570736575);
44
+ v[1] = key[1] ^ UINT64_C(0x646f72616e646f6d);
45
+ v[2] = key[0] ^ UINT64_C(0x6c7967656e657261);
46
+ v[3] = key[1] ^ UINT64_C(0x7465646279746573);
47
+
48
+ while (input_len >= sizeof(uint64_t)) {
49
+ uint64_t m;
50
+ memcpy(&m, input, sizeof(m));
51
+ v[3] ^= m;
52
+ siphash_round(v);
53
+ siphash_round(v);
54
+ v[0] ^= m;
55
+
56
+ input += sizeof(uint64_t);
57
+ input_len -= sizeof(uint64_t);
58
+ }
59
+
60
+ union {
61
+ uint8_t bytes[8];
62
+ uint64_t word;
63
+ } last_block;
64
+ last_block.word = 0;
65
+ memcpy(last_block.bytes, input, input_len);
66
+ last_block.bytes[7] = orig_input_len & 0xff;
67
+
68
+ v[3] ^= last_block.word;
69
+ siphash_round(v);
70
+ siphash_round(v);
71
+ v[0] ^= last_block.word;
72
+
73
+ v[2] ^= 0xff;
74
+ siphash_round(v);
75
+ siphash_round(v);
76
+ siphash_round(v);
77
+ siphash_round(v);
78
+
79
+ return v[0] ^ v[1] ^ v[2] ^ v[3];
80
+ }
@@ -56,6 +56,7 @@
56
56
 
57
57
  #include <openssl/stack.h>
58
58
 
59
+ #include <assert.h>
59
60
  #include <string.h>
60
61
 
61
62
  #include <openssl/mem.h>
@@ -133,19 +134,31 @@ void sk_free(_STACK *sk) {
133
134
  OPENSSL_free(sk);
134
135
  }
135
136
 
136
- void sk_pop_free(_STACK *sk, void (*func)(void *)) {
137
+ void sk_pop_free_ex(_STACK *sk, void (*call_free_func)(stack_free_func, void *),
138
+ stack_free_func free_func) {
137
139
  if (sk == NULL) {
138
140
  return;
139
141
  }
140
142
 
141
143
  for (size_t i = 0; i < sk->num; i++) {
142
144
  if (sk->data[i] != NULL) {
143
- func(sk->data[i]);
145
+ call_free_func(free_func, sk->data[i]);
144
146
  }
145
147
  }
146
148
  sk_free(sk);
147
149
  }
148
150
 
151
+ // Historically, |sk_pop_free| called the function as |stack_free_func|
152
+ // directly. This is undefined in C. Some callers called |sk_pop_free| directly,
153
+ // so we must maintain a compatibility version for now.
154
+ static void call_free_func_legacy(stack_free_func func, void *ptr) {
155
+ func(ptr);
156
+ }
157
+
158
+ void sk_pop_free(_STACK *sk, stack_free_func free_func) {
159
+ sk_pop_free_ex(sk, call_free_func_legacy, free_func);
160
+ }
161
+
149
162
  size_t sk_insert(_STACK *sk, void *p, size_t where) {
150
163
  if (sk == NULL) {
151
164
  return 0;
@@ -209,7 +222,7 @@ void *sk_delete(_STACK *sk, size_t where) {
209
222
  return ret;
210
223
  }
211
224
 
212
- void *sk_delete_ptr(_STACK *sk, void *p) {
225
+ void *sk_delete_ptr(_STACK *sk, const void *p) {
213
226
  if (sk == NULL) {
214
227
  return NULL;
215
228
  }
@@ -223,7 +236,9 @@ void *sk_delete_ptr(_STACK *sk, void *p) {
223
236
  return NULL;
224
237
  }
225
238
 
226
- int sk_find(_STACK *sk, size_t *out_index, void *p) {
239
+ int sk_find(const _STACK *sk, size_t *out_index, const void *p,
240
+ int (*call_cmp_func)(stack_cmp_func, const void **,
241
+ const void **)) {
227
242
  if (sk == NULL) {
228
243
  return 0;
229
244
  }
@@ -245,28 +260,52 @@ int sk_find(_STACK *sk, size_t *out_index, void *p) {
245
260
  return 0;
246
261
  }
247
262
 
248
- sk_sort(sk);
249
-
250
- // sk->comp is a function that takes pointers to pointers to elements, but
251
- // qsort and bsearch take a comparison function that just takes pointers to
252
- // elements. However, since we're passing an array of pointers to
253
- // qsort/bsearch, we can just cast the comparison function and everything
254
- // works.
255
- const void *const *r = bsearch(&p, sk->data, sk->num, sizeof(void *),
256
- (int (*)(const void *, const void *))sk->comp);
257
- if (r == NULL) {
263
+ if (!sk_is_sorted(sk)) {
264
+ for (size_t i = 0; i < sk->num; i++) {
265
+ const void *elem = sk->data[i];
266
+ if (call_cmp_func(sk->comp, &p, &elem) == 0) {
267
+ if (out_index) {
268
+ *out_index = i;
269
+ }
270
+ return 1;
271
+ }
272
+ }
258
273
  return 0;
259
274
  }
260
- size_t idx = ((void **)r) - sk->data;
261
- // This function always returns the first result.
262
- while (idx > 0 &&
263
- sk->comp((const void **)&p, (const void **)&sk->data[idx - 1]) == 0) {
264
- idx--;
265
- }
266
- if (out_index) {
267
- *out_index = idx;
275
+
276
+ // The stack is sorted, so binary search to find the element.
277
+ //
278
+ // |lo| and |hi| maintain a half-open interval of where the answer may be. All
279
+ // indices such that |lo <= idx < hi| are candidates.
280
+ size_t lo = 0, hi = sk->num;
281
+ while (lo < hi) {
282
+ // Bias |mid| towards |lo|. See the |r == 0| case below.
283
+ size_t mid = lo + (hi - lo - 1) / 2;
284
+ assert(lo <= mid && mid < hi);
285
+ const void *elem = sk->data[mid];
286
+ int r = call_cmp_func(sk->comp, &p, &elem);
287
+ if (r > 0) {
288
+ lo = mid + 1; // |mid| is too low.
289
+ } else if (r < 0) {
290
+ hi = mid; // |mid| is too high.
291
+ } else {
292
+ // |mid| matches. However, this function returns the earliest match, so we
293
+ // can only return if the range has size one.
294
+ if (hi - lo == 1) {
295
+ if (out_index != NULL) {
296
+ *out_index = mid;
297
+ }
298
+ return 1;
299
+ }
300
+ // The sample is biased towards |lo|. |mid| can only be |hi - 1| if
301
+ // |hi - lo| was one, so this makes forward progress.
302
+ assert(mid + 1 < hi);
303
+ hi = mid + 1;
304
+ }
268
305
  }
269
- return 1;
306
+
307
+ assert(lo == hi);
308
+ return 0; // Not found.
270
309
  }
271
310
 
272
311
  void *sk_shift(_STACK *sk) {
@@ -323,15 +362,24 @@ err:
323
362
  }
324
363
 
325
364
  void sk_sort(_STACK *sk) {
326
- int (*comp_func)(const void *,const void *);
327
-
328
365
  if (sk == NULL || sk->comp == NULL || sk->sorted) {
329
366
  return;
330
367
  }
331
368
 
332
- // See the comment in sk_find about this cast.
333
- comp_func = (int (*)(const void *, const void *))(sk->comp);
334
- qsort(sk->data, sk->num, sizeof(void *), comp_func);
369
+ // sk->comp is a function that takes pointers to pointers to elements, but
370
+ // qsort take a comparison function that just takes pointers to elements.
371
+ // However, since we're passing an array of pointers to qsort, we can just
372
+ // cast the comparison function and everything works.
373
+ //
374
+ // TODO(davidben): This is undefined behavior, but the call is in libc so,
375
+ // e.g., CFI does not notice. Unfortunately, |qsort| is missing a void*
376
+ // parameter in its callback and |qsort_s| / |qsort_r| are a mess of
377
+ // incompatibility.
378
+ if (sk->num >= 2) {
379
+ int (*comp_func)(const void *, const void *) =
380
+ (int (*)(const void *, const void *))(sk->comp);
381
+ qsort(sk->data, sk->num, sizeof(void *), comp_func);
382
+ }
335
383
  sk->sorted = 1;
336
384
  }
337
385
 
@@ -353,8 +401,11 @@ stack_cmp_func sk_set_cmp_func(_STACK *sk, stack_cmp_func comp) {
353
401
  return old;
354
402
  }
355
403
 
356
- _STACK *sk_deep_copy(const _STACK *sk, void *(*copy_func)(void *),
357
- void (*free_func)(void *)) {
404
+ _STACK *sk_deep_copy(const _STACK *sk,
405
+ void *(*call_copy_func)(stack_copy_func, void *),
406
+ stack_copy_func copy_func,
407
+ void (*call_free_func)(stack_free_func, void *),
408
+ stack_free_func free_func) {
358
409
  _STACK *ret = sk_dup(sk);
359
410
  if (ret == NULL) {
360
411
  return NULL;
@@ -364,11 +415,11 @@ _STACK *sk_deep_copy(const _STACK *sk, void *(*copy_func)(void *),
364
415
  if (ret->data[i] == NULL) {
365
416
  continue;
366
417
  }
367
- ret->data[i] = copy_func(ret->data[i]);
418
+ ret->data[i] = call_copy_func(copy_func, ret->data[i]);
368
419
  if (ret->data[i] == NULL) {
369
420
  for (size_t j = 0; j < i; j++) {
370
421
  if (ret->data[j] != NULL) {
371
- free_func(ret->data[j]);
422
+ call_free_func(free_func, ret->data[j]);
372
423
  }
373
424
  }
374
425
  sk_free(ret);
@@ -14,7 +14,7 @@
14
14
 
15
15
  #include "internal.h"
16
16
 
17
- #if defined(OPENSSL_NO_THREADS)
17
+ #if !defined(OPENSSL_THREADS)
18
18
 
19
19
  void CRYPTO_MUTEX_init(CRYPTO_MUTEX *lock) {}
20
20
 
@@ -56,4 +56,4 @@ int CRYPTO_set_thread_local(thread_local_data_t index, void *value,
56
56
  return 1;
57
57
  }
58
58
 
59
- #endif // OPENSSL_NO_THREADS
59
+ #endif // !OPENSSL_THREADS
@@ -24,8 +24,8 @@
24
24
  #include <openssl/type_check.h>
25
25
 
26
26
 
27
- OPENSSL_COMPILE_ASSERT(sizeof(CRYPTO_MUTEX) >= sizeof(pthread_rwlock_t),
28
- CRYPTO_MUTEX_too_small);
27
+ OPENSSL_STATIC_ASSERT(sizeof(CRYPTO_MUTEX) >= sizeof(pthread_rwlock_t),
28
+ "CRYPTO_MUTEX is too small");
29
29
 
30
30
  void CRYPTO_MUTEX_init(CRYPTO_MUTEX *lock) {
31
31
  if (pthread_rwlock_init((pthread_rwlock_t *) lock, NULL) != 0) {
@@ -27,8 +27,8 @@ OPENSSL_MSVC_PRAGMA(warning(pop))
27
27
  #include <openssl/type_check.h>
28
28
 
29
29
 
30
- OPENSSL_COMPILE_ASSERT(sizeof(CRYPTO_MUTEX) >= sizeof(SRWLOCK),
31
- CRYPTO_MUTEX_too_small);
30
+ OPENSSL_STATIC_ASSERT(sizeof(CRYPTO_MUTEX) >= sizeof(SRWLOCK),
31
+ "CRYPTO_MUTEX is too small");
32
32
 
33
33
  static BOOL CALLBACK call_once_init(INIT_ONCE *once, void *arg, void **out) {
34
34
  void (**init)(void) = (void (**)(void))arg;
@@ -82,7 +82,7 @@ void CRYPTO_STATIC_MUTEX_unlock_write(struct CRYPTO_STATIC_MUTEX *lock) {
82
82
  ReleaseSRWLockExclusive(&lock->lock);
83
83
  }
84
84
 
85
- static CRITICAL_SECTION g_destructors_lock;
85
+ static SRWLOCK g_destructors_lock = SRWLOCK_INIT;
86
86
  static thread_local_destructor_t g_destructors[NUM_OPENSSL_THREAD_LOCALS];
87
87
 
88
88
  static CRYPTO_once_t g_thread_local_init_once = CRYPTO_ONCE_INIT;
@@ -90,10 +90,6 @@ static DWORD g_thread_local_key;
90
90
  static int g_thread_local_failed;
91
91
 
92
92
  static void thread_local_init(void) {
93
- if (!InitializeCriticalSectionAndSpinCount(&g_destructors_lock, 0x400)) {
94
- g_thread_local_failed = 1;
95
- return;
96
- }
97
93
  g_thread_local_key = TlsAlloc();
98
94
  g_thread_local_failed = (g_thread_local_key == TLS_OUT_OF_INDEXES);
99
95
  }
@@ -121,12 +117,11 @@ static void NTAPI thread_local_destructor(PVOID module, DWORD reason,
121
117
 
122
118
  thread_local_destructor_t destructors[NUM_OPENSSL_THREAD_LOCALS];
123
119
 
124
- EnterCriticalSection(&g_destructors_lock);
120
+ AcquireSRWLockExclusive(&g_destructors_lock);
125
121
  OPENSSL_memcpy(destructors, g_destructors, sizeof(destructors));
126
- LeaveCriticalSection(&g_destructors_lock);
122
+ ReleaseSRWLockExclusive(&g_destructors_lock);
127
123
 
128
- unsigned i;
129
- for (i = 0; i < NUM_OPENSSL_THREAD_LOCALS; i++) {
124
+ for (unsigned i = 0; i < NUM_OPENSSL_THREAD_LOCALS; i++) {
130
125
  if (destructors[i] != NULL) {
131
126
  destructors[i](pointers[i]);
132
127
  }
@@ -146,12 +141,18 @@ static void NTAPI thread_local_destructor(PVOID module, DWORD reason,
146
141
  // if it's not already there. (E.g. if __declspec(thread) is not used). Force
147
142
  // a reference to p_thread_callback_boringssl to prevent whole program
148
143
  // optimization from discarding the variable.
144
+ //
145
+ // Note, in the prefixed build, |p_thread_callback_boringssl| may be a macro.
146
+ #define STRINGIFY(x) #x
147
+ #define EXPAND_AND_STRINGIFY(x) STRINGIFY(x)
149
148
  #ifdef _WIN64
150
- #pragma comment(linker, "/INCLUDE:_tls_used")
151
- #pragma comment(linker, "/INCLUDE:p_thread_callback_boringssl")
149
+ __pragma(comment(linker, "/INCLUDE:_tls_used"))
150
+ __pragma(comment(
151
+ linker, "/INCLUDE:" EXPAND_AND_STRINGIFY(p_thread_callback_boringssl)))
152
152
  #else
153
- #pragma comment(linker, "/INCLUDE:__tls_used")
154
- #pragma comment(linker, "/INCLUDE:_p_thread_callback_boringssl")
153
+ __pragma(comment(linker, "/INCLUDE:__tls_used"))
154
+ __pragma(comment(
155
+ linker, "/INCLUDE:_" EXPAND_AND_STRINGIFY(p_thread_callback_boringssl)))
155
156
  #endif
156
157
 
157
158
  // .CRT$XLA to .CRT$XLZ is an array of PIMAGE_TLS_CALLBACK pointers that are
@@ -190,13 +191,31 @@ PIMAGE_TLS_CALLBACK p_thread_callback_boringssl = thread_local_destructor;
190
191
 
191
192
  #endif // _WIN64
192
193
 
194
+ static void **get_thread_locals(void) {
195
+ // |TlsGetValue| clears the last error even on success, so that callers may
196
+ // distinguish it successfully returning NULL or failing. It is documented to
197
+ // never fail if the argument is a valid index from |TlsAlloc|, so we do not
198
+ // need to handle this.
199
+ //
200
+ // However, this error-mangling behavior interferes with the caller's use of
201
+ // |GetLastError|. In particular |SSL_get_error| queries the error queue to
202
+ // determine whether the caller should look at the OS's errors. To avoid
203
+ // destroying state, save and restore the Windows error.
204
+ //
205
+ // https://msdn.microsoft.com/en-us/library/windows/desktop/ms686812(v=vs.85).aspx
206
+ DWORD last_error = GetLastError();
207
+ void **ret = TlsGetValue(g_thread_local_key);
208
+ SetLastError(last_error);
209
+ return ret;
210
+ }
211
+
193
212
  void *CRYPTO_get_thread_local(thread_local_data_t index) {
194
213
  CRYPTO_once(&g_thread_local_init_once, thread_local_init);
195
214
  if (g_thread_local_failed) {
196
215
  return NULL;
197
216
  }
198
217
 
199
- void **pointers = TlsGetValue(g_thread_local_key);
218
+ void **pointers = get_thread_locals();
200
219
  if (pointers == NULL) {
201
220
  return NULL;
202
221
  }
@@ -211,7 +230,7 @@ int CRYPTO_set_thread_local(thread_local_data_t index, void *value,
211
230
  return 0;
212
231
  }
213
232
 
214
- void **pointers = TlsGetValue(g_thread_local_key);
233
+ void **pointers = get_thread_locals();
215
234
  if (pointers == NULL) {
216
235
  pointers = OPENSSL_malloc(sizeof(void *) * NUM_OPENSSL_THREAD_LOCALS);
217
236
  if (pointers == NULL) {
@@ -226,9 +245,9 @@ int CRYPTO_set_thread_local(thread_local_data_t index, void *value,
226
245
  }
227
246
  }
228
247
 
229
- EnterCriticalSection(&g_destructors_lock);
248
+ AcquireSRWLockExclusive(&g_destructors_lock);
230
249
  g_destructors[index] = destructor;
231
- LeaveCriticalSection(&g_destructors_lock);
250
+ ReleaseSRWLockExclusive(&g_destructors_lock);
232
251
 
233
252
  pointers[index] = value;
234
253
  return 1;