Esempio n. 1
0
        private static RSACryptoServiceProvider DecodeRSAPrivateKey(byte[] privkey)
        {
            RSACryptoServiceProvider rSACryptoServiceProvider;
            BinaryReader             binaryReader = new BinaryReader(new MemoryStream(privkey));
            ushort num = 0;

            try
            {
                try
                {
                    num = binaryReader.ReadUInt16();
                    if (num == 33072)
                    {
                        binaryReader.ReadByte();
                    }
                    else if (num != 33328)
                    {
                        rSACryptoServiceProvider = null;
                        return(rSACryptoServiceProvider);
                    }
                    else
                    {
                        binaryReader.ReadInt16();
                    }
                    num = binaryReader.ReadUInt16();
                    if (num != 258)
                    {
                        rSACryptoServiceProvider = null;
                    }
                    else if (binaryReader.ReadByte() == 0)
                    {
                        byte[] numArray  = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader));
                        byte[] numArray1 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader));
                        byte[] numArray2 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader));
                        byte[] numArray3 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader));
                        byte[] numArray4 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader));
                        byte[] numArray5 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader));
                        byte[] numArray6 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader));
                        byte[] numArray7 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader));
                        RSACryptoServiceProvider rSACryptoServiceProvider1 = new RSACryptoServiceProvider();
                        RSAParameters            rSAParameter = new RSAParameters()
                        {
                            Modulus  = numArray,
                            Exponent = numArray1,
                            D        = numArray2,
                            P        = numArray3,
                            Q        = numArray4,
                            DP       = numArray5,
                            DQ       = numArray6,
                            InverseQ = numArray7
                        };
                        rSACryptoServiceProvider1.ImportParameters(rSAParameter);
                        rSACryptoServiceProvider = rSACryptoServiceProvider1;
                    }
                    else
                    {
                        rSACryptoServiceProvider = null;
                    }
                }
                catch (Exception exception)
                {
                    rSACryptoServiceProvider = null;
                }
            }
            finally
            {
                binaryReader.Close();
            }
            return(rSACryptoServiceProvider);
        }
Esempio n. 2
0
        private static RSACryptoServiceProvider DecodeRSAPrivateKey(byte[] privkey)
        {
            MemoryStream             input        = new MemoryStream(privkey);
            BinaryReader             binaryReader = new BinaryReader(input);
            RSACryptoServiceProvider result;

            try
            {
                ushort num = binaryReader.ReadUInt16();
                if (num == 33072)
                {
                    binaryReader.ReadByte();
                }
                else
                {
                    if (num != 33328)
                    {
                        result = null;
                        return(result);
                    }
                    binaryReader.ReadInt16();
                }
                num = binaryReader.ReadUInt16();
                if (num != 258)
                {
                    result = null;
                }
                else
                {
                    byte b = binaryReader.ReadByte();
                    if (b != 0)
                    {
                        result = null;
                    }
                    else
                    {
                        int    integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader);
                        byte[] modulus     = binaryReader.ReadBytes(integerSize);
                        integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader);
                        byte[] exponent = binaryReader.ReadBytes(integerSize);
                        integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader);
                        byte[] d = binaryReader.ReadBytes(integerSize);
                        integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader);
                        byte[] p = binaryReader.ReadBytes(integerSize);
                        integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader);
                        byte[] q = binaryReader.ReadBytes(integerSize);
                        integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader);
                        byte[] dP = binaryReader.ReadBytes(integerSize);
                        integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader);
                        byte[] dQ = binaryReader.ReadBytes(integerSize);
                        integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader);
                        byte[] inverseQ = binaryReader.ReadBytes(integerSize);
                        RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider();
                        rSACryptoServiceProvider.ImportParameters(new RSAParameters
                        {
                            Modulus  = modulus,
                            Exponent = exponent,
                            D        = d,
                            P        = p,
                            Q        = q,
                            DP       = dP,
                            DQ       = dQ,
                            InverseQ = inverseQ
                        });
                        result = rSACryptoServiceProvider;
                    }
                }
            }
            catch (Exception)
            {
                result = null;
            }
            finally
            {
                binaryReader.Close();
            }
            return(result);
        }