blob: d7b77b85539afab419de091d51ee089585cd56ee [file] [log] [blame]
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;
/**
* <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;
}
}