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);
        }
Beispiel #2
0
        public void TestHashPassword()
        {
            const string password      = "******";
            const string rightPassword = "******";
            const string wrongPassword = "******";

            byte[] salt             = PBKDF2Impl.GenerateSalt();
            byte[] encrypedPassword = PBKDF2Impl.HashPassword(Encoding.UTF8.GetBytes(password), salt);

            byte[] encrypedRightPassword = PBKDF2Impl.HashPassword(Encoding.UTF8.GetBytes(rightPassword), salt);
            byte[] encrypedWrongPassword = PBKDF2Impl.HashPassword(Encoding.UTF8.GetBytes(wrongPassword), salt);

            Assert.IsTrue(AbstractSecureCompareBase.Compare(encrypedPassword, encrypedRightPassword));
            Assert.IsFalse(AbstractSecureCompareBase.Compare(encrypedPassword, encrypedWrongPassword));
        }
Beispiel #3
0
        public void EncryptFile(string sourceFilename, string destinationFilename, RSAParameters publicKey)
        {
            _logger.Info("get data from file");
            byte[] dataToEncrypt = GetDataFromFile(sourceFilename);

            if (dataToEncrypt != null)
            {
                _logger.Info("generate session key");
                byte[] sessionKey = AbstractSecureCompareBase.GenerateRandomNumber(32); //256-bit
                _logger.Info("generate IV");
                byte[] iv = AbstractSecureCompareBase.GenerateRandomNumber(16);         //128-bit

                _logger.Info("encrypt data");
                byte[] encryptedData = _hybridEncrypter.EncryptAES(dataToEncrypt, sessionKey, iv);
                _logger.Info("generate HMAC");
                byte[] hmac = _hybridEncrypter.ComputeHmac(sessionKey, encryptedData);
                _logger.Info("encrypt session key");
                byte[] encryptedSessionKey = _hybridEncrypter.EncryptRSA(sessionKey, publicKey);

                _logger.Info("encrypt file extension");
                string fileExtension = Path.GetExtension(sourceFilename);

                if (fileExtension != null)
                {
                    byte[] encryptedFileExtension = _hybridEncrypter.EncryptAES(Encoding.UTF8.GetBytes(fileExtension),
                                                                                sessionKey, iv);

                    _logger.Info("write data to file");
                    WriteDataToFile(encryptedData, hmac, encryptedSessionKey, iv, encryptedFileExtension,
                                    destinationFilename + ".sfs");
                }
                else
                {
                    _logger.Error("file extenstion is null!");
                }
            }
            else
            {
                _logger.Error("data from file are null!");
            }
        }
        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);
        }
Beispiel #5
0
 public bool Compare(byte[] array1, byte[] array2)
 {
     _logger.Info("compare byte arrays");
     return(AbstractSecureCompareBase.Compare(array1, array2));
 }