151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/* 251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Copyright (c) 1997, 2006, Oracle and/or its affiliates. All rights reserved. 351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is free software; you can redistribute it and/or modify it 651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * under the terms of the GNU General Public License version 2 only, as 751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * published by the Free Software Foundation. Oracle designates this 851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * particular file as subject to the "Classpath" exception as provided 951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * by Oracle in the LICENSE file that accompanied this code. 1051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * This code is distributed in the hope that it will be useful, but WITHOUT 1251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 1351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 1451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * version 2 for more details (a copy is included in the LICENSE file that 1551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * accompanied this code). 1651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 1751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * You should have received a copy of the GNU General Public License version 1851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2 along with this work; if not, write to the Free Software Foundation, 1951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 2051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 2151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 2251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * or visit www.oracle.com if you need additional information or have any 2351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * questions. 2451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 2551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipackage sun.security.x509; 2751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 2851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.io.IOException; 2951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.io.InputStream; 3051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.io.OutputStream; 3151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport java.util.Enumeration; 3251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskiimport sun.security.util.*; 3451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 3551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski/** 3651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Represent the CRL Reason Flags. 3751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 3851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>This extension, if present, defines the identifies 3951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * the reason for the certificate revocation. 4051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <p>The ASN.1 syntax for this is: 4151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * <pre> 4251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * ReasonFlags ::= BIT STRING { 4351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * unused (0), 4451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * keyCompromise (1), 4551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * cACompromise (2), 4651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * affiliationChanged (3), 4751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * superseded (4), 4851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * cessationOfOperation (5), 4951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * certificateHold (6), 5051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * privilegeWithdrawn (7), 5151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * aACompromise (8) } 5251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * </pre> 5351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 5451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @author Hemma Prafullchandra 5551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 5651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebskipublic class ReasonFlags { 5751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 5851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 5951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Reasons 6051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 6151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static final String UNUSED = "unused"; 6251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static final String KEY_COMPROMISE = "key_compromise"; 6351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static final String CA_COMPROMISE = "ca_compromise"; 6451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static final String AFFILIATION_CHANGED = "affiliation_changed"; 6551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static final String SUPERSEDED = "superseded"; 6651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static final String CESSATION_OF_OPERATION 6751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski = "cessation_of_operation"; 6851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static final String CERTIFICATE_HOLD = "certificate_hold"; 6951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static final String PRIVILEGE_WITHDRAWN = "privilege_withdrawn"; 7051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public static final String AA_COMPROMISE = "aa_compromise"; 7151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 7251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private final static String[] NAMES = { 7351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski UNUSED, 7451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski KEY_COMPROMISE, 7551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CA_COMPROMISE, 7651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski AFFILIATION_CHANGED, 7751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski SUPERSEDED, 7851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CESSATION_OF_OPERATION, 7951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski CERTIFICATE_HOLD, 8051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski PRIVILEGE_WITHDRAWN, 8151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski AA_COMPROMISE, 8251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski }; 8351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 8451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private static int name2Index(String name) throws IOException { 8551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski for( int i=0; i<NAMES.length; i++ ) { 8651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if( NAMES[i].equalsIgnoreCase(name) ) { 8751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return i; 8851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 8951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 9051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IOException("Name not recognized by ReasonFlags"); 9151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 9251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 9351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // Private data members 9451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private boolean[] bitString; 9551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 9651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 9751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Check if bit is set. 9851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 9951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param position the position in the bit string to check. 10051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 10151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private boolean isSet(int position) { 10251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return bitString[position]; 10351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 10451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 10551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 10651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Set the bit at the specified position. 10751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 10851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski private void set(int position, boolean val) { 10951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski // enlarge bitString if necessary 11051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (position >= bitString.length) { 11151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski boolean[] tmp = new boolean[position+1]; 11251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski System.arraycopy(bitString, 0, tmp, 0, bitString.length); 11351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski bitString = tmp; 11451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 11551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski bitString[position] = val; 11651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 11751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 11851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 11951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Create a ReasonFlags with the passed bit settings. 12051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 12151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param reasons the bits to be set for the ReasonFlags. 12251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 12351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public ReasonFlags(byte[] reasons) { 12451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski bitString = new BitArray(reasons.length*8, reasons).toBooleanArray(); 12551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 12651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 12751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 12851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Create a ReasonFlags with the passed bit settings. 12951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 13051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param reasons the bits to be set for the ReasonFlags. 13151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 13251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public ReasonFlags(boolean[] reasons) { 13351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.bitString = reasons; 13451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 13551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 13651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 13751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Create a ReasonFlags with the passed bit settings. 13851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 13951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param reasons the bits to be set for the ReasonFlags. 14051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 14151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public ReasonFlags(BitArray reasons) { 14251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.bitString = reasons.toBooleanArray(); 14351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 14451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 14551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 14651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Create the object from the passed DER encoded value. 14751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 14851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param in the DerInputStream to read the ReasonFlags from. 14951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception IOException on decoding errors. 15051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 15151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public ReasonFlags(DerInputStream in) throws IOException { 15251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski DerValue derVal = in.getDerValue(); 15351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.bitString = derVal.getUnalignedBitString(true).toBooleanArray(); 15451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 15551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 15651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 15751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Create the object from the passed DER encoded value. 15851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 15951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param derVal the DerValue decoded from the stream. 16051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception IOException on decoding errors. 16151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 16251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public ReasonFlags(DerValue derVal) throws IOException { 16351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski this.bitString = derVal.getUnalignedBitString(true).toBooleanArray(); 16451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 16551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 16651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 16751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns the reason flags as a boolean array. 16851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 16951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public boolean[] getFlags() { 17051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return bitString; 17151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 17251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 17351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 17451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Set the attribute value. 17551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 17651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void set(String name, Object obj) throws IOException { 17751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (!(obj instanceof Boolean)) { 17851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski throw new IOException("Attribute must be of type Boolean."); 17951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 18051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski boolean val = ((Boolean)obj).booleanValue(); 18151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski set(name2Index(name), val); 18251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 18351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 18451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 18551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Get the attribute value. 18651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 18751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public Object get(String name) throws IOException { 18851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return Boolean.valueOf(isSet(name2Index(name))); 18951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 19051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 19151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 19251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Delete the attribute value. 19351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 19451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void delete(String name) throws IOException { 19551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski set(name, Boolean.FALSE); 19651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 19751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 19851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 19951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Returns a printable representation of the ReasonFlags. 20051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 20151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public String toString() { 20251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski String s = "Reason Flags [\n"; 20351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 20451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski try { 20551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (isSet(0)) s += " Unused\n"; 20651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (isSet(1)) s += " Key Compromise\n"; 20751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (isSet(2)) s += " CA Compromise\n"; 20851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (isSet(3)) s += " Affiliation_Changed\n"; 20951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (isSet(4)) s += " Superseded\n"; 21051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (isSet(5)) s += " Cessation Of Operation\n"; 21151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (isSet(6)) s += " Certificate Hold\n"; 21251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (isSet(7)) s += " Privilege Withdrawn\n"; 21351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski if (isSet(8)) s += " AA Compromise\n"; 21451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } catch (ArrayIndexOutOfBoundsException ex) {} 21551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 21651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski s += "]\n"; 21751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 21851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return (s); 21951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 22051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 22151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 22251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Write the extension to the DerOutputStream. 22351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * 22451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @param out the DerOutputStream to write the extension to. 22551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * @exception IOException on encoding errors. 22651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 22751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public void encode(DerOutputStream out) throws IOException { 22851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski out.putTruncatedUnalignedBitString(new BitArray(this.bitString)); 22951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 23051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski 23151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski /** 23251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * Return an enumeration of names of attributes existing within this 23351b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski * attribute. 23451b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski */ 23551b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski public Enumeration<String> getElements () { 23651b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski AttributeNameEnumeration elements = new AttributeNameEnumeration(); 23751b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski for( int i=0; i<NAMES.length; i++ ) { 23851b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski elements.addElement(NAMES[i]); 23951b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 24051b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski return (elements.elements()); 24151b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski } 24251b1b6997fd3f980076b8081f7f1165ccc2a4008Piotr Jastrzebski} 243