public IAsn1Convertible GetObjectParser(
int tag,
bool isExplicit)
{
if (isExplicit)
{
return new Asn1StreamParser(_contentStream).ReadObject();
}
switch (tag)
{
case Asn1Tags.Set:
if (_indefiniteLength)
{
return new BerSetParser(new Asn1StreamParser(_contentStream));
}
else
{
return new DerSetParser(new Asn1StreamParser(_contentStream));
}
case Asn1Tags.Sequence:
if (_indefiniteLength)
{
return new BerSequenceParser(new Asn1StreamParser(_contentStream));
}
else
{
return new DerSequenceParser(new Asn1StreamParser(_contentStream));
}
case Asn1Tags.OctetString:
// TODO Is the handling of definite length constructed encodings correct?
if (_indefiniteLength || IsConstructed)
{
return new BerOctetStringParser(new Asn1StreamParser(_contentStream));
}
else
{
return new DerOctetStringParser((DefiniteLengthInputStream)_contentStream);
}
}
throw Platform.CreateNotImplementedException("implicit tagging");
}