BraintreeEncryption.Library.BouncyCastle.Asn1.Asn1InputStream.ReadObject C# (CSharp) Method

ReadObject() public method

public ReadObject ( ) : Asn1Object
return Asn1Object
        public Asn1Object ReadObject()
        {
            int tag = ReadByte();
            if (tag <= 0)
            {
                if (tag == 0)
                    throw new IOException("unexpected end-of-contents marker");

                return null;
            }

            //
            // calculate tag number
            //
            int tagNo = ReadTagNumber(this, tag);

            bool isConstructed = (tag & Asn1Tags.Constructed) != 0;

            //
            // calculate length
            //
            int length = ReadLength(this, limit);

            if (length < 0) // indefinite length method
            {
                if (!isConstructed)
                    throw new IOException("indefinite length primitive encoding encountered");

                IndefiniteLengthInputStream indIn = new IndefiniteLengthInputStream(this, limit);
                Asn1StreamParser sp = new Asn1StreamParser(indIn, limit);

                if ((tag & Asn1Tags.Application) != 0)
                {
                    return new BerApplicationSpecificParser(tagNo, sp).ToAsn1Object();
                }

                if ((tag & Asn1Tags.Tagged) != 0)
                {
                    return new BerTaggedObjectParser(true, tagNo, sp).ToAsn1Object();
                }

                // TODO There are other tags that may be constructed (e.g. BitString)
                switch (tagNo)
                {
                    case Asn1Tags.OctetString:
                        return new BerOctetStringParser(sp).ToAsn1Object();
                    case Asn1Tags.Sequence:
                        return new BerSequenceParser(sp).ToAsn1Object();
                    case Asn1Tags.Set:
                        return new BerSetParser(sp).ToAsn1Object();
                    case Asn1Tags.External:
                        return new DerExternalParser(sp).ToAsn1Object();
                    default:
                        throw new IOException("unknown BER object encountered");
                }
            }
            else
            {
                try
                {
                    return BuildObject(tag, tagNo, length);
                }
                catch (ArgumentException e)
                {
                    throw new Asn1Exception("corrupted stream detected", e);
                }
            }
        }

Usage Example

 private RsaKeyParameters GetRsaKeyParameters()
 {
     var decodedPublicKeyString = Convert.FromBase64String(_publicKeyString);
     var inputStream = new Asn1InputStream(decodedPublicKeyString);
     var derObject = inputStream.ReadObject();
     var keyStruct = RsaPublicKeyStructure.GetInstance(derObject);
     return new RsaKeyParameters(false, keyStruct.Modulus, keyStruct.PublicExponent);
 }
All Usage Examples Of BraintreeEncryption.Library.BouncyCastle.Asn1.Asn1InputStream::ReadObject