MCPcopy Create free account
hub / github.com/XTLS/Go / sendServerParameters

Method sendServerParameters

handshake_server_tls13.go:514–568  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

512}
513
514func (hs *serverHandshakeStateTLS13) sendServerParameters() error {
515 c := hs.c
516
517 hs.transcript.Write(hs.clientHello.marshal())
518 hs.transcript.Write(hs.hello.marshal())
519 if _, err := c.writeRecord(recordTypeHandshake, hs.hello.marshal()); err != nil {
520 return err
521 }
522
523 if err := hs.sendDummyChangeCipherSpec(); err != nil {
524 return err
525 }
526
527 earlySecret := hs.earlySecret
528 if earlySecret == nil {
529 earlySecret = hs.suite.extract(nil, nil)
530 }
531 hs.handshakeSecret = hs.suite.extract(hs.sharedKey,
532 hs.suite.deriveSecret(earlySecret, "derived", nil))
533
534 clientSecret := hs.suite.deriveSecret(hs.handshakeSecret,
535 clientHandshakeTrafficLabel, hs.transcript)
536 c.in.setTrafficSecret(hs.suite, clientSecret)
537 serverSecret := hs.suite.deriveSecret(hs.handshakeSecret,
538 serverHandshakeTrafficLabel, hs.transcript)
539 c.out.setTrafficSecret(hs.suite, serverSecret)
540
541 err := c.config.writeKeyLog(keyLogLabelClientHandshake, hs.clientHello.random, clientSecret)
542 if err != nil {
543 c.sendAlert(alertInternalError)
544 return err
545 }
546 err = c.config.writeKeyLog(keyLogLabelServerHandshake, hs.clientHello.random, serverSecret)
547 if err != nil {
548 c.sendAlert(alertInternalError)
549 return err
550 }
551
552 encryptedExtensions := new(encryptedExtensionsMsg)
553
554 selectedProto, err := negotiateALPN(c.config.NextProtos, hs.clientHello.alpnProtocols)
555 if err != nil {
556 c.sendAlert(alertNoApplicationProtocol)
557 return err
558 }
559 encryptedExtensions.alpnProtocol = selectedProto
560 c.clientProtocol = selectedProto
561
562 hs.transcript.Write(encryptedExtensions.marshal())
563 if _, err := c.writeRecord(recordTypeHandshake, encryptedExtensions.marshal()); err != nil {
564 return err
565 }
566
567 return nil
568}
569
570func (hs *serverHandshakeStateTLS13) requestClientCert() bool {
571 return hs.c.config.ClientAuth >= RequestClientCert && !hs.usingPSK

Callers 1

handshakeMethod · 0.95

Calls 10

negotiateALPNFunction · 0.85
writeRecordMethod · 0.80
extractMethod · 0.80
deriveSecretMethod · 0.80
setTrafficSecretMethod · 0.80
writeKeyLogMethod · 0.80
sendAlertMethod · 0.80
marshalMethod · 0.65
WriteMethod · 0.45

Tested by

no test coverage detected