/* * Copyright (C) 2015 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 android.security.net.config; import java.util.Arrays; /** @hide */ public final class Pin { public final String digestAlgorithm; public final byte[] digest; private final int mHashCode; public Pin(String digestAlgorithm, byte[] digest) { this.digestAlgorithm = digestAlgorithm; this.digest = digest; mHashCode = Arrays.hashCode(digest) ^ digestAlgorithm.hashCode(); } /** * @hide */ public static boolean isSupportedDigestAlgorithm(String algorithm) { // Currently only SHA-256 is supported. SHA-512 if/once Chromium networking stack // supports it. return "SHA-256".equalsIgnoreCase(algorithm); } /** * @hide */ public static int getDigestLength(String algorithm) { if ("SHA-256".equalsIgnoreCase(algorithm)) { return 32; } throw new IllegalArgumentException("Unsupported digest algorithm: " + algorithm); } @Override public int hashCode() { return mHashCode; } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (!(obj instanceof Pin)) { return false; } Pin other = (Pin) obj; if (other.hashCode() != mHashCode) { return false; } if (!Arrays.equals(digest, other.digest)) { return false; } if (!digestAlgorithm.equals(other.digestAlgorithm)) { return false; } return true; } }