Beispiel #1
0
        public void TrustPackageWithUpdate()
        {
            string package    = Path.Combine(DataDirectory, "Package", "signedpackage.zip");
            string temp       = Path.Combine(TempDirectory, "signedpackage.zip");
            string keyFile    = Path.Combine(DataDirectory, "Key", "openiiottest-private.asc");
            string key        = File.ReadAllText(keyFile);
            string passphrase = File.ReadAllText(Path.Combine(DataDirectory, "Key", "openiiottest-passphrase.txt"));
            string publicKey  = File.ReadAllText(Path.Combine(DataDirectory, "Key", "openiiottest-public.asc"));

            File.Copy(package, temp);

            Truster.Updated += Truster_Updated;

            Exception ex = Record.Exception(() => Truster.TrustPackage(temp, key, passphrase));

            Assert.Null(ex);

            bool verified = false;

            PackageVerifier verifier = new PackageVerifier();

            verifier.TrustPGPPublicKey = publicKey;

            ex = Record.Exception(() => verified = verifier.VerifyPackage(temp));

            Assert.Null(ex);
            Assert.True(verified);
        }
        /// <summary>
        ///     Retrieves the <see cref="PackageVerification"/> for the specified <paramref name="packageArchive"/>.
        /// </summary>
        /// <param name="packageArchive">The <see cref="IPackageArchive"/> instance to verify.</param>
        /// <returns>The <see cref="PackageVerification"/> result.</returns>
        private PackageVerification GetPackageArchiveVerification(IPackageArchive packageArchive)
        {
            PackageVerification retVal;

            try
            {
                PackageVerifier.Updated += PackageVerifierUpdated;
                bool verification = PackageVerifier.VerifyPackage(packageArchive.FileName);

                if (verification)
                {
                    retVal = PackageVerification.Verified;
                }
                else
                {
                    retVal = PackageVerification.Refuted;
                }
            }
            catch (Exception ex)
            {
                logger.Debug($"Failed to verifiy Package Archive '{packageArchive.FQN}': {ex.Message}");
                retVal = PackageVerification.Refuted;
            }
            finally
            {
                PackageVerifier.Updated -= PackageVerifierUpdated;
            }

            return(retVal);
        }
        /// <summary>
        ///     Initializes a new instance of the <see cref="PackageVerifierTests"/> class.
        /// </summary>
        public PackageVerifierTests()
        {
            Verifier = new PackageVerifier();

            Uri    codeBaseUri  = new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase);
            string codeBasePath = Uri.UnescapeDataString(codeBaseUri.AbsolutePath);
            string dirPath      = Path.GetDirectoryName(codeBasePath);

            DataDirectory = Path.Combine(dirPath, "Data");

            TempDirectory = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());

            Directory.CreateDirectory(TempDirectory);
        }
        public void CreatePackageNoChecksum()
        {
            string manifest = Path.Combine(DataDirectory, "Manifest", "nochecksummanifest.json");
            string package  = Path.Combine(TempDirectory, "package.zip");

            Exception ex = Record.Exception(() => Creator.CreatePackage(PayloadDirectory, manifest, package));

            Assert.Null(ex);

            bool verified = false;

            ex = Record.Exception(() => verified = new PackageVerifier().VerifyPackage(package));

            Assert.Null(ex);
            Assert.True(verified);
        }
        public void CreatePackagePackageExistsOverwrite()
        {
            string manifest = Path.Combine(DataDirectory, "Manifest", "manifest.json");
            string package  = Path.Combine(TempDirectory, "package.zip");

            File.WriteAllText(package, string.Empty);

            Exception ex = Record.Exception(() => Creator.CreatePackage(PayloadDirectory, manifest, package, true));

            Assert.Null(ex);

            bool verified = false;

            ex = Record.Exception(() => verified = new PackageVerifier().VerifyPackage(package));

            Assert.Null(ex);
            Assert.True(verified);
        }
Beispiel #6
0
        /// <summary>
        ///     Verifies the specified <paramref name="packageArchive"/> using the specified <paramref name="publicKey"/>.
        /// </summary>
        /// <param name="packageArchive">The <see cref="IPackageArchive"/> to verify.</param>
        /// <param name="publicKey">The PGP Public Key with which to verify the package.</param>
        /// <returns>
        ///     A Result containing the result of the operation and a value indicating whether the <see cref="IPackageArchive"/> is valid.
        /// </returns>
        public IResult <bool> VerifyPackageArchive(IPackageArchive packageArchive, string publicKey)
        {
            Guid guid = logger.EnterMethod(xLogger.Params(packageArchive, publicKey), true);

            logger.Info($"Verifying Package '{packageArchive?.FQN}'...");

            IResult <bool> retVal = new Result <bool>();

            if (packageArchive == default(IPackageArchive))
            {
                retVal.AddError($"The specified Package Archive is null.");
            }
            else if (string.IsNullOrEmpty(packageArchive.FileName))
            {
                retVal.AddError($"The specified Package Archive contains a null or empty FileName.");
            }
            else if (!Platform.FileExists(packageArchive.FileName))
            {
                retVal.AddError($"The specified Package Archive file '{packageArchive.FileName}' can not be found.");
            }
            else
            {
                PackageVerifier verifier = new PackageVerifier();
                verifier.Updated += (sender, e) =>
                {
                    logger.Debug($"     PackageVerifier: {e.Message}");
                    retVal.AddInfo(e.Message);
                };

                try
                {
                    retVal.ReturnValue = verifier.VerifyPackage(packageArchive.FileName, publicKey);
                }
                catch (Exception ex)
                {
                    logger.Exception(LogLevel.Debug, ex);
                    retVal.AddError(ex.Message);
                }
            }

            retVal.LogResult(logger);
            logger.ExitMethod(guid);
            return(retVal);
        }
        public void CreateSignedPackage()
        {
            string manifest        = Path.Combine(DataDirectory, "Manifest", "manifest.json");
            string package         = Path.Combine(TempDirectory, "signedpackage.zip");
            string privateKeyFile  = Path.Combine(DataDirectory, "Key", "openiiottest-private.asc");
            string privateKey      = File.ReadAllText(privateKeyFile);
            string passphrase      = File.ReadAllText(Path.Combine(DataDirectory, "Key", "openiiottest-passphrase.txt"));
            string keybaseUsername = "******";

            Exception ex = Record.Exception(() => Creator.CreatePackage(PayloadDirectory, manifest, package, true, privateKey, passphrase, keybaseUsername));

            Assert.Null(ex);

            bool verified = false;

            ex = Record.Exception(() => verified = new PackageVerifier().VerifyPackage(package));

            Assert.Null(ex);
            Assert.True(verified);
        }
        /// <summary>
        ///     Processes the desired command with the arguments specified in the command line arguments from Main().
        /// </summary>
        /// <param name="args">
        ///     The optional command line arguments, used to override the arguments with which the application was started.
        /// </param>
        public static void Process(string args = "")
        {
            if (args != string.Empty)
            {
                Arguments.Populate(args);
            }

            string command = string.Empty;

            try
            {
                if (Operands.Count > 1)
                {
                    command = Operands[1].ToLower();
                }

                if (command == "manifest")
                {
                    ManifestGenerator generator = new ManifestGenerator();
                    generator.Updated += Update;

                    PackageManifest manifest = generator.GenerateManifest(Directory, HashFiles, ManifestFile);

                    if (string.IsNullOrEmpty(ManifestFile) && manifest != default(PackageManifest))
                    {
                        Console.WriteLine(manifest.ToJson());
                    }
                }
                else if (command == "extract-manifest")
                {
                    ManifestExtractor extractor = new ManifestExtractor();
                    extractor.Updated += Update;

                    PackageManifest manifest = extractor.ExtractManifest(PackageFile, ManifestFile);

                    if (string.IsNullOrEmpty(ManifestFile) && manifest != default(PackageManifest))
                    {
                        Console.WriteLine(manifest.ToJson());
                    }
                }
                else if (command == "package")
                {
                    PackageCreator creator = new PackageCreator();
                    creator.Updated += Update;

                    string privateKey = string.Empty;

                    if (!string.IsNullOrEmpty(PrivateKeyFile))
                    {
                        privateKey = File.ReadAllText(PrivateKeyFile);
                    }

                    creator.CreatePackage(Directory, ManifestFile, PackageFile, SignPackage, privateKey, Passphrase, KeybaseUsername);
                }
                else if (command == "extract-package")
                {
                    PackageExtractor extractor = new PackageExtractor();
                    extractor.Updated += Update;

                    string publicKey = string.Empty;

                    if (!string.IsNullOrEmpty(PublicKeyFile))
                    {
                        publicKey = File.ReadAllText(PublicKeyFile);
                    }

                    extractor.ExtractPackage(PackageFile, Directory, publicKey, Overwrite, SkipVerification);
                }
                else if (command == "trust")
                {
                    PackageTruster truster = new PackageTruster();
                    truster.Updated += Update;
                    truster.TrustPackage(PackageFile, File.ReadAllText(PrivateKeyFile), Passphrase);
                }
                else if (command == "verify")
                {
                    PackageVerifier verifier = new PackageVerifier();
                    verifier.Updated += Update;

                    string publicKey = string.Empty;

                    if (!string.IsNullOrEmpty(PublicKeyFile))
                    {
                        publicKey = File.ReadAllText(PublicKeyFile);
                    }

                    verifier.VerifyPackage(PackageFile, publicKey);
                }
                else
                {
                    HelpPrinter.PrintHelp(Operands.Count > 2 ? Operands[2] : default(string));
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error: {ex.Message}");
            }
        }