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
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
RecordLayer recordLayer_Tls13KeySchedule keySchedule_TranscriptHash transcript_TlsVerifyMode verifyMode_TlsVerifyCallback verifyCallback_string[] alpnProtocols_string negotiatedAlpn_CipherSuiteId negotiatedCipher_ProtocolVersion negotiatedVersion_string serverName_TlsCertificateChain peerCerts_TlsSession tlsSession_X25519PrivateKey ecdhePrivate_ubyte[] sharedSecret_TlsAead clientAppAead_TlsAead serverAppAead_TlsAead clientHsAead_TlsAead serverHsAead_ubyte[][] serverCertChainDer_string serverCertChainPem_string serverPrivateKeyPem_PrivateKey privateKey_SignatureScheme sigScheme_Tls13ServerHandshakePhase phase_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[] 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.