github quic-go/quic-go v0.60.0

one month ago

Starting with v0.60.0, quic-go is ready for use in FIPS 140-3 environments when built with Go 1.26 or newer and used with the Go Cryptographic Module. See FIPS140.md for details.

This required a number of changes:

  • switch QUIC HKDF usage to the standard library crypto/hkdf: #5461
  • use the Go standard library's TLS 1.3 AES-GCM implementation for QUIC packet protection AEADs: #5624
  • use cipher.NewGCMWithRandomNonce for address validation token encryption: #5625
  • disable FIPS 140-3 enforcement for the Retry packet integrity tag, which is outside the FIPS 140-3 scope: #5630
  • disable FIPS 140-3 enforcement for Initial packet protection, whose secrets are derived from public RFC constants: #5640
  • guard the internal ChaCha20-Poly1305 code path so it is not used in FIPS 140-3 mode: #5633
  • add FIPS / non-FIPS data transfer integration tests, including Retry and key updates: #5646

Breaking Changes

  • quic-go now requires Go 1.25 or newer: #5561

Notable Fixes

  • path probe packets now correctly pass the OOB data (needed to select the correct network interface in some system configurations): #5544, thanks to @on-keyday
  • cancel the Stream and SendStream context when the connection is closed: #5556, thanks to @zvdy
  • http3: validate Extended CONNECT ``:protocol` pseudo-header values according to HTTP token syntax: #5639
  • http3: always set http.Request.Scheme and http.Request.Host: #5554, thanks to @qiulaidongfeng
  • http3: fixed a nil pointer dereference when Server.Logger is unset: #5671
  • fix maximum datagram size estimation after MTU discovery: #5650, thanks to @jinq0123
  • OpenStreamSync now reliably returns the context error when the context is cancelled: #5660

Behind the scenes

In the last couple of months, we have reworked our fuzz setup and the integration into OSS-Fuzz: First of all, all fuzzers were rewritten to Go native fuzzing (#5592, #5599, #5600, #5603, #5613). We also added new fuzzers for the HTTP/3 frame parser (#5595), HTTP/3 request, response and trailer decoding (#5602) and the STREAM / CRYPTO frame sorter (#5620).

Since native Go fuzzing uses a different seed corpus format, we now use the newly implemented go-ossfuzz-seeds library to generate OSS-Fuzz compatible seed corpus files from f.Add calls.

We also enable ClusterFuzzLite batch fuzzing (#5605), including. a seed corpus (#5607). Fuzz coverage for both ClusterFuzzLite batch fuzzing (#5641) and for OSS-Fuzz fuzzing (#5655) is now submitted to Codecov.

Changelog

New Contributors

Full Changelog: v0.59.0...v0.60.0

Don't miss a new quic-go release

NewReleases is sending notifications on new releases.