Bouncy Castle Cryptography Library 1.85

org.bouncycastle.asn1
Class DLSequenceGenerator

java.lang.Object
  extended byorg.bouncycastle.asn1.ASN1Generator
      extended byorg.bouncycastle.asn1.DLGenerator
          extended byorg.bouncycastle.asn1.DLSequenceGenerator

public class DLSequenceGenerator
extends DLGenerator

A stream generator for definite-length SEQUENCEs. The caller commits to the total length of the SEQUENCE body up front; the header is written immediately and the body then streams through getRawOutputStream() / addObject(ASN1Encodable). close() verifies the body came out at exactly the promised length and throws an IOException otherwise — by then the output is not usable, but every length mismatch is a caller arithmetic bug that must not pass silently.

Unlike DERSequenceGenerator nothing is buffered, so the body may exceed the size of a Java array; the trade-off is that the length has to be known before any content is produced.


Field Summary
 
Fields inherited from class org.bouncycastle.asn1.ASN1Generator
_out
 
Constructor Summary
DLSequenceGenerator(java.io.OutputStream out, int tagNo, boolean isExplicit, long bodyLength)
          Use the passed in stream as the target for the generator, writing out the header for a tagged definite-length constructed SEQUENCE (possibly implicit).
DLSequenceGenerator(java.io.OutputStream out, long bodyLength)
          Use the passed in stream as the target for the generator, writing out the header for a definite-length constructed SEQUENCE.
 
Method Summary
 void addObject(ASN1Encodable object)
          Add the DL encoding of the passed in object to the SEQUENCE body.
 void close()
          Verify the declared body length was written in full.
 java.io.OutputStream getRawOutputStream()
          Return the target stream for the SEQUENCE body.
 
Methods inherited from class org.bouncycastle.asn1.DLGenerator
getDLEncodingLength, getLengthOctetCount, writeDLHeader
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DLSequenceGenerator

public DLSequenceGenerator(java.io.OutputStream out,
                           long bodyLength)
                    throws java.io.IOException
Use the passed in stream as the target for the generator, writing out the header for a definite-length constructed SEQUENCE.

Parameters:
out - target stream
bodyLength - the exact number of content octets that will be written
Throws:
java.io.IOException - if the target stream cannot be written to.

DLSequenceGenerator

public DLSequenceGenerator(java.io.OutputStream out,
                           int tagNo,
                           boolean isExplicit,
                           long bodyLength)
                    throws java.io.IOException
Use the passed in stream as the target for the generator, writing out the header for a tagged definite-length constructed SEQUENCE (possibly implicit).

Parameters:
out - target stream
tagNo - the tag number to introduce
isExplicit - true if this is an explicitly tagged object, false otherwise.
bodyLength - the exact number of content octets that will be written
Throws:
java.io.IOException - if the target stream cannot be written to.
Method Detail

getRawOutputStream

public java.io.OutputStream getRawOutputStream()
Return the target stream for the SEQUENCE body. Writes are counted against the length declared at construction; writing past it fails immediately.

Overrides:
getRawOutputStream in class DLGenerator

addObject

public void addObject(ASN1Encodable object)
               throws java.io.IOException
Add the DL encoding of the passed in object to the SEQUENCE body.

Throws:
java.io.IOException

close

public void close()
           throws java.io.IOException
Verify the declared body length was written in full.

Throws:
java.io.IOException - if fewer content octets were written than declared.

Bouncy Castle Cryptography Library 1.85