Exemplo n.º 1
0
 private static byte[] ComputeHashFromManifest(XmlDocument manifestDom)
 {
     return(SignedCmiManifest.ComputeHashFromManifest(manifestDom, false));
 }
Exemplo n.º 2
0
        internal void Sign(CmiManifestSigner signer, string timeStampUrl)
        {
            this.m_strongNameSignerInfo   = (CmiStrongNameSignerInfo)null;
            this.m_authenticodeSignerInfo = (CmiAuthenticodeSignerInfo)null;
            if (signer == null || signer.StrongNameKey == null)
            {
                throw new ArgumentNullException("signer");
            }
            SignedCmiManifest.RemoveExistingSignature(this.m_manifestDom);
            if ((signer.Flag & CmiManifestSignerFlag.DontReplacePublicKeyToken) == CmiManifestSignerFlag.None)
            {
                SignedCmiManifest.ReplacePublicKeyToken(this.m_manifestDom, signer.StrongNameKey);
            }
            XmlDocument licenseDom = (XmlDocument)null;

            if (signer.Certificate != null)
            {
                SignedCmiManifest.InsertPublisherIdentity(this.m_manifestDom, signer.Certificate);
                licenseDom = SignedCmiManifest.CreateLicenseDom(signer, this.ExtractPrincipalFromManifest(), SignedCmiManifest.ComputeHashFromManifest(this.m_manifestDom));
                SignedCmiManifest.AuthenticodeSignLicenseDom(licenseDom, signer, timeStampUrl);
            }
            SignedCmiManifest.StrongNameSignManifestDom(this.m_manifestDom, licenseDom, signer);
        }
Exemplo n.º 3
0
        private void VerifyHash(XmlNamespaceManager nsm)
        {
            new XmlDocument().PreserveWhitespace = true;
            XmlDocument manifestDom = (XmlDocument)this.m_manifestDom.Clone();
            XmlElement  xmlElement1 = manifestDom.SelectSingleNode("asm:assembly/ds:Signature/ds:KeyInfo/msrel:RelData/r:license/r:grant/as:ManifestInformation", nsm) as XmlElement;

            if (xmlElement1 == null)
            {
                throw new CryptographicException(-2146762749);
            }
            if (!xmlElement1.HasAttribute("Hash"))
            {
                throw new CryptographicException(-2146762749);
            }
            string attribute = xmlElement1.GetAttribute("Hash");

            if (attribute == null || attribute.Length == 0)
            {
                throw new CryptographicException(-2146762749);
            }
            XmlElement xmlElement2 = manifestDom.SelectSingleNode("asm:assembly/ds:Signature", nsm) as XmlElement;

            if (xmlElement2 == null)
            {
                throw new CryptographicException(-2146762749);
            }
            xmlElement2.ParentNode.RemoveChild((XmlNode)xmlElement2);
            byte[] bytes             = SignedCmiManifest.HexStringToBytes(xmlElement1.GetAttribute("Hash"));
            byte[] hashFromManifest1 = SignedCmiManifest.ComputeHashFromManifest(manifestDom);
            if (bytes.Length == 0 || bytes.Length != hashFromManifest1.Length)
            {
                byte[] hashFromManifest2 = SignedCmiManifest.ComputeHashFromManifest(manifestDom, true);
                if (bytes.Length == 0 || bytes.Length != hashFromManifest2.Length)
                {
                    throw new CryptographicException(-2146869232);
                }
                for (int index = 0; index < bytes.Length; ++index)
                {
                    if ((int)bytes[index] != (int)hashFromManifest2[index])
                    {
                        throw new CryptographicException(-2146869232);
                    }
                }
            }
            for (int index = 0; index < bytes.Length; ++index)
            {
                if ((int)bytes[index] != (int)hashFromManifest1[index])
                {
                    byte[] hashFromManifest2 = SignedCmiManifest.ComputeHashFromManifest(manifestDom, true);
                    if (bytes.Length == 0 || bytes.Length != hashFromManifest2.Length)
                    {
                        throw new CryptographicException(-2146869232);
                    }
                    for (index = 0; index < bytes.Length; ++index)
                    {
                        if ((int)bytes[index] != (int)hashFromManifest2[index])
                        {
                            throw new CryptographicException(-2146869232);
                        }
                    }
                }
            }
        }