- * Applications using TrustKit can listen for local broadcasts and receive the same report that - * would be sent to the report_url. - *
- **/ + *Applications using TrustKit can listen for local broadcasts and receive the same report that
+ * would be sent to the report_url.
+ */
class PinningFailureReportBroadcastReceiver extends BroadcastReceiver {
@Override
diff --git a/build.gradle b/build.gradle
index d88adf6..fe383ee 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1,76 +1,36 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
-buildscript {
- ext.kotlin_version = '1.3.21'
-
- repositories {
- mavenCentral()
- jcenter() // TODO: Remove when org.jetbrains.trove4j:trove4j moves to Maven Central
- google()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:3.6.1'
- classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7'
- classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1'
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
- }
+plugins {
+ alias(libs.plugins.android.application) apply false
+ alias(libs.plugins.android.library) apply false
+ alias(libs.plugins.kotlin.android) apply false
+ alias(libs.plugins.spotless)
}
allprojects {
+ apply { plugin(libs.plugins.spotless.get().pluginId) }
+
+ spotless {
+ java {
+ target("src/**/*.java")
+ googleJavaFormat(libs.versions.google.java.format.get()).aosp()
+ }
+ kotlin {
+ target("src/**/*.kt")
+ ktfmt(libs.versions.ktfmt.get()).kotlinlangStyle()
+ }
+ groovyGradle {
+ target("*.gradle")
+ greclipse().configProperties("org.eclipse.jdt.core.formatter.tabulation.char=space")
+ }
+ kotlinGradle {
+ target("*.gradle.kts")
+ ktfmt(libs.versions.ktfmt.get()).kotlinlangStyle()
+ }
+ }
+
repositories {
mavenCentral()
- jcenter() // TODO: Remove when org.jetbrains.trove4j:trove4j moves to Maven Central
google()
}
- apply plugin: 'maven'
- apply plugin: 'maven-publish'
-}
-
-
-ext{
- trustkitVersionCode = 10
- trustkitVersionName = "1.1.5"
-
- demoAppTrustKitVersionCode = 2
- demoAppTrustKitVersionName = "1.1"
-
- demoAppKotlinTrustKitVersionCode = 2
- demoAppKotlinTrustKitVersionName = "1.1"
- javaSourceCompatibilty = '1.6'
- toolVersions = [
- android : [
- compileSdk : 28,
- gradlePlugin : '2.1.0',
- buildTools : '28.0.3',
- minSdk : 16,
- targetSdk: 28
- ]
- ]
-
- libVersions = [
- junit: '4.12',
- mockito : [
- android: '1.10.19'
- ],
- dexmaker : '1.4',
- androidx : [
- annotation: '1.0.0',
- test: '1.1.0',
- legacySupport: '1.0.0',
- appcompat: '1.0.2',
- preference: '1.0.0'
- ],
- testing: [
- okhttp3: '3.11.0',
- 'playServicesBase': '11.0.0',
- ],
- google: [
- material: '1.0.0'
- ],
- squareup: [
- okhttp3: '3.11.0',
- okhttp2: '2.4.0'
- ]
- ]
-
}
diff --git a/demoappkotlin/build.gradle b/demoappkotlin/build.gradle
index 1aa585c..d4eb22e 100644
--- a/demoappkotlin/build.gradle
+++ b/demoappkotlin/build.gradle
@@ -1,17 +1,20 @@
-apply plugin: 'com.android.application'
-apply plugin: 'kotlin-android'
+plugins {
+ alias(libs.plugins.android.application)
+ alias(libs.plugins.kotlin.android)
+}
android {
- compileSdkVersion toolVersions.android.compileSdk
+ namespace = 'com.datatheorem.android.trustkit.demoappkotlin'
+ compileSdkVersion libs.versions.compileSdk.get().toInteger()
defaultConfig {
applicationId "com.datatheorem.android.trustkit.demoappkotlin"
- minSdkVersion toolVersions.android.minSdk
- targetSdkVersion toolVersions.android.targetSdk
- versionCode demoAppKotlinTrustKitVersionCode
- versionName demoAppKotlinTrustKitVersionName
+ minSdkVersion libs.versions.minSdk.get().toInteger()
+ targetSdkVersion libs.versions.targetSdk.get().toInteger()
+ versionCode libs.versions.demoAppVersionCode.get().toInteger()
+ versionName libs.versions.demoAppVersionName.get()
}
buildTypes {
@@ -21,15 +24,20 @@ android {
}
}
+ compileOptions {
+ sourceCompatibility JavaVersion.toVersion(libs.versions.jvmTarget.get())
+ targetCompatibility JavaVersion.toVersion(libs.versions.jvmTarget.get())
+ }
+
+ kotlinOptions {
+ jvmTarget = libs.versions.jvmTarget.get()
+ }
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
- implementation "androidx.appcompat:appcompat:$rootProject.libVersions.androidx.appcompat"
- implementation "com.google.android.material:material:$rootProject.libVersions.google.material"
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ implementation libs.androidx.appcompat
+ implementation libs.google.material
+ implementation libs.kotlin.stdlib.jdk7
implementation project(path: ':trustkit')
}
-repositories {
- mavenCentral()
-}
diff --git a/demoappkotlin/src/main/AndroidManifest.xml b/demoappkotlin/src/main/AndroidManifest.xml
index 883fc1b..0a3d4f6 100644
--- a/demoappkotlin/src/main/AndroidManifest.xml
+++ b/demoappkotlin/src/main/AndroidManifest.xml
@@ -1,5 +1,4 @@
-
- * Applications using TrustKit can listen for local broadcasts and receive the same report that
- * would be sent to the report_url.
- *
- * The general testing strategy used here is to connect to live websites. This provides a variety of - * valid certificate chains that can then have different pins applied to each. This requires no + * + *
The general testing strategy used here is to connect to live websites. This provides a variety
+ * of valid certificate chains that can then have different pins applied to each. This requires no
* special mock servers or mock CA setup, but it is dependent on the domains being live and having
* valid certificate chains.
*/
@SuppressWarnings("unchecked")
public class SSLSocketFactoryTest {
- @Mock
- private BackgroundReporter mockReporter;
+ @Mock private BackgroundReporter mockReporter;
// The root CA for cacert.org; useful to test connections with a custom CA
private final String caCertDotOrgRootPem =
- "MIIHbDCCBVSgAwIBAgIDAsGhMA0GCSqGSIb3DQEBDQUAMFQxFDASBgNVBAoTC0NB\n" +
- "Y2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5vcmcxHDAaBgNV\n" +
- "BAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwHhcNMTgwNDA1MTk0MjQxWhcNMjAwNDA0\n" +
- "MTk0MjQxWjBbMQswCQYDVQQGEwJBVTEMMAoGA1UECBMDTlNXMQ8wDQYDVQQHEwZT\n" +
- "eWRuZXkxFDASBgNVBAoTC0NBY2VydCBJbmMuMRcwFQYDVQQDEw53d3cuY2FjZXJ0\n" +
- "Lm9yZzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANwriThHegmvvYFB\n" +
- "2X281mJ5d+F2AEEZwaBSSSWoq75BYRJ5l5ke8QHGcx3c8CZDPlPjopyYCIy8LRhA\n" +
- "75IfVhRnR5imikVG4Gsvp57vAzwrxBtiAh8IqZKSlok30IaZ062G7uPNXaxwNZGY\n" +
- "c4CcAD2MRmTAxBbVan+wa+h/NTwTa/OfZwjaVdU4mDFJpegGl6tqm10+AdZW7bvP\n" +
- "Hbg5GPnn8WON0UzR5avrGDkU8013ruFH/Y0G/FlqnAsFAkf20rFYDLRLXzb29Olh\n" +
- "f6arkF+HOrsnanfyqjwyv5sgvZva3iXmEo0a7NhK2dGM1pO9Pd2AqkvjGARMI0ud\n" +
- "WrQkDThvoGEV2BvgBqQpF8WYBhlxMr7ToG4y2Dxc+wXgXSy6zPIgZqVwq9OZ4qit\n" +
- "TeXIiwWQp6nAYlJcPWuDNX2EoTi0FUKn2xCzbDr+i2ZtfZ6NYytxUq+ZwSOZ/o18\n" +
- "AXnMk82YO95WUFzFbTXrYKF6Sae8caHO92ptjl2tVxLPPRzsIDBMEh2/97fp1jxO\n" +
- "RjgwWMnBISwznbgIlG9/lY7/DaPHCYlAnIfsqvAasH3SRm5XedmGW4kyOD7D1Cpo\n" +
- "6vTSk4gs3MyaNvGt9wYATuunqwRjJVX83L/JfrDfxZ8CCb1s+JyYgTPMpbtyvZbN\n" +
- "1DHYLVfpFL5Nwtx3sZzuMteflQ7NAgMBAAGjggI+MIICOjAMBgNVHRMBAf8EAjAA\n" +
- "MA4GA1UdDwEB/wQEAwIDqDA0BgNVHSUELTArBggrBgEFBQcDAgYIKwYBBQUHAwEG\n" +
- "CWCGSAGG+EIEAQYKKwYBBAGCNwoDAzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUH\n" +
- "MAGGF2h0dHA6Ly9vY3NwLmNhY2VydC5vcmcvMDgGA1UdHwQxMC8wLaAroCmGJ2h0\n" +
- "dHA6Ly9jcmwuY2FjZXJ0Lm9yZy9jbGFzczMtcmV2b2tlLmNybDCCAXMGA1UdEQSC\n" +
- "AWowggFmgg53d3cuY2FjZXJ0Lm9yZ6AcBggrBgEFBQcIBaAQDA53d3cuY2FjZXJ0\n" +
- "Lm9yZ4IRc2VjdXJlLmNhY2VydC5vcmegHwYIKwYBBQUHCAWgEwwRc2VjdXJlLmNh\n" +
- "Y2VydC5vcmeCEnd3d21haWwuY2FjZXJ0Lm9yZ6AgBggrBgEFBQcIBaAUDBJ3d3dt\n" +
- "YWlsLmNhY2VydC5vcmeCCmNhY2VydC5vcmegGAYIKwYBBQUHCAWgDAwKY2FjZXJ0\n" +
- "Lm9yZ4IOd3d3LmNhY2VydC5uZXSgHAYIKwYBBQUHCAWgEAwOd3d3LmNhY2VydC5u\n" +
- "ZXSCCmNhY2VydC5uZXSgGAYIKwYBBQUHCAWgDAwKY2FjZXJ0Lm5ldIIOd3d3LmNh\n" +
- "Y2VydC5jb22gHAYIKwYBBQUHCAWgEAwOd3d3LmNhY2VydC5jb22CCmNhY2VydC5j\n" +
- "b22gGAYIKwYBBQUHCAWgDAwKY2FjZXJ0LmNvbTANBgkqhkiG9w0BAQ0FAAOCAgEA\n" +
- "pEFsiLHeLxNrP12BIG1QqZja9i1IrBCnWyVvlDmbUMdVHcscAQhWE5sTYkAD+1D7\n" +
- "VAodoYXo23paZrDKgKoFgZMNLMQ4m93WlCLrInEfENjCxNaPWI5LmsajeZR/5T7C\n" +
- "5nUqYklCY+3Bc6SBGHXIRDVnGw9AhWgI9f3hSpQhECyokbLwZ17aIGmznTeKx7lV\n" +
- "DYwaBeyFjZ/AIqovRSkcPTMf1L8LT/SZXuc1urgETbBa+F4tSMGjdGJg2jayojs0\n" +
- "kD2EFZVGdKYUzOH/rNoQmnTyDEudswp+nim7jgfugztl5KbKeowDFN9KpeineJUW\n" +
- "lthzARWpWr2gkIH8mGmgvOsIngYGof1sJMJsxcgdrowTrSPW6W/lOWRc6nSGnjg0\n" +
- "gnshQg3gDN902Kps0OBwbTCrbC4sYu3Xywk0QVxYtcDF2asnsERuSFaZuLWUf2WS\n" +
- "JYRDGbMuyw6MY+Uoukbee9fJ5Yq77+N0ZeeHRXvRG+PIVyl5KbujznNo6pCGeb3d\n" +
- "atDvi507zOiRJAWwHTXOEqpJ71ZjuV7XyRTvFe+qb70+t7FiohcZJZhE1hFZrIeV\n" +
- "iZX2MyJJPaWx2fjx8u/FpaKo01OYNrVOCcnhXzd5jUs+99zxrUVh1CEgC8KIN2zF\n" +
- "VgnYWDmu4r7D5JbJwxqccicVF9oUa+4HGHvcHdAwfRg=";
- private final Certificate caCertDotOrgRoot
- = CertificateUtils.certificateFromPem(caCertDotOrgRootPem);
+ "MIIHbDCCBVSgAwIBAgIDAsGhMA0GCSqGSIb3DQEBDQUAMFQxFDASBgNVBAoTC0NB\n"
+ + "Y2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5vcmcxHDAaBgNV\n"
+ + "BAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwHhcNMTgwNDA1MTk0MjQxWhcNMjAwNDA0\n"
+ + "MTk0MjQxWjBbMQswCQYDVQQGEwJBVTEMMAoGA1UECBMDTlNXMQ8wDQYDVQQHEwZT\n"
+ + "eWRuZXkxFDASBgNVBAoTC0NBY2VydCBJbmMuMRcwFQYDVQQDEw53d3cuY2FjZXJ0\n"
+ + "Lm9yZzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANwriThHegmvvYFB\n"
+ + "2X281mJ5d+F2AEEZwaBSSSWoq75BYRJ5l5ke8QHGcx3c8CZDPlPjopyYCIy8LRhA\n"
+ + "75IfVhRnR5imikVG4Gsvp57vAzwrxBtiAh8IqZKSlok30IaZ062G7uPNXaxwNZGY\n"
+ + "c4CcAD2MRmTAxBbVan+wa+h/NTwTa/OfZwjaVdU4mDFJpegGl6tqm10+AdZW7bvP\n"
+ + "Hbg5GPnn8WON0UzR5avrGDkU8013ruFH/Y0G/FlqnAsFAkf20rFYDLRLXzb29Olh\n"
+ + "f6arkF+HOrsnanfyqjwyv5sgvZva3iXmEo0a7NhK2dGM1pO9Pd2AqkvjGARMI0ud\n"
+ + "WrQkDThvoGEV2BvgBqQpF8WYBhlxMr7ToG4y2Dxc+wXgXSy6zPIgZqVwq9OZ4qit\n"
+ + "TeXIiwWQp6nAYlJcPWuDNX2EoTi0FUKn2xCzbDr+i2ZtfZ6NYytxUq+ZwSOZ/o18\n"
+ + "AXnMk82YO95WUFzFbTXrYKF6Sae8caHO92ptjl2tVxLPPRzsIDBMEh2/97fp1jxO\n"
+ + "RjgwWMnBISwznbgIlG9/lY7/DaPHCYlAnIfsqvAasH3SRm5XedmGW4kyOD7D1Cpo\n"
+ + "6vTSk4gs3MyaNvGt9wYATuunqwRjJVX83L/JfrDfxZ8CCb1s+JyYgTPMpbtyvZbN\n"
+ + "1DHYLVfpFL5Nwtx3sZzuMteflQ7NAgMBAAGjggI+MIICOjAMBgNVHRMBAf8EAjAA\n"
+ + "MA4GA1UdDwEB/wQEAwIDqDA0BgNVHSUELTArBggrBgEFBQcDAgYIKwYBBQUHAwEG\n"
+ + "CWCGSAGG+EIEAQYKKwYBBAGCNwoDAzAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUH\n"
+ + "MAGGF2h0dHA6Ly9vY3NwLmNhY2VydC5vcmcvMDgGA1UdHwQxMC8wLaAroCmGJ2h0\n"
+ + "dHA6Ly9jcmwuY2FjZXJ0Lm9yZy9jbGFzczMtcmV2b2tlLmNybDCCAXMGA1UdEQSC\n"
+ + "AWowggFmgg53d3cuY2FjZXJ0Lm9yZ6AcBggrBgEFBQcIBaAQDA53d3cuY2FjZXJ0\n"
+ + "Lm9yZ4IRc2VjdXJlLmNhY2VydC5vcmegHwYIKwYBBQUHCAWgEwwRc2VjdXJlLmNh\n"
+ + "Y2VydC5vcmeCEnd3d21haWwuY2FjZXJ0Lm9yZ6AgBggrBgEFBQcIBaAUDBJ3d3dt\n"
+ + "YWlsLmNhY2VydC5vcmeCCmNhY2VydC5vcmegGAYIKwYBBQUHCAWgDAwKY2FjZXJ0\n"
+ + "Lm9yZ4IOd3d3LmNhY2VydC5uZXSgHAYIKwYBBQUHCAWgEAwOd3d3LmNhY2VydC5u\n"
+ + "ZXSCCmNhY2VydC5uZXSgGAYIKwYBBQUHCAWgDAwKY2FjZXJ0Lm5ldIIOd3d3LmNh\n"
+ + "Y2VydC5jb22gHAYIKwYBBQUHCAWgEAwOd3d3LmNhY2VydC5jb22CCmNhY2VydC5j\n"
+ + "b22gGAYIKwYBBQUHCAWgDAwKY2FjZXJ0LmNvbTANBgkqhkiG9w0BAQ0FAAOCAgEA\n"
+ + "pEFsiLHeLxNrP12BIG1QqZja9i1IrBCnWyVvlDmbUMdVHcscAQhWE5sTYkAD+1D7\n"
+ + "VAodoYXo23paZrDKgKoFgZMNLMQ4m93WlCLrInEfENjCxNaPWI5LmsajeZR/5T7C\n"
+ + "5nUqYklCY+3Bc6SBGHXIRDVnGw9AhWgI9f3hSpQhECyokbLwZ17aIGmznTeKx7lV\n"
+ + "DYwaBeyFjZ/AIqovRSkcPTMf1L8LT/SZXuc1urgETbBa+F4tSMGjdGJg2jayojs0\n"
+ + "kD2EFZVGdKYUzOH/rNoQmnTyDEudswp+nim7jgfugztl5KbKeowDFN9KpeineJUW\n"
+ + "lthzARWpWr2gkIH8mGmgvOsIngYGof1sJMJsxcgdrowTrSPW6W/lOWRc6nSGnjg0\n"
+ + "gnshQg3gDN902Kps0OBwbTCrbC4sYu3Xywk0QVxYtcDF2asnsERuSFaZuLWUf2WS\n"
+ + "JYRDGbMuyw6MY+Uoukbee9fJ5Yq77+N0ZeeHRXvRG+PIVyl5KbujznNo6pCGeb3d\n"
+ + "atDvi507zOiRJAWwHTXOEqpJ71ZjuV7XyRTvFe+qb70+t7FiohcZJZhE1hFZrIeV\n"
+ + "iZX2MyJJPaWx2fjx8u/FpaKo01OYNrVOCcnhXzd5jUs+99zxrUVh1CEgC8KIN2zF\n"
+ + "VgnYWDmu4r7D5JbJwxqccicVF9oUa+4HGHvcHdAwfRg=";
+ private final Certificate caCertDotOrgRoot =
+ CertificateUtils.certificateFromPem(caCertDotOrgRootPem);
@BeforeClass
public static void runOnceBeforeClass() {
@@ -104,7 +97,8 @@ public static void runOnceBeforeClass() {
// in the SSLSocketFactory; otherwise some tests fail because the server requires TLS 1.2
if (Build.VERSION.SDK_INT < 20) {
try {
- ProviderInstaller.installIfNeeded(InstrumentationRegistry.getInstrumentation().getContext());
+ ProviderInstaller.installIfNeeded(
+ InstrumentationRegistry.getInstrumentation().getContext());
} catch (GooglePlayServicesRepairableException e) {
e.printStackTrace();
} catch (GooglePlayServicesNotAvailableException e) {
@@ -119,7 +113,7 @@ public void setUp() {
TestableTrustKit.reset();
}
- //region Tests for when the domain is pinned
+ // region Tests for when the domain is pinned
@Test
public void testPinnedDomainExpiredChain() throws IOException {
// Initialize TrustKit
@@ -146,14 +140,17 @@ public void testPinnedDomainExpiredChain() throws IOException {
}
// Ensure the background reporter was called
- verify(mockReporter).pinValidationFailed(
- eq(serverHostname),
- eq(0),
- (List
- * It should be used to initialize the App's SSL pinning policy and to retrieve the
- * corresponding {@code SSLSocketFactory} and {@code X509TrustManager}, to be used to add SSL
- * pinning validation to the App's network connections.
- *
- * TrustKit works by extending the
- *
- * Android N Network Security Configuration in two ways:
+ * It should be used to initialize the App's SSL pinning policy and to retrieve the corresponding
+ * {@code SSLSocketFactory} and {@code X509TrustManager}, to be used to add SSL pinning validation
+ * to the App's network connections.
*
- * TrustKit works by extending the
+ * Android N Network Security Configuration in two ways:
*
- *
- *
+ *
+ *
*
- * For better compatibility, TrustKit will also run on API levels 15 and 16 but its
- * functionality will be disabled.
- *
- * On devices before Android N, TrustKit supports the following XML tags defined in the - * - * Android N Network Security Configuration for deploying SSL pinning: - *
+ *On devices before Android N, TrustKit supports the following XML tags defined in the Android N Network Security Configuration for deploying SSL pinning: * *
- * On Android N devices, the OS' implementation is used and all XML tags are supported. - *
+ *On Android N devices, the OS' implementation is used and all XML tags are supported. * *
- * TrustKit provides additional functionality to not enforce pinning validation and to allow - * reports to be sent by the App whenever a pinning validation failure occurred. - *
+ *TrustKit provides additional functionality to not enforce pinning validation and to allow + * reports to be sent by the App whenever a pinning validation failure occurred. * *
- * The main tag for specifying additional TrustKit settings, to be defined within a
- * {@code
The main tag for specifying additional TrustKit settings, to be defined within a {@code
+ *
- * The following configuration will pin the www.datatheorem.com domain without enforcing pinning - * validation, and will send pinning failure reports to report.datatheorem.com. It also defines - * a debug overrides to add a debug certificate authority to the App's trust store for easier - * debugging of the App's network traffic. - *
- *
- * {@code
- *
- *
- *
- *
- *
- *
- * www.datatheorem.com
- *
- * k3XnEYQCK79AtL9GYnT/nyhsabas03V+bhRQYHQbpXU=
- * 2kOi4HdYYsvTR1sTIR7RHwlf2SescTrpza9ZrWy7poQ=
- *
- *
- *
- *
- *
- * http://report.datatheorem.com/log_report
- *
- *
- *
- *
- *
- *
- *
- *
- *
- * }
- *
*
+ * The following configuration will pin the www.datatheorem.com domain without enforcing pinning + * validation, and will send pinning failure reports to report.datatheorem.com. It also defines a + * debug overrides to add a debug certificate authority to the App's trust store for easier + * debugging of the App's network traffic. + * + *
{@code
+ *
+ *
+ *
+ *
+ *
+ *
+ * www.datatheorem.com
+ *
+ * k3XnEYQCK79AtL9GYnT/nyhsabas03V+bhRQYHQbpXU=
+ * 2kOi4HdYYsvTR1sTIR7RHwlf2SescTrpza9ZrWy7poQ=
+ *
+ *
+ *
+ *
+ *
+ * http://report.datatheorem.com/log_report
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ *
+ * }
*/
public class TrustKit {
@@ -174,14 +150,14 @@ public class TrustKit {
private final TrustKitConfiguration trustKitConfiguration;
- protected TrustKit(@NonNull Context context,
- @NonNull TrustKitConfiguration trustKitConfiguration) {
+ protected TrustKit(
+ @NonNull Context context, @NonNull TrustKitConfiguration trustKitConfiguration) {
this.trustKitConfiguration = trustKitConfiguration;
// Setup the debug-overrides setting if the App is debuggable
// Do not use BuildConfig.DEBUG as it does not work for libraries
- boolean isAppDebuggable = (0 !=
- (context.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE));
+ boolean isAppDebuggable =
+ (0 != (context.getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE));
SetSomewhat convoluted as other means of getting the resource ID involve using private APIs. * - * @param context android context + * @param context * @return The resource ID for the XML file containing the configured Network Security Policy or - * -1 if no policy was configured in the App's manifest or if we are not running on Android N. + * -1 if no policy was configured in the App's manifest or if we are not running on Android + * N. */ - static private int getNetSecConfigResourceId(@NonNull Context context) { + private static int getNetSecConfigResourceId(@NonNull Context context) { ApplicationInfo info = context.getApplicationInfo(); // Dump the content of the ApplicationInfo, which contains the resource ID on Android N class NetSecConfigResIdRetriever implements Printer { private int netSecConfigResourceId = -1; + private final String NETSEC_LINE_FORMAT = "networkSecurityConfigRes=0x"; public void println(String x) { if (netSecConfigResourceId == -1) { // Attempt at parsing "networkSecurityConfigRes=0x1234" - String NETSEC_LINE_FORMAT = "networkSecurityConfigRes=0x"; if (x.contains(NETSEC_LINE_FORMAT)) { netSecConfigResourceId = Integer.parseInt(x.substring(NETSEC_LINE_FORMAT.length()), 16); @@ -245,7 +226,9 @@ public void println(String x) { } } - private int getNetworkSecurityConfigResId() { return netSecConfigResourceId; } + private int getNetworkSecurityConfigResId() { + return netSecConfigResourceId; + } } NetSecConfigResIdRetriever retriever = new NetSecConfigResIdRetriever(); @@ -253,35 +236,38 @@ public void println(String x) { return retriever.getNetworkSecurityConfigResId(); } - /** Initialize TrustKit with the Network Security Configuration file at the default location + /** + * Initialize TrustKit with the Network Security Configuration file at the default location * res/xml/network_security_config.xml. The Network Security Configuration file must also have - * been - * added to the App's manifest. + * been added to the App's manifest. * * @param context the application's context. * @throws ConfigurationException if the policy could not be parsed or contained errors. */ @NonNull - public synchronized static TrustKit initializeWithNetworkSecurityConfiguration( + public static synchronized TrustKit initializeWithNetworkSecurityConfiguration( @NonNull Context context) { // Try to get the default network policy resource ID - int networkSecurityConfigId = context.getResources().getIdentifier( - "network_security_config", "xml", context.getPackageName()); + int networkSecurityConfigId = + context.getResources() + .getIdentifier("network_security_config", "xml", context.getPackageName()); return initializeWithNetworkSecurityConfiguration(context, networkSecurityConfigId); } - /** Initialize TrustKit with the Network Security Configuration file with the specified - * resource ID. The Network Security Configuration file must also have - * been - * added to the App's manifest. + /** + * Initialize TrustKit with the Network Security Configuration file with the specified resource + * ID. The Network Security Configuration file must also have been added to the App's manifest. * * @param context the application's context. * @param configurationResourceId the resource ID for the Network Security Configuration file to - * use. + * use. * @throws ConfigurationException if the policy could not be parsed or contained errors. */ @NonNull - public synchronized static TrustKit initializeWithNetworkSecurityConfiguration( + public static synchronized TrustKit initializeWithNetworkSecurityConfiguration( @NonNull Context context, int configurationResourceId) { if (trustKitInstance != null) { throw new IllegalStateException("TrustKit has already been initialized"); @@ -294,34 +280,37 @@ public synchronized static TrustKit initializeWithNetworkSecurityConfiguration( if (systemConfigResId == -1) { // Android did not find a policy because the supplied resource ID is wrong or the // policy file is not properly setup in the manifest, or contains bad data - throw new ConfigurationException("TrustKit was initialized with a network policy " + - "that was not properly configured for Android N - make sure it is in the " + - "App's Manifest."); - } - else if (systemConfigResId != configurationResourceId) { - throw new ConfigurationException("TrustKit was initialized with a different " + - "network policy than the one configured in the App's manifest."); + throw new ConfigurationException( + "TrustKit was initialized with a network policy " + + "that was not properly configured for Android N - make sure it is in the " + + "App's Manifest."); + } else if (systemConfigResId != configurationResourceId) { + throw new ConfigurationException( + "TrustKit was initialized with a different " + + "network policy than the one configured in the App's manifest."); } } // Then try to load the supplied policy TrustKitConfiguration trustKitConfiguration; try { - trustKitConfiguration = TrustKitConfiguration.fromXmlPolicy( - context, context.getResources().getXml(configurationResourceId) - ); + trustKitConfiguration = + TrustKitConfiguration.fromXmlPolicy( + context, context.getResources().getXml(configurationResourceId)); } catch (XmlPullParserException | IOException e) { throw new ConfigurationException("Could not parse network security policy file"); } catch (CertificateException e) { - throw new ConfigurationException("Could not find the debug certificate in the " + - "network security police file"); + throw new ConfigurationException( + "Could not find the debug certificate in the " + + "network security police file"); } trustKitInstance = new TrustKit(context, trustKitConfiguration); return trustKitInstance; } - /** Retrieve the initialized instance of TrustKit. + /** + * Retrieve the initialized instance of TrustKit. * * @throws IllegalStateException if TrustKit has not been initialized. */ @@ -333,35 +322,33 @@ public static TrustKit getInstance() { return trustKitInstance; } - /** Retrieve the current TrustKit configuration. - * - */ + /** Retrieve the current TrustKit configuration. */ @NonNull - public TrustKitConfiguration getConfiguration() { return trustKitConfiguration; } - - /** Retrieve an {@code SSLSSocketFactory} that implements SSL pinning validation based on the + public TrustKitConfiguration getConfiguration() { + return trustKitConfiguration; + } + + /** + * Retrieve an {@code SSLSSocketFactory} that implements SSL pinning validation based on the * current TrustKit configuration for the specified serverHostname. It can be used with most * network APIs (such as {@code HttpsUrlConnection}) to add SSL pinning validation to the * connections. * - *
- * The {@code SSLSocketFactory} is configured for the supplied serverHostname, and will - * enforce this domain's pinning policy even if a redirection to a different domain occurs - * during the connection. Hence validation will always fail in the case of a redirection to - * a different domain. - * However, pinning validation is only meant to be used on the App's API server(s), and - * redirections to other domains should not happen in this scenario. - *
+ *The {@code SSLSocketFactory} is configured for the supplied serverHostname, and will + * enforce this domain's pinning policy even if a redirection to a different domain occurs + * during the connection. Hence validation will always fail in the case of a redirection to a + * different domain. However, pinning validation is only meant to be used on the App's API + * server(s), and redirections to other domains should not happen in this scenario. * * @param serverHostname the server's hostname that the {@code SSLSocketFactory} will be used to - * connect to. This hostname will be used to retrieve the pinning policy - * from the current TrustKit configuration. + * connect to. This hostname will be used to retrieve the pinning policy from the current + * TrustKit configuration. */ @NonNull public SSLSocketFactory getSSLSocketFactory(@NonNull String serverHostname) { try { SSLContext sslContext = SSLContext.getInstance("TLSv1.2"); - sslContext.init(null, new TrustManager[]{getTrustManager(serverHostname)}, null); + sslContext.init(null, new TrustManager[] {getTrustManager(serverHostname)}, null); return sslContext.getSocketFactory(); } catch (NoSuchAlgorithmException | KeyManagementException e) { @@ -370,23 +357,20 @@ public SSLSocketFactory getSSLSocketFactory(@NonNull String serverHostname) { } } - - /** Retrieve an {@code X509TrustManager} that implements SSL pinning validation based on the + /** + * Retrieve an {@code X509TrustManager} that implements SSL pinning validation based on the * current TrustKit configuration for the supplied hostname. It can be used with some network * APIs that let developers supply a trust manager to customize SSL validation. * - *
- * The {@code X509TrustManager} is configured for the supplied serverHostname, and will - * enforce this domain's pinning policy even if a redirection to a different domain occurs - * during the connection. Hence validation will always fail in the case of a redirection to - * a different domain. - * However, pinning validation is only meant to be used on the App's API server(s), and - * redirections to other domains should not happen in this scenario. - *
+ *The {@code X509TrustManager} is configured for the supplied serverHostname, and will
+ * enforce this domain's pinning policy even if a redirection to a different domain occurs
+ * during the connection. Hence validation will always fail in the case of a redirection to a
+ * different domain. However, pinning validation is only meant to be used on the App's API
+ * server(s), and redirections to other domains should not happen in this scenario.
*
* @param serverHostname the server's hostname that the {@code X509TrustManager} will be used to
- * connect to. This hostname will be used to retrieve the pinning policy
- * from the current TrustKit configuration.
+ * connect to. This hostname will be used to retrieve the pinning policy from the current
+ * TrustKit configuration.
*/
@NonNull
public X509TrustManager getTrustManager(@NonNull String serverHostname) {
diff --git a/trustkit/src/main/java/com/datatheorem/android/trustkit/config/ConfigurationException.java b/trustkit/src/main/java/com/datatheorem/android/trustkit/config/ConfigurationException.java
index 8775b23..c48eec5 100644
--- a/trustkit/src/main/java/com/datatheorem/android/trustkit/config/ConfigurationException.java
+++ b/trustkit/src/main/java/com/datatheorem/android/trustkit/config/ConfigurationException.java
@@ -1,7 +1,7 @@
package com.datatheorem.android.trustkit.config;
public final class ConfigurationException extends RuntimeException {
- public ConfigurationException(String detailMessage) {
- super(detailMessage);
- }
-}
\ No newline at end of file
+ public ConfigurationException(String detailMessage) {
+ super(detailMessage);
+ }
+}
diff --git a/trustkit/src/main/java/com/datatheorem/android/trustkit/config/DomainPinningPolicy.java b/trustkit/src/main/java/com/datatheorem/android/trustkit/config/DomainPinningPolicy.java
index 1e9aae0..d35e27d 100644
--- a/trustkit/src/main/java/com/datatheorem/android/trustkit/config/DomainPinningPolicy.java
+++ b/trustkit/src/main/java/com/datatheorem/android/trustkit/config/DomainPinningPolicy.java
@@ -9,11 +9,11 @@
import java.util.HashSet;
import java.util.Set;
-
public final class DomainPinningPolicy {
// The default URL to submit pin failure report to
private static final URL DEFAULT_REPORTING_URL;
+
static {
java.net.URL defaultUrl;
try {
@@ -31,13 +31,14 @@ public final class DomainPinningPolicy {
private final boolean shouldEnforcePinning;
@NonNull private final Set Domain name validation routines.
- * This validator provides methods for validating Internet domain names
- * and top-level domains.
- * This validator provides methods for validating Internet domain names and top-level domains.
*
- * Domain names are evaluated according
- * to the standards RFC1034,
- * section 3, and RFC1123,
- * section 2.1. No accommodation is provided for the specialized needs of
- * other applications; if the domain name has been URL-encoded, for example,
- * validation will fail even though the equivalent plaintext version of the
- * same name would have passed.
- * Domain names are evaluated according to the standards RFC1034, section 3, and RFC1123, section 2.1. No accommodation is provided
+ * for the specialized needs of other applications; if the domain name has been URL-encoded, for
+ * example, validation will fail even though the equivalent plaintext version of the same name would
+ * have passed.
*
- *
- * Validation is also provided for top-level domains (TLDs) as defined and
- * maintained by the Internet Assigned Numbers Authority (IANA):
- * Validation is also provided for top-level domains (TLDs) as defined and maintained by the
+ * Internet Assigned Numbers Authority (IANA):
*
- *
- * (NOTE: This class does not provide IP address lookup for domain names or
- * methods to ensure that a given domain name matches a specific IP; see
- * {@link java.net.InetAddress} for that functionality.)
- * (NOTE: This class does not provide IP address lookup for domain names or methods to
+ * ensure that a given domain name matches a specific IP; see {@link java.net.InetAddress} for that
+ * functionality.)
*
* @version $Revision$
* @since Validator 1.4
@@ -82,30 +73,19 @@ class DomainValidator implements Serializable {
private static final String DOMAIN_NAME_REGEX =
"^(?:" + DOMAIN_LABEL_REGEX + "\\.)+" + "(" + TOP_LABEL_REGEX + ")\\.?$";
private final boolean allowLocal;
- /**
- * Singleton instance of this validator, which
- * doesn't consider local addresses as valid.
- */
+ /** Singleton instance of this validator, which doesn't consider local addresses as valid. */
private static final DomainValidator DOMAIN_VALIDATOR = new DomainValidator(false);
- /**
- * Singleton instance of this validator, which does
- * consider local addresses valid.
- */
+ /** Singleton instance of this validator, which does consider local addresses valid. */
private static final DomainValidator DOMAIN_VALIDATOR_WITH_LOCAL = new DomainValidator(true);
- /**
- * RegexValidator for matching domains.
- */
- private final RegexValidator domainRegex =
- new RegexValidator(DOMAIN_NAME_REGEX);
- /**
- * RegexValidator for matching a local hostname
- */
+ /** RegexValidator for matching domains. */
+ private final RegexValidator domainRegex = new RegexValidator(DOMAIN_NAME_REGEX);
+ /** RegexValidator for matching a local hostname */
// RFC1123 sec 2.1 allows hostnames to start with a digit
- private final RegexValidator hostnameRegex =
- new RegexValidator(DOMAIN_LABEL_REGEX);
+ private final RegexValidator hostnameRegex = new RegexValidator(DOMAIN_LABEL_REGEX);
/**
- * Returns the singleton instance of this validator. It
- * will not consider local addresses as valid.
+ * Returns the singleton instance of this validator. It will not consider local addresses as
+ * valid.
+ *
* @return the singleton instance of this validator
*/
public static synchronized DomainValidator getInstance() {
@@ -113,14 +93,14 @@ public static synchronized DomainValidator getInstance() {
return DOMAIN_VALIDATOR;
}
/**
- * Returns the singleton instance of this validator,
- * with local validation as required.
+ * Returns the singleton instance of this validator, with local validation as required.
+ *
* @param allowLocal Should local addresses be considered valid?
* @return the singleton instance of this validator
*/
public static synchronized DomainValidator getInstance(boolean allowLocal) {
inUse = true;
- if(allowLocal) {
+ if (allowLocal) {
return DOMAIN_VALIDATOR_WITH_LOCAL;
}
return DOMAIN_VALIDATOR;
@@ -130,9 +110,9 @@ private DomainValidator(boolean allowLocal) {
this.allowLocal = allowLocal;
}
/**
- * Returns true if the specified
- * For example:
- *
- * {@code DomainValidator.updateTLDOverride(ArrayType.GENERIC_PLUS, new String[]{"apache"})}
- *
- * To clear an override array, provide an empty array.
+ * Update one of the TLD override arrays. This must only be done at program startup, before any
+ * instances are accessed using getInstance.
+ *
+ * For example:
+ *
+ * {@code DomainValidator.updateTLDOverride(ArrayType.GENERIC_PLUS, new String[]{"apache"})}
+ *
+ * To clear an override array, provide an empty array.
+ *
+ * @param table the table to update, see {@link DomainValidator.ArrayType} Must be one of the
+ * following
+ *
- * Construct the validator either for a single regular expression or a set (array) of
- * regular expressions. By default validation is case sensitive but constructors
- * are provided to allow case in-sensitive validation. For example to create
- * a validator which does case in-sensitive validation for a set of regular
- * expressions:
- * Construct the validator either for a single regular expression or a set (array) of regular
+ * expressions. By default validation is case sensitive but constructors are provided to
+ * allow case in-sensitive validation. For example to create a validator which does case
+ * in-sensitive validation for a set of regular expressions:
+ *
*
- * Cached instances pre-compile and re-use {@link Pattern}(s) - which according
- * to the {@link Pattern} API are safe to use in a multi-threaded environment.
- * Cached instances pre-compile and re-use {@link Pattern}(s) - which according to the {@link
+ * Pattern} API are safe to use in a multi-threaded environment.
*
* @version $Revision$
* @since Validator 1.4
@@ -73,65 +69,58 @@ class RegexValidator implements Serializable {
private static final long serialVersionUID = -8832409930574867162L;
private final Pattern[] patterns;
/**
- * Construct a case sensitive validator for a single
- * regular expression.
+ * Construct a case sensitive validator for a single regular expression.
*
- * @param regex The regular expression this validator will
- * validate against
+ * @param regex The regular expression this validator will validate against
*/
public RegexValidator(String regex) {
this(regex, true);
}
/**
- * Construct a validator for a single regular expression
- * with the specified case sensitivity.
+ * Construct a validator for a single regular expression with the specified case sensitivity.
*
- * @param regex The regular expression this validator will
- * validate against
- * @param caseSensitive when
- * The {@code SSLSocketFactory} is configured for the current TrustKit configuration and
- * will enforce the configuration's pinning policy.
- * The {@code SSLSocketFactory} is configured for the current TrustKit configuration and will
+ * enforce the configuration's pinning policy.
*/
@NonNull
public static SSLSocketFactory getSSLSocketFactory() {
try {
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
- sslContext.init(null, new X509TrustManager[]{trustManager}, null);
+ sslContext.init(null, new X509TrustManager[] {trustManager}, null);
return sslContext.getSocketFactory();
} catch (NoSuchAlgorithmException | KeyManagementException e) {
@@ -50,13 +44,13 @@ public static SSLSocketFactory getSSLSocketFactory() {
}
/**
- * Returns an {@link com.squareup.okhttp.Interceptor} used to parse the hostname of the
- * {@link Request} URL and then save the hostname in the {@link OkHttpRootTrustManager} which will
+ * Returns an {@link com.squareup.okhttp.Interceptor} used to parse the hostname of the {@link
+ * Request} URL and then save the hostname in the {@link OkHttpRootTrustManager} which will
* later be used for Certificate Pinning.
*/
@NonNull
@RequiresApi(api = 17)
public static Interceptor getPinningInterceptor() {
- return new OkHttp2PinningInterceptor((OkHttpRootTrustManager)trustManager);
+ return new OkHttp2PinningInterceptor((OkHttpRootTrustManager) trustManager);
}
}
diff --git a/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttp2PinningInterceptor.java b/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttp2PinningInterceptor.java
index 3ba1636..0e7b3d6 100644
--- a/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttp2PinningInterceptor.java
+++ b/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttp2PinningInterceptor.java
@@ -1,11 +1,9 @@
package com.datatheorem.android.trustkit.pinning;
import androidx.annotation.NonNull;
-
import com.squareup.okhttp.Interceptor;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.Response;
-
import java.io.IOException;
/**
@@ -19,7 +17,8 @@ public OkHttp2PinningInterceptor(@NonNull OkHttpRootTrustManager trustManager) {
mTrustManager = trustManager;
}
- @Override public Response intercept(Interceptor.Chain chain) throws IOException {
+ @Override
+ public Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request();
String serverHostname = request.url().getHost();
diff --git a/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttp3Helper.java b/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttp3Helper.java
index 5219e0c..ae6ae54 100644
--- a/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttp3Helper.java
+++ b/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttp3Helper.java
@@ -1,22 +1,18 @@
package com.datatheorem.android.trustkit.pinning;
import android.os.Build;
-
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
-
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
-
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.X509TrustManager;
-
import okhttp3.Interceptor;
import okhttp3.Request;
public class OkHttp3Helper {
- private static final X509TrustManager trustManager;
+ private static X509TrustManager trustManager;
static {
if (Build.VERSION.SDK_INT < 17) {
@@ -28,19 +24,17 @@ public class OkHttp3Helper {
/**
* Retrieve an {@code SSLSSocketFactory} that implements SSL pinning validation based on the
- * current TrustKit configuration. It can be used with an OkHttpClient to add SSL
- * pinning validation to the connections.
+ * current TrustKit configuration. It can be used with an OkHttpClient to add SSL pinning
+ * validation to the connections.
*
- *
- * The {@code SSLSocketFactory} is configured for the current TrustKit configuration and
- * will enforce the configuration's pinning policy.
- * The {@code SSLSocketFactory} is configured for the current TrustKit configuration and will
+ * enforce the configuration's pinning policy.
*/
@NonNull
public static SSLSocketFactory getSSLSocketFactory() {
try {
SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
- sslContext.init(null, new X509TrustManager[]{trustManager}, null);
+ sslContext.init(null, new X509TrustManager[] {trustManager}, null);
return sslContext.getSocketFactory();
} catch (NoSuchAlgorithmException | KeyManagementException e) {
@@ -57,12 +51,10 @@ public static SSLSocketFactory getSSLSocketFactory() {
@NonNull
@RequiresApi(api = 17)
public static Interceptor getPinningInterceptor() {
- return new OkHttp3PinningInterceptor((OkHttpRootTrustManager)trustManager);
+ return new OkHttp3PinningInterceptor((OkHttpRootTrustManager) trustManager);
}
- /**
- * Returns an instance of the {@link OkHttpRootTrustManager} used for Certificate Pinning.
- */
+ /** Returns an instance of the {@link OkHttpRootTrustManager} used for Certificate Pinning. */
@NonNull
public static X509TrustManager getTrustManager() {
return trustManager;
diff --git a/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttp3PinningInterceptor.java b/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttp3PinningInterceptor.java
index b7a44e6..5bbc1c2 100644
--- a/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttp3PinningInterceptor.java
+++ b/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttp3PinningInterceptor.java
@@ -1,9 +1,7 @@
package com.datatheorem.android.trustkit.pinning;
import androidx.annotation.NonNull;
-
import java.io.IOException;
-
import okhttp3.Interceptor;
import okhttp3.Request;
import okhttp3.Response;
@@ -19,7 +17,8 @@ public OkHttp3PinningInterceptor(@NonNull OkHttpRootTrustManager trustManager) {
mTrustManager = trustManager;
}
- @Override public Response intercept(Interceptor.Chain chain) throws IOException {
+ @Override
+ public Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request();
String serverHostname = request.url().host();
diff --git a/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttpRootTrustManager.java b/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttpRootTrustManager.java
index 4ef11a4..32173d2 100644
--- a/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttpRootTrustManager.java
+++ b/trustkit/src/main/java/com/datatheorem/android/trustkit/pinning/OkHttpRootTrustManager.java
@@ -2,43 +2,44 @@
import android.net.http.X509TrustManagerExtensions;
import android.os.Build;
-
import androidx.annotation.NonNull;
-
import com.datatheorem.android.trustkit.TrustKit;
import com.datatheorem.android.trustkit.config.DomainPinningPolicy;
-
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
-
import javax.net.ssl.X509TrustManager;
/**
* {@link X509TrustManager} used for Certificate Pinning.
*
* This trust manager delegates to the appropriate {@link PinningTrustManager} decided by the
- * hostname set by the {@link OkHttp3PinningInterceptor}.
- * Before Android N, the PinningTrustManager implements pinning validation itself. On Android
+ *
+ * Before Android N, the PinningTrustManager implements pinning validation itself. On Android
* N and later the OS' implementation is used instead for pinning validation.
*
* @param serverHostname: The hostname of the server whose identity is being validated. It will
- * be validated against the name(s) the leaf certificate was issued for
- * when performing hostname validation.
+ * be validated against the name(s) the leaf certificate was issued for when performing
+ * hostname validation.
* @param serverConfig: The pinning policy to be enforced when doing pinning validation.
* @param baselineTrustManager: The trust manager to use for path validation.
*/
- public PinningTrustManager(@NonNull String serverHostname,
- @NonNull DomainPinningPolicy serverConfig,
- @NonNull X509TrustManager baselineTrustManager) {
+ public PinningTrustManager(
+ @NonNull String serverHostname,
+ @NonNull DomainPinningPolicy serverConfig,
+ @NonNull X509TrustManager baselineTrustManager) {
// Store server's information
this.serverHostname = serverHostname;
this.serverConfig = serverConfig;
@@ -64,16 +62,15 @@ public PinningTrustManager(@NonNull String serverHostname,
/**
* This methods gets called on Android N instead of the 2-parameter checkServerTrusted().
- *
- * If we ever drop support for versions before Android N (unlikely), we can use this method
+ *
+ * If we ever drop support for versions before Android N (unlikely), we can use this method
* to automatically get the hostname when the certificate chain needs to be validated, instead
* of having to ask for the hostname a lot earlier when the trust manager (or socket factory)
* gets created, making the API a lot nicer.
- *
- * For now this is here only for documentation.
- * See also: X509ExtendedTrustManager
- * not to be confused with X509TrustManagerExtensions!
*
+ * For now this is here only for documentation. See also:
+ * https://developer.android.com/reference/javax/net/ssl/X509ExtendedTrustManager.html not to be
+ * confused with X509TrustManagerExtensions!
*/
/*
public List This matches IPv6 addresses as a hex string containing at least one colon, and possibly
- * including dots after the first colon. It matches IPv4 addresses as strings containing only
- * decimal digits and dots. This pattern matches strings like "a:.23" and "54" that are neither IP
- * addresses nor hostnames; they will be verified as IP addresses (which is a more strict
- * verification).
- */
- private static final Pattern VERIFY_AS_IP_ADDRESS = Pattern.compile(
- "([0-9a-fA-F]*:[0-9a-fA-F:.]*)|([\\d.]+)");
+ /**
+ * Quick and dirty pattern to differentiate IP addresses from hostnames. This is an
+ * approximation of Android's private InetAddress#isNumeric API.
+ *
+ * This matches IPv6 addresses as a hex string containing at least one colon, and possibly
+ * including dots after the first colon. It matches IPv4 addresses as strings containing only
+ * decimal digits and dots. This pattern matches strings like "a:.23" and "54" that are neither
+ * IP addresses nor hostnames; they will be verified as IP addresses (which is a more strict
+ * verification).
+ */
+ private static final Pattern VERIFY_AS_IP_ADDRESS =
+ Pattern.compile("([0-9a-fA-F]*:[0-9a-fA-F:.]*)|([\\d.]+)");
-
- /** Returns true if {@code host} is not a host name and might be an IP address. */
- public static boolean verifyAsIpAddress(String host) {
- return VERIFY_AS_IP_ADDRESS.matcher(host).matches();
- }
-}
\ No newline at end of file
+ /** Returns true if {@code host} is not a host name and might be an IP address. */
+ public static boolean verifyAsIpAddress(String host) {
+ return VERIFY_AS_IP_ADDRESS.matcher(host).matches();
+ }
+}
diff --git a/trustkit/src/main/java/com/datatheorem/android/trustkit/reporting/BackgroundReporter.java b/trustkit/src/main/java/com/datatheorem/android/trustkit/reporting/BackgroundReporter.java
index 252d34e..a80366c 100644
--- a/trustkit/src/main/java/com/datatheorem/android/trustkit/reporting/BackgroundReporter.java
+++ b/trustkit/src/main/java/com/datatheorem/android/trustkit/reporting/BackgroundReporter.java
@@ -1,18 +1,14 @@
package com.datatheorem.android.trustkit.reporting;
-
import android.content.Context;
import android.content.Intent;
import android.util.Base64;
-
import androidx.annotation.NonNull;
import androidx.annotation.RequiresApi;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
-
import com.datatheorem.android.trustkit.config.DomainPinningPolicy;
import com.datatheorem.android.trustkit.pinning.PinningValidationResult;
import com.datatheorem.android.trustkit.utils.TrustKitLog;
-
import java.net.URL;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
@@ -21,9 +17,9 @@
import java.util.List;
import java.util.Set;
-
public class BackgroundReporter {
- public static final String REPORT_VALIDATION_EVENT = "com.datatheorem.android.trustkit.reporting.BackgroundReporter:REPORT_VALIDATION_EVENT";
+ public static final String REPORT_VALIDATION_EVENT =
+ "com.datatheorem.android.trustkit.reporting.BackgroundReporter:REPORT_VALIDATION_EVENT";
public static final String EXTRA_REPORT = "Report";
// App meta-data to be sent with the reports
@@ -32,13 +28,15 @@ public class BackgroundReporter {
private final String appVendorId;
private final Context context;
- public BackgroundReporter(@NonNull Context context, @NonNull String appPackageName, @NonNull String appVersion,
- @NonNull String appVendorId) {
+ public BackgroundReporter(
+ @NonNull Context context,
+ @NonNull String appPackageName,
+ @NonNull String appVersion,
+ @NonNull String appVendorId) {
this.context = context;
this.appPackageName = appPackageName;
this.appVersion = appVersion;
this.appVendorId = appVendorId;
-
}
private static String certificateToPem(X509Certificate certificate) {
@@ -46,8 +44,8 @@ private static String certificateToPem(X509Certificate certificate) {
try {
certificateData = certificate.getEncoded();
} catch (CertificateEncodingException e) {
- throw new IllegalStateException("Should never happen - certificate was previously " +
- "parsed by the system");
+ throw new IllegalStateException(
+ "Should never happen - certificate was previously " + "parsed by the system");
}
// Create the PEM string
@@ -60,18 +58,19 @@ private static String certificateToPem(X509Certificate certificate) {
/**
* Try to send a pin validation failure report to the reporting servers configured for the
* hostname that triggered the failure.
- *
- * Reports are rate-limited to one identical (same host, error and certificate chain) report
+ *
+ * Reports are rate-limited to one identical (same host, error and certificate chain) report
* every 24 hours. Also and before Android N, only the default SSL validation is performed when
* connecting to the reporting server (ie. no pinning validation).
*/
@RequiresApi(api = 16)
- public void pinValidationFailed(@NonNull String serverHostname,
- @NonNull Integer serverPort,
- @NonNull List
- *
+ * .arpa, etc.).com, .org, etc.).us, .uk, .cn, etc.)
+ *
*
- * .arpa,
+ * etc.)
+ * .com, .org, etc.)
+ * .us, .uk, .cn,
+ * etc.)
+ * String parses
- * as a valid domain name with a recognized top-level domain.
- * The parsing is case-insensitive.
+ * Returns true if the specified String parses as a valid domain name with a
+ * recognized top-level domain. The parsing is case-insensitive.
+ *
* @param domain the parameter to check for domain name syntax
* @return true if the parameter is a valid domain name
*/
@@ -169,19 +149,18 @@ final boolean isValidDomainSyntax(String domain) {
return false;
}
String[] groups = domainRegex.match(domain);
- return (groups != null && groups.length > 0)
- || hostnameRegex.isValid(domain);
+ return (groups != null && groups.length > 0) || hostnameRegex.isValid(domain);
}
/**
- * Returns true if the specified String matches any
- * IANA-defined top-level domain. Leading dots are ignored if present.
- * The search is case-insensitive.
+ * Returns true if the specified String matches any IANA-defined top-level domain.
+ * Leading dots are ignored if present. The search is case-insensitive.
+ *
* @param tld the parameter to check for TLD status, not null
* @return true if the parameter is a TLD
*/
public boolean isValidTld(String tld) {
tld = unicodeToASCII(tld);
- if(allowLocal && isValidLocalTld(tld)) {
+ if (allowLocal && isValidLocalTld(tld)) {
return true;
}
return isValidInfrastructureTld(tld)
@@ -189,9 +168,9 @@ public boolean isValidTld(String tld) {
|| isValidCountryCodeTld(tld);
}
/**
- * Returns true if the specified String matches any
- * IANA-defined infrastructure top-level domain. Leading dots are
- * ignored if present. The search is case-insensitive.
+ * Returns true if the specified String matches any IANA-defined infrastructure
+ * top-level domain. Leading dots are ignored if present. The search is case-insensitive.
+ *
* @param iTld the parameter to check for infrastructure TLD status, not null
* @return true if the parameter is an infrastructure TLD
*/
@@ -200,9 +179,9 @@ public boolean isValidInfrastructureTld(String iTld) {
return arrayContains(INFRASTRUCTURE_TLDS, key);
}
/**
- * Returns true if the specified String matches any
- * IANA-defined generic top-level domain. Leading dots are ignored
- * if present. The search is case-insensitive.
+ * Returns true if the specified String matches any IANA-defined generic top-level
+ * domain. Leading dots are ignored if present. The search is case-insensitive.
+ *
* @param gTld the parameter to check for generic TLD status, not null
* @return true if the parameter is a generic TLD
*/
@@ -212,9 +191,9 @@ public boolean isValidGenericTld(String gTld) {
&& !arrayContains(genericTLDsMinus, key);
}
/**
- * Returns true if the specified String matches any
- * IANA-defined country code top-level domain. Leading dots are
- * ignored if present. The search is case-insensitive.
+ * Returns true if the specified String matches any IANA-defined country code
+ * top-level domain. Leading dots are ignored if present. The search is case-insensitive.
+ *
* @param ccTld the parameter to check for country code TLD status, not null
* @return true if the parameter is a country code TLD
*/
@@ -224,9 +203,10 @@ public boolean isValidCountryCodeTld(String ccTld) {
&& !arrayContains(countryCodeTLDsMinus, key);
}
/**
- * Returns true if the specified String matches any
- * widely used "local" domains (localhost or localdomain). Leading dots are
- * ignored if present. The search is case-insensitive.
+ * Returns true if the specified String matches any widely used "local" domains
+ * (localhost or localdomain). Leading dots are ignored if present. The search is
+ * case-insensitive.
+ *
* @param lTld the parameter to check for local TLD status, not null
* @return true if the parameter is an local TLD
*/
@@ -234,6 +214,7 @@ public boolean isValidLocalTld(String lTld) {
final String key = chompLeadingDot(unicodeToASCII(lTld).toLowerCase(Locale.ENGLISH));
return arrayContains(LOCAL_TLDS, key);
}
+
private String chompLeadingDot(String str) {
if (str.startsWith(".")) {
return str.substring(1);
@@ -252,1323 +233,1350 @@ private String chompLeadingDot(String str) {
// For example (as of 2015-01-02):
// .bl country-code Not assigned
// .um country-code Not assigned
- // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary search
- private static final String[] INFRASTRUCTURE_TLDS = new String[] {
- "arpa", // internet infrastructure
- };
- // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary search
- private static final String[] GENERIC_TLDS = new String[] {
- // Taken from Version 2016042500, Last Updated Mon Apr 25 07:07:01 2016 UTC
- "aaa", // aaa American Automobile Association, Inc.
- "aarp", // aarp AARP
- "abb", // abb ABB Ltd
- "abbott", // abbott Abbott Laboratories, Inc.
- "abbvie", // abbvie AbbVie Inc.
- "abogado", // abogado Top Level Domain Holdings Limited
- "abudhabi", // abudhabi Abu Dhabi Systems and Information Centre
- "academy", // academy Half Oaks, LLC
- "accenture", // accenture Accenture plc
- "accountant", // accountant dot Accountant Limited
- "accountants", // accountants Knob Town, LLC
- "aco", // aco ACO Severin Ahlmann GmbH & Co. KG
- "active", // active The Active Network, Inc
- "actor", // actor United TLD Holdco Ltd.
- "adac", // adac Allgemeiner Deutscher Automobil-Club e.V. (ADAC)
- "ads", // ads Charleston Road Registry Inc.
- "adult", // adult ICM Registry AD LLC
- "aeg", // aeg Aktiebolaget Electrolux
- "aero", // aero Societe Internationale de Telecommunications Aeronautique (SITA INC USA)
- "afl", // afl Australian Football League
- "agakhan", // agakhan Fondation Aga Khan (Aga Khan Foundation)
- "agency", // agency Steel Falls, LLC
- "aig", // aig American International Group, Inc.
- "airforce", // airforce United TLD Holdco Ltd.
- "airtel", // airtel Bharti Airtel Limited
- "akdn", // akdn Fondation Aga Khan (Aga Khan Foundation)
- "alibaba", // alibaba Alibaba Group Holding Limited
- "alipay", // alipay Alibaba Group Holding Limited
- "allfinanz", // allfinanz Allfinanz Deutsche Vermögensberatung Aktiengesellschaft
- "ally", // ally Ally Financial Inc.
- "alsace", // alsace REGION D ALSACE
- "amica", // amica Amica Mutual Insurance Company
- "amsterdam", // amsterdam Gemeente Amsterdam
- "analytics", // analytics Campus IP LLC
- "android", // android Charleston Road Registry Inc.
- "anquan", // anquan QIHOO 360 TECHNOLOGY CO. LTD.
- "apartments", // apartments June Maple, LLC
- "app", // app Charleston Road Registry Inc.
- "apple", // apple Apple Inc.
- "aquarelle", // aquarelle Aquarelle.com
- "aramco", // aramco Aramco Services Company
- "archi", // archi STARTING DOT LIMITED
- "army", // army United TLD Holdco Ltd.
- "arte", // arte Association Relative à la Télévision Européenne G.E.I.E.
- "asia", // asia DotAsia Organisation Ltd.
- "associates", // associates Baxter Hill, LLC
- "attorney", // attorney United TLD Holdco, Ltd
- "auction", // auction United TLD HoldCo, Ltd.
- "audi", // audi AUDI Aktiengesellschaft
- "audio", // audio Uniregistry, Corp.
- "author", // author Amazon Registry Services, Inc.
- "auto", // auto Uniregistry, Corp.
- "autos", // autos DERAutos, LLC
- "avianca", // avianca Aerovias del Continente Americano S.A. Avianca
- "aws", // aws Amazon Registry Services, Inc.
- "axa", // axa AXA SA
- "azure", // azure Microsoft Corporation
- "baby", // baby Johnson & Johnson Services, Inc.
- "baidu", // baidu Baidu, Inc.
- "band", // band United TLD Holdco, Ltd
- "bank", // bank fTLD Registry Services, LLC
- "bar", // bar Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable
- "barcelona", // barcelona Municipi de Barcelona
- "barclaycard", // barclaycard Barclays Bank PLC
- "barclays", // barclays Barclays Bank PLC
- "barefoot", // barefoot Gallo Vineyards, Inc.
- "bargains", // bargains Half Hallow, LLC
- "bauhaus", // bauhaus Werkhaus GmbH
- "bayern", // bayern Bayern Connect GmbH
- "bbc", // bbc British Broadcasting Corporation
- "bbva", // bbva BANCO BILBAO VIZCAYA ARGENTARIA, S.A.
- "bcg", // bcg The Boston Consulting Group, Inc.
- "bcn", // bcn Municipi de Barcelona
- "beats", // beats Beats Electronics, LLC
- "beer", // beer Top Level Domain Holdings Limited
- "bentley", // bentley Bentley Motors Limited
- "berlin", // berlin dotBERLIN GmbH & Co. KG
- "best", // best BestTLD Pty Ltd
- "bet", // bet Afilias plc
- "bharti", // bharti Bharti Enterprises (Holding) Private Limited
- "bible", // bible American Bible Society
- "bid", // bid dot Bid Limited
- "bike", // bike Grand Hollow, LLC
- "bing", // bing Microsoft Corporation
- "bingo", // bingo Sand Cedar, LLC
- "bio", // bio STARTING DOT LIMITED
- "biz", // biz Neustar, Inc.
- "black", // black Afilias Limited
- "blackfriday", // blackfriday Uniregistry, Corp.
- "bloomberg", // bloomberg Bloomberg IP Holdings LLC
- "blue", // blue Afilias Limited
- "bms", // bms Bristol-Myers Squibb Company
- "bmw", // bmw Bayerische Motoren Werke Aktiengesellschaft
- "bnl", // bnl Banca Nazionale del Lavoro
- "bnpparibas", // bnpparibas BNP Paribas
- "boats", // boats DERBoats, LLC
- "boehringer", // boehringer Boehringer Ingelheim International GmbH
- "bom", // bom Núcleo de Informação e Coordenação do Ponto BR - NIC.br
- "bond", // bond Bond University Limited
- "boo", // boo Charleston Road Registry Inc.
- "book", // book Amazon Registry Services, Inc.
- "boots", // boots THE BOOTS COMPANY PLC
- "bosch", // bosch Robert Bosch GMBH
- "bostik", // bostik Bostik SA
- "bot", // bot Amazon Registry Services, Inc.
- "boutique", // boutique Over Galley, LLC
- "bradesco", // bradesco Banco Bradesco S.A.
- "bridgestone", // bridgestone Bridgestone Corporation
- "broadway", // broadway Celebrate Broadway, Inc.
- "broker", // broker DOTBROKER REGISTRY LTD
- "brother", // brother Brother Industries, Ltd.
- "brussels", // brussels DNS.be vzw
- "budapest", // budapest Top Level Domain Holdings Limited
- "bugatti", // bugatti Bugatti International SA
- "build", // build Plan Bee LLC
- "builders", // builders Atomic Madison, LLC
- "business", // business Spring Cross, LLC
- "buy", // buy Amazon Registry Services, INC
- "buzz", // buzz DOTSTRATEGY CO.
- "bzh", // bzh Association www.bzh
- "cab", // cab Half Sunset, LLC
- "cafe", // cafe Pioneer Canyon, LLC
- "cal", // cal Charleston Road Registry Inc.
- "call", // call Amazon Registry Services, Inc.
- "camera", // camera Atomic Maple, LLC
- "camp", // camp Delta Dynamite, LLC
- "cancerresearch", // cancerresearch Australian Cancer Research Foundation
- "canon", // canon Canon Inc.
- "capetown", // capetown ZA Central Registry NPC trading as ZA Central Registry
- "capital", // capital Delta Mill, LLC
- "car", // car Cars Registry Limited
- "caravan", // caravan Caravan International, Inc.
- "cards", // cards Foggy Hollow, LLC
- "care", // care Goose Cross, LLC
- "career", // career dotCareer LLC
- "careers", // careers Wild Corner, LLC
- "cars", // cars Uniregistry, Corp.
- "cartier", // cartier Richemont DNS Inc.
- "casa", // casa Top Level Domain Holdings Limited
- "cash", // cash Delta Lake, LLC
- "casino", // casino Binky Sky, LLC
- "cat", // cat Fundacio puntCAT
- "catering", // catering New Falls. LLC
- "cba", // cba COMMONWEALTH BANK OF AUSTRALIA
- "cbn", // cbn The Christian Broadcasting Network, Inc.
- "ceb", // ceb The Corporate Executive Board Company
- "center", // center Tin Mill, LLC
- "ceo", // ceo CEOTLD Pty Ltd
- "cern", // cern European Organization for Nuclear Research ("CERN")
- "cfa", // cfa CFA Institute
- "cfd", // cfd DOTCFD REGISTRY LTD
- "chanel", // chanel Chanel International B.V.
- "channel", // channel Charleston Road Registry Inc.
- "chase", // chase JPMorgan Chase & Co.
- "chat", // chat Sand Fields, LLC
- "cheap", // cheap Sand Cover, LLC
- "chloe", // chloe Richemont DNS Inc.
- "christmas", // christmas Uniregistry, Corp.
- "chrome", // chrome Charleston Road Registry Inc.
- "church", // church Holly Fileds, LLC
- "cipriani", // cipriani Hotel Cipriani Srl
- "circle", // circle Amazon Registry Services, Inc.
- "cisco", // cisco Cisco Technology, Inc.
- "citic", // citic CITIC Group Corporation
- "city", // city Snow Sky, LLC
- "cityeats", // cityeats Lifestyle Domain Holdings, Inc.
- "claims", // claims Black Corner, LLC
- "cleaning", // cleaning Fox Shadow, LLC
- "click", // click Uniregistry, Corp.
- "clinic", // clinic Goose Park, LLC
- "clinique", // clinique The Estée Lauder Companies Inc.
- "clothing", // clothing Steel Lake, LLC
- "cloud", // cloud ARUBA S.p.A.
- "club", // club .CLUB DOMAINS, LLC
- "clubmed", // clubmed Club Méditerranée S.A.
- "coach", // coach Koko Island, LLC
- "codes", // codes Puff Willow, LLC
- "coffee", // coffee Trixy Cover, LLC
- "college", // college XYZ.COM LLC
- "cologne", // cologne NetCologne Gesellschaft für Telekommunikation mbH
- "com", // com VeriSign Global Registry Services
- "commbank", // commbank COMMONWEALTH BANK OF AUSTRALIA
- "community", // community Fox Orchard, LLC
- "company", // company Silver Avenue, LLC
- "compare", // compare iSelect Ltd
- "computer", // computer Pine Mill, LLC
- "comsec", // comsec VeriSign, Inc.
- "condos", // condos Pine House, LLC
- "construction", // construction Fox Dynamite, LLC
- "consulting", // consulting United TLD Holdco, LTD.
- "contact", // contact Top Level Spectrum, Inc.
- "contractors", // contractors Magic Woods, LLC
- "cooking", // cooking Top Level Domain Holdings Limited
- "cool", // cool Koko Lake, LLC
- "coop", // coop DotCooperation LLC
- "corsica", // corsica Collectivité Territoriale de Corse
- "country", // country Top Level Domain Holdings Limited
- "coupon", // coupon Amazon Registry Services, Inc.
- "coupons", // coupons Black Island, LLC
- "courses", // courses OPEN UNIVERSITIES AUSTRALIA PTY LTD
- "credit", // credit Snow Shadow, LLC
- "creditcard", // creditcard Binky Frostbite, LLC
- "creditunion", // creditunion CUNA Performance Resources, LLC
- "cricket", // cricket dot Cricket Limited
- "crown", // crown Crown Equipment Corporation
- "crs", // crs Federated Co-operatives Limited
- "cruises", // cruises Spring Way, LLC
- "csc", // csc Alliance-One Services, Inc.
- "cuisinella", // cuisinella SALM S.A.S.
- "cymru", // cymru Nominet UK
- "cyou", // cyou Beijing Gamease Age Digital Technology Co., Ltd.
- "dabur", // dabur Dabur India Limited
- "dad", // dad Charleston Road Registry Inc.
- "dance", // dance United TLD Holdco Ltd.
- "date", // date dot Date Limited
- "dating", // dating Pine Fest, LLC
- "datsun", // datsun NISSAN MOTOR CO., LTD.
- "day", // day Charleston Road Registry Inc.
- "dclk", // dclk Charleston Road Registry Inc.
- "dealer", // dealer Dealer Dot Com, Inc.
- "deals", // deals Sand Sunset, LLC
- "degree", // degree United TLD Holdco, Ltd
- "delivery", // delivery Steel Station, LLC
- "dell", // dell Dell Inc.
- "deloitte", // deloitte Deloitte Touche Tohmatsu
- "delta", // delta Delta Air Lines, Inc.
- "democrat", // democrat United TLD Holdco Ltd.
- "dental", // dental Tin Birch, LLC
- "dentist", // dentist United TLD Holdco, Ltd
- "desi", // desi Desi Networks LLC
- "design", // design Top Level Design, LLC
- "dev", // dev Charleston Road Registry Inc.
- "diamonds", // diamonds John Edge, LLC
- "diet", // diet Uniregistry, Corp.
- "digital", // digital Dash Park, LLC
- "direct", // direct Half Trail, LLC
- "directory", // directory Extra Madison, LLC
- "discount", // discount Holly Hill, LLC
- "dnp", // dnp Dai Nippon Printing Co., Ltd.
- "docs", // docs Charleston Road Registry Inc.
- "dog", // dog Koko Mill, LLC
- "doha", // doha Communications Regulatory Authority (CRA)
- "domains", // domains Sugar Cross, LLC
-// "doosan", // doosan Doosan Corporation (retired)
- "download", // download dot Support Limited
- "drive", // drive Charleston Road Registry Inc.
- "dubai", // dubai Dubai Smart Government Department
- "durban", // durban ZA Central Registry NPC trading as ZA Central Registry
- "dvag", // dvag Deutsche Vermögensberatung Aktiengesellschaft DVAG
- "earth", // earth Interlink Co., Ltd.
- "eat", // eat Charleston Road Registry Inc.
- "edeka", // edeka EDEKA Verband kaufmännischer Genossenschaften e.V.
- "edu", // edu EDUCAUSE
- "education", // education Brice Way, LLC
- "email", // email Spring Madison, LLC
- "emerck", // emerck Merck KGaA
- "energy", // energy Binky Birch, LLC
- "engineer", // engineer United TLD Holdco Ltd.
- "engineering", // engineering Romeo Canyon
- "enterprises", // enterprises Snow Oaks, LLC
- "epson", // epson Seiko Epson Corporation
- "equipment", // equipment Corn Station, LLC
- "erni", // erni ERNI Group Holding AG
- "esq", // esq Charleston Road Registry Inc.
- "estate", // estate Trixy Park, LLC
- "eurovision", // eurovision European Broadcasting Union (EBU)
- "eus", // eus Puntueus Fundazioa
- "events", // events Pioneer Maple, LLC
- "everbank", // everbank EverBank
- "exchange", // exchange Spring Falls, LLC
- "expert", // expert Magic Pass, LLC
- "exposed", // exposed Victor Beach, LLC
- "express", // express Sea Sunset, LLC
- "extraspace", // extraspace Extra Space Storage LLC
- "fage", // fage Fage International S.A.
- "fail", // fail Atomic Pipe, LLC
- "fairwinds", // fairwinds FairWinds Partners, LLC
- "faith", // faith dot Faith Limited
- "family", // family United TLD Holdco Ltd.
- "fan", // fan Asiamix Digital Ltd
- "fans", // fans Asiamix Digital Limited
- "farm", // farm Just Maple, LLC
- "fashion", // fashion Top Level Domain Holdings Limited
- "fast", // fast Amazon Registry Services, Inc.
- "feedback", // feedback Top Level Spectrum, Inc.
- "ferrero", // ferrero Ferrero Trading Lux S.A.
- "film", // film Motion Picture Domain Registry Pty Ltd
- "final", // final Núcleo de Informação e Coordenação do Ponto BR - NIC.br
- "finance", // finance Cotton Cypress, LLC
- "financial", // financial Just Cover, LLC
- "firestone", // firestone Bridgestone Corporation
- "firmdale", // firmdale Firmdale Holdings Limited
- "fish", // fish Fox Woods, LLC
- "fishing", // fishing Top Level Domain Holdings Limited
- "fit", // fit Minds + Machines Group Limited
- "fitness", // fitness Brice Orchard, LLC
- "flickr", // flickr Yahoo! Domain Services Inc.
- "flights", // flights Fox Station, LLC
- "florist", // florist Half Cypress, LLC
- "flowers", // flowers Uniregistry, Corp.
- "flsmidth", // flsmidth FLSmidth A/S
- "fly", // fly Charleston Road Registry Inc.
- "foo", // foo Charleston Road Registry Inc.
- "football", // football Foggy Farms, LLC
- "ford", // ford Ford Motor Company
- "forex", // forex DOTFOREX REGISTRY LTD
- "forsale", // forsale United TLD Holdco, LLC
- "forum", // forum Fegistry, LLC
- "foundation", // foundation John Dale, LLC
- "fox", // fox FOX Registry, LLC
- "fresenius", // fresenius Fresenius Immobilien-Verwaltungs-GmbH
- "frl", // frl FRLregistry B.V.
- "frogans", // frogans OP3FT
- "frontier", // frontier Frontier Communications Corporation
- "ftr", // ftr Frontier Communications Corporation
- "fund", // fund John Castle, LLC
- "furniture", // furniture Lone Fields, LLC
- "futbol", // futbol United TLD Holdco, Ltd.
- "fyi", // fyi Silver Tigers, LLC
- "gal", // gal Asociación puntoGAL
- "gallery", // gallery Sugar House, LLC
- "gallo", // gallo Gallo Vineyards, Inc.
- "gallup", // gallup Gallup, Inc.
- "game", // game Uniregistry, Corp.
- "garden", // garden Top Level Domain Holdings Limited
- "gbiz", // gbiz Charleston Road Registry Inc.
- "gdn", // gdn Joint Stock Company "Navigation-information systems"
- "gea", // gea GEA Group Aktiengesellschaft
- "gent", // gent COMBELL GROUP NV/SA
- "genting", // genting Resorts World Inc. Pte. Ltd.
- "ggee", // ggee GMO Internet, Inc.
- "gift", // gift Uniregistry, Corp.
- "gifts", // gifts Goose Sky, LLC
- "gives", // gives United TLD Holdco Ltd.
- "giving", // giving Giving Limited
- "glass", // glass Black Cover, LLC
- "gle", // gle Charleston Road Registry Inc.
- "global", // global Dot Global Domain Registry Limited
- "globo", // globo Globo Comunicação e Participações S.A
- "gmail", // gmail Charleston Road Registry Inc.
- "gmbh", // gmbh Extra Dynamite, LLC
- "gmo", // gmo GMO Internet, Inc.
- "gmx", // gmx 1&1 Mail & Media GmbH
- "gold", // gold June Edge, LLC
- "goldpoint", // goldpoint YODOBASHI CAMERA CO.,LTD.
- "golf", // golf Lone Falls, LLC
- "goo", // goo NTT Resonant Inc.
- "goog", // goog Charleston Road Registry Inc.
- "google", // google Charleston Road Registry Inc.
- "gop", // gop Republican State Leadership Committee, Inc.
- "got", // got Amazon Registry Services, Inc.
- "gov", // gov General Services Administration Attn: QTDC, 2E08 (.gov Domain Registration)
- "grainger", // grainger Grainger Registry Services, LLC
- "graphics", // graphics Over Madison, LLC
- "gratis", // gratis Pioneer Tigers, LLC
- "green", // green Afilias Limited
- "gripe", // gripe Corn Sunset, LLC
- "group", // group Romeo Town, LLC
- "gucci", // gucci Guccio Gucci S.p.a.
- "guge", // guge Charleston Road Registry Inc.
- "guide", // guide Snow Moon, LLC
- "guitars", // guitars Uniregistry, Corp.
- "guru", // guru Pioneer Cypress, LLC
- "hamburg", // hamburg Hamburg Top-Level-Domain GmbH
- "hangout", // hangout Charleston Road Registry Inc.
- "haus", // haus United TLD Holdco, LTD.
- "hdfcbank", // hdfcbank HDFC Bank Limited
- "health", // health DotHealth, LLC
- "healthcare", // healthcare Silver Glen, LLC
- "help", // help Uniregistry, Corp.
- "helsinki", // helsinki City of Helsinki
- "here", // here Charleston Road Registry Inc.
- "hermes", // hermes Hermes International
- "hiphop", // hiphop Uniregistry, Corp.
- "hitachi", // hitachi Hitachi, Ltd.
- "hiv", // hiv dotHIV gemeinnuetziger e.V.
- "hockey", // hockey Half Willow, LLC
- "holdings", // holdings John Madison, LLC
- "holiday", // holiday Goose Woods, LLC
- "homedepot", // homedepot Homer TLC, Inc.
- "homes", // homes DERHomes, LLC
- "honda", // honda Honda Motor Co., Ltd.
- "horse", // horse Top Level Domain Holdings Limited
- "host", // host DotHost Inc.
- "hosting", // hosting Uniregistry, Corp.
- "hoteles", // hoteles Travel Reservations SRL
- "hotmail", // hotmail Microsoft Corporation
- "house", // house Sugar Park, LLC
- "how", // how Charleston Road Registry Inc.
- "hsbc", // hsbc HSBC Holdings PLC
- "htc", // htc HTC corporation
- "hyundai", // hyundai Hyundai Motor Company
- "ibm", // ibm International Business Machines Corporation
- "icbc", // icbc Industrial and Commercial Bank of China Limited
- "ice", // ice IntercontinentalExchange, Inc.
- "icu", // icu One.com A/S
- "ifm", // ifm ifm electronic gmbh
- "iinet", // iinet Connect West Pty. Ltd.
- "imamat", // imamat Fondation Aga Khan (Aga Khan Foundation)
- "immo", // immo Auburn Bloom, LLC
- "immobilien", // immobilien United TLD Holdco Ltd.
- "industries", // industries Outer House, LLC
- "infiniti", // infiniti NISSAN MOTOR CO., LTD.
- "info", // info Afilias Limited
- "ing", // ing Charleston Road Registry Inc.
- "ink", // ink Top Level Design, LLC
- "institute", // institute Outer Maple, LLC
- "insurance", // insurance fTLD Registry Services LLC
- "insure", // insure Pioneer Willow, LLC
- "int", // int Internet Assigned Numbers Authority
- "international", // international Wild Way, LLC
- "investments", // investments Holly Glen, LLC
- "ipiranga", // ipiranga Ipiranga Produtos de Petroleo S.A.
- "irish", // irish Dot-Irish LLC
- "iselect", // iselect iSelect Ltd
- "ismaili", // ismaili Fondation Aga Khan (Aga Khan Foundation)
- "ist", // ist Istanbul Metropolitan Municipality
- "istanbul", // istanbul Istanbul Metropolitan Municipality / Medya A.S.
- "itau", // itau Itau Unibanco Holding S.A.
- "iwc", // iwc Richemont DNS Inc.
- "jaguar", // jaguar Jaguar Land Rover Ltd
- "java", // java Oracle Corporation
- "jcb", // jcb JCB Co., Ltd.
- "jcp", // jcp JCP Media, Inc.
- "jetzt", // jetzt New TLD Company AB
- "jewelry", // jewelry Wild Bloom, LLC
- "jlc", // jlc Richemont DNS Inc.
- "jll", // jll Jones Lang LaSalle Incorporated
- "jmp", // jmp Matrix IP LLC
- "jnj", // jnj Johnson & Johnson Services, Inc.
- "jobs", // jobs Employ Media LLC
- "joburg", // joburg ZA Central Registry NPC trading as ZA Central Registry
- "jot", // jot Amazon Registry Services, Inc.
- "joy", // joy Amazon Registry Services, Inc.
- "jpmorgan", // jpmorgan JPMorgan Chase & Co.
- "jprs", // jprs Japan Registry Services Co., Ltd.
- "juegos", // juegos Uniregistry, Corp.
- "kaufen", // kaufen United TLD Holdco Ltd.
- "kddi", // kddi KDDI CORPORATION
- "kerryhotels", // kerryhotels Kerry Trading Co. Limited
- "kerrylogistics", // kerrylogistics Kerry Trading Co. Limited
- "kerryproperties", // kerryproperties Kerry Trading Co. Limited
- "kfh", // kfh Kuwait Finance House
- "kia", // kia KIA MOTORS CORPORATION
- "kim", // kim Afilias Limited
- "kinder", // kinder Ferrero Trading Lux S.A.
- "kitchen", // kitchen Just Goodbye, LLC
- "kiwi", // kiwi DOT KIWI LIMITED
- "koeln", // koeln NetCologne Gesellschaft für Telekommunikation mbH
- "komatsu", // komatsu Komatsu Ltd.
- "kpmg", // kpmg KPMG International Cooperative (KPMG International Genossenschaft)
- "kpn", // kpn Koninklijke KPN N.V.
- "krd", // krd KRG Department of Information Technology
- "kred", // kred KredTLD Pty Ltd
- "kuokgroup", // kuokgroup Kerry Trading Co. Limited
- "kyoto", // kyoto Academic Institution: Kyoto Jyoho Gakuen
- "lacaixa", // lacaixa CAIXA D'ESTALVIS I PENSIONS DE BARCELONA
- "lamborghini", // lamborghini Automobili Lamborghini S.p.A.
- "lamer", // lamer The Estée Lauder Companies Inc.
- "lancaster", // lancaster LANCASTER
- "land", // land Pine Moon, LLC
- "landrover", // landrover Jaguar Land Rover Ltd
- "lanxess", // lanxess LANXESS Corporation
- "lasalle", // lasalle Jones Lang LaSalle Incorporated
- "lat", // lat ECOM-LAC Federación de Latinoamérica y el Caribe para Internet y el Comercio Electrónico
- "latrobe", // latrobe La Trobe University
- "law", // law Minds + Machines Group Limited
- "lawyer", // lawyer United TLD Holdco, Ltd
- "lds", // lds IRI Domain Management, LLC
- "lease", // lease Victor Trail, LLC
- "leclerc", // leclerc A.C.D. LEC Association des Centres Distributeurs Edouard Leclerc
- "legal", // legal Blue Falls, LLC
- "lexus", // lexus TOYOTA MOTOR CORPORATION
- "lgbt", // lgbt Afilias Limited
- "liaison", // liaison Liaison Technologies, Incorporated
- "lidl", // lidl Schwarz Domains und Services GmbH & Co. KG
- "life", // life Trixy Oaks, LLC
- "lifeinsurance", // lifeinsurance American Council of Life Insurers
- "lifestyle", // lifestyle Lifestyle Domain Holdings, Inc.
- "lighting", // lighting John McCook, LLC
- "like", // like Amazon Registry Services, Inc.
- "limited", // limited Big Fest, LLC
- "limo", // limo Hidden Frostbite, LLC
- "lincoln", // lincoln Ford Motor Company
- "linde", // linde Linde Aktiengesellschaft
- "link", // link Uniregistry, Corp.
- "live", // live United TLD Holdco Ltd.
- "living", // living Lifestyle Domain Holdings, Inc.
- "lixil", // lixil LIXIL Group Corporation
- "loan", // loan dot Loan Limited
- "loans", // loans June Woods, LLC
- "locus", // locus Locus Analytics LLC
- "lol", // lol Uniregistry, Corp.
- "london", // london Dot London Domains Limited
- "lotte", // lotte Lotte Holdings Co., Ltd.
- "lotto", // lotto Afilias Limited
- "love", // love Merchant Law Group LLP
- "ltd", // ltd Over Corner, LLC
- "ltda", // ltda InterNetX Corp.
- "lupin", // lupin LUPIN LIMITED
- "luxe", // luxe Top Level Domain Holdings Limited
- "luxury", // luxury Luxury Partners LLC
- "madrid", // madrid Comunidad de Madrid
- "maif", // maif Mutuelle Assurance Instituteur France (MAIF)
- "maison", // maison Victor Frostbite, LLC
- "makeup", // makeup L'Oréal
- "man", // man MAN SE
- "management", // management John Goodbye, LLC
- "mango", // mango PUNTO FA S.L.
- "market", // market Unitied TLD Holdco, Ltd
- "marketing", // marketing Fern Pass, LLC
- "markets", // markets DOTMARKETS REGISTRY LTD
- "marriott", // marriott Marriott Worldwide Corporation
- "mba", // mba Lone Hollow, LLC
- "med", // med Medistry LLC
- "media", // media Grand Glen, LLC
- "meet", // meet Afilias Limited
- "melbourne", // melbourne The Crown in right of the State of Victoria, represented by its Department of State Development, Business and Innovation
- "meme", // meme Charleston Road Registry Inc.
- "memorial", // memorial Dog Beach, LLC
- "men", // men Exclusive Registry Limited
- "menu", // menu Wedding TLD2, LLC
- "meo", // meo PT Comunicacoes S.A.
- "miami", // miami Top Level Domain Holdings Limited
- "microsoft", // microsoft Microsoft Corporation
- "mil", // mil DoD Network Information Center
- "mini", // mini Bayerische Motoren Werke Aktiengesellschaft
- "mls", // mls The Canadian Real Estate Association
- "mma", // mma MMA IARD
- "mobi", // mobi Afilias Technologies Limited dba dotMobi
- "mobily", // mobily GreenTech Consultancy Company W.L.L.
- "moda", // moda United TLD Holdco Ltd.
- "moe", // moe Interlink Co., Ltd.
- "moi", // moi Amazon Registry Services, Inc.
- "mom", // mom Uniregistry, Corp.
- "monash", // monash Monash University
- "money", // money Outer McCook, LLC
- "montblanc", // montblanc Richemont DNS Inc.
- "mormon", // mormon IRI Domain Management, LLC ("Applicant")
- "mortgage", // mortgage United TLD Holdco, Ltd
- "moscow", // moscow Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)
- "motorcycles", // motorcycles DERMotorcycles, LLC
- "mov", // mov Charleston Road Registry Inc.
- "movie", // movie New Frostbite, LLC
- "movistar", // movistar Telefónica S.A.
- "mtn", // mtn MTN Dubai Limited
- "mtpc", // mtpc Mitsubishi Tanabe Pharma Corporation
- "mtr", // mtr MTR Corporation Limited
- "museum", // museum Museum Domain Management Association
- "mutual", // mutual Northwestern Mutual MU TLD Registry, LLC
- "mutuelle", // mutuelle Fédération Nationale de la Mutualité Française
- "nadex", // nadex Nadex Domains, Inc
- "nagoya", // nagoya GMO Registry, Inc.
- "name", // name VeriSign Information Services, Inc.
- "natura", // natura NATURA COSMÉTICOS S.A.
- "navy", // navy United TLD Holdco Ltd.
- "nec", // nec NEC Corporation
- "net", // net VeriSign Global Registry Services
- "netbank", // netbank COMMONWEALTH BANK OF AUSTRALIA
- "network", // network Trixy Manor, LLC
- "neustar", // neustar NeuStar, Inc.
- "new", // new Charleston Road Registry Inc.
- "news", // news United TLD Holdco Ltd.
- "nexus", // nexus Charleston Road Registry Inc.
- "ngo", // ngo Public Interest Registry
- "nhk", // nhk Japan Broadcasting Corporation (NHK)
- "nico", // nico DWANGO Co., Ltd.
- "nikon", // nikon NIKON CORPORATION
- "ninja", // ninja United TLD Holdco Ltd.
- "nissan", // nissan NISSAN MOTOR CO., LTD.
- "nissay", // nissay Nippon Life Insurance Company
- "nokia", // nokia Nokia Corporation
- "northwesternmutual", // northwesternmutual Northwestern Mutual Registry, LLC
- "norton", // norton Symantec Corporation
- "nowruz", // nowruz Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
- "nra", // nra NRA Holdings Company, INC.
- "nrw", // nrw Minds + Machines GmbH
- "ntt", // ntt NIPPON TELEGRAPH AND TELEPHONE CORPORATION
- "nyc", // nyc The City of New York by and through the New York City Department of Information Technology & Telecommunications
- "obi", // obi OBI Group Holding SE & Co. KGaA
- "office", // office Microsoft Corporation
- "okinawa", // okinawa BusinessRalliart inc.
- "omega", // omega The Swatch Group Ltd
- "one", // one One.com A/S
- "ong", // ong Public Interest Registry
- "onl", // onl I-REGISTRY Ltd., Niederlassung Deutschland
- "online", // online DotOnline Inc.
- "ooo", // ooo INFIBEAM INCORPORATION LIMITED
- "oracle", // oracle Oracle Corporation
- "orange", // orange Orange Brand Services Limited
- "org", // org Public Interest Registry (PIR)
- "organic", // organic Afilias Limited
- "origins", // origins The Estée Lauder Companies Inc.
- "osaka", // osaka Interlink Co., Ltd.
- "otsuka", // otsuka Otsuka Holdings Co., Ltd.
- "ovh", // ovh OVH SAS
- "page", // page Charleston Road Registry Inc.
- "pamperedchef", // pamperedchef The Pampered Chef, Ltd.
- "panerai", // panerai Richemont DNS Inc.
- "paris", // paris City of Paris
- "pars", // pars Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
- "partners", // partners Magic Glen, LLC
- "parts", // parts Sea Goodbye, LLC
- "party", // party Blue Sky Registry Limited
- "passagens", // passagens Travel Reservations SRL
- "pet", // pet Afilias plc
- "pharmacy", // pharmacy National Association of Boards of Pharmacy
- "philips", // philips Koninklijke Philips N.V.
- "photo", // photo Uniregistry, Corp.
- "photography", // photography Sugar Glen, LLC
- "photos", // photos Sea Corner, LLC
- "physio", // physio PhysBiz Pty Ltd
- "piaget", // piaget Richemont DNS Inc.
- "pics", // pics Uniregistry, Corp.
- "pictet", // pictet Pictet Europe S.A.
- "pictures", // pictures Foggy Sky, LLC
- "pid", // pid Top Level Spectrum, Inc.
- "pin", // pin Amazon Registry Services, Inc.
- "ping", // ping Ping Registry Provider, Inc.
- "pink", // pink Afilias Limited
- "pizza", // pizza Foggy Moon, LLC
- "place", // place Snow Galley, LLC
- "play", // play Charleston Road Registry Inc.
- "playstation", // playstation Sony Computer Entertainment Inc.
- "plumbing", // plumbing Spring Tigers, LLC
- "plus", // plus Sugar Mill, LLC
- "pohl", // pohl Deutsche Vermögensberatung Aktiengesellschaft DVAG
- "poker", // poker Afilias Domains No. 5 Limited
- "porn", // porn ICM Registry PN LLC
- "post", // post Universal Postal Union
- "praxi", // praxi Praxi S.p.A.
- "press", // press DotPress Inc.
- "pro", // pro Registry Services Corporation dba RegistryPro
- "prod", // prod Charleston Road Registry Inc.
- "productions", // productions Magic Birch, LLC
- "prof", // prof Charleston Road Registry Inc.
- "progressive", // progressive Progressive Casualty Insurance Company
- "promo", // promo Afilias plc
- "properties", // properties Big Pass, LLC
- "property", // property Uniregistry, Corp.
- "protection", // protection XYZ.COM LLC
- "pub", // pub United TLD Holdco Ltd.
- "pwc", // pwc PricewaterhouseCoopers LLP
- "qpon", // qpon dotCOOL, Inc.
- "quebec", // quebec PointQuébec Inc
- "quest", // quest Quest ION Limited
- "racing", // racing Premier Registry Limited
- "read", // read Amazon Registry Services, Inc.
- "realtor", // realtor Real Estate Domains LLC
- "realty", // realty Fegistry, LLC
- "recipes", // recipes Grand Island, LLC
- "red", // red Afilias Limited
- "redstone", // redstone Redstone Haute Couture Co., Ltd.
- "redumbrella", // redumbrella Travelers TLD, LLC
- "rehab", // rehab United TLD Holdco Ltd.
- "reise", // reise Foggy Way, LLC
- "reisen", // reisen New Cypress, LLC
- "reit", // reit National Association of Real Estate Investment Trusts, Inc.
- "ren", // ren Beijing Qianxiang Wangjing Technology Development Co., Ltd.
- "rent", // rent XYZ.COM LLC
- "rentals", // rentals Big Hollow,LLC
- "repair", // repair Lone Sunset, LLC
- "report", // report Binky Glen, LLC
- "republican", // republican United TLD Holdco Ltd.
- "rest", // rest Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable
- "restaurant", // restaurant Snow Avenue, LLC
- "review", // review dot Review Limited
- "reviews", // reviews United TLD Holdco, Ltd.
- "rexroth", // rexroth Robert Bosch GMBH
- "rich", // rich I-REGISTRY Ltd., Niederlassung Deutschland
- "ricoh", // ricoh Ricoh Company, Ltd.
- "rio", // rio Empresa Municipal de Informática SA - IPLANRIO
- "rip", // rip United TLD Holdco Ltd.
- "rocher", // rocher Ferrero Trading Lux S.A.
- "rocks", // rocks United TLD Holdco, LTD.
- "rodeo", // rodeo Top Level Domain Holdings Limited
- "room", // room Amazon Registry Services, Inc.
- "rsvp", // rsvp Charleston Road Registry Inc.
- "ruhr", // ruhr regiodot GmbH & Co. KG
- "run", // run Snow Park, LLC
- "rwe", // rwe RWE AG
- "ryukyu", // ryukyu BusinessRalliart inc.
- "saarland", // saarland dotSaarland GmbH
- "safe", // safe Amazon Registry Services, Inc.
- "safety", // safety Safety Registry Services, LLC.
- "sakura", // sakura SAKURA Internet Inc.
- "sale", // sale United TLD Holdco, Ltd
- "salon", // salon Outer Orchard, LLC
- "samsung", // samsung SAMSUNG SDS CO., LTD
- "sandvik", // sandvik Sandvik AB
- "sandvikcoromant", // sandvikcoromant Sandvik AB
- "sanofi", // sanofi Sanofi
- "sap", // sap SAP AG
- "sapo", // sapo PT Comunicacoes S.A.
- "sarl", // sarl Delta Orchard, LLC
- "sas", // sas Research IP LLC
- "saxo", // saxo Saxo Bank A/S
- "sbi", // sbi STATE BANK OF INDIA
- "sbs", // sbs SPECIAL BROADCASTING SERVICE CORPORATION
- "sca", // sca SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ)
- "scb", // scb The Siam Commercial Bank Public Company Limited ("SCB")
- "schaeffler", // schaeffler Schaeffler Technologies AG & Co. KG
- "schmidt", // schmidt SALM S.A.S.
- "scholarships", // scholarships Scholarships.com, LLC
- "school", // school Little Galley, LLC
- "schule", // schule Outer Moon, LLC
- "schwarz", // schwarz Schwarz Domains und Services GmbH & Co. KG
- "science", // science dot Science Limited
- "scor", // scor SCOR SE
- "scot", // scot Dot Scot Registry Limited
- "seat", // seat SEAT, S.A. (Sociedad Unipersonal)
- "security", // security XYZ.COM LLC
- "seek", // seek Seek Limited
- "select", // select iSelect Ltd
- "sener", // sener Sener Ingeniería y Sistemas, S.A.
- "services", // services Fox Castle, LLC
- "seven", // seven Seven West Media Ltd
- "sew", // sew SEW-EURODRIVE GmbH & Co KG
- "sex", // sex ICM Registry SX LLC
- "sexy", // sexy Uniregistry, Corp.
- "sfr", // sfr Societe Francaise du Radiotelephone - SFR
- "sharp", // sharp Sharp Corporation
- "shaw", // shaw Shaw Cablesystems G.P.
- "shell", // shell Shell Information Technology International Inc
- "shia", // shia Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
- "shiksha", // shiksha Afilias Limited
- "shoes", // shoes Binky Galley, LLC
- "shouji", // shouji QIHOO 360 TECHNOLOGY CO. LTD.
- "show", // show Snow Beach, LLC
- "shriram", // shriram Shriram Capital Ltd.
- "sina", // sina Sina Corporation
- "singles", // singles Fern Madison, LLC
- "site", // site DotSite Inc.
- "ski", // ski STARTING DOT LIMITED
- "skin", // skin L'Oréal
- "sky", // sky Sky International AG
- "skype", // skype Microsoft Corporation
- "smile", // smile Amazon Registry Services, Inc.
- "sncf", // sncf SNCF (Société Nationale des Chemins de fer Francais)
- "soccer", // soccer Foggy Shadow, LLC
- "social", // social United TLD Holdco Ltd.
- "softbank", // softbank SoftBank Group Corp.
- "software", // software United TLD Holdco, Ltd
- "sohu", // sohu Sohu.com Limited
- "solar", // solar Ruby Town, LLC
- "solutions", // solutions Silver Cover, LLC
- "song", // song Amazon Registry Services, Inc.
- "sony", // sony Sony Corporation
- "soy", // soy Charleston Road Registry Inc.
- "space", // space DotSpace Inc.
- "spiegel", // spiegel SPIEGEL-Verlag Rudolf Augstein GmbH & Co. KG
- "spot", // spot Amazon Registry Services, Inc.
- "spreadbetting", // spreadbetting DOTSPREADBETTING REGISTRY LTD
- "srl", // srl InterNetX Corp.
- "stada", // stada STADA Arzneimittel AG
- "star", // star Star India Private Limited
- "starhub", // starhub StarHub Limited
- "statebank", // statebank STATE BANK OF INDIA
- "statefarm", // statefarm State Farm Mutual Automobile Insurance Company
- "statoil", // statoil Statoil ASA
- "stc", // stc Saudi Telecom Company
- "stcgroup", // stcgroup Saudi Telecom Company
- "stockholm", // stockholm Stockholms kommun
- "storage", // storage Self Storage Company LLC
- "store", // store DotStore Inc.
- "stream", // stream dot Stream Limited
- "studio", // studio United TLD Holdco Ltd.
- "study", // study OPEN UNIVERSITIES AUSTRALIA PTY LTD
- "style", // style Binky Moon, LLC
- "sucks", // sucks Vox Populi Registry Ltd.
- "supplies", // supplies Atomic Fields, LLC
- "supply", // supply Half Falls, LLC
- "support", // support Grand Orchard, LLC
- "surf", // surf Top Level Domain Holdings Limited
- "surgery", // surgery Tin Avenue, LLC
- "suzuki", // suzuki SUZUKI MOTOR CORPORATION
- "swatch", // swatch The Swatch Group Ltd
- "swiss", // swiss Swiss Confederation
- "sydney", // sydney State of New South Wales, Department of Premier and Cabinet
- "symantec", // symantec Symantec Corporation
- "systems", // systems Dash Cypress, LLC
- "tab", // tab Tabcorp Holdings Limited
- "taipei", // taipei Taipei City Government
- "talk", // talk Amazon Registry Services, Inc.
- "taobao", // taobao Alibaba Group Holding Limited
- "tatamotors", // tatamotors Tata Motors Ltd
- "tatar", // tatar Limited Liability Company "Coordination Center of Regional Domain of Tatarstan Republic"
- "tattoo", // tattoo Uniregistry, Corp.
- "tax", // tax Storm Orchard, LLC
- "taxi", // taxi Pine Falls, LLC
- "tci", // tci Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
- "team", // team Atomic Lake, LLC
- "tech", // tech Dot Tech LLC
- "technology", // technology Auburn Falls, LLC
- "tel", // tel Telnic Ltd.
- "telecity", // telecity TelecityGroup International Limited
- "telefonica", // telefonica Telefónica S.A.
- "temasek", // temasek Temasek Holdings (Private) Limited
- "tennis", // tennis Cotton Bloom, LLC
- "teva", // teva Teva Pharmaceutical Industries Limited
- "thd", // thd Homer TLC, Inc.
- "theater", // theater Blue Tigers, LLC
- "theatre", // theatre XYZ.COM LLC
- "tickets", // tickets Accent Media Limited
- "tienda", // tienda Victor Manor, LLC
- "tiffany", // tiffany Tiffany and Company
- "tips", // tips Corn Willow, LLC
- "tires", // tires Dog Edge, LLC
- "tirol", // tirol punkt Tirol GmbH
- "tmall", // tmall Alibaba Group Holding Limited
- "today", // today Pearl Woods, LLC
- "tokyo", // tokyo GMO Registry, Inc.
- "tools", // tools Pioneer North, LLC
- "top", // top Jiangsu Bangning Science & Technology Co.,Ltd.
- "toray", // toray Toray Industries, Inc.
- "toshiba", // toshiba TOSHIBA Corporation
- "total", // total Total SA
- "tours", // tours Sugar Station, LLC
- "town", // town Koko Moon, LLC
- "toyota", // toyota TOYOTA MOTOR CORPORATION
- "toys", // toys Pioneer Orchard, LLC
- "trade", // trade Elite Registry Limited
- "trading", // trading DOTTRADING REGISTRY LTD
- "training", // training Wild Willow, LLC
- "travel", // travel Tralliance Registry Management Company, LLC.
- "travelers", // travelers Travelers TLD, LLC
- "travelersinsurance", // travelersinsurance Travelers TLD, LLC
- "trust", // trust Artemis Internet Inc
- "trv", // trv Travelers TLD, LLC
- "tube", // tube Latin American Telecom LLC
- "tui", // tui TUI AG
- "tunes", // tunes Amazon Registry Services, Inc.
- "tushu", // tushu Amazon Registry Services, Inc.
- "tvs", // tvs T V SUNDRAM IYENGAR & SONS PRIVATE LIMITED
- "ubs", // ubs UBS AG
- "unicom", // unicom China United Network Communications Corporation Limited
- "university", // university Little Station, LLC
- "uno", // uno Dot Latin LLC
- "uol", // uol UBN INTERNET LTDA.
- "vacations", // vacations Atomic Tigers, LLC
- "vana", // vana Lifestyle Domain Holdings, Inc.
- "vegas", // vegas Dot Vegas, Inc.
- "ventures", // ventures Binky Lake, LLC
- "verisign", // verisign VeriSign, Inc.
- "versicherung", // versicherung dotversicherung-registry GmbH
- "vet", // vet United TLD Holdco, Ltd
- "viajes", // viajes Black Madison, LLC
- "video", // video United TLD Holdco, Ltd
- "vig", // vig VIENNA INSURANCE GROUP AG Wiener Versicherung Gruppe
- "viking", // viking Viking River Cruises (Bermuda) Ltd.
- "villas", // villas New Sky, LLC
- "vin", // vin Holly Shadow, LLC
- "vip", // vip Minds + Machines Group Limited
- "virgin", // virgin Virgin Enterprises Limited
- "vision", // vision Koko Station, LLC
- "vista", // vista Vistaprint Limited
- "vistaprint", // vistaprint Vistaprint Limited
- "viva", // viva Saudi Telecom Company
- "vlaanderen", // vlaanderen DNS.be vzw
- "vodka", // vodka Top Level Domain Holdings Limited
- "volkswagen", // volkswagen Volkswagen Group of America Inc.
- "vote", // vote Monolith Registry LLC
- "voting", // voting Valuetainment Corp.
- "voto", // voto Monolith Registry LLC
- "voyage", // voyage Ruby House, LLC
- "vuelos", // vuelos Travel Reservations SRL
- "wales", // wales Nominet UK
- "walter", // walter Sandvik AB
- "wang", // wang Zodiac Registry Limited
- "wanggou", // wanggou Amazon Registry Services, Inc.
- "watch", // watch Sand Shadow, LLC
- "watches", // watches Richemont DNS Inc.
- "weather", // weather The Weather Channel, LLC
- "weatherchannel", // weatherchannel The Weather Channel, LLC
- "webcam", // webcam dot Webcam Limited
- "weber", // weber Saint-Gobain Weber SA
- "website", // website DotWebsite Inc.
- "wed", // wed Atgron, Inc.
- "wedding", // wedding Top Level Domain Holdings Limited
- "weibo", // weibo Sina Corporation
- "weir", // weir Weir Group IP Limited
- "whoswho", // whoswho Who's Who Registry
- "wien", // wien punkt.wien GmbH
- "wiki", // wiki Top Level Design, LLC
- "williamhill", // williamhill William Hill Organization Limited
- "win", // win First Registry Limited
- "windows", // windows Microsoft Corporation
- "wine", // wine June Station, LLC
- "wme", // wme William Morris Endeavor Entertainment, LLC
- "wolterskluwer", // wolterskluwer Wolters Kluwer N.V.
- "work", // work Top Level Domain Holdings Limited
- "works", // works Little Dynamite, LLC
- "world", // world Bitter Fields, LLC
- "wtc", // wtc World Trade Centers Association, Inc.
- "wtf", // wtf Hidden Way, LLC
- "xbox", // xbox Microsoft Corporation
- "xerox", // xerox Xerox DNHC LLC
- "xihuan", // xihuan QIHOO 360 TECHNOLOGY CO. LTD.
- "xin", // xin Elegant Leader Limited
- "xn--11b4c3d", // कॉम VeriSign Sarl
- "xn--1ck2e1b", // セール Amazon Registry Services, Inc.
- "xn--1qqw23a", // 佛山 Guangzhou YU Wei Information Technology Co., Ltd.
- "xn--30rr7y", // 慈善 Excellent First Limited
- "xn--3bst00m", // 集团 Eagle Horizon Limited
- "xn--3ds443g", // 在线 TLD REGISTRY LIMITED
- "xn--3pxu8k", // 点看 VeriSign Sarl
- "xn--42c2d9a", // คอม VeriSign Sarl
- "xn--45q11c", // 八卦 Zodiac Scorpio Limited
- "xn--4gbrim", // موقع Suhub Electronic Establishment
- "xn--55qw42g", // 公益 China Organizational Name Administration Center
- "xn--55qx5d", // 公司 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center)
- "xn--5tzm5g", // 网站 Global Website TLD Asia Limited
- "xn--6frz82g", // 移动 Afilias Limited
- "xn--6qq986b3xl", // 我爱你 Tycoon Treasure Limited
- "xn--80adxhks", // москва Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID)
- "xn--80asehdb", // онлайн CORE Association
- "xn--80aswg", // сайт CORE Association
- "xn--8y0a063a", // 联通 China United Network Communications Corporation Limited
- "xn--9dbq2a", // קום VeriSign Sarl
- "xn--9et52u", // 时尚 RISE VICTORY LIMITED
- "xn--9krt00a", // 微博 Sina Corporation
- "xn--b4w605ferd", // 淡马锡 Temasek Holdings (Private) Limited
- "xn--bck1b9a5dre4c", // ファッション Amazon Registry Services, Inc.
- "xn--c1avg", // орг Public Interest Registry
- "xn--c2br7g", // नेट VeriSign Sarl
- "xn--cck2b3b", // ストア Amazon Registry Services, Inc.
- "xn--cg4bki", // 삼성 SAMSUNG SDS CO., LTD
- "xn--czr694b", // 商标 HU YI GLOBAL INFORMATION RESOURCES(HOLDING) COMPANY.HONGKONG LIMITED
- "xn--czrs0t", // 商店 Wild Island, LLC
- "xn--czru2d", // 商城 Zodiac Aquarius Limited
- "xn--d1acj3b", // дети The Foundation for Network Initiatives “The Smart Internet”
- "xn--eckvdtc9d", // ポイント Amazon Registry Services, Inc.
- "xn--efvy88h", // 新闻 Xinhua News Agency Guangdong Branch 新华通讯社广东分社
- "xn--estv75g", // 工行 Industrial and Commercial Bank of China Limited
- "xn--fct429k", // 家電 Amazon Registry Services, Inc.
- "xn--fhbei", // كوم VeriSign Sarl
- "xn--fiq228c5hs", // 中文网 TLD REGISTRY LIMITED
- "xn--fiq64b", // 中信 CITIC Group Corporation
- "xn--fjq720a", // 娱乐 Will Bloom, LLC
- "xn--flw351e", // 谷歌 Charleston Road Registry Inc.
- "xn--g2xx48c", // 购物 Minds + Machines Group Limited
- "xn--gckr3f0f", // クラウド Amazon Registry Services, Inc.
- "xn--hxt814e", // 网店 Zodiac Libra Limited
- "xn--i1b6b1a6a2e", // संगठन Public Interest Registry
- "xn--imr513n", // 餐厅 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG LIMITED
- "xn--io0a7i", // 网络 Computer Network Information Center of Chinese Academy of Sciences (China Internet Network Information Center)
- "xn--j1aef", // ком VeriSign Sarl
- "xn--jlq61u9w7b", // 诺基亚 Nokia Corporation
- "xn--jvr189m", // 食品 Amazon Registry Services, Inc.
- "xn--kcrx77d1x4a", // 飞利浦 Koninklijke Philips N.V.
- "xn--kpu716f", // 手表 Richemont DNS Inc.
- "xn--kput3i", // 手机 Beijing RITT-Net Technology Development Co., Ltd
- "xn--mgba3a3ejt", // ارامكو Aramco Services Company
- "xn--mgbab2bd", // بازار CORE Association
- "xn--mgbb9fbpob", // موبايلي GreenTech Consultancy Company W.L.L.
- "xn--mgbca7dzdo", // ابوظبي Abu Dhabi Systems and Information Centre
- "xn--mgbt3dhd", // همراه Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
- "xn--mk1bu44c", // 닷컴 VeriSign Sarl
- "xn--mxtq1m", // 政府 Net-Chinese Co., Ltd.
- "xn--ngbc5azd", // شبكة International Domain Registry Pty. Ltd.
- "xn--ngbe9e0a", // بيتك Kuwait Finance House
- "xn--nqv7f", // 机构 Public Interest Registry
- "xn--nqv7fs00ema", // 组织机构 Public Interest Registry
- "xn--nyqy26a", // 健康 Stable Tone Limited
- "xn--p1acf", // рус Rusnames Limited
- "xn--pbt977c", // 珠宝 Richemont DNS Inc.
- "xn--pssy2u", // 大拿 VeriSign Sarl
- "xn--q9jyb4c", // みんな Charleston Road Registry Inc.
- "xn--qcka1pmc", // グーグル Charleston Road Registry Inc.
- "xn--rhqv96g", // 世界 Stable Tone Limited
- "xn--rovu88b", // 書籍 Amazon EU S.à r.l.
- "xn--ses554g", // 网址 KNET Co., Ltd
- "xn--t60b56a", // 닷넷 VeriSign Sarl
- "xn--tckwe", // コム VeriSign Sarl
- "xn--unup4y", // 游戏 Spring Fields, LLC
- "xn--vermgensberater-ctb", // VERMöGENSBERATER Deutsche Vermögensberatung Aktiengesellschaft DVAG
- "xn--vermgensberatung-pwb", // VERMöGENSBERATUNG Deutsche Vermögensberatung Aktiengesellschaft DVAG
- "xn--vhquv", // 企业 Dash McCook, LLC
- "xn--vuq861b", // 信息 Beijing Tele-info Network Technology Co., Ltd.
- "xn--w4r85el8fhu5dnra", // 嘉里大酒店 Kerry Trading Co. Limited
- "xn--xhq521b", // 广东 Guangzhou YU Wei Information Technology Co., Ltd.
- "xn--zfr164b", // 政务 China Organizational Name Administration Center
- "xperia", // xperia Sony Mobile Communications AB
- "xxx", // xxx ICM Registry LLC
- "xyz", // xyz XYZ.COM LLC
- "yachts", // yachts DERYachts, LLC
- "yahoo", // yahoo Yahoo! Domain Services Inc.
- "yamaxun", // yamaxun Amazon Registry Services, Inc.
- "yandex", // yandex YANDEX, LLC
- "yodobashi", // yodobashi YODOBASHI CAMERA CO.,LTD.
- "yoga", // yoga Top Level Domain Holdings Limited
- "yokohama", // yokohama GMO Registry, Inc.
- "you", // you Amazon Registry Services, Inc.
- "youtube", // youtube Charleston Road Registry Inc.
- "yun", // yun QIHOO 360 TECHNOLOGY CO. LTD.
- "zara", // zara Industria de Diseño Textil, S.A. (INDITEX, S.A.)
- "zero", // zero Amazon Registry Services, Inc.
- "zip", // zip Charleston Road Registry Inc.
- "zone", // zone Outer Falls, LLC
- "zuerich", // zuerich Kanton Zürich (Canton of Zurich)
- };
- // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary search
- private static final String[] COUNTRY_CODE_TLDS = new String[] {
- "ac", // Ascension Island
- "ad", // Andorra
- "ae", // United Arab Emirates
- "af", // Afghanistan
- "ag", // Antigua and Barbuda
- "ai", // Anguilla
- "al", // Albania
- "am", // Armenia
-// "an", // Netherlands Antilles (retired)
- "ao", // Angola
- "aq", // Antarctica
- "ar", // Argentina
- "as", // American Samoa
- "at", // Austria
- "au", // Australia (includes Ashmore and Cartier Islands and Coral Sea Islands)
- "aw", // Aruba
- "ax", // Åland
- "az", // Azerbaijan
- "ba", // Bosnia and Herzegovina
- "bb", // Barbados
- "bd", // Bangladesh
- "be", // Belgium
- "bf", // Burkina Faso
- "bg", // Bulgaria
- "bh", // Bahrain
- "bi", // Burundi
- "bj", // Benin
- "bm", // Bermuda
- "bn", // Brunei Darussalam
- "bo", // Bolivia
- "br", // Brazil
- "bs", // Bahamas
- "bt", // Bhutan
- "bv", // Bouvet Island
- "bw", // Botswana
- "by", // Belarus
- "bz", // Belize
- "ca", // Canada
- "cc", // Cocos (Keeling) Islands
- "cd", // Democratic Republic of the Congo (formerly Zaire)
- "cf", // Central African Republic
- "cg", // Republic of the Congo
- "ch", // Switzerland
- "ci", // Côte d'Ivoire
- "ck", // Cook Islands
- "cl", // Chile
- "cm", // Cameroon
- "cn", // China, mainland
- "co", // Colombia
- "cr", // Costa Rica
- "cu", // Cuba
- "cv", // Cape Verde
- "cw", // Curaçao
- "cx", // Christmas Island
- "cy", // Cyprus
- "cz", // Czech Republic
- "de", // Germany
- "dj", // Djibouti
- "dk", // Denmark
- "dm", // Dominica
- "do", // Dominican Republic
- "dz", // Algeria
- "ec", // Ecuador
- "ee", // Estonia
- "eg", // Egypt
- "er", // Eritrea
- "es", // Spain
- "et", // Ethiopia
- "eu", // European Union
- "fi", // Finland
- "fj", // Fiji
- "fk", // Falkland Islands
- "fm", // Federated States of Micronesia
- "fo", // Faroe Islands
- "fr", // France
- "ga", // Gabon
- "gb", // Great Britain (United Kingdom)
- "gd", // Grenada
- "ge", // Georgia
- "gf", // French Guiana
- "gg", // Guernsey
- "gh", // Ghana
- "gi", // Gibraltar
- "gl", // Greenland
- "gm", // The Gambia
- "gn", // Guinea
- "gp", // Guadeloupe
- "gq", // Equatorial Guinea
- "gr", // Greece
- "gs", // South Georgia and the South Sandwich Islands
- "gt", // Guatemala
- "gu", // Guam
- "gw", // Guinea-Bissau
- "gy", // Guyana
- "hk", // Hong Kong
- "hm", // Heard Island and McDonald Islands
- "hn", // Honduras
- "hr", // Croatia (Hrvatska)
- "ht", // Haiti
- "hu", // Hungary
- "id", // Indonesia
- "ie", // Ireland (Éire)
- "il", // Israel
- "im", // Isle of Man
- "in", // India
- "io", // British Indian Ocean Territory
- "iq", // Iraq
- "ir", // Iran
- "is", // Iceland
- "it", // Italy
- "je", // Jersey
- "jm", // Jamaica
- "jo", // Jordan
- "jp", // Japan
- "ke", // Kenya
- "kg", // Kyrgyzstan
- "kh", // Cambodia (Khmer)
- "ki", // Kiribati
- "km", // Comoros
- "kn", // Saint Kitts and Nevis
- "kp", // North Korea
- "kr", // South Korea
- "kw", // Kuwait
- "ky", // Cayman Islands
- "kz", // Kazakhstan
- "la", // Laos (currently being marketed as the official domain for Los Angeles)
- "lb", // Lebanon
- "lc", // Saint Lucia
- "li", // Liechtenstein
- "lk", // Sri Lanka
- "lr", // Liberia
- "ls", // Lesotho
- "lt", // Lithuania
- "lu", // Luxembourg
- "lv", // Latvia
- "ly", // Libya
- "ma", // Morocco
- "mc", // Monaco
- "md", // Moldova
- "me", // Montenegro
- "mg", // Madagascar
- "mh", // Marshall Islands
- "mk", // Republic of Macedonia
- "ml", // Mali
- "mm", // Myanmar
- "mn", // Mongolia
- "mo", // Macau
- "mp", // Northern Mariana Islands
- "mq", // Martinique
- "mr", // Mauritania
- "ms", // Montserrat
- "mt", // Malta
- "mu", // Mauritius
- "mv", // Maldives
- "mw", // Malawi
- "mx", // Mexico
- "my", // Malaysia
- "mz", // Mozambique
- "na", // Namibia
- "nc", // New Caledonia
- "ne", // Niger
- "nf", // Norfolk Island
- "ng", // Nigeria
- "ni", // Nicaragua
- "nl", // Netherlands
- "no", // Norway
- "np", // Nepal
- "nr", // Nauru
- "nu", // Niue
- "nz", // New Zealand
- "om", // Oman
- "pa", // Panama
- "pe", // Peru
- "pf", // French Polynesia With Clipperton Island
- "pg", // Papua New Guinea
- "ph", // Philippines
- "pk", // Pakistan
- "pl", // Poland
- "pm", // Saint-Pierre and Miquelon
- "pn", // Pitcairn Islands
- "pr", // Puerto Rico
- "ps", // Palestinian territories (PA-controlled West Bank and Gaza Strip)
- "pt", // Portugal
- "pw", // Palau
- "py", // Paraguay
- "qa", // Qatar
- "re", // Réunion
- "ro", // Romania
- "rs", // Serbia
- "ru", // Russia
- "rw", // Rwanda
- "sa", // Saudi Arabia
- "sb", // Solomon Islands
- "sc", // Seychelles
- "sd", // Sudan
- "se", // Sweden
- "sg", // Singapore
- "sh", // Saint Helena
- "si", // Slovenia
- "sj", // Svalbard and Jan Mayen Islands Not in use (Norwegian dependencies; see .no)
- "sk", // Slovakia
- "sl", // Sierra Leone
- "sm", // San Marino
- "sn", // Senegal
- "so", // Somalia
- "sr", // Suriname
- "st", // São Tomé and Príncipe
- "su", // Soviet Union (deprecated)
- "sv", // El Salvador
- "sx", // Sint Maarten
- "sy", // Syria
- "sz", // Swaziland
- "tc", // Turks and Caicos Islands
- "td", // Chad
- "tf", // French Southern and Antarctic Lands
- "tg", // Togo
- "th", // Thailand
- "tj", // Tajikistan
- "tk", // Tokelau
- "tl", // East Timor (deprecated old code)
- "tm", // Turkmenistan
- "tn", // Tunisia
- "to", // Tonga
-// "tp", // East Timor (Retired)
- "tr", // Turkey
- "tt", // Trinidad and Tobago
- "tv", // Tuvalu
- "tw", // Taiwan, Republic of China
- "tz", // Tanzania
- "ua", // Ukraine
- "ug", // Uganda
- "uk", // United Kingdom
- "us", // United States of America
- "uy", // Uruguay
- "uz", // Uzbekistan
- "va", // Vatican City State
- "vc", // Saint Vincent and the Grenadines
- "ve", // Venezuela
- "vg", // British Virgin Islands
- "vi", // U.S. Virgin Islands
- "vn", // Vietnam
- "vu", // Vanuatu
- "wf", // Wallis and Futuna
- "ws", // Samoa (formerly Western Samoa)
- "xn--3e0b707e", // 한국 KISA (Korea Internet & Security Agency)
- "xn--45brj9c", // ভারত National Internet Exchange of India
- "xn--80ao21a", // қаз Association of IT Companies of Kazakhstan
- "xn--90a3ac", // срб Serbian National Internet Domain Registry (RNIDS)
- "xn--90ais", // ??? Reliable Software Inc.
- "xn--clchc0ea0b2g2a9gcd", // சிங்கப்பூர் Singapore Network Information Centre (SGNIC) Pte Ltd
- "xn--d1alf", // мкд Macedonian Academic Research Network Skopje
- "xn--e1a4c", // ею EURid vzw/asbl
- "xn--fiqs8s", // 中国 China Internet Network Information Center
- "xn--fiqz9s", // 中國 China Internet Network Information Center
- "xn--fpcrj9c3d", // భారత్ National Internet Exchange of India
- "xn--fzc2c9e2c", // ලංකා LK Domain Registry
- "xn--gecrj9c", // ભારત National Internet Exchange of India
- "xn--h2brj9c", // भारत National Internet Exchange of India
- "xn--j1amh", // укр Ukrainian Network Information Centre (UANIC), Inc.
- "xn--j6w193g", // 香港 Hong Kong Internet Registration Corporation Ltd.
- "xn--kprw13d", // 台湾 Taiwan Network Information Center (TWNIC)
- "xn--kpry57d", // 台灣 Taiwan Network Information Center (TWNIC)
- "xn--l1acc", // мон Datacom Co.,Ltd
- "xn--lgbbat1ad8j", // الجزائر CERIST
- "xn--mgb9awbf", // عمان Telecommunications Regulatory Authority (TRA)
- "xn--mgba3a4f16a", // ایران Institute for Research in Fundamental Sciences (IPM)
- "xn--mgbaam7a8h", // امارات Telecommunications Regulatory Authority (TRA)
- "xn--mgbayh7gpa", // الاردن National Information Technology Center (NITC)
- "xn--mgbbh1a71e", // بھارت National Internet Exchange of India
- "xn--mgbc0a9azcg", // المغرب Agence Nationale de Réglementation des Télécommunications (ANRT)
- "xn--mgberp4a5d4ar", // السعودية Communications and Information Technology Commission
- "xn--mgbpl2fh", // ????? Sudan Internet Society
- "xn--mgbtx2b", // عراق Communications and Media Commission (CMC)
- "xn--mgbx4cd0ab", // مليسيا MYNIC Berhad
- "xn--mix891f", // 澳門 Bureau of Telecommunications Regulation (DSRT)
- "xn--node", // გე Information Technologies Development Center (ITDC)
- "xn--o3cw4h", // ไทย Thai Network Information Center Foundation
- "xn--ogbpf8fl", // سورية National Agency for Network Services (NANS)
- "xn--p1ai", // рф Coordination Center for TLD RU
- "xn--pgbs0dh", // تونس Agence Tunisienne d'Internet
- "xn--qxam", // ελ ICS-FORTH GR
- "xn--s9brj9c", // ਭਾਰਤ National Internet Exchange of India
- "xn--wgbh1c", // مصر National Telecommunication Regulatory Authority - NTRA
- "xn--wgbl6a", // قطر Communications Regulatory Authority
- "xn--xkc2al3hye2a", // இலங்கை LK Domain Registry
- "xn--xkc2dl3a5ee0h", // இந்தியா National Internet Exchange of India
- "xn--y9a3aq", // ??? Internet Society
- "xn--yfro4i67o", // 新加坡 Singapore Network Information Centre (SGNIC) Pte Ltd
- "xn--ygbi2ammx", // فلسطين Ministry of Telecom & Information Technology (MTIT)
- "ye", // Yemen
- "yt", // Mayotte
- "za", // South Africa
- "zm", // Zambia
- "zw", // Zimbabwe
- };
- // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary search
- private static final String[] LOCAL_TLDS = new String[] {
- "localdomain", // Also widely used as localhost.localdomain
- "localhost", // RFC2606 defined
- };
+ // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary
+ // search
+ private static final String[] INFRASTRUCTURE_TLDS =
+ new String[] {
+ "arpa", // internet infrastructure
+ };
+ // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary
+ // search
+ private static final String[] GENERIC_TLDS =
+ new String[] {
+ // Taken from Version 2016042500, Last Updated Mon Apr 25 07:07:01 2016 UTC
+ "aaa", // aaa American Automobile Association, Inc.
+ "aarp", // aarp AARP
+ "abb", // abb ABB Ltd
+ "abbott", // abbott Abbott Laboratories, Inc.
+ "abbvie", // abbvie AbbVie Inc.
+ "abogado", // abogado Top Level Domain Holdings Limited
+ "abudhabi", // abudhabi Abu Dhabi Systems and Information Centre
+ "academy", // academy Half Oaks, LLC
+ "accenture", // accenture Accenture plc
+ "accountant", // accountant dot Accountant Limited
+ "accountants", // accountants Knob Town, LLC
+ "aco", // aco ACO Severin Ahlmann GmbH & Co. KG
+ "active", // active The Active Network, Inc
+ "actor", // actor United TLD Holdco Ltd.
+ "adac", // adac Allgemeiner Deutscher Automobil-Club e.V. (ADAC)
+ "ads", // ads Charleston Road Registry Inc.
+ "adult", // adult ICM Registry AD LLC
+ "aeg", // aeg Aktiebolaget Electrolux
+ "aero", // aero Societe Internationale de Telecommunications Aeronautique (SITA INC
+ // USA)
+ "afl", // afl Australian Football League
+ "agakhan", // agakhan Fondation Aga Khan (Aga Khan Foundation)
+ "agency", // agency Steel Falls, LLC
+ "aig", // aig American International Group, Inc.
+ "airforce", // airforce United TLD Holdco Ltd.
+ "airtel", // airtel Bharti Airtel Limited
+ "akdn", // akdn Fondation Aga Khan (Aga Khan Foundation)
+ "alibaba", // alibaba Alibaba Group Holding Limited
+ "alipay", // alipay Alibaba Group Holding Limited
+ "allfinanz", // allfinanz Allfinanz Deutsche Vermögensberatung Aktiengesellschaft
+ "ally", // ally Ally Financial Inc.
+ "alsace", // alsace REGION D ALSACE
+ "amica", // amica Amica Mutual Insurance Company
+ "amsterdam", // amsterdam Gemeente Amsterdam
+ "analytics", // analytics Campus IP LLC
+ "android", // android Charleston Road Registry Inc.
+ "anquan", // anquan QIHOO 360 TECHNOLOGY CO. LTD.
+ "apartments", // apartments June Maple, LLC
+ "app", // app Charleston Road Registry Inc.
+ "apple", // apple Apple Inc.
+ "aquarelle", // aquarelle Aquarelle.com
+ "aramco", // aramco Aramco Services Company
+ "archi", // archi STARTING DOT LIMITED
+ "army", // army United TLD Holdco Ltd.
+ "arte", // arte Association Relative à la Télévision Européenne G.E.I.E.
+ "asia", // asia DotAsia Organisation Ltd.
+ "associates", // associates Baxter Hill, LLC
+ "attorney", // attorney United TLD Holdco, Ltd
+ "auction", // auction United TLD HoldCo, Ltd.
+ "audi", // audi AUDI Aktiengesellschaft
+ "audio", // audio Uniregistry, Corp.
+ "author", // author Amazon Registry Services, Inc.
+ "auto", // auto Uniregistry, Corp.
+ "autos", // autos DERAutos, LLC
+ "avianca", // avianca Aerovias del Continente Americano S.A. Avianca
+ "aws", // aws Amazon Registry Services, Inc.
+ "axa", // axa AXA SA
+ "azure", // azure Microsoft Corporation
+ "baby", // baby Johnson & Johnson Services, Inc.
+ "baidu", // baidu Baidu, Inc.
+ "band", // band United TLD Holdco, Ltd
+ "bank", // bank fTLD Registry Services, LLC
+ "bar", // bar Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable
+ "barcelona", // barcelona Municipi de Barcelona
+ "barclaycard", // barclaycard Barclays Bank PLC
+ "barclays", // barclays Barclays Bank PLC
+ "barefoot", // barefoot Gallo Vineyards, Inc.
+ "bargains", // bargains Half Hallow, LLC
+ "bauhaus", // bauhaus Werkhaus GmbH
+ "bayern", // bayern Bayern Connect GmbH
+ "bbc", // bbc British Broadcasting Corporation
+ "bbva", // bbva BANCO BILBAO VIZCAYA ARGENTARIA, S.A.
+ "bcg", // bcg The Boston Consulting Group, Inc.
+ "bcn", // bcn Municipi de Barcelona
+ "beats", // beats Beats Electronics, LLC
+ "beer", // beer Top Level Domain Holdings Limited
+ "bentley", // bentley Bentley Motors Limited
+ "berlin", // berlin dotBERLIN GmbH & Co. KG
+ "best", // best BestTLD Pty Ltd
+ "bet", // bet Afilias plc
+ "bharti", // bharti Bharti Enterprises (Holding) Private Limited
+ "bible", // bible American Bible Society
+ "bid", // bid dot Bid Limited
+ "bike", // bike Grand Hollow, LLC
+ "bing", // bing Microsoft Corporation
+ "bingo", // bingo Sand Cedar, LLC
+ "bio", // bio STARTING DOT LIMITED
+ "biz", // biz Neustar, Inc.
+ "black", // black Afilias Limited
+ "blackfriday", // blackfriday Uniregistry, Corp.
+ "bloomberg", // bloomberg Bloomberg IP Holdings LLC
+ "blue", // blue Afilias Limited
+ "bms", // bms Bristol-Myers Squibb Company
+ "bmw", // bmw Bayerische Motoren Werke Aktiengesellschaft
+ "bnl", // bnl Banca Nazionale del Lavoro
+ "bnpparibas", // bnpparibas BNP Paribas
+ "boats", // boats DERBoats, LLC
+ "boehringer", // boehringer Boehringer Ingelheim International GmbH
+ "bom", // bom Núcleo de Informação e Coordenação do Ponto BR - NIC.br
+ "bond", // bond Bond University Limited
+ "boo", // boo Charleston Road Registry Inc.
+ "book", // book Amazon Registry Services, Inc.
+ "boots", // boots THE BOOTS COMPANY PLC
+ "bosch", // bosch Robert Bosch GMBH
+ "bostik", // bostik Bostik SA
+ "bot", // bot Amazon Registry Services, Inc.
+ "boutique", // boutique Over Galley, LLC
+ "bradesco", // bradesco Banco Bradesco S.A.
+ "bridgestone", // bridgestone Bridgestone Corporation
+ "broadway", // broadway Celebrate Broadway, Inc.
+ "broker", // broker DOTBROKER REGISTRY LTD
+ "brother", // brother Brother Industries, Ltd.
+ "brussels", // brussels DNS.be vzw
+ "budapest", // budapest Top Level Domain Holdings Limited
+ "bugatti", // bugatti Bugatti International SA
+ "build", // build Plan Bee LLC
+ "builders", // builders Atomic Madison, LLC
+ "business", // business Spring Cross, LLC
+ "buy", // buy Amazon Registry Services, INC
+ "buzz", // buzz DOTSTRATEGY CO.
+ "bzh", // bzh Association www.bzh
+ "cab", // cab Half Sunset, LLC
+ "cafe", // cafe Pioneer Canyon, LLC
+ "cal", // cal Charleston Road Registry Inc.
+ "call", // call Amazon Registry Services, Inc.
+ "camera", // camera Atomic Maple, LLC
+ "camp", // camp Delta Dynamite, LLC
+ "cancerresearch", // cancerresearch Australian Cancer Research Foundation
+ "canon", // canon Canon Inc.
+ "capetown", // capetown ZA Central Registry NPC trading as ZA Central Registry
+ "capital", // capital Delta Mill, LLC
+ "car", // car Cars Registry Limited
+ "caravan", // caravan Caravan International, Inc.
+ "cards", // cards Foggy Hollow, LLC
+ "care", // care Goose Cross, LLC
+ "career", // career dotCareer LLC
+ "careers", // careers Wild Corner, LLC
+ "cars", // cars Uniregistry, Corp.
+ "cartier", // cartier Richemont DNS Inc.
+ "casa", // casa Top Level Domain Holdings Limited
+ "cash", // cash Delta Lake, LLC
+ "casino", // casino Binky Sky, LLC
+ "cat", // cat Fundacio puntCAT
+ "catering", // catering New Falls. LLC
+ "cba", // cba COMMONWEALTH BANK OF AUSTRALIA
+ "cbn", // cbn The Christian Broadcasting Network, Inc.
+ "ceb", // ceb The Corporate Executive Board Company
+ "center", // center Tin Mill, LLC
+ "ceo", // ceo CEOTLD Pty Ltd
+ "cern", // cern European Organization for Nuclear Research ("CERN")
+ "cfa", // cfa CFA Institute
+ "cfd", // cfd DOTCFD REGISTRY LTD
+ "chanel", // chanel Chanel International B.V.
+ "channel", // channel Charleston Road Registry Inc.
+ "chase", // chase JPMorgan Chase & Co.
+ "chat", // chat Sand Fields, LLC
+ "cheap", // cheap Sand Cover, LLC
+ "chloe", // chloe Richemont DNS Inc.
+ "christmas", // christmas Uniregistry, Corp.
+ "chrome", // chrome Charleston Road Registry Inc.
+ "church", // church Holly Fileds, LLC
+ "cipriani", // cipriani Hotel Cipriani Srl
+ "circle", // circle Amazon Registry Services, Inc.
+ "cisco", // cisco Cisco Technology, Inc.
+ "citic", // citic CITIC Group Corporation
+ "city", // city Snow Sky, LLC
+ "cityeats", // cityeats Lifestyle Domain Holdings, Inc.
+ "claims", // claims Black Corner, LLC
+ "cleaning", // cleaning Fox Shadow, LLC
+ "click", // click Uniregistry, Corp.
+ "clinic", // clinic Goose Park, LLC
+ "clinique", // clinique The Estée Lauder Companies Inc.
+ "clothing", // clothing Steel Lake, LLC
+ "cloud", // cloud ARUBA S.p.A.
+ "club", // club .CLUB DOMAINS, LLC
+ "clubmed", // clubmed Club Méditerranée S.A.
+ "coach", // coach Koko Island, LLC
+ "codes", // codes Puff Willow, LLC
+ "coffee", // coffee Trixy Cover, LLC
+ "college", // college XYZ.COM LLC
+ "cologne", // cologne NetCologne Gesellschaft für Telekommunikation mbH
+ "com", // com VeriSign Global Registry Services
+ "commbank", // commbank COMMONWEALTH BANK OF AUSTRALIA
+ "community", // community Fox Orchard, LLC
+ "company", // company Silver Avenue, LLC
+ "compare", // compare iSelect Ltd
+ "computer", // computer Pine Mill, LLC
+ "comsec", // comsec VeriSign, Inc.
+ "condos", // condos Pine House, LLC
+ "construction", // construction Fox Dynamite, LLC
+ "consulting", // consulting United TLD Holdco, LTD.
+ "contact", // contact Top Level Spectrum, Inc.
+ "contractors", // contractors Magic Woods, LLC
+ "cooking", // cooking Top Level Domain Holdings Limited
+ "cool", // cool Koko Lake, LLC
+ "coop", // coop DotCooperation LLC
+ "corsica", // corsica Collectivité Territoriale de Corse
+ "country", // country Top Level Domain Holdings Limited
+ "coupon", // coupon Amazon Registry Services, Inc.
+ "coupons", // coupons Black Island, LLC
+ "courses", // courses OPEN UNIVERSITIES AUSTRALIA PTY LTD
+ "credit", // credit Snow Shadow, LLC
+ "creditcard", // creditcard Binky Frostbite, LLC
+ "creditunion", // creditunion CUNA Performance Resources, LLC
+ "cricket", // cricket dot Cricket Limited
+ "crown", // crown Crown Equipment Corporation
+ "crs", // crs Federated Co-operatives Limited
+ "cruises", // cruises Spring Way, LLC
+ "csc", // csc Alliance-One Services, Inc.
+ "cuisinella", // cuisinella SALM S.A.S.
+ "cymru", // cymru Nominet UK
+ "cyou", // cyou Beijing Gamease Age Digital Technology Co., Ltd.
+ "dabur", // dabur Dabur India Limited
+ "dad", // dad Charleston Road Registry Inc.
+ "dance", // dance United TLD Holdco Ltd.
+ "date", // date dot Date Limited
+ "dating", // dating Pine Fest, LLC
+ "datsun", // datsun NISSAN MOTOR CO., LTD.
+ "day", // day Charleston Road Registry Inc.
+ "dclk", // dclk Charleston Road Registry Inc.
+ "dealer", // dealer Dealer Dot Com, Inc.
+ "deals", // deals Sand Sunset, LLC
+ "degree", // degree United TLD Holdco, Ltd
+ "delivery", // delivery Steel Station, LLC
+ "dell", // dell Dell Inc.
+ "deloitte", // deloitte Deloitte Touche Tohmatsu
+ "delta", // delta Delta Air Lines, Inc.
+ "democrat", // democrat United TLD Holdco Ltd.
+ "dental", // dental Tin Birch, LLC
+ "dentist", // dentist United TLD Holdco, Ltd
+ "desi", // desi Desi Networks LLC
+ "design", // design Top Level Design, LLC
+ "dev", // dev Charleston Road Registry Inc.
+ "diamonds", // diamonds John Edge, LLC
+ "diet", // diet Uniregistry, Corp.
+ "digital", // digital Dash Park, LLC
+ "direct", // direct Half Trail, LLC
+ "directory", // directory Extra Madison, LLC
+ "discount", // discount Holly Hill, LLC
+ "dnp", // dnp Dai Nippon Printing Co., Ltd.
+ "docs", // docs Charleston Road Registry Inc.
+ "dog", // dog Koko Mill, LLC
+ "doha", // doha Communications Regulatory Authority (CRA)
+ "domains", // domains Sugar Cross, LLC
+ // "doosan", // doosan Doosan Corporation (retired)
+ "download", // download dot Support Limited
+ "drive", // drive Charleston Road Registry Inc.
+ "dubai", // dubai Dubai Smart Government Department
+ "durban", // durban ZA Central Registry NPC trading as ZA Central Registry
+ "dvag", // dvag Deutsche Vermögensberatung Aktiengesellschaft DVAG
+ "earth", // earth Interlink Co., Ltd.
+ "eat", // eat Charleston Road Registry Inc.
+ "edeka", // edeka EDEKA Verband kaufmännischer Genossenschaften e.V.
+ "edu", // edu EDUCAUSE
+ "education", // education Brice Way, LLC
+ "email", // email Spring Madison, LLC
+ "emerck", // emerck Merck KGaA
+ "energy", // energy Binky Birch, LLC
+ "engineer", // engineer United TLD Holdco Ltd.
+ "engineering", // engineering Romeo Canyon
+ "enterprises", // enterprises Snow Oaks, LLC
+ "epson", // epson Seiko Epson Corporation
+ "equipment", // equipment Corn Station, LLC
+ "erni", // erni ERNI Group Holding AG
+ "esq", // esq Charleston Road Registry Inc.
+ "estate", // estate Trixy Park, LLC
+ "eurovision", // eurovision European Broadcasting Union (EBU)
+ "eus", // eus Puntueus Fundazioa
+ "events", // events Pioneer Maple, LLC
+ "everbank", // everbank EverBank
+ "exchange", // exchange Spring Falls, LLC
+ "expert", // expert Magic Pass, LLC
+ "exposed", // exposed Victor Beach, LLC
+ "express", // express Sea Sunset, LLC
+ "extraspace", // extraspace Extra Space Storage LLC
+ "fage", // fage Fage International S.A.
+ "fail", // fail Atomic Pipe, LLC
+ "fairwinds", // fairwinds FairWinds Partners, LLC
+ "faith", // faith dot Faith Limited
+ "family", // family United TLD Holdco Ltd.
+ "fan", // fan Asiamix Digital Ltd
+ "fans", // fans Asiamix Digital Limited
+ "farm", // farm Just Maple, LLC
+ "fashion", // fashion Top Level Domain Holdings Limited
+ "fast", // fast Amazon Registry Services, Inc.
+ "feedback", // feedback Top Level Spectrum, Inc.
+ "ferrero", // ferrero Ferrero Trading Lux S.A.
+ "film", // film Motion Picture Domain Registry Pty Ltd
+ "final", // final Núcleo de Informação e Coordenação do Ponto BR - NIC.br
+ "finance", // finance Cotton Cypress, LLC
+ "financial", // financial Just Cover, LLC
+ "firestone", // firestone Bridgestone Corporation
+ "firmdale", // firmdale Firmdale Holdings Limited
+ "fish", // fish Fox Woods, LLC
+ "fishing", // fishing Top Level Domain Holdings Limited
+ "fit", // fit Minds + Machines Group Limited
+ "fitness", // fitness Brice Orchard, LLC
+ "flickr", // flickr Yahoo! Domain Services Inc.
+ "flights", // flights Fox Station, LLC
+ "florist", // florist Half Cypress, LLC
+ "flowers", // flowers Uniregistry, Corp.
+ "flsmidth", // flsmidth FLSmidth A/S
+ "fly", // fly Charleston Road Registry Inc.
+ "foo", // foo Charleston Road Registry Inc.
+ "football", // football Foggy Farms, LLC
+ "ford", // ford Ford Motor Company
+ "forex", // forex DOTFOREX REGISTRY LTD
+ "forsale", // forsale United TLD Holdco, LLC
+ "forum", // forum Fegistry, LLC
+ "foundation", // foundation John Dale, LLC
+ "fox", // fox FOX Registry, LLC
+ "fresenius", // fresenius Fresenius Immobilien-Verwaltungs-GmbH
+ "frl", // frl FRLregistry B.V.
+ "frogans", // frogans OP3FT
+ "frontier", // frontier Frontier Communications Corporation
+ "ftr", // ftr Frontier Communications Corporation
+ "fund", // fund John Castle, LLC
+ "furniture", // furniture Lone Fields, LLC
+ "futbol", // futbol United TLD Holdco, Ltd.
+ "fyi", // fyi Silver Tigers, LLC
+ "gal", // gal Asociación puntoGAL
+ "gallery", // gallery Sugar House, LLC
+ "gallo", // gallo Gallo Vineyards, Inc.
+ "gallup", // gallup Gallup, Inc.
+ "game", // game Uniregistry, Corp.
+ "garden", // garden Top Level Domain Holdings Limited
+ "gbiz", // gbiz Charleston Road Registry Inc.
+ "gdn", // gdn Joint Stock Company "Navigation-information systems"
+ "gea", // gea GEA Group Aktiengesellschaft
+ "gent", // gent COMBELL GROUP NV/SA
+ "genting", // genting Resorts World Inc. Pte. Ltd.
+ "ggee", // ggee GMO Internet, Inc.
+ "gift", // gift Uniregistry, Corp.
+ "gifts", // gifts Goose Sky, LLC
+ "gives", // gives United TLD Holdco Ltd.
+ "giving", // giving Giving Limited
+ "glass", // glass Black Cover, LLC
+ "gle", // gle Charleston Road Registry Inc.
+ "global", // global Dot Global Domain Registry Limited
+ "globo", // globo Globo Comunicação e Participações S.A
+ "gmail", // gmail Charleston Road Registry Inc.
+ "gmbh", // gmbh Extra Dynamite, LLC
+ "gmo", // gmo GMO Internet, Inc.
+ "gmx", // gmx 1&1 Mail & Media GmbH
+ "gold", // gold June Edge, LLC
+ "goldpoint", // goldpoint YODOBASHI CAMERA CO.,LTD.
+ "golf", // golf Lone Falls, LLC
+ "goo", // goo NTT Resonant Inc.
+ "goog", // goog Charleston Road Registry Inc.
+ "google", // google Charleston Road Registry Inc.
+ "gop", // gop Republican State Leadership Committee, Inc.
+ "got", // got Amazon Registry Services, Inc.
+ "gov", // gov General Services Administration Attn: QTDC, 2E08 (.gov Domain
+ // Registration)
+ "grainger", // grainger Grainger Registry Services, LLC
+ "graphics", // graphics Over Madison, LLC
+ "gratis", // gratis Pioneer Tigers, LLC
+ "green", // green Afilias Limited
+ "gripe", // gripe Corn Sunset, LLC
+ "group", // group Romeo Town, LLC
+ "gucci", // gucci Guccio Gucci S.p.a.
+ "guge", // guge Charleston Road Registry Inc.
+ "guide", // guide Snow Moon, LLC
+ "guitars", // guitars Uniregistry, Corp.
+ "guru", // guru Pioneer Cypress, LLC
+ "hamburg", // hamburg Hamburg Top-Level-Domain GmbH
+ "hangout", // hangout Charleston Road Registry Inc.
+ "haus", // haus United TLD Holdco, LTD.
+ "hdfcbank", // hdfcbank HDFC Bank Limited
+ "health", // health DotHealth, LLC
+ "healthcare", // healthcare Silver Glen, LLC
+ "help", // help Uniregistry, Corp.
+ "helsinki", // helsinki City of Helsinki
+ "here", // here Charleston Road Registry Inc.
+ "hermes", // hermes Hermes International
+ "hiphop", // hiphop Uniregistry, Corp.
+ "hitachi", // hitachi Hitachi, Ltd.
+ "hiv", // hiv dotHIV gemeinnuetziger e.V.
+ "hockey", // hockey Half Willow, LLC
+ "holdings", // holdings John Madison, LLC
+ "holiday", // holiday Goose Woods, LLC
+ "homedepot", // homedepot Homer TLC, Inc.
+ "homes", // homes DERHomes, LLC
+ "honda", // honda Honda Motor Co., Ltd.
+ "horse", // horse Top Level Domain Holdings Limited
+ "host", // host DotHost Inc.
+ "hosting", // hosting Uniregistry, Corp.
+ "hoteles", // hoteles Travel Reservations SRL
+ "hotmail", // hotmail Microsoft Corporation
+ "house", // house Sugar Park, LLC
+ "how", // how Charleston Road Registry Inc.
+ "hsbc", // hsbc HSBC Holdings PLC
+ "htc", // htc HTC corporation
+ "hyundai", // hyundai Hyundai Motor Company
+ "ibm", // ibm International Business Machines Corporation
+ "icbc", // icbc Industrial and Commercial Bank of China Limited
+ "ice", // ice IntercontinentalExchange, Inc.
+ "icu", // icu One.com A/S
+ "ifm", // ifm ifm electronic gmbh
+ "iinet", // iinet Connect West Pty. Ltd.
+ "imamat", // imamat Fondation Aga Khan (Aga Khan Foundation)
+ "immo", // immo Auburn Bloom, LLC
+ "immobilien", // immobilien United TLD Holdco Ltd.
+ "industries", // industries Outer House, LLC
+ "infiniti", // infiniti NISSAN MOTOR CO., LTD.
+ "info", // info Afilias Limited
+ "ing", // ing Charleston Road Registry Inc.
+ "ink", // ink Top Level Design, LLC
+ "institute", // institute Outer Maple, LLC
+ "insurance", // insurance fTLD Registry Services LLC
+ "insure", // insure Pioneer Willow, LLC
+ "int", // int Internet Assigned Numbers Authority
+ "international", // international Wild Way, LLC
+ "investments", // investments Holly Glen, LLC
+ "ipiranga", // ipiranga Ipiranga Produtos de Petroleo S.A.
+ "irish", // irish Dot-Irish LLC
+ "iselect", // iselect iSelect Ltd
+ "ismaili", // ismaili Fondation Aga Khan (Aga Khan Foundation)
+ "ist", // ist Istanbul Metropolitan Municipality
+ "istanbul", // istanbul Istanbul Metropolitan Municipality / Medya A.S.
+ "itau", // itau Itau Unibanco Holding S.A.
+ "iwc", // iwc Richemont DNS Inc.
+ "jaguar", // jaguar Jaguar Land Rover Ltd
+ "java", // java Oracle Corporation
+ "jcb", // jcb JCB Co., Ltd.
+ "jcp", // jcp JCP Media, Inc.
+ "jetzt", // jetzt New TLD Company AB
+ "jewelry", // jewelry Wild Bloom, LLC
+ "jlc", // jlc Richemont DNS Inc.
+ "jll", // jll Jones Lang LaSalle Incorporated
+ "jmp", // jmp Matrix IP LLC
+ "jnj", // jnj Johnson & Johnson Services, Inc.
+ "jobs", // jobs Employ Media LLC
+ "joburg", // joburg ZA Central Registry NPC trading as ZA Central Registry
+ "jot", // jot Amazon Registry Services, Inc.
+ "joy", // joy Amazon Registry Services, Inc.
+ "jpmorgan", // jpmorgan JPMorgan Chase & Co.
+ "jprs", // jprs Japan Registry Services Co., Ltd.
+ "juegos", // juegos Uniregistry, Corp.
+ "kaufen", // kaufen United TLD Holdco Ltd.
+ "kddi", // kddi KDDI CORPORATION
+ "kerryhotels", // kerryhotels Kerry Trading Co. Limited
+ "kerrylogistics", // kerrylogistics Kerry Trading Co. Limited
+ "kerryproperties", // kerryproperties Kerry Trading Co. Limited
+ "kfh", // kfh Kuwait Finance House
+ "kia", // kia KIA MOTORS CORPORATION
+ "kim", // kim Afilias Limited
+ "kinder", // kinder Ferrero Trading Lux S.A.
+ "kitchen", // kitchen Just Goodbye, LLC
+ "kiwi", // kiwi DOT KIWI LIMITED
+ "koeln", // koeln NetCologne Gesellschaft für Telekommunikation mbH
+ "komatsu", // komatsu Komatsu Ltd.
+ "kpmg", // kpmg KPMG International Cooperative (KPMG International Genossenschaft)
+ "kpn", // kpn Koninklijke KPN N.V.
+ "krd", // krd KRG Department of Information Technology
+ "kred", // kred KredTLD Pty Ltd
+ "kuokgroup", // kuokgroup Kerry Trading Co. Limited
+ "kyoto", // kyoto Academic Institution: Kyoto Jyoho Gakuen
+ "lacaixa", // lacaixa CAIXA D'ESTALVIS I PENSIONS DE BARCELONA
+ "lamborghini", // lamborghini Automobili Lamborghini S.p.A.
+ "lamer", // lamer The Estée Lauder Companies Inc.
+ "lancaster", // lancaster LANCASTER
+ "land", // land Pine Moon, LLC
+ "landrover", // landrover Jaguar Land Rover Ltd
+ "lanxess", // lanxess LANXESS Corporation
+ "lasalle", // lasalle Jones Lang LaSalle Incorporated
+ "lat", // lat ECOM-LAC Federación de Latinoamérica y el Caribe para Internet y el
+ // Comercio Electrónico
+ "latrobe", // latrobe La Trobe University
+ "law", // law Minds + Machines Group Limited
+ "lawyer", // lawyer United TLD Holdco, Ltd
+ "lds", // lds IRI Domain Management, LLC
+ "lease", // lease Victor Trail, LLC
+ "leclerc", // leclerc A.C.D. LEC Association des Centres Distributeurs Edouard
+ // Leclerc
+ "legal", // legal Blue Falls, LLC
+ "lexus", // lexus TOYOTA MOTOR CORPORATION
+ "lgbt", // lgbt Afilias Limited
+ "liaison", // liaison Liaison Technologies, Incorporated
+ "lidl", // lidl Schwarz Domains und Services GmbH & Co. KG
+ "life", // life Trixy Oaks, LLC
+ "lifeinsurance", // lifeinsurance American Council of Life Insurers
+ "lifestyle", // lifestyle Lifestyle Domain Holdings, Inc.
+ "lighting", // lighting John McCook, LLC
+ "like", // like Amazon Registry Services, Inc.
+ "limited", // limited Big Fest, LLC
+ "limo", // limo Hidden Frostbite, LLC
+ "lincoln", // lincoln Ford Motor Company
+ "linde", // linde Linde Aktiengesellschaft
+ "link", // link Uniregistry, Corp.
+ "live", // live United TLD Holdco Ltd.
+ "living", // living Lifestyle Domain Holdings, Inc.
+ "lixil", // lixil LIXIL Group Corporation
+ "loan", // loan dot Loan Limited
+ "loans", // loans June Woods, LLC
+ "locus", // locus Locus Analytics LLC
+ "lol", // lol Uniregistry, Corp.
+ "london", // london Dot London Domains Limited
+ "lotte", // lotte Lotte Holdings Co., Ltd.
+ "lotto", // lotto Afilias Limited
+ "love", // love Merchant Law Group LLP
+ "ltd", // ltd Over Corner, LLC
+ "ltda", // ltda InterNetX Corp.
+ "lupin", // lupin LUPIN LIMITED
+ "luxe", // luxe Top Level Domain Holdings Limited
+ "luxury", // luxury Luxury Partners LLC
+ "madrid", // madrid Comunidad de Madrid
+ "maif", // maif Mutuelle Assurance Instituteur France (MAIF)
+ "maison", // maison Victor Frostbite, LLC
+ "makeup", // makeup L'Oréal
+ "man", // man MAN SE
+ "management", // management John Goodbye, LLC
+ "mango", // mango PUNTO FA S.L.
+ "market", // market Unitied TLD Holdco, Ltd
+ "marketing", // marketing Fern Pass, LLC
+ "markets", // markets DOTMARKETS REGISTRY LTD
+ "marriott", // marriott Marriott Worldwide Corporation
+ "mba", // mba Lone Hollow, LLC
+ "med", // med Medistry LLC
+ "media", // media Grand Glen, LLC
+ "meet", // meet Afilias Limited
+ "melbourne", // melbourne The Crown in right of the State of Victoria, represented
+ // by its Department of State Development, Business and Innovation
+ "meme", // meme Charleston Road Registry Inc.
+ "memorial", // memorial Dog Beach, LLC
+ "men", // men Exclusive Registry Limited
+ "menu", // menu Wedding TLD2, LLC
+ "meo", // meo PT Comunicacoes S.A.
+ "miami", // miami Top Level Domain Holdings Limited
+ "microsoft", // microsoft Microsoft Corporation
+ "mil", // mil DoD Network Information Center
+ "mini", // mini Bayerische Motoren Werke Aktiengesellschaft
+ "mls", // mls The Canadian Real Estate Association
+ "mma", // mma MMA IARD
+ "mobi", // mobi Afilias Technologies Limited dba dotMobi
+ "mobily", // mobily GreenTech Consultancy Company W.L.L.
+ "moda", // moda United TLD Holdco Ltd.
+ "moe", // moe Interlink Co., Ltd.
+ "moi", // moi Amazon Registry Services, Inc.
+ "mom", // mom Uniregistry, Corp.
+ "monash", // monash Monash University
+ "money", // money Outer McCook, LLC
+ "montblanc", // montblanc Richemont DNS Inc.
+ "mormon", // mormon IRI Domain Management, LLC ("Applicant")
+ "mortgage", // mortgage United TLD Holdco, Ltd
+ "moscow", // moscow Foundation for Assistance for Internet Technologies and
+ // Infrastructure Development (FAITID)
+ "motorcycles", // motorcycles DERMotorcycles, LLC
+ "mov", // mov Charleston Road Registry Inc.
+ "movie", // movie New Frostbite, LLC
+ "movistar", // movistar Telefónica S.A.
+ "mtn", // mtn MTN Dubai Limited
+ "mtpc", // mtpc Mitsubishi Tanabe Pharma Corporation
+ "mtr", // mtr MTR Corporation Limited
+ "museum", // museum Museum Domain Management Association
+ "mutual", // mutual Northwestern Mutual MU TLD Registry, LLC
+ "mutuelle", // mutuelle Fédération Nationale de la Mutualité Française
+ "nadex", // nadex Nadex Domains, Inc
+ "nagoya", // nagoya GMO Registry, Inc.
+ "name", // name VeriSign Information Services, Inc.
+ "natura", // natura NATURA COSMÉTICOS S.A.
+ "navy", // navy United TLD Holdco Ltd.
+ "nec", // nec NEC Corporation
+ "net", // net VeriSign Global Registry Services
+ "netbank", // netbank COMMONWEALTH BANK OF AUSTRALIA
+ "network", // network Trixy Manor, LLC
+ "neustar", // neustar NeuStar, Inc.
+ "new", // new Charleston Road Registry Inc.
+ "news", // news United TLD Holdco Ltd.
+ "nexus", // nexus Charleston Road Registry Inc.
+ "ngo", // ngo Public Interest Registry
+ "nhk", // nhk Japan Broadcasting Corporation (NHK)
+ "nico", // nico DWANGO Co., Ltd.
+ "nikon", // nikon NIKON CORPORATION
+ "ninja", // ninja United TLD Holdco Ltd.
+ "nissan", // nissan NISSAN MOTOR CO., LTD.
+ "nissay", // nissay Nippon Life Insurance Company
+ "nokia", // nokia Nokia Corporation
+ "northwesternmutual", // northwesternmutual Northwestern Mutual Registry, LLC
+ "norton", // norton Symantec Corporation
+ "nowruz", // nowruz Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+ "nra", // nra NRA Holdings Company, INC.
+ "nrw", // nrw Minds + Machines GmbH
+ "ntt", // ntt NIPPON TELEGRAPH AND TELEPHONE CORPORATION
+ "nyc", // nyc The City of New York by and through the New York City Department of
+ // Information Technology & Telecommunications
+ "obi", // obi OBI Group Holding SE & Co. KGaA
+ "office", // office Microsoft Corporation
+ "okinawa", // okinawa BusinessRalliart inc.
+ "omega", // omega The Swatch Group Ltd
+ "one", // one One.com A/S
+ "ong", // ong Public Interest Registry
+ "onl", // onl I-REGISTRY Ltd., Niederlassung Deutschland
+ "online", // online DotOnline Inc.
+ "ooo", // ooo INFIBEAM INCORPORATION LIMITED
+ "oracle", // oracle Oracle Corporation
+ "orange", // orange Orange Brand Services Limited
+ "org", // org Public Interest Registry (PIR)
+ "organic", // organic Afilias Limited
+ "origins", // origins The Estée Lauder Companies Inc.
+ "osaka", // osaka Interlink Co., Ltd.
+ "otsuka", // otsuka Otsuka Holdings Co., Ltd.
+ "ovh", // ovh OVH SAS
+ "page", // page Charleston Road Registry Inc.
+ "pamperedchef", // pamperedchef The Pampered Chef, Ltd.
+ "panerai", // panerai Richemont DNS Inc.
+ "paris", // paris City of Paris
+ "pars", // pars Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+ "partners", // partners Magic Glen, LLC
+ "parts", // parts Sea Goodbye, LLC
+ "party", // party Blue Sky Registry Limited
+ "passagens", // passagens Travel Reservations SRL
+ "pet", // pet Afilias plc
+ "pharmacy", // pharmacy National Association of Boards of Pharmacy
+ "philips", // philips Koninklijke Philips N.V.
+ "photo", // photo Uniregistry, Corp.
+ "photography", // photography Sugar Glen, LLC
+ "photos", // photos Sea Corner, LLC
+ "physio", // physio PhysBiz Pty Ltd
+ "piaget", // piaget Richemont DNS Inc.
+ "pics", // pics Uniregistry, Corp.
+ "pictet", // pictet Pictet Europe S.A.
+ "pictures", // pictures Foggy Sky, LLC
+ "pid", // pid Top Level Spectrum, Inc.
+ "pin", // pin Amazon Registry Services, Inc.
+ "ping", // ping Ping Registry Provider, Inc.
+ "pink", // pink Afilias Limited
+ "pizza", // pizza Foggy Moon, LLC
+ "place", // place Snow Galley, LLC
+ "play", // play Charleston Road Registry Inc.
+ "playstation", // playstation Sony Computer Entertainment Inc.
+ "plumbing", // plumbing Spring Tigers, LLC
+ "plus", // plus Sugar Mill, LLC
+ "pohl", // pohl Deutsche Vermögensberatung Aktiengesellschaft DVAG
+ "poker", // poker Afilias Domains No. 5 Limited
+ "porn", // porn ICM Registry PN LLC
+ "post", // post Universal Postal Union
+ "praxi", // praxi Praxi S.p.A.
+ "press", // press DotPress Inc.
+ "pro", // pro Registry Services Corporation dba RegistryPro
+ "prod", // prod Charleston Road Registry Inc.
+ "productions", // productions Magic Birch, LLC
+ "prof", // prof Charleston Road Registry Inc.
+ "progressive", // progressive Progressive Casualty Insurance Company
+ "promo", // promo Afilias plc
+ "properties", // properties Big Pass, LLC
+ "property", // property Uniregistry, Corp.
+ "protection", // protection XYZ.COM LLC
+ "pub", // pub United TLD Holdco Ltd.
+ "pwc", // pwc PricewaterhouseCoopers LLP
+ "qpon", // qpon dotCOOL, Inc.
+ "quebec", // quebec PointQuébec Inc
+ "quest", // quest Quest ION Limited
+ "racing", // racing Premier Registry Limited
+ "read", // read Amazon Registry Services, Inc.
+ "realtor", // realtor Real Estate Domains LLC
+ "realty", // realty Fegistry, LLC
+ "recipes", // recipes Grand Island, LLC
+ "red", // red Afilias Limited
+ "redstone", // redstone Redstone Haute Couture Co., Ltd.
+ "redumbrella", // redumbrella Travelers TLD, LLC
+ "rehab", // rehab United TLD Holdco Ltd.
+ "reise", // reise Foggy Way, LLC
+ "reisen", // reisen New Cypress, LLC
+ "reit", // reit National Association of Real Estate Investment Trusts, Inc.
+ "ren", // ren Beijing Qianxiang Wangjing Technology Development Co., Ltd.
+ "rent", // rent XYZ.COM LLC
+ "rentals", // rentals Big Hollow,LLC
+ "repair", // repair Lone Sunset, LLC
+ "report", // report Binky Glen, LLC
+ "republican", // republican United TLD Holdco Ltd.
+ "rest", // rest Punto 2012 Sociedad Anonima Promotora de Inversion de Capital
+ // Variable
+ "restaurant", // restaurant Snow Avenue, LLC
+ "review", // review dot Review Limited
+ "reviews", // reviews United TLD Holdco, Ltd.
+ "rexroth", // rexroth Robert Bosch GMBH
+ "rich", // rich I-REGISTRY Ltd., Niederlassung Deutschland
+ "ricoh", // ricoh Ricoh Company, Ltd.
+ "rio", // rio Empresa Municipal de Informática SA - IPLANRIO
+ "rip", // rip United TLD Holdco Ltd.
+ "rocher", // rocher Ferrero Trading Lux S.A.
+ "rocks", // rocks United TLD Holdco, LTD.
+ "rodeo", // rodeo Top Level Domain Holdings Limited
+ "room", // room Amazon Registry Services, Inc.
+ "rsvp", // rsvp Charleston Road Registry Inc.
+ "ruhr", // ruhr regiodot GmbH & Co. KG
+ "run", // run Snow Park, LLC
+ "rwe", // rwe RWE AG
+ "ryukyu", // ryukyu BusinessRalliart inc.
+ "saarland", // saarland dotSaarland GmbH
+ "safe", // safe Amazon Registry Services, Inc.
+ "safety", // safety Safety Registry Services, LLC.
+ "sakura", // sakura SAKURA Internet Inc.
+ "sale", // sale United TLD Holdco, Ltd
+ "salon", // salon Outer Orchard, LLC
+ "samsung", // samsung SAMSUNG SDS CO., LTD
+ "sandvik", // sandvik Sandvik AB
+ "sandvikcoromant", // sandvikcoromant Sandvik AB
+ "sanofi", // sanofi Sanofi
+ "sap", // sap SAP AG
+ "sapo", // sapo PT Comunicacoes S.A.
+ "sarl", // sarl Delta Orchard, LLC
+ "sas", // sas Research IP LLC
+ "saxo", // saxo Saxo Bank A/S
+ "sbi", // sbi STATE BANK OF INDIA
+ "sbs", // sbs SPECIAL BROADCASTING SERVICE CORPORATION
+ "sca", // sca SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ)
+ "scb", // scb The Siam Commercial Bank Public Company Limited ("SCB")
+ "schaeffler", // schaeffler Schaeffler Technologies AG & Co. KG
+ "schmidt", // schmidt SALM S.A.S.
+ "scholarships", // scholarships Scholarships.com, LLC
+ "school", // school Little Galley, LLC
+ "schule", // schule Outer Moon, LLC
+ "schwarz", // schwarz Schwarz Domains und Services GmbH & Co. KG
+ "science", // science dot Science Limited
+ "scor", // scor SCOR SE
+ "scot", // scot Dot Scot Registry Limited
+ "seat", // seat SEAT, S.A. (Sociedad Unipersonal)
+ "security", // security XYZ.COM LLC
+ "seek", // seek Seek Limited
+ "select", // select iSelect Ltd
+ "sener", // sener Sener Ingeniería y Sistemas, S.A.
+ "services", // services Fox Castle, LLC
+ "seven", // seven Seven West Media Ltd
+ "sew", // sew SEW-EURODRIVE GmbH & Co KG
+ "sex", // sex ICM Registry SX LLC
+ "sexy", // sexy Uniregistry, Corp.
+ "sfr", // sfr Societe Francaise du Radiotelephone - SFR
+ "sharp", // sharp Sharp Corporation
+ "shaw", // shaw Shaw Cablesystems G.P.
+ "shell", // shell Shell Information Technology International Inc
+ "shia", // shia Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+ "shiksha", // shiksha Afilias Limited
+ "shoes", // shoes Binky Galley, LLC
+ "shouji", // shouji QIHOO 360 TECHNOLOGY CO. LTD.
+ "show", // show Snow Beach, LLC
+ "shriram", // shriram Shriram Capital Ltd.
+ "sina", // sina Sina Corporation
+ "singles", // singles Fern Madison, LLC
+ "site", // site DotSite Inc.
+ "ski", // ski STARTING DOT LIMITED
+ "skin", // skin L'Oréal
+ "sky", // sky Sky International AG
+ "skype", // skype Microsoft Corporation
+ "smile", // smile Amazon Registry Services, Inc.
+ "sncf", // sncf SNCF (Société Nationale des Chemins de fer Francais)
+ "soccer", // soccer Foggy Shadow, LLC
+ "social", // social United TLD Holdco Ltd.
+ "softbank", // softbank SoftBank Group Corp.
+ "software", // software United TLD Holdco, Ltd
+ "sohu", // sohu Sohu.com Limited
+ "solar", // solar Ruby Town, LLC
+ "solutions", // solutions Silver Cover, LLC
+ "song", // song Amazon Registry Services, Inc.
+ "sony", // sony Sony Corporation
+ "soy", // soy Charleston Road Registry Inc.
+ "space", // space DotSpace Inc.
+ "spiegel", // spiegel SPIEGEL-Verlag Rudolf Augstein GmbH & Co. KG
+ "spot", // spot Amazon Registry Services, Inc.
+ "spreadbetting", // spreadbetting DOTSPREADBETTING REGISTRY LTD
+ "srl", // srl InterNetX Corp.
+ "stada", // stada STADA Arzneimittel AG
+ "star", // star Star India Private Limited
+ "starhub", // starhub StarHub Limited
+ "statebank", // statebank STATE BANK OF INDIA
+ "statefarm", // statefarm State Farm Mutual Automobile Insurance Company
+ "statoil", // statoil Statoil ASA
+ "stc", // stc Saudi Telecom Company
+ "stcgroup", // stcgroup Saudi Telecom Company
+ "stockholm", // stockholm Stockholms kommun
+ "storage", // storage Self Storage Company LLC
+ "store", // store DotStore Inc.
+ "stream", // stream dot Stream Limited
+ "studio", // studio United TLD Holdco Ltd.
+ "study", // study OPEN UNIVERSITIES AUSTRALIA PTY LTD
+ "style", // style Binky Moon, LLC
+ "sucks", // sucks Vox Populi Registry Ltd.
+ "supplies", // supplies Atomic Fields, LLC
+ "supply", // supply Half Falls, LLC
+ "support", // support Grand Orchard, LLC
+ "surf", // surf Top Level Domain Holdings Limited
+ "surgery", // surgery Tin Avenue, LLC
+ "suzuki", // suzuki SUZUKI MOTOR CORPORATION
+ "swatch", // swatch The Swatch Group Ltd
+ "swiss", // swiss Swiss Confederation
+ "sydney", // sydney State of New South Wales, Department of Premier and Cabinet
+ "symantec", // symantec Symantec Corporation
+ "systems", // systems Dash Cypress, LLC
+ "tab", // tab Tabcorp Holdings Limited
+ "taipei", // taipei Taipei City Government
+ "talk", // talk Amazon Registry Services, Inc.
+ "taobao", // taobao Alibaba Group Holding Limited
+ "tatamotors", // tatamotors Tata Motors Ltd
+ "tatar", // tatar Limited Liability Company "Coordination Center of Regional
+ // Domain of Tatarstan Republic"
+ "tattoo", // tattoo Uniregistry, Corp.
+ "tax", // tax Storm Orchard, LLC
+ "taxi", // taxi Pine Falls, LLC
+ "tci", // tci Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+ "team", // team Atomic Lake, LLC
+ "tech", // tech Dot Tech LLC
+ "technology", // technology Auburn Falls, LLC
+ "tel", // tel Telnic Ltd.
+ "telecity", // telecity TelecityGroup International Limited
+ "telefonica", // telefonica Telefónica S.A.
+ "temasek", // temasek Temasek Holdings (Private) Limited
+ "tennis", // tennis Cotton Bloom, LLC
+ "teva", // teva Teva Pharmaceutical Industries Limited
+ "thd", // thd Homer TLC, Inc.
+ "theater", // theater Blue Tigers, LLC
+ "theatre", // theatre XYZ.COM LLC
+ "tickets", // tickets Accent Media Limited
+ "tienda", // tienda Victor Manor, LLC
+ "tiffany", // tiffany Tiffany and Company
+ "tips", // tips Corn Willow, LLC
+ "tires", // tires Dog Edge, LLC
+ "tirol", // tirol punkt Tirol GmbH
+ "tmall", // tmall Alibaba Group Holding Limited
+ "today", // today Pearl Woods, LLC
+ "tokyo", // tokyo GMO Registry, Inc.
+ "tools", // tools Pioneer North, LLC
+ "top", // top Jiangsu Bangning Science & Technology Co.,Ltd.
+ "toray", // toray Toray Industries, Inc.
+ "toshiba", // toshiba TOSHIBA Corporation
+ "total", // total Total SA
+ "tours", // tours Sugar Station, LLC
+ "town", // town Koko Moon, LLC
+ "toyota", // toyota TOYOTA MOTOR CORPORATION
+ "toys", // toys Pioneer Orchard, LLC
+ "trade", // trade Elite Registry Limited
+ "trading", // trading DOTTRADING REGISTRY LTD
+ "training", // training Wild Willow, LLC
+ "travel", // travel Tralliance Registry Management Company, LLC.
+ "travelers", // travelers Travelers TLD, LLC
+ "travelersinsurance", // travelersinsurance Travelers TLD, LLC
+ "trust", // trust Artemis Internet Inc
+ "trv", // trv Travelers TLD, LLC
+ "tube", // tube Latin American Telecom LLC
+ "tui", // tui TUI AG
+ "tunes", // tunes Amazon Registry Services, Inc.
+ "tushu", // tushu Amazon Registry Services, Inc.
+ "tvs", // tvs T V SUNDRAM IYENGAR & SONS PRIVATE LIMITED
+ "ubs", // ubs UBS AG
+ "unicom", // unicom China United Network Communications Corporation Limited
+ "university", // university Little Station, LLC
+ "uno", // uno Dot Latin LLC
+ "uol", // uol UBN INTERNET LTDA.
+ "vacations", // vacations Atomic Tigers, LLC
+ "vana", // vana Lifestyle Domain Holdings, Inc.
+ "vegas", // vegas Dot Vegas, Inc.
+ "ventures", // ventures Binky Lake, LLC
+ "verisign", // verisign VeriSign, Inc.
+ "versicherung", // versicherung dotversicherung-registry GmbH
+ "vet", // vet United TLD Holdco, Ltd
+ "viajes", // viajes Black Madison, LLC
+ "video", // video United TLD Holdco, Ltd
+ "vig", // vig VIENNA INSURANCE GROUP AG Wiener Versicherung Gruppe
+ "viking", // viking Viking River Cruises (Bermuda) Ltd.
+ "villas", // villas New Sky, LLC
+ "vin", // vin Holly Shadow, LLC
+ "vip", // vip Minds + Machines Group Limited
+ "virgin", // virgin Virgin Enterprises Limited
+ "vision", // vision Koko Station, LLC
+ "vista", // vista Vistaprint Limited
+ "vistaprint", // vistaprint Vistaprint Limited
+ "viva", // viva Saudi Telecom Company
+ "vlaanderen", // vlaanderen DNS.be vzw
+ "vodka", // vodka Top Level Domain Holdings Limited
+ "volkswagen", // volkswagen Volkswagen Group of America Inc.
+ "vote", // vote Monolith Registry LLC
+ "voting", // voting Valuetainment Corp.
+ "voto", // voto Monolith Registry LLC
+ "voyage", // voyage Ruby House, LLC
+ "vuelos", // vuelos Travel Reservations SRL
+ "wales", // wales Nominet UK
+ "walter", // walter Sandvik AB
+ "wang", // wang Zodiac Registry Limited
+ "wanggou", // wanggou Amazon Registry Services, Inc.
+ "watch", // watch Sand Shadow, LLC
+ "watches", // watches Richemont DNS Inc.
+ "weather", // weather The Weather Channel, LLC
+ "weatherchannel", // weatherchannel The Weather Channel, LLC
+ "webcam", // webcam dot Webcam Limited
+ "weber", // weber Saint-Gobain Weber SA
+ "website", // website DotWebsite Inc.
+ "wed", // wed Atgron, Inc.
+ "wedding", // wedding Top Level Domain Holdings Limited
+ "weibo", // weibo Sina Corporation
+ "weir", // weir Weir Group IP Limited
+ "whoswho", // whoswho Who's Who Registry
+ "wien", // wien punkt.wien GmbH
+ "wiki", // wiki Top Level Design, LLC
+ "williamhill", // williamhill William Hill Organization Limited
+ "win", // win First Registry Limited
+ "windows", // windows Microsoft Corporation
+ "wine", // wine June Station, LLC
+ "wme", // wme William Morris Endeavor Entertainment, LLC
+ "wolterskluwer", // wolterskluwer Wolters Kluwer N.V.
+ "work", // work Top Level Domain Holdings Limited
+ "works", // works Little Dynamite, LLC
+ "world", // world Bitter Fields, LLC
+ "wtc", // wtc World Trade Centers Association, Inc.
+ "wtf", // wtf Hidden Way, LLC
+ "xbox", // xbox Microsoft Corporation
+ "xerox", // xerox Xerox DNHC LLC
+ "xihuan", // xihuan QIHOO 360 TECHNOLOGY CO. LTD.
+ "xin", // xin Elegant Leader Limited
+ "xn--11b4c3d", // कॉम VeriSign Sarl
+ "xn--1ck2e1b", // セール Amazon Registry Services, Inc.
+ "xn--1qqw23a", // 佛山 Guangzhou YU Wei Information Technology Co., Ltd.
+ "xn--30rr7y", // 慈善 Excellent First Limited
+ "xn--3bst00m", // 集团 Eagle Horizon Limited
+ "xn--3ds443g", // 在线 TLD REGISTRY LIMITED
+ "xn--3pxu8k", // 点看 VeriSign Sarl
+ "xn--42c2d9a", // คอม VeriSign Sarl
+ "xn--45q11c", // 八卦 Zodiac Scorpio Limited
+ "xn--4gbrim", // موقع Suhub Electronic Establishment
+ "xn--55qw42g", // 公益 China Organizational Name Administration Center
+ "xn--55qx5d", // 公司 Computer Network Information Center of Chinese Academy of
+ // Sciences (China Internet Network Information Center)
+ "xn--5tzm5g", // 网站 Global Website TLD Asia Limited
+ "xn--6frz82g", // 移动 Afilias Limited
+ "xn--6qq986b3xl", // 我爱你 Tycoon Treasure Limited
+ "xn--80adxhks", // москва Foundation for Assistance for Internet Technologies and
+ // Infrastructure Development (FAITID)
+ "xn--80asehdb", // онлайн CORE Association
+ "xn--80aswg", // сайт CORE Association
+ "xn--8y0a063a", // 联通 China United Network Communications Corporation Limited
+ "xn--9dbq2a", // קום VeriSign Sarl
+ "xn--9et52u", // 时尚 RISE VICTORY LIMITED
+ "xn--9krt00a", // 微博 Sina Corporation
+ "xn--b4w605ferd", // 淡马锡 Temasek Holdings (Private) Limited
+ "xn--bck1b9a5dre4c", // ファッション Amazon Registry Services, Inc.
+ "xn--c1avg", // орг Public Interest Registry
+ "xn--c2br7g", // नेट VeriSign Sarl
+ "xn--cck2b3b", // ストア Amazon Registry Services, Inc.
+ "xn--cg4bki", // 삼성 SAMSUNG SDS CO., LTD
+ "xn--czr694b", // 商标 HU YI GLOBAL INFORMATION RESOURCES(HOLDING) COMPANY.HONGKONG
+ // LIMITED
+ "xn--czrs0t", // 商店 Wild Island, LLC
+ "xn--czru2d", // 商城 Zodiac Aquarius Limited
+ "xn--d1acj3b", // дети The Foundation for Network Initiatives “The Smart Internet”
+ "xn--eckvdtc9d", // ポイント Amazon Registry Services, Inc.
+ "xn--efvy88h", // 新闻 Xinhua News Agency Guangdong Branch 新华通讯社广东分社
+ "xn--estv75g", // 工行 Industrial and Commercial Bank of China Limited
+ "xn--fct429k", // 家電 Amazon Registry Services, Inc.
+ "xn--fhbei", // كوم VeriSign Sarl
+ "xn--fiq228c5hs", // 中文网 TLD REGISTRY LIMITED
+ "xn--fiq64b", // 中信 CITIC Group Corporation
+ "xn--fjq720a", // 娱乐 Will Bloom, LLC
+ "xn--flw351e", // 谷歌 Charleston Road Registry Inc.
+ "xn--g2xx48c", // 购物 Minds + Machines Group Limited
+ "xn--gckr3f0f", // クラウド Amazon Registry Services, Inc.
+ "xn--hxt814e", // 网店 Zodiac Libra Limited
+ "xn--i1b6b1a6a2e", // संगठन Public Interest Registry
+ "xn--imr513n", // 餐厅 HU YI GLOBAL INFORMATION RESOURCES (HOLDING) COMPANY. HONGKONG
+ // LIMITED
+ "xn--io0a7i", // 网络 Computer Network Information Center of Chinese Academy of
+ // Sciences (China Internet Network Information Center)
+ "xn--j1aef", // ком VeriSign Sarl
+ "xn--jlq61u9w7b", // 诺基亚 Nokia Corporation
+ "xn--jvr189m", // 食品 Amazon Registry Services, Inc.
+ "xn--kcrx77d1x4a", // 飞利浦 Koninklijke Philips N.V.
+ "xn--kpu716f", // 手表 Richemont DNS Inc.
+ "xn--kput3i", // 手机 Beijing RITT-Net Technology Development Co., Ltd
+ "xn--mgba3a3ejt", // ارامكو Aramco Services Company
+ "xn--mgbab2bd", // بازار CORE Association
+ "xn--mgbb9fbpob", // موبايلي GreenTech Consultancy Company W.L.L.
+ "xn--mgbca7dzdo", // ابوظبي Abu Dhabi Systems and Information Centre
+ "xn--mgbt3dhd", // همراه Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti.
+ "xn--mk1bu44c", // 닷컴 VeriSign Sarl
+ "xn--mxtq1m", // 政府 Net-Chinese Co., Ltd.
+ "xn--ngbc5azd", // شبكة International Domain Registry Pty. Ltd.
+ "xn--ngbe9e0a", // بيتك Kuwait Finance House
+ "xn--nqv7f", // 机构 Public Interest Registry
+ "xn--nqv7fs00ema", // 组织机构 Public Interest Registry
+ "xn--nyqy26a", // 健康 Stable Tone Limited
+ "xn--p1acf", // рус Rusnames Limited
+ "xn--pbt977c", // 珠宝 Richemont DNS Inc.
+ "xn--pssy2u", // 大拿 VeriSign Sarl
+ "xn--q9jyb4c", // みんな Charleston Road Registry Inc.
+ "xn--qcka1pmc", // グーグル Charleston Road Registry Inc.
+ "xn--rhqv96g", // 世界 Stable Tone Limited
+ "xn--rovu88b", // 書籍 Amazon EU S.à r.l.
+ "xn--ses554g", // 网址 KNET Co., Ltd
+ "xn--t60b56a", // 닷넷 VeriSign Sarl
+ "xn--tckwe", // コム VeriSign Sarl
+ "xn--unup4y", // 游戏 Spring Fields, LLC
+ "xn--vermgensberater-ctb", // VERMöGENSBERATER Deutsche Vermögensberatung
+ // Aktiengesellschaft DVAG
+ "xn--vermgensberatung-pwb", // VERMöGENSBERATUNG Deutsche Vermögensberatung
+ // Aktiengesellschaft DVAG
+ "xn--vhquv", // 企业 Dash McCook, LLC
+ "xn--vuq861b", // 信息 Beijing Tele-info Network Technology Co., Ltd.
+ "xn--w4r85el8fhu5dnra", // 嘉里大酒店 Kerry Trading Co. Limited
+ "xn--xhq521b", // 广东 Guangzhou YU Wei Information Technology Co., Ltd.
+ "xn--zfr164b", // 政务 China Organizational Name Administration Center
+ "xperia", // xperia Sony Mobile Communications AB
+ "xxx", // xxx ICM Registry LLC
+ "xyz", // xyz XYZ.COM LLC
+ "yachts", // yachts DERYachts, LLC
+ "yahoo", // yahoo Yahoo! Domain Services Inc.
+ "yamaxun", // yamaxun Amazon Registry Services, Inc.
+ "yandex", // yandex YANDEX, LLC
+ "yodobashi", // yodobashi YODOBASHI CAMERA CO.,LTD.
+ "yoga", // yoga Top Level Domain Holdings Limited
+ "yokohama", // yokohama GMO Registry, Inc.
+ "you", // you Amazon Registry Services, Inc.
+ "youtube", // youtube Charleston Road Registry Inc.
+ "yun", // yun QIHOO 360 TECHNOLOGY CO. LTD.
+ "zara", // zara Industria de Diseño Textil, S.A. (INDITEX, S.A.)
+ "zero", // zero Amazon Registry Services, Inc.
+ "zip", // zip Charleston Road Registry Inc.
+ "zone", // zone Outer Falls, LLC
+ "zuerich", // zuerich Kanton Zürich (Canton of Zurich)
+ };
+ // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary
+ // search
+ private static final String[] COUNTRY_CODE_TLDS =
+ new String[] {
+ "ac", // Ascension Island
+ "ad", // Andorra
+ "ae", // United Arab Emirates
+ "af", // Afghanistan
+ "ag", // Antigua and Barbuda
+ "ai", // Anguilla
+ "al", // Albania
+ "am", // Armenia
+ // "an", // Netherlands Antilles (retired)
+ "ao", // Angola
+ "aq", // Antarctica
+ "ar", // Argentina
+ "as", // American Samoa
+ "at", // Austria
+ "au", // Australia (includes Ashmore and Cartier Islands and Coral Sea Islands)
+ "aw", // Aruba
+ "ax", // Åland
+ "az", // Azerbaijan
+ "ba", // Bosnia and Herzegovina
+ "bb", // Barbados
+ "bd", // Bangladesh
+ "be", // Belgium
+ "bf", // Burkina Faso
+ "bg", // Bulgaria
+ "bh", // Bahrain
+ "bi", // Burundi
+ "bj", // Benin
+ "bm", // Bermuda
+ "bn", // Brunei Darussalam
+ "bo", // Bolivia
+ "br", // Brazil
+ "bs", // Bahamas
+ "bt", // Bhutan
+ "bv", // Bouvet Island
+ "bw", // Botswana
+ "by", // Belarus
+ "bz", // Belize
+ "ca", // Canada
+ "cc", // Cocos (Keeling) Islands
+ "cd", // Democratic Republic of the Congo (formerly Zaire)
+ "cf", // Central African Republic
+ "cg", // Republic of the Congo
+ "ch", // Switzerland
+ "ci", // Côte d'Ivoire
+ "ck", // Cook Islands
+ "cl", // Chile
+ "cm", // Cameroon
+ "cn", // China, mainland
+ "co", // Colombia
+ "cr", // Costa Rica
+ "cu", // Cuba
+ "cv", // Cape Verde
+ "cw", // Curaçao
+ "cx", // Christmas Island
+ "cy", // Cyprus
+ "cz", // Czech Republic
+ "de", // Germany
+ "dj", // Djibouti
+ "dk", // Denmark
+ "dm", // Dominica
+ "do", // Dominican Republic
+ "dz", // Algeria
+ "ec", // Ecuador
+ "ee", // Estonia
+ "eg", // Egypt
+ "er", // Eritrea
+ "es", // Spain
+ "et", // Ethiopia
+ "eu", // European Union
+ "fi", // Finland
+ "fj", // Fiji
+ "fk", // Falkland Islands
+ "fm", // Federated States of Micronesia
+ "fo", // Faroe Islands
+ "fr", // France
+ "ga", // Gabon
+ "gb", // Great Britain (United Kingdom)
+ "gd", // Grenada
+ "ge", // Georgia
+ "gf", // French Guiana
+ "gg", // Guernsey
+ "gh", // Ghana
+ "gi", // Gibraltar
+ "gl", // Greenland
+ "gm", // The Gambia
+ "gn", // Guinea
+ "gp", // Guadeloupe
+ "gq", // Equatorial Guinea
+ "gr", // Greece
+ "gs", // South Georgia and the South Sandwich Islands
+ "gt", // Guatemala
+ "gu", // Guam
+ "gw", // Guinea-Bissau
+ "gy", // Guyana
+ "hk", // Hong Kong
+ "hm", // Heard Island and McDonald Islands
+ "hn", // Honduras
+ "hr", // Croatia (Hrvatska)
+ "ht", // Haiti
+ "hu", // Hungary
+ "id", // Indonesia
+ "ie", // Ireland (Éire)
+ "il", // Israel
+ "im", // Isle of Man
+ "in", // India
+ "io", // British Indian Ocean Territory
+ "iq", // Iraq
+ "ir", // Iran
+ "is", // Iceland
+ "it", // Italy
+ "je", // Jersey
+ "jm", // Jamaica
+ "jo", // Jordan
+ "jp", // Japan
+ "ke", // Kenya
+ "kg", // Kyrgyzstan
+ "kh", // Cambodia (Khmer)
+ "ki", // Kiribati
+ "km", // Comoros
+ "kn", // Saint Kitts and Nevis
+ "kp", // North Korea
+ "kr", // South Korea
+ "kw", // Kuwait
+ "ky", // Cayman Islands
+ "kz", // Kazakhstan
+ "la", // Laos (currently being marketed as the official domain for Los Angeles)
+ "lb", // Lebanon
+ "lc", // Saint Lucia
+ "li", // Liechtenstein
+ "lk", // Sri Lanka
+ "lr", // Liberia
+ "ls", // Lesotho
+ "lt", // Lithuania
+ "lu", // Luxembourg
+ "lv", // Latvia
+ "ly", // Libya
+ "ma", // Morocco
+ "mc", // Monaco
+ "md", // Moldova
+ "me", // Montenegro
+ "mg", // Madagascar
+ "mh", // Marshall Islands
+ "mk", // Republic of Macedonia
+ "ml", // Mali
+ "mm", // Myanmar
+ "mn", // Mongolia
+ "mo", // Macau
+ "mp", // Northern Mariana Islands
+ "mq", // Martinique
+ "mr", // Mauritania
+ "ms", // Montserrat
+ "mt", // Malta
+ "mu", // Mauritius
+ "mv", // Maldives
+ "mw", // Malawi
+ "mx", // Mexico
+ "my", // Malaysia
+ "mz", // Mozambique
+ "na", // Namibia
+ "nc", // New Caledonia
+ "ne", // Niger
+ "nf", // Norfolk Island
+ "ng", // Nigeria
+ "ni", // Nicaragua
+ "nl", // Netherlands
+ "no", // Norway
+ "np", // Nepal
+ "nr", // Nauru
+ "nu", // Niue
+ "nz", // New Zealand
+ "om", // Oman
+ "pa", // Panama
+ "pe", // Peru
+ "pf", // French Polynesia With Clipperton Island
+ "pg", // Papua New Guinea
+ "ph", // Philippines
+ "pk", // Pakistan
+ "pl", // Poland
+ "pm", // Saint-Pierre and Miquelon
+ "pn", // Pitcairn Islands
+ "pr", // Puerto Rico
+ "ps", // Palestinian territories (PA-controlled West Bank and Gaza Strip)
+ "pt", // Portugal
+ "pw", // Palau
+ "py", // Paraguay
+ "qa", // Qatar
+ "re", // Réunion
+ "ro", // Romania
+ "rs", // Serbia
+ "ru", // Russia
+ "rw", // Rwanda
+ "sa", // Saudi Arabia
+ "sb", // Solomon Islands
+ "sc", // Seychelles
+ "sd", // Sudan
+ "se", // Sweden
+ "sg", // Singapore
+ "sh", // Saint Helena
+ "si", // Slovenia
+ "sj", // Svalbard and Jan Mayen Islands Not in use (Norwegian dependencies; see .no)
+ "sk", // Slovakia
+ "sl", // Sierra Leone
+ "sm", // San Marino
+ "sn", // Senegal
+ "so", // Somalia
+ "sr", // Suriname
+ "st", // São Tomé and Príncipe
+ "su", // Soviet Union (deprecated)
+ "sv", // El Salvador
+ "sx", // Sint Maarten
+ "sy", // Syria
+ "sz", // Swaziland
+ "tc", // Turks and Caicos Islands
+ "td", // Chad
+ "tf", // French Southern and Antarctic Lands
+ "tg", // Togo
+ "th", // Thailand
+ "tj", // Tajikistan
+ "tk", // Tokelau
+ "tl", // East Timor (deprecated old code)
+ "tm", // Turkmenistan
+ "tn", // Tunisia
+ "to", // Tonga
+ // "tp", // East Timor (Retired)
+ "tr", // Turkey
+ "tt", // Trinidad and Tobago
+ "tv", // Tuvalu
+ "tw", // Taiwan, Republic of China
+ "tz", // Tanzania
+ "ua", // Ukraine
+ "ug", // Uganda
+ "uk", // United Kingdom
+ "us", // United States of America
+ "uy", // Uruguay
+ "uz", // Uzbekistan
+ "va", // Vatican City State
+ "vc", // Saint Vincent and the Grenadines
+ "ve", // Venezuela
+ "vg", // British Virgin Islands
+ "vi", // U.S. Virgin Islands
+ "vn", // Vietnam
+ "vu", // Vanuatu
+ "wf", // Wallis and Futuna
+ "ws", // Samoa (formerly Western Samoa)
+ "xn--3e0b707e", // 한국 KISA (Korea Internet & Security Agency)
+ "xn--45brj9c", // ভারত National Internet Exchange of India
+ "xn--80ao21a", // қаз Association of IT Companies of Kazakhstan
+ "xn--90a3ac", // срб Serbian National Internet Domain Registry (RNIDS)
+ "xn--90ais", // ??? Reliable Software Inc.
+ "xn--clchc0ea0b2g2a9gcd", // சிங்கப்பூர் Singapore Network Information Centre
+ // (SGNIC) Pte Ltd
+ "xn--d1alf", // мкд Macedonian Academic Research Network Skopje
+ "xn--e1a4c", // ею EURid vzw/asbl
+ "xn--fiqs8s", // 中国 China Internet Network Information Center
+ "xn--fiqz9s", // 中國 China Internet Network Information Center
+ "xn--fpcrj9c3d", // భారత్ National Internet Exchange of India
+ "xn--fzc2c9e2c", // ලංකා LK Domain Registry
+ "xn--gecrj9c", // ભારત National Internet Exchange of India
+ "xn--h2brj9c", // भारत National Internet Exchange of India
+ "xn--j1amh", // укр Ukrainian Network Information Centre (UANIC), Inc.
+ "xn--j6w193g", // 香港 Hong Kong Internet Registration Corporation Ltd.
+ "xn--kprw13d", // 台湾 Taiwan Network Information Center (TWNIC)
+ "xn--kpry57d", // 台灣 Taiwan Network Information Center (TWNIC)
+ "xn--l1acc", // мон Datacom Co.,Ltd
+ "xn--lgbbat1ad8j", // الجزائر CERIST
+ "xn--mgb9awbf", // عمان Telecommunications Regulatory Authority (TRA)
+ "xn--mgba3a4f16a", // ایران Institute for Research in Fundamental Sciences (IPM)
+ "xn--mgbaam7a8h", // امارات Telecommunications Regulatory Authority (TRA)
+ "xn--mgbayh7gpa", // الاردن National Information Technology Center (NITC)
+ "xn--mgbbh1a71e", // بھارت National Internet Exchange of India
+ "xn--mgbc0a9azcg", // المغرب Agence Nationale de Réglementation des
+ // Télécommunications (ANRT)
+ "xn--mgberp4a5d4ar", // السعودية Communications and Information Technology
+ // Commission
+ "xn--mgbpl2fh", // ????? Sudan Internet Society
+ "xn--mgbtx2b", // عراق Communications and Media Commission (CMC)
+ "xn--mgbx4cd0ab", // مليسيا MYNIC Berhad
+ "xn--mix891f", // 澳門 Bureau of Telecommunications Regulation (DSRT)
+ "xn--node", // გე Information Technologies Development Center (ITDC)
+ "xn--o3cw4h", // ไทย Thai Network Information Center Foundation
+ "xn--ogbpf8fl", // سورية National Agency for Network Services (NANS)
+ "xn--p1ai", // рф Coordination Center for TLD RU
+ "xn--pgbs0dh", // تونس Agence Tunisienne d'Internet
+ "xn--qxam", // ελ ICS-FORTH GR
+ "xn--s9brj9c", // ਭਾਰਤ National Internet Exchange of India
+ "xn--wgbh1c", // مصر National Telecommunication Regulatory Authority - NTRA
+ "xn--wgbl6a", // قطر Communications Regulatory Authority
+ "xn--xkc2al3hye2a", // இலங்கை LK Domain Registry
+ "xn--xkc2dl3a5ee0h", // இந்தியா National Internet Exchange of India
+ "xn--y9a3aq", // ??? Internet Society
+ "xn--yfro4i67o", // 新加坡 Singapore Network Information Centre (SGNIC) Pte Ltd
+ "xn--ygbi2ammx", // فلسطين Ministry of Telecom & Information Technology (MTIT)
+ "ye", // Yemen
+ "yt", // Mayotte
+ "za", // South Africa
+ "zm", // Zambia
+ "zw", // Zimbabwe
+ };
+ // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary
+ // search
+ private static final String[] LOCAL_TLDS =
+ new String[] {
+ "localdomain", // Also widely used as localhost.localdomain
+ "localhost", // RFC2606 defined
+ };
// Additional arrays to supplement or override the built in ones.
// The PLUS arrays are valid keys, the MINUS arrays are invalid keys
/*
* This field is used to detect whether the getInstance has been called.
* After this, the method updateTLDOverride is not allowed to be called.
* This field does not need to be volatile since it is only accessed from
- * synchronized methods.
+ * synchronized methods.
*/
private static boolean inUse = false;
/*
@@ -1576,28 +1584,43 @@ private String chompLeadingDot(String str) {
* They can only be updated by the updateTLDOverride method, and any readers must get an instance
* using the getInstance methods which are all (now) synchronised.
*/
- // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary search
+ // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary
+ // search
private static volatile String[] countryCodeTLDsPlus = EMPTY_STRING_ARRAY;
- // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary search
+ // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary
+ // search
private static volatile String[] genericTLDsPlus = EMPTY_STRING_ARRAY;
- // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary search
+ // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary
+ // search
private static volatile String[] countryCodeTLDsMinus = EMPTY_STRING_ARRAY;
- // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary search
+ // WARNING: this array MUST be sorted, otherwise it cannot be searched reliably using binary
+ // search
private static volatile String[] genericTLDsMinus = EMPTY_STRING_ARRAY;
/**
- * enum used by {@link DomainValidator#updateTLDOverride(ArrayType, String[])}
- * to determine which override array to update / fetch
+ * enum used by {@link DomainValidator#updateTLDOverride(ArrayType, String[])} to determine
+ * which override array to update / fetch
+ *
* @since 1.5.0
* @since 1.5.1 made public and added read-only array references
*/
public enum ArrayType {
- /** Update (or get a copy of) the GENERIC_TLDS_PLUS table containing additonal generic TLDs */
+ /**
+ * Update (or get a copy of) the GENERIC_TLDS_PLUS table containing additonal generic TLDs
+ */
GENERIC_PLUS,
- /** Update (or get a copy of) the GENERIC_TLDS_MINUS table containing deleted generic TLDs */
+ /**
+ * Update (or get a copy of) the GENERIC_TLDS_MINUS table containing deleted generic TLDs
+ */
GENERIC_MINUS,
- /** Update (or get a copy of) the COUNTRY_CODE_TLDS_PLUS table containing additonal country code TLDs */
+ /**
+ * Update (or get a copy of) the COUNTRY_CODE_TLDS_PLUS table containing additonal country
+ * code TLDs
+ */
COUNTRY_CODE_PLUS,
- /** Update (or get a copy of) the COUNTRY_CODE_TLDS_MINUS table containing deleted country code TLDs */
+ /**
+ * Update (or get a copy of) the COUNTRY_CODE_TLDS_MINUS table containing deleted country
+ * code TLDs
+ */
COUNTRY_CODE_MINUS,
/** Get a copy of the generic TLDS table */
GENERIC_RO,
@@ -1606,8 +1629,7 @@ public enum ArrayType {
/** Get a copy of the infrastructure table */
INFRASTRUCTURE_RO,
/** Get a copy of the local table */
- LOCAL_RO
- ;
+ LOCAL_RO;
};
// For use by unit test code only
static synchronized void clearTLDOverrides() {
@@ -1618,39 +1640,41 @@ static synchronized void clearTLDOverrides() {
genericTLDsMinus = EMPTY_STRING_ARRAY;
}
/**
- * Update one of the TLD override arrays.
- * This must only be done at program startup, before any instances are accessed using getInstance.
- *
+ *
*
- * @param table the table to update, see {@link DomainValidator.ArrayType}
- * Must be one of the following
- *
- *
* @param tlds the array of TLDs, must not be null
* @throws IllegalStateException if the method is called after getInstance
* @throws IllegalArgumentException if one of the read-only tables is requested
* @since 1.5.0
*/
- public static synchronized void updateTLDOverride(ArrayType table, String [] tlds) {
+ public static synchronized void updateTLDOverride(ArrayType table, String[] tlds) {
if (inUse) {
- throw new IllegalStateException("Can only invoke this method before calling getInstance");
+ throw new IllegalStateException(
+ "Can only invoke this method before calling getInstance");
}
- String [] copy = new String[tlds.length];
+ String[] copy = new String[tlds.length];
// Comparisons are always done with lower-case entries
for (int i = 0; i < tlds.length; i++) {
copy[i] = tlds[i].toLowerCase(Locale.ENGLISH);
}
Arrays.sort(copy);
- switch(table) {
+ switch (table) {
case COUNTRY_CODE_MINUS:
countryCodeTLDsMinus = copy;
break;
@@ -1674,14 +1698,15 @@ public static synchronized void updateTLDOverride(ArrayType table, String [] tld
}
/**
* Get a copy of the internal array.
+ *
* @param table the array type (any of the enum values)
* @return a copy of the array
* @throws IllegalArgumentException if the table type is unexpected (should not happen)
* @since 1.5.1
*/
- public static String [] getTLDEntries(ArrayType table) {
+ public static String[] getTLDEntries(ArrayType table) {
final String array[];
- switch(table) {
+ switch (table) {
case COUNTRY_CODE_MINUS:
array = countryCodeTLDsMinus;
break;
@@ -1712,8 +1737,8 @@ public static synchronized void updateTLDOverride(ArrayType table, String [] tld
return Arrays.copyOf(array, array.length); // clone the array
}
/**
- * Converts potentially Unicode input to punycode.
- * If conversion fails, returns the original input.
+ * Converts potentially Unicode input to punycode. If conversion fails, returns the original
+ * input.
*
* @param input the string to convert, not null
* @return converted input, or original input if conversion fails
@@ -1729,7 +1754,7 @@ static String unicodeToASCII(String input) {
return ascii;
}
final int length = input.length();
- if (length == 0) {// check there is a last character
+ if (length == 0) { // check there is a last character
return input;
}
// RFC3490 3.1. 1)
@@ -1737,8 +1762,8 @@ static String unicodeToASCII(String input) {
// characters MUST be recognized as dots: U+002E (full stop), U+3002
// (ideographic full stop), U+FF0E (fullwidth full stop), U+FF61
// (halfwidth ideographic full stop).
- char lastChar = input.charAt(length-1);// fetch original last char
- switch(lastChar) {
+ char lastChar = input.charAt(length - 1); // fetch original last char
+ switch (lastChar) {
case '\u002E': // "." full stop
case '\u3002': // ideographic full stop
case '\uFF0E': // fullwidth full stop
@@ -1751,11 +1776,13 @@ static String unicodeToASCII(String input) {
return input;
}
}
+
private static class IDNBUGHOLDER {
private static boolean keepsTrailingDot() {
final String input = "a."; // must be a valid name
return input.equals(IDN.toASCII(input));
}
+
private static final boolean IDN_TOASCII_PRESERVES_TRAILING_DOTS = keepsTrailingDot();
}
/*
@@ -1766,7 +1793,7 @@ private static boolean isOnlyASCII(String input) {
if (input == null) {
return true;
}
- for(int i=0; i < input.length(); i++) {
+ for (int i = 0; i < input.length(); i++) {
if (input.charAt(i) > 0x7F) { // CHECKSTYLE IGNORE MagicNumber
return false;
}
diff --git a/trustkit/src/main/java/com/datatheorem/android/trustkit/config/PublicKeyPin.java b/trustkit/src/main/java/com/datatheorem/android/trustkit/config/PublicKeyPin.java
index 83a5419..7202c3a 100644
--- a/trustkit/src/main/java/com/datatheorem/android/trustkit/config/PublicKeyPin.java
+++ b/trustkit/src/main/java/com/datatheorem/android/trustkit/config/PublicKeyPin.java
@@ -1,12 +1,11 @@
package com.datatheorem.android.trustkit.config;
-import androidx.annotation.NonNull;
import android.util.Base64;
+import androidx.annotation.NonNull;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.security.cert.Certificate;
-
/**
* A pin is the base64-encoded SHA-256 hash of the certificate's Subject Public Key Info, as
* described in the HPKP RFC .
@@ -51,5 +50,7 @@ public int hashCode() {
@NonNull
@Override
- public String toString(){ return pin; }
+ public String toString() {
+ return pin;
+ }
}
diff --git a/trustkit/src/main/java/com/datatheorem/android/trustkit/config/RegexValidator.java b/trustkit/src/main/java/com/datatheorem/android/trustkit/config/RegexValidator.java
index 53611dd..7e0935c 100644
--- a/trustkit/src/main/java/com/datatheorem/android/trustkit/config/RegexValidator.java
+++ b/trustkit/src/main/java/com/datatheorem/android/trustkit/config/RegexValidator.java
@@ -1,4 +1,5 @@
-// TrustKit: Taken from https://apache.googlesource.com/commons-validator/+/VALIDATOR_1_5_1/src/main/java/org/apache/commons/validator/routines/RegexValidator.java
+// TrustKit: Taken from
+// https://apache.googlesource.com/commons-validator/+/VALIDATOR_1_5_1/src/main/java/org/apache/commons/validator/routines/RegexValidator.java
package com.datatheorem.android.trustkit.config;
/*
@@ -21,15 +22,15 @@
import java.io.Serializable;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+
/**
* Regular Expression validation (using JDK 1.4+ regex support).
- *
*
*
*
* String[] regexs = new String[] {...};
@@ -38,32 +39,27 @@
*
- *
*
* Note that patterns are matched against the entire input.
*
- * true or false:true or false:
*
- *
- * boolean valid = validator.isValid(value);
+ *
+ * boolean valid = validator.isValid(value);
+ *
- *
- * String result = validator.validate(value);
+ *
+ * String result = validator.validate(value);
+ *
- *
- * String[] result = validator.match(value);
+ *
* String[] result = validator.match(value);
+ * true matching is case
- * sensitive, otherwise matching is case in-sensitive
+ * @param regex The regular expression this validator will validate against
+ * @param caseSensitive when true matching is case sensitive, otherwise
+ * matching is case in-sensitive
*/
public RegexValidator(String regex, boolean caseSensitive) {
this(new String[] {regex}, caseSensitive);
}
/**
- * Construct a case sensitive validator that matches any one
- * of the set of regular expressions.
+ * Construct a case sensitive validator that matches any one of the set of regular
+ * expressions.
*
- * @param regexs The set of regular expressions this validator will
- * validate against
+ * @param regexs The set of regular expressions this validator will validate against
*/
public RegexValidator(String[] regexs) {
this(regexs, true);
}
/**
- * Construct a validator that matches any one of the set of regular
- * expressions with the specified case sensitivity.
+ * Construct a validator that matches any one of the set of regular expressions with the
+ * specified case sensitivity.
*
- * @param regexs The set of regular expressions this validator will
- * validate against
- * @param caseSensitive when true matching is case
- * sensitive, otherwise matching is case in-sensitive
+ * @param regexs The set of regular expressions this validator will validate against
+ * @param caseSensitive when true matching is case sensitive, otherwise
+ * matching is case in-sensitive
*/
public RegexValidator(String[] regexs, boolean caseSensitive) {
if (regexs == null || regexs.length == 0) {
throw new IllegalArgumentException("Regular expressions are missing");
}
patterns = new Pattern[regexs.length];
- int flags = (caseSensitive ? 0: Pattern.CASE_INSENSITIVE);
+ int flags = (caseSensitive ? 0 : Pattern.CASE_INSENSITIVE);
for (int i = 0; i < regexs.length; i++) {
if (regexs[i] == null || regexs[i].length() == 0) {
throw new IllegalArgumentException("Regular expression[" + i + "] is missing");
}
- patterns[i] = Pattern.compile(regexs[i], flags);
+ patterns[i] = Pattern.compile(regexs[i], flags);
}
}
/**
* Validate a value against the set of regular expressions.
*
* @param value The value to validate.
- * @return true if the value is valid
- * otherwise false.
+ * @return true if the value is valid otherwise false.
*/
public boolean isValid(String value) {
if (value == null) {
@@ -145,12 +134,11 @@ public boolean isValid(String value) {
return false;
}
/**
- * Validate a value against the set of regular expressions
- * returning the array of matched groups.
+ * Validate a value against the set of regular expressions returning the array of matched
+ * groups.
*
* @param value The value to validate.
- * @return String array of the groups matched if
- * valid or null if invalid
+ * @return String array of the groups matched if valid or null if invalid
*/
public String[] match(String value) {
if (value == null) {
@@ -162,7 +150,7 @@ public String[] match(String value) {
int count = matcher.groupCount();
String[] groups = new String[count];
for (int j = 0; j < count; j++) {
- groups[j] = matcher.group(j+1);
+ groups[j] = matcher.group(j + 1);
}
return groups;
}
@@ -170,12 +158,12 @@ public String[] match(String value) {
return null;
}
/**
- * Validate a value against the set of regular expressions
- * returning a String value of the aggregated groups.
+ * Validate a value against the set of regular expressions returning a String value of the
+ * aggregated groups.
*
* @param value The value to validate.
- * @return Aggregated String value comprised of the
- * groups matched if valid or null if invalid
+ * @return Aggregated String value comprised of the groups matched if valid or null
+ * if invalid
*/
public String validate(String value) {
if (value == null) {
@@ -190,7 +178,7 @@ public String validate(String value) {
}
StringBuilder buffer = new StringBuilder();
for (int j = 0; j < count; j++) {
- String component = matcher.group(j+1);
+ String component = matcher.group(j + 1);
if (component != null) {
buffer.append(component);
}
@@ -202,6 +190,7 @@ public String validate(String value) {
}
/**
* Provide a String representation of this validator.
+ *
* @return A String representation of this validator
*/
@Override
diff --git a/trustkit/src/main/java/com/datatheorem/android/trustkit/config/TrustKitConfiguration.java b/trustkit/src/main/java/com/datatheorem/android/trustkit/config/TrustKitConfiguration.java
index 93e4b73..e755231 100644
--- a/trustkit/src/main/java/com/datatheorem/android/trustkit/config/TrustKitConfiguration.java
+++ b/trustkit/src/main/java/com/datatheorem/android/trustkit/config/TrustKitConfiguration.java
@@ -11,7 +11,6 @@
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
-
public class TrustKitConfiguration {
@NonNull private final Set