public UpdateViewModel(Update update)
 {
     _isSignatureDownloaded = false;
     _isInstallerDownloaded = false;
     StartUpdateAsync(update);
 }
        /// <summary>
        ///     Do an update.
        /// </summary>
        /// <param name="update">The update to perform.</param>
        public async void StartUpdateAsync(Update update)
        {
            try
            {
                IsUpdatingSignature = true;
                IsUpdatingInstaller = true;
                await DownloadSignatureAsync(update.Signature);
                await DownloadInstallerAsync(update.Installer);

                if ((IsInstallerDownloaded) && (IsSignatureDownloaded))
                {
                    var s = _signature.Split('\n');
                    var trimmedComment = s[2].Replace("trusted comment: ", "").Trim();
                    var trustedCommentBinary = Encoding.UTF8.GetBytes(trimmedComment);
                    var loadedSignature = Minisign.LoadSignature(Convert.FromBase64String(s[1]), trustedCommentBinary,
                        Convert.FromBase64String(s[3]));
                    var publicKey = Minisign.LoadPublicKeyFromString(Global.PublicKey);
                    var valid = Minisign.ValidateSignature(_installer, loadedSignature, publicKey);

                    if (valid)
                    {
                        var path = Path.Combine(Path.GetTempPath(), update.Installer.Name);
                        File.WriteAllBytes(path, _installer);
                        if (File.Exists(path))
                        {
                            InstallerPath = path;
                            TryClose(true);
                        }
                    }
                    else
                    {
                        //failed
                        InstallerPath = string.Empty;
                    }
                }
                else
                {
                    //failed
                    InstallerPath = string.Empty;
                }
            }
            catch (Exception)
            {
            }
            TryClose(false);
        }