package org.bouncycastle.asn1; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStream; /** * A stream generator for DER SEQUENCEs */ public class DERSequenceGenerator extends DERGenerator { private final ByteArrayOutputStream _bOut = new ByteArrayOutputStream(); /** * Use the passed in stream as the target for the generator. * * @param out target stream * @throws IOException if the target stream cannot be written to. */ public DERSequenceGenerator( OutputStream out) throws IOException { super(out); } /** * Use the passed in stream as the target for the generator, writing out the header tag * for a tagged constructed SEQUENCE (possibly implicit). * * @param out target stream * @param tagNo the tag number to introduce * @param isExplicit true if this is an explicitly tagged object, false otherwise. * @throws IOException if the target stream cannot be written to. */ public DERSequenceGenerator( OutputStream out, int tagNo, boolean isExplicit) throws IOException { super(out, tagNo, isExplicit); } /** * Add an object to the SEQUENCE being generated. * * @param object an ASN.1 encodable object to add. * @throws IOException if the target stream cannot be written to or the object cannot be encoded. */ public void addObject( ASN1Encodable object) throws IOException { object.toASN1Primitive().encode(new DEROutputStream(_bOut)); } /** * Return the target stream for the SEQUENCE. * * @return the OutputStream the SEQUENCE is being written to. */ public OutputStream getRawOutputStream() { return _bOut; } /** * Close of the generator, writing out the SEQUENCE. * * @throws IOException if the target stream cannot be written. */ public void close() throws IOException { writeDEREncoded(BERTags.CONSTRUCTED | BERTags.SEQUENCE, _bOut.toByteArray()); } }