116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropackage org.bouncycastle.asn1; 216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giroimport java.io.IOException; 416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 5bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro/** 6bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * Parser DER EXTERNAL tagged objects. 7bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro */ 816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giropublic class DERExternalParser 916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro implements ASN1Encodable, InMemoryRepresentable 1016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro{ 1116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro private ASN1StreamParser _parser; 1216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 1316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro /** 14bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * Base constructor. 15bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * 16bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * @param parser the underlying parser to read the DER EXTERNAL from. 1716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro */ 1816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public DERExternalParser(ASN1StreamParser parser) 1916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 2016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro this._parser = parser; 2116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 2216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 2316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ASN1Encodable readObject() 2416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro throws IOException 2516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 2616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return _parser.readObject(); 2716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 2816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro 29bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro /** 30bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * Return an in-memory, encodable, representation of the EXTERNAL object. 31bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * 32bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * @return a DERExternal. 33bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * @throws IOException if there is an issue loading the data. 34bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro */ 3516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ASN1Primitive getLoadedObject() 3616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro throws IOException 3716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 3816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro try 3916f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 4016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return new DERExternal(_parser.readVector()); 4116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 4216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro catch (IllegalArgumentException e) 4316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 4416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro throw new ASN1Exception(e.getMessage(), e); 4516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 4616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 47bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro 48bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro /** 49bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * Return an DERExternal representing this parser and its contents. 50bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * 51bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro * @return an DERExternal 52bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro */ 5316f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro public ASN1Primitive toASN1Primitive() 5416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 55bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro try 5616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 5716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro return getLoadedObject(); 5816f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 59bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro catch (IOException ioe) 6016f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 6116f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro throw new ASN1ParsingException("unable to get DER object", ioe); 6216f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 63bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro catch (IllegalArgumentException ioe) 6416f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro { 6516f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro throw new ASN1ParsingException("unable to get DER object", ioe); 6616f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 6716f9ee464b68937f45d009d9c1b0eb9b544a8deeSergio Giro } 68bdb7b3d37025690a0434040b4e0d0623d9fa74afSergio Giro}