blob: f53e00fa7bbe68ac7db4cc0df708bdbcc045b993 [file] [log] [blame]
package org.bouncycastle.asn1.cms;
import java.io.IOException;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Integer;
import org.bouncycastle.asn1.ASN1OctetStringParser;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.ASN1SequenceParser;
import org.bouncycastle.asn1.BERSequence;
import org.bouncycastle.asn1.DERIA5String;
/**
* Parser for <a href="http://tools.ietf.org/html/rfc5544">RFC 5544</a>:
* {@link TimeStampedData} object.
* <p>
* <pre>
* TimeStampedData ::= SEQUENCE {
* version INTEGER { v1(1) },
* dataUri IA5String OPTIONAL,
* metaData MetaData OPTIONAL,
* content OCTET STRING OPTIONAL,
* temporalEvidence Evidence
* }
* </pre>
*/
public class TimeStampedDataParser
{
private ASN1Integer version;
private DERIA5String dataUri;
private MetaData metaData;
private ASN1OctetStringParser content;
private Evidence temporalEvidence;
private ASN1SequenceParser parser;
private TimeStampedDataParser(ASN1SequenceParser parser)
throws IOException
{
this.parser = parser;
this.version = ASN1Integer.getInstance(parser.readObject());
ASN1Encodable obj = parser.readObject();
if (obj instanceof DERIA5String)
{
this.dataUri = DERIA5String.getInstance(obj);
obj = parser.readObject();
}
if (obj instanceof MetaData || obj instanceof ASN1SequenceParser)
{
this.metaData = MetaData.getInstance(obj.toASN1Primitive());
obj = parser.readObject();
}
if (obj instanceof ASN1OctetStringParser)
{
this.content = (ASN1OctetStringParser)obj;
}
}
public static TimeStampedDataParser getInstance(Object obj)
throws IOException
{
if (obj instanceof ASN1Sequence)
{
return new TimeStampedDataParser(((ASN1Sequence)obj).parser());
}
if (obj instanceof ASN1SequenceParser)
{
return new TimeStampedDataParser((ASN1SequenceParser)obj);
}
return null;
}
public DERIA5String getDataUri()
{
return dataUri;
}
public MetaData getMetaData()
{
return metaData;
}
public ASN1OctetStringParser getContent()
{
return content;
}
public Evidence getTemporalEvidence()
throws IOException
{
if (temporalEvidence == null)
{
temporalEvidence = Evidence.getInstance(parser.readObject().toASN1Primitive());
}
return temporalEvidence;
}
/**
* <pre>
* TimeStampedData ::= SEQUENCE {
* version INTEGER { v1(1) },
* dataUri IA5String OPTIONAL,
* metaData MetaData OPTIONAL,
* content OCTET STRING OPTIONAL,
* temporalEvidence Evidence
* }
* </pre>
* @return
* @deprecated will be removed
*/
public ASN1Primitive toASN1Primitive()
{
ASN1EncodableVector v = new ASN1EncodableVector();
v.add(version);
if (dataUri != null)
{
v.add(dataUri);
}
if (metaData != null)
{
v.add(metaData);
}
if (content != null)
{
v.add(content);
}
v.add(temporalEvidence);
return new BERSequence(v);
}
}