blob: 15af812fe24f9ba670b1146b7819d7b9afd82532 [file] [log] [blame]
package org.bouncycastle.asn1.tsp;
import java.util.Enumeration;
import org.bouncycastle.asn1.ASN1EncodableVector;
import org.bouncycastle.asn1.ASN1Object;
import org.bouncycastle.asn1.ASN1Primitive;
import org.bouncycastle.asn1.ASN1Sequence;
import org.bouncycastle.asn1.DERSequence;
/**
* Implementation of ArchiveTimeStampSequence type, as defined in RFC4998.
* <p>
* An ArchiveTimeStampSequence corresponds to a SEQUENCE OF ArchiveTimeStampChains and has the
* following ASN.1 Syntax:
* <p>
* ArchiveTimeStampSequence ::= SEQUENCE OF ArchiveTimeStampChain
*/
public class ArchiveTimeStampSequence
extends ASN1Object
{
private ASN1Sequence archiveTimeStampChains;
/**
* Return an ArchiveTimestampSequence from the given object.
*
* @param obj the object we want converted.
* @return an ArchiveTimeStampSequence instance, or null.
* @throws IllegalArgumentException if the object cannot be converted.
*/
public static ArchiveTimeStampSequence getInstance(final Object obj)
{
if (obj instanceof ArchiveTimeStampChain)
{
return (ArchiveTimeStampSequence)obj;
}
else if (obj != null)
{
return new ArchiveTimeStampSequence(ASN1Sequence.getInstance(obj));
}
return null;
}
private ArchiveTimeStampSequence(final ASN1Sequence sequence)
throws IllegalArgumentException
{
final ASN1EncodableVector vector = new ASN1EncodableVector();
Enumeration objects = sequence.getObjects();
while (objects.hasMoreElements())
{
vector.add(ArchiveTimeStampChain.getInstance(objects.nextElement()));
}
this.archiveTimeStampChains = new DERSequence(vector);
}
public ArchiveTimeStampSequence(ArchiveTimeStampChain archiveTimeStampChain)
{
this.archiveTimeStampChains = new DERSequence(archiveTimeStampChain);
}
public ArchiveTimeStampSequence(ArchiveTimeStampChain[] archiveTimeStampChains)
{
this.archiveTimeStampChains = new DERSequence(archiveTimeStampChains);
}
/**
* Returns the sequence of ArchiveTimeStamp chains that compose the ArchiveTimeStamp sequence.
*
* @return the {@link ASN1Sequence} containing the ArchiveTimeStamp chains.
*/
public ArchiveTimeStampChain[] getArchiveTimeStampChains()
{
ArchiveTimeStampChain[] rv = new ArchiveTimeStampChain[archiveTimeStampChains.size()];
for (int i = 0; i != rv.length; i++)
{
rv[i] = ArchiveTimeStampChain.getInstance(archiveTimeStampChains.getObjectAt(i));
}
return rv;
}
public int size()
{
return archiveTimeStampChains.size();
}
/**
* Adds an {@link ArchiveTimeStampChain} to the ArchiveTimeStamp sequence.
*
* @param chain the {@link ArchiveTimeStampChain} to add
* @return returns the modified sequence.
*/
public ArchiveTimeStampSequence append(ArchiveTimeStampChain chain) {
ASN1EncodableVector v = new ASN1EncodableVector();
for (int i = 0; i != archiveTimeStampChains.size(); i++)
{
v.add(archiveTimeStampChains.getObjectAt(i));
}
v.add(chain);
return new ArchiveTimeStampSequence(new DERSequence(v));
}
public ASN1Primitive toASN1Primitive()
{
return archiveTimeStampChains;
}
}