public MailModel Decrypt(MailModel mail, string privateKey)
        {
            var dto = mail.Clone();

            var password = this.asymmetricCryptoService.Decrypt(mail.Password, privateKey);

            var(key, iv) = this.symmetricCryptoService.GenerateKeyByPassword(password);

            this.ForEachString(mail, dto, x => this.symmetricCryptoService.Decrypt(x, key, iv));

            return(dto);
        }
        public MailModel EncryptWithNewPassword(MailModel mail, string publicKey)
        {
            var dto = mail.Clone();

            var password = Guid.NewGuid().ToString(); // HACK: Use better password generator

            var(key, iv) = this.symmetricCryptoService.GenerateKeyByPassword(password);

            this.ForEachString(mail, dto, x => this.symmetricCryptoService.Encrypt(x, key, iv));

            dto.Password = this.asymmetricCryptoService.Encrypt(password, publicKey);

            return(dto);
        }