@fails-components/webtransport 0.0.1-rc.0 → 0.0.1-rc.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 (384) hide show
  1. package/.github/workflows/npm-publish-packages.yml +0 -0
  2. package/CMakeLists.txt +2 -0
  3. package/package.json +1 -1
  4. package/readme.md +0 -0
  5. package/src/http3serversession.h +1 -1
  6. package/src/webtransport.js +4 -2
  7. package/third_party/boringssl/src/CMakeLists.txt +9 -12
  8. package/third_party/boringssl/src/crypto/CMakeLists.txt +2 -3
  9. package/third_party/boringssl/src/crypto/asn1/time_support.c +206 -206
  10. package/third_party/boringssl/src/crypto/bio/socket_helper.c +124 -122
  11. package/third_party/boringssl/src/crypto/evp/digestsign.c +268 -231
  12. package/third_party/boringssl/src/crypto/evp/p_ec.c +286 -286
  13. package/third_party/boringssl/src/crypto/fipsmodule/aes/key_wrap.c +246 -236
  14. package/third_party/boringssl/src/crypto/fipsmodule/aes/mode_wrappers.c +124 -122
  15. package/third_party/boringssl/src/crypto/fipsmodule/bcm.c +3 -0
  16. package/third_party/boringssl/src/crypto/fipsmodule/bn/bytes.c +246 -230
  17. package/third_party/boringssl/src/crypto/fipsmodule/bn/internal.h +734 -715
  18. package/third_party/boringssl/src/crypto/fipsmodule/bn/random.c +349 -341
  19. package/third_party/boringssl/src/crypto/fipsmodule/cipher/cipher.c +670 -648
  20. package/third_party/boringssl/src/crypto/fipsmodule/cipher/e_aes.c +1504 -1472
  21. package/third_party/boringssl/src/crypto/{cipher_extra → fipsmodule/cipher}/e_aesccm.c +435 -446
  22. package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cavp_3des_cmac_tests.txt +0 -0
  23. package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cavp_aes128_cmac_tests.txt +0 -0
  24. package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cavp_aes192_cmac_tests.txt +0 -0
  25. package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cavp_aes256_cmac_tests.txt +0 -0
  26. package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cmac.c +318 -278
  27. package/third_party/boringssl/src/crypto/{cmac → fipsmodule/cmac}/cmac_test.cc +268 -267
  28. package/third_party/boringssl/src/crypto/fipsmodule/dh/dh.c +5 -1
  29. package/third_party/boringssl/src/crypto/fipsmodule/ec/ec.c +11 -17
  30. package/third_party/boringssl/src/crypto/fipsmodule/ec/ec_key.c +15 -4
  31. package/third_party/boringssl/src/crypto/fipsmodule/ec/internal.h +2 -6
  32. package/third_party/boringssl/src/crypto/fipsmodule/ec/p224-64.c +1164 -1180
  33. package/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz.c +3 -3
  34. package/third_party/boringssl/src/crypto/fipsmodule/ec/p256-nistz_test.cc +2 -2
  35. package/third_party/boringssl/src/crypto/fipsmodule/ec/p256.c +44 -33
  36. package/third_party/boringssl/src/crypto/fipsmodule/ec/scalar.c +169 -175
  37. package/third_party/boringssl/src/crypto/fipsmodule/ec/simple.c +352 -357
  38. package/third_party/boringssl/src/crypto/fipsmodule/ecdh/ecdh.c +4 -0
  39. package/third_party/boringssl/src/crypto/fipsmodule/ecdsa/ecdsa.c +14 -9
  40. package/third_party/boringssl/src/crypto/fipsmodule/hmac/hmac.c +256 -235
  41. package/third_party/boringssl/src/crypto/fipsmodule/rand/ctrdrbg.c +204 -202
  42. package/third_party/boringssl/src/crypto/fipsmodule/rsa/padding.c +702 -695
  43. package/third_party/boringssl/src/crypto/fipsmodule/rsa/rsa_impl.c +7 -2
  44. package/third_party/boringssl/src/crypto/fipsmodule/self_check/self_check.c +7 -0
  45. package/third_party/boringssl/src/crypto/fipsmodule/service_indicator/internal.h +89 -0
  46. package/third_party/boringssl/src/crypto/fipsmodule/service_indicator/service_indicator.c +333 -0
  47. package/third_party/boringssl/src/crypto/fipsmodule/service_indicator/service_indicator_test.cc +2410 -0
  48. package/third_party/boringssl/src/crypto/fipsmodule/sha/sha1.c +359 -357
  49. package/third_party/boringssl/src/crypto/fipsmodule/sha/sha256.c +325 -321
  50. package/third_party/boringssl/src/crypto/fipsmodule/sha/sha512.c +510 -508
  51. package/third_party/boringssl/src/crypto/fipsmodule/tls/kdf.c +177 -165
  52. package/third_party/boringssl/src/crypto/internal.h +13 -0
  53. package/third_party/boringssl/src/crypto/trust_token/trust_token_test.cc +884 -884
  54. package/third_party/boringssl/src/crypto/x509/internal.h +0 -2
  55. package/third_party/boringssl/src/crypto/x509/t_crl.c +148 -148
  56. package/third_party/boringssl/src/crypto/x509/t_req.c +249 -250
  57. package/third_party/boringssl/src/crypto/x509/t_x509.c +2 -3
  58. package/third_party/boringssl/src/crypto/x509/x509_req.c +262 -304
  59. package/third_party/boringssl/src/crypto/x509/x509_set.c +250 -240
  60. package/third_party/boringssl/src/crypto/x509/x509_test.cc +466 -4
  61. package/third_party/boringssl/src/crypto/x509/x509cset.c +292 -279
  62. package/third_party/boringssl/src/crypto/x509/x509rset.c +89 -86
  63. package/third_party/boringssl/src/crypto/x509/x_crl.c +37 -125
  64. package/third_party/boringssl/src/crypto/x509/x_req.c +114 -109
  65. package/third_party/boringssl/src/crypto/x509/x_x509.c +394 -394
  66. package/third_party/boringssl/src/crypto/x509v3/v3_akey.c +11 -16
  67. package/third_party/boringssl/src/crypto/x509v3/v3_alt.c +644 -642
  68. package/third_party/boringssl/src/crypto/x509v3/v3_bcons.c +130 -133
  69. package/third_party/boringssl/src/crypto/x509v3/v3_bitst.c +149 -144
  70. package/third_party/boringssl/src/crypto/x509v3/v3_cpols.c +496 -500
  71. package/third_party/boringssl/src/crypto/x509v3/v3_enum.c +105 -106
  72. package/third_party/boringssl/src/crypto/x509v3/v3_ia5.c +126 -121
  73. package/third_party/boringssl/src/crypto/x509v3/v3_info.c +206 -218
  74. package/third_party/boringssl/src/crypto/x509v3/v3_int.c +97 -91
  75. package/third_party/boringssl/src/crypto/x509v3/v3_pci.c +290 -289
  76. package/third_party/boringssl/src/crypto/x509v3/v3_skey.c +161 -156
  77. package/third_party/boringssl/src/crypto/x509v3/v3_utl.c +5 -3
  78. package/third_party/boringssl/src/include/openssl/aead.h +480 -480
  79. package/third_party/boringssl/src/include/openssl/asn1.h +2 -0
  80. package/third_party/boringssl/src/include/openssl/base.h +1 -1
  81. package/third_party/boringssl/src/include/openssl/service_indicator.h +96 -0
  82. package/third_party/boringssl/src/include/openssl/ssl.h +7 -0
  83. package/third_party/boringssl/src/include/openssl/x509.h +11 -33
  84. package/third_party/boringssl/src/include/openssl/x509v3.h +990 -1018
  85. package/third_party/boringssl/src/sources.cmake +4 -4
  86. package/third_party/boringssl/src/ssl/internal.h +10 -0
  87. package/third_party/boringssl/src/ssl/ssl_lib.cc +3081 -3072
  88. package/third_party/boringssl/src/ssl/ssl_test.cc +46 -0
  89. package/third_party/boringssl/src/ssl/tls13_server.cc +4 -6
  90. package/third_party/boringssl/src/util/bot/DEPS +14 -27
  91. package/third_party/boringssl/src/util/bot/UPDATING +3 -9
  92. package/third_party/boringssl/src/util/bot/update_clang.py +172 -172
  93. package/third_party/boringssl/src/util/bot/vs_toolchain.py +3 -3
  94. package/third_party/quiche/.bazelrc +8 -0
  95. package/third_party/quiche/BUILD.bazel +7 -0
  96. package/third_party/quiche/WHITESPACE +3 -1
  97. package/third_party/quiche/WORKSPACE.bazel +87 -0
  98. package/third_party/quiche/build/BUILD.bazel +7 -0
  99. package/third_party/quiche/build/source_list.bzl +1511 -0
  100. package/third_party/quiche/build/source_list.gni +1511 -0
  101. package/third_party/quiche/build/source_list.json +1511 -0
  102. package/third_party/quiche/build/test.bzl +26 -0
  103. package/third_party/quiche/build/zlib.BUILD +25 -0
  104. package/third_party/quiche/quiche/BUILD.bazel +270 -0
  105. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_enums.cc +3 -3
  106. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_enums.h +7 -7
  107. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_frame.cc +39 -18
  108. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_frame.h +11 -10
  109. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_frame_test.cc +67 -63
  110. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_headers.cc +13 -12
  111. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_headers.h +16 -8
  112. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_headers_test.cc +9 -9
  113. package/third_party/quiche/quiche/{common/balsa → balsa}/balsa_visitor_interface.h +4 -4
  114. package/third_party/quiche/quiche/{common/balsa → balsa}/framer_interface.h +3 -3
  115. package/third_party/quiche/quiche/{common/balsa → balsa}/header_api.h +3 -3
  116. package/third_party/quiche/quiche/{common/balsa → balsa}/header_properties.cc +1 -1
  117. package/third_party/quiche/quiche/{common/balsa → balsa}/header_properties.h +3 -3
  118. package/third_party/quiche/quiche/{common/balsa → balsa}/header_properties_test.cc +1 -1
  119. package/third_party/quiche/quiche/{common/balsa → balsa}/http_validation_policy.cc +1 -1
  120. package/third_party/quiche/quiche/{common/balsa → balsa}/http_validation_policy.h +3 -3
  121. package/third_party/quiche/quiche/{common/balsa → balsa}/noop_balsa_visitor.h +4 -4
  122. package/third_party/quiche/quiche/{common/balsa → balsa}/simple_buffer.cc +22 -29
  123. package/third_party/quiche/quiche/{common/balsa → balsa}/simple_buffer.h +18 -16
  124. package/third_party/quiche/quiche/{common/balsa → balsa}/simple_buffer_test.cc +79 -32
  125. package/third_party/quiche/quiche/{common/balsa → balsa}/standard_header_map.cc +1 -1
  126. package/third_party/quiche/quiche/{common/balsa → balsa}/standard_header_map.h +3 -3
  127. package/third_party/quiche/quiche/common/platform/api/quiche_command_line_flags.h +6 -1
  128. package/third_party/quiche/quiche/common/platform/api/quiche_flags.h +8 -0
  129. package/third_party/quiche/quiche/common/platform/api/quiche_logging.h +0 -3
  130. package/third_party/quiche/quiche/common/platform/api/quiche_lower_case_string_test.cc +29 -0
  131. package/third_party/quiche/quiche/common/platform/api/quiche_test.h +5 -7
  132. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quic_flags_impl.h +1 -1
  133. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_bug_tracker_impl.h +3 -2
  134. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.cc +41 -0
  135. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_command_line_flags_impl.h +33 -0
  136. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_expect_bug_impl.h +15 -0
  137. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_logging_impl.h +84 -50
  138. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_lower_case_string_impl.h +25 -0
  139. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_stack_trace_impl.cc +1 -1
  140. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.cc +25 -0
  141. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_test_impl.h +56 -0
  142. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_test_output_impl.h +27 -0
  143. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_thread_impl.h +26 -0
  144. package/third_party/quiche/quiche/common/platform/default/quiche_platform_impl/quiche_url_utils_impl.cc +1 -0
  145. package/third_party/quiche/quiche/common/quiche_buffer_allocator_test.cc +1 -1
  146. package/third_party/quiche/quiche/common/quiche_mem_slice_storage.h +2 -3
  147. package/third_party/quiche/quiche/common/structured_headers.cc +14 -12
  148. package/third_party/quiche/quiche/http2/adapter/event_forwarder.cc +7 -5
  149. package/third_party/quiche/quiche/http2/adapter/event_forwarder.h +4 -2
  150. package/third_party/quiche/quiche/http2/adapter/event_forwarder_test.cc +14 -9
  151. package/third_party/quiche/quiche/http2/adapter/header_validator.cc +43 -19
  152. package/third_party/quiche/quiche/http2/adapter/header_validator.h +11 -40
  153. package/third_party/quiche/quiche/http2/adapter/header_validator_base.h +69 -0
  154. package/third_party/quiche/quiche/http2/adapter/header_validator_test.cc +73 -1
  155. package/third_party/quiche/quiche/http2/adapter/nghttp2_adapter_test.cc +66 -0
  156. package/third_party/quiche/quiche/http2/adapter/nghttp2_session_test.cc +8 -5
  157. package/third_party/quiche/quiche/http2/adapter/nghttp2_test.cc +1 -1
  158. package/third_party/quiche/quiche/http2/adapter/noop_header_validator.cc +22 -0
  159. package/third_party/quiche/quiche/http2/adapter/noop_header_validator.h +25 -0
  160. package/third_party/quiche/quiche/http2/adapter/noop_header_validator_test.cc +523 -0
  161. package/third_party/quiche/quiche/http2/adapter/oghttp2_adapter_test.cc +186 -5
  162. package/third_party/quiche/quiche/http2/adapter/oghttp2_session.cc +37 -43
  163. package/third_party/quiche/quiche/http2/adapter/oghttp2_session.h +22 -23
  164. package/third_party/quiche/quiche/http2/adapter/test_utils.cc +1 -1
  165. package/third_party/quiche/quiche/http2/adapter/window_manager_test.cc +11 -5
  166. package/third_party/quiche/quiche/http2/core/http2_trace_logging.cc +13 -11
  167. package/third_party/quiche/quiche/http2/core/http2_trace_logging.h +5 -4
  168. package/third_party/quiche/quiche/http2/core/priority_write_scheduler.h +42 -36
  169. package/third_party/quiche/quiche/http2/core/priority_write_scheduler_test.cc +2 -2
  170. package/third_party/quiche/quiche/http2/decoder/decode_buffer_test.cc +9 -9
  171. package/third_party/quiche/quiche/http2/decoder/decode_http2_structures_test.cc +1 -1
  172. package/third_party/quiche/quiche/http2/decoder/http2_frame_decoder_test.cc +14 -14
  173. package/third_party/quiche/quiche/http2/decoder/http2_structure_decoder_test.cc +17 -17
  174. package/third_party/quiche/quiche/http2/decoder/payload_decoders/altsvc_payload_decoder_test.cc +1 -1
  175. package/third_party/quiche/quiche/http2/decoder/payload_decoders/continuation_payload_decoder_test.cc +1 -1
  176. package/third_party/quiche/quiche/http2/decoder/payload_decoders/data_payload_decoder_test.cc +2 -2
  177. package/third_party/quiche/quiche/http2/decoder/payload_decoders/goaway_payload_decoder_test.cc +1 -1
  178. package/third_party/quiche/quiche/http2/decoder/payload_decoders/headers_payload_decoder_test.cc +1 -1
  179. package/third_party/quiche/quiche/http2/decoder/payload_decoders/ping_payload_decoder_test.cc +1 -1
  180. package/third_party/quiche/quiche/http2/decoder/payload_decoders/priority_payload_decoder_test.cc +1 -1
  181. package/third_party/quiche/quiche/http2/decoder/payload_decoders/priority_update_payload_decoder_test.cc +1 -1
  182. package/third_party/quiche/quiche/http2/decoder/payload_decoders/push_promise_payload_decoder_test.cc +1 -1
  183. package/third_party/quiche/quiche/http2/decoder/payload_decoders/rst_stream_payload_decoder_test.cc +1 -1
  184. package/third_party/quiche/quiche/http2/decoder/payload_decoders/settings_payload_decoder_test.cc +1 -1
  185. package/third_party/quiche/quiche/http2/decoder/payload_decoders/unknown_payload_decoder_test.cc +1 -1
  186. package/third_party/quiche/quiche/http2/decoder/payload_decoders/window_update_payload_decoder_test.cc +1 -1
  187. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_block_decoder_test.cc +2 -2
  188. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_decoder_state_test.cc +8 -8
  189. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_decoder_string_buffer_test.cc +4 -3
  190. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_decoder_tables_test.cc +17 -17
  191. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_decoder_test.cc +25 -25
  192. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_entry_decoder_test.cc +2 -2
  193. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_entry_type_decoder_test.cc +7 -6
  194. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_string_decoder_test.cc +6 -6
  195. package/third_party/quiche/quiche/http2/hpack/decoder/hpack_whole_entry_buffer_test.cc +1 -1
  196. package/third_party/quiche/quiche/http2/hpack/huffman/hpack_huffman_decoder_test.cc +2 -2
  197. package/third_party/quiche/quiche/http2/hpack/huffman/hpack_huffman_encoder_test.cc +1 -1
  198. package/third_party/quiche/quiche/http2/hpack/huffman/hpack_huffman_transcoder_test.cc +5 -5
  199. package/third_party/quiche/quiche/http2/hpack/varint/hpack_varint_decoder_test.cc +4 -4
  200. package/third_party/quiche/quiche/http2/hpack/varint/hpack_varint_round_trip_test.cc +1 -1
  201. package/third_party/quiche/quiche/http2/http2_constants_test.cc +1 -1
  202. package/third_party/quiche/quiche/http2/http2_structures_test.cc +23 -22
  203. package/third_party/quiche/quiche/http2/test_tools/frame_decoder_state_test_util.cc +1 -1
  204. package/third_party/quiche/quiche/http2/test_tools/frame_decoder_state_test_util.h +1 -1
  205. package/third_party/quiche/quiche/http2/test_tools/frame_parts.cc +38 -38
  206. package/third_party/quiche/quiche/http2/test_tools/hpack_block_collector.cc +15 -15
  207. package/third_party/quiche/quiche/http2/test_tools/hpack_entry_collector.cc +24 -22
  208. package/third_party/quiche/quiche/http2/test_tools/hpack_string_collector.cc +5 -5
  209. package/third_party/quiche/quiche/http2/test_tools/http2_frame_builder_test.cc +70 -89
  210. package/third_party/quiche/quiche/http2/test_tools/payload_decoder_base_test_util.cc +1 -1
  211. package/third_party/quiche/quiche/http2/test_tools/payload_decoder_base_test_util.h +29 -26
  212. package/third_party/quiche/quiche/http2/test_tools/{random_decoder_test.cc → random_decoder_test_base.cc} +13 -10
  213. package/third_party/quiche/quiche/http2/test_tools/{random_decoder_test.h → random_decoder_test_base.h} +15 -17
  214. package/third_party/quiche/quiche/http2/test_tools/{random_decoder_test_test.cc → random_decoder_test_base_test.cc} +1 -1
  215. package/third_party/quiche/quiche/http2/test_tools/verify_macros.h +32 -0
  216. package/third_party/quiche/quiche/quic/core/congestion_control/bbr2_sender.cc +2 -1
  217. package/third_party/quiche/quiche/quic/core/congestion_control/bbr2_simulator_test.cc +3 -2
  218. package/third_party/quiche/quiche/quic/core/congestion_control/bbr_sender_test.cc +3 -2
  219. package/third_party/quiche/quiche/quic/core/congestion_control/rtt_stats.cc +3 -2
  220. package/third_party/quiche/quiche/quic/core/congestion_control/rtt_stats.h +2 -1
  221. package/third_party/quiche/quiche/quic/core/congestion_control/rtt_stats_test.cc +2 -13
  222. package/third_party/quiche/quiche/quic/core/crypto/certificate_view.cc +15 -0
  223. package/third_party/quiche/quiche/quic/core/crypto/certificate_view.h +7 -0
  224. package/third_party/quiche/quiche/quic/core/crypto/certificate_view_test.cc +16 -0
  225. package/third_party/quiche/quiche/quic/core/crypto/crypto_protocol.h +1 -0
  226. package/third_party/quiche/quiche/quic/core/crypto/proof_source.h +2 -2
  227. package/third_party/quiche/quiche/quic/core/crypto/proof_source_x509.cc +3 -5
  228. package/third_party/quiche/quiche/quic/core/crypto/proof_source_x509.h +1 -2
  229. package/third_party/quiche/quiche/quic/core/crypto/quic_crypto_server_config.cc +1 -1
  230. package/third_party/quiche/quiche/quic/core/crypto/quic_crypto_server_config.h +3 -3
  231. package/third_party/quiche/quiche/quic/core/frames/quic_blocked_frame.cc +2 -8
  232. package/third_party/quiche/quiche/quic/core/frames/quic_blocked_frame.h +0 -1
  233. package/third_party/quiche/quiche/quic/core/frames/quic_crypto_frame.h +2 -0
  234. package/third_party/quiche/quiche/quic/core/frames/quic_frames_test.cc +2 -1
  235. package/third_party/quiche/quiche/quic/core/http/capsule.cc +2 -22
  236. package/third_party/quiche/quiche/quic/core/http/capsule.h +0 -2
  237. package/third_party/quiche/quiche/quic/core/http/capsule_test.cc +1 -2
  238. package/third_party/quiche/quiche/quic/core/http/end_to_end_test.cc +148 -57
  239. package/third_party/quiche/quiche/quic/core/http/http_constants.cc +1 -1
  240. package/third_party/quiche/quiche/quic/core/http/http_constants.h +2 -2
  241. package/third_party/quiche/quiche/quic/core/http/quic_header_list_test.cc +2 -2
  242. package/third_party/quiche/quiche/quic/core/http/quic_headers_stream_test.cc +18 -14
  243. package/third_party/quiche/quiche/quic/core/http/quic_send_control_stream.h +2 -1
  244. package/third_party/quiche/quiche/quic/core/http/quic_send_control_stream_test.cc +3 -7
  245. package/third_party/quiche/quiche/quic/core/http/quic_server_session_base.h +4 -0
  246. package/third_party/quiche/quiche/quic/core/http/quic_spdy_session.cc +47 -65
  247. package/third_party/quiche/quiche/quic/core/http/quic_spdy_session.h +5 -17
  248. package/third_party/quiche/quiche/quic/core/http/quic_spdy_session_test.cc +63 -54
  249. package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.cc +34 -91
  250. package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream.h +1 -9
  251. package/third_party/quiche/quiche/quic/core/http/quic_spdy_stream_test.cc +27 -134
  252. package/third_party/quiche/quiche/quic/core/http/spdy_utils.cc +0 -41
  253. package/third_party/quiche/quiche/quic/core/http/spdy_utils.h +0 -9
  254. package/third_party/quiche/quiche/quic/core/http/spdy_utils_test.cc +0 -32
  255. package/third_party/quiche/quiche/quic/core/http/web_transport_http3.cc +0 -1
  256. package/third_party/quiche/quiche/quic/core/packet_number_indexed_queue_test.cc +2 -2
  257. package/third_party/quiche/quiche/quic/core/qpack/qpack_header_table.cc +2 -1
  258. package/third_party/quiche/quiche/quic/core/qpack/qpack_send_stream.h +2 -1
  259. package/third_party/quiche/quiche/quic/core/quic_arena_scoped_ptr_test.cc +2 -2
  260. package/third_party/quiche/quiche/quic/core/quic_connection.cc +68 -46
  261. package/third_party/quiche/quiche/quic/core/quic_connection.h +7 -6
  262. package/third_party/quiche/quiche/quic/core/quic_connection_context_test.cc +2 -2
  263. package/third_party/quiche/quiche/quic/core/quic_connection_id_manager_test.cc +2 -2
  264. package/third_party/quiche/quiche/quic/core/quic_connection_id_test.cc +2 -2
  265. package/third_party/quiche/quiche/quic/core/quic_connection_test.cc +45 -132
  266. package/third_party/quiche/quiche/quic/core/quic_constants.h +0 -7
  267. package/third_party/quiche/quiche/quic/core/quic_control_frame_manager.cc +11 -3
  268. package/third_party/quiche/quiche/quic/core/quic_control_frame_manager.h +1 -1
  269. package/third_party/quiche/quiche/quic/core/quic_control_frame_manager_test.cc +2 -2
  270. package/third_party/quiche/quiche/quic/core/quic_crypto_client_handshaker.cc +13 -1
  271. package/third_party/quiche/quiche/quic/core/quic_crypto_client_handshaker.h +3 -0
  272. package/third_party/quiche/quiche/quic/core/quic_crypto_client_handshaker_test.cc +2 -2
  273. package/third_party/quiche/quiche/quic/core/quic_crypto_client_stream.cc +6 -0
  274. package/third_party/quiche/quiche/quic/core/quic_crypto_client_stream.h +8 -0
  275. package/third_party/quiche/quiche/quic/core/quic_crypto_server_stream.cc +26 -13
  276. package/third_party/quiche/quiche/quic/core/quic_crypto_server_stream.h +5 -2
  277. package/third_party/quiche/quiche/quic/core/quic_crypto_stream.cc +55 -47
  278. package/third_party/quiche/quiche/quic/core/quic_crypto_stream.h +15 -10
  279. package/third_party/quiche/quiche/quic/core/quic_crypto_stream_test.cc +34 -5
  280. package/third_party/quiche/quiche/quic/core/quic_dispatcher.cc +20 -11
  281. package/third_party/quiche/quiche/quic/core/quic_dispatcher_test.cc +37 -13
  282. package/third_party/quiche/quiche/quic/core/quic_flags_list.h +6 -10
  283. package/third_party/quiche/quiche/quic/core/quic_flow_controller.cc +3 -3
  284. package/third_party/quiche/quiche/quic/core/quic_flow_controller.h +2 -2
  285. package/third_party/quiche/quiche/quic/core/quic_flow_controller_test.cc +15 -10
  286. package/third_party/quiche/quiche/quic/core/quic_framer.cc +1 -1
  287. package/third_party/quiche/quiche/quic/core/quic_one_block_arena.h +3 -2
  288. package/third_party/quiche/quiche/quic/core/quic_one_block_arena_test.cc +2 -2
  289. package/third_party/quiche/quiche/quic/core/quic_packet_creator.cc +3 -11
  290. package/third_party/quiche/quiche/quic/core/quic_packet_creator.h +0 -8
  291. package/third_party/quiche/quiche/quic/core/quic_ping_manager.cc +14 -14
  292. package/third_party/quiche/quiche/quic/core/quic_ping_manager_test.cc +48 -0
  293. package/third_party/quiche/quiche/quic/core/quic_received_packet_manager.cc +3 -18
  294. package/third_party/quiche/quiche/quic/core/quic_received_packet_manager_test.cc +4 -14
  295. package/third_party/quiche/quiche/quic/core/quic_server_id_test.cc +2 -2
  296. package/third_party/quiche/quiche/quic/core/quic_session.cc +4 -4
  297. package/third_party/quiche/quiche/quic/core/quic_session.h +1 -1
  298. package/third_party/quiche/quiche/quic/core/quic_session_test.cc +21 -1
  299. package/third_party/quiche/quiche/quic/core/quic_stream.cc +4 -7
  300. package/third_party/quiche/quiche/quic/core/quic_stream_test.cc +2 -4
  301. package/third_party/quiche/quiche/quic/core/quic_trace_visitor_test.cc +2 -2
  302. package/third_party/quiche/quiche/quic/core/quic_types.h +3 -8
  303. package/third_party/quiche/quiche/quic/core/quic_udp_socket_posix.cc +5 -4
  304. package/third_party/quiche/quiche/quic/core/quic_unacked_packet_map_test.cc +1 -1
  305. package/third_party/quiche/quiche/quic/core/quic_utils.cc +1 -1
  306. package/third_party/quiche/quiche/quic/core/quic_utils.h +2 -2
  307. package/third_party/quiche/quiche/quic/core/quic_versions_test.cc +0 -1
  308. package/third_party/quiche/quiche/quic/core/tls_client_handshaker.cc +13 -0
  309. package/third_party/quiche/quiche/quic/core/tls_client_handshaker.h +2 -0
  310. package/third_party/quiche/quiche/quic/core/tls_server_handshaker.cc +17 -3
  311. package/third_party/quiche/quiche/quic/core/tls_server_handshaker.h +3 -1
  312. package/third_party/quiche/quiche/quic/core/uber_received_packet_manager_test.cc +18 -10
  313. package/third_party/quiche/quiche/quic/masque/masque_client_bin.cc +6 -4
  314. package/third_party/quiche/quiche/quic/masque/masque_client_session.cc +23 -7
  315. package/third_party/quiche/quiche/quic/masque/masque_client_session.h +1 -1
  316. package/third_party/quiche/quiche/quic/masque/masque_server_backend.cc +13 -0
  317. package/third_party/quiche/quiche/quic/masque/masque_server_backend.h +2 -0
  318. package/third_party/quiche/quiche/quic/masque/masque_server_bin.cc +5 -4
  319. package/third_party/quiche/quiche/quic/masque/masque_server_session.cc +30 -40
  320. package/third_party/quiche/quiche/quic/masque/masque_server_session.h +1 -1
  321. package/third_party/quiche/quiche/quic/platform/api/quic_export.h +4 -4
  322. package/third_party/quiche/quiche/quic/platform/api/quic_flags.h +0 -1
  323. package/third_party/quiche/quiche/quic/platform/api/quic_logging.h +0 -6
  324. package/third_party/quiche/quiche/quic/platform/api/quic_test.h +6 -5
  325. package/third_party/quiche/quiche/quic/qbone/bonnet/icmp_reachable_test.cc +2 -2
  326. package/third_party/quiche/quiche/quic/qbone/bonnet/mock_qbone_tunnel.h +2 -0
  327. package/third_party/quiche/quiche/quic/qbone/bonnet/qbone_tunnel_interface.h +2 -0
  328. package/third_party/quiche/quiche/quic/qbone/bonnet/tun_device_controller_test.cc +2 -2
  329. package/third_party/quiche/quiche/quic/qbone/bonnet/tun_device_packet_exchanger_test.cc +2 -2
  330. package/third_party/quiche/quiche/quic/qbone/bonnet/tun_device_test.cc +2 -2
  331. package/third_party/quiche/quiche/quic/qbone/platform/netlink_test.cc +2 -2
  332. package/third_party/quiche/quiche/quic/qbone/platform/tcp_packet.cc +5 -4
  333. package/third_party/quiche/quiche/quic/qbone/qbone_client_session.cc +4 -2
  334. package/third_party/quiche/quiche/quic/qbone/qbone_packet_processor.cc +2 -1
  335. package/third_party/quiche/quiche/quic/qbone/qbone_packet_processor_test.cc +2 -2
  336. package/third_party/quiche/quiche/quic/qbone/qbone_server_session.cc +4 -2
  337. package/third_party/quiche/quiche/quic/qbone/qbone_session_base.cc +3 -2
  338. package/third_party/quiche/quiche/quic/qbone/qbone_stream.cc +4 -4
  339. package/third_party/quiche/quiche/quic/test_tools/quic_connection_peer.cc +1 -1
  340. package/third_party/quiche/quiche/quic/test_tools/quic_http_response_cache_data/test.example.com/index.html +63 -0
  341. package/third_party/quiche/quiche/quic/test_tools/quic_http_response_cache_data/test.example.com/map.html +65 -0
  342. package/third_party/quiche/quiche/quic/test_tools/quic_test_utils.cc +4 -3
  343. package/third_party/quiche/quiche/quic/test_tools/quic_test_utils.h +18 -1
  344. package/third_party/quiche/quiche/quic/test_tools/simulator/quic_endpoint_test.cc +1 -1
  345. package/third_party/quiche/quiche/quic/test_tools/simulator/simulator_test.cc +1 -1
  346. package/third_party/quiche/quiche/quic/test_tools/test_ticket_crypter.cc +1 -1
  347. package/third_party/quiche/quiche/quic/test_tools/test_ticket_crypter.h +2 -2
  348. package/third_party/quiche/quiche/quic/{core/crypto → tools}/crypto_message_printer_bin.cc +0 -0
  349. package/third_party/quiche/quiche/quic/{core/qpack → tools}/qpack_offline_decoder_bin.cc +0 -0
  350. package/third_party/quiche/quiche/quic/tools/quic_client_interop_test_bin.cc +4 -3
  351. package/third_party/quiche/quiche/quic/tools/quic_memory_cache_backend_test.cc +3 -31
  352. package/third_party/quiche/quiche/quic/tools/quic_packet_printer_bin.cc +2 -2
  353. package/third_party/quiche/quiche/quic/tools/quic_simple_server_session.h +1 -1
  354. package/third_party/quiche/quiche/quic/tools/quic_simple_server_session_test.cc +1 -1
  355. package/third_party/quiche/quiche/quic/tools/quic_toy_client.cc +52 -38
  356. package/third_party/quiche/quiche/quic/tools/quic_toy_server.cc +10 -7
  357. package/third_party/quiche/quiche/quic/tools/simple_ticket_crypter.cc +1 -1
  358. package/third_party/quiche/quiche/quic/tools/simple_ticket_crypter.h +1 -1
  359. package/third_party/quiche/quiche/quic/tools/web_transport_test_visitors.h +3 -2
  360. package/third_party/quiche/quiche/spdy/core/array_output_buffer.h +1 -1
  361. package/third_party/quiche/quiche/spdy/core/hpack/hpack_decoder_adapter_test.cc +1 -1
  362. package/third_party/quiche/quiche/spdy/core/hpack/hpack_encoder_test.cc +2 -1
  363. package/third_party/quiche/quiche/spdy/core/hpack/hpack_header_table_test.cc +1 -1
  364. package/third_party/quiche/quiche/spdy/core/hpack/hpack_round_trip_test.cc +2 -1
  365. package/third_party/quiche/quiche/spdy/core/hpack/hpack_static_table_test.cc +1 -1
  366. package/third_party/quiche/quiche/spdy/core/http2_frame_decoder_adapter.cc +8 -6
  367. package/third_party/quiche/quiche/spdy/core/http2_frame_decoder_adapter.h +17 -6
  368. package/third_party/quiche/quiche/spdy/core/metadata_extension.cc +1 -1
  369. package/third_party/quiche/quiche/spdy/core/metadata_extension_test.cc +1 -1
  370. package/third_party/quiche/quiche/spdy/core/spdy_framer_test.cc +21 -17
  371. package/third_party/quiche/quiche/spdy/core/spdy_intrusive_list_test.cc +3 -3
  372. package/third_party/quiche/quiche/spdy/core/spdy_no_op_visitor.h +6 -4
  373. package/third_party/quiche/quiche/spdy/core/spdy_pinnable_buffer_piece_test.cc +1 -1
  374. package/third_party/quiche/quiche/spdy/core/spdy_prefixed_buffer_reader_test.cc +1 -1
  375. package/third_party/quiche/quiche/spdy/core/spdy_protocol_test.cc +1 -1
  376. package/third_party/quiche/quiche/spdy/test_tools/mock_spdy_framer_visitor.h +5 -4
  377. package/third_party/boringssl/src/util/bot/cmake-win32.zip.sha1 +0 -1
  378. package/third_party/quiche/quiche/common/platform/api/quiche_mock_log.h +0 -18
  379. package/third_party/quiche/quiche/common/platform/api/quiche_test_helpers.h +0 -8
  380. package/third_party/quiche/quiche/quic/platform/api/quic_mock_log.h +0 -19
  381. package/third_party/quiche/quiche/quic/tools/quic_transport_simple_server_dispatcher.cc +0 -51
  382. package/third_party/quiche/quiche/quic/tools/quic_transport_simple_server_dispatcher.h +0 -41
  383. package/third_party/quiche/quiche/quic/tools/quic_transport_simple_server_session.cc +0 -168
  384. package/third_party/quiche/quiche/quic/tools/quic_transport_simple_server_session.h +0 -78
@@ -66,11 +66,12 @@
66
66
  #include <openssl/thread.h>
67
67
  #include <openssl/type_check.h>
68
68
 
69
- #include "internal.h"
70
- #include "../bn/internal.h"
71
69
  #include "../../internal.h"
70
+ #include "../bn/internal.h"
72
71
  #include "../delocate.h"
73
72
  #include "../rand/fork_detect.h"
73
+ #include "../service_indicator/internal.h"
74
+ #include "internal.h"
74
75
 
75
76
 
76
77
  int rsa_check_public_key(const RSA *rsa) {
@@ -1419,6 +1420,10 @@ int RSA_generate_key_fips(RSA *rsa, int bits, BN_GENCB *cb) {
1419
1420
  BN_set_word(e, RSA_F4) &&
1420
1421
  RSA_generate_key_ex_maybe_fips(rsa, bits, e, cb, /*check_fips=*/1);
1421
1422
  BN_free(e);
1423
+
1424
+ if (ret) {
1425
+ FIPS_service_indicator_update_state();
1426
+ }
1422
1427
  return ret;
1423
1428
  }
1424
1429
 
@@ -36,6 +36,7 @@
36
36
  #include "../ecdsa/internal.h"
37
37
  #include "../rand/internal.h"
38
38
  #include "../rsa/internal.h"
39
+ #include "../service_indicator/internal.h"
39
40
  #include "../tls/internal.h"
40
41
 
41
42
 
@@ -616,9 +617,11 @@ err:
616
617
  #if defined(BORINGSSL_FIPS)
617
618
 
618
619
  static void run_self_test_rsa(void) {
620
+ FIPS_service_indicator_lock_state();
619
621
  if (!boringssl_self_test_rsa()) {
620
622
  BORINGSSL_FIPS_abort();
621
623
  }
624
+ FIPS_service_indicator_unlock_state();
622
625
  }
623
626
 
624
627
  DEFINE_STATIC_ONCE(g_self_test_once_rsa);
@@ -628,9 +631,11 @@ void boringssl_ensure_rsa_self_test(void) {
628
631
  }
629
632
 
630
633
  static void run_self_test_ecc(void) {
634
+ FIPS_service_indicator_lock_state();
631
635
  if (!boringssl_self_test_ecc()) {
632
636
  BORINGSSL_FIPS_abort();
633
637
  }
638
+ FIPS_service_indicator_unlock_state();
634
639
  }
635
640
 
636
641
  DEFINE_STATIC_ONCE(g_self_test_once_ecc);
@@ -640,9 +645,11 @@ void boringssl_ensure_ecc_self_test(void) {
640
645
  }
641
646
 
642
647
  static void run_self_test_ffdh(void) {
648
+ FIPS_service_indicator_lock_state();
643
649
  if (!boringssl_self_test_ffdh()) {
644
650
  BORINGSSL_FIPS_abort();
645
651
  }
652
+ FIPS_service_indicator_unlock_state();
646
653
  }
647
654
 
648
655
  DEFINE_STATIC_ONCE(g_self_test_once_ffdh);
@@ -0,0 +1,89 @@
1
+ /* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ *
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ #ifndef OPENSSL_HEADER_SERVICE_INDICATOR_INTERNAL_H
16
+ #define OPENSSL_HEADER_SERVICE_INDICATOR_INTERNAL_H
17
+
18
+ #include <openssl/base.h>
19
+ #include <openssl/service_indicator.h>
20
+
21
+ #if defined(BORINGSSL_FIPS)
22
+
23
+ // FIPS_service_indicator_update_state records that an approved service has been
24
+ // invoked.
25
+ void FIPS_service_indicator_update_state(void);
26
+
27
+ // FIPS_service_indicator_lock_state and |FIPS_service_indicator_unlock_state|
28
+ // stop |FIPS_service_indicator_update_state| from actually updating the service
29
+ // indicator. This is used when a primitive calls a potentially approved
30
+ // primitive to avoid false positives. For example, just because a key
31
+ // generation calls |RAND_bytes| (and thus the approved DRBG) doesn't mean that
32
+ // the key generation operation itself is approved.
33
+ //
34
+ // This lock nests: i.e. locking twice is fine so long as each lock is paired
35
+ // with an unlock. If the (64-bit) counter overflows, the process aborts.
36
+ void FIPS_service_indicator_lock_state(void);
37
+ void FIPS_service_indicator_unlock_state(void);
38
+
39
+ // The following functions may call |FIPS_service_indicator_update_state| if
40
+ // their parameter specifies an approved operation.
41
+
42
+ void AEAD_GCM_verify_service_indicator(const EVP_AEAD_CTX *ctx);
43
+ void AEAD_CCM_verify_service_indicator(const EVP_AEAD_CTX *ctx);
44
+ void EC_KEY_keygen_verify_service_indicator(const EC_KEY *eckey);
45
+ void ECDH_verify_service_indicator(const EC_KEY *ec_key);
46
+ void EVP_Cipher_verify_service_indicator(const EVP_CIPHER_CTX *ctx);
47
+ void EVP_DigestSign_verify_service_indicator(const EVP_MD_CTX *ctx);
48
+ void EVP_DigestVerify_verify_service_indicator(const EVP_MD_CTX *ctx);
49
+ void HMAC_verify_service_indicator(const EVP_MD *evp_md);
50
+ void TLSKDF_verify_service_indicator(const EVP_MD *dgst);
51
+
52
+ #else
53
+
54
+ // Service indicator functions are no-ops in non-FIPS builds.
55
+
56
+ OPENSSL_INLINE void FIPS_service_indicator_update_state(void) {}
57
+ OPENSSL_INLINE void FIPS_service_indicator_lock_state(void) {}
58
+ OPENSSL_INLINE void FIPS_service_indicator_unlock_state(void) {}
59
+
60
+ OPENSSL_INLINE void AEAD_GCM_verify_service_indicator(
61
+ OPENSSL_UNUSED const EVP_AEAD_CTX *ctx) {}
62
+
63
+ OPENSSL_INLINE void AEAD_CCM_verify_service_indicator(
64
+ OPENSSL_UNUSED const EVP_AEAD_CTX *ctx) {}
65
+
66
+ OPENSSL_INLINE void EC_KEY_keygen_verify_service_indicator(
67
+ OPENSSL_UNUSED const EC_KEY *eckey) {}
68
+
69
+ OPENSSL_INLINE void ECDH_verify_service_indicator(
70
+ OPENSSL_UNUSED const EC_KEY *ec_key) {}
71
+
72
+ OPENSSL_INLINE void EVP_Cipher_verify_service_indicator(
73
+ OPENSSL_UNUSED const EVP_CIPHER_CTX *ctx) {}
74
+
75
+ OPENSSL_INLINE void EVP_DigestSign_verify_service_indicator(
76
+ OPENSSL_UNUSED const EVP_MD_CTX *ctx) {}
77
+
78
+ OPENSSL_INLINE void EVP_DigestVerify_verify_service_indicator(
79
+ OPENSSL_UNUSED const EVP_MD_CTX *ctx) {}
80
+
81
+ OPENSSL_INLINE void HMAC_verify_service_indicator(
82
+ OPENSSL_UNUSED const EVP_MD *evp_md) {}
83
+
84
+ OPENSSL_INLINE void TLSKDF_verify_service_indicator(
85
+ OPENSSL_UNUSED const EVP_MD *dgst) {}
86
+
87
+ #endif // BORINGSSL_FIPS
88
+
89
+ #endif // OPENSSL_HEADER_SERVICE_INDICATOR_INTERNAL_H
@@ -0,0 +1,333 @@
1
+ /* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2
+ *
3
+ * Permission to use, copy, modify, and/or distribute this software for any
4
+ * purpose with or without fee is hereby granted, provided that the above
5
+ * copyright notice and this permission notice appear in all copies.
6
+ *
7
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
8
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
9
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
10
+ * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
11
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
12
+ * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
13
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */
14
+
15
+ #include <openssl/crypto.h>
16
+ #include <openssl/ec.h>
17
+ #include <openssl/ec_key.h>
18
+ #include <openssl/evp.h>
19
+ #include <openssl/service_indicator.h>
20
+
21
+ #include "../../evp/internal.h"
22
+ #include "../../internal.h"
23
+ #include "internal.h"
24
+
25
+ #if defined(BORINGSSL_FIPS)
26
+
27
+ #define STATE_UNLOCKED 0
28
+
29
+ // fips_service_indicator_state is a thread-local structure that stores the
30
+ // state of the FIPS service indicator.
31
+ struct fips_service_indicator_state {
32
+ // lock_state records the number of times the indicator has been locked.
33
+ // When it is zero (i.e. |STATE_UNLOCKED|) then the indicator can be updated.
34
+ uint64_t lock_state;
35
+ // counter is the indicator state. It is incremented when an approved service
36
+ // completes.
37
+ uint64_t counter;
38
+ };
39
+
40
+ // service_indicator_get returns a pointer to the |fips_service_indicator_state|
41
+ // for the current thread. It returns NULL on error.
42
+ //
43
+ // FIPS 140-3 requires that the module should provide the service indicator
44
+ // for approved services irrespective of whether the user queries it or not.
45
+ // Hence, it is lazily initialized in any call to an approved service.
46
+ static struct fips_service_indicator_state *service_indicator_get(void) {
47
+ struct fips_service_indicator_state *indicator = CRYPTO_get_thread_local(
48
+ OPENSSL_THREAD_LOCAL_FIPS_SERVICE_INDICATOR_STATE);
49
+
50
+ if (indicator == NULL) {
51
+ indicator = OPENSSL_malloc(sizeof(struct fips_service_indicator_state));
52
+ if (indicator == NULL) {
53
+ OPENSSL_PUT_ERROR(CRYPTO, ERR_R_MALLOC_FAILURE);
54
+ return NULL;
55
+ }
56
+
57
+ indicator->lock_state = STATE_UNLOCKED;
58
+ indicator->counter = 0;
59
+
60
+ if (!CRYPTO_set_thread_local(
61
+ OPENSSL_THREAD_LOCAL_FIPS_SERVICE_INDICATOR_STATE, indicator,
62
+ OPENSSL_free)) {
63
+ OPENSSL_PUT_ERROR(CRYPTO, ERR_R_INTERNAL_ERROR);
64
+ return NULL;
65
+ }
66
+ }
67
+
68
+ return indicator;
69
+ }
70
+
71
+ static uint64_t service_indicator_get_counter(void) {
72
+ struct fips_service_indicator_state *indicator = service_indicator_get();
73
+ if (indicator == NULL) {
74
+ return 0;
75
+ }
76
+ return indicator->counter;
77
+ }
78
+
79
+ uint64_t FIPS_service_indicator_before_call(void) {
80
+ return service_indicator_get_counter();
81
+ }
82
+
83
+ uint64_t FIPS_service_indicator_after_call(void) {
84
+ return service_indicator_get_counter();
85
+ }
86
+
87
+ void FIPS_service_indicator_update_state(void) {
88
+ struct fips_service_indicator_state *indicator = service_indicator_get();
89
+ if (indicator && indicator->lock_state == STATE_UNLOCKED) {
90
+ indicator->counter++;
91
+ }
92
+ }
93
+
94
+ void FIPS_service_indicator_lock_state(void) {
95
+ struct fips_service_indicator_state *indicator = service_indicator_get();
96
+ if (indicator == NULL) {
97
+ return;
98
+ }
99
+
100
+ // |FIPS_service_indicator_lock_state| and
101
+ // |FIPS_service_indicator_unlock_state| should not under/overflow in normal
102
+ // operation. They are still checked and errors added to facilitate testing in
103
+ // service_indicator_test.cc. This should only happen if lock/unlock are
104
+ // called in an incorrect order or multiple times in the same function.
105
+ const uint64_t new_state = indicator->lock_state + 1;
106
+ if (new_state < indicator->lock_state) {
107
+ // Overflow. This would imply that our call stack length has exceeded a
108
+ // |uint64_t| which impossible on a 64-bit system.
109
+ abort();
110
+ }
111
+
112
+ indicator->lock_state = new_state;
113
+ }
114
+
115
+ void FIPS_service_indicator_unlock_state(void) {
116
+ struct fips_service_indicator_state *indicator = service_indicator_get();
117
+ if (indicator == NULL) {
118
+ return;
119
+ }
120
+
121
+ if (indicator->lock_state == 0) {
122
+ abort();
123
+ }
124
+
125
+ indicator->lock_state--;
126
+ }
127
+
128
+ void AEAD_GCM_verify_service_indicator(const EVP_AEAD_CTX *ctx) {
129
+ const size_t key_len = EVP_AEAD_key_length(ctx->aead);
130
+ if (key_len == 16 || key_len == 32) {
131
+ FIPS_service_indicator_update_state();
132
+ }
133
+ }
134
+
135
+ void AEAD_CCM_verify_service_indicator(const EVP_AEAD_CTX *ctx) {
136
+ if (EVP_AEAD_key_length(ctx->aead) == 16 && ctx->tag_len == 4) {
137
+ FIPS_service_indicator_update_state();
138
+ }
139
+ }
140
+
141
+ // is_ec_fips_approved returns one if the curve corresponding to the given NID
142
+ // is FIPS approved, and zero otherwise.
143
+ static int is_ec_fips_approved(int curve_nid) {
144
+ switch (curve_nid) {
145
+ case NID_secp224r1:
146
+ case NID_X9_62_prime256v1:
147
+ case NID_secp384r1:
148
+ case NID_secp521r1:
149
+ return 1;
150
+ default:
151
+ return 0;
152
+ }
153
+ }
154
+
155
+ // is_md_fips_approved_for_signing returns one if the given message digest type
156
+ // is FIPS approved for signing, and zero otherwise.
157
+ static int is_md_fips_approved_for_signing(int md_type) {
158
+ switch (md_type) {
159
+ case NID_sha224:
160
+ case NID_sha256:
161
+ case NID_sha384:
162
+ case NID_sha512:
163
+ case NID_sha512_256:
164
+ return 1;
165
+ default:
166
+ return 0;
167
+ }
168
+ }
169
+
170
+ // is_md_fips_approved_for_verifying returns one if the given message digest
171
+ // type is FIPS approved for verifying, and zero otherwise.
172
+ static int is_md_fips_approved_for_verifying(int md_type) {
173
+ switch (md_type) {
174
+ case NID_sha1:
175
+ case NID_sha224:
176
+ case NID_sha256:
177
+ case NID_sha384:
178
+ case NID_sha512:
179
+ case NID_sha512_256:
180
+ return 1;
181
+ default:
182
+ return 0;
183
+ }
184
+ }
185
+
186
+ static void evp_md_ctx_verify_service_indicator(const EVP_MD_CTX *ctx,
187
+ int rsa_1024_ok,
188
+ int (*md_ok)(int md_type)) {
189
+ if (EVP_MD_CTX_md(ctx) == NULL) {
190
+ // Signature schemes without a prehash are currently never FIPS approved.
191
+ goto err;
192
+ }
193
+
194
+ EVP_PKEY_CTX *const pctx = ctx->pctx;
195
+ const EVP_PKEY *const pkey = EVP_PKEY_CTX_get0_pkey(pctx);
196
+ const int pkey_type = EVP_PKEY_id(pkey);
197
+ const int md_type = EVP_MD_CTX_type(ctx);
198
+
199
+ // EVP_PKEY_RSA_PSS SPKIs aren't supported.
200
+ if (pkey_type == EVP_PKEY_RSA) {
201
+ // Message digest used in the private key should be of the same type
202
+ // as the given one, so we extract the MD type from the |EVP_PKEY|
203
+ // and compare it with the type in |ctx|.
204
+ const EVP_MD *pctx_md;
205
+ if (!EVP_PKEY_CTX_get_signature_md(pctx, &pctx_md)) {
206
+ goto err;
207
+ }
208
+ if (EVP_MD_type(pctx_md) != md_type) {
209
+ goto err;
210
+ }
211
+
212
+ int padding;
213
+ if (!EVP_PKEY_CTX_get_rsa_padding(pctx, &padding)) {
214
+ goto err;
215
+ }
216
+ if (padding == RSA_PKCS1_PSS_PADDING) {
217
+ int salt_len;
218
+ const EVP_MD *mgf1_md;
219
+ if (!EVP_PKEY_CTX_get_rsa_pss_saltlen(pctx, &salt_len) ||
220
+ !EVP_PKEY_CTX_get_rsa_mgf1_md(pctx, &mgf1_md) ||
221
+ (salt_len != -1 && salt_len != (int)EVP_MD_size(pctx_md)) ||
222
+ EVP_MD_type(mgf1_md) != md_type) {
223
+ // Only PSS where saltLen == hashLen is tested with ACVP. Cases with
224
+ // non-standard padding functions are also excluded.
225
+ goto err;
226
+ }
227
+ }
228
+
229
+ // The approved RSA key sizes for signing are 2048, 3072 and 4096 bits.
230
+ // Note: |EVP_PKEY_size| returns the size in bytes.
231
+ size_t pkey_size = EVP_PKEY_size(ctx->pctx->pkey);
232
+
233
+ // Check if the MD type and the RSA key size are approved.
234
+ if (md_ok(md_type) &&
235
+ ((rsa_1024_ok && pkey_size == 128) || pkey_size == 256 ||
236
+ pkey_size == 384 || pkey_size == 512)) {
237
+ FIPS_service_indicator_update_state();
238
+ }
239
+ } else if (pkey_type == EVP_PKEY_EC) {
240
+ // Check if the MD type and the elliptic curve are approved.
241
+ if (md_ok(md_type) && is_ec_fips_approved(EC_GROUP_get_curve_name(
242
+ ctx->pctx->pkey->pkey.ec->group))) {
243
+ FIPS_service_indicator_update_state();
244
+ }
245
+ }
246
+
247
+ err:
248
+ // Ensure that junk errors aren't left on the queue.
249
+ ERR_clear_error();
250
+ }
251
+
252
+ void EC_KEY_keygen_verify_service_indicator(const EC_KEY *eckey) {
253
+ if (is_ec_fips_approved(EC_GROUP_get_curve_name(eckey->group))) {
254
+ FIPS_service_indicator_update_state();
255
+ }
256
+ }
257
+
258
+ void ECDH_verify_service_indicator(const EC_KEY *ec_key) {
259
+ if (is_ec_fips_approved(EC_GROUP_get_curve_name(EC_KEY_get0_group(ec_key)))) {
260
+ FIPS_service_indicator_update_state();
261
+ }
262
+ }
263
+
264
+ void EVP_Cipher_verify_service_indicator(const EVP_CIPHER_CTX *ctx) {
265
+ switch (EVP_CIPHER_CTX_nid(ctx)) {
266
+ case NID_aes_128_ecb:
267
+ case NID_aes_192_ecb:
268
+ case NID_aes_256_ecb:
269
+
270
+ case NID_aes_128_cbc:
271
+ case NID_aes_192_cbc:
272
+ case NID_aes_256_cbc:
273
+
274
+ case NID_aes_128_ctr:
275
+ case NID_aes_192_ctr:
276
+ case NID_aes_256_ctr:
277
+ FIPS_service_indicator_update_state();
278
+ }
279
+ }
280
+
281
+ void EVP_DigestVerify_verify_service_indicator(const EVP_MD_CTX *ctx) {
282
+ return evp_md_ctx_verify_service_indicator(ctx, /*rsa_1024_ok=*/1,
283
+ is_md_fips_approved_for_verifying);
284
+ }
285
+
286
+ void EVP_DigestSign_verify_service_indicator(const EVP_MD_CTX *ctx) {
287
+ return evp_md_ctx_verify_service_indicator(ctx, /*rsa_1024_ok=*/0,
288
+ is_md_fips_approved_for_signing);
289
+ }
290
+
291
+ void HMAC_verify_service_indicator(const EVP_MD *evp_md) {
292
+ switch (evp_md->type) {
293
+ case NID_sha1:
294
+ case NID_sha224:
295
+ case NID_sha256:
296
+ case NID_sha384:
297
+ case NID_sha512:
298
+ case NID_sha512_256:
299
+ FIPS_service_indicator_update_state();
300
+ break;
301
+ }
302
+ }
303
+
304
+ void TLSKDF_verify_service_indicator(const EVP_MD *md) {
305
+ // HMAC-MD5, HMAC-SHA1, and HMAC-MD5/HMAC-SHA1 (both used concurrently) are
306
+ // approved for use in the KDF in TLS 1.0/1.1.
307
+ // HMAC-SHA{256, 384, 512} are approved for use in the KDF in TLS 1.2.
308
+ // These Key Derivation functions are to be used in the context of the TLS
309
+ // protocol.
310
+ switch (EVP_MD_type(md)) {
311
+ case NID_md5:
312
+ case NID_sha1:
313
+ case NID_md5_sha1:
314
+ case NID_sha256:
315
+ case NID_sha384:
316
+ case NID_sha512:
317
+ FIPS_service_indicator_update_state();
318
+ break;
319
+ }
320
+ }
321
+
322
+ #else
323
+
324
+ uint64_t FIPS_service_indicator_before_call(void) { return 0; }
325
+
326
+ uint64_t FIPS_service_indicator_after_call(void) {
327
+ // One is returned so that the return value is always greater than zero, the
328
+ // return value of |FIPS_service_indicator_before_call|. This makes everything
329
+ // report as "approved" in non-FIPS builds.
330
+ return 1;
331
+ }
332
+
333
+ #endif // BORINGSSL_FIPS