org.bouncycastle.asn1.cmp.CMPCertificate Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bcutil-jdk15on Show documentation
Show all versions of bcutil-jdk15on Show documentation
The Bouncy Castle Java APIs for ASN.1 extension and utility APIs used to support bcpkix and bctls. This jar contains APIs for JDK 1.5 and up.
The newest version!
package org.bouncycastle.asn1.cmp;
import java.io.IOException;
import org.bouncycastle.asn1.ASN1Choice;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.DERTaggedObject;
import org.bouncycastle.asn1.x509.AttributeCertificate;
import org.bouncycastle.asn1.x509.Certificate;
public class CMPCertificate
extends ASN1Object
implements ASN1Choice
{
private Certificate x509v3PKCert;
private int otherTagValue;
private ASN1Object otherCert;
/**
* Note: the addition of attribute certificates is a BC extension. If you use this constructor they
* will be added with a tag value of 1.
* @deprecated use (type. otherCert) constructor
*/
public CMPCertificate(AttributeCertificate x509v2AttrCert)
{
this(1, x509v2AttrCert);
}
/**
* Note: the addition of other certificates is a BC extension. If you use this constructor they
* will be added with an explicit tag value of type.
*
* @param type the type of the certificate (used as a tag value).
* @param otherCert the object representing the certificate
*/
public CMPCertificate(int type, ASN1Object otherCert)
{
this.otherTagValue = type;
this.otherCert = otherCert;
}
public CMPCertificate(Certificate x509v3PKCert)
{
if (x509v3PKCert.getVersionNumber() != 3)
{
throw new IllegalArgumentException("only version 3 certificates allowed");
}
this.x509v3PKCert = x509v3PKCert;
}
public static CMPCertificate getInstance(Object o)
{
if (o == null || o instanceof CMPCertificate)
{
return (CMPCertificate)o;
}
if (o instanceof byte[])
{
try
{
o = ASN1Primitive.fromByteArray((byte[])o);
}
catch (IOException e)
{
throw new IllegalArgumentException("Invalid encoding in CMPCertificate");
}
}
if (o instanceof ASN1Sequence)
{
return new CMPCertificate(Certificate.getInstance(o));
}
if (o instanceof ASN1TaggedObject)
{
ASN1TaggedObject taggedObject = (ASN1TaggedObject)o;
return new CMPCertificate(taggedObject.getTagNo(), taggedObject.getObject());
}
throw new IllegalArgumentException("Invalid object: " + o.getClass().getName());
}
public boolean isX509v3PKCert()
{
return x509v3PKCert != null;
}
public Certificate getX509v3PKCert()
{
return x509v3PKCert;
}
/**
* Return an AttributeCertificate interpretation of otherCert.
* @deprecated use getOtherCert and getOtherTag to make sure message is really what it should be.
*
* @return an AttributeCertificate
*/
public AttributeCertificate getX509v2AttrCert()
{
return AttributeCertificate.getInstance(otherCert);
}
public int getOtherCertTag()
{
return otherTagValue;
}
public ASN1Object getOtherCert()
{
return otherCert;
}
/**
*
* CMPCertificate ::= CHOICE {
* x509v3PKCert Certificate
* otherCert [tag] EXPLICIT ANY DEFINED BY tag
* }
*
* Note: the addition of the explicit tagging is a BC extension. We apologise for the warped syntax, but hopefully you get the idea.
*
* @return a basic ASN.1 object representation.
*/
public ASN1Primitive toASN1Primitive()
{
if (otherCert != null)
{ // explicit following CMP conventions
return new DERTaggedObject(true, otherTagValue, otherCert);
}
return x509v3PKCert.toASN1Primitive();
}
}