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
@@ -151,7 +151,7 @@
151
151
  #include "../crypto/internal.h"
152
152
 
153
153
 
154
- namespace bssl {
154
+ BSSL_NAMESPACE_BEGIN
155
155
 
156
156
  // The address of this is a magic value, a pointer to which is returned by
157
157
  // SSL_magic_pending_session_ptr(). It allows a session callback to indicate
@@ -166,22 +166,27 @@ static void SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *session);
166
166
  static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *session, int lock);
167
167
 
168
168
  UniquePtr<SSL_SESSION> ssl_session_new(const SSL_X509_METHOD *x509_method) {
169
- UniquePtr<SSL_SESSION> session(
170
- (SSL_SESSION *)OPENSSL_malloc(sizeof(SSL_SESSION)));
171
- if (!session) {
172
- OPENSSL_PUT_ERROR(SSL, ERR_R_MALLOC_FAILURE);
173
- return 0;
169
+ return MakeUnique<SSL_SESSION>(x509_method);
170
+ }
171
+
172
+ uint32_t ssl_hash_session_id(Span<const uint8_t> session_id) {
173
+ // Take the first four bytes of |session_id|. Session IDs are generated by the
174
+ // server randomly, so we can assume even using the first four bytes results
175
+ // in a good distribution.
176
+ uint8_t tmp_storage[sizeof(uint32_t)];
177
+ if (session_id.size() < sizeof(tmp_storage)) {
178
+ OPENSSL_memset(tmp_storage, 0, sizeof(tmp_storage));
179
+ OPENSSL_memcpy(tmp_storage, session_id.data(), session_id.size());
180
+ session_id = tmp_storage;
174
181
  }
175
- OPENSSL_memset(session.get(), 0, sizeof(SSL_SESSION));
176
182
 
177
- session->x509_method = x509_method;
178
- session->verify_result = X509_V_ERR_INVALID_CALL;
179
- session->references = 1;
180
- session->timeout = SSL_DEFAULT_SESSION_TIMEOUT;
181
- session->auth_timeout = SSL_DEFAULT_SESSION_TIMEOUT;
182
- session->time = time(NULL);
183
- CRYPTO_new_ex_data(&session->ex_data);
184
- return session;
183
+ uint32_t hash =
184
+ ((uint32_t)session_id[0]) |
185
+ ((uint32_t)session_id[1] << 8) |
186
+ ((uint32_t)session_id[2] << 16) |
187
+ ((uint32_t)session_id[3] << 24);
188
+
189
+ return hash;
185
190
  }
186
191
 
187
192
  UniquePtr<SSL_SESSION> SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
@@ -202,24 +207,22 @@ UniquePtr<SSL_SESSION> SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
202
207
  new_session->cipher = session->cipher;
203
208
 
204
209
  // Copy authentication state.
205
- if (session->psk_identity != NULL) {
206
- new_session->psk_identity = BUF_strdup(session->psk_identity);
207
- if (new_session->psk_identity == NULL) {
210
+ if (session->psk_identity != nullptr) {
211
+ new_session->psk_identity.reset(BUF_strdup(session->psk_identity.get()));
212
+ if (new_session->psk_identity == nullptr) {
208
213
  return nullptr;
209
214
  }
210
215
  }
211
- if (session->certs != NULL) {
212
- new_session->certs = sk_CRYPTO_BUFFER_new_null();
213
- if (new_session->certs == NULL) {
216
+ if (session->certs != nullptr) {
217
+ auto buf_up_ref = [](CRYPTO_BUFFER *buf) {
218
+ CRYPTO_BUFFER_up_ref(buf);
219
+ return buf;
220
+ };
221
+ new_session->certs.reset(sk_CRYPTO_BUFFER_deep_copy(
222
+ session->certs.get(), buf_up_ref, CRYPTO_BUFFER_free));
223
+ if (new_session->certs == nullptr) {
214
224
  return nullptr;
215
225
  }
216
- for (size_t i = 0; i < sk_CRYPTO_BUFFER_num(session->certs); i++) {
217
- CRYPTO_BUFFER *buffer = sk_CRYPTO_BUFFER_value(session->certs, i);
218
- if (!sk_CRYPTO_BUFFER_push(new_session->certs, buffer)) {
219
- return nullptr;
220
- }
221
- CRYPTO_BUFFER_up_ref(buffer);
222
- }
223
226
  }
224
227
 
225
228
  if (!session->x509_method->session_dup(new_session.get(), session)) {
@@ -228,16 +231,9 @@ UniquePtr<SSL_SESSION> SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
228
231
 
229
232
  new_session->verify_result = session->verify_result;
230
233
 
231
- if (session->ocsp_response != NULL) {
232
- new_session->ocsp_response = session->ocsp_response;
233
- CRYPTO_BUFFER_up_ref(new_session->ocsp_response);
234
- }
235
-
236
- if (session->signed_cert_timestamp_list != NULL) {
237
- new_session->signed_cert_timestamp_list =
238
- session->signed_cert_timestamp_list;
239
- CRYPTO_BUFFER_up_ref(new_session->signed_cert_timestamp_list);
240
- }
234
+ new_session->ocsp_response = UpRef(session->ocsp_response);
235
+ new_session->signed_cert_timestamp_list =
236
+ UpRef(session->signed_cert_timestamp_list);
241
237
 
242
238
  OPENSSL_memcpy(new_session->peer_sha256, session->peer_sha256,
243
239
  SHA256_DIGEST_LENGTH);
@@ -262,36 +258,25 @@ UniquePtr<SSL_SESSION> SSL_SESSION_dup(SSL_SESSION *session, int dup_flags) {
262
258
  session->original_handshake_hash_len);
263
259
  new_session->original_handshake_hash_len =
264
260
  session->original_handshake_hash_len;
265
- new_session->tlsext_tick_lifetime_hint = session->tlsext_tick_lifetime_hint;
261
+ new_session->ticket_lifetime_hint = session->ticket_lifetime_hint;
266
262
  new_session->ticket_age_add = session->ticket_age_add;
267
263
  new_session->ticket_max_early_data = session->ticket_max_early_data;
268
264
  new_session->extended_master_secret = session->extended_master_secret;
269
265
 
270
- if (session->early_alpn != NULL) {
271
- new_session->early_alpn =
272
- (uint8_t *)BUF_memdup(session->early_alpn, session->early_alpn_len);
273
- if (new_session->early_alpn == NULL) {
274
- return nullptr;
275
- }
266
+ if (!new_session->early_alpn.CopyFrom(session->early_alpn)) {
267
+ return nullptr;
276
268
  }
277
- new_session->early_alpn_len = session->early_alpn_len;
278
269
  }
279
270
 
280
271
  // Copy the ticket.
281
- if (dup_flags & SSL_SESSION_INCLUDE_TICKET) {
282
- if (session->tlsext_tick != NULL) {
283
- new_session->tlsext_tick =
284
- (uint8_t *)BUF_memdup(session->tlsext_tick, session->tlsext_ticklen);
285
- if (new_session->tlsext_tick == NULL) {
286
- return nullptr;
287
- }
288
- }
289
- new_session->tlsext_ticklen = session->tlsext_ticklen;
272
+ if (dup_flags & SSL_SESSION_INCLUDE_TICKET &&
273
+ !new_session->ticket.CopyFrom(session->ticket)) {
274
+ return nullptr;
290
275
  }
291
276
 
292
277
  // The new_session does not get a copy of the ex_data.
293
278
 
294
- new_session->not_resumable = 1;
279
+ new_session->not_resumable = true;
295
280
  return new_session;
296
281
  }
297
282
 
@@ -405,16 +390,16 @@ int ssl_get_new_session(SSL_HANDSHAKE *hs, int is_server) {
405
390
  session->session_id_length = 0;
406
391
  }
407
392
 
408
- if (ssl->cert->sid_ctx_length > sizeof(session->sid_ctx)) {
393
+ if (hs->config->cert->sid_ctx_length > sizeof(session->sid_ctx)) {
409
394
  OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
410
395
  return 0;
411
396
  }
412
- OPENSSL_memcpy(session->sid_ctx, ssl->cert->sid_ctx,
413
- ssl->cert->sid_ctx_length);
414
- session->sid_ctx_length = ssl->cert->sid_ctx_length;
397
+ OPENSSL_memcpy(session->sid_ctx, hs->config->cert->sid_ctx,
398
+ hs->config->cert->sid_ctx_length);
399
+ session->sid_ctx_length = hs->config->cert->sid_ctx_length;
415
400
 
416
401
  // The session is marked not resumable until it is completely filled in.
417
- session->not_resumable = 1;
402
+ session->not_resumable = true;
418
403
  session->verify_result = X509_V_ERR_INVALID_CALL;
419
404
 
420
405
  hs->new_session = std::move(session);
@@ -429,53 +414,50 @@ int ssl_ctx_rotate_ticket_encryption_key(SSL_CTX *ctx) {
429
414
  // Avoid acquiring a write lock in the common case (i.e. a non-default key
430
415
  // is used or the default keys have not expired yet).
431
416
  MutexReadLock lock(&ctx->lock);
432
- if (ctx->tlsext_ticket_key_current &&
433
- (ctx->tlsext_ticket_key_current->next_rotation_tv_sec == 0 ||
434
- ctx->tlsext_ticket_key_current->next_rotation_tv_sec > now.tv_sec) &&
435
- (!ctx->tlsext_ticket_key_prev ||
436
- ctx->tlsext_ticket_key_prev->next_rotation_tv_sec > now.tv_sec)) {
417
+ if (ctx->ticket_key_current &&
418
+ (ctx->ticket_key_current->next_rotation_tv_sec == 0 ||
419
+ ctx->ticket_key_current->next_rotation_tv_sec > now.tv_sec) &&
420
+ (!ctx->ticket_key_prev ||
421
+ ctx->ticket_key_prev->next_rotation_tv_sec > now.tv_sec)) {
437
422
  return 1;
438
423
  }
439
424
  }
440
425
 
441
426
  MutexWriteLock lock(&ctx->lock);
442
- if (!ctx->tlsext_ticket_key_current ||
443
- (ctx->tlsext_ticket_key_current->next_rotation_tv_sec != 0 &&
444
- ctx->tlsext_ticket_key_current->next_rotation_tv_sec <= now.tv_sec)) {
427
+ if (!ctx->ticket_key_current ||
428
+ (ctx->ticket_key_current->next_rotation_tv_sec != 0 &&
429
+ ctx->ticket_key_current->next_rotation_tv_sec <= now.tv_sec)) {
445
430
  // The current key has not been initialized or it is expired.
446
- auto new_key = bssl::MakeUnique<struct tlsext_ticket_key>();
431
+ auto new_key = bssl::MakeUnique<TicketKey>();
447
432
  if (!new_key) {
448
433
  return 0;
449
434
  }
450
- OPENSSL_memset(new_key.get(), 0, sizeof(struct tlsext_ticket_key));
451
- if (ctx->tlsext_ticket_key_current) {
435
+ RAND_bytes(new_key->name, 16);
436
+ RAND_bytes(new_key->hmac_key, 16);
437
+ RAND_bytes(new_key->aes_key, 16);
438
+ new_key->next_rotation_tv_sec =
439
+ now.tv_sec + SSL_DEFAULT_TICKET_KEY_ROTATION_INTERVAL;
440
+ if (ctx->ticket_key_current) {
452
441
  // The current key expired. Rotate it to prev and bump up its rotation
453
442
  // timestamp. Note that even with the new rotation time it may still be
454
- // expired and get droppped below.
455
- ctx->tlsext_ticket_key_current->next_rotation_tv_sec +=
443
+ // expired and get dropped below.
444
+ ctx->ticket_key_current->next_rotation_tv_sec +=
456
445
  SSL_DEFAULT_TICKET_KEY_ROTATION_INTERVAL;
457
- OPENSSL_free(ctx->tlsext_ticket_key_prev);
458
- ctx->tlsext_ticket_key_prev = ctx->tlsext_ticket_key_current;
446
+ ctx->ticket_key_prev = std::move(ctx->ticket_key_current);
459
447
  }
460
- ctx->tlsext_ticket_key_current = new_key.release();
461
- RAND_bytes(ctx->tlsext_ticket_key_current->name, 16);
462
- RAND_bytes(ctx->tlsext_ticket_key_current->hmac_key, 16);
463
- RAND_bytes(ctx->tlsext_ticket_key_current->aes_key, 16);
464
- ctx->tlsext_ticket_key_current->next_rotation_tv_sec =
465
- now.tv_sec + SSL_DEFAULT_TICKET_KEY_ROTATION_INTERVAL;
448
+ ctx->ticket_key_current = std::move(new_key);
466
449
  }
467
450
 
468
451
  // Drop an expired prev key.
469
- if (ctx->tlsext_ticket_key_prev &&
470
- ctx->tlsext_ticket_key_prev->next_rotation_tv_sec <= now.tv_sec) {
471
- OPENSSL_free(ctx->tlsext_ticket_key_prev);
472
- ctx->tlsext_ticket_key_prev = nullptr;
452
+ if (ctx->ticket_key_prev &&
453
+ ctx->ticket_key_prev->next_rotation_tv_sec <= now.tv_sec) {
454
+ ctx->ticket_key_prev.reset();
473
455
  }
474
456
 
475
457
  return 1;
476
458
  }
477
459
 
478
- static int ssl_encrypt_ticket_with_cipher_ctx(SSL *ssl, CBB *out,
460
+ static int ssl_encrypt_ticket_with_cipher_ctx(SSL_HANDSHAKE *hs, CBB *out,
479
461
  const uint8_t *session_buf,
480
462
  size_t session_len) {
481
463
  ScopedEVP_CIPHER_CTX ctx;
@@ -493,12 +475,12 @@ static int ssl_encrypt_ticket_with_cipher_ctx(SSL *ssl, CBB *out,
493
475
 
494
476
  // Initialize HMAC and cipher contexts. If callback present it does all the
495
477
  // work otherwise use generated values from parent ctx.
496
- SSL_CTX *tctx = ssl->session_ctx;
478
+ SSL_CTX *tctx = hs->ssl->session_ctx.get();
497
479
  uint8_t iv[EVP_MAX_IV_LENGTH];
498
480
  uint8_t key_name[16];
499
- if (tctx->tlsext_ticket_key_cb != NULL) {
500
- if (tctx->tlsext_ticket_key_cb(ssl, key_name, iv, ctx.get(), hctx.get(),
501
- 1 /* encrypt */) < 0) {
481
+ if (tctx->ticket_key_cb != NULL) {
482
+ if (tctx->ticket_key_cb(hs->ssl, key_name, iv, ctx.get(), hctx.get(),
483
+ 1 /* encrypt */) < 0) {
502
484
  return 0;
503
485
  }
504
486
  } else {
@@ -509,12 +491,12 @@ static int ssl_encrypt_ticket_with_cipher_ctx(SSL *ssl, CBB *out,
509
491
  MutexReadLock lock(&tctx->lock);
510
492
  if (!RAND_bytes(iv, 16) ||
511
493
  !EVP_EncryptInit_ex(ctx.get(), EVP_aes_128_cbc(), NULL,
512
- tctx->tlsext_ticket_key_current->aes_key, iv) ||
513
- !HMAC_Init_ex(hctx.get(), tctx->tlsext_ticket_key_current->hmac_key, 16,
494
+ tctx->ticket_key_current->aes_key, iv) ||
495
+ !HMAC_Init_ex(hctx.get(), tctx->ticket_key_current->hmac_key, 16,
514
496
  tlsext_tick_md(), NULL)) {
515
497
  return 0;
516
498
  }
517
- OPENSSL_memcpy(key_name, tctx->tlsext_ticket_key_current->name, 16);
499
+ OPENSSL_memcpy(key_name, tctx->ticket_key_current->name, 16);
518
500
  }
519
501
 
520
502
  uint8_t *ptr;
@@ -554,9 +536,10 @@ static int ssl_encrypt_ticket_with_cipher_ctx(SSL *ssl, CBB *out,
554
536
  return 1;
555
537
  }
556
538
 
557
- static int ssl_encrypt_ticket_with_method(SSL *ssl, CBB *out,
539
+ static int ssl_encrypt_ticket_with_method(SSL_HANDSHAKE *hs, CBB *out,
558
540
  const uint8_t *session_buf,
559
541
  size_t session_len) {
542
+ SSL *const ssl = hs->ssl;
560
543
  const SSL_TICKET_AEAD_METHOD *method = ssl->session_ctx->ticket_aead_method;
561
544
  const size_t max_overhead = method->max_overhead(ssl);
562
545
  const size_t max_out = session_len + max_overhead;
@@ -571,7 +554,8 @@ static int ssl_encrypt_ticket_with_method(SSL *ssl, CBB *out,
571
554
  }
572
555
 
573
556
  size_t out_len;
574
- if (!method->seal(ssl, ptr, &out_len, max_out, session_buf, session_len)) {
557
+ if (!method->seal(ssl, ptr, &out_len, max_out, session_buf,
558
+ session_len)) {
575
559
  OPENSSL_PUT_ERROR(SSL, SSL_R_TICKET_ENCRYPTION_FAILED);
576
560
  return 0;
577
561
  }
@@ -583,7 +567,8 @@ static int ssl_encrypt_ticket_with_method(SSL *ssl, CBB *out,
583
567
  return 1;
584
568
  }
585
569
 
586
- int ssl_encrypt_ticket(SSL *ssl, CBB *out, const SSL_SESSION *session) {
570
+ int ssl_encrypt_ticket(SSL_HANDSHAKE *hs, CBB *out,
571
+ const SSL_SESSION *session) {
587
572
  // Serialize the SSL_SESSION to be encoded into the ticket.
588
573
  uint8_t *session_buf = NULL;
589
574
  size_t session_len;
@@ -592,25 +577,25 @@ int ssl_encrypt_ticket(SSL *ssl, CBB *out, const SSL_SESSION *session) {
592
577
  }
593
578
 
594
579
  int ret = 0;
595
- if (ssl->session_ctx->ticket_aead_method) {
596
- ret = ssl_encrypt_ticket_with_method(ssl, out, session_buf, session_len);
580
+ if (hs->ssl->session_ctx->ticket_aead_method) {
581
+ ret = ssl_encrypt_ticket_with_method(hs, out, session_buf, session_len);
597
582
  } else {
598
- ret =
599
- ssl_encrypt_ticket_with_cipher_ctx(ssl, out, session_buf, session_len);
583
+ ret = ssl_encrypt_ticket_with_cipher_ctx(hs, out, session_buf, session_len);
600
584
  }
601
585
 
602
586
  OPENSSL_free(session_buf);
603
587
  return ret;
604
588
  }
605
589
 
606
- int ssl_session_is_context_valid(const SSL *ssl, const SSL_SESSION *session) {
590
+ int ssl_session_is_context_valid(const SSL_HANDSHAKE *hs,
591
+ const SSL_SESSION *session) {
607
592
  if (session == NULL) {
608
593
  return 0;
609
594
  }
610
595
 
611
- return session->sid_ctx_length == ssl->cert->sid_ctx_length &&
612
- OPENSSL_memcmp(session->sid_ctx, ssl->cert->sid_ctx,
613
- ssl->cert->sid_ctx_length) == 0;
596
+ return session->sid_ctx_length == hs->config->cert->sid_ctx_length &&
597
+ OPENSSL_memcmp(session->sid_ctx, hs->config->cert->sid_ctx,
598
+ hs->config->cert->sid_ctx_length) == 0;
614
599
  }
615
600
 
616
601
  int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session) {
@@ -632,34 +617,35 @@ int ssl_session_is_time_valid(const SSL *ssl, const SSL_SESSION *session) {
632
617
  int ssl_session_is_resumable(const SSL_HANDSHAKE *hs,
633
618
  const SSL_SESSION *session) {
634
619
  const SSL *const ssl = hs->ssl;
635
- return ssl_session_is_context_valid(ssl, session) &&
620
+ return ssl_session_is_context_valid(hs, session) &&
636
621
  // The session must have been created by the same type of end point as
637
622
  // we're now using it with.
638
623
  ssl->server == session->is_server &&
639
624
  // The session must not be expired.
640
625
  ssl_session_is_time_valid(ssl, session) &&
641
626
  /* Only resume if the session's version matches the negotiated
642
- * version. */
627
+ * version. */
643
628
  ssl->version == session->ssl_version &&
644
629
  // Only resume if the session's cipher matches the negotiated one.
645
630
  hs->new_cipher == session->cipher &&
646
631
  // If the session contains a client certificate (either the full
647
632
  // certificate or just the hash) then require that the form of the
648
633
  // certificate matches the current configuration.
649
- ((sk_CRYPTO_BUFFER_num(session->certs) == 0 &&
634
+ ((sk_CRYPTO_BUFFER_num(session->certs.get()) == 0 &&
650
635
  !session->peer_sha256_valid) ||
651
636
  session->peer_sha256_valid ==
652
- ssl->retain_only_sha256_of_client_certs);
637
+ hs->config->retain_only_sha256_of_client_certs);
653
638
  }
654
639
 
655
640
  // ssl_lookup_session looks up |session_id| in the session cache and sets
656
641
  // |*out_session| to an |SSL_SESSION| object if found.
657
642
  static enum ssl_hs_wait_t ssl_lookup_session(
658
- SSL *ssl, UniquePtr<SSL_SESSION> *out_session, const uint8_t *session_id,
659
- size_t session_id_len) {
643
+ SSL_HANDSHAKE *hs, UniquePtr<SSL_SESSION> *out_session,
644
+ Span<const uint8_t> session_id) {
645
+ SSL *const ssl = hs->ssl;
660
646
  out_session->reset();
661
647
 
662
- if (session_id_len == 0 || session_id_len > SSL_MAX_SSL_SESSION_ID_LENGTH) {
648
+ if (session_id.empty() || session_id.size() > SSL_MAX_SSL_SESSION_ID_LENGTH) {
663
649
  return ssl_hs_ok;
664
650
  }
665
651
 
@@ -667,32 +653,26 @@ static enum ssl_hs_wait_t ssl_lookup_session(
667
653
  // Try the internal cache, if it exists.
668
654
  if (!(ssl->session_ctx->session_cache_mode &
669
655
  SSL_SESS_CACHE_NO_INTERNAL_LOOKUP)) {
670
- SSL_SESSION data;
671
- data.ssl_version = ssl->version;
672
- data.session_id_length = session_id_len;
673
- OPENSSL_memcpy(data.session_id, session_id, session_id_len);
674
-
656
+ uint32_t hash = ssl_hash_session_id(session_id);
657
+ auto cmp = [](const void *key, const SSL_SESSION *sess) -> int {
658
+ Span<const uint8_t> key_id =
659
+ *reinterpret_cast<const Span<const uint8_t> *>(key);
660
+ Span<const uint8_t> sess_id =
661
+ MakeConstSpan(sess->session_id, sess->session_id_length);
662
+ return key_id == sess_id ? 0 : 1;
663
+ };
675
664
  MutexReadLock lock(&ssl->session_ctx->lock);
676
- session.reset(lh_SSL_SESSION_retrieve(ssl->session_ctx->sessions, &data));
677
- if (session) {
678
- // |lh_SSL_SESSION_retrieve| returns a non-owning pointer.
679
- SSL_SESSION_up_ref(session.get());
680
- }
665
+ // |lh_SSL_SESSION_retrieve_key| returns a non-owning pointer.
666
+ session = UpRef(lh_SSL_SESSION_retrieve_key(ssl->session_ctx->sessions,
667
+ &session_id, hash, cmp));
681
668
  // TODO(davidben): This should probably move it to the front of the list.
682
669
  }
683
670
 
684
671
  // Fall back to the external cache, if it exists.
685
- if (!session && (ssl->session_ctx->get_session_cb != nullptr ||
686
- ssl->session_ctx->get_session_cb_legacy != nullptr)) {
672
+ if (!session && ssl->session_ctx->get_session_cb != nullptr) {
687
673
  int copy = 1;
688
- if (ssl->session_ctx->get_session_cb != nullptr) {
689
- session.reset(ssl->session_ctx->get_session_cb(ssl, session_id,
690
- session_id_len, &copy));
691
- } else {
692
- session.reset(ssl->session_ctx->get_session_cb_legacy(
693
- ssl, const_cast<uint8_t *>(session_id), session_id_len, &copy));
694
- }
695
-
674
+ session.reset(ssl->session_ctx->get_session_cb(ssl, session_id.data(),
675
+ session_id.size(), &copy));
696
676
  if (!session) {
697
677
  return ssl_hs_ok;
698
678
  }
@@ -713,13 +693,13 @@ static enum ssl_hs_wait_t ssl_lookup_session(
713
693
  // Add the externally cached session to the internal cache if necessary.
714
694
  if (!(ssl->session_ctx->session_cache_mode &
715
695
  SSL_SESS_CACHE_NO_INTERNAL_STORE)) {
716
- SSL_CTX_add_session(ssl->session_ctx, session.get());
696
+ SSL_CTX_add_session(ssl->session_ctx.get(), session.get());
717
697
  }
718
698
  }
719
699
 
720
700
  if (session && !ssl_session_is_time_valid(ssl, session.get())) {
721
701
  // The session was from the cache, so remove it.
722
- SSL_CTX_remove_session(ssl->session_ctx, session.get());
702
+ SSL_CTX_remove_session(ssl->session_ctx.get(), session.get());
723
703
  session.reset();
724
704
  }
725
705
 
@@ -727,28 +707,26 @@ static enum ssl_hs_wait_t ssl_lookup_session(
727
707
  return ssl_hs_ok;
728
708
  }
729
709
 
730
- enum ssl_hs_wait_t ssl_get_prev_session(SSL *ssl,
710
+ enum ssl_hs_wait_t ssl_get_prev_session(SSL_HANDSHAKE *hs,
731
711
  UniquePtr<SSL_SESSION> *out_session,
732
712
  bool *out_tickets_supported,
733
713
  bool *out_renew_ticket,
734
714
  const SSL_CLIENT_HELLO *client_hello) {
735
715
  // This is used only by servers.
736
- assert(ssl->server);
716
+ assert(hs->ssl->server);
737
717
  UniquePtr<SSL_SESSION> session;
738
718
  bool renew_ticket = false;
739
719
 
740
720
  // If tickets are disabled, always behave as if no tickets are present.
741
- const uint8_t *ticket = NULL;
742
- size_t ticket_len = 0;
721
+ CBS ticket;
743
722
  const bool tickets_supported =
744
- !(SSL_get_options(ssl) & SSL_OP_NO_TICKET) &&
745
- ssl->version > SSL3_VERSION &&
746
- SSL_early_callback_ctx_extension_get(
747
- client_hello, TLSEXT_TYPE_session_ticket, &ticket, &ticket_len);
748
- if (tickets_supported && ticket_len > 0) {
749
- switch (ssl_process_ticket(ssl, &session, &renew_ticket, ticket, ticket_len,
750
- client_hello->session_id,
751
- client_hello->session_id_len)) {
723
+ !(SSL_get_options(hs->ssl) & SSL_OP_NO_TICKET) &&
724
+ ssl_client_hello_get_extension(client_hello, &ticket,
725
+ TLSEXT_TYPE_session_ticket);
726
+ if (tickets_supported && CBS_len(&ticket) != 0) {
727
+ switch (ssl_process_ticket(hs, &session, &renew_ticket, ticket,
728
+ MakeConstSpan(client_hello->session_id,
729
+ client_hello->session_id_len))) {
752
730
  case ssl_ticket_aead_success:
753
731
  break;
754
732
  case ssl_ticket_aead_ignore_ticket:
@@ -762,7 +740,8 @@ enum ssl_hs_wait_t ssl_get_prev_session(SSL *ssl,
762
740
  } else {
763
741
  // The client didn't send a ticket, so the session ID is a real ID.
764
742
  enum ssl_hs_wait_t lookup_ret = ssl_lookup_session(
765
- ssl, &session, client_hello->session_id, client_hello->session_id_len);
743
+ hs, &session,
744
+ MakeConstSpan(client_hello->session_id, client_hello->session_id_len));
766
745
  if (lookup_ret != ssl_hs_ok) {
767
746
  return lookup_ret;
768
747
  }
@@ -805,15 +784,11 @@ static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *session, int lock) {
805
784
  }
806
785
 
807
786
  void ssl_set_session(SSL *ssl, SSL_SESSION *session) {
808
- if (ssl->session == session) {
787
+ if (ssl->session.get() == session) {
809
788
  return;
810
789
  }
811
790
 
812
- SSL_SESSION_free(ssl->session);
813
- ssl->session = session;
814
- if (session != NULL) {
815
- SSL_SESSION_up_ref(session);
816
- }
791
+ ssl->session = UpRef(session);
817
792
  }
818
793
 
819
794
  // locked by SSL_CTX in the calling function
@@ -863,10 +838,26 @@ static void SSL_SESSION_list_add(SSL_CTX *ctx, SSL_SESSION *session) {
863
838
  }
864
839
  }
865
840
 
866
- } // namespace bssl
841
+ BSSL_NAMESPACE_END
867
842
 
868
843
  using namespace bssl;
869
844
 
845
+ ssl_session_st::ssl_session_st(const SSL_X509_METHOD *method)
846
+ : x509_method(method),
847
+ extended_master_secret(false),
848
+ peer_sha256_valid(false),
849
+ not_resumable(false),
850
+ ticket_age_add_valid(false),
851
+ is_server(false) {
852
+ CRYPTO_new_ex_data(&ex_data);
853
+ time = ::time(nullptr);
854
+ }
855
+
856
+ ssl_session_st::~ssl_session_st() {
857
+ CRYPTO_free_ex_data(&g_ex_data_class, this, &ex_data);
858
+ x509_method->session_clear(this);
859
+ }
860
+
870
861
  SSL_SESSION *SSL_SESSION_new(const SSL_CTX *ctx) {
871
862
  return ssl_session_new(ctx->x509_method).release();
872
863
  }
@@ -882,17 +873,7 @@ void SSL_SESSION_free(SSL_SESSION *session) {
882
873
  return;
883
874
  }
884
875
 
885
- CRYPTO_free_ex_data(&g_ex_data_class, session, &session->ex_data);
886
-
887
- OPENSSL_cleanse(session->master_key, sizeof(session->master_key));
888
- OPENSSL_cleanse(session->session_id, sizeof(session->session_id));
889
- sk_CRYPTO_BUFFER_pop_free(session->certs, CRYPTO_BUFFER_free);
890
- session->x509_method->session_clear(session);
891
- OPENSSL_free(session->tlsext_tick);
892
- CRYPTO_BUFFER_free(session->signed_cert_timestamp_list);
893
- CRYPTO_BUFFER_free(session->ocsp_response);
894
- OPENSSL_free(session->psk_identity);
895
- OPENSSL_free(session->early_alpn);
876
+ session->~ssl_session_st();
896
877
  OPENSSL_free(session);
897
878
  }
898
879
 
@@ -904,6 +885,19 @@ const uint8_t *SSL_SESSION_get_id(const SSL_SESSION *session,
904
885
  return session->session_id;
905
886
  }
906
887
 
888
+ int SSL_SESSION_set1_id(SSL_SESSION *session, const uint8_t *sid,
889
+ size_t sid_len) {
890
+ if (sid_len > SSL_MAX_SSL_SESSION_ID_LENGTH) {
891
+ OPENSSL_PUT_ERROR(SSL, SSL_R_SSL_SESSION_ID_TOO_LONG);
892
+ return 0;
893
+ }
894
+
895
+ // Use memmove in case someone passes in the output of |SSL_SESSION_get_id|.
896
+ OPENSSL_memmove(session->session_id, sid, sid_len);
897
+ session->session_id_length = sid_len;
898
+ return 1;
899
+ }
900
+
907
901
  uint32_t SSL_SESSION_get_timeout(const SSL_SESSION *session) {
908
902
  return session->timeout;
909
903
  }
@@ -920,6 +914,34 @@ X509 *SSL_SESSION_get0_peer(const SSL_SESSION *session) {
920
914
  return session->x509_peer;
921
915
  }
922
916
 
917
+ const STACK_OF(CRYPTO_BUFFER) *
918
+ SSL_SESSION_get0_peer_certificates(const SSL_SESSION *session) {
919
+ return session->certs.get();
920
+ }
921
+
922
+ void SSL_SESSION_get0_signed_cert_timestamp_list(const SSL_SESSION *session,
923
+ const uint8_t **out,
924
+ size_t *out_len) {
925
+ if (session->signed_cert_timestamp_list) {
926
+ *out = CRYPTO_BUFFER_data(session->signed_cert_timestamp_list.get());
927
+ *out_len = CRYPTO_BUFFER_len(session->signed_cert_timestamp_list.get());
928
+ } else {
929
+ *out = nullptr;
930
+ *out_len = 0;
931
+ }
932
+ }
933
+
934
+ void SSL_SESSION_get0_ocsp_response(const SSL_SESSION *session,
935
+ const uint8_t **out, size_t *out_len) {
936
+ if (session->ocsp_response) {
937
+ *out = CRYPTO_BUFFER_data(session->ocsp_response.get());
938
+ *out_len = CRYPTO_BUFFER_len(session->ocsp_response.get());
939
+ } else {
940
+ *out = nullptr;
941
+ *out_len = 0;
942
+ }
943
+ }
944
+
923
945
  size_t SSL_SESSION_get_master_key(const SSL_SESSION *session, uint8_t *out,
924
946
  size_t max_out) {
925
947
  // TODO(davidben): Fix master_key_length's type and remove these casts.
@@ -952,6 +974,14 @@ uint32_t SSL_SESSION_set_timeout(SSL_SESSION *session, uint32_t timeout) {
952
974
  return 1;
953
975
  }
954
976
 
977
+ const uint8_t *SSL_SESSION_get0_id_context(const SSL_SESSION *session,
978
+ unsigned *out_len) {
979
+ if (out_len != NULL) {
980
+ *out_len = session->sid_ctx_length;
981
+ }
982
+ return session->sid_ctx;
983
+ }
984
+
955
985
  int SSL_SESSION_set1_id_context(SSL_SESSION *session, const uint8_t *sid_ctx,
956
986
  size_t sid_ctx_len) {
957
987
  if (sid_ctx_len > sizeof(session->sid_ctx)) {
@@ -975,19 +1005,48 @@ int SSL_SESSION_is_resumable(const SSL_SESSION *session) {
975
1005
  }
976
1006
 
977
1007
  int SSL_SESSION_has_ticket(const SSL_SESSION *session) {
978
- return session->tlsext_ticklen > 0;
1008
+ return !session->ticket.empty();
979
1009
  }
980
1010
 
981
1011
  void SSL_SESSION_get0_ticket(const SSL_SESSION *session,
982
1012
  const uint8_t **out_ticket, size_t *out_len) {
983
1013
  if (out_ticket != nullptr) {
984
- *out_ticket = session->tlsext_tick;
1014
+ *out_ticket = session->ticket.data();
985
1015
  }
986
- *out_len = session->tlsext_ticklen;
1016
+ *out_len = session->ticket.size();
1017
+ }
1018
+
1019
+ int SSL_SESSION_set_ticket(SSL_SESSION *session, const uint8_t *ticket,
1020
+ size_t ticket_len) {
1021
+ return session->ticket.CopyFrom(MakeConstSpan(ticket, ticket_len));
987
1022
  }
988
1023
 
989
1024
  uint32_t SSL_SESSION_get_ticket_lifetime_hint(const SSL_SESSION *session) {
990
- return session->tlsext_tick_lifetime_hint;
1025
+ return session->ticket_lifetime_hint;
1026
+ }
1027
+
1028
+ const SSL_CIPHER *SSL_SESSION_get0_cipher(const SSL_SESSION *session) {
1029
+ return session->cipher;
1030
+ }
1031
+
1032
+ int SSL_SESSION_has_peer_sha256(const SSL_SESSION *session) {
1033
+ return session->peer_sha256_valid;
1034
+ }
1035
+
1036
+ void SSL_SESSION_get0_peer_sha256(const SSL_SESSION *session,
1037
+ const uint8_t **out_ptr, size_t *out_len) {
1038
+ if (session->peer_sha256_valid) {
1039
+ *out_ptr = session->peer_sha256;
1040
+ *out_len = sizeof(session->peer_sha256);
1041
+ } else {
1042
+ *out_ptr = nullptr;
1043
+ *out_len = 0;
1044
+ }
1045
+ }
1046
+
1047
+ int SSL_SESSION_early_data_capable(const SSL_SESSION *session) {
1048
+ return ssl_session_protocol_version(session) >= TLS1_3_VERSION &&
1049
+ session->ticket_max_early_data != 0;
991
1050
  }
992
1051
 
993
1052
  SSL_SESSION *SSL_magic_pending_session_ptr(void) {
@@ -1008,7 +1067,7 @@ SSL_SESSION *SSL_get_session(const SSL *ssl) {
1008
1067
  if (hs->new_session) {
1009
1068
  return hs->new_session.get();
1010
1069
  }
1011
- return ssl->session;
1070
+ return ssl->session.get();
1012
1071
  }
1013
1072
 
1014
1073
  SSL_SESSION *SSL_get1_session(SSL *ssl) {
@@ -1042,8 +1101,7 @@ void *SSL_SESSION_get_ex_data(const SSL_SESSION *session, int idx) {
1042
1101
  int SSL_CTX_add_session(SSL_CTX *ctx, SSL_SESSION *session) {
1043
1102
  // Although |session| is inserted into two structures (a doubly-linked list
1044
1103
  // and the hash table), |ctx| only takes one reference.
1045
- SSL_SESSION_up_ref(session);
1046
- UniquePtr<SSL_SESSION> owned_session(session);
1104
+ UniquePtr<SSL_SESSION> owned_session = UpRef(session);
1047
1105
 
1048
1106
  SSL_SESSION *old_session;
1049
1107
  MutexWriteLock lock(&ctx->lock);
@@ -1188,12 +1246,6 @@ void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
1188
1246
  ctx->get_session_cb = cb;
1189
1247
  }
1190
1248
 
1191
- void SSL_CTX_sess_set_get_cb(SSL_CTX *ctx,
1192
- SSL_SESSION *(*cb)(SSL *ssl, uint8_t *id,
1193
- int id_len, int *out_copy)) {
1194
- ctx->get_session_cb_legacy = cb;
1195
- }
1196
-
1197
1249
  SSL_SESSION *(*SSL_CTX_sess_get_get_cb(SSL_CTX *ctx))(SSL *ssl,
1198
1250
  const uint8_t *id,
1199
1251
  int id_len,