1c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrompackage org.bouncycastle.asn1;
2c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
3c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport java.io.IOException;
4c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
5c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrompublic class DERExternalParser
64c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    implements ASN1Encodable, InMemoryRepresentable
7c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom{
8c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    private ASN1StreamParser _parser;
9c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
10c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    /**
11c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     *
12c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom     */
13c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    public DERExternalParser(ASN1StreamParser parser)
14c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
15c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        this._parser = parser;
16c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
17c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
184c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Encodable readObject()
19c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        throws IOException
20c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
21c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        return _parser.readObject();
22c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
236e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom
244c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive getLoadedObject()
256e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        throws IOException
266e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    {
276e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        try
286e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
296e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            return new DERExternal(_parser.readVector());
306e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        catch (IllegalArgumentException e)
326e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        {
336e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            throw new ASN1Exception(e.getMessage(), e);
346e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom        }
356e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom    }
36c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom
374c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom    public ASN1Primitive toASN1Primitive()
38c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    {
39c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        try
40c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        {
416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom            return getLoadedObject();
42c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        }
43c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        catch (IOException ioe)
44c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        {
45c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom            throw new ASN1ParsingException("unable to get DER object", ioe);
46c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        }
47c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        catch (IllegalArgumentException ioe)
48c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        {
49c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom            throw new ASN1ParsingException("unable to get DER object", ioe);
50c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom        }
51c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom    }
52c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom}
53