package org.bouncycastle.asn1.cms; import org.bouncycastle.asn1.ASN1EncodableVector; import org.bouncycastle.asn1.ASN1Object; import org.bouncycastle.asn1.ASN1Primitive; import org.bouncycastle.asn1.ASN1Sequence; import org.bouncycastle.asn1.ASN1TaggedObject; import org.bouncycastle.asn1.DERSequence; import org.bouncycastle.asn1.DERTaggedObject; /** * <a href="http://tools.ietf.org/html/rfc5940">RFC 5940</a>: * Additional Cryptographic Message Syntax (CMS) Revocation Information Choices. * <p> * <pre> * SCVPReqRes ::= SEQUENCE { * request [0] EXPLICIT ContentInfo OPTIONAL, * response ContentInfo } * </pre> */ public class SCVPReqRes extends ASN1Object { private final ContentInfo request; private final ContentInfo response; /** * Return a SCVPReqRes object from the given object. * <p> * Accepted inputs: * <ul> * <li> null → null * <li> {@link SCVPReqRes} object * <li> {@link org.bouncycastle.asn1.ASN1Sequence#getInstance(java.lang.Object) ASN1Sequence} input formats with SCVPReqRes structure inside * </ul> * * @param obj the object we want converted. * @exception IllegalArgumentException if the object cannot be converted. */ public static SCVPReqRes getInstance( Object obj) { if (obj instanceof SCVPReqRes) { return (SCVPReqRes)obj; } else if (obj != null) { return new SCVPReqRes(ASN1Sequence.getInstance(obj)); } return null; } private SCVPReqRes( ASN1Sequence seq) { if (seq.getObjectAt(0) instanceof ASN1TaggedObject) { this.request = ContentInfo.getInstance(ASN1TaggedObject.getInstance(seq.getObjectAt(0)), true); this.response = ContentInfo.getInstance(seq.getObjectAt(1)); } else { this.request = null; this.response = ContentInfo.getInstance(seq.getObjectAt(0)); } } public SCVPReqRes(ContentInfo response) { this.request = null; // use of this confuses earlier JDKs this.response = response; } public SCVPReqRes(ContentInfo request, ContentInfo response) { this.request = request; this.response = response; } public ContentInfo getRequest() { return request; } public ContentInfo getResponse() { return response; } /** * @return the ASN.1 primitive representation. */ public ASN1Primitive toASN1Primitive() { ASN1EncodableVector v = new ASN1EncodableVector(); if (request != null) { v.add(new DERTaggedObject(true, 0, request)); } v.add(response); return new DERSequence(v); } }