Bouncy Castle Cryptography Library 1.85

org.bouncycastle.asn1
Class DLGenerator

java.lang.Object
  extended byorg.bouncycastle.asn1.ASN1Generator
      extended byorg.bouncycastle.asn1.DLGenerator
Direct Known Subclasses:
DLOctetStringGenerator, DLSequenceGenerator

public abstract class DLGenerator
extends ASN1Generator

Base class for stream generators for definite-length structures. Unlike the BER generators, which stream indefinite-length encodings, these write a definite-length header up front from a caller-supplied body length and so can stream DL (and, with suitably canonical contents, DER) encodings of structures too large to hold in memory — body lengths are , so content larger than a Java array can carry is supported.

The body length passed to a generator is a commitment: the matching number of content octets must subsequently be written. Subclasses verify this on close() and fail with an IOException on a mismatch, since a wrongly-sized body silently corrupts every enclosing length.


Field Summary
 
Fields inherited from class org.bouncycastle.asn1.ASN1Generator
_out
 
Constructor Summary
protected DLGenerator(java.io.OutputStream out)
           
protected DLGenerator(java.io.OutputStream out, int tagNo, boolean isExplicit)
           
 
Method Summary
static long getDLEncodingLength(long bodyLength)
          Return the total encoded length of a TLV with a single identifier octet (i.e. a tag number below 31) and content octets.
static int getLengthOctetCount(long bodyLength)
          Return the number of octets in the definite-length encoding of (the length octets only, excluding the identifier).
 java.io.OutputStream getRawOutputStream()
          Return the actual stream object encodings are written to.
protected  void writeDLHeader(int tag, long bodyLength)
          Write the definite-length header(s) for this generator's structure: the base tag with , preceded (for an explicit tag) by a context-specific wrapper whose length covers the complete base TLV.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

DLGenerator

protected DLGenerator(java.io.OutputStream out)

DLGenerator

protected DLGenerator(java.io.OutputStream out,
                      int tagNo,
                      boolean isExplicit)
Method Detail

getRawOutputStream

public java.io.OutputStream getRawOutputStream()
Description copied from class: ASN1Generator
Return the actual stream object encodings are written to.

Specified by:
getRawOutputStream in class ASN1Generator
Returns:
the stream that is directly encoded to.

getLengthOctetCount

public static int getLengthOctetCount(long bodyLength)
Return the number of octets in the definite-length encoding of (the length octets only, excluding the identifier).

Parameters:
bodyLength - number of content octets ()
Returns:
1 for the short form, 1 + number of length octets for the long form

getDLEncodingLength

public static long getDLEncodingLength(long bodyLength)
Return the total encoded length of a TLV with a single identifier octet (i.e. a tag number below 31) and content octets.

Parameters:
bodyLength - number of content octets ()

writeDLHeader

protected void writeDLHeader(int tag,
                             long bodyLength)
                      throws java.io.IOException
Write the definite-length header(s) for this generator's structure: the base tag with , preceded (for an explicit tag) by a context-specific wrapper whose length covers the complete base TLV. Tag numbers of 31 and above are supported for the context-specific wrapper of an implicitly tagged structure, but not for an explicit one (the wrapper length arithmetic assumes a single identifier octet).

Throws:
java.io.IOException

Bouncy Castle Cryptography Library 1.85