17d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root/* 27d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * Copyright 2013 The Android Open Source Project 37d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * 47d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * Licensed under the Apache License, Version 2.0 (the "License"); 57d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * you may not use this file except in compliance with the License. 67d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * You may obtain a copy of the License at 77d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * 87d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * http://www.apache.org/licenses/LICENSE-2.0 97d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * 107d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * Unless required by applicable law or agreed to in writing, software 117d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * distributed under the License is distributed on an "AS IS" BASIS, 127d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * See the License for the specific language governing permissions and 147d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * limitations under the License. 157d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root */ 167d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root 177d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Rootpackage org.conscrypt; 187d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root 197d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Rootimport java.security.PublicKey; 207d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Rootimport java.util.Arrays; 217d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root 227d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root/** 237d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * A simple but useless key class that holds X.509 public key information when 247d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root * the appropriate KeyFactory for the key algorithm is not available. 257d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root */ 2629916ef38dc9cb4e4c6e3fdb87d4e921546d3ef4Nathan Mittlerfinal class X509PublicKey implements PublicKey { 277d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root private static final long serialVersionUID = -8610156854731664298L; 287d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root 297d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root private final String algorithm; 307d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root 317d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root private final byte[] encoded; 327d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root 3329916ef38dc9cb4e4c6e3fdb87d4e921546d3ef4Nathan Mittler X509PublicKey(String algorithm, byte[] encoded) { 347d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root this.algorithm = algorithm; 357d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root this.encoded = encoded; 367d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root } 377d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root 387d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root @Override 397d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root public String getAlgorithm() { 407d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root return algorithm; 417d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root } 427d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root 437d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root @Override 447d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root public String getFormat() { 457d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root return "X.509"; 467d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root } 477d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root 487d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root @Override 497d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root public byte[] getEncoded() { 507d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root return encoded; 517d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root } 527d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root 537d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root @Override 547d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root public String toString() { 557d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root return "X509PublicKey [algorithm=" + algorithm + ", encoded=" + Arrays.toString(encoded) 567d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root + "]"; 577d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root } 587d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root 597d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root @Override 607d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root public int hashCode() { 617d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root final int prime = 31; 627d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root int result = 1; 637d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root result = prime * result + ((algorithm == null) ? 0 : algorithm.hashCode()); 647d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root result = prime * result + Arrays.hashCode(encoded); 657d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root return result; 667d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root } 677d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root 687d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root @Override 697d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root public boolean equals(Object obj) { 707d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root if (this == obj) 717d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root return true; 727d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root if (obj == null) 737d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root return false; 747d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root if (getClass() != obj.getClass()) 757d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root return false; 767d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root X509PublicKey other = (X509PublicKey) obj; 777d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root if (algorithm == null) { 787d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root if (other.algorithm != null) 797d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root return false; 807d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root } else if (!algorithm.equals(other.algorithm)) 817d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root return false; 827d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root if (!Arrays.equals(encoded, other.encoded)) 837d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root return false; 847d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root return true; 857d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root } 867d97b2cee4acabea6c8cb795d25fb1fb564f016cKenny Root} 87