예제 #1
0
        public virtual void VerifySignature()
        {
            // Verify the certificate used to sign the package.
            var certificate = Certificate;

            if (!certificate.Verify())
            {
                throw new Exception(Messages.CERTIFICATE_IS_INVALID);
            }

            // Get the package signature from the certificate file.
            FileDigest fileDigest = null;

            using (Stream stream = new MemoryStream(RawCertificate))
                using (StreamReader reader = new StreamReader(stream))
                {
                    // The package signature is the digest of the file identified on the first line in the certificate file.
                    fileDigest = new FileDigest(reader.ReadLine());
                }

            // Compare the stored signature to the computed signature.
            // Do this independently to minimize the number of files opened concurrently.
            using (Stream stream = new MemoryStream(RawManifest))
            {
                // Verify the signature using the public key.
                fileDigest.Verify(stream, (RSACryptoServiceProvider)certificate.PublicKey.Key);
            }
        }
예제 #2
0
        public override void VerifyManifest()
        {
            // Verify the presence of a manifest.
            var manifest = Manifest;

            int verifiedCount = 0;

            using (var stream = new TarFileStream(PackageSourceFile))
            {
                // For a tar package, it is more efficient to iterate the files in the order within the archive.
                while (MoveNext(stream))
                {
                    // Find the manifest entry for the current tar entry.
                    FileDigest fileDigest = manifest.Find(
                        delegate(FileDigest aFileDigest)
                    {
                        return(String.Compare(aFileDigest.Name, stream.Current, true) == 0);
                    });

                    if (fileDigest == null)
                    {
                        continue;
                    }

                    // The manifest entry was found.
                    // Verify its digest.
                    fileDigest.Verify(new MemoryStream(stream.ReadAllBytes()));

                    verifiedCount++;
                }

                foreach (var fileDigest in manifest)
                {
                    if (!fileDigest.WasVerified)
                    {
                        // A manifest entry was missing.
                        XenOvf.Utilities.Log.Error(string.Format(Messages.FILE_MISSING, fileDigest.Name));
                    }
                }

                if (verifiedCount != manifest.Count)
                {
                    // A manifest entry was missing.
                    throw new Exception(Messages.SECURITY_FILE_MISSING);
                }
            }
        }
예제 #3
0
        public virtual void VerifySignature()
        {
            // Verify the certificate used to sign the package.
            var certificate = Certificate;

            if (!certificate.Verify())
            {
                throw new Exception(Messages.CERTIFICATE_IS_INVALID);
            }

            // Get the package signature from the certificate file.
            FileDigest fileDigest = null;

            using (Stream stream = new MemoryStream(RawCertificate))
            using (StreamReader reader = new StreamReader(stream))
            {
                // The package signature is the digest of the file identified on the first line in the certificate file.
                fileDigest = new FileDigest(reader.ReadLine());
            }

            // Compare the stored signature to the computed signature.
            // Do this independently to minimize the number of files opened concurrently.
            using (Stream stream = new MemoryStream(RawManifest))
            {
                // Verify the signature using the public key.
                fileDigest.Verify(stream, (RSACryptoServiceProvider)certificate.PublicKey.Key);
            }
        }