interface.go 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package handshake
  2. import (
  3. "crypto/x509"
  4. "github.com/bifurcation/mint"
  5. "github.com/lucas-clemente/quic-go/internal/crypto"
  6. "github.com/lucas-clemente/quic-go/internal/protocol"
  7. )
  8. // Sealer seals a packet
  9. type Sealer interface {
  10. Seal(dst, src []byte, packetNumber protocol.PacketNumber, associatedData []byte) []byte
  11. Overhead() int
  12. }
  13. // mintTLS combines some methods needed to interact with mint.
  14. type mintTLS interface {
  15. crypto.TLSExporter
  16. Handshake() mint.Alert
  17. }
  18. // A TLSExtensionHandler sends and received the QUIC TLS extension.
  19. // It provides the parameters sent by the peer on a channel.
  20. type TLSExtensionHandler interface {
  21. Send(mint.HandshakeType, *mint.ExtensionList) error
  22. Receive(mint.HandshakeType, *mint.ExtensionList) error
  23. GetPeerParams() <-chan TransportParameters
  24. }
  25. type baseCryptoSetup interface {
  26. HandleCryptoStream() error
  27. ConnectionState() ConnectionState
  28. GetSealer() (protocol.EncryptionLevel, Sealer)
  29. GetSealerWithEncryptionLevel(protocol.EncryptionLevel) (Sealer, error)
  30. GetSealerForCryptoStream() (protocol.EncryptionLevel, Sealer)
  31. }
  32. // CryptoSetup is the crypto setup used by gQUIC
  33. type CryptoSetup interface {
  34. baseCryptoSetup
  35. Open(dst, src []byte, packetNumber protocol.PacketNumber, associatedData []byte) ([]byte, protocol.EncryptionLevel, error)
  36. }
  37. // CryptoSetupTLS is the crypto setup used by IETF QUIC
  38. type CryptoSetupTLS interface {
  39. baseCryptoSetup
  40. OpenHandshake(dst, src []byte, packetNumber protocol.PacketNumber, associatedData []byte) ([]byte, error)
  41. Open1RTT(dst, src []byte, packetNumber protocol.PacketNumber, associatedData []byte) ([]byte, error)
  42. }
  43. // ConnectionState records basic details about the QUIC connection.
  44. // Warning: This API should not be considered stable and might change soon.
  45. type ConnectionState struct {
  46. HandshakeComplete bool // handshake is complete
  47. ServerName string // server name requested by client, if any (server side only)
  48. PeerCertificates []*x509.Certificate // certificate chain presented by remote peer
  49. }