Пример #1
0
        private RSAParameters GetParametersOriginal()
        {
            using (ASNPrivateKeyParser parser = new ASNPrivateKeyParser(this.rawParameters))
            {
                RSAParameters result = new RSAParameters();

                if (!parser.IsNextTag(0x30))
                {
                    throw new InvalidKeyFileException();
                }

                parser.EnterNextContent();

                var versionBytes = parser.GetNext(3);
                if (versionBytes.SequenceEqual(new byte[] { 0x02, 0x01, 0x00 }) == false)
                {
                    throw new InvalidKeyFileException();
                }

                result.Modulus  = parser.GetNextContent();
                result.Exponent = parser.GetNextContent();
                result.D        = parser.GetNextContent();
                result.P        = parser.GetNextContent();
                result.Q        = parser.GetNextContent();
                result.DP       = parser.GetNextContent();
                result.DQ       = parser.GetNextContent();
                result.InverseQ = parser.GetNextContent();

                return(result);
            }
        }
Пример #2
0
        private RSAParameters GetParametersAlt()
        {
            using (ASNPrivateKeyParser parser = new ASNPrivateKeyParser(this.rawParameters))
            {
                RSAParameters result = new RSAParameters();

                // check for wrap sequence
                if (!parser.IsNextTag(0x30))
                {
                    throw new InvalidKeyFileException();
                }

                // enter sequence
                parser.EnterNextContent();

                // get version bytes
                var versionBytes = parser.GetNext(3);
                if (versionBytes.SequenceEqual(new byte[] { 0x02, 0x01, 0x00 }) == false)
                {
                    throw new InvalidKeyFileException();
                }

                // sequence with objectId
                if (!parser.IsNextTag(0x30))
                {
                    throw new InvalidKeyFileException();
                }

                parser.EnterNextContent();

                // check for objectId
                if (!parser.IsNextTag(0x06))
                {
                    throw new InvalidKeyFileException();
                }

                var objectIdentifier = parser.GetNextContent();
                if (objectIdentifier.SequenceEqual(new byte[] { 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01 }) == false)
                {
                    throw new InvalidKeyFileException();
                }

                var nullBytes = parser.GetNext(2);
                if (nullBytes[0] != 0x05 || nullBytes[1] != 0x0)
                {
                    throw new InvalidKeyFileException();
                }

                if (!parser.IsNextTag(0x04))
                {
                    throw new InvalidKeyFileException();
                }

                parser.EnterNextContent();

                // check for wrap sequence
                if (!parser.IsNextTag(0x30))
                {
                    throw new InvalidKeyFileException();
                }

                // enter sequence
                parser.EnterNextContent();

                var versionBytes2 = parser.GetNext(3);
                if (versionBytes2.SequenceEqual(new byte[] { 0x02, 0x01, 0x00 }) == false)
                {
                    throw new InvalidKeyFileException();
                }

                result.Modulus  = parser.GetNextContent();
                result.Exponent = parser.GetNextContent();
                result.D        = parser.GetNextContent();
                result.P        = parser.GetNextContent();
                result.Q        = parser.GetNextContent();
                result.DP       = parser.GetNextContent();
                result.DQ       = parser.GetNextContent();
                result.InverseQ = parser.GetNextContent();

                return(result);
            }
        }