private static byte[] ComputeHashFromManifest(XmlDocument manifestDom) { return(SignedCmiManifest.ComputeHashFromManifest(manifestDom, false)); }
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); }
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); } } } } }