X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fbouncycastle%2Fasn1%2FDERConstructedSequence.java;fp=src%2Forg%2Fbouncycastle%2Fasn1%2FDERConstructedSequence.java;h=d600d95fee401822db72b6ae2ebe048d0991194f;hb=e5e9355b4f4e0e2c8de9068a71c1e3cc26fa9905;hp=0000000000000000000000000000000000000000;hpb=f35445729371789b3d496f426d7f87542f8e1a45;p=org.ibex.core.git diff --git a/src/org/bouncycastle/asn1/DERConstructedSequence.java b/src/org/bouncycastle/asn1/DERConstructedSequence.java new file mode 100644 index 0000000..d600d95 --- /dev/null +++ b/src/org/bouncycastle/asn1/DERConstructedSequence.java @@ -0,0 +1,77 @@ +package org.bouncycastle.asn1; + +import java.io.*; +import java.util.*; + +public class DERConstructedSequence + extends DERObject +{ + private Vector seq = new Vector(); + + public DERConstructedSequence() + { + } + + public void addObject( + DEREncodable obj) + { + seq.addElement(obj); + } + + public Enumeration getObjects() + { + return seq.elements(); + } + + /** + * return the object at the sequence postion indicated by index. + * + * @param the sequence number (starting at zero) of the object + * @return the object at the sequence postion indicated by index. + */ + public Object getObjectAt( + int index) + { + return seq.elementAt(index); + } + + /** + * return the number of objects in this sequence. + * + * @return the number of objects in this sequence. + */ + public int getSize() + { + return seq.size(); + } + + /* + * A note on the implementation: + *

+ * As DER requires the constructed, definite-length model to + * be used for structured types, this varies slightly from the + * ASN.1 descriptions given. Rather than just outputing SEQUENCE, + * we also have to specify CONSTRUCTED, and the objects length. + */ + void encode( + DEROutputStream out) + throws IOException + { + ByteArrayOutputStream bOut = new ByteArrayOutputStream(); + DEROutputStream dOut = new DEROutputStream(bOut); + Enumeration e = getObjects(); + + while (e.hasMoreElements()) + { + Object obj = e.nextElement(); + + dOut.writeObject(obj); + } + + dOut.close(); + + byte[] bytes = bOut.toByteArray(); + + out.writeEncoded(SEQUENCE | CONSTRUCTED, bytes); + } +}