Exemplo n.º 1
0
        private static void AuthenticodeSignLicenseDom(XmlDocument licenseDom, System.Deployment.Internal.CodeSigning.CmiManifestSigner signer, string timeStampUrl)
        {
            if (signer.Certificate.PublicKey.Key.GetType() != typeof(RSACryptoServiceProvider))
            {
                throw new NotSupportedException();
            }
            System.Deployment.Internal.CodeSigning.ManifestSignedXml xml = new System.Deployment.Internal.CodeSigning.ManifestSignedXml(licenseDom)
            {
                SigningKey = signer.Certificate.PrivateKey
            };
            xml.SignedInfo.CanonicalizationMethod = "http://www.w3.org/2001/10/xml-exc-c14n#";
            xml.KeyInfo.AddClause(new RSAKeyValue(signer.Certificate.PublicKey.Key as RSA));
            xml.KeyInfo.AddClause(new KeyInfoX509Data(signer.Certificate, signer.IncludeOption));
            Reference reference = new Reference {
                Uri = ""
            };

            reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
            reference.AddTransform(new XmlDsigExcC14NTransform());
            xml.AddReference(reference);
            xml.ComputeSignature();
            XmlElement node = xml.GetXml();

            node.SetAttribute("Id", "AuthenticodeSignature");
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(licenseDom.NameTable);

            nsmgr.AddNamespace("r", "urn:mpeg:mpeg21:2003:01-REL-R-NS");
            (licenseDom.SelectSingleNode("r:license/r:issuer", nsmgr) as XmlElement).AppendChild(licenseDom.ImportNode(node, true));
            if ((timeStampUrl != null) && (timeStampUrl.Length != 0))
            {
                TimestampSignedLicenseDom(licenseDom, timeStampUrl);
            }
            licenseDom.DocumentElement.ParentNode.InnerXml = "<msrel:RelData xmlns:msrel=\"http://schemas.microsoft.com/windows/rel/2005/reldata\">" + licenseDom.OuterXml + "</msrel:RelData>";
        }
Exemplo n.º 2
0
        private static XmlDocument CreateLicenseDom(System.Deployment.Internal.CodeSigning.CmiManifestSigner signer, XmlElement principal, byte[] hash)
        {
            XmlDocument document = new XmlDocument {
                PreserveWhitespace = true
            };

            document.LoadXml("<r:license xmlns:r=\"urn:mpeg:mpeg21:2003:01-REL-R-NS\" xmlns:as=\"http://schemas.microsoft.com/windows/pki/2005/Authenticode\"><r:grant><as:ManifestInformation><as:assemblyIdentity /></as:ManifestInformation><as:SignedBy/><as:AuthenticodePublisher><as:X509SubjectName>CN=dummy</as:X509SubjectName></as:AuthenticodePublisher></r:grant><r:issuer></r:issuer></r:license>");
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable);

            nsmgr.AddNamespace("r", "urn:mpeg:mpeg21:2003:01-REL-R-NS");
            nsmgr.AddNamespace("as", "http://schemas.microsoft.com/windows/pki/2005/Authenticode");
            XmlElement element = document.SelectSingleNode("r:license/r:grant/as:ManifestInformation/as:assemblyIdentity", nsmgr) as XmlElement;

            element.RemoveAllAttributes();
            foreach (XmlAttribute attribute in principal.Attributes)
            {
                element.SetAttribute(attribute.Name, attribute.Value);
            }
            XmlElement element2 = document.SelectSingleNode("r:license/r:grant/as:ManifestInformation", nsmgr) as XmlElement;

            element2.SetAttribute("Hash", (hash.Length == 0) ? "" : BytesToHexString(hash, 0, hash.Length));
            element2.SetAttribute("Description", (signer.Description == null) ? "" : signer.Description);
            element2.SetAttribute("Url", (signer.DescriptionUrl == null) ? "" : signer.DescriptionUrl);
            XmlElement element3 = document.SelectSingleNode("r:license/r:grant/as:AuthenticodePublisher/as:X509SubjectName", nsmgr) as XmlElement;

            element3.InnerText = signer.Certificate.SubjectName.Name;
            return(document);
        }
Exemplo n.º 3
0
        internal void Sign(System.Deployment.Internal.CodeSigning.CmiManifestSigner signer, string timeStampUrl)
        {
            this.m_strongNameSignerInfo   = null;
            this.m_authenticodeSignerInfo = null;
            if ((signer == null) || (signer.StrongNameKey == null))
            {
                throw new ArgumentNullException("signer");
            }
            RemoveExistingSignature(this.m_manifestDom);
            if ((signer.Flag & System.Deployment.Internal.CodeSigning.CmiManifestSignerFlag.DontReplacePublicKeyToken) == System.Deployment.Internal.CodeSigning.CmiManifestSignerFlag.None)
            {
                ReplacePublicKeyToken(this.m_manifestDom, signer.StrongNameKey);
            }
            XmlDocument licenseDom = null;

            if (signer.Certificate != null)
            {
                InsertPublisherIdentity(this.m_manifestDom, signer.Certificate);
                licenseDom = CreateLicenseDom(signer, this.ExtractPrincipalFromManifest(), ComputeHashFromManifest(this.m_manifestDom));
                AuthenticodeSignLicenseDom(licenseDom, signer, timeStampUrl);
            }
            StrongNameSignManifestDom(this.m_manifestDom, licenseDom, signer);
        }
Exemplo n.º 4
0
        private static void StrongNameSignManifestDom(XmlDocument manifestDom, XmlDocument licenseDom, System.Deployment.Internal.CodeSigning.CmiManifestSigner signer)
        {
            RSA strongNameKey = signer.StrongNameKey as RSA;

            if (strongNameKey == null)
            {
                throw new NotSupportedException();
            }
            XmlNamespaceManager nsmgr = new XmlNamespaceManager(manifestDom.NameTable);

            nsmgr.AddNamespace("asm", "urn:schemas-microsoft-com:asm.v1");
            XmlElement elem = manifestDom.SelectSingleNode("asm:assembly", nsmgr) as XmlElement;

            if (elem == null)
            {
                throw new CryptographicException(-2146762749);
            }
            System.Deployment.Internal.CodeSigning.ManifestSignedXml xml = new System.Deployment.Internal.CodeSigning.ManifestSignedXml(elem)
            {
                SigningKey = signer.StrongNameKey
            };
            xml.SignedInfo.CanonicalizationMethod = "http://www.w3.org/2001/10/xml-exc-c14n#";
            xml.KeyInfo.AddClause(new RSAKeyValue(strongNameKey));
            if (licenseDom != null)
            {
                xml.KeyInfo.AddClause(new KeyInfoNode(licenseDom.DocumentElement));
            }
            xml.KeyInfo.Id = "StrongNameKeyInfo";
            Reference reference = new Reference {
                Uri = ""
            };

            reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());
            reference.AddTransform(new XmlDsigExcC14NTransform());
            xml.AddReference(reference);
            xml.ComputeSignature();
            XmlElement newChild = xml.GetXml();

            newChild.SetAttribute("Id", "StrongNameSignature");
            elem.AppendChild(newChild);
        }
Exemplo n.º 5
0
 internal void Sign(System.Deployment.Internal.CodeSigning.CmiManifestSigner signer)
 {
     this.Sign(signer, null);
 }