1bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root/* 2bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * Copyright 2013 The Android Open Source Project 3bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * 4bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 5bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * you may not use this file except in compliance with the License. 6bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * You may obtain a copy of the License at 7bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * 8bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * http://www.apache.org/licenses/LICENSE-2.0 9bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * 10bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * Unless required by applicable law or agreed to in writing, software 11bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 12bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * See the License for the specific language governing permissions and 14bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * limitations under the License. 15bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root */ 16bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root 17bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Rootpackage org.conscrypt; 18bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root 19bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Rootimport java.security.PublicKey; 20bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Rootimport java.util.Arrays; 21bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root 22bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root/** 23bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * A simple but useless key class that holds X.509 public key information when 24bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root * the appropriate KeyFactory for the key algorithm is not available. 25bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root */ 26bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Rootpublic class X509PublicKey implements PublicKey { 27bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root private static final long serialVersionUID = -8610156854731664298L; 28bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root 29bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root private final String algorithm; 30bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root 31bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root private final byte[] encoded; 32bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root 33bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root public X509PublicKey(String algorithm, byte[] encoded) { 34bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root this.algorithm = algorithm; 35bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root this.encoded = encoded; 36bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root } 37bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root 38bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root @Override 39bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root public String getAlgorithm() { 40bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root return algorithm; 41bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root } 42bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root 43bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root @Override 44bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root public String getFormat() { 45bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root return "X.509"; 46bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root } 47bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root 48bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root @Override 49bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root public byte[] getEncoded() { 50bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root return encoded; 51bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root } 52bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root 53bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root @Override 54bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root public String toString() { 55bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root return "X509PublicKey [algorithm=" + algorithm + ", encoded=" + Arrays.toString(encoded) 56bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root + "]"; 57bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root } 58bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root 59bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root @Override 60bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root public int hashCode() { 61bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root final int prime = 31; 62bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root int result = 1; 63bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root result = prime * result + ((algorithm == null) ? 0 : algorithm.hashCode()); 64bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root result = prime * result + Arrays.hashCode(encoded); 65bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root return result; 66bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root } 67bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root 68bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root @Override 69bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root public boolean equals(Object obj) { 70bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root if (this == obj) 71bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root return true; 72bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root if (obj == null) 73bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root return false; 74bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root if (getClass() != obj.getClass()) 75bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root return false; 76bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root X509PublicKey other = (X509PublicKey) obj; 77bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root if (algorithm == null) { 78bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root if (other.algorithm != null) 79bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root return false; 80bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root } else if (!algorithm.equals(other.algorithm)) 81bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root return false; 82bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root if (!Arrays.equals(encoded, other.encoded)) 83bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root return false; 84bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root return true; 85bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root } 86bd788522b36f03dc12750c69fd8b3733ef3801bdKenny Root} 87