quic: refactor keys for key updates

Refactor how we store encryption keys in preparation for adding
support for key updates.

Previously, we had a single "keys" type containing header and packet
protection key material. With key update, the 1-RTT header protection
keys are consistent across the lifetime of a connection, while
packet protection keys vary. Separate out the header and packet
protection keys into distinct types.

Add "fixed" key types for keys which remain fixed across a
connection's lifetime and do not update. For the moment,
1-RTT keys are still fixed.

Remove a number of can-never-happen error returns from
key handling paths. We were previously inconsistent about
where to panic and where to return an error on these paths;
we now consistently panic in paths where errors can only
occur due to a bug. (For example, attempting to create an
AEAD with an incorrect secret size.)

No functional changes, this is purely refactoring.

For golang/go#58547

Change-Id: I49f83091517186e452845b65a1597add60e5fc92
Reviewed-on: https://go-review.googlesource.com/c/net/+/529155
Reviewed-by: Jonathan Amsterdam <jba@google.com>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
10 files changed
tree: c847e6228da2f9c5de7884d97802e97a8c3523bd
  1. bpf/
  2. context/
  3. dict/
  4. dns/
  5. html/
  6. http/
  7. http2/
  8. icmp/
  9. idna/
  10. internal/
  11. ipv4/
  12. ipv6/
  13. lif/
  14. nettest/
  15. netutil/
  16. proxy/
  17. publicsuffix/
  18. route/
  19. trace/
  20. webdav/
  21. websocket/
  22. xsrftoken/
  23. .gitattributes
  24. .gitignore
  25. codereview.cfg
  27. go.mod
  28. go.sum
  31. README.md

Go Networking

Go Reference

This repository holds supplementary Go networking libraries.


The easiest way to install is to run go get -u golang.org/x/net. You can also manually git clone the repository to $GOPATH/src/golang.org/x/net.

Report Issues / Send Patches

This repository uses Gerrit for code changes. To learn how to submit changes to this repository, see https://golang.org/doc/contribute.html. The main issue tracker for the net repository is located at https://github.com/golang/go/issues. Prefix your issue with “x/net:” in the subject line, so it is easy to find.