private Asn1Object BuildObject(int tag, int tagNo, int length)
{
bool flag = (tag & 32) != 0;
DefiniteLengthInputStream definiteLengthInputStream = new DefiniteLengthInputStream(this.s, length);
if ((tag & 64) != 0)
{
return(new DerApplicationSpecific(flag, tagNo, definiteLengthInputStream.ToArray()));
}
if ((tag & 128) != 0)
{
return(new Asn1StreamParser(definiteLengthInputStream).ReadTaggedObject(flag, tagNo));
}
if (!flag)
{
return(Asn1InputStream.CreatePrimitiveDerObject(tagNo, definiteLengthInputStream, this.tmpBuffers));
}
if (tagNo == 4)
{
return(new BerOctetString(this.BuildDerEncodableVector(definiteLengthInputStream)));
}
if (tagNo == 8)
{
return(new DerExternal(this.BuildDerEncodableVector(definiteLengthInputStream)));
}
switch (tagNo)
{
case 16:
return(this.CreateDerSequence(definiteLengthInputStream));
case 17:
return(this.CreateDerSet(definiteLengthInputStream));
default:
throw new IOException("unknown tag " + tagNo + " encountered");
}
}