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 org.apache.harmony.security.x509; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport javax.security.auth.x500.X500Principal; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Sequence; 237365de1056414750d0a7d1fdd26025fd247f0d04Jesse Wilsonimport org.apache.harmony.security.asn1.ASN1Type; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.BerInputStream; 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.x501.Name; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * CRL Entry's Certificate Issuer Extension (OID = 2.5.29.29). 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * It is a CRL entry extension and contains the GeneralNames describing 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the issuer of revoked certificate. Its ASN.1 notation is as follows: 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * id-ce-certificateIssuer OBJECT IDENTIFIER ::= { id-ce 29 } 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * certificateIssuer ::= GeneralNames 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (as specified in RFC 3280) 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * In java implementation it is presumed that GeneralNames consist of 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * one element and its type is directoryName. 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 405c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilsonpublic final class CertificateIssuer extends ExtensionValue { 415c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson /** certificate issuer value */ 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private X500Principal issuer; 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates an object on the base of its encoded form. 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public CertificateIssuer(byte[] encoding) { 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(encoding); 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public X500Principal getIssuer() throws IOException { 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (issuer == null) { 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project issuer = (X500Principal) ASN1.decode(getEncoded()); 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return issuer; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 588216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes @Override public void dumpValue(StringBuilder sb, String prefix) { 598216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append(prefix).append("Certificate Issuer: "); 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (issuer == null) { 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project issuer = getIssuer(); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (IOException e) { 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // incorrect extension value encoding 658216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append("Unparseable (incorrect!) extension value:\n"); 668216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes super.dumpValue(sb); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 698216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append(issuer).append('\n'); 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ASN.1 Encoder/Decoder. 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 755c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson public static final ASN1Type ASN1 = new ASN1Sequence(new ASN1Type[] { GeneralName.ASN1 }) { 765c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson @Override public Object getDecodedObject(BerInputStream in) { 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return ((Name) ((GeneralName) ((Object[]) in.content)[0]) 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .getName()).getX500Principal(); 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 815c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson @Override protected void getValues(Object object, Object[] values) { 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project values[0] = object; 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 86