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}