116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropackage org.bouncycastle.asn1.ocsp;
216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Choice;
416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Encodable;
516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Object;
616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1Primitive;
716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.ASN1TaggedObject;
816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.DERNull;
916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.asn1.DERTaggedObject;
1016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
1116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropublic class CertStatus
1216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    extends ASN1Object
1316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    implements ASN1Choice
1416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro{
1516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    private int             tagNo;
164caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro    private ASN1Encodable   value;
1716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
1816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    /**
1916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * create a CertStatus object with a tag of zero.
2016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     */
2116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    public CertStatus()
2216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
2316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        tagNo = 0;
2416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        value = DERNull.INSTANCE;
2516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
2616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
2716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    public CertStatus(
2816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        RevokedInfo info)
2916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
3016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        tagNo = 1;
3116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        value = info;
3216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
3316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
3416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    public CertStatus(
3516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        int tagNo,
3616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        ASN1Encodable    value)
3716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
3816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        this.tagNo = tagNo;
3916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        this.value = value;
4016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
4116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
424caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro    private CertStatus(
4316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        ASN1TaggedObject    choice)
4416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
4516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        this.tagNo = choice.getTagNo();
4616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
4716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        switch (choice.getTagNo())
4816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        {
4916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        case 0:
5016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro            value = DERNull.INSTANCE;
5116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro            break;
5216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        case 1:
5316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro            value = RevokedInfo.getInstance(choice, false);
5416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro            break;
5516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        case 2:
5616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro            value = DERNull.INSTANCE;
574caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro            break;
584caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro        default:
594caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro            throw new IllegalArgumentException("Unknown tag encountered: " + choice.getTagNo());
6016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        }
6116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
6216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
6316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    public static CertStatus getInstance(
6416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        Object  obj)
6516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
6616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        if (obj == null || obj instanceof CertStatus)
6716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        {
6816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro            return (CertStatus)obj;
6916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        }
7016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        else if (obj instanceof ASN1TaggedObject)
7116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        {
7216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro            return new CertStatus((ASN1TaggedObject)obj);
7316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        }
7416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
7516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        throw new IllegalArgumentException("unknown object in factory: " + obj.getClass().getName());
7616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
7716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
7816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    public static CertStatus getInstance(
7916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        ASN1TaggedObject obj,
8016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        boolean          explicit)
8116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
8216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        return getInstance(obj.getObject()); // must be explicitly tagged
8316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
8416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
8516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    public int getTagNo()
8616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
8716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        return tagNo;
8816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
8916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
9016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    public ASN1Encodable getStatus()
9116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
9216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        return value;
9316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
9416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
9516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    /**
9616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * Produce an object suitable for an ASN1OutputStream.
9716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * <pre>
9816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     *  CertStatus ::= CHOICE {
9916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     *                  good        [0]     IMPLICIT NULL,
10016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     *                  revoked     [1]     IMPLICIT RevokedInfo,
10116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     *                  unknown     [2]     IMPLICIT UnknownInfo }
10216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     * </pre>
10316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro     */
10416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    public ASN1Primitive toASN1Primitive()
10516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
10616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        return new DERTaggedObject(false, tagNo, value);
10716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
10816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro}
109