CRLDistributionPoints.java revision f33eae7e84eb6d3b0f4e86b59605bb3de73009f3
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 Project/** 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @author Alexander Y. Kleymenov 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project* @version $Revision$ 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project*/ 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage org.apache.harmony.security.x509; 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException; 26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Iterator; 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Collection; 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.List; 29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1SequenceOf; 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.ASN1Type; 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.asn1.BerInputStream; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport org.apache.harmony.security.internal.nls.Messages; 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 36f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * The class encapsulates the ASN.1 DER encoding/decoding work 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * with the CRL Distribution Points which is the part of X.509 Certificate 38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (as specified in RFC 3280 - 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Internet X.509 Public Key Infrastructure. 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Certificate and Certificate Revocation List (CRL) Profile. 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.ietf.org/rfc/rfc3280.txt): 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <pre> 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * CRLDistributionPoints ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DistributionPoint ::= SEQUENCE { 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributionPoint [0] DistributionPointName OPTIONAL, 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * reasons [1] ReasonFlags OPTIONAL, 49f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * cRLIssuer [2] GeneralNames OPTIONAL 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * DistributionPointName ::= CHOICE { 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * fullName [0] GeneralNames, 54f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * nameRelativeToCRLIssuer [1] RelativeDistinguishedName 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * ReasonFlags ::= BIT STRING { 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * unused (0), 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * keyCompromise (1), 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * cACompromise (2), 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * affiliationChanged (3), 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * superseded (4), 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * cessationOfOperation (5), 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * certificateHold (6), 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * privilegeWithdrawn (7), 66f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes * aACompromise (8) 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * } 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * </pre> 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class CRLDistributionPoints extends ExtensionValue { 71f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private List distributionPoints; 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private byte[] encoding; 74f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public CRLDistributionPoints(List distributionPoints) { 76f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if ((distributionPoints == null) 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || (distributionPoints.size() == 0)) { 78f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes throw new IllegalArgumentException(Messages.getString("security.17D")); 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.distributionPoints = distributionPoints; 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public CRLDistributionPoints(List distributionPoints, byte[] encoding) { 84f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes if ((distributionPoints == null) 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project || (distributionPoints.size() == 0)) { 86f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes throw new IllegalArgumentException(Messages.getString("security.17D")); 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.distributionPoints = distributionPoints; 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project this.encoding = encoding; 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public byte[] getEncoded() { 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (encoding == null) { 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project encoding = ASN1.encode(this); 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return encoding; 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 99f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static CRLDistributionPoints decode(byte[] encoding) 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throws IOException { 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CRLDistributionPoints cdp = (CRLDistributionPoints) ASN1.decode(encoding); 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return cdp; 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Places the string representation of extension value 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * into the StringBuffer object. 108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public void dumpValue(StringBuffer buffer, String prefix) { 110f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes buffer.append(prefix).append("CRL Distribution Points: [\n"); 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int number = 0; 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (Iterator it=distributionPoints.iterator(); 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project it.hasNext();) { 114f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes buffer.append(prefix).append(" [").append(++number).append("]\n"); 115f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes ((DistributionPoint) it.next()).dumpValue(buffer, prefix + " "); 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes buffer.append(prefix).append("]\n"); 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 119f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Custom X.509 decoder. 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 123f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes public static final ASN1Type ASN1 = 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project new ASN1SequenceOf(DistributionPoint.ASN1) { 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object getDecodedObject(BerInputStream in) { 127f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return new CRLDistributionPoints((List)in.content, 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project in.getEncoded()); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Collection getValues(Object object) { 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project CRLDistributionPoints dps = (CRLDistributionPoints) object; 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return dps.distributionPoints; 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project }; 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 138