Dart TlsProtocolVersion
last modified April 4, 2025
The TlsProtocolVersion
class in Dart represents versions of the TLS
protocol used for secure communications. It's essential for network security.
TlsProtocolVersion provides constants for standard TLS versions and methods to
compare versions. It's part of Dart's dart:io
library.
Basic Definition
TlsProtocolVersion
is an immutable class representing TLS versions.
It includes constants like TLSv1, TLSv1_1, TLSv1_2, and TLSv1_3.
Key features include version comparison, string representation, and validation. It's used in secure socket configurations and security policy definitions.
Basic TlsProtocolVersion Usage
This example shows basic usage of TlsProtocolVersion constants.
import 'dart:io'; void main() { var tls1 = TlsProtocolVersion.tls1; var tls12 = TlsProtocolVersion.tls1_2; print('TLS 1.0: $tls1'); print('TLS 1.2: $tls12'); print('Is TLS 1.2 newer than TLS 1.0? ${tls12 > tls1}'); }
We create protocol version objects using built-in constants and compare them. The class provides natural ordering of TLS versions.
$ dart main.dart TLS 1.0: TlsProtocolVersion:0x0301 TLS 1.2: TlsProtocolVersion:0x0303 Is TLS 1.2 newer than TLS 1.0? true
Creating Custom Protocol Versions
This example demonstrates creating custom protocol version objects.
import 'dart:io'; void main() { var customVersion = TlsProtocolVersion(3, 4); print('Custom version: $customVersion'); print('Is standard: ${customVersion.isStandard}'); var ssl30 = TlsProtocolVersion(3, 0); print('SSL 3.0: $ssl30'); print('Is standard: ${ssl30.isStandard}'); }
We create non-standard TLS versions by specifying major and minor numbers. The isStandard property checks if the version is a recognized standard.
$ dart main.dart Custom version: TlsProtocolVersion:0x0304 Is standard: false SSL 3.0: TlsProtocolVersion:0x0300 Is standard: true
Comparing Protocol Versions
This example shows detailed version comparison operations.
import 'dart:io'; void main() { var tls11 = TlsProtocolVersion.tls1_1; var tls13 = TlsProtocolVersion.tls1_3; print('Comparison results:'); print('tls11 < tls13: ${tls11 < tls13}'); print('tls11 <= tls13: ${tls11 <= tls13}'); print('tls11 == tls13: ${tls11 == tls13}'); print('tls11 >= tls13: ${tls11 >= tls13}'); print('tls11 > tls13: ${tls11 > tls13}'); print('Hash codes:'); print('tls11: ${tls11.hashCode}'); print('tls13: ${tls13.hashCode}'); }
TlsProtocolVersion implements Comparable, allowing full comparison operations. Hash codes are consistent with equality comparisons.
$ dart main.dart Comparison results: tls11 < tls13: true tls11 <= tls13: true tls11 == tls13: false tls11 >= tls13: false tls11 > tls13: false Hash codes: tls11: 769 tls13: 772
Using with SecureSocket
This example shows TlsProtocolVersion in a real SecureSocket context.
import 'dart:io'; void main() async { var server = await SecureServerSocket.bind( 'localhost', 0, context: SecurityContext() ..useCertificateChain('cert.pem') ..usePrivateKey('key.pem'), supportedProtocols: [TlsProtocolVersion.tls1_3] ); print('Server running with TLS 1.3 only'); print('Supported version: ${server.supportedProtocols}'); server.close(); }
We configure a SecureServerSocket to only accept TLS 1.3 connections. The supportedProtocols parameter uses TlsProtocolVersion values.
$ dart main.dart Server running with TLS 1.3 only Supported version: [TlsProtocolVersion:0x0304]
Version Validation
This example demonstrates version validation and range checking.
import 'dart:io'; void main() { var minVersion = TlsProtocolVersion.tls1_2; var current = TlsProtocolVersion.tls1_3; var old = TlsProtocolVersion.tls1; print('Is current acceptable? ${current >= minVersion}'); print('Is old acceptable? ${old >= minVersion}'); var rangeCheck = (TlsProtocolVersion version) { return version >= TlsProtocolVersion.tls1_1 && version <= TlsProtocolVersion.tls1_3; }; print('TLS 1.0 in range: ${rangeCheck(TlsProtocolVersion.tls1)}'); print('TLS 1.2 in range: ${rangeCheck(TlsProtocolVersion.tls1_2)}'); }
We implement security policies by checking version ranges. This is common in applications requiring minimum TLS versions for security compliance.
$ dart main.dart Is current acceptable? true Is old acceptable? false TLS 1.0 in range: false TLS 1.2 in range: true
Best Practices
- Use standards: Prefer standard versions over custom ones
- Minimum versions: Enforce minimum secure TLS versions
- Comparisons: Use built-in comparison operators
- SecurityContext: Configure supported versions explicitly
Source
Dart TlsProtocolVersion Documentation
This tutorial covered Dart's TlsProtocolVersion class with practical examples showing version handling, comparison, and secure socket configuration.
Author
List all Dart tutorials.