Pdelvo.Minecraft.Network.AsnKeyParser.ParseDSAPublicKey C# (CSharp) Method

ParseDSAPublicKey() private method

private ParseDSAPublicKey ( ) : DSAParameters
return System.Security.Cryptography.DSAParameters
        internal DSAParameters ParseDSAPublicKey()
        {
            var parameters = new DSAParameters ();

            // Current value
            byte[] value = null;

            // Current Position
            int position = parser.CurrentPosition ();
            // Sanity Checks
            int length = 0;

            // Ignore Sequence - PublicKeyInfo
            length = parser.NextSequence ();
            if (length != parser.RemainingBytes ())
            {
                var sb = new StringBuilder("Incorrect Sequence Size. ");
                sb.AppendFormat("Specified: {0}, Remaining: {1}",
                                length.ToString(CultureInfo.InvariantCulture),
                                parser.RemainingBytes ().ToString(CultureInfo.InvariantCulture));
                throw new BerDecodeException(sb.ToString (), position);
            }

            // Checkpoint
            position = parser.CurrentPosition ();

            // Ignore Sequence - AlgorithmIdentifier
            length = parser.NextSequence ();
            if (length > parser.RemainingBytes ())
            {
                var sb = new StringBuilder("Incorrect AlgorithmIdentifier Size. ");
                sb.AppendFormat("Specified: {0}, Remaining: {1}",
                                length.ToString(CultureInfo.InvariantCulture),
                                parser.RemainingBytes ().ToString(CultureInfo.InvariantCulture));
                throw new BerDecodeException(sb.ToString (), position);
            }

            // Checkpoint
            position = parser.CurrentPosition ();

            // Grab the OID
            value = parser.NextOID ();
            byte[] oid = {0x2a, 0x86, 0x48, 0xce, 0x38, 0x04, 0x01};
            if (!EqualOid(value, oid))
            {
                throw new BerDecodeException("Expected OID 1.2.840.10040.4.1", position);
            }


            // Checkpoint
            position = parser.CurrentPosition ();

            // Ignore Sequence - DSS-Params
            length = parser.NextSequence ();
            if (length > parser.RemainingBytes ())
            {
                var sb = new StringBuilder("Incorrect DSS-Params Size. ");
                sb.AppendFormat("Specified: {0}, Remaining: {1}",
                                length.ToString(CultureInfo.InvariantCulture),
                                parser.RemainingBytes ().ToString(CultureInfo.InvariantCulture));
                throw new BerDecodeException(sb.ToString (), position);
            }

            // Next three are curve parameters
            parameters.P = TrimLeadingZero(parser.NextInteger ());
            parameters.Q = TrimLeadingZero(parser.NextInteger ());
            parameters.G = TrimLeadingZero(parser.NextInteger ());

            // Ignore BitString - PrivateKey
            parser.NextBitString ();

            // Public Key
            parameters.Y = TrimLeadingZero(parser.NextInteger ());

            Debug.Assert(0 == parser.RemainingBytes ());

            return parameters;
        }