public static OpenXmlPowerToolsDocument Insert(OpenXmlPowerToolsDocument doc, IEnumerable <string> certificateList) { using (OpenXmlMemoryStreamDocument streamDoc = new OpenXmlMemoryStreamDocument(doc)) { using (Package package = streamDoc.GetPackage()) { foreach (string digitalCertificate in certificateList) { X509Certificate x509Certificate = X509Certificate2.CreateFromCertFile(digitalCertificate); PackageDigitalSignatureManager digitalSigntaureManager = new PackageDigitalSignatureManager(package); digitalSigntaureManager.CertificateOption = CertificateEmbeddingOption.InSignaturePart; System.Collections.Generic.List <Uri> partsToSign = new System.Collections.Generic.List <Uri>(); //Adds each part to the list, except relationships parts. foreach (PackagePart openPackagePart in package.GetParts()) { if (!PackUriHelper.IsRelationshipPartUri(openPackagePart.Uri)) { partsToSign.Add(openPackagePart.Uri); } } List <PackageRelationshipSelector> relationshipSelectors = new List <PackageRelationshipSelector>(); //Creates one selector for each package-level relationship, based on id foreach (PackageRelationship relationship in package.GetRelationships()) { PackageRelationshipSelector relationshipSelector = new PackageRelationshipSelector(relationship.SourceUri, PackageRelationshipSelectorType.Id, relationship.Id); relationshipSelectors.Add(relationshipSelector); } digitalSigntaureManager.Sign(partsToSign, x509Certificate, relationshipSelectors); } } return(streamDoc.GetModifiedDocument()); } }
public static void Sign(Package package, X509Certificate2 certificate) { var dsm = new PackageDigitalSignatureManager(package) { CertificateOption = CertificateEmbeddingOption.InSignaturePart }; List <Uri> parts = package.GetParts() .Select(part => part.Uri) .Where(uri => !PackUriHelper.IsRelationshipPartUri(uri)) .ToList(); dsm.Sign(parts, certificate); }
public void IsRelationshipPartUriTest2() { Uri uri = new Uri("/test/uri", UriKind.Relative); PackUriHelper.IsRelationshipPartUri(uri); }
public void IsRelationshipPartUriTest() { Assert.IsFalse(PackUriHelper.IsRelationshipPartUri(new Uri("/_rels/Whatever", UriKind.Relative))); Assert.IsTrue(PackUriHelper.IsRelationshipPartUri(new Uri("/_rels/Whatever.rels", UriKind.Relative))); }