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 org.apache.harmony.security.asn1.ASN1Enumerated; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Type; 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * CRL Entry's Reason Code Extension (OID = 2.5.29.21). 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * id-ce-cRLReason OBJECT IDENTIFIER ::= { id-ce 21 } 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * -- reasonCode ::= { CRLReason } 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * CRLReason ::= ENUMERATED { 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * unspecified (0), 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * keyCompromise (1), 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * cACompromise (2), 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * affiliationChanged (3), 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * superseded (4), 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * cessationOfOperation (5), 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * certificateHold (6), 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * removeFromCRL (8), 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * privilegeWithdrawn (9), 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * aACompromise (10) 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (as specified in RFC 3280 http://www.ietf.org/rfc/rfc3280.txt) 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 455c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilsonpublic final class ReasonCode extends ExtensionValue { 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // predefined reason code values 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final byte UNSPECIFIED = 0; 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final byte KEY_COMPROMISE = 1; 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final byte CA_COMPROMISE = 2; 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final byte AFFILIATION_CHANGED = 3; 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final byte SUPERSEDED = 4; 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final byte CESSATION_OF_OPERATION = 5; 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final byte CERTIFICATE_HOLD = 6; 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final byte REMOVE_FROM_CRL = 8; 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final byte PRIVILEGE_WITHDRAWN = 9; 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static final byte AA_COMPROMISE = 10; 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // the reason code value 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final byte code; 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public ReasonCode(byte[] encoding) throws IOException { 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project super(encoding); 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.code = ((byte[]) ASN1.decode(encoding))[0]; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 675c27fb80ffd335aa45dc8829ba3ecbc18c01e4e8Jesse Wilson @Override public byte[] getEncoded() { 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (encoding == null) { 69866e7ae17a3da81a02b0b144e0c9c2b3196d293aElliott Hughes encoding = ASN1.encode(new byte[] { code }); 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return encoding; 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 748216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes @Override public void dumpValue(StringBuilder sb, String prefix) { 758216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append(prefix).append("Reason Code: [ "); 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project switch (code) { 778216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes case UNSPECIFIED: 788216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append("unspecified"); 798216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes break; 808216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes case KEY_COMPROMISE: 818216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append("keyCompromise"); 828216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes break; 838216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes case CA_COMPROMISE: 848216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append("cACompromise"); 858216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes break; 868216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes case AFFILIATION_CHANGED: 878216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append("affiliationChanged"); 888216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes break; 898216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes case SUPERSEDED: 908216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append("superseded"); 918216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes break; 928216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes case CESSATION_OF_OPERATION: 938216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append("cessationOfOperation"); 948216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes break; 958216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes case CERTIFICATE_HOLD: 968216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append("certificateHold"); 978216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes break; 988216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes case REMOVE_FROM_CRL: 998216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append("removeFromCRL"); 1008216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes break; 1018216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes case PRIVILEGE_WITHDRAWN: 1028216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append("privilegeWithdrawn"); 1038216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes break; 1048216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes case AA_COMPROMISE: 1058216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append("aACompromise"); 1068216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes break; 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1088216dc1fd9d31867770439985c3d66570330e4c7Elliott Hughes sb.append(" ]\n"); 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ASN.1 Encoder/Decoder. 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1142f9e468ed4985edfd5e351faf2089d91e561e41dElliott Hughes public static final ASN1Type ASN1 = ASN1Enumerated.getInstance(); 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 116