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