116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropackage org.bouncycastle.asn1;
216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.io.IOException;
416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.io.OutputStream;
516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
64caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro/**
74caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro * A class which writes indefinite and definite length objects,
84caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro */
916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropublic class BEROutputStream
1016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    extends DEROutputStream
1116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro{
124caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro    /**
134caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro     * Base constructor.
144caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro     *
154caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro     * @param os target output stream.
164caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro     */
1716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    public BEROutputStream(
1816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        OutputStream    os)
1916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
2016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        super(os);
2116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
2216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro
234caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro    /**
244caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro     * Write out an ASN.1 object.
254caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro     *
264caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro     * @param obj the object to be encoded.
274caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro     * @throws IOException if there is an issue on encoding or output of the object.
284caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro     */
2916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    public void writeObject(
3016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        Object    obj)
3116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        throws IOException
3216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    {
3316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        if (obj == null)
3416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        {
3516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro            writeNull();
3616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        }
3716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        else if (obj instanceof ASN1Primitive)
3816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        {
3916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro            ((ASN1Primitive)obj).encode(this);
4016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        }
4116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        else if (obj instanceof ASN1Encodable)
4216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        {
4316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro            ((ASN1Encodable)obj).toASN1Primitive().encode(this);
4416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        }
4516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        else
4616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        {
4716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro            throw new IOException("object not BEREncodable");
4816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro        }
4916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro    }
5016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro}
51