001package org.apache.commons.ssl.org.bouncycastle.asn1;
002
003import java.io.IOException;
004
005public class BERTaggedObjectParser
006    implements ASN1TaggedObjectParser
007{
008    private boolean _constructed;
009    private int _tagNumber;
010    private ASN1StreamParser _parser;
011
012    BERTaggedObjectParser(
013        boolean             constructed,
014        int                 tagNumber,
015        ASN1StreamParser    parser)
016    {
017        _constructed = constructed;
018        _tagNumber = tagNumber;
019        _parser = parser;
020    }
021
022    public boolean isConstructed()
023    {
024        return _constructed;
025    }
026
027    public int getTagNo()
028    {
029        return _tagNumber;
030    }
031
032    public ASN1Encodable getObjectParser(
033        int     tag,
034        boolean isExplicit)
035        throws IOException
036    {
037        if (isExplicit)
038        {
039            if (!_constructed)
040            {
041                throw new IOException("Explicit tags must be constructed (see X.690 8.14.2)");
042            }
043            return _parser.readObject();
044        }
045
046        return _parser.readImplicit(_constructed, tag);
047    }
048
049    public ASN1Primitive getLoadedObject()
050        throws IOException
051    {
052        return _parser.readTaggedObject(_constructed, _tagNumber);
053    }
054
055    public ASN1Primitive toASN1Primitive()
056    {
057        try
058        {
059            return this.getLoadedObject();
060        }
061        catch (IOException e)
062        {
063            throw new ASN1ParsingException(e.getMessage());
064        }
065    }
066}