blob: a92a6229b8b5bc386b0a76ff3fad78f51ad805e8 [file] [log] [blame]
/*
* 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 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;
}
/**
* Returns value of distributionPoint field of the structure.
*/
public DistributionPointName getDistributionPoint() {
return distributionPoint;
}
/**
* Returns value of onlyContainsUserCerts field of the structure.
*/
public boolean getOnlyContainsUserCerts() {
return onlyContainsUserCerts;
}
/**
* Returns value of onlyContainsCACerts field of the structure.
*/
public boolean getOnlyContainsCACerts() {
return onlyContainsCACerts;
}
/**
* Returns value of onlySomeReasons field of the structure.
*/
public ReasonFlags getOnlySomeReasons() {
return onlySomeReasons;
}
/**
* Returns value of indirectCRL field of the structure.
*/
public boolean getIndirectCRL() {
return indirectCRL;
}
/**
* Returns value of onlyContainsAttributeCerts field of the structure.
*/
public boolean getOnlyContainsAttributeCerts() {
return onlyContainsAttributeCerts;
}
/**
* Returns ASN.1 encoded form of this X.509 IssuingDistributionPoint value.
* @return a byte array containing ASN.1 encoded form.
*/
public byte[] getEncoded() {
if (encoding == null) {
encoding = ASN1.encode(this);
}
return encoding;
}
/**
* Places the string representation of extension value
* into the StringBuffer object.
*/
public void dumpValue(StringBuffer buffer, String prefix) {
buffer.append(prefix).append("Issuing Distribution Point: [\n");
if (distributionPoint != null) {
distributionPoint.dumpValue(buffer, " " + prefix);
}
buffer.append(prefix).append(" onlyContainsUserCerts: ")
.append(onlyContainsUserCerts).append('\n');
buffer.append(prefix).append(" onlyContainsCACerts: ")
.append(onlyContainsCACerts).append('\n');
if (onlySomeReasons != null) {
onlySomeReasons.dumpValue(buffer, prefix + " ");
}
buffer.append(prefix).append(" indirectCRL: ")
.append(indirectCRL).append('\n');
buffer.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]).booleanValue());
}
if (values[2] != null) {
idp.setOnlyContainsCACerts(
((Boolean) values[2]).booleanValue());
}
if (values[4] != null) {
idp.setIndirectCRL(
((Boolean) values[4]).booleanValue());
}
if (values[5] != null) {
idp.setOnlyContainsAttributeCerts(
((Boolean) values[5]).booleanValue());
}
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;
}
};
}