/// <summary> /// The method to be overriden in inheriting tasks. /// Throw an exception in case of an errror. /// </summary> protected override void ExecuteTask() { // Keyfile password var password = new SecureString(); foreach (char c in BagGet(AttributeName.Password, "")) { password.AppendChar(c); } // Timestamping server string sTimestampServer = BagGet(AttributeName.TimestampingServer, ""); Uri uriTimestampServer = string.IsNullOrEmpty(sTimestampServer) ? null : new Uri(sTimestampServer); if (uriTimestampServer == null) { Log.LogWarning("It would be better to specify the Timestamping Server Uri."); } // Sign each file foreach (ITaskItem item in BagGet <ITaskItem[]>(AttributeName.InputFiles)) { SecurityUtilities.SignFile(GetStringValue(AttributeName.KeyFile), password, uriTimestampServer, item.GetMetadata("FullPath")); } }
internal static bool Sign(string file, Project project) { if (project.CertificateSource.Value is null) { return(false); } try { var certificateSource = project.CertificateSource.Value; var timestampUrl = project.TimestampUrl.Value is null ? null : new Uri(project.TimestampUrl.Value, UriKind.Absolute); if (certificateSource.Length == 40 && Regex.IsMatch(certificateSource, "[a-fA-F0-9]*")) { SecurityUtilities.SignFile(certificateSource, timestampUrl, file); } else { SecurityUtilities.SignFile(Path.Combine(project.Source.Value, project.CertificateSource.Value), project.CertificatePassword.Value, timestampUrl, file); } return(true); } catch { throw new ApplicationException($"An error occurred signing the manifest. Check that all signature parameters are correct."); } }
public void SignFile(string inputFileName, X509Certificate2 certificate, string timestampServer, SignFileRequest signFileRequest, SignFileResponse signFileResponse) { SignFileResponseResult successResult = SignFileResponseResult.FileSigned; if (IsFileSigned(inputFileName)) { if (signFileRequest.OverwriteSignature) { UnsignFile(inputFileName); successResult = SignFileResponseResult.FileResigned; } else { signFileResponse.Result = SignFileResponseResult.FileAlreadySigned; return; } } SecurityUtilities.SignFile(certificate, new Uri(timestampServer), inputFileName); signFileResponse.Result = successResult; signFileResponse.FileContent = new FileStream(inputFileName, FileMode.Open, FileAccess.Read); signFileResponse.FileSize = signFileResponse.FileContent.Length; }
public override bool Execute() { if (!NativeMethodsShared.IsWindows) { Log.LogErrorWithCodeFromResources("General.TaskRequiresWindows", nameof(SignFile)); return(false); } try { SecurityUtilities.SignFile( CertificateThumbprint, TimestampUrl == null ? null : new Uri(TimestampUrl), SigningTarget.ItemSpec, TargetFrameworkVersion, TargetFrameworkIdentifier, DisallowMansignTimestampFallback); return(true); } catch (ArgumentException ex) when(ex.ParamName.Equals("certThumbprint")) { Log.LogErrorWithCodeFromResources("SignFile.CertNotInStore"); return(false); } catch (FileNotFoundException ex) { Log.LogErrorWithCodeFromResources("SignFile.TargetFileNotFound", ex.FileName); return(false); } catch (ApplicationException ex) { Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim()); return(false); } catch (WarningException ex) { Log.LogWarningWithCodeFromResources("SignFile.SignToolWarning", ex.Message.Trim()); return(true); } catch (CryptographicException ex) { Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim()); return(false); } catch (Win32Exception ex) { Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim()); return(false); } catch (UriFormatException ex) { Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim()); return(false); } }
public override bool Execute() { try { SecurityUtilities.SignFile(CertificateThumbprint, TimestampUrl == null ? null : new Uri(TimestampUrl), SigningTarget.ItemSpec, TargetFrameworkVersion); return(true); } catch (ArgumentException ex) { if (ex.ParamName.Equals("certThumbprint")) { Log.LogErrorWithCodeFromResources("SignFile.CertNotInStore"); return(false); } else { throw; } } catch (FileNotFoundException ex) { Log.LogErrorWithCodeFromResources("SignFile.TargetFileNotFound", ex.FileName); return(false); } catch (ApplicationException ex) { Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim()); return(false); } catch (WarningException ex) { Log.LogWarningWithCodeFromResources("SignFile.SignToolWarning", ex.Message.Trim()); return(true); } catch (CryptographicException ex) { Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim()); return(false); } catch (Win32Exception ex) { Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim()); return(false); } catch (UriFormatException ex) { Log.LogErrorWithCodeFromResources("SignFile.SignToolError", ex.Message.Trim()); return(false); } }
public override bool Execute() { try { SecurityUtilities.SignFile(this.CertificateThumbprint, (this.TimestampUrl == null) ? null : new Uri(this.TimestampUrl), this.SigningTarget.ItemSpec); return(true); } catch (ArgumentException exception) { if (!exception.ParamName.Equals("certThumbprint")) { throw; } base.Log.LogErrorWithCodeFromResources("SignFile.CertNotInStore", new object[0]); return(false); } catch (FileNotFoundException exception2) { base.Log.LogErrorWithCodeFromResources("SignFile.TargetFileNotFound", new object[] { exception2.FileName }); return(false); } catch (ApplicationException exception3) { base.Log.LogErrorWithCodeFromResources("SignFile.SignToolError", new object[] { exception3.Message.Trim() }); return(false); } catch (WarningException exception4) { base.Log.LogWarningWithCodeFromResources("SignFile.SignToolWarning", new object[] { exception4.Message.Trim() }); return(true); } catch (CryptographicException exception5) { base.Log.LogErrorWithCodeFromResources("SignFile.SignToolError", new object[] { exception5.Message.Trim() }); return(false); } catch (Win32Exception exception6) { base.Log.LogErrorWithCodeFromResources("SignFile.SignToolError", new object[] { exception6.Message.Trim() }); return(false); } catch (UriFormatException exception7) { base.Log.LogErrorWithCodeFromResources("SignFile.SignToolError", new object[] { exception7.Message.Trim() }); return(false); } }
private bool CreateManifests(string entryPoint, string baseUrl, List <PackageFileInfo> additionalFiles, List <string> filesToDelete) { string configFileName; string entryPointFilePath; ApplicationManifest appManifest; try { appManifest = CreateApplicationManifest(entryPoint, out configFileName, out entryPointFilePath); } catch (DuplicateAssemblyReferenceException ex) { Log.LogError("ClickOnce: {0}", ex.Message); return(false); } string appManifestFileName = Path.GetFileName(appManifest.EntryPoint.SourcePath) + ".manifest"; string deployManifestFileName = Path.GetFileName(appManifest.EntryPoint.SourcePath) + ".application"; string deployManifestTempFileName = Path.GetTempFileName(); string appManifestTempFileName = Path.GetTempFileName(); ManifestWriter.WriteManifest(appManifest, appManifestTempFileName); SecurityUtilities.SignFile(Certificate.ItemSpec, GetCertPassword(), null, appManifestTempFileName); string deploymentUrl = BuildDeploymentUrl(deployManifestFileName, baseUrl); DeployManifest deployManifest = CreateDeployManifest( appManifest, appManifestTempFileName, appManifestFileName, deploymentUrl, entryPointFilePath); ManifestWriter.WriteManifest(deployManifest, deployManifestTempFileName); SecurityUtilities.SignFile(Certificate.ItemSpec, GetCertPassword(), null, deployManifestTempFileName); additionalFiles.Add(new PackageFileInfo(appManifestTempFileName, appManifestFileName)); additionalFiles.Add(new PackageFileInfo(deployManifestTempFileName, deployManifestFileName)); filesToDelete.Add(appManifestTempFileName); filesToDelete.Add(deployManifestTempFileName); if (ConfigFile != null && !string.IsNullOrEmpty(configFileName)) { additionalFiles.Add(new PackageFileInfo(ConfigFile.ItemSpec, CombineWithWebsite ? AddDeploySuffix(configFileName) : configFileName)); } return(true); }
static void Main(string[] args) { Arguments arguments = new Arguments(); if (!arguments.Parse(args)) { Console.WriteLine("Sha1SignFile"); Console.WriteLine(); Console.WriteLine("Use after Mage.exe to create a SHA1 signature with a SHA256 certificate"); Console.WriteLine(); Console.WriteLine("Arguments:"); Console.WriteLine("-certThumbprint - Certificate thumbprint"); Console.WriteLine("-filePath - File to sign"); Console.WriteLine("-timestampUrl - Timestamp server address"); } else { SecurityUtilities.SignFile(arguments.CertThumbprint, new Uri(arguments.TimestampUrl), arguments.FilePath, "v4.0"); Console.WriteLine("Sha1SignFile successfully signed: {0}", arguments.FilePath); } }
/// <summary> /// Sign the manifest with provided publisher certificate /// </summary> /// <param name="manifest">manifest to sign</param> /// <param name="certFilePath">Path to cert file</param> /// <param name="password">Password for cert file</param> public static void SignManifest(Manifest manifest, string certFilePath, string password) { // Make sure the entered cert file exists if (File.Exists(certFilePath)) { // Construct cert object for cert X509Certificate2 cert; if (string.IsNullOrEmpty(password)) { cert = new X509Certificate2(certFilePath); } else { cert = new X509Certificate2(certFilePath, password); } SecurityUtilities.SignFile(cert, null, manifest.SourcePath); } else { throw new ArgumentException("Invalid certificate file path"); } }
/// <summary> /// Sign file with certificate. /// </summary> /// <param name="manifestPath">Path to manifest file.</param> /// <param name="timestampUrl">Timestamp server URL.</param> /// <param name="certificate">Certificate file reference.</param> public static void SignFile(string manifestPath, Uri timestampUrl, X509Certificate2 certificate) { SecurityUtilities.SignFile(certificate, timestampUrl, manifestPath); }