grpc 1.69.0 → 1.70.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (640) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +251 -249
  3. data/include/grpc/support/atm.h +0 -13
  4. data/src/core/call/request_buffer.cc +224 -0
  5. data/src/core/call/request_buffer.h +192 -0
  6. data/src/core/client_channel/client_channel.cc +2 -3
  7. data/src/core/client_channel/client_channel_args.h +21 -0
  8. data/src/core/client_channel/client_channel_filter.h +1 -3
  9. data/src/core/client_channel/retry_interceptor.cc +406 -0
  10. data/src/core/client_channel/retry_interceptor.h +157 -0
  11. data/src/core/client_channel/retry_service_config.h +13 -0
  12. data/src/core/client_channel/retry_throttle.cc +33 -18
  13. data/src/core/client_channel/retry_throttle.h +3 -3
  14. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +596 -94
  15. data/src/core/ext/transport/chttp2/server/chttp2_server.h +189 -13
  16. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +1 -0
  17. data/src/core/ext/transport/chttp2/transport/frame_security.cc +1 -3
  18. data/src/core/ext/transport/chttp2/transport/stream_lists.cc +40 -1
  19. data/src/core/ext/upb-gen/envoy/admin/v3/config_dump_shared.upb.h +3 -1
  20. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb.h +66 -36
  21. data/src/core/ext/upb-gen/envoy/config/cluster/v3/cluster.upb_minitable.c +19 -17
  22. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb.h +116 -0
  23. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.c +31 -5
  24. data/src/core/ext/upb-gen/envoy/config/core/v3/base.upb_minitable.h +2 -0
  25. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb.h +67 -6
  26. data/src/core/ext/upb-gen/envoy/config/core/v3/protocol.upb_minitable.c +12 -8
  27. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb.h +151 -0
  28. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.c +60 -0
  29. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_cmsg_headers.upb_minitable.h +32 -0
  30. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb.h +228 -21
  31. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.c +65 -17
  32. data/src/core/ext/upb-gen/envoy/config/core/v3/socket_option.upb_minitable.h +6 -0
  33. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb.h +7 -106
  34. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.c +7 -28
  35. data/src/core/ext/upb-gen/envoy/config/listener/v3/listener_components.upb_minitable.h +0 -2
  36. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb.h +85 -0
  37. data/src/core/ext/upb-gen/envoy/config/listener/v3/quic_config.upb_minitable.c +25 -3
  38. data/src/core/ext/upb-gen/envoy/config/overload/v3/overload.upb.h +2 -1
  39. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb.h +152 -0
  40. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.c +40 -10
  41. data/src/core/ext/upb-gen/envoy/config/rbac/v3/rbac.upb_minitable.h +2 -0
  42. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb.h +135 -4
  43. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.c +41 -9
  44. data/src/core/ext/upb-gen/envoy/config/route/v3/route_components.upb_minitable.h +2 -0
  45. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb.h +0 -2
  46. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.c +0 -1
  47. data/src/core/ext/upb-gen/envoy/config/trace/v3/trace.upb_minitable.h +0 -1
  48. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +16 -0
  49. data/src/core/ext/upb-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb_minitable.c +3 -2
  50. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb.h +60 -0
  51. data/src/core/ext/upb-gen/envoy/extensions/load_balancing_policies/client_side_weighted_round_robin/v3/client_side_weighted_round_robin.upb_minitable.c +13 -2
  52. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb.h +0 -1
  53. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upb_minitable.c +0 -1
  54. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +102 -24
  55. data/src/core/ext/upb-gen/envoy/extensions/transport_sockets/tls/v3/tls.upb_minitable.c +28 -19
  56. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb.h +251 -18
  57. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.c +41 -16
  58. data/src/core/ext/upb-gen/envoy/service/discovery/v3/discovery.upb_minitable.h +2 -0
  59. data/src/core/ext/upb-gen/envoy/service/status/v3/csds.upb.h +2 -1
  60. data/src/core/ext/upbdefs-gen/envoy/admin/v3/config_dump_shared.upbdefs.c +11 -10
  61. data/src/core/ext/upbdefs-gen/envoy/config/cluster/v3/cluster.upbdefs.c +418 -413
  62. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.c +161 -153
  63. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/base.upbdefs.h +5 -0
  64. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/protocol.upbdefs.c +267 -261
  65. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.c +46 -0
  66. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_cmsg_headers.upbdefs.h +33 -0
  67. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.c +29 -19
  68. data/src/core/ext/upbdefs-gen/envoy/config/core/v3/socket_option.upbdefs.h +15 -0
  69. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.c +58 -65
  70. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/listener_components.upbdefs.h +0 -5
  71. data/src/core/ext/upbdefs-gen/envoy/config/listener/v3/quic_config.upbdefs.c +73 -63
  72. data/src/core/ext/upbdefs-gen/envoy/config/overload/v3/overload.upbdefs.c +49 -48
  73. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.c +117 -100
  74. data/src/core/ext/upbdefs-gen/envoy/config/rbac/v3/rbac.upbdefs.h +5 -0
  75. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.c +905 -897
  76. data/src/core/ext/upbdefs-gen/envoy/config/route/v3/route_components.upbdefs.h +5 -0
  77. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/trace.upbdefs.c +15 -18
  78. data/src/core/ext/upbdefs-gen/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +460 -457
  79. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/http_11_proxy/v3/upstream_http_11_connect.upbdefs.c +16 -19
  80. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +95 -95
  81. data/src/core/ext/upbdefs-gen/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +202 -191
  82. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.c +148 -135
  83. data/src/core/ext/upbdefs-gen/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
  84. data/src/core/ext/upbdefs-gen/envoy/service/status/v3/csds.upbdefs.c +23 -22
  85. data/src/core/filter/filter_args.h +112 -0
  86. data/src/core/handshaker/http_connect/http_connect_handshaker.cc +1 -1
  87. data/src/core/lib/channel/promise_based_filter.h +5 -79
  88. data/src/core/lib/debug/trace_flags.cc +2 -0
  89. data/src/core/lib/debug/trace_flags.h +1 -0
  90. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +14 -0
  91. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +7 -2
  92. data/src/core/lib/event_engine/posix_engine/posix_engine.h +0 -2
  93. data/src/core/lib/event_engine/windows/windows_engine.cc +1 -0
  94. data/src/core/lib/experiments/experiments.cc +90 -39
  95. data/src/core/lib/experiments/experiments.h +43 -24
  96. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +1 -1
  97. data/src/core/lib/promise/activity.cc +2 -0
  98. data/src/core/lib/promise/activity.h +29 -8
  99. data/src/core/lib/promise/map.h +42 -0
  100. data/src/core/lib/promise/party.cc +36 -1
  101. data/src/core/lib/promise/party.h +13 -5
  102. data/src/core/lib/promise/sleep.h +1 -0
  103. data/src/core/lib/promise/status_flag.h +10 -0
  104. data/src/core/lib/resource_quota/arena.h +8 -0
  105. data/src/core/lib/resource_quota/connection_quota.h +4 -0
  106. data/src/core/lib/surface/call_utils.h +2 -0
  107. data/src/core/lib/surface/client_call.cc +43 -35
  108. data/src/core/lib/surface/client_call.h +5 -0
  109. data/src/core/lib/surface/event_string.cc +7 -1
  110. data/src/core/lib/surface/init_internally.h +13 -2
  111. data/src/core/lib/surface/server_call.cc +100 -85
  112. data/src/core/lib/surface/version.cc +2 -2
  113. data/src/core/lib/transport/call_filters.cc +10 -4
  114. data/src/core/lib/transport/call_filters.h +8 -0
  115. data/src/core/lib/transport/call_spine.cc +36 -71
  116. data/src/core/lib/transport/call_spine.h +131 -7
  117. data/src/core/lib/transport/call_state.h +132 -39
  118. data/src/core/lib/transport/interception_chain.cc +8 -0
  119. data/src/core/lib/transport/interception_chain.h +9 -0
  120. data/src/core/load_balancing/endpoint_list.cc +10 -0
  121. data/src/core/load_balancing/endpoint_list.h +13 -6
  122. data/src/core/load_balancing/lb_policy.h +0 -8
  123. data/src/core/load_balancing/pick_first/pick_first.cc +89 -56
  124. data/src/core/load_balancing/ring_hash/ring_hash.cc +158 -70
  125. data/src/core/load_balancing/ring_hash/ring_hash.h +4 -11
  126. data/src/core/load_balancing/round_robin/round_robin.cc +9 -14
  127. data/src/core/load_balancing/weighted_round_robin/weighted_round_robin.cc +12 -15
  128. data/src/core/resolver/dns/c_ares/dns_resolver_ares.cc +4 -4
  129. data/src/core/resolver/xds/xds_dependency_manager.cc +139 -135
  130. data/src/core/resolver/xds/xds_dependency_manager.h +24 -18
  131. data/src/core/resolver/xds/xds_resolver.cc +28 -47
  132. data/src/core/server/server.cc +290 -24
  133. data/src/core/server/server.h +199 -61
  134. data/src/core/server/xds_server_config_fetcher.cc +78 -142
  135. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  136. data/src/core/util/backoff.cc +15 -4
  137. data/src/core/util/http_client/httpcli.cc +66 -18
  138. data/src/core/util/http_client/httpcli.h +14 -4
  139. data/src/core/util/matchers.h +5 -10
  140. data/src/core/util/ref_counted.h +1 -0
  141. data/src/core/util/ref_counted_ptr.h +1 -1
  142. data/src/core/util/useful.h +9 -11
  143. data/src/core/xds/grpc/xds_endpoint_parser.cc +54 -23
  144. data/src/core/xds/grpc/xds_metadata.h +8 -0
  145. data/src/core/xds/xds_client/xds_api.cc +0 -223
  146. data/src/core/xds/xds_client/xds_api.h +1 -133
  147. data/src/core/xds/xds_client/xds_client.cc +599 -466
  148. data/src/core/xds/xds_client/xds_client.h +107 -26
  149. data/src/core/xds/xds_client/xds_resource_type_impl.h +10 -5
  150. data/src/ruby/ext/grpc/extconf.rb +1 -0
  151. data/src/ruby/lib/grpc/version.rb +1 -1
  152. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_bitstr.c → a_bitstr.cc} +3 -2
  153. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_d2i_fp.c → a_d2i_fp.cc} +1 -1
  154. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_dup.c → a_dup.cc} +1 -1
  155. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_i2d_fp.c → a_i2d_fp.cc} +1 -1
  156. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_int.c → a_int.cc} +2 -1
  157. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_mbstr.c → a_mbstr.cc} +9 -7
  158. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_object.c → a_object.cc} +1 -1
  159. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_strnid.c → a_strnid.cc} +7 -4
  160. data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_type.c → a_type.cc} +4 -4
  161. data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn1_lib.c → asn1_lib.cc} +4 -4
  162. data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn_pack.c → asn_pack.cc} +2 -2
  163. data/third_party/boringssl-with-bazel/src/crypto/asn1/{posix_time.c → posix_time.cc} +2 -2
  164. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_dec.c → tasn_dec.cc} +4 -3
  165. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_enc.c → tasn_enc.cc} +9 -6
  166. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_fre.c → tasn_fre.cc} +14 -20
  167. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_new.c → tasn_new.cc} +7 -6
  168. data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_utl.c → tasn_utl.cc} +13 -10
  169. data/third_party/boringssl-with-bazel/src/crypto/base64/{base64.c → base64.cc} +9 -12
  170. data/third_party/boringssl-with-bazel/src/crypto/bcm_support.h +7 -1
  171. data/third_party/boringssl-with-bazel/src/crypto/bio/{bio.c → bio.cc} +32 -58
  172. data/third_party/boringssl-with-bazel/src/crypto/bio/{bio_mem.c → bio_mem.cc} +8 -7
  173. data/third_party/boringssl-with-bazel/src/crypto/bio/{connect.c → connect.cc} +24 -16
  174. data/third_party/boringssl-with-bazel/src/crypto/bio/{file.c → file.cc} +3 -3
  175. data/third_party/boringssl-with-bazel/src/crypto/bio/{pair.c → pair.cc} +22 -20
  176. data/third_party/boringssl-with-bazel/src/crypto/bio/{printf.c → printf.cc} +2 -2
  177. data/third_party/boringssl-with-bazel/src/crypto/bio/{socket_helper.c → socket_helper.cc} +1 -1
  178. data/third_party/boringssl-with-bazel/src/crypto/blake2/{blake2.c → blake2.cc} +2 -2
  179. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/{bn_asn1.c → bn_asn1.cc} +1 -1
  180. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/{convert.c → convert.cc} +21 -21
  181. data/third_party/boringssl-with-bazel/src/crypto/buf/{buf.c → buf.cc} +6 -3
  182. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{asn1_compat.c → asn1_compat.cc} +1 -1
  183. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{ber.c → ber.cc} +1 -1
  184. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{cbb.c → cbb.cc} +33 -49
  185. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{cbs.c → cbs.cc} +20 -27
  186. data/third_party/boringssl-with-bazel/src/crypto/bytestring/internal.h +1 -1
  187. data/third_party/boringssl-with-bazel/src/crypto/bytestring/{unicode.c → unicode.cc} +1 -1
  188. data/third_party/boringssl-with-bazel/src/crypto/chacha/{chacha.c → chacha.cc} +1 -1
  189. data/third_party/boringssl-with-bazel/src/crypto/chacha/internal.h +1 -1
  190. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_aesctrhmac.c → e_aesctrhmac.cc} +1 -1
  191. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_aesgcmsiv.c → e_aesgcmsiv.cc} +23 -26
  192. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_chacha20poly1305.c → e_chacha20poly1305.cc} +1 -8
  193. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_des.c → e_des.cc} +61 -49
  194. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_null.c → e_null.cc} +12 -9
  195. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_rc2.c → e_rc2.cc} +23 -19
  196. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_rc4.c → e_rc4.cc} +10 -8
  197. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{e_tls.c → e_tls.cc} +2 -1
  198. data/third_party/boringssl-with-bazel/src/crypto/conf/{conf.c → conf.cc} +17 -14
  199. data/third_party/boringssl-with-bazel/src/crypto/conf/internal.h +1 -1
  200. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_apple.c → cpu_aarch64_apple.cc} +2 -2
  201. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_fuchsia.c → cpu_aarch64_fuchsia.cc} +2 -2
  202. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_linux.c → cpu_aarch64_linux.cc} +2 -2
  203. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_openbsd.c → cpu_aarch64_openbsd.cc} +4 -4
  204. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_sysreg.c → cpu_aarch64_sysreg.cc} +3 -2
  205. data/third_party/boringssl-with-bazel/src/crypto/{cpu_aarch64_win.c → cpu_aarch64_win.cc} +2 -2
  206. data/third_party/boringssl-with-bazel/src/crypto/{cpu_arm_freebsd.c → cpu_arm_freebsd.cc} +3 -3
  207. data/third_party/boringssl-with-bazel/src/crypto/{cpu_arm_linux.c → cpu_arm_linux.cc} +5 -5
  208. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_linux.h +1 -1
  209. data/third_party/boringssl-with-bazel/src/crypto/{cpu_intel.c → cpu_intel.cc} +47 -32
  210. data/third_party/boringssl-with-bazel/src/crypto/{crypto.c → crypto.cc} +6 -11
  211. data/third_party/boringssl-with-bazel/src/crypto/curve25519/{curve25519.c → curve25519.cc} +28 -31
  212. data/third_party/boringssl-with-bazel/src/crypto/curve25519/{curve25519_64_adx.c → curve25519_64_adx.cc} +1 -1
  213. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +1 -1
  214. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -1
  215. data/third_party/boringssl-with-bazel/src/crypto/curve25519/{spake25519.c → spake25519.cc} +20 -16
  216. data/third_party/boringssl-with-bazel/src/crypto/dh_extra/{dh_asn1.c → dh_asn1.cc} +2 -2
  217. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/{digest_extra.c → digest_extra.cc} +113 -31
  218. data/third_party/boringssl-with-bazel/src/crypto/dsa/{dsa.c → dsa.cc} +153 -154
  219. data/third_party/boringssl-with-bazel/src/crypto/dsa/{dsa_asn1.c → dsa_asn1.cc} +2 -2
  220. data/third_party/boringssl-with-bazel/src/crypto/dsa/internal.h +1 -3
  221. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/{ec_asn1.c → ec_asn1.cc} +35 -0
  222. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/{ec_derive.c → ec_derive.cc} +1 -1
  223. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/{hash_to_curve.c → hash_to_curve.cc} +66 -64
  224. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +1 -1
  225. data/third_party/boringssl-with-bazel/src/crypto/ecdsa_extra/{ecdsa_asn1.c → ecdsa_asn1.cc} +15 -25
  226. data/third_party/boringssl-with-bazel/src/crypto/engine/{engine.c → engine.cc} +12 -8
  227. data/third_party/boringssl-with-bazel/src/crypto/err/{err.c → err.cc} +24 -27
  228. data/third_party/boringssl-with-bazel/src/crypto/err/internal.h +1 -1
  229. data/third_party/boringssl-with-bazel/src/crypto/evp/{evp.c → evp.cc} +8 -9
  230. data/third_party/boringssl-with-bazel/src/crypto/evp/{evp_ctx.c → evp_ctx.cc} +7 -8
  231. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_dh.c → p_dh.cc} +23 -14
  232. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_dh_asn1.c → p_dh_asn1.cc} +38 -21
  233. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_dsa_asn1.c → p_dsa_asn1.cc} +19 -24
  234. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_ec.c → p_ec.cc} +20 -23
  235. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_ec_asn1.c → p_ec_asn1.cc} +20 -20
  236. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_ed25519.c → p_ed25519.cc} +22 -19
  237. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_ed25519_asn1.c → p_ed25519_asn1.cc} +14 -13
  238. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_hkdf.c → p_hkdf.cc} +18 -14
  239. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_rsa.c → p_rsa.cc} +38 -37
  240. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_rsa_asn1.c → p_rsa_asn1.cc} +16 -18
  241. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_x25519.c → p_x25519.cc} +22 -19
  242. data/third_party/boringssl-with-bazel/src/crypto/evp/{p_x25519_asn1.c → p_x25519_asn1.cc} +18 -17
  243. data/third_party/boringssl-with-bazel/src/crypto/evp/{pbkdf.c → pbkdf.cc} +2 -2
  244. data/third_party/boringssl-with-bazel/src/crypto/evp/{print.c → print.cc} +4 -5
  245. data/third_party/boringssl-with-bazel/src/crypto/evp/{scrypt.c → scrypt.cc} +7 -5
  246. data/third_party/boringssl-with-bazel/src/crypto/{ex_data.c → ex_data.cc} +3 -4
  247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{aes_nohw.c.inc → aes_nohw.cc.inc} +1 -1
  248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/internal.h +1 -5
  249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{key_wrap.c.inc → key_wrap.cc.inc} +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{bcm.c → bcm.cc} +96 -101
  251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm_interface.h +165 -12
  252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{add.c.inc → add.cc.inc} +1 -0
  253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/asm/{x86_64-gcc.c.inc → x86_64-gcc.cc.inc} +4 -4
  254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{bn.c.inc → bn.cc.inc} +12 -24
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{ctx.c.inc → ctx.cc.inc} +5 -7
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{div.c.inc → div.cc.inc} +29 -38
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{div_extra.c.inc → div_extra.cc.inc} +1 -1
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{exponentiation.c.inc → exponentiation.cc.inc} +22 -22
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{gcd.c.inc → gcd.cc.inc} +3 -6
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{gcd_extra.c.inc → gcd_extra.cc.inc} +33 -25
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{montgomery.c.inc → montgomery.cc.inc} +10 -17
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{mul.c.inc → mul.cc.inc} +11 -15
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{prime.c.inc → prime.cc.inc} +31 -34
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{shift.c.inc → shift.cc.inc} +3 -4
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{aead.c.inc → aead.cc.inc} +18 -10
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{cipher.c.inc → cipher.cc.inc} +6 -9
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{e_aes.c.inc → e_aes.cc.inc} +46 -54
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cmac/{cmac.c.inc → cmac.cc.inc} +6 -6
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/delocate.h +14 -10
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/{dh.c.inc → dh.cc.inc} +15 -19
  271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/internal.h +1 -3
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/{digest.c.inc → digest.cc.inc} +17 -13
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digest/{digests.c.inc → digests.cc.inc} +29 -113
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/digestsign/{digestsign.c.inc → digestsign.cc.inc} +3 -3
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/builtin_curves.h +1 -1
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{ec.c.inc → ec.cc.inc} +10 -15
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{ec_key.c.inc → ec_key.cc.inc} +12 -14
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{felem.c.inc → felem.cc.inc} +1 -1
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{oct.c.inc → oct.cc.inc} +5 -6
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p224-64.c.inc → p224-64.cc.inc} +1 -1
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz-table.h +1 -1
  282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256-nistz.c.inc → p256-nistz.cc.inc} +15 -13
  283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{p256.c.inc → p256.cc.inc} +1 -1
  284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{scalar.c.inc → scalar.cc.inc} +1 -1
  286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{simple_mul.c.inc → simple_mul.cc.inc} +1 -1
  287. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{util.c.inc → util.cc.inc} +1 -1
  288. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{wnaf.c.inc → wnaf.cc.inc} +24 -15
  289. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/{ecdh.c.inc → ecdh.cc.inc} +14 -5
  290. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/{ecdsa.c.inc → ecdsa.cc.inc} +6 -7
  291. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/internal.h +1 -1
  292. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/{fips_shared_support.c → fips_shared_support.cc} +2 -3
  293. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hkdf/{hkdf.c.inc → hkdf.cc.inc} +1 -1
  294. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/hmac/{hmac.c.inc → hmac.cc.inc} +3 -2
  295. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{gcm.c.inc → gcm.cc.inc} +69 -21
  296. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{gcm_nohw.c.inc → gcm_nohw.cc.inc} +1 -1
  297. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +53 -33
  298. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{polyval.c.inc → polyval.cc.inc} +2 -3
  299. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/{ctrdrbg.c.inc → ctrdrbg.cc.inc} +5 -4
  300. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +1 -1
  301. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/{rand.c.inc → rand.cc.inc} +20 -18
  302. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{blinding.c.inc → blinding.cc.inc} +5 -4
  303. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{padding.c.inc → padding.cc.inc} +21 -21
  304. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{rsa.c.inc → rsa.cc.inc} +77 -73
  305. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/{rsa_impl.c.inc → rsa_impl.cc.inc} +50 -53
  306. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/{fips.c.inc → fips.cc.inc} +14 -6
  307. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/{self_check.c.inc → self_check.cc.inc} +56 -52
  308. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/service_indicator/{service_indicator.c.inc → service_indicator.cc.inc} +10 -11
  309. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/internal.h +2 -4
  310. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/{sha1.c.inc → sha1.cc.inc} +26 -33
  311. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/{sha256.c.inc → sha256.cc.inc} +37 -55
  312. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/sha/{sha512.c.inc → sha512.cc.inc} +48 -76
  313. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +1 -1
  314. data/third_party/boringssl-with-bazel/src/crypto/hpke/{hpke.c → hpke.cc} +7 -4
  315. data/third_party/boringssl-with-bazel/src/crypto/hrss/{hrss.c → hrss.cc} +53 -110
  316. data/third_party/boringssl-with-bazel/src/crypto/hrss/internal.h +1 -1
  317. data/third_party/boringssl-with-bazel/src/crypto/internal.h +191 -248
  318. data/third_party/boringssl-with-bazel/src/crypto/keccak/internal.h +1 -1
  319. data/third_party/boringssl-with-bazel/src/crypto/keccak/{keccak.c → keccak.cc} +1 -1
  320. data/third_party/boringssl-with-bazel/src/crypto/kyber/internal.h +1 -1
  321. data/third_party/boringssl-with-bazel/src/crypto/kyber/{kyber.c → kyber.cc} +1 -1
  322. data/third_party/boringssl-with-bazel/src/crypto/lhash/{lhash.c → lhash.cc} +8 -7
  323. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/md4/md4.c.inc → md4/md4.cc} +8 -12
  324. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/md5 → md5}/internal.h +1 -1
  325. data/third_party/boringssl-with-bazel/src/crypto/{fipsmodule/md5/md5.c.inc → md5/md5.cc} +4 -3
  326. data/third_party/boringssl-with-bazel/src/crypto/{mem.c → mem.cc} +34 -22
  327. data/third_party/boringssl-with-bazel/src/crypto/mldsa/internal.h +4 -1
  328. data/third_party/boringssl-with-bazel/src/crypto/mldsa/{mldsa.c → mldsa.cc} +646 -543
  329. data/third_party/boringssl-with-bazel/src/crypto/mlkem/internal.h +1 -1
  330. data/third_party/boringssl-with-bazel/src/crypto/mlkem/mlkem.cc +8 -8
  331. data/third_party/boringssl-with-bazel/src/crypto/obj/{obj.c → obj.cc} +27 -30
  332. data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_info.c → pem_info.cc} +2 -2
  333. data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_lib.c → pem_lib.cc} +3 -4
  334. data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_oth.c → pem_oth.cc} +1 -1
  335. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/internal.h +1 -1
  336. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/{pkcs7.c → pkcs7.cc} +5 -5
  337. data/third_party/boringssl-with-bazel/src/crypto/pkcs7/{pkcs7_x509.c → pkcs7_x509.cc} +26 -25
  338. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +2 -2
  339. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/{p5_pbev2.c → p5_pbev2.cc} +2 -2
  340. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/{pkcs8.c → pkcs8.cc} +159 -158
  341. data/third_party/boringssl-with-bazel/src/crypto/pkcs8/{pkcs8_x509.c → pkcs8_x509.cc} +90 -97
  342. data/third_party/boringssl-with-bazel/src/crypto/poly1305/internal.h +1 -1
  343. data/third_party/boringssl-with-bazel/src/crypto/poly1305/{poly1305.c → poly1305.cc} +3 -3
  344. data/third_party/boringssl-with-bazel/src/crypto/poly1305/{poly1305_arm.c → poly1305_arm.cc} +4 -2
  345. data/third_party/boringssl-with-bazel/src/crypto/poly1305/{poly1305_vec.c → poly1305_vec.cc} +14 -11
  346. data/third_party/boringssl-with-bazel/src/crypto/pool/internal.h +1 -1
  347. data/third_party/boringssl-with-bazel/src/crypto/pool/{pool.c → pool.cc} +12 -11
  348. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{deterministic.c → deterministic.cc} +2 -2
  349. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{fork_detect.c → fork_detect.cc} +11 -12
  350. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{forkunsafe.c → forkunsafe.cc} +2 -2
  351. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{getentropy.c → getentropy.cc} +1 -1
  352. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/getrandom_fillin.h +1 -1
  353. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{ios.c → ios.cc} +1 -1
  354. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{passive.c → passive.cc} +22 -18
  355. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{rand_extra.c → rand_extra.cc} +1 -1
  356. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/sysrand_internal.h +1 -1
  357. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{trusty.c → trusty.cc} +1 -1
  358. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{urandom.c → urandom.cc} +7 -7
  359. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/{windows.c → windows.cc} +1 -1
  360. data/third_party/boringssl-with-bazel/src/crypto/{refcount.c → refcount.cc} +1 -1
  361. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/{rsa_asn1.c → rsa_asn1.cc} +2 -2
  362. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/{rsa_crypt.c → rsa_crypt.cc} +81 -78
  363. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_extra.cc +17 -0
  364. data/third_party/boringssl-with-bazel/src/crypto/sha/sha1.cc +52 -0
  365. data/third_party/boringssl-with-bazel/src/crypto/sha/sha256.cc +87 -0
  366. data/third_party/boringssl-with-bazel/src/crypto/sha/sha512.cc +104 -0
  367. data/third_party/boringssl-with-bazel/src/crypto/siphash/{siphash.c → siphash.cc} +1 -1
  368. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/address.h +123 -0
  369. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/fors.cc +169 -0
  370. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/fors.h +58 -0
  371. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/internal.h +63 -0
  372. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/merkle.cc +161 -0
  373. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/merkle.h +70 -0
  374. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/params.h +83 -0
  375. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/slhdsa.cc +307 -0
  376. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/thash.cc +173 -0
  377. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/thash.h +85 -0
  378. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/wots.cc +171 -0
  379. data/third_party/boringssl-with-bazel/src/crypto/slhdsa/wots.h +50 -0
  380. data/third_party/boringssl-with-bazel/src/crypto/stack/{stack.c → stack.cc} +10 -6
  381. data/third_party/boringssl-with-bazel/src/crypto/{thread_none.c → thread_none.cc} +1 -1
  382. data/third_party/boringssl-with-bazel/src/crypto/{thread_pthread.c → thread_pthread.cc} +9 -8
  383. data/third_party/boringssl-with-bazel/src/crypto/{thread_win.c → thread_win.cc} +21 -17
  384. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +1 -1
  385. data/third_party/boringssl-with-bazel/src/crypto/trust_token/{pmbtoken.c → pmbtoken.cc} +146 -158
  386. data/third_party/boringssl-with-bazel/src/crypto/trust_token/{trust_token.c → trust_token.cc} +19 -21
  387. data/third_party/boringssl-with-bazel/src/crypto/trust_token/{voprf.c → voprf.cc} +165 -169
  388. data/third_party/boringssl-with-bazel/src/crypto/x509/{a_digest.c → a_digest.cc} +1 -1
  389. data/third_party/boringssl-with-bazel/src/crypto/x509/{a_sign.c → a_sign.cc} +37 -34
  390. data/third_party/boringssl-with-bazel/src/crypto/x509/{a_verify.c → a_verify.cc} +1 -1
  391. data/third_party/boringssl-with-bazel/src/crypto/x509/{algorithm.c → algorithm.cc} +1 -1
  392. data/third_party/boringssl-with-bazel/src/crypto/x509/{asn1_gen.c → asn1_gen.cc} +5 -6
  393. data/third_party/boringssl-with-bazel/src/crypto/x509/{by_dir.c → by_dir.cc} +7 -6
  394. data/third_party/boringssl-with-bazel/src/crypto/x509/{policy.c → policy.cc} +188 -178
  395. data/third_party/boringssl-with-bazel/src/crypto/x509/{rsa_pss.c → rsa_pss.cc} +48 -44
  396. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_akey.c → v3_akey.cc} +4 -2
  397. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_alt.c → v3_alt.cc} +5 -5
  398. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_bcons.c → v3_bcons.cc} +3 -1
  399. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_bitst.c → v3_bitst.cc} +6 -3
  400. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_conf.c → v3_conf.cc} +5 -5
  401. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_cpols.c → v3_cpols.cc} +47 -41
  402. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_crld.c → v3_crld.cc} +3 -2
  403. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_enum.c → v3_enum.cc} +5 -2
  404. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_extku.c → v3_extku.cc} +3 -1
  405. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_genn.c → v3_genn.cc} +7 -7
  406. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_ia5.c → v3_ia5.cc} +3 -2
  407. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_info.c → v3_info.cc} +4 -2
  408. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_int.c → v3_int.cc} +3 -1
  409. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_lib.c → v3_lib.cc} +9 -6
  410. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_ncons.c → v3_ncons.cc} +3 -3
  411. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_ocsp.c → v3_ocsp.cc} +4 -1
  412. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_pcons.c → v3_pcons.cc} +3 -3
  413. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_pmaps.c → v3_pmaps.cc} +3 -3
  414. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_prn.c → v3_prn.cc} +2 -1
  415. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_purp.c → v3_purp.cc} +16 -8
  416. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_skey.c → v3_skey.cc} +6 -3
  417. data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_utl.c → v3_utl.cc} +15 -10
  418. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_att.c → x509_att.cc} +3 -2
  419. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_lu.c → x509_lu.cc} +6 -5
  420. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_v3.c → x509_v3.cc} +2 -2
  421. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_vfy.c → x509_vfy.cc} +216 -212
  422. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_vpm.c → x509_vpm.cc} +55 -13
  423. data/third_party/boringssl-with-bazel/src/crypto/x509/{x509spki.c → x509spki.cc} +3 -3
  424. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_all.c → x_all.cc} +10 -6
  425. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_crl.c → x_crl.cc} +6 -6
  426. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_name.c → x_name.cc} +39 -32
  427. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_pubkey.c → x_pubkey.cc} +4 -2
  428. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_x509.c → x_x509.cc} +48 -44
  429. data/third_party/boringssl-with-bazel/src/crypto/x509/{x_x509a.c → x_x509a.cc} +4 -2
  430. data/third_party/boringssl-with-bazel/src/gen/crypto/{err_data.c → err_data.cc} +359 -358
  431. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +1 -1
  432. data/third_party/boringssl-with-bazel/src/include/openssl/asm_base.h +1 -1
  433. data/third_party/boringssl-with-bazel/src/include/openssl/asn1_mac.h +1 -1
  434. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +237 -275
  435. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +12 -5
  436. data/third_party/boringssl-with-bazel/src/include/openssl/bcm_public.h +82 -0
  437. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -1
  438. data/third_party/boringssl-with-bazel/src/include/openssl/buffer.h +1 -1
  439. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +1 -1
  440. data/third_party/boringssl-with-bazel/src/include/openssl/chacha.h +1 -1
  441. data/third_party/boringssl-with-bazel/src/include/openssl/cmac.h +1 -1
  442. data/third_party/boringssl-with-bazel/src/include/openssl/cpu.h +1 -1
  443. data/third_party/boringssl-with-bazel/src/include/openssl/crypto.h +13 -2
  444. data/third_party/boringssl-with-bazel/src/include/openssl/ctrdrbg.h +1 -1
  445. data/third_party/boringssl-with-bazel/src/include/openssl/curve25519.h +1 -1
  446. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +4 -0
  447. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +6 -1
  448. data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +4 -0
  449. data/third_party/boringssl-with-bazel/src/include/openssl/dtls1.h +1 -1
  450. data/third_party/boringssl-with-bazel/src/include/openssl/e_os2.h +1 -1
  451. data/third_party/boringssl-with-bazel/src/include/openssl/ec_key.h +17 -1
  452. data/third_party/boringssl-with-bazel/src/include/openssl/engine.h +1 -1
  453. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +1 -1
  454. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/kyber.h +1 -1
  455. data/third_party/boringssl-with-bazel/src/include/openssl/hkdf.h +1 -1
  456. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
  457. data/third_party/boringssl-with-bazel/src/include/openssl/hrss.h +1 -1
  458. data/third_party/boringssl-with-bazel/src/include/openssl/is_boringssl.h +1 -1
  459. data/third_party/boringssl-with-bazel/src/include/openssl/kdf.h +1 -1
  460. data/third_party/boringssl-with-bazel/src/include/openssl/mldsa.h +8 -8
  461. data/third_party/boringssl-with-bazel/src/include/openssl/mlkem.h +1 -1
  462. data/third_party/boringssl-with-bazel/src/include/openssl/obj_mac.h +1 -1
  463. data/third_party/boringssl-with-bazel/src/include/openssl/objects.h +1 -1
  464. data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +1 -1
  465. data/third_party/boringssl-with-bazel/src/include/openssl/opensslv.h +1 -1
  466. data/third_party/boringssl-with-bazel/src/include/openssl/ossl_typ.h +1 -1
  467. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs12.h +1 -1
  468. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +1 -1
  469. data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +2 -2
  470. data/third_party/boringssl-with-bazel/src/include/openssl/poly1305.h +1 -1
  471. data/third_party/boringssl-with-bazel/src/include/openssl/pool.h +1 -1
  472. data/third_party/boringssl-with-bazel/src/include/openssl/posix_time.h +1 -1
  473. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +1 -1
  474. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +10 -5
  475. data/third_party/boringssl-with-bazel/src/include/openssl/safestack.h +1 -1
  476. data/third_party/boringssl-with-bazel/src/include/openssl/sha.h +2 -40
  477. data/third_party/boringssl-with-bazel/src/include/openssl/siphash.h +1 -1
  478. data/third_party/boringssl-with-bazel/src/include/openssl/slhdsa.h +133 -0
  479. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +6 -1
  480. data/third_party/boringssl-with-bazel/src/include/openssl/srtp.h +1 -1
  481. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +160 -116
  482. data/third_party/boringssl-with-bazel/src/include/openssl/ssl3.h +1 -0
  483. data/third_party/boringssl-with-bazel/src/include/openssl/target.h +1 -1
  484. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +2 -2
  485. data/third_party/boringssl-with-bazel/src/include/openssl/time.h +1 -1
  486. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +1 -1
  487. data/third_party/boringssl-with-bazel/src/include/openssl/x509_vfy.h +1 -1
  488. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +1 -1
  489. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3_errors.h +2 -2
  490. data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +2 -6
  491. data/third_party/boringssl-with-bazel/src/ssl/d1_both.cc +667 -322
  492. data/third_party/boringssl-with-bazel/src/ssl/d1_lib.cc +116 -119
  493. data/third_party/boringssl-with-bazel/src/ssl/d1_pkt.cc +163 -21
  494. data/third_party/boringssl-with-bazel/src/ssl/d1_srtp.cc +4 -12
  495. data/third_party/boringssl-with-bazel/src/ssl/dtls_method.cc +94 -49
  496. data/third_party/boringssl-with-bazel/src/ssl/dtls_record.cc +296 -198
  497. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +23 -14
  498. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +363 -343
  499. data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +48 -58
  500. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +44 -36
  501. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +145 -159
  502. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +65 -58
  503. data/third_party/boringssl-with-bazel/src/ssl/internal.h +910 -356
  504. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +29 -41
  505. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +13 -11
  506. data/third_party/boringssl-with-bazel/src/ssl/s3_pkt.cc +2 -2
  507. data/third_party/boringssl-with-bazel/src/ssl/ssl_aead_ctx.cc +90 -183
  508. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +38 -64
  509. data/third_party/boringssl-with-bazel/src/ssl/ssl_buffer.cc +1 -1
  510. data/third_party/boringssl-with-bazel/src/ssl/ssl_cert.cc +103 -44
  511. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +210 -220
  512. data/third_party/boringssl-with-bazel/src/ssl/ssl_credential.cc +70 -12
  513. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +20 -17
  514. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +146 -169
  515. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +15 -16
  516. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +79 -95
  517. data/third_party/boringssl-with-bazel/src/ssl/ssl_stat.cc +3 -9
  518. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +91 -16
  519. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +30 -16
  520. data/third_party/boringssl-with-bazel/src/ssl/ssl_x509.cc +51 -56
  521. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +22 -25
  522. data/third_party/boringssl-with-bazel/src/ssl/tls13_both.cc +43 -27
  523. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +63 -59
  524. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +204 -121
  525. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +86 -59
  526. data/third_party/boringssl-with-bazel/src/ssl/tls_method.cc +51 -62
  527. data/third_party/boringssl-with-bazel/src/ssl/tls_record.cc +37 -25
  528. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_32.h +6 -0
  529. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64.h +6 -0
  530. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_adx.h +4 -1
  531. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_32.h +1 -1
  532. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64.h +3 -0
  533. metadata +339 -339
  534. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb.h +0 -426
  535. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb_minitable.c +0 -87
  536. data/src/core/ext/upb-gen/envoy/config/trace/v3/opencensus.upb_minitable.h +0 -32
  537. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb.h +0 -408
  538. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb_minitable.c +0 -124
  539. data/src/core/ext/upb-gen/opencensus/proto/trace/v1/trace_config.upb_minitable.h +0 -38
  540. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opencensus.upbdefs.c +0 -108
  541. data/src/core/ext/upbdefs-gen/envoy/config/trace/v3/opencensus.upbdefs.h +0 -33
  542. data/src/core/ext/upbdefs-gen/opencensus/proto/trace/v1/trace_config.upbdefs.c +0 -67
  543. data/src/core/ext/upbdefs-gen/opencensus/proto/trace/v1/trace_config.upbdefs.h +0 -48
  544. data/src/core/util/atm.cc +0 -34
  545. data/third_party/boringssl-with-bazel/src/crypto/dilithium/dilithium.c +0 -1539
  546. data/third_party/boringssl-with-bazel/src/crypto/dilithium/internal.h +0 -58
  547. data/third_party/boringssl-with-bazel/src/crypto/spx/address.c +0 -101
  548. data/third_party/boringssl-with-bazel/src/crypto/spx/address.h +0 -50
  549. data/third_party/boringssl-with-bazel/src/crypto/spx/fors.c +0 -133
  550. data/third_party/boringssl-with-bazel/src/crypto/spx/fors.h +0 -54
  551. data/third_party/boringssl-with-bazel/src/crypto/spx/merkle.c +0 -150
  552. data/third_party/boringssl-with-bazel/src/crypto/spx/merkle.h +0 -61
  553. data/third_party/boringssl-with-bazel/src/crypto/spx/params.h +0 -71
  554. data/third_party/boringssl-with-bazel/src/crypto/spx/spx.c +0 -140
  555. data/third_party/boringssl-with-bazel/src/crypto/spx/spx_util.c +0 -53
  556. data/third_party/boringssl-with-bazel/src/crypto/spx/spx_util.h +0 -44
  557. data/third_party/boringssl-with-bazel/src/crypto/spx/thash.c +0 -136
  558. data/third_party/boringssl-with-bazel/src/crypto/spx/thash.h +0 -70
  559. data/third_party/boringssl-with-bazel/src/crypto/spx/wots.c +0 -135
  560. data/third_party/boringssl-with-bazel/src/crypto/spx/wots.h +0 -45
  561. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/dilithium.h +0 -129
  562. data/third_party/boringssl-with-bazel/src/include/openssl/experimental/spx.h +0 -90
  563. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_bool.c → a_bool.cc} +0 -0
  564. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_gentm.c → a_gentm.cc} +0 -0
  565. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_octet.c → a_octet.cc} +0 -0
  566. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_strex.c → a_strex.cc} +0 -0
  567. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_time.c → a_time.cc} +0 -0
  568. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{a_utctm.c → a_utctm.cc} +0 -0
  569. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{asn1_par.c → asn1_par.cc} +0 -0
  570. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{f_int.c → f_int.cc} +0 -0
  571. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{f_string.c → f_string.cc} +0 -0
  572. /data/third_party/boringssl-with-bazel/src/crypto/asn1/{tasn_typ.c → tasn_typ.cc} +0 -0
  573. /data/third_party/boringssl-with-bazel/src/crypto/bio/{errno.c → errno.cc} +0 -0
  574. /data/third_party/boringssl-with-bazel/src/crypto/bio/{fd.c → fd.cc} +0 -0
  575. /data/third_party/boringssl-with-bazel/src/crypto/bio/{hexdump.c → hexdump.cc} +0 -0
  576. /data/third_party/boringssl-with-bazel/src/crypto/bio/{socket.c → socket.cc} +0 -0
  577. /data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{cipher_extra.c → cipher_extra.cc} +0 -0
  578. /data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{derive_key.c → derive_key.cc} +0 -0
  579. /data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/{tls_cbc.c → tls_cbc.cc} +0 -0
  580. /data/third_party/boringssl-with-bazel/src/crypto/des/{des.c → des.cc} +0 -0
  581. /data/third_party/boringssl-with-bazel/src/crypto/dh_extra/{params.c → params.cc} +0 -0
  582. /data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/{ecdh_extra.c → ecdh_extra.cc} +0 -0
  583. /data/third_party/boringssl-with-bazel/src/crypto/evp/{evp_asn1.c → evp_asn1.cc} +0 -0
  584. /data/third_party/boringssl-with-bazel/src/crypto/evp/{sign.c → sign.cc} +0 -0
  585. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{aes.c.inc → aes.cc.inc} +0 -0
  586. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/aes/{mode_wrappers.c.inc → mode_wrappers.cc.inc} +0 -0
  587. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{bytes.c.inc → bytes.cc.inc} +0 -0
  588. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{cmp.c.inc → cmp.cc.inc} +0 -0
  589. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{generic.c.inc → generic.cc.inc} +0 -0
  590. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{jacobi.c.inc → jacobi.cc.inc} +0 -0
  591. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{montgomery_inv.c.inc → montgomery_inv.cc.inc} +0 -0
  592. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{random.c.inc → random.cc.inc} +0 -0
  593. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{rsaz_exp.c.inc → rsaz_exp.cc.inc} +0 -0
  594. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/{sqrt.c.inc → sqrt.cc.inc} +0 -0
  595. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/{e_aesccm.c.inc → e_aesccm.cc.inc} +0 -0
  596. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/{check.c.inc → check.cc.inc} +0 -0
  597. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{ec_montgomery.c.inc → ec_montgomery.cc.inc} +0 -0
  598. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/{simple.c.inc → simple.cc.inc} +0 -0
  599. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{cbc.c.inc → cbc.cc.inc} +0 -0
  600. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{cfb.c.inc → cfb.cc.inc} +0 -0
  601. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{ctr.c.inc → ctr.cc.inc} +0 -0
  602. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/{ofb.c.inc → ofb.cc.inc} +0 -0
  603. /data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/{kdf.c.inc → kdf.cc.inc} +0 -0
  604. /data/third_party/boringssl-with-bazel/src/crypto/obj/{obj_xref.c → obj_xref.cc} +0 -0
  605. /data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_all.c → pem_all.cc} +0 -0
  606. /data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_pk8.c → pem_pk8.cc} +0 -0
  607. /data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_pkey.c → pem_pkey.cc} +0 -0
  608. /data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_x509.c → pem_x509.cc} +0 -0
  609. /data/third_party/boringssl-with-bazel/src/crypto/pem/{pem_xaux.c → pem_xaux.cc} +0 -0
  610. /data/third_party/boringssl-with-bazel/src/crypto/rc4/{rc4.c → rc4.cc} +0 -0
  611. /data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/{rsa_print.c → rsa_print.cc} +0 -0
  612. /data/third_party/boringssl-with-bazel/src/crypto/{thread.c → thread.cc} +0 -0
  613. /data/third_party/boringssl-with-bazel/src/crypto/x509/{by_file.c → by_file.cc} +0 -0
  614. /data/third_party/boringssl-with-bazel/src/crypto/x509/{i2d_pr.c → i2d_pr.cc} +0 -0
  615. /data/third_party/boringssl-with-bazel/src/crypto/x509/{name_print.c → name_print.cc} +0 -0
  616. /data/third_party/boringssl-with-bazel/src/crypto/x509/{t_crl.c → t_crl.cc} +0 -0
  617. /data/third_party/boringssl-with-bazel/src/crypto/x509/{t_req.c → t_req.cc} +0 -0
  618. /data/third_party/boringssl-with-bazel/src/crypto/x509/{t_x509.c → t_x509.cc} +0 -0
  619. /data/third_party/boringssl-with-bazel/src/crypto/x509/{t_x509a.c → t_x509a.cc} +0 -0
  620. /data/third_party/boringssl-with-bazel/src/crypto/x509/{v3_akeya.c → v3_akeya.cc} +0 -0
  621. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509.c → x509.cc} +0 -0
  622. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_cmp.c → x509_cmp.cc} +0 -0
  623. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_d2.c → x509_d2.cc} +0 -0
  624. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_def.c → x509_def.cc} +0 -0
  625. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_ext.c → x509_ext.cc} +0 -0
  626. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_obj.c → x509_obj.cc} +0 -0
  627. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_req.c → x509_req.cc} +0 -0
  628. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_set.c → x509_set.cc} +0 -0
  629. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_trs.c → x509_trs.cc} +0 -0
  630. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509_txt.c → x509_txt.cc} +0 -0
  631. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509cset.c → x509cset.cc} +0 -0
  632. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509name.c → x509name.cc} +0 -0
  633. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x509rset.c → x509rset.cc} +0 -0
  634. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_algor.c → x_algor.cc} +0 -0
  635. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_attrib.c → x_attrib.cc} +0 -0
  636. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_exten.c → x_exten.cc} +0 -0
  637. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_req.c → x_req.cc} +0 -0
  638. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_sig.c → x_sig.cc} +0 -0
  639. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_spki.c → x_spki.cc} +0 -0
  640. /data/third_party/boringssl-with-bazel/src/crypto/x509/{x_val.c → x_val.cc} +0 -0
@@ -117,46 +117,61 @@
117
117
  #include <openssl/bytestring.h>
118
118
  #include <openssl/err.h>
119
119
 
120
- #include "internal.h"
121
120
  #include "../crypto/internal.h"
121
+ #include "internal.h"
122
122
 
123
123
 
124
124
  BSSL_NAMESPACE_BEGIN
125
125
 
126
- // dtls1_bitmap_should_discard returns one if |seq_num| has been seen in
127
- // |bitmap| or is stale. Otherwise it returns zero.
128
- static bool dtls1_bitmap_should_discard(DTLS1_BITMAP *bitmap,
129
- uint64_t seq_num) {
130
- const size_t kWindowSize = bitmap->map.size();
126
+ bool DTLSReplayBitmap::ShouldDiscard(uint64_t seq_num) const {
127
+ const size_t kWindowSize = map_.size();
131
128
 
132
- if (seq_num > bitmap->max_seq_num) {
129
+ if (seq_num > max_seq_num_) {
133
130
  return false;
134
131
  }
135
- uint64_t idx = bitmap->max_seq_num - seq_num;
136
- return idx >= kWindowSize || bitmap->map[idx];
132
+ uint64_t idx = max_seq_num_ - seq_num;
133
+ return idx >= kWindowSize || map_[idx];
137
134
  }
138
135
 
139
- // dtls1_bitmap_record updates |bitmap| to record receipt of sequence number
140
- // |seq_num|. It slides the window forward if needed. It is an error to call
141
- // this function on a stale sequence number.
142
- static void dtls1_bitmap_record(DTLS1_BITMAP *bitmap, uint64_t seq_num) {
143
- const size_t kWindowSize = bitmap->map.size();
136
+ void DTLSReplayBitmap::Record(uint64_t seq_num) {
137
+ const size_t kWindowSize = map_.size();
144
138
 
145
139
  // Shift the window if necessary.
146
- if (seq_num > bitmap->max_seq_num) {
147
- uint64_t shift = seq_num - bitmap->max_seq_num;
140
+ if (seq_num > max_seq_num_) {
141
+ uint64_t shift = seq_num - max_seq_num_;
148
142
  if (shift >= kWindowSize) {
149
- bitmap->map.reset();
143
+ map_.reset();
150
144
  } else {
151
- bitmap->map <<= shift;
145
+ map_ <<= shift;
152
146
  }
153
- bitmap->max_seq_num = seq_num;
147
+ max_seq_num_ = seq_num;
154
148
  }
155
149
 
156
- uint64_t idx = bitmap->max_seq_num - seq_num;
150
+ uint64_t idx = max_seq_num_ - seq_num;
157
151
  if (idx < kWindowSize) {
158
- bitmap->map[idx] = true;
152
+ map_[idx] = true;
153
+ }
154
+ }
155
+
156
+ static uint16_t dtls_record_version(const SSL *ssl) {
157
+ if (ssl->s3->version == 0) {
158
+ // Before the version is determined, outgoing records use dTLS 1.0 for
159
+ // historical compatibility requirements.
160
+ return DTLS1_VERSION;
159
161
  }
162
+ // DTLS 1.3 freezes the record version at DTLS 1.2. Previous ones use the
163
+ // version itself.
164
+ return ssl_protocol_version(ssl) >= TLS1_3_VERSION ? DTLS1_2_VERSION
165
+ : ssl->s3->version;
166
+ }
167
+
168
+ static uint64_t dtls_aead_sequence(const SSL *ssl, DTLSRecordNumber num) {
169
+ // DTLS 1.3 uses the sequence number with the AEAD, while DTLS 1.2 uses the
170
+ // combined value. If the version is not known, the epoch is unencrypted and
171
+ // the value is ignored.
172
+ return (ssl->s3->version != 0 && ssl_protocol_version(ssl) >= TLS1_3_VERSION)
173
+ ? num.sequence()
174
+ : num.combined();
160
175
  }
161
176
 
162
177
  // reconstruct_epoch finds the largest epoch that ends with the epoch bits from
@@ -173,135 +188,188 @@ static uint16_t reconstruct_epoch(uint8_t wire_epoch, uint16_t current_epoch) {
173
188
 
174
189
  uint64_t reconstruct_seqnum(uint16_t wire_seq, uint64_t seq_mask,
175
190
  uint64_t max_valid_seqnum) {
191
+ // Although DTLS 1.3 can support sequence numbers up to 2^64-1, we continue to
192
+ // enforce the DTLS 1.2 2^48-1 limit. With a minimal DTLS 1.3 record header (2
193
+ // bytes), no payload, and 16 byte AEAD overhead, sending 2^48 records would
194
+ // require 5 petabytes. This allows us to continue to pack a DTLS record
195
+ // number into an 8-byte structure.
196
+ assert(max_valid_seqnum <= DTLSRecordNumber::kMaxSequence);
197
+ assert(seq_mask == 0xff || seq_mask == 0xffff);
198
+
176
199
  uint64_t max_seqnum_plus_one = max_valid_seqnum + 1;
177
200
  uint64_t diff = (wire_seq - max_seqnum_plus_one) & seq_mask;
178
201
  uint64_t step = seq_mask + 1;
202
+ // This addition cannot overflow. It is at most 2^48 + seq_mask. It, however,
203
+ // may exceed 2^48-1.
179
204
  uint64_t seqnum = max_seqnum_plus_one + diff;
180
- // seqnum is computed as the addition of 3 non-negative values
181
- // (max_valid_seqnum, 1, and diff). The values 1 and diff are small (relative
182
- // to the size of a uint64_t), while max_valid_seqnum can span the range of
183
- // all uint64_t values. If seqnum is less than max_valid_seqnum, then the
184
- // addition overflowed.
185
- bool overflowed = seqnum < max_valid_seqnum;
205
+ bool too_large = seqnum > DTLSRecordNumber::kMaxSequence;
186
206
  // If the diff is larger than half the step size, then the closest seqnum
187
207
  // to max_seqnum_plus_one (in Z_{2^64}) is seqnum minus step instead of
188
208
  // seqnum.
189
209
  bool closer_is_less = diff > step / 2;
190
210
  // Subtracting step from seqnum will cause underflow if seqnum is too small.
191
211
  bool would_underflow = seqnum < step;
192
- if (overflowed || (closer_is_less && !would_underflow)) {
212
+ if (too_large || (closer_is_less && !would_underflow)) {
193
213
  seqnum -= step;
194
214
  }
215
+ assert(seqnum <= DTLSRecordNumber::kMaxSequence);
195
216
  return seqnum;
196
217
  }
197
218
 
198
- static bool parse_dtls13_record_header(SSL *ssl, CBS *in, Span<uint8_t> packet,
199
- uint8_t type, CBS *out_body,
200
- uint64_t *out_sequence,
201
- uint16_t *out_epoch,
202
- size_t *out_header_len) {
203
- // TODO(crbug.com/boringssl/715): Decrypt the sequence number before
204
- // decoding it.
205
- if ((type & 0x10) == 0x10) {
219
+ static Span<uint8_t> cbs_to_writable_bytes(CBS cbs) {
220
+ return MakeSpan(const_cast<uint8_t *>(CBS_data(&cbs)), CBS_len(&cbs));
221
+ }
222
+
223
+ struct ParsedDTLSRecord {
224
+ // read_epoch will be null if the record is for an unrecognized epoch. In that
225
+ // case, |number| may be unset.
226
+ DTLSReadEpoch *read_epoch = nullptr;
227
+ DTLSRecordNumber number;
228
+ CBS header, body;
229
+ uint8_t type = 0;
230
+ uint16_t version = 0;
231
+ };
232
+
233
+ static bool use_dtls13_record_header(const SSL *ssl, uint16_t epoch) {
234
+ // Plaintext records in DTLS 1.3 also use the DTLSPlaintext structure for
235
+ // backwards compatibility.
236
+ return ssl->s3->version != 0 && ssl_protocol_version(ssl) > TLS1_2_VERSION &&
237
+ epoch > 0;
238
+ }
239
+
240
+ static bool parse_dtls13_record(SSL *ssl, CBS *in, ParsedDTLSRecord *out) {
241
+ if (out->type & 0x10) {
206
242
  // Connection ID bit set, which we didn't negotiate.
207
243
  return false;
208
244
  }
209
245
 
210
- // TODO(crbug.com/boringssl/715): Add a runner test that performs many
211
- // key updates to verify epoch reconstruction works for epochs larger than
212
- // 3.
213
- *out_epoch = reconstruct_epoch(type, ssl->d1->r_epoch);
214
- size_t seqlen = 1;
215
- if ((type & 0x08) == 0x08) {
216
- // If this bit is set, the sequence number is 16 bits long, otherwise it is
217
- // 8 bits. The seqlen variable tracks the length of the sequence number in
218
- // bytes.
219
- seqlen = 2;
246
+ uint16_t max_epoch = ssl->d1->read_epoch.epoch;
247
+ if (ssl->d1->next_read_epoch != nullptr) {
248
+ max_epoch = std::max(max_epoch, ssl->d1->next_read_epoch->epoch);
220
249
  }
221
- if (!CBS_skip(in, seqlen)) {
222
- // The record header was incomplete or malformed.
250
+ uint16_t epoch = reconstruct_epoch(out->type, max_epoch);
251
+ size_t seq_len = (out->type & 0x08) ? 2 : 1;
252
+ CBS seq_bytes;
253
+ if (!CBS_get_bytes(in, &seq_bytes, seq_len)) {
223
254
  return false;
224
255
  }
225
- *out_header_len = packet.size() - CBS_len(in);
226
- if ((type & 0x04) == 0x04) {
227
- *out_header_len += 2;
256
+ if (out->type & 0x04) {
228
257
  // 16-bit length present
229
- if (!CBS_get_u16_length_prefixed(in, out_body)) {
230
- // The record header was incomplete or malformed.
258
+ if (!CBS_get_u16_length_prefixed(in, &out->body)) {
231
259
  return false;
232
260
  }
233
261
  } else {
234
262
  // No length present - the remaining contents are the whole packet.
235
263
  // CBS_get_bytes is used here to advance |in| to the end so that future
236
264
  // code that computes the number of consumed bytes functions correctly.
237
- if (!CBS_get_bytes(in, out_body, CBS_len(in))) {
265
+ BSSL_CHECK(CBS_get_bytes(in, &out->body, CBS_len(in)));
266
+ }
267
+
268
+ // Drop the previous read epoch if expired.
269
+ if (ssl->d1->prev_read_epoch != nullptr &&
270
+ ssl_ctx_get_current_time(ssl->ctx.get()).tv_sec >
271
+ ssl->d1->prev_read_epoch->expire) {
272
+ ssl->d1->prev_read_epoch = nullptr;
273
+ }
274
+
275
+ // Look up the corresponding epoch. This header form only matches encrypted
276
+ // DTLS 1.3 epochs.
277
+ DTLSReadEpoch *read_epoch = nullptr;
278
+ if (epoch == ssl->d1->read_epoch.epoch) {
279
+ read_epoch = &ssl->d1->read_epoch;
280
+ } else if (ssl->d1->next_read_epoch != nullptr &&
281
+ epoch == ssl->d1->next_read_epoch->epoch) {
282
+ read_epoch = ssl->d1->next_read_epoch.get();
283
+ } else if (ssl->d1->prev_read_epoch != nullptr &&
284
+ epoch == ssl->d1->prev_read_epoch->epoch.epoch) {
285
+ read_epoch = &ssl->d1->prev_read_epoch->epoch;
286
+ }
287
+ if (read_epoch != nullptr && use_dtls13_record_header(ssl, epoch)) {
288
+ out->read_epoch = read_epoch;
289
+
290
+ // Decrypt and reconstruct the sequence number:
291
+ uint8_t mask[2];
292
+ if (!read_epoch->rn_encrypter->GenerateMask(mask, out->body)) {
293
+ // GenerateMask most likely failed because the record body was not long
294
+ // enough.
238
295
  return false;
239
296
  }
297
+ // Apply the mask to the sequence number in-place. The header (with the
298
+ // decrypted sequence number bytes) is used as the additional data for the
299
+ // AEAD function.
300
+ auto writable_seq = cbs_to_writable_bytes(seq_bytes);
301
+ uint64_t seq = 0;
302
+ for (size_t i = 0; i < writable_seq.size(); i++) {
303
+ writable_seq[i] ^= mask[i];
304
+ seq = (seq << 8) | writable_seq[i];
305
+ }
306
+ uint64_t full_seq = reconstruct_seqnum(seq, (1 << (seq_len * 8)) - 1,
307
+ read_epoch->bitmap.max_seq_num());
308
+ out->number = DTLSRecordNumber(epoch, full_seq);
240
309
  }
241
310
 
242
- // Decrypt and reconstruct the sequence number:
243
- uint8_t mask[AES_BLOCK_SIZE];
244
- SSLAEADContext *aead = ssl->s3->aead_read_ctx.get();
245
- if (!aead->GenerateRecordNumberMask(mask, *out_body)) {
246
- // GenerateRecordNumberMask most likely failed because the record body was
247
- // not long enough.
248
- return false;
249
- }
250
- // Apply the mask to the sequence number as it exists in the header. The
251
- // header (with the decrypted sequence number bytes) is used as the
252
- // additional data for the AEAD function. Since we don't support Connection
253
- // ID, the sequence number starts immediately after the type byte.
254
- uint64_t seq = 0;
255
- for (size_t i = 0; i < seqlen; i++) {
256
- packet[i + 1] ^= mask[i];
257
- seq = (seq << 8) | packet[i + 1];
258
- }
259
- *out_sequence = reconstruct_seqnum(seq, (1 << (seqlen * 8)) - 1,
260
- ssl->d1->bitmap.max_seq_num);
261
311
  return true;
262
312
  }
263
313
 
264
- static bool parse_dtls_plaintext_record_header(
265
- SSL *ssl, CBS *in, size_t packet_size, uint8_t type, CBS *out_body,
266
- uint64_t *out_sequence, uint16_t *out_epoch, size_t *out_header_len,
267
- uint16_t *out_version) {
268
- SSLAEADContext *aead = ssl->s3->aead_read_ctx.get();
269
- uint8_t sequence_bytes[8];
270
- if (!CBS_get_u16(in, out_version) ||
271
- !CBS_copy_bytes(in, sequence_bytes, sizeof(sequence_bytes))) {
272
- return false;
273
- }
274
- *out_header_len = packet_size - CBS_len(in) + 2;
275
- if (!CBS_get_u16_length_prefixed(in, out_body) ||
276
- CBS_len(out_body) > SSL3_RT_MAX_ENCRYPTED_LENGTH) {
314
+ static bool parse_dtls12_record(SSL *ssl, CBS *in, ParsedDTLSRecord *out) {
315
+ uint64_t epoch_and_seq;
316
+ if (!CBS_get_u16(in, &out->version) || //
317
+ !CBS_get_u64(in, &epoch_and_seq) ||
318
+ !CBS_get_u16_length_prefixed(in, &out->body)) {
277
319
  return false;
278
320
  }
321
+ out->number = DTLSRecordNumber::FromCombined(epoch_and_seq);
279
322
 
323
+ uint16_t epoch = out->number.epoch();
280
324
  bool version_ok;
281
- if (aead->is_null_cipher()) {
325
+ if (epoch == 0) {
282
326
  // Only check the first byte. Enforcing beyond that can prevent decoding
283
327
  // version negotiation failure alerts.
284
- version_ok = (*out_version >> 8) == DTLS1_VERSION_MAJOR;
328
+ version_ok = (out->version >> 8) == DTLS1_VERSION_MAJOR;
285
329
  } else {
286
- version_ok = *out_version == aead->RecordVersion();
330
+ version_ok = out->version == dtls_record_version(ssl);
287
331
  }
288
-
289
332
  if (!version_ok) {
290
333
  return false;
291
334
  }
292
335
 
293
- *out_sequence = CRYPTO_load_u64_be(sequence_bytes);
294
- *out_epoch = static_cast<uint16_t>(*out_sequence >> 48);
336
+ // Look up the corresponding epoch. In DTLS 1.2, we only need to consider one
337
+ // epoch.
338
+ if (epoch == ssl->d1->read_epoch.epoch &&
339
+ !use_dtls13_record_header(ssl, epoch)) {
340
+ out->read_epoch = &ssl->d1->read_epoch;
341
+ }
295
342
 
296
- // Discard the packet if we're expecting an encrypted DTLS 1.3 record but we
297
- // get the old record header format.
298
- if (!aead->is_null_cipher() && aead->ProtocolVersion() >= TLS1_3_VERSION) {
343
+ return true;
344
+ }
345
+
346
+ static bool parse_dtls_record(SSL *ssl, CBS *cbs, ParsedDTLSRecord *out) {
347
+ CBS copy = *cbs;
348
+ if (!CBS_get_u8(cbs, &out->type)) {
299
349
  return false;
300
350
  }
351
+
352
+ bool ok;
353
+ if ((out->type & 0xe0) == 0x20) {
354
+ ok = parse_dtls13_record(ssl, cbs, out);
355
+ } else {
356
+ ok = parse_dtls12_record(ssl, cbs, out);
357
+ }
358
+ if (!ok) {
359
+ return false;
360
+ }
361
+
362
+ if (CBS_len(&out->body) > SSL3_RT_MAX_ENCRYPTED_LENGTH) {
363
+ return false;
364
+ }
365
+
366
+ size_t header_len = CBS_data(&out->body) - CBS_data(&copy);
367
+ BSSL_CHECK(CBS_get_bytes(&copy, &out->header, header_len));
301
368
  return true;
302
369
  }
303
370
 
304
371
  enum ssl_open_record_t dtls_open_record(SSL *ssl, uint8_t *out_type,
372
+ DTLSRecordNumber *out_number,
305
373
  Span<uint8_t> *out,
306
374
  size_t *out_consumed,
307
375
  uint8_t *out_alert, Span<uint8_t> in) {
@@ -314,57 +382,31 @@ enum ssl_open_record_t dtls_open_record(SSL *ssl, uint8_t *out_type,
314
382
  return ssl_open_record_partial;
315
383
  }
316
384
 
317
- CBS cbs = CBS(in);
318
-
319
- uint8_t type;
320
- size_t record_header_len;
321
- if (!CBS_get_u8(&cbs, &type)) {
322
- // The record header was incomplete or malformed. Drop the entire packet.
323
- *out_consumed = in.size();
324
- return ssl_open_record_discard;
325
- }
326
- SSLAEADContext *aead = ssl->s3->aead_read_ctx.get();
327
- uint64_t sequence;
328
- uint16_t epoch;
329
- uint16_t version = 0;
330
- CBS body;
331
- bool valid_record_header;
332
- // Decode the record header. If the 3 high bits of the type are 001, then the
333
- // record header is the DTLS 1.3 format. The DTLS 1.3 format should only be
334
- // used for encrypted records with DTLS 1.3. Plaintext records or DTLS 1.2
335
- // records use the old record header format.
336
- if ((type & 0xe0) == 0x20 && !aead->is_null_cipher() &&
337
- aead->ProtocolVersion() >= TLS1_3_VERSION) {
338
- valid_record_header = parse_dtls13_record_header(
339
- ssl, &cbs, in, type, &body, &sequence, &epoch, &record_header_len);
340
- } else {
341
- valid_record_header = parse_dtls_plaintext_record_header(
342
- ssl, &cbs, in.size(), type, &body, &sequence, &epoch,
343
- &record_header_len, &version);
344
- }
345
- if (!valid_record_header) {
385
+ CBS cbs(in);
386
+ ParsedDTLSRecord record;
387
+ if (!parse_dtls_record(ssl, &cbs, &record)) {
346
388
  // The record header was incomplete or malformed. Drop the entire packet.
347
389
  *out_consumed = in.size();
348
390
  return ssl_open_record_discard;
349
391
  }
350
392
 
351
- Span<const uint8_t> header = in.subspan(0, record_header_len);
352
- ssl_do_msg_callback(ssl, 0 /* read */, SSL3_RT_HEADER, header);
393
+ ssl_do_msg_callback(ssl, 0 /* read */, SSL3_RT_HEADER, record.header);
353
394
 
354
- if (epoch != ssl->d1->r_epoch ||
355
- dtls1_bitmap_should_discard(&ssl->d1->bitmap, sequence)) {
356
- // Drop this record. It's from the wrong epoch or is a replay. Note that if
357
- // |epoch| is the next epoch, the record could be buffered for later. For
395
+ if (record.read_epoch == nullptr ||
396
+ record.read_epoch->bitmap.ShouldDiscard(record.number.sequence())) {
397
+ // Drop this record. It's from an unknown epoch or is a replay. Note that if
398
+ // the record is from next epoch, it could be buffered for later. For
358
399
  // simplicity, drop it and expect retransmit to handle it later; DTLS must
359
400
  // handle packet loss anyway.
360
401
  *out_consumed = in.size() - CBS_len(&cbs);
361
402
  return ssl_open_record_discard;
362
403
  }
363
404
 
364
- // discard the body in-place.
365
- if (!aead->Open(
366
- out, type, version, sequence, header,
367
- MakeSpan(const_cast<uint8_t *>(CBS_data(&body)), CBS_len(&body)))) {
405
+ // Decrypt the body in-place.
406
+ if (!record.read_epoch->aead->Open(out, record.type, record.version,
407
+ dtls_aead_sequence(ssl, record.number),
408
+ record.header,
409
+ cbs_to_writable_bytes(record.body))) {
368
410
  // Bad packets are silently dropped in DTLS. See section 4.2.1 of RFC 6347.
369
411
  // Clear the error queue of any errors decryption may have added. Drop the
370
412
  // entire packet as it must not have come from the peer.
@@ -378,8 +420,8 @@ enum ssl_open_record_t dtls_open_record(SSL *ssl, uint8_t *out_type,
378
420
  *out_consumed = in.size() - CBS_len(&cbs);
379
421
 
380
422
  // DTLS 1.3 hides the record type inside the encrypted data.
381
- bool has_padding =
382
- !aead->is_null_cipher() && aead->ProtocolVersion() >= TLS1_3_VERSION;
423
+ bool has_padding = !record.read_epoch->aead->is_null_cipher() &&
424
+ ssl_protocol_version(ssl) >= TLS1_3_VERSION;
383
425
  // Check the plaintext length.
384
426
  size_t plaintext_limit = SSL3_RT_MAX_PLAIN_LENGTH + (has_padding ? 1 : 0);
385
427
  if (out->size() > plaintext_limit) {
@@ -395,45 +437,82 @@ enum ssl_open_record_t dtls_open_record(SSL *ssl, uint8_t *out_type,
395
437
  *out_alert = SSL_AD_DECRYPT_ERROR;
396
438
  return ssl_open_record_error;
397
439
  }
398
- type = out->back();
440
+ record.type = out->back();
399
441
  *out = out->subspan(0, out->size() - 1);
400
- } while (type == 0);
442
+ } while (record.type == 0);
401
443
  }
402
444
 
403
- dtls1_bitmap_record(&ssl->d1->bitmap, sequence);
445
+ record.read_epoch->bitmap.Record(record.number.sequence());
446
+
447
+ // Once we receive a record from the next epoch in DTLS 1.3, it becomes the
448
+ // current epoch. Also save the previous epoch. This allows us to handle
449
+ // packet reordering on KeyUpdate, as well as ACK retransmissions of the
450
+ // Finished flight.
451
+ if (record.read_epoch == ssl->d1->next_read_epoch.get()) {
452
+ assert(ssl_protocol_version(ssl) >= TLS1_3_VERSION);
453
+ auto prev = MakeUnique<DTLSPrevReadEpoch>();
454
+ if (prev == nullptr) {
455
+ *out_alert = SSL_AD_INTERNAL_ERROR;
456
+ return ssl_open_record_error;
457
+ }
458
+
459
+ // Release the epoch after a timeout.
460
+ prev->expire = ssl_ctx_get_current_time(ssl->ctx.get()).tv_sec;
461
+ if (prev->expire >= UINT64_MAX - DTLS_PREV_READ_EPOCH_EXPIRE_SECONDS) {
462
+ prev->expire = UINT64_MAX; // Saturate on overflow.
463
+ } else {
464
+ prev->expire += DTLS_PREV_READ_EPOCH_EXPIRE_SECONDS;
465
+ }
466
+
467
+ prev->epoch = std::move(ssl->d1->read_epoch);
468
+ ssl->d1->prev_read_epoch = std::move(prev);
469
+ ssl->d1->read_epoch = std::move(*ssl->d1->next_read_epoch);
470
+ ssl->d1->next_read_epoch = nullptr;
471
+ }
404
472
 
405
473
  // TODO(davidben): Limit the number of empty records as in TLS? This is only
406
474
  // useful if we also limit discarded packets.
407
475
 
408
- if (type == SSL3_RT_ALERT) {
476
+ if (record.type == SSL3_RT_ALERT) {
409
477
  return ssl_process_alert(ssl, out_alert, *out);
410
478
  }
411
479
 
480
+ // Reject application data in epochs that do not allow it.
481
+ if (record.type == SSL3_RT_APPLICATION_DATA) {
482
+ bool app_data_allowed;
483
+ if (ssl->s3->version != 0 && ssl_protocol_version(ssl) >= TLS1_3_VERSION) {
484
+ // Application data is allowed in 0-RTT (epoch 1) and after the handshake
485
+ // (3 and up).
486
+ app_data_allowed =
487
+ record.number.epoch() == 1 || record.number.epoch() >= 3;
488
+ } else {
489
+ // Application data is allowed starting epoch 1.
490
+ app_data_allowed = record.number.epoch() >= 1;
491
+ }
492
+ if (!app_data_allowed) {
493
+ OPENSSL_PUT_ERROR(SSL, SSL_R_UNEXPECTED_RECORD);
494
+ *out_alert = SSL_AD_UNEXPECTED_MESSAGE;
495
+ return ssl_open_record_error;
496
+ }
497
+ }
498
+
412
499
  ssl->s3->warning_alert_count = 0;
413
500
 
414
- *out_type = type;
501
+ *out_type = record.type;
502
+ *out_number = record.number;
415
503
  return ssl_open_record_success;
416
504
  }
417
505
 
418
- static SSLAEADContext *get_write_aead(const SSL *ssl, uint16_t epoch) {
419
- if (epoch == 0) {
420
- return ssl->d1->initial_aead_write_ctx.get();
506
+ static DTLSWriteEpoch *get_write_epoch(const SSL *ssl, uint16_t epoch) {
507
+ if (ssl->d1->write_epoch.epoch() == epoch) {
508
+ return &ssl->d1->write_epoch;
421
509
  }
422
-
423
- if (epoch < ssl->d1->w_epoch) {
424
- BSSL_CHECK(epoch + 1 == ssl->d1->w_epoch);
425
- return ssl->d1->last_aead_write_ctx.get();
510
+ for (const auto &e : ssl->d1->extra_write_epochs) {
511
+ if (e->epoch() == epoch) {
512
+ return e.get();
513
+ }
426
514
  }
427
-
428
- BSSL_CHECK(epoch == ssl->d1->w_epoch);
429
- return ssl->s3->aead_write_ctx.get();
430
- }
431
-
432
- static bool use_dtls13_record_header(const SSL *ssl, uint16_t epoch) {
433
- // Plaintext records in DTLS 1.3 also use the DTLSPlaintext structure for
434
- // backwards compatibility.
435
- return ssl->s3->have_version && ssl_protocol_version(ssl) > TLS1_2_VERSION &&
436
- epoch > 0;
515
+ return nullptr;
437
516
  }
438
517
 
439
518
  size_t dtls_record_header_write_len(const SSL *ssl, uint16_t epoch) {
@@ -448,10 +527,13 @@ size_t dtls_record_header_write_len(const SSL *ssl, uint16_t epoch) {
448
527
  return DTLS1_3_RECORD_HEADER_WRITE_LENGTH;
449
528
  }
450
529
 
451
- size_t dtls_max_seal_overhead(const SSL *ssl,
452
- uint16_t epoch) {
530
+ size_t dtls_max_seal_overhead(const SSL *ssl, uint16_t epoch) {
531
+ DTLSWriteEpoch *write_epoch = get_write_epoch(ssl, epoch);
532
+ if (write_epoch == nullptr) {
533
+ return 0;
534
+ }
453
535
  size_t ret = dtls_record_header_write_len(ssl, epoch) +
454
- get_write_aead(ssl, epoch)->MaxOverhead();
536
+ write_epoch->aead->MaxOverhead();
455
537
  if (use_dtls13_record_header(ssl, epoch)) {
456
538
  // Add 1 byte for the encrypted record type.
457
539
  ret++;
@@ -460,13 +542,35 @@ size_t dtls_max_seal_overhead(const SSL *ssl,
460
542
  }
461
543
 
462
544
  size_t dtls_seal_prefix_len(const SSL *ssl, uint16_t epoch) {
545
+ DTLSWriteEpoch *write_epoch = get_write_epoch(ssl, epoch);
546
+ if (write_epoch == nullptr) {
547
+ return 0;
548
+ }
463
549
  return dtls_record_header_write_len(ssl, epoch) +
464
- get_write_aead(ssl, epoch)->ExplicitNonceLen();
550
+ write_epoch->aead->ExplicitNonceLen();
465
551
  }
466
552
 
467
- bool dtls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out,
468
- uint8_t type, const uint8_t *in, size_t in_len,
469
- uint16_t epoch) {
553
+ size_t dtls_seal_max_input_len(const SSL *ssl, uint16_t epoch, size_t max_out) {
554
+ DTLSWriteEpoch *write_epoch = get_write_epoch(ssl, epoch);
555
+ if (write_epoch == nullptr) {
556
+ return 0;
557
+ }
558
+ size_t header_len = dtls_record_header_write_len(ssl, epoch);
559
+ if (max_out <= header_len) {
560
+ return 0;
561
+ }
562
+ max_out -= header_len;
563
+ max_out = write_epoch->aead->MaxSealInputLen(max_out);
564
+ if (max_out > 0 && use_dtls13_record_header(ssl, epoch)) {
565
+ // Remove 1 byte for the encrypted record type.
566
+ max_out--;
567
+ }
568
+ return max_out;
569
+ }
570
+
571
+ bool dtls_seal_record(SSL *ssl, DTLSRecordNumber *out_number, uint8_t *out,
572
+ size_t *out_len, size_t max_out, uint8_t type,
573
+ const uint8_t *in, size_t in_len, uint16_t epoch) {
470
574
  const size_t prefix = dtls_seal_prefix_len(ssl, epoch);
471
575
  if (buffers_alias(in, in_len, out, max_out) &&
472
576
  (max_out < prefix || out + prefix != in)) {
@@ -475,26 +579,21 @@ bool dtls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out,
475
579
  }
476
580
 
477
581
  // Determine the parameters for the current epoch.
478
- SSLAEADContext *aead = get_write_aead(ssl, epoch);
479
- uint64_t *seq = &ssl->s3->write_sequence;
480
- if (epoch < ssl->d1->w_epoch) {
481
- seq = &ssl->d1->last_write_sequence;
582
+ DTLSWriteEpoch *write_epoch = get_write_epoch(ssl, epoch);
583
+ if (write_epoch == nullptr) {
584
+ OPENSSL_PUT_ERROR(SSL, ERR_R_INTERNAL_ERROR);
585
+ return false;
482
586
  }
483
- // TODO(crbug.com/boringssl/715): If epoch is initial or handshake, the value
484
- // of seq is probably wrong for a retransmission.
485
587
 
486
588
  const size_t record_header_len = dtls_record_header_write_len(ssl, epoch);
487
589
 
488
590
  // Ensure the sequence number update does not overflow.
489
- const uint64_t kMaxSequenceNumber = (uint64_t{1} << 48) - 1;
490
- if (*seq + 1 > kMaxSequenceNumber) {
591
+ DTLSRecordNumber record_number = write_epoch->next_record;
592
+ if (!record_number.HasNext()) {
491
593
  OPENSSL_PUT_ERROR(SSL, ERR_R_OVERFLOW);
492
594
  return false;
493
595
  }
494
596
 
495
- uint16_t record_version = ssl->s3->aead_write_ctx->RecordVersion();
496
- uint64_t seq_with_epoch = (uint64_t{epoch} << 48) | *seq;
497
-
498
597
  bool dtls13_header = use_dtls13_record_header(ssl, epoch);
499
598
  uint8_t *extra_in = NULL;
500
599
  size_t extra_in_len = 0;
@@ -504,7 +603,8 @@ bool dtls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out,
504
603
  }
505
604
 
506
605
  size_t ciphertext_len;
507
- if (!aead->CiphertextLen(&ciphertext_len, in_len, extra_in_len)) {
606
+ if (!write_epoch->aead->CiphertextLen(&ciphertext_len, in_len,
607
+ extra_in_len)) {
508
608
  OPENSSL_PUT_ERROR(SSL, SSL_R_RECORD_TOO_LARGE);
509
609
  return false;
510
610
  }
@@ -513,6 +613,7 @@ bool dtls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out,
513
613
  return false;
514
614
  }
515
615
 
616
+ uint16_t record_version = dtls_record_version(ssl);
516
617
  if (dtls13_header) {
517
618
  // The first byte of the DTLS 1.3 record header has the following format:
518
619
  // 0 1 2 3 4 5 6 7
@@ -528,27 +629,26 @@ bool dtls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out,
528
629
  // |0|0|1|0|1|1|E E|
529
630
  // +-+-+-+-+-+-+-+-+
530
631
  out[0] = 0x2c | (epoch & 0x3);
531
- out[1] = *seq >> 8;
532
- out[2] = *seq & 0xff;
533
- out[3] = ciphertext_len >> 8;
534
- out[4] = ciphertext_len & 0xff;
535
- // DTLS 1.3 uses the sequence number without the epoch for the AEAD.
536
- seq_with_epoch = *seq;
632
+ // We always use a two-byte sequence number. A one-byte sequence number
633
+ // would require coordinating with the application on ACK feedback to know
634
+ // that the peer is not too far behind.
635
+ CRYPTO_store_u16_be(out + 1, write_epoch->next_record.sequence());
636
+ // TODO(crbug.com/42290594): When we know the record is last in the packet,
637
+ // omit the length.
638
+ CRYPTO_store_u16_be(out + 3, ciphertext_len);
537
639
  } else {
538
640
  out[0] = type;
539
- out[1] = record_version >> 8;
540
- out[2] = record_version & 0xff;
541
- CRYPTO_store_u64_be(&out[3], seq_with_epoch);
542
- out[11] = ciphertext_len >> 8;
543
- out[12] = ciphertext_len & 0xff;
641
+ CRYPTO_store_u16_be(out + 1, record_version);
642
+ CRYPTO_store_u64_be(out + 3, record_number.combined());
643
+ CRYPTO_store_u16_be(out + 11, ciphertext_len);
544
644
  }
545
645
  Span<const uint8_t> header = MakeConstSpan(out, record_header_len);
546
646
 
547
647
 
548
- if (!aead->SealScatter(out + record_header_len, out + prefix,
549
- out + prefix + in_len, type, record_version,
550
- seq_with_epoch, header, in, in_len, extra_in,
551
- extra_in_len)) {
648
+ if (!write_epoch->aead->SealScatter(
649
+ out + record_header_len, out + prefix, out + prefix + in_len, type,
650
+ record_version, dtls_aead_sequence(ssl, record_number), header, in,
651
+ in_len, extra_in, extra_in_len)) {
552
652
  return false;
553
653
  }
554
654
 
@@ -560,18 +660,16 @@ bool dtls_seal_record(SSL *ssl, uint8_t *out, size_t *out_len, size_t max_out,
560
660
  // it needs (and error if |sample| is too short).
561
661
  Span<const uint8_t> sample =
562
662
  MakeConstSpan(out + record_header_len, ciphertext_len);
563
- // AES cipher suites require the mask be exactly AES_BLOCK_SIZE; ChaCha20
564
- // cipher suites have no requirements on the mask size. We only need the
565
- // first two bytes from the mask.
566
- uint8_t mask[AES_BLOCK_SIZE];
567
- if (!aead->GenerateRecordNumberMask(mask, sample)) {
663
+ uint8_t mask[2];
664
+ if (!write_epoch->rn_encrypter->GenerateMask(mask, sample)) {
568
665
  return false;
569
666
  }
570
667
  out[1] ^= mask[0];
571
668
  out[2] ^= mask[1];
572
669
  }
573
670
 
574
- (*seq)++;
671
+ *out_number = record_number;
672
+ write_epoch->next_record = record_number.Next();
575
673
  *out_len = record_header_len + ciphertext_len;
576
674
  ssl_do_msg_callback(ssl, 1 /* write */, SSL3_RT_HEADER, header);
577
675
  return true;