| /* |
| * Licensed to the Apache Software Foundation (ASF) under one or more |
| * contributor license agreements. See the NOTICE file distributed with |
| * this work for additional information regarding copyright ownership. |
| * The ASF licenses this file to You under the Apache License, Version 2.0 |
| * (the "License"); you may not use this file except in compliance with |
| * the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.harmony.security.x509; |
| |
| import java.io.IOException; |
| import org.apache.harmony.security.asn1.ASN1Boolean; |
| import org.apache.harmony.security.asn1.ASN1Explicit; |
| import org.apache.harmony.security.asn1.ASN1Implicit; |
| import org.apache.harmony.security.asn1.ASN1Sequence; |
| import org.apache.harmony.security.asn1.ASN1Type; |
| import org.apache.harmony.security.asn1.BerInputStream; |
| |
| /** |
| * CRL's Issuing Distribution Point Extension (OID = 2.5.29.28). |
| * <pre> |
| * id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 } |
| * |
| * issuingDistributionPoint ::= SEQUENCE { |
| * distributionPoint [0] DistributionPointName OPTIONAL, |
| * onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE, |
| * onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE, |
| * onlySomeReasons [3] ReasonFlags OPTIONAL, |
| * indirectCRL [4] BOOLEAN DEFAULT FALSE, |
| * onlyContainsAttributeCerts [5] BOOLEAN DEFAULT FALSE |
| * } |
| * </pre> |
| * (as specified in RFC 3280 http://www.ietf.org/rfc/rfc3280.txt) |
| */ |
| public final class IssuingDistributionPoint extends ExtensionValue { |
| // values of the fields of the structure |
| private DistributionPointName distributionPoint; |
| private boolean onlyContainsUserCerts = false; |
| private boolean onlyContainsCACerts = false; |
| private ReasonFlags onlySomeReasons; |
| private boolean indirectCRL = false; |
| private boolean onlyContainsAttributeCerts = false; |
| |
| /** |
| * Constructs the object on the base of its distributionPoint and |
| * onlySomeReasons fields values. |
| */ |
| public IssuingDistributionPoint(DistributionPointName distributionPoint, |
| ReasonFlags onlySomeReasons) { |
| this.distributionPoint = distributionPoint; |
| this.onlySomeReasons = onlySomeReasons; |
| } |
| |
| /** |
| * Creates the extension object on the base of its encoded form. |
| */ |
| public static IssuingDistributionPoint decode(byte[] encoding) |
| throws IOException { |
| IssuingDistributionPoint idp = |
| (IssuingDistributionPoint) ASN1.decode(encoding); |
| idp.encoding = encoding; |
| return idp; |
| } |
| |
| /** |
| * Sets the value of onlyContainsUserCerts field of the structure. |
| */ |
| public void setOnlyContainsUserCerts(boolean onlyContainsUserCerts) { |
| this.onlyContainsUserCerts = onlyContainsUserCerts; |
| } |
| |
| /** |
| * Sets the value of onlyContainsCACerts field of the structure. |
| */ |
| public void setOnlyContainsCACerts(boolean onlyContainsCACerts) { |
| this.onlyContainsCACerts = onlyContainsCACerts; |
| } |
| |
| /** |
| * Sets the value of indirectCRL field of the structure. |
| */ |
| public void setIndirectCRL(boolean indirectCRL) { |
| this.indirectCRL = indirectCRL; |
| } |
| |
| /** |
| * Sets the value of onlyContainsAttributeCerts field of the structure. |
| */ |
| public void setOnlyContainsAttributeCerts( |
| boolean onlyContainsAttributeCerts) { |
| this.onlyContainsAttributeCerts = onlyContainsAttributeCerts; |
| } |
| |
| @Override public byte[] getEncoded() { |
| if (encoding == null) { |
| encoding = ASN1.encode(this); |
| } |
| return encoding; |
| } |
| |
| @Override public void dumpValue(StringBuilder sb, String prefix) { |
| sb.append(prefix).append("Issuing Distribution Point: [\n"); |
| if (distributionPoint != null) { |
| distributionPoint.dumpValue(sb, " " + prefix); |
| } |
| sb.append(prefix).append(" onlyContainsUserCerts: ").append(onlyContainsUserCerts).append('\n'); |
| sb.append(prefix).append(" onlyContainsCACerts: ").append(onlyContainsCACerts).append('\n'); |
| if (onlySomeReasons != null) { |
| onlySomeReasons.dumpValue(sb, prefix + " "); |
| } |
| sb.append(prefix).append(" indirectCRL: ").append(indirectCRL).append('\n'); |
| sb.append(prefix).append(" onlyContainsAttributeCerts: ").append(onlyContainsAttributeCerts).append('\n'); |
| } |
| |
| /** |
| * ASN.1 Encoder/Decoder. |
| */ |
| public static final ASN1Type ASN1 = new ASN1Sequence( |
| new ASN1Type[] { |
| // ASN.1 prohibits implicitly tagged CHOICE |
| new ASN1Explicit(0, DistributionPointName.ASN1), |
| new ASN1Implicit(1, ASN1Boolean.getInstance()), |
| new ASN1Implicit(2, ASN1Boolean.getInstance()), |
| new ASN1Implicit(3, ReasonFlags.ASN1), |
| new ASN1Implicit(4, ASN1Boolean.getInstance()), |
| new ASN1Implicit(5, ASN1Boolean.getInstance()) |
| }) { |
| { |
| setOptional(0); |
| setOptional(3); |
| setDefault(Boolean.FALSE, 1); |
| setDefault(Boolean.FALSE, 2); |
| setDefault(Boolean.FALSE, 4); |
| setDefault(Boolean.FALSE, 5); |
| } |
| |
| protected Object getDecodedObject(BerInputStream in) { |
| Object[] values = (Object[]) in.content; |
| IssuingDistributionPoint idp = new IssuingDistributionPoint( |
| (DistributionPointName) values[0], (ReasonFlags) values[3]); |
| idp.encoding = in.getEncoded(); |
| if (values[1] != null) { |
| idp.setOnlyContainsUserCerts((Boolean) values[1]); |
| } |
| if (values[2] != null) { |
| idp.setOnlyContainsCACerts((Boolean) values[2]); |
| } |
| if (values[4] != null) { |
| idp.setIndirectCRL((Boolean) values[4]); |
| } |
| if (values[5] != null) { |
| idp.setOnlyContainsAttributeCerts((Boolean) values[5]); |
| } |
| return idp; |
| } |
| |
| protected void getValues(Object object, Object[] values) { |
| IssuingDistributionPoint idp = (IssuingDistributionPoint) object; |
| values[0] = idp.distributionPoint; |
| values[1] = (idp.onlyContainsUserCerts) ? Boolean.TRUE : null; |
| values[2] = (idp.onlyContainsCACerts) ? Boolean.TRUE : null; |
| values[3] = idp.onlySomeReasons; |
| values[4] = (idp.indirectCRL) ? Boolean.TRUE : null; |
| values[5] = (idp.onlyContainsAttributeCerts) ? Boolean.TRUE : null; |
| } |
| }; |
| |
| } |