1c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrompackage org.bouncycastle.asn1; 2c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 3c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstromimport java.io.IOException; 4c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 5c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrompublic class BERTaggedObjectParser 6c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom implements ASN1TaggedObjectParser 7c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom{ 86e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private boolean _constructed; 9c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom private int _tagNumber; 106e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom private ASN1StreamParser _parser; 11c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 126e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom BERTaggedObjectParser( 136e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom boolean constructed, 146e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom int tagNumber, 156e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom ASN1StreamParser parser) 166e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 176e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom _constructed = constructed; 18c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom _tagNumber = tagNumber; 196e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom _parser = parser; 20c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 21c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 22c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public boolean isConstructed() 23c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 246e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return _constructed; 25c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 26c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 27c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom public int getTagNo() 28c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 29c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom return _tagNumber; 30c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 316e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom 324c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Encodable getObjectParser( 33c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom int tag, 34c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom boolean isExplicit) 35c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom throws IOException 36c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 37c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom if (isExplicit) 38c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 396e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom if (!_constructed) 406e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom { 416e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom throw new IOException("Explicit tags must be constructed (see X.690 8.14.2)"); 426e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom } 436e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return _parser.readObject(); 44c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 45c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 466e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return _parser.readImplicit(_constructed, tag); 47c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 48c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 494c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Primitive getLoadedObject() 506e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom throws IOException 51c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 526e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return _parser.readTaggedObject(_constructed, _tagNumber); 53c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 54c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom 554c111300c39cb2e27f07fc2ae3b00e23ed4443b2Brian Carlstrom public ASN1Primitive toASN1Primitive() 56c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 57c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom try 58c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 596e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom return this.getLoadedObject(); 60c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 61c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom catch (IOException e) 62c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom { 636e736056d64d0e33b26cf9f7c4e351b496241fdeBrian Carlstrom throw new ASN1ParsingException(e.getMessage()); 64c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 65c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom } 66c37f4a04ef89e73a39a59f3c5a179af8c8ab5974Brian Carlstrom} 67