public RsaPkcs8Util(Encoding dataEncoding, string publicKey, string privateKey = null, int keySize = 2048) { if (string.IsNullOrEmpty(privateKey) && string.IsNullOrEmpty(publicKey)) { throw new Exception("Public and private keys must not be empty at the same time"); } if (!string.IsNullOrEmpty(privateKey)) { PrivateRsa = RSA.Create(); PrivateRsa.KeySize = keySize; var priRsap = CreateRsapFromPrivateKey(privateKey); PrivateRsa.ImportParameters(priRsap); if (string.IsNullOrEmpty(publicKey)) { PublicRsa = RSA.Create(); PublicRsa.KeySize = keySize; var pubRsap = new RSAParameters { Modulus = priRsap.Modulus, Exponent = priRsap.Exponent }; PublicRsa.ImportParameters(pubRsap); } } if (!string.IsNullOrEmpty(publicKey)) { PublicRsa = RSA.Create(); PublicRsa.KeySize = keySize; var pubRsap = CreateRsapFromPublicKey(publicKey); PublicRsa.ImportParameters(pubRsap); } DataEncoding = dataEncoding ?? Encoding.UTF8; }