diff options
Diffstat (limited to 'src/ssl/test/runner/handshake_messages.go')
-rw-r--r-- | src/ssl/test/runner/handshake_messages.go | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/src/ssl/test/runner/handshake_messages.go b/src/ssl/test/runner/handshake_messages.go index f12ca1ac..ac52eed4 100644 --- a/src/ssl/test/runner/handshake_messages.go +++ b/src/ssl/test/runner/handshake_messages.go @@ -298,6 +298,7 @@ type clientHelloMsg struct { pad int compressedCertAlgs []uint16 delegatedCredentials bool + pqExperimentSignal bool } func (m *clientHelloMsg) equal(i interface{}) bool { @@ -352,7 +353,8 @@ func (m *clientHelloMsg) equal(i interface{}) bool { m.emptyExtensions == m1.emptyExtensions && m.pad == m1.pad && eqUint16s(m.compressedCertAlgs, m1.compressedCertAlgs) && - m.delegatedCredentials == m1.delegatedCredentials + m.delegatedCredentials == m1.delegatedCredentials && + m.pqExperimentSignal == m1.pqExperimentSignal } func (m *clientHelloMsg) marshalKeyShares(bb *byteBuilder) { @@ -598,6 +600,11 @@ func (m *clientHelloMsg) marshal() []byte { extensions.addU16(extensionDelegatedCredentials) extensions.addU16(0) // Length is always 0 } + if m.pqExperimentSignal { + extensions.addU16(extensionPQExperimentSignal) + extensions.addU16(0) // Length is always 0 + } + // The PSK extension must be last. See https://tools.ietf.org/html/rfc8446#section-4.2.11 if len(m.pskIdentities) > 0 && !m.pskBinderFirst { extensions.addU16(extensionPreSharedKey) @@ -724,6 +731,7 @@ func (m *clientHelloMsg) unmarshal(data []byte) bool { m.extendedMasterSecret = false m.customExtension = "" m.delegatedCredentials = false + m.pqExperimentSignal = false if len(reader) == 0 { // ClientHello is optionally followed by extension data @@ -959,6 +967,11 @@ func (m *clientHelloMsg) unmarshal(data []byte) bool { return false } m.delegatedCredentials = true + case extensionPQExperimentSignal: + if len(body) != 0 { + return false + } + m.pqExperimentSignal = true } if isGREASEValue(extension) { @@ -1226,6 +1239,7 @@ type serverExtensions struct { supportedCurves []CurveID quicTransportParams []byte serverNameAck bool + pqExperimentSignal bool } func (m *serverExtensions) marshal(extensions *byteBuilder) { @@ -1360,6 +1374,10 @@ func (m *serverExtensions) marshal(extensions *byteBuilder) { extensions.addU16(extensionServerName) extensions.addU16(0) // zero length } + if m.pqExperimentSignal { + extensions.addU16(extensionPQExperimentSignal) + extensions.addU16(0) // zero length + } } func (m *serverExtensions) unmarshal(data byteReader, version uint16) bool { @@ -1468,6 +1486,11 @@ func (m *serverExtensions) unmarshal(data byteReader, version uint16) bool { return false } m.hasEarlyData = true + case extensionPQExperimentSignal: + if len(body) != 0 { + return false + } + m.pqExperimentSignal = true default: // Unknown extensions are illegal from the server. return false |