116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropackage org.bouncycastle.asn1; 216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.io.IOException; 416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.io.InputStream; 516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport org.bouncycastle.util.io.Streams; 716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 84caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro/** 94caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro * A parser for indefinite-length OCTET STRINGs. 104caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro */ 1116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropublic class BEROctetStringParser 1216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro implements ASN1OctetStringParser 1316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro{ 1416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private ASN1StreamParser _parser; 1516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 1616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro BEROctetStringParser( 1716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro ASN1StreamParser parser) 1816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 1916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro _parser = parser; 2016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 2116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 224caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro /** 234caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro * Return an InputStream representing the contents of the OCTET STRING. 244caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro * 254caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro * @return an InputStream with its source as the OCTET STRING content. 264caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro */ 2716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public InputStream getOctetStream() 2816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 2916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new ConstructedOctetStream(_parser); 3016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 3116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 324caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro /** 334caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro * Return an in-memory, encodable, representation of the OCTET STRING. 344caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro * 354caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro * @return a BEROctetString. 364caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro * @throws IOException if there is an issue loading the data. 374caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro */ 3816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ASN1Primitive getLoadedObject() 3916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro throws IOException 4016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 4116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new BEROctetString(Streams.readAll(getOctetStream())); 4216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 4316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 444caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro /** 454caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro * Return an BEROctetString representing this parser and its contents. 464caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro * 474caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro * @return an BEROctetString 484caba4cfca3316673ae4e330e8a47932bed8a53aSergio Giro */ 4916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ASN1Primitive toASN1Primitive() 5016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 5116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro try 5216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 5316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return getLoadedObject(); 5416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 5516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro catch (IOException e) 5616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 5716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro throw new ASN1ParsingException("IOException converting stream to byte array: " + e.getMessage(), e); 5816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 5916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 6016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro} 61