ddn.net.tls.tls13server
TLS 1.3 server handshake (RFC 8446).
Implements the full TLS 1.3 server handshake as a resumable state machine:
- Receive ClientHello (parse extensions, key_share, supported_versions, etc.)
- Send ServerHello (select cipher suite, send key_share X25519)
- Send EncryptedExtensions, Certificate, CertificateVerify, Finished
- Receive client Finished
- Switch to application data keys
class Tls13Server
Types 2
TLS 1.3 server handshake phases.
NOT_STARTED
RECV_CLIENT_HELLO
SEND_SERVER_HELLO
FLUSH_SERVER_HELLO
SWITCH_TO_HANDSHAKE_KEYS
SEND_ENCRYPTED_EXTENSIONS
FLUSH_ENCRYPTED_EXTENSIONS
SEND_CERTIFICATE
FLUSH_CERTIFICATE
SEND_CERTIFICATE_VERIFY
FLUSH_CERTIFICATE_VERIFY
SEND_SERVER_FINISHED
FLUSH_SERVER_FINISHED
RECV_CLIENT_FINISHED
SWITCH_TO_APP_KEYS
SEND_NEW_SESSION_TICKET
FLUSH_NEW_SESSION_TICKET
DONE
classTls13Server
TLS 1.3 server handshake engine.
Drives the server side of a TLS 1.3 handshake over a record layer using a resumable state machine. After successful handshake, provides the AEAD ciphers and negotiated parameters for application data exchange.
Fields
private RecordLayer recordLayer_private Tls13KeySchedule keySchedule_private TranscriptHash transcript_private TlsVerifyMode verifyMode_private TlsVerifyCallback verifyCallback_private string[] alpnProtocols_private string negotiatedAlpn_private CipherSuiteId negotiatedCipher_private ProtocolVersion negotiatedVersion_private string serverName_private TlsCertificateChain peerCerts_private TlsSession tlsSession_private X25519PrivateKey ecdhePrivate_private ubyte[] sharedSecret_private ubyte[] legacySessionId_The client's legacy_session_id, echoed in ServerHello per RFC 8446 §4.1.3.private TlsAead clientAppAead_private TlsAead serverAppAead_private TlsAead clientHsAead_private TlsAead serverHsAead_private ubyte[][] serverCertChainDer_private string serverCertChainPem_private string serverPrivateKeyPem_private PrivateKey privateKey_private SignatureScheme sigScheme_private Tls13ServerHandshakePhase phase_private SecureRandom rng_Methods
private
TlsProgress skipCCSAndRead(out TlsRecord rec)TlsProgress handshake()Performs or continues the TLS 1.3 server handshake.TlsCertificateChain peerCertificates() @propertyReturns: The peer certificate chain (empty for typical server).private
void processClientHello(TlsRecord rec)private
void parseSupportedVersions(const(ubyte)[] extData)private
void parseClientKeyShare(const(ubyte)[] extData)private
void parseServerName(const(ubyte)[] extData)private
void parseClientAlpn(const(ubyte)[] extData)private
void selectCipherSuite(CipherSuiteId[] clientCiphers)private
ubyte[] buildServerHello(SecureRandom rng)private
void deriveSecrets()private
void switchToHandshakeKeys()private
ubyte[] buildEncryptedExtensions()private
ubyte[] buildCertificate()private
ubyte[] buildCertificateVerify()private
ubyte[] buildServerFinished()private
void processClientFinished(TlsRecord rec)private
void switchToApplicationKeys()private
ubyte[] buildNewSessionTicket()Builds an encrypted NewSessionTicket record (RFC 8446 §4.6.1).private
ubyte[] decryptRecord(TlsRecord rec, TlsAead aead)private
ubyte[] encryptRecord(ubyte[] handshakeMsg, TlsAead aead)private
void parsePrivateKey()private
ubyte[] computeSignature(const(ubyte)[] message)Constructors
this(RecordLayer recordLayer, TlsVerifyMode verifyMode,
TlsVerifyCallback verifyCallback, string[] alpnProtocols,
ubyte[][] certChainDer, string certChainPem, string privateKeyPem)Constructs a TLS 1.3 server handshake engine.