public void TestGeneratedKeysAreNotEqual()
        {
            RSAParameters rSAParameters = RSAEncryptionService.GenerateKeys();

            RSAParameters rSAParameters2 = RSAEncryptionService.GenerateKeys();

            Assert.AreNotEqual(rSAParameters.Modulus, rSAParameters2.Modulus);
        }
        public void TestPrivateKeyReturnsFalseWhenPrivateKeyPresent()
        {
            RSAParameters privateAndPublicKey = RSAEncryptionService.GenerateKeys();

            RSAEncryptionService baseLineService = new RSAEncryptionService(privateAndPublicKey);

            Assert.True(baseLineService.PrivateKeyPresent());
        }
        public void TestPrivateKeyReturnsFalseWhenPrivateKeyNotPresent()
        {
            RSAParameters privateAndPublicKey = RSAEncryptionService.GenerateKeys();


            RSAParameters publicKey = new RSAParameters
            {
                Modulus  = privateAndPublicKey.Modulus,
                Exponent = privateAndPublicKey.Exponent
            };
            RSAEncryptionService baseLineService = new RSAEncryptionService(publicKey);

            Assert.False(baseLineService.PrivateKeyPresent());
        }
        public void TestDecryptingWithOnlyPublicKeyThrowsException()
        {
            RSAParameters privateAndPublicKey = RSAEncryptionService.GenerateKeys();

            RSAEncryptionService baseLineService = new RSAEncryptionService(privateAndPublicKey);
            string textToEncrypt = "Testing this encrypts";

            byte[] baselineEncrypted = baseLineService.Encrypt(Encoding.UTF8.GetBytes(textToEncrypt));

            RSAParameters publicKey = new RSAParameters
            {
                Modulus  = privateAndPublicKey.Modulus,
                Exponent = privateAndPublicKey.Exponent
            };
            RSAEncryptionService encryptionService = new RSAEncryptionService(publicKey);

            Assert.Throws <PrivateKeyNotPresentException>(() => encryptionService.Decrypt(baselineEncrypted));
        }
        public void TestCreatingRSAKeyCanBeSetInConstructor()
        {
            RSAParameters rSAParameters = RSAEncryptionService.GenerateKeys();

            RSAEncryptionService service = new RSAEncryptionService(rSAParameters);

            //Check Public key
            Assert.AreEqual(rSAParameters.Modulus, service.PublicKey.Modulus);
            Assert.AreEqual(rSAParameters.Exponent, service.PublicKey.Exponent);

            //Check Private Key
            Assert.AreEqual(rSAParameters.Modulus, service.PrivateKey.Modulus);
            Assert.AreEqual(rSAParameters.Exponent, service.PrivateKey.Exponent);
            Assert.AreEqual(rSAParameters.P, service.PrivateKey.P);
            Assert.AreEqual(rSAParameters.Q, service.PrivateKey.Q);
            Assert.AreEqual(rSAParameters.DP, service.PrivateKey.DP);
            Assert.AreEqual(rSAParameters.DQ, service.PrivateKey.DQ);
            Assert.AreEqual(rSAParameters.D, service.PrivateKey.D);
            Assert.AreEqual(rSAParameters.InverseQ, service.PrivateKey.InverseQ);
        }
        public void TestEncryptWorksWhenOnlyPublicKeyIsPresent()
        {
            RSAParameters privateAndPublicKey = RSAEncryptionService.GenerateKeys();

            RSAEncryptionService baseLineService = new RSAEncryptionService(privateAndPublicKey);
            string textToEncrypt = "Testing this encrypts";

            byte[] baselineEncrypted = baseLineService.Encrypt(Encoding.UTF8.GetBytes(textToEncrypt));

            RSAParameters publicKey = new RSAParameters
            {
                Modulus  = privateAndPublicKey.Modulus,
                Exponent = privateAndPublicKey.Exponent
            };
            RSAEncryptionService encryptionService = new RSAEncryptionService(publicKey);

            byte[] encryptedTest = encryptionService.Encrypt(Encoding.UTF8.GetBytes(textToEncrypt));

            //Assert That the encrypted text comes back as equals
            Assert.AreEqual(baseLineService.Decrypt(baselineEncrypted), baseLineService.Decrypt(encryptedTest));
        }