Descriptografar XML com certificado digital X509

Bom dia!

Estou tentando criar um algoritmo em C# para criptografar e descriptografar um arquivo para trocarmos informações com nossos clientes.

Eu consegui fazer a parte de criptografia, segue código:

using System;
using System.IO;
using System.Net;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.Text;
using System.Xml;

namespace X509_Test
{
class Cripto
{
static void Main(string[] args)
{
try
{
XmlDocument xmlDoc = new XmlDocument();

            using (WebClient client = new WebClient())
            {
                byte[] xmlBytes = client.DownloadData("After.xml");
                xmlDoc.LoadXml(Encoding.UTF8.GetString(xmlBytes));
            }

            string pfxPath = @"sistema-test-cert.pem";
            X509Certificate2 cert = new X509Certificate2(File.ReadAllBytes(pfxPath), "1234567890");

            if (cert == null)
                throw new CryptographicException("The X.509 certificate could not be found.");

            Encrypt(xmlDoc, "creditcard", cert);

            xmlDoc.Save("test.xml");

            Console.WriteLine("Encrypted XML:");
            Console.WriteLine();
            Console.WriteLine(xmlDoc.OuterXml);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

    public static void Encrypt(XmlDocument Doc, string ElementToEncrypt, X509Certificate2 Cert)
    {
        if (Doc == null)
            throw new ArgumentNullException("Doc");
        if (ElementToEncrypt == null)
            throw new ArgumentNullException("ElementToEncrypt");
        if (Cert == null)
            throw new ArgumentNullException("Cert");

        XmlElement elementToEncrypt = Doc.GetElementsByTagName(ElementToEncrypt)[0] as XmlElement;

        if (elementToEncrypt == null)
            throw new XmlException("The specified element was not found");

        EncryptedXml eXml = new EncryptedXml();
        EncryptedData edElement = eXml.Encrypt(elementToEncrypt, Cert);
        EncryptedXml.ReplaceElement(elementToEncrypt, edElement, false);
    }
}

}

Mas quando tento descriptografar, não estou conseguindo utilizar a chave privada. Segue código:

using System;
using System.IO;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.Xml;

namespace Descripto
{
class Program
{
static void Main(string[] args)
{
try
{
XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.PreserveWhitespace = true;
            xmlDoc.Load("test.xml");

            Decrypt(xmlDoc);

            xmlDoc.Save("test.xml");

            Console.WriteLine("Decrypted XML:");
            Console.WriteLine();
            Console.WriteLine(xmlDoc.OuterXml);
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }

    public static void Decrypt(XmlDocument Doc)
    {
        string pfxPath = @"sistema-test-cert.pfx";
        X509Certificate2 cert = new X509Certificate2(File.ReadAllBytes(pfxPath), "1234567890");

        EncryptedXml exml = new EncryptedXml(Doc);
        using (RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert.PrivateKey)
        {
            exml.DecryptDocument();
        }
    }
}

}

Consigo capturar a chave, mas não consigo utiliza-lá.