1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.security.cert; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.ByteArrayInputStream; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.math.BigInteger; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.security.Principal; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collection; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Date; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.List; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.security.auth.x500.X500Principal; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Abstract base class for X.509 certificates. 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * This represents a standard way for accessing the attributes of X.509 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * certificates. 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The basic X.509 v3 format described in ASN.1: 35f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Certificate ::= SEQUENCE { 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * tbsCertificate TBSCertificate, 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * signatureAlgorithm AlgorithmIdentifier, 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * signature BIT STRING } 41f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * TBSCertificate ::= SEQUENCE { 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * version [0] EXPLICIT Version DEFAULT v1, 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * serialNumber CertificateSerialNumber, 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * signature AlgorithmIdentifier, 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * issuer Name, 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * validity Validity, 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * subject Name, 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * subjectPublicKeyInfo SubjectPublicKeyInfo, 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL, 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * -- If present, version must be v2 or v3 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL, 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * -- If present, version must be v2 or v3 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * extensions [3] EXPLICIT Extensions OPTIONAL 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * -- If present, version must be v3 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * For more information consult RFC 2459 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * "Internet X.509 Public Key Infrastructure Certificate and CRL Profile" at <a 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * href 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ="http://www.ietf.org/rfc/rfc2459.txt">http://www.ietf.org/rfc/rfc2459.txt 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </a> . 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic abstract class X509Certificate 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project extends Certificate implements X509Extension { 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = -2491127588187038216L; 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a new {@code X509Certificate}. 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project protected X509Certificate() { 74f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes super("X.509"); 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Checks whether the certificate is currently valid. 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The validity defined in ASN.1: 81f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * validity Validity 84f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 85f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * Validity ::= SEQUENCE { 86f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * notBefore CertificateValidityDate, 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * notAfter CertificateValidityDate } 88f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 89f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * CertificateValidityDate ::= CHOICE { 90f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * utcTime UTCTime, 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * generalTime GeneralizedTime } 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 93f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateExpiredException 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the certificate has expired. 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateNotYetValidException 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the certificate is not yet valid. 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void checkValidity() 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateExpiredException, CertificateNotYetValidException; 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Checks whether the certificate is valid at the specified date. 104f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param date 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the date to check the validity against. 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateExpiredException 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the certificate has expired. 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateNotYetValidException 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the certificate is not yet valid. 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #checkValidity() 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract void checkValidity(Date date) 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateExpiredException, CertificateNotYetValidException; 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the certificates {@code version} (version number). 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The version defined is ASN.1: 120f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Version ::= INTEGER { v1(0), v2(1), v3(2) } 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 124f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the version number. 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract int getVersion(); 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code serialNumber} of the certificate. 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASN.1 definition of {@code serialNumber}: 133f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * CertificateSerialNumber ::= INTEGER 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 137f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the serial number. 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract BigInteger getSerialNumber(); 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code issuer} (issuer distinguished name) as an 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * implementation specific {@code Principal} object. 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASN.1 definition of {@code issuer}: 147f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * issuer Name 150f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Name ::= CHOICE { 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * RDNSequence } 153f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * RDNSequence ::= SEQUENCE OF RelativeDistinguishedName 155f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * RelativeDistinguishedName ::= SET OF AttributeTypeAndValue 157f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * AttributeTypeAndValue ::= SEQUENCE { 159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * type AttributeType, 160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value AttributeValue } 161f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * AttributeType ::= OBJECT IDENTIFIER 163f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * AttributeValue ::= ANY DEFINED BY AttributeType 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 166f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <b>replaced by:</b> {@link #getIssuerX500Principal()}. 168f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code issuer} as an implementation specific {@code 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Principal}. 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract Principal getIssuerDN() ; 173adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code issuer} (issuer distinguished name) as an {@code 176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * X500Principal}. 177f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code issuer} (issuer distinguished name). 179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public X500Principal getIssuerX500Principal() { 181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO if there is no X.509 certificate provider installed 184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // should we try to access Harmony X509CertImpl via classForName? 185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory factory = CertificateFactory 186f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes .getInstance("X.509"); 187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project X509Certificate cert = (X509Certificate) factory 189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .generateCertificate(new ByteArrayInputStream(getEncoded())); 190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return cert.getIssuerX500Principal(); 192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 194897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes throw new RuntimeException("Failed to get X500Principal issuer", e); 195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 199adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code subject} (subject distinguished name) as an 200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * implementation specific {@code Principal} object. 201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASN.1 definition of {@code subject}: 203f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * subject Name 206f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Name ::= CHOICE { 208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * RDNSequence } 209f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * RDNSequence ::= SEQUENCE OF RelativeDistinguishedName 211f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * RelativeDistinguishedName ::= SET OF AttributeTypeAndValue 213f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * AttributeTypeAndValue ::= SEQUENCE { 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * type AttributeType, 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value AttributeValue } 217f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * AttributeType ::= OBJECT IDENTIFIER 219f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * AttributeValue ::= ANY DEFINED BY AttributeType 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 222f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <b>replaced by:</b> {@link #getSubjectX500Principal()}. 2252f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes * 226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code subject} (subject distinguished name). 227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract Principal getSubjectDN(); 229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code subject} (subject distinguished name) as an {@code 232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * X500Principal}. 233f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code subject} (subject distinguished name) 235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public X500Principal getSubjectX500Principal() { 237adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // TODO if there is no X.509 certificate provider installed 240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // should we try to access Harmony X509CertImpl via classForName? 241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CertificateFactory factory = CertificateFactory 242f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes .getInstance("X.509"); 243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project X509Certificate cert = (X509Certificate) factory 245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .generateCertificate(new ByteArrayInputStream(getEncoded())); 246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return cert.getSubjectX500Principal(); 248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (Exception e) { 249897538a36c18f4db8f9f68ee566aec0bda842e9fElliott Hughes throw new RuntimeException("Failed to get X500Principal subject", e); 250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code notBefore} date from the validity period of the 255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * certificate. 256f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the start of the validity period. 258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract Date getNotBefore(); 260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code notAfter} date of the validity period of the 263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * certificate. 264f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the end of the validity period. 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract Date getNotAfter(); 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code tbsCertificate} information from this certificate in 271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DER-encoded format. 272f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the DER-encoded certificate information. 274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateEncodingException 275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if an error occurs in encoding 276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract byte[] getTBSCertificate() 278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateEncodingException; 279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the raw signature bits from the certificate. 282f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the raw signature bits from the certificate. 284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract byte[] getSignature(); 286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the name of the algorithm for the certificate signature. 289f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the signature algorithm name. 291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract String getSigAlgName(); 293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the OID of the signature algorithm from the certificate. 296f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the OID of the signature algorithm. 298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract String getSigAlgOID(); 300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the parameters of the signature algorithm in DER-encoded format. 303f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the parameters of the signature algorithm, or {@code null} if 305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * none are used. 306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract byte[] getSigAlgParams(); 308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code issuerUniqueID} from the certificate. 311f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code issuerUniqueID} or {@code null} if there's none in the 313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * certificate. 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean[] getIssuerUniqueID(); 316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code subjectUniqueID} from the certificate. 319f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code subjectUniqueID} or null if there's none in the 321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * certificate. 322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean[] getSubjectUniqueID(); 324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the {@code KeyUsage} extension as a {@code boolean} array. 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASN.1 definition of {@code KeyUsage}: 329f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * KeyUsage ::= BIT STRING { 332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * digitalSignature (0), 333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * nonRepudiation (1), 334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * keyEncipherment (2), 335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * dataEncipherment (3), 336adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * keyAgreement (4), 337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * keyCertSign (5), 338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * cRLSign (6), 339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * encipherOnly (7), 340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * decipherOnly (8) } 341f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 343f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code KeyUsage} extension or {@code null} if there's none in 345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the certificate. 346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract boolean[] getKeyUsage(); 348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a read-only list of OID strings representing the {@code 351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ExtKeyUsageSyntax} field of the extended key usage extension. 352f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the extended key usage extension, or {@code null} if there's none 354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the certificate. 355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateParsingException 356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if the extension decoding fails. 357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public List<String> getExtendedKeyUsage() 359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateParsingException { 360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns the path length of the certificate constraints from the {@code 365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * BasicContraints} extension. 366f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the path length of the certificate constraints if the extension 368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is present or {@code -1} if the extension is not present. {@code 369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Integer.MAX_VALUE} if there's not limit. 370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public abstract int getBasicConstraints(); 372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a read-only list of the subject alternative names from the 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code SubjectAltName} extension. 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASN.1 definition of {@code SubjectAltName}: 378f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * SubjectAltName ::= GeneralNames 381f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName 383f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * GeneralName ::= CHOICE { 385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherName [0] AnotherName, 386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * rfc822Name [1] IA5String, 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * dNSName [2] IA5String, 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * x400Address [3] ORAddress, 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * directoryName [4] Name, 390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ediPartyName [5] EDIPartyName, 391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * uniformResourceIdentifier [6] IA5String, 392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * iPAddress [7] OCTET STRING, 393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * registeredID [8] OBJECT IDENTIFIER } 394f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 396f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the subject alternative names or {@code null} if there are none 398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * in the certificate. 399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateParsingException 400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if decoding of the extension fails. 401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Collection<List<?>> getSubjectAlternativeNames() 403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateParsingException { 404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a read-only list of the issuer alternative names from the {@code 409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IssuerAltName} extension. 410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASN.1 definition of {@code IssuerAltName}: 412f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * IssuerAltName ::= GeneralNames 415f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName 417f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * GeneralName ::= CHOICE { 419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * otherName [0] AnotherName, 420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * rfc822Name [1] IA5String, 421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * dNSName [2] IA5String, 422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * x400Address [3] ORAddress, 423adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * directoryName [4] Name, 424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ediPartyName [5] EDIPartyName, 425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * uniformResourceIdentifier [6] IA5String, 426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * iPAddress [7] OCTET STRING, 427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * registeredID [8] OBJECT IDENTIFIER } 428f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 430f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * 431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the issuer alternative names of {@code null} if there are none in 432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the certificate. 433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @throws CertificateParsingException 434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if decoding of the extension fails. 435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Collection<List<?>> getIssuerAlternativeNames() 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws CertificateParsingException { 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return null; 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 441