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); }