package org.bouncycastle.asn1.dvcs;

import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1Set;
import org.bouncycastle.asn1.ASN1TaggedObject;
import org.bouncycastle.asn1.DERSequence;
import org.bouncycastle.asn1.DERTaggedObject;
import org.bouncycastle.asn1.cmp.PKIStatusInfo;
import org.bouncycastle.asn1.x509.DigestInfo;
import org.bouncycastle.asn1.x509.Extensions;
import org.bouncycastle.asn1.x509.PolicyInformation;

    DVCSCertInfo::= SEQUENCE  {
        version             Integer DEFAULT 1 ,
        dvReqInfo           DVCSRequestInformation,
        messageImprint      DigestInfo,
        serialNumber        Integer,
        responseTime        DVCSTime,
        dvStatus            [0] PKIStatusInfo OPTIONAL,
        policy              [1] PolicyInformation OPTIONAL,
        reqSignature        [2] SignerInfos  OPTIONAL,
        certs               [3] SEQUENCE SIZE (1..MAX) OF
                                TargetEtcChain OPTIONAL,
        extensions          Extensions OPTIONAL
    }
/** * <pre> * DVCSCertInfo::= SEQUENCE { * version Integer DEFAULT 1 , * dvReqInfo DVCSRequestInformation, * messageImprint DigestInfo, * serialNumber Integer, * responseTime DVCSTime, * dvStatus [0] PKIStatusInfo OPTIONAL, * policy [1] PolicyInformation OPTIONAL, * reqSignature [2] SignerInfos OPTIONAL, * certs [3] SEQUENCE SIZE (1..MAX) OF * TargetEtcChain OPTIONAL, * extensions Extensions OPTIONAL * } * </pre> */
public class DVCSCertInfo extends ASN1Object { private int version = DEFAULT_VERSION; private DVCSRequestInformation dvReqInfo; private DigestInfo messageImprint; private ASN1Integer serialNumber; private DVCSTime responseTime; private PKIStatusInfo dvStatus; private PolicyInformation policy; private ASN1Set reqSignature; private ASN1Sequence certs; private Extensions extensions; private static final int DEFAULT_VERSION = 1; private static final int TAG_DV_STATUS = 0; private static final int TAG_POLICY = 1; private static final int TAG_REQ_SIGNATURE = 2; private static final int TAG_CERTS = 3; public DVCSCertInfo( DVCSRequestInformation dvReqInfo, DigestInfo messageImprint, ASN1Integer serialNumber, DVCSTime responseTime) { this.dvReqInfo = dvReqInfo; this.messageImprint = messageImprint; this.serialNumber = serialNumber; this.responseTime = responseTime; } private DVCSCertInfo(ASN1Sequence seq) { int i = 0; ASN1Encodable x = seq.getObjectAt(i++); try { ASN1Integer encVersion = ASN1Integer.getInstance(x); this.version = encVersion.getValue().intValue(); x = seq.getObjectAt(i++); } catch (IllegalArgumentException e) { } this.dvReqInfo = DVCSRequestInformation.getInstance(x); x = seq.getObjectAt(i++); this.messageImprint = DigestInfo.getInstance(x); x = seq.getObjectAt(i++); this.serialNumber = ASN1Integer.getInstance(x); x = seq.getObjectAt(i++); this.responseTime = DVCSTime.getInstance(x); while (i < seq.size()) { x = seq.getObjectAt(i++); if (x instanceof ASN1TaggedObject) { ASN1TaggedObject t = ASN1TaggedObject.getInstance(x); int tagNo = t.getTagNo(); switch (tagNo) { case TAG_DV_STATUS: this.dvStatus = PKIStatusInfo.getInstance(t, false); break; case TAG_POLICY: this.policy = PolicyInformation.getInstance(ASN1Sequence.getInstance(t, false)); break; case TAG_REQ_SIGNATURE: this.reqSignature = ASN1Set.getInstance(t, false); break; case TAG_CERTS: this.certs = ASN1Sequence.getInstance(t, false); break; default: throw new IllegalArgumentException("Unknown tag encountered: " + tagNo); } continue; } try { this.extensions = Extensions.getInstance(x); } catch (IllegalArgumentException e) { } } } public static DVCSCertInfo getInstance(Object obj) { if (obj instanceof DVCSCertInfo) { return (DVCSCertInfo)obj; } else if (obj != null) { return new DVCSCertInfo(ASN1Sequence.getInstance(obj)); } return null; } public static DVCSCertInfo getInstance( ASN1TaggedObject obj, boolean explicit) { return getInstance(ASN1Sequence.getInstance(obj, explicit)); } public ASN1Primitive toASN1Primitive() { ASN1EncodableVector v = new ASN1EncodableVector(); if (version != DEFAULT_VERSION) { v.add(new ASN1Integer(version)); } v.add(dvReqInfo); v.add(messageImprint); v.add(serialNumber); v.add(responseTime); if (dvStatus != null) { v.add(new DERTaggedObject(false, TAG_DV_STATUS, dvStatus)); } if (policy != null) { v.add(new DERTaggedObject(false, TAG_POLICY, policy)); } if (reqSignature != null) { v.add(new DERTaggedObject(false, TAG_REQ_SIGNATURE, reqSignature)); } if (certs != null) { v.add(new DERTaggedObject(false, TAG_CERTS, certs)); } if (extensions != null) { v.add(extensions); } return new DERSequence(v); } public String toString() { StringBuffer s = new StringBuffer(); s.append("DVCSCertInfo {\n"); if (version != DEFAULT_VERSION) { s.append("version: " + version + "\n"); } s.append("dvReqInfo: " + dvReqInfo + "\n"); s.append("messageImprint: " + messageImprint + "\n"); s.append("serialNumber: " + serialNumber + "\n"); s.append("responseTime: " + responseTime + "\n"); if (dvStatus != null) { s.append("dvStatus: " + dvStatus + "\n"); } if (policy != null) { s.append("policy: " + policy + "\n"); } if (reqSignature != null) { s.append("reqSignature: " + reqSignature + "\n"); } if (certs != null) { s.append("certs: " + certs + "\n"); } if (extensions != null) { s.append("extensions: " + extensions + "\n"); } s.append("}\n"); return s.toString(); } public int getVersion() { return version; } private void setVersion(int version) { this.version = version; } public DVCSRequestInformation getDvReqInfo() { return dvReqInfo; } private void setDvReqInfo(DVCSRequestInformation dvReqInfo) { this.dvReqInfo = dvReqInfo; } public DigestInfo getMessageImprint() { return messageImprint; } private void setMessageImprint(DigestInfo messageImprint) { this.messageImprint = messageImprint; } public ASN1Integer getSerialNumber() { return serialNumber; } public DVCSTime getResponseTime() { return responseTime; } public PKIStatusInfo getDvStatus() { return dvStatus; } public PolicyInformation getPolicy() { return policy; } public ASN1Set getReqSignature() { return reqSignature; } public TargetEtcChain[] getCerts() { if (certs != null) { return TargetEtcChain.arrayFromSequence(certs); } return null; } public Extensions getExtensions() { return extensions; } }