populateTlsSettings method

void populateTlsSettings({
  1. required String? streamSecurity,
  2. required String? sni,
  3. required String? fingerprint,
  4. required String? alpns,
  5. required String? publicKey,
  6. required String? shortId,
  7. required String? spiderX,
  8. String? pinnedPeerCertSha256,
  9. String? verifyPeerCertByName,
})

Populates the TLS/reality settings for the connection.

streamSecurity specifies the security method ('tls' or 'reality'). sni is the server name indicator. fingerprint is the fingerprint for TLS. alpns are the application layer protocol negotiation strings. publicKey is the public key for reality. shortId is the short ID for reality. spiderX is the spiderX for reality. pinnedPeerCertSha256 certificate SHA-256 pin(s), share-link pcs. verifyPeerCertByName cert name(s) to verify, share-link vcn.

Implementation

void populateTlsSettings({
  required String? streamSecurity,
  required String? sni,
  required String? fingerprint,
  required String? alpns,
  required String? publicKey,
  required String? shortId,
  required String? spiderX,
  String? pinnedPeerCertSha256,
  String? verifyPeerCertByName,
}) {
  streamSetting['security'] = streamSecurity;
  final pin = (pinnedPeerCertSha256 == null || pinnedPeerCertSha256.isEmpty)
      ? null
      : pinnedPeerCertSha256;
  final vcn = (verifyPeerCertByName == null || verifyPeerCertByName.isEmpty)
      ? null
      : verifyPeerCertByName;
  if (streamSecurity == 'tls') {
    streamSetting['realitySettings'] = null;
    streamSetting['tlsSettings'] = <String, dynamic>{
      'serverName': sni,
      'alpn': alpns == '' ? null : alpns?.split(','),
      'minVersion': null,
      'maxVersion': null,
      'preferServerCipherSuites': null,
      'cipherSuites': null,
      'fingerprint': fingerprint,
      'certificates': null,
      'disableSystemRoot': null,
      'enableSessionResumption': null,
      'pinnedPeerCertSha256': pin,
      'verifyPeerCertByName': vcn,
    };
  } else if (streamSecurity == 'reality') {
    streamSetting['tlsSettings'] = null;
    streamSetting['realitySettings'] = <String, dynamic>{
      'serverName': sni,
      'fingerprint': fingerprint,
      'show': false,
      'publicKey': publicKey,
      'shortId': shortId,
      'spiderX': spiderX,
    };
  }
}