TLS nativo (iohNativeTLS)
Un'implementazione di TLS 1.3 e TLS 1.2 scritta interamente in Object Pascal sopra le unit di sgcCrypto, quindi non distribuisce assolutamente nulla, né su Windows, né su Linux, macOS, iOS o Android. Imposta TLSOptions.IOHandler := iohNativeTLS su un client, oppure SSLOptions.IOHandler := iohNativeTLS su un server, motori server IOCP ed EPOLL inclusi. TLSOptions.NativeTLS_Options.Groups e TLSOptions.NativeTLS_Options.CipherSuites accettano elenchi separati da due punti, in stile OpenSSL. I valori predefiniti sono X25519MLKEM768:X25519:secp256r1:secp384r1 e TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256 più i valori predefiniti di TLS 1.2, quindi un handshake con un peer che li supporta è ibrido post-quantum senza alcuna configurazione.
TLS 1.3 e TLS 1.2. TLSOptions.Version su un client, e SSLOptions.Version su un server, è la versione minima consentita: tls1_2 o tlsUndefined negozia TLS 1.3 o TLS 1.2, mentre tls1_3 consente solo TLS 1.3. Per il solo TLS 1.2, elenca soltanto le suite TLS 1.2 in NativeTLS_Options.CipherSuites. TLS 1.2 offre per impostazione predefinita ECDHE_ECDSA ed ECDHE_RSA con AES-128-GCM, AES-256-GCM e ChaCha20-Poly1305, mentre le suite ECDHE AES-CBC e lo scambio di chiavi RSA sono disponibili solo se le nomini esplicitamente. Usa X25519, secp256r1 o secp384r1, perché i gruppi ibridi post-quantum esistono solo in TLS 1.3. TLS 1.2 include il master secret esteso della RFC 7627 e la protezione dal downgrade della RFC 8446 su entrambi i lati, e rifiuta la rinegoziazione e le firme SHA-1.
Che cosa non fa. Il motore parla solo TLS 1.3 e TLS 1.2, senza TLS 1.1, TLS 1.0 o SSL. Non c'è ripresa di sessione né PSK, niente 0-RTT e niente QUIC. Le radici di fiducia arrivano da TLSOptions.RootCertFile, più le radici di cui si fida il sistema operativo quando NativeTLS_Options.UseSystemRoots è True, lette dall'archivio ROOT di Windows o da un file CA bundle, mai dal portachiavi di macOS o iOS né dall'archivio di Android, e l'evento del componente OnSSLVerifyPeer non è disponibile per questo motore, che ha i propri hook di verifica. Resta su OpenSSL o su un backend di piattaforma quando ti serve una di queste cose.
Fa parte di sgcCrypto, quindi è incluso dall'edizione Standard in su e nel pacchetto sgcCrypto autonomo.