예제 #1
0
 /// <summary>
 /// Create a new FileVerifier instance.
 /// </summary>
 /// <param name="log">The Log to use for writing output during verification.</param>
 /// <param name="exclusions">The set of exclusions to check to determine if a file is excluded from verification.</param>
 /// <param name="options"></param>
 /// <param name="fileExtension">The file extension associated with the FileVerifier, e.g. ".zip" or ".dll".</param>
 public FileVerifier(Log log, Exclusions exclusions, SignatureVerificationOptions options, string fileExtension)
 {
     Log           = log ?? throw new ArgumentNullException("log");
     Exclusions    = exclusions ?? throw new ArgumentNullException("exclusions");
     Options       = options;
     FileExtension = fileExtension;
 }
        public SignatureVerificationManager(Exclusions exclusions, Log log, SignatureVerificationOptions options)
        {
            Exclusions = exclusions;
            Log        = log;
            Options    = options;

            AddFileVerifier(new CabVerifier(log, exclusions, options, ".cab"));
            AddFileVerifier(new PortableExecutableVerifier(log, exclusions, options, ".dll"));
            AddFileVerifier(new ExeVerifier(log, exclusions, options, ".exe"));
            AddFileVerifier(new JarVerifier(log, exclusions, options));
            AddFileVerifier(new AuthentiCodeVerifier(log, exclusions, options, ".js"));
            AddFileVerifier(new LzmaVerifier(log, exclusions, options));
            AddFileVerifier(new MsiVerifier(log, exclusions, options));
            AddFileVerifier(new MspVerifier(log, exclusions, options));
            AddFileVerifier(new MsuVerifier(log, exclusions, options));
            AddFileVerifier(new NupkgVerifier(log, exclusions, options));
            AddFileVerifier(new AuthentiCodeVerifier(log, exclusions, options, ".psd1"));
            AddFileVerifier(new AuthentiCodeVerifier(log, exclusions, options, ".psm1"));
            AddFileVerifier(new AuthentiCodeVerifier(log, exclusions, options, ".ps1"));
            AddFileVerifier(new AuthentiCodeVerifier(log, exclusions, options, ".ps1xml"));
            AddFileVerifier(new VsixVerifier(log, exclusions, options));
            AddFileVerifier(new XmlVerifier(log, exclusions, options));
            AddFileVerifier(new ZipVerifier(log, exclusions, options));
        }
예제 #3
0
 public NupkgVerifier(Log log, Exclusions exclusions, SignatureVerificationOptions options) : base(log, exclusions, options, fileExtension: ".nupkg")
 {
 }
예제 #4
0
 public JarVerifier(Log log, Exclusions exclusions, SignatureVerificationOptions options) : base(log, exclusions, options, fileExtension: ".jar")
 {
 }
예제 #5
0
 public MspVerifier(Log log, Exclusions exclusions, SignatureVerificationOptions options) : base(log, exclusions, options, ".msp")
 {
 }
예제 #6
0
 public CabVerifier(Log log, Exclusions exclusions, SignatureVerificationOptions options, string fileExtension) : base(log, exclusions, options, ".cab")
 {
 }
예제 #7
0
 public AuthentiCodeVerifier(Log log, Exclusions exclusions, SignatureVerificationOptions options, string fileExtension) : base(log, exclusions, options, fileExtension)
 {
 }
예제 #8
0
        private int Run()
        {
            try
            {
                Log.WriteMessage("Starting execution of SignCheck.");

                SignatureVerificationOptions options = SignatureVerificationOptions.None;
                options |= Options.Recursive ? SignatureVerificationOptions.VerifyRecursive : SignatureVerificationOptions.None;
                options |= Options.EnableXmlSignatureVerification ? SignatureVerificationOptions.VerifyXmlSignatures : SignatureVerificationOptions.None;
                options |= Options.SkipTimestamp ? SignatureVerificationOptions.None : SignatureVerificationOptions.VerifyAuthentiCodeTimestamps;
                options |= Options.VerifyStrongName ? SignatureVerificationOptions.VerifyStrongNameSignature : SignatureVerificationOptions.None;
                options |= Options.EnableJarSignatureVerification ? SignatureVerificationOptions.VerifyJarSignatures : SignatureVerificationOptions.None;
                options |= !String.IsNullOrEmpty(Options.ExclusionsOutput) ? SignatureVerificationOptions.GenerateExclusion : SignatureVerificationOptions.None;

                var signatureVerificationManager = new SignatureVerificationManager(Exclusions, Log, options);

                ResultDetails = Options.Verbosity > LogVerbosity.Normal ? DetailKeys.ResultKeysVerbose : DetailKeys.ResultKeysNormal;

                if (InputFiles.Count() > 0)
                {
                    DateTime startTime = DateTime.Now;
                    IEnumerable <SignatureVerificationResult> results = signatureVerificationManager.VerifyFiles(InputFiles);
                    DateTime endTime = DateTime.Now;

                    AllFilesSigned = true;
                    Log.WriteLine();
                    Log.WriteMessage(LogVerbosity.Minimum, SignCheckResources.scResults);
                    Log.WriteLine();
                    ProcessResults(results, 0);

                    // Generate an exclusions file for any unsigned files that were reported.
                    if (!String.IsNullOrEmpty(Options.ExclusionsOutput))
                    {
                        if (!Directory.Exists(Options.ExclusionsOutput))
                        {
                            Directory.CreateDirectory(Path.GetDirectoryName(Path.GetFullPath(Options.ExclusionsOutput)));
                        }
                        using (var exclusionsWriter = new StreamWriter(Options.ExclusionsOutput, append: false))
                        {
                            GenerateExclusionsFile(exclusionsWriter, results);
                        }
                    }

                    if (LoggedResults)
                    {
                        Log.WriteLine();
                    }

                    if (AllFilesSigned)
                    {
                        Log.WriteMessage(LogVerbosity.Minimum, SignCheckResources.scAllFilesSigned);
                    }
                    else
                    {
                        Log.WriteError(LogVerbosity.Minimum, SignCheckResources.scUnsignedFiles);
                    }

                    TimeSpan totalTime = endTime - startTime;
                    Log.WriteMessage(LogVerbosity.Minimum, String.Format(SignCheckResources.scTime, totalTime));
                    Log.WriteMessage(LogVerbosity.Minimum, String.Format(SignCheckResources.scStats,
                                                                         TotalFiles, TotalSignedFiles, TotalUnsignedFiles, TotalSkippedFiles, TotalExcludedFiles, TotalSkippedExcludedFiles));
                }
                else
                {
                    Log.WriteMessage(LogVerbosity.Minimum, SignCheckResources.scNoFilesProcessed);
                }
            }

            catch (Exception e)
            {
                Log.WriteError(e.ToString());
            }
            finally
            {
                if (Log != null)
                {
                    Log.Close();
                }
            }

            return(Log.HasLoggedErrors ? -1 : 0);
        }
예제 #9
0
 public LzmaVerifier(Log log, Exclusions exclusions, SignatureVerificationOptions options) : base(log, exclusions, options, fileExtension: "lzma")
 {
 }
예제 #10
0
 public PortableExecutableVerifier(Log log, Exclusions exclusions, SignatureVerificationOptions options, string fileExtension) :
     base(log, exclusions, options, fileExtension)
 {
     FinalizeResult = false;
 }