Org.BouncyCastle.Asn1.Asn1InputStream.BuildObject C# (CSharp) Method

BuildObject() private method

private BuildObject ( int tag, int tagNo, int length ) : Asn1Object
tag int
tagNo int
length int
return Asn1Object
		private Asn1Object BuildObject(
			int	tag,
			int	tagNo,
			int	length)
		{
			bool isConstructed = (tag & Asn1Tags.Constructed) != 0;

			DefiniteLengthInputStream defIn = new DefiniteLengthInputStream(this.s, length);

			if ((tag & Asn1Tags.Application) != 0)
			{
				return new DerApplicationSpecific(isConstructed, tagNo, defIn.ToArray());
			}

			if ((tag & Asn1Tags.Tagged) != 0)
			{
				return new Asn1StreamParser(defIn).ReadTaggedObject(isConstructed, tagNo);
			}

			if (isConstructed)
			{
				// TODO There are other tags that may be constructed (e.g. BitString)
				switch (tagNo)
				{
					case Asn1Tags.OctetString:
						//
						// yes, people actually do this...
						//
						return new BerOctetString(BuildDerEncodableVector(defIn));
					case Asn1Tags.Sequence:
						return CreateDerSequence(defIn);
					case Asn1Tags.Set:
						return CreateDerSet(defIn);
					case Asn1Tags.External:
						return new DerExternal(BuildDerEncodableVector(defIn));                
					default:
						return new DerUnknownTag(true, tagNo, defIn.ToArray());
				}
			}

            return CreatePrimitiveDerObject(tagNo, defIn, tmpBuffers);
		}