/// <summary>
        ///     Verify the signature of the manifest
        /// </summary>
        public ManifestSignatureInformation VerifySignature(X509RevocationFlag revocationFlag,
                                                            X509RevocationMode revocationMode)
        {
            XmlElement signatureNode = m_manifestXml.SelectSingleNode("//ds:Signature", m_namespaceManager) as XmlElement;

            if (signatureNode == null)
            {
                return(new ManifestSignatureInformation(m_manifest, null, null));
            }

            LoadXml(signatureNode);

            StrongNameSignatureInformation strongName = VerifyStrongNameSignature(signatureNode);

            // Since the Authenticode signature is wrapped in the strong name signature, we do not want to
            // give a valid AuthenticodeSignatureInformation object for an Authenticode signature which is
            // contained within a strong name signature with an invalid hash value.
            AuthenticodeSignatureInformation authenticode = null;

            if (strongName.VerificationResult != SignatureVerificationResult.BadDigest)
            {
                authenticode = VerifyAuthenticodeSignature(signatureNode, revocationFlag, revocationMode);
            }
            else
            {
                authenticode = new AuthenticodeSignatureInformation(SignatureVerificationResult.ContainingSignatureInvalid);
            }

            return(new ManifestSignatureInformation(m_manifest, strongName, authenticode));
        }
Example #2
0
        public ManifestSignatureInformation VerifySignature(X509RevocationFlag revocationFlag, X509RevocationMode revocationMode)
        {
            XmlElement element = this.m_manifestXml.SelectSingleNode("//ds:Signature", this.m_namespaceManager) as XmlElement;

            if (element == null)
            {
                return(new ManifestSignatureInformation(this.m_manifest, null, null));
            }
            base.LoadXml(element);
            StrongNameSignatureInformation   strongNameSignature   = this.VerifyStrongNameSignature(element);
            AuthenticodeSignatureInformation authenticodeSignature = null;

            if (strongNameSignature.VerificationResult != SignatureVerificationResult.BadDigest)
            {
                authenticodeSignature = this.VerifyAuthenticodeSignature(element, revocationFlag, revocationMode);
            }
            else
            {
                authenticodeSignature = new AuthenticodeSignatureInformation(SignatureVerificationResult.ContainingSignatureInvalid);
            }
            return(new ManifestSignatureInformation(this.m_manifest, strongNameSignature, authenticodeSignature));
        }