| package org.bouncycastle.asn1; |
| |
| import java.io.IOException; |
| |
| /** |
| * Parser for indefinite-length tagged objects. |
| */ |
| public class BERTaggedObjectParser |
| implements ASN1TaggedObjectParser |
| { |
| private boolean _constructed; |
| private int _tagNumber; |
| private ASN1StreamParser _parser; |
| |
| BERTaggedObjectParser( |
| boolean constructed, |
| int tagNumber, |
| ASN1StreamParser parser) |
| { |
| _constructed = constructed; |
| _tagNumber = tagNumber; |
| _parser = parser; |
| } |
| |
| /** |
| * Return true if this tagged object is marked as constructed. |
| * |
| * @return true if constructed, false otherwise. |
| */ |
| public boolean isConstructed() |
| { |
| return _constructed; |
| } |
| |
| /** |
| * Return the tag number associated with this object. |
| * |
| * @return the tag number. |
| */ |
| public int getTagNo() |
| { |
| return _tagNumber; |
| } |
| |
| /** |
| * Return an object parser for the contents of this tagged object. |
| * |
| * @param tag the actual tag number of the object (needed if implicit). |
| * @param isExplicit true if the contained object was explicitly tagged, false if implicit. |
| * @return an ASN.1 encodable object parser. |
| * @throws IOException if there is an issue building the object parser from the stream. |
| */ |
| public ASN1Encodable getObjectParser( |
| int tag, |
| boolean isExplicit) |
| throws IOException |
| { |
| if (isExplicit) |
| { |
| if (!_constructed) |
| { |
| throw new IOException("Explicit tags must be constructed (see X.690 8.14.2)"); |
| } |
| return _parser.readObject(); |
| } |
| |
| return _parser.readImplicit(_constructed, tag); |
| } |
| |
| /** |
| * Return an in-memory, encodable, representation of the tagged object. |
| * |
| * @return an ASN1TaggedObject. |
| * @throws IOException if there is an issue loading the data. |
| */ |
| public ASN1Primitive getLoadedObject() |
| throws IOException |
| { |
| return _parser.readTaggedObject(_constructed, _tagNumber); |
| } |
| |
| /** |
| * Return an ASN1TaggedObject representing this parser and its contents. |
| * |
| * @return an ASN1TaggedObject |
| */ |
| public ASN1Primitive toASN1Primitive() |
| { |
| try |
| { |
| return this.getLoadedObject(); |
| } |
| catch (IOException e) |
| { |
| throw new ASN1ParsingException(e.getMessage()); |
| } |
| } |
| } |