예제 #1
0
        public void SignFile_NoAnonymousSigning_Fails()
        {
            var configuration = new SigningServerConfiguration
            {
                Certificates = new[]
                {
                    new CertificateConfiguration
                    {
                        Username      = "******",
                        Password      = "******",
                        Thumbprint    = _certificateHelper.Certificate.Thumbprint,
                        StoreName     = (StoreName)Enum.Parse(typeof(StoreName), _certificateHelper.Store.Name),
                        StoreLocation = _certificateHelper.Store.Location
                    }
                },
                WorkingDirectory = "WorkingDirectory"
            };

            var server = new Server.SigningServer(configuration, _emptySigningToolProvider);

            var testData = new MemoryStream(File.ReadAllBytes(Path.Combine(ExecutionDirectory, "TestFiles/unsigned/unsigned.exe")));
            var request  = new SignFileRequest
            {
                FileName    = "unsigned.exe",
                FileSize    = testData.Length,
                FileContent = testData
            };

            var response = server.SignFile(request);

            Assert.AreEqual(SignFileResponseResult.FileNotSignedUnauthorized, response.Result);
        }
예제 #2
0
        public void SignFile_EmptyFile_Fails()
        {
            var server = new Server.SigningServer(_configuration, _emptySigningToolProvider);

            var request = new SignFileRequest
            {
                FileSize    = 0,
                FileContent = null
            };
            var response = server.SignFile(request);

            Assert.AreEqual(SignFileResponseResult.FileNotSignedError, response.Result);

            request = new SignFileRequest
            {
                FileSize    = 100,
                FileContent = null
            };
            response = server.SignFile(request);
            Assert.AreEqual(SignFileResponseResult.FileNotSignedError, response.Result);

            request = new SignFileRequest
            {
                FileSize    = 0,
                FileContent = new MemoryStream()
            };
            response = server.SignFile(request);
            Assert.AreEqual(SignFileResponseResult.FileNotSignedError, response.Result);
        }
예제 #3
0
        public void SignFile_ResponseDisposeCleansFile()
        {
            var server = new Server.SigningServer(_configuration, _simultateSigningToolProvider);

            var testData = new MemoryStream(File.ReadAllBytes(Path.Combine(ExecutionDirectory, "TestFiles/unsigned/unsigned.exe")));
            var request  = new SignFileRequest
            {
                FileName    = "unsigned.exe",
                FileSize    = testData.Length,
                FileContent = testData
            };

            var response = server.SignFile(request);

            Assert.AreEqual(SignFileResponseResult.FileSigned, response.Result);

            var files = Directory.GetFileSystemEntries(_configuration.WorkingDirectory).ToArray();

            Assert.AreEqual(1, files.Length);

            response.Dispose();

            files = Directory.GetFileSystemEntries(_configuration.WorkingDirectory).ToArray();
            Assert.AreEqual(0, files.Length);
        }
예제 #4
0
        public void SignFile_UnsupportedFormat_Fails()
        {
            var server = new Server.SigningServer(_configuration, _emptySigningToolProvider);

            var testData = new MemoryStream(File.ReadAllBytes(Path.Combine(ExecutionDirectory, "TestFiles/unsigned/unsigned.exe")));
            var request  = new SignFileRequest
            {
                FileName    = "unsigned.exe",
                FileSize    = testData.Length,
                FileContent = testData
            };

            var response = server.SignFile(request);

            Assert.AreEqual(SignFileResponseResult.FileNotSignedUnsupportedFormat, response.Result);
        }
예제 #5
0
        public void InvalidWorkingDirectoryThrowsError()
        {
            var emptyConfig = new SigningServerConfiguration
            {
                Certificates = new[]
                {
                    new CertificateConfiguration
                    {
                        Certificate = new X509Certificate2("Certificates/SigningServer.Test.pfx")
                    }
                },
                WorkingDirectory = "T:\\NotExisting"
            };
            var server = new Server.SigningServer(emptyConfig, CreateEmptySigningToolProvider());

            server.GetSupportedFileExtensions();
        }
예제 #6
0
        public void RelativeWorkingDirectoryGetsCreated()
        {
            var config = new SigningServerConfiguration
            {
                Certificates = new[]
                {
                    new CertificateConfiguration
                    {
                        Certificate = new X509Certificate2("Certificates/SigningServer.Test.pfx")
                    }
                },
                WorkingDirectory = "WorkingDirectory"
            };
            var server = new Server.SigningServer(config, CreateEmptySigningToolProvider());

            Assert.IsTrue(Directory.Exists(Path.Combine(Environment.CurrentDirectory, config.WorkingDirectory)));
            Directory.Delete(Path.Combine(Environment.CurrentDirectory, config.WorkingDirectory), true);
        }
예제 #7
0
        public void AbsoluteWorkingDirectoryGetsCreated()
        {
            var temp   = Path.Combine(Path.GetTempPath(), "WorkingDirectory");
            var config = new SigningServerConfiguration
            {
                Certificates = new[]
                {
                    new CertificateConfiguration
                    {
                        Certificate = new X509Certificate2("Certificates/SigningServer.Test.pfx")
                    }
                },
                WorkingDirectory = temp
            };
            var server = new Server.SigningServer(config, CreateEmptySigningToolProvider());

            Assert.IsTrue(Directory.Exists(temp));
            Directory.Delete(temp, true);
        }
예제 #8
0
        public void SignFile_AlreadySigned_ResponseDisposeCleansFile()
        {
            var simulateSigningTool = new Mock <ISigningTool>();

            simulateSigningTool.Setup(t => t.SupportedFileExtensions).Returns(new[] { "*" });
            simulateSigningTool.Setup(t => t.SupportedHashAlgorithms).Returns(new[] { "*" });
            simulateSigningTool.Setup(t => t.IsFileSigned(It.IsAny <string>())).Returns(true);
            simulateSigningTool.Setup(t => t.IsFileSupported(It.IsAny <string>())).Returns(true);
            simulateSigningTool.Setup(t => t.SignFile(It.IsAny <string>(), It.IsAny <X509Certificate2>(), It.IsAny <string>(), It.IsAny <SignFileRequest>(), It.IsAny <SignFileResponse>())).Callback(
                (string file, X509Certificate2 cert, string timestampserver, SignFileRequest rq, SignFileResponse rs) =>
            {
                rs.Result      = SignFileResponseResult.FileAlreadySigned;
                var fs         = new FileStream(file, FileMode.Open, FileAccess.Read);
                rs.FileContent = fs;
                rs.FileSize    = fs.Length;
            });

            var simultateSigningToolProvider = new EnumerableSigningToolProvider(new[] { simulateSigningTool.Object });


            var server = new Server.SigningServer(_configuration, simultateSigningToolProvider);

            var testData = new MemoryStream(File.ReadAllBytes("TestFiles/unsigned/unsigned.exe"));
            var request  = new SignFileRequest
            {
                FileName    = "unsigned.exe",
                FileSize    = testData.Length,
                FileContent = testData
            };

            var response = server.SignFile(request);

            Assert.AreEqual(SignFileResponseResult.FileAlreadySigned, response.Result);

            var files = Directory.GetFileSystemEntries(_configuration.WorkingDirectory).ToArray();

            Assert.AreEqual(1, files.Length);

            response.Dispose();

            files = Directory.GetFileSystemEntries(_configuration.WorkingDirectory).ToArray();
            Assert.AreEqual(0, files.Length);
        }
예제 #9
0
 public void LoadCertificateFromStoreWorks()
 {
     using (var cert = new CertificateStoreHelper("Certificates/SigningServer.Test.pfx", StoreName.My,
                                                  StoreLocation.LocalMachine))
     {
         var emptyConfig = new SigningServerConfiguration
         {
             Certificates = new[]
             {
                 new CertificateConfiguration
                 {
                     Thumbprint    = cert.Certificate.Thumbprint,
                     StoreName     = (StoreName)Enum.Parse(typeof(StoreName), cert.Store.Name),
                     StoreLocation = cert.Store.Location,
                 }
             },
             WorkingDirectory = "WorkingDirectory"
         };
         var server = new Server.SigningServer(emptyConfig, CreateEmptySigningToolProvider());
         Assert.AreEqual(1, server.Configuration.Certificates.Length);
         Assert.AreEqual(emptyConfig.Certificates[0].Thumbprint, server.Configuration.Certificates[0].Certificate.Thumbprint);
     }
 }
예제 #10
0
        public void RelativeWorkingDirectoryGetsCleaned()
        {
            var config = new SigningServerConfiguration
            {
                Certificates = new[]
                {
                    new CertificateConfiguration
                    {
                        Certificate = new X509Certificate2("Certificates/SigningServer.Test.pfx")
                    }
                },
                WorkingDirectory = "WorkingDirectory"
            };

            Directory.CreateDirectory("WorkingDirectory");
            File.WriteAllText("WorkingDirectory/test.txt", "test");

            var server = new Server.SigningServer(config, CreateEmptySigningToolProvider());

            Assert.IsTrue(Directory.Exists(Path.Combine(Environment.CurrentDirectory, config.WorkingDirectory)));

            Assert.AreEqual(0, Directory.GetFiles("WorkingDirectory").Length);
            Directory.Delete(Path.Combine(Environment.CurrentDirectory, config.WorkingDirectory), true);
        }
예제 #11
0
 public void TestNoCertificatesThrowsError()
 {
     var emptyConfig = new SigningServerConfiguration();
     var server      = new Server.SigningServer(emptyConfig, CreateEmptySigningToolProvider());
 }