public void TestFullrun()
        {
            const string messageToEncrypt = "Important important!";
            byte[] dataToEncrypt = Encoding.UTF8.GetBytes(messageToEncrypt);

            var hybridEncryper = new HybridRsaAes();
            hybridEncryper.AssignNewRSAKeys();
            RSAParameters publicKey = hybridEncryper.GetPublicRSAKey(); //public key receiver
            RSAParameters privateKey = hybridEncryper.GetPrivateRSAKey(); //private key receiver

            //Encrypt
            byte[] sessionKey = AbstractSecureCompareBase.GenerateRandomNumber(32); //256-bit
            byte[] iv = AbstractSecureCompareBase.GenerateRandomNumber(16); //128-bit

            byte[] encryptedData = hybridEncryper.EncryptAES(dataToEncrypt, sessionKey, iv);
            byte[] hmac = hybridEncryper.ComputeHmac(sessionKey, encryptedData);
            byte[] encryptedSessionKey = hybridEncryper.EncryptRSA(sessionKey, publicKey);

            //sending encrpyted file....(encryptedData, iv, hmac, encryptedSessionKey)

            //Decrypt
            byte[] decryptedSessionKey = hybridEncryper.DecryptRSA(encryptedSessionKey, privateKey);
            Assert.IsTrue(hybridEncryper.VerifyHmac(decryptedSessionKey, encryptedData, hmac));
            byte[] decryptedData = hybridEncryper.DecryptAES(encryptedData, decryptedSessionKey, iv);
            Assert.IsTrue(Encoding.UTF8.GetString(decryptedData) == messageToEncrypt);
        }
        public void GeSingleByName()
        {
            List<Contact> contacts = _dataAccess.GetAll<Contact>();
            Assert.IsTrue(contacts.Count == 0);

            List<MasterLogin> masterLogins = _dataAccess.GetAll<MasterLogin>();
            Assert.IsTrue(masterLogins.Count == 0);

            var hybridEncrypter = new HybridRsaAes();
            hybridEncrypter.AssignNewRSAKeys();

            var contact = new Contact
            {
                Name = "Marcel",
                PublicKey = hybridEncrypter.GetPublicRSAKey()
            };
            _dataAccess.Insert(contact);

            hybridEncrypter.AssignNewRSAKeys();
            var contact2 = new Contact
            {
                Name = "Mario",
                PublicKey = hybridEncrypter.GetPublicRSAKey()
            };
            _dataAccess.Insert(contact2);

            contacts = _dataAccess.GetAll<Contact>();
            Assert.IsTrue(contacts.Count == 2);

            var contact3 = _dataAccess.GetSingleByName<Contact>("Marcel");
            Assert.IsTrue(contact3 != null);
            Assert.IsTrue(contact3.Name == "Marcel");

            var salt = PBKDF2Impl.GenerateSalt();
            hybridEncrypter = new HybridRsaAes();
            hybridEncrypter.AssignNewRSAKeys();

            var materLogin = new MasterLogin
            {
                Name = "MasterMan",
                Password = PBKDF2Impl.HashPassword(Encoding.UTF8.GetBytes("password123"), salt),
                Salt = salt,
                PrivateKey = hybridEncrypter.GetPrivateRSAKeyAsXml(),
                PublicKey = hybridEncrypter.GetPublicRSAKey()
            };
            _dataAccess.Insert(materLogin);

            masterLogins = _dataAccess.GetAll<MasterLogin>();
            Assert.IsTrue(masterLogins.Count == 1);

            var materLogin2 = _dataAccess.GetSingleByName<MasterLogin>("MasterMan");
            Assert.IsTrue(materLogin2 != null);
            Assert.IsTrue(materLogin2.Name == "MasterMan");
        }
        public void TestConvertPublicKey()
        {
            var hybridEncryper = new HybridRsaAes();
            hybridEncryper.AssignNewRSAKeys();

            string keyString = hybridEncryper.GetPublicRSAKeyAsXml();

            //sending public key string to friend....

            var rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(keyString);

            Assert.IsTrue(hybridEncryper.GetPublicRSAKeyAsXml() == rsa.ToXmlString(false));
        }
        public void TestFullrunWithKeyShare()
        {
            const string messageToEncrypt = "Important important!";
            byte[] dataToEncrypt = Encoding.UTF8.GetBytes(messageToEncrypt);

            var hybridEncryper = new HybridRsaAes();
            hybridEncryper.AssignNewRSAKeys();

            string keyString = hybridEncryper.GetPublicRSAKeyAsXml();

            //sending public key string to friend....

            var rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(keyString);

            Assert.IsTrue(hybridEncryper.GetPublicRSAKeyAsXml() == rsa.ToXmlString(false));

            //Encrypt
            RSAParameters publicKey = rsa.ExportParameters(false); //public key receiver

            byte[] sessionKey = AbstractSecureCompareBase.GenerateRandomNumber(32); //256-bit
            byte[] iv = AbstractSecureCompareBase.GenerateRandomNumber(16); //128-bit

            byte[] encryptedData = hybridEncryper.EncryptAES(dataToEncrypt, sessionKey, iv);
            byte[] hmac = hybridEncryper.ComputeHmac(sessionKey, encryptedData);
            byte[] encryptedSessionKey = hybridEncryper.EncryptRSA(sessionKey, publicKey);

            //sending encrpyted file....(encryptedData, iv, hmac, encryptedSessionKey)

            //Decrypt
            RSAParameters privateKey = hybridEncryper.GetPrivateRSAKey(); //private key receiver

            byte[] decryptedSessionKey = hybridEncryper.DecryptRSA(encryptedSessionKey, privateKey);
            Assert.IsTrue(hybridEncryper.VerifyHmac(decryptedSessionKey, encryptedData, hmac));
            byte[] decryptedData = hybridEncryper.DecryptAES(encryptedData, decryptedSessionKey, iv);
            Assert.IsTrue(Encoding.UTF8.GetString(decryptedData) == messageToEncrypt);
        }
        public void Update()
        {
            List<Contact> contacts = _dataAccess.GetAll<Contact>();
            Assert.IsTrue(contacts.Count == 0);

            var hybridEncrypter = new HybridRsaAes();
            hybridEncrypter.AssignNewRSAKeys();

            var contact = new Contact
            {
                Name = "Marcel",
                PublicKey = hybridEncrypter.GetPublicRSAKey()
            };
            _dataAccess.Insert(contact);

            contacts = _dataAccess.GetAll<Contact>();
            Assert.IsTrue(contacts.Count == 1);

            Contact contact2 = contacts[0];
            hybridEncrypter.AssignNewRSAKeys();
            contact2.Name = "Marcel.Elz";
            contact2.PublicKey = hybridEncrypter.GetPublicRSAKey();
            _dataAccess.Update(contact2);

            contacts = _dataAccess.GetAll<Contact>();
            Assert.IsTrue(contacts.Count == 1);
            Assert.IsTrue(contacts[0].Name == "Marcel.Elz");
        }
 public CryptographyService()
 {
     _hybridEncrypter = new HybridRsaAes();
 }