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