Skip to content

Commit 1b8ed4f

Browse files
jhoylaLekensteyn
authored andcommitted
Add mTLS flag support
1 parent 17c16b6 commit 1b8ed4f

File tree

2 files changed

+26
-4
lines changed

2 files changed

+26
-4
lines changed

src/crypto/tls/handshake_messages.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -243,7 +243,9 @@ func (m *clientHelloMsg) marshal() ([]byte, error) {
243243
if len(m.tlsFlags) > 0 {
244244
exts.AddUint16(extensionTLSFlags)
245245
exts.AddUint16LengthPrefixed(func(exts *cryptobyte.Builder) {
246-
exts.AddBytes(m.tlsFlags)
246+
exts.AddUint8LengthPrefixed(func(exts *cryptobyte.Builder) {
247+
exts.AddBytes(m.tlsFlags)
248+
})
247249
})
248250
}
249251
if len(m.cookie) > 0 {
@@ -585,9 +587,13 @@ func (m *clientHelloMsg) unmarshal(data []byte) bool {
585587
m.supportedVersions = append(m.supportedVersions, vers)
586588
}
587589
case extensionTLSFlags:
588-
for !extData.Empty() {
590+
var flagsList cryptobyte.String
591+
if !extData.ReadUint8LengthPrefixed(&flagsList) || flagsList.Empty() {
592+
return false
593+
}
594+
for !flagsList.Empty() {
589595
var flagByte uint8
590-
if !extData.ReadUint8(&flagByte) {
596+
if !flagsList.ReadUint8(&flagByte) {
591597
return false
592598
}
593599
m.tlsFlags = append(m.tlsFlags, flagByte)

src/crypto/tls/handshake_server_tls13.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,18 @@ GroupSelection:
320320
return errors.New("tls: invalid client key share")
321321
}
322322
if len(hs.clientHello.tlsFlags) != 0 {
323-
tlsFlags, err := decodeFlags(hs.clientHello.tlsFlags)
323+
supportedFlags, err := encodeFlags(hs.c.config.TLSFlagsSupported)
324+
if err != nil {
325+
return errors.New("tls: invalid server flags")
326+
}
327+
var mutuallySupportedFlags []byte
328+
for i, sFB := range supportedFlags {
329+
if i >= len(hs.clientHello.tlsFlags) {
330+
break
331+
}
332+
mutuallySupportedFlags = append(mutuallySupportedFlags, hs.clientHello.tlsFlags[i]&sFB)
333+
}
334+
tlsFlags, err := decodeFlags(mutuallySupportedFlags)
324335
if err == nil {
325336
hs.tlsFlags = tlsFlags
326337
}
@@ -910,6 +921,11 @@ func (hs *serverHandshakeStateTLS13) sendServerParameters() error {
910921
}
911922

912923
func (hs *serverHandshakeStateTLS13) requestClientCert() bool {
924+
for _, flag := range hs.tlsFlags {
925+
if flag == FlagSupportMTLS {
926+
return true
927+
}
928+
}
913929
return hs.c.config.ClientAuth >= RequestClientCert && !hs.usingPSK
914930
}
915931

0 commit comments

Comments
 (0)