All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.bouncycastle.asn1.cmp.CMPCertificate Maven / Gradle / Ivy

Go to download

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.

There is a newer version: 1.70
Show 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(); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy