Skip to content

Commit

Permalink
Merge pull request #24 from datatheorem/pr_update_okhostnameverifier
Browse files Browse the repository at this point in the history
Update OkHostnameVerifier in TrustKit-Android
  • Loading branch information
nabla-c0d3 authored Nov 8, 2017
2 parents e3348bf + 9a6d50c commit b445bd4
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,9 @@ public boolean verify(String host, SSLSession session) {
}

public boolean verify(String host, X509Certificate certificate) {
// TrustKit: Removed support here for IP addresses so we don't need to import more files
// from OkHttp
return verifyHostname(host, certificate);
return Utils.verifyAsIpAddress(host)
? verifyIpAddress(host, certificate)
: verifyHostname(host, certificate);
}

/** Returns true if {@code certificate} matches {@code ipAddress}. */
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.datatheorem.android.trustkit.pinning;

import java.util.regex.Pattern;

/** Junk drawer of utility methods. */
final class Utils {
/**
* Quick and dirty pattern to differentiate IP addresses from hostnames. This is an approximation
* of Android's private InetAddress#isNumeric API.
*
* <p>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();
}
}

0 comments on commit b445bd4

Please sign in to comment.