Como faço para usar uma chave privada em c #? “Não é possível encontrar o objeto solicitado.”

Estou tentando implementar autenticação para o MasterCard Match, como parte de sua documentação a seguir, eles têm uma chave privada de exemplo:

https://developer.mastercard.com/portal/display/api/OAuth+Validation

Nessa página, eles têm duas versões da chave, uma em texto codificado em base64, visível na página e um arquivo .p12 para download.

Como eu importo esta chave para usar como um x509certificate2?

O que quer que eu tente, recebo a mensagem "Não é possível encontrar o objeto solicitado".

Eu tentei cavar com a fonte .net, mas eu tenho um beco sem saída em um objeto importado

[SecurityCritical]
[MethodImpl(MethodImplOptions.InternalCall)]
internal static extern uint _QueryCertFileType(string fileName);

Eu tentei o seguinte, e todos eles falham com a mesma mensagem acima mencionada

new X509Certificate2(@"c:\test\mc-openapi-csr.pem")
new X509Certificate2(@"c:\test\mc-openapi-csr.pem", "mcapi")
new X509Certificate2(@"c:\test\mc-openapi-csr.pem", "mckp")

então eu copiei o bloco de texto para "copied.txt", e tentei usar esse arquivo, eu também tentei ler os bytes e passá-los manualmente, eu também tentei usar

X509Certificate.CreateFromCertFile(fileName)

com os dois arquivos.

Alguma ideia? O certificado é ruim? Eu estou usando a aula errada? O que essa mensagem de erro significa?

--Update-- Na sugestão do Bad Zombie, eu tentei o BouncyCastle:

    var pem = new Org.BouncyCastle.OpenSsl.PemReader(File.OpenText(fileName));
    RsaPrivateCrtKeyParameters rsaParameters = (RsaPrivateCrtKeyParameters)pem.ReadObject();
    using (var rsa = new RSACryptoServiceProvider())
    {
        rsa.ImportParameters(new RSAParameters
            {
                DP = rsaParameters.DP.ToByteArray(),
                DQ = rsaParameters.DQ.ToByteArray(),
                Exponent = rsaParameters.Exponent.ToByteArray(),
                InverseQ = rsaParameters.QInv.ToByteArray(),
                Modulus = rsaParameters.Modulus.ToByteArray(),
                P = rsaParameters.P.ToByteArray(),
                Q = rsaParameters.Q.ToByteArray(),
            });
    }

na chamada "ImportParameters", recebo "Bad Data". Estou fazendo algo errado?

questionAnswers(2)

yourAnswerToTheQuestion