Builderdash.LoadFromPemFileClass.LoadFromPemFile C# (CSharp) Method

LoadFromPemFile() public static method

public static LoadFromPemFile ( this x, string pemFile ) : X509Certificate2
x this
pemFile string
return System.Security.Cryptography.X509Certificates.X509Certificate2
        public static X509Certificate2 LoadFromPemFile(this X509Certificate2 x, string pemFile)
        {
            int i;
            string[] certFileContents = File.ReadAllLines(pemFile);
            bool certFound = false;
            bool keyFound = false;
            string certData = "";
            string keyData = "";
            byte[] certBytes = null;
            byte[] keyBytes = null;

            for (i = 0; i < certFileContents.Length; i++)
            {
                var line = certFileContents[i].Trim();

                if (String.Equals(line, "-----BEGIN CERTIFICATE-----"))
                {
                    certFound = false;
                    for (i++; i < certFileContents.Length && !certFound; i++)
                    {
                        if (!String.Equals(certFileContents[i].Trim(),
                            "-----END CERTIFICATE-----"))
                            certData += certFileContents[i];
                        else certFound = true;
                    }
                    certBytes = Convert.FromBase64String(certData.Trim());
                    continue;
                }
                if (String.Equals(line, "-----BEGIN RSA PRIVATE KEY-----"))
                {
                    keyFound = false;
                    for (i++; i < certFileContents.Length && !keyFound; i++)
                    {
                        if (!String.Equals(certFileContents[i].Trim(),
                            "-----END RSA PRIVATE KEY-----"))
                            keyData += certFileContents[i];
                        else keyFound = true;
                    }
                    keyBytes = Convert.FromBase64String(keyData.Trim());
                    continue;
                }
            }

            //            var certBytes = Convert.FromBase64String(File.ReadAllText(@"D:\projects\openssl\openssl-bin\xxx_certonly.pem").Trim());
            //            var keyBytes = Convert.FromBase64String(File.ReadAllText(@"D:\projects\openssl\openssl-bin\xxx_keyonly.pem").Trim());

            if (!keyFound || !certFound)
                throw new Exception("The PEM file did not contain a valid certificate and private key.");

            RSACryptoServiceProvider crypto = DecodeRsaPrivateKey(keyBytes);
            if (crypto == null)
                throw new Exception("Unable to parse the private key in the PEM file.");

            x.Import(certBytes);
            x.PrivateKey = crypto;

            return x;
        }