com.ibm.security12.sun.security.util
Class DerOutputStream

java.lang.Object
  |
  +--java.io.OutputStream
        |
        +--java.io.ByteArrayOutputStream
              |
              +--com.ibm.security12.sun.security.util.DerOutputStream

public class DerOutputStream
extends ByteArrayOutputStream
implements DerEncoder

Output stream marshaling DER-encoded data. This is eventually provided in the form of a byte array; there is no advance limit on the size of that byte array.

At this time, this class supports only a subset of the types of DER data encodings which are defined. That subset is sufficient for generating most X.509 certificates.

Version:
1.34
Author:
David Brownell, Amit Kapoor, Hemma Prafullchandra

Fields inherited from class java.io.ByteArrayOutputStream
buf, count
 
Constructor Summary
DerOutputStream()
          Construct an DER output stream.
DerOutputStream(int size)
          Construct an DER output stream.
 
Method Summary
 void derEncode(OutputStream out)
          Write the current contents of this DerOutputStream to an OutputStream.
 void putBitString(byte[] bits)
          Marshals a DER bit string on the output stream.
 void putBoolean(boolean val)
          Marshals a DER boolean on the output stream.
 void putDerValue(DerValue val)
          Marshals pre-encoded DER value onto the output stream.
 void putEnumerated(BigInt i)
          Marshals a DER enumerated on the output stream.
 void putGeneralizedTime(Date d)
          Marshals a DER Generalized Time/date value.
 void putIA5String(String s)
          Marshals a string which is consists of IA5(ASCII) characters
 void putInteger(BigInt i)
          Marshals a DER unsigned integer on the output stream.
 void putLength(int len)
          Put the encoding of the length in the stream.
 void putNull()
          Marshals a DER "null" value on the output stream.
 void putOctetString(byte[] octets)
          DER-encodes an ASN.1 OCTET STRING value on the output stream.
 void putOID(ObjectIdentifier oid)
          Marshals an object identifier (OID) on the output stream.
 void putOrderedSet(byte tag, DerEncoder[] set)
          Marshals the contents of a set on the output stream.
 void putOrderedSetOf(byte tag, DerEncoder[] set)
          Marshals the contents of a set on the output stream.
 void putPrintableString(String s)
          XXX what character set is this?
 void putSequence(DerValue[] seq)
          Marshals a sequence on the output stream.
 void putSet(DerValue[] set)
          Marshals the contents of a set on the output stream without ordering the elements.
 void putTag(byte tagClass, boolean form, byte val)
          Put the tag of the attribute in the stream.
 void putUnalignedBitString(BitArray ba)
          Marshals a DER bit string on the output stream.
 void putUTCTime(Date d)
          Marshals a DER UTC time/date value.
 void write(byte tag, byte[] buf)
          Writes tagged, pre-marshaled data.
 void write(byte tag, DerOutputStream out)
          Writes tagged data using buffer-to-buffer copy.
 void writeImplicit(byte tag, DerOutputStream value)
          Writes implicitly tagged data using buffer-to-buffer copy.
 
Methods inherited from class java.io.ByteArrayOutputStream
close, reset, size, toByteArray, toString, toString, toString, write, write, writeTo
 
Methods inherited from class java.io.OutputStream
flush, write
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

DerOutputStream

public DerOutputStream(int size)
Construct an DER output stream.
Parameters:
size - how large a buffer to preallocate.

DerOutputStream

public DerOutputStream()
Construct an DER output stream.
Method Detail

write

public void write(byte tag,
                  byte[] buf)
           throws IOException
Writes tagged, pre-marshaled data. This calcuates and encodes the length, so that the output data is the standard triple of { tag, length, data } used by all DER values.
Parameters:
tag - the DER value tag for the data, such as DerValue.tag_Sequence
buf - buffered data, which must be DER-encoded

write

public void write(byte tag,
                  DerOutputStream out)
           throws IOException
Writes tagged data using buffer-to-buffer copy. As above, this writes a standard DER record. This is often used when efficiently encapsulating values in sequences.
Parameters:
tag - the DER value tag for the data, such as DerValue.tag_Sequence
out - buffered data

writeImplicit

public void writeImplicit(byte tag,
                          DerOutputStream value)
                   throws IOException
Writes implicitly tagged data using buffer-to-buffer copy. As above, this writes a standard DER record. This is often used when efficiently encapsulating implicitly tagged values.
Parameters:
tag - the DER value of the context-specific tag that replaces original tag of the value in the output, such as in
            [N] IMPLICIT 
 
For example, FooLength [1] IMPLICIT INTEGER, with value=4; would be encoded as "81 01 04" whereas in explicit tagging it would be encoded as "A1 03 02 01 04". Notice that the tag is A1 and not 81, this is because with explicit tagging the form is always constructed.
value - original value being implicitly tagged

putDerValue

public void putDerValue(DerValue val)
                 throws IOException
Marshals pre-encoded DER value onto the output stream.

putBoolean

public void putBoolean(boolean val)
                throws IOException
Marshals a DER boolean on the output stream.

putInteger

public void putInteger(BigInt i)
                throws IOException
Marshals a DER unsigned integer on the output stream.

putEnumerated

public void putEnumerated(BigInt i)
                   throws IOException
Marshals a DER enumerated on the output stream.

putBitString

public void putBitString(byte[] bits)
                  throws IOException
Marshals a DER bit string on the output stream. The bit string must be byte-aligned.
Parameters:
bits - the bit string, MSB first

putUnalignedBitString

public void putUnalignedBitString(BitArray ba)
                           throws IOException
Marshals a DER bit string on the output stream. The bit strings need not be byte-aligned.
Parameters:
bits - the bit string, MSB first

putOctetString

public void putOctetString(byte[] octets)
                    throws IOException
DER-encodes an ASN.1 OCTET STRING value on the output stream.
Parameters:
octets - the octet string

putNull

public void putNull()
             throws IOException
Marshals a DER "null" value on the output stream. These are often used to indicate optional values which have been omitted.

putOID

public void putOID(ObjectIdentifier oid)
            throws IOException
Marshals an object identifier (OID) on the output stream. Corresponds to the ASN.1 "OBJECT IDENTIFIER" construct.

putSequence

public void putSequence(DerValue[] seq)
                 throws IOException
Marshals a sequence on the output stream. This supports both the ASN.1 "SEQUENCE" (zero to N values) and "SEQUENCE OF" (one to N values) constructs.

putSet

public void putSet(DerValue[] set)
            throws IOException
Marshals the contents of a set on the output stream without ordering the elements. Ok for BER encoding, but not for DER encoding. For DER encoding, use orderedPutSet() or orderedPutSetOf().

putOrderedSetOf

public void putOrderedSetOf(byte tag,
                            DerEncoder[] set)
                     throws IOException
Marshals the contents of a set on the output stream. Sets are semantically unordered, but DER requires that encodings of set elements be sorted into ascending lexicographical order before being output. Hence sets with the same tags and elements have the same DER encoding. This method supports the ASN.1 "SET OF" construct, but not "SET", which uses a different order.

putOrderedSet

public void putOrderedSet(byte tag,
                          DerEncoder[] set)
                   throws IOException
Marshals the contents of a set on the output stream. Sets are semantically unordered, but DER requires that encodings of set elements be sorted into ascending tag order before being output. Hence sets with the same tags and elements have the same DER encoding. This method supports the ASN.1 "SET" construct, but not "SET OF", which uses a different order.

putPrintableString

public void putPrintableString(String s)
                        throws IOException
XXX what character set is this?

putIA5String

public void putIA5String(String s)
                  throws IOException
Marshals a string which is consists of IA5(ASCII) characters

putUTCTime

public void putUTCTime(Date d)
                throws IOException
Marshals a DER UTC time/date value.

YYMMDDhhmmss{Z|+hhmm|-hhmm} ... emits only using Zulu time and with seconds (even if seconds=0) as per IETF-PKIX partI.


putGeneralizedTime

public void putGeneralizedTime(Date d)
                        throws IOException
Marshals a DER Generalized Time/date value.

YYYYMMDDhhmmss{Z|+hhmm|-hhmm} ... emits only using Zulu time and with seconds (even if seconds=0) as per IETF-PKIX partI.


putLength

public void putLength(int len)
               throws IOException
Put the encoding of the length in the stream.
Throws:
IOException - on writing errors.

putTag

public void putTag(byte tagClass,
                   boolean form,
                   byte val)
Put the tag of the attribute in the stream.

derEncode

public void derEncode(OutputStream out)
               throws IOException
Write the current contents of this DerOutputStream to an OutputStream.
Specified by:
derEncode in interface DerEncoder
Throws:
IOException - on output error.