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()); } }
static void AddSignableItems( PackageRelationship relationship, List <Uri> partsToSign, List <PackageRelationshipSelector> relationshipsToSign) { PackageRelationshipSelector selector = new PackageRelationshipSelector( relationship.SourceUri, PackageRelationshipSelectorType.Id, relationship.Id); relationshipsToSign.Add(selector); if (relationship.TargetMode == TargetMode.Internal) { PackagePart part = relationship.Package.GetPart( PackUriHelper.ResolvePartUri( relationship.SourceUri, relationship.TargetUri)); if (partsToSign.Contains(part.Uri) == false) { partsToSign.Add(part.Uri); foreach (PackageRelationship childRelationship in part.GetRelationships()) { AddSignableItems(childRelationship, partsToSign, relationshipsToSign); } } } }
static void CreateListOfSignableItems(PackageRelationship relationship, List <Uri> PartstobeSigned, List <PackageRelationshipSelector> SignableReleationships) { // This function adds the releation to SignableReleationships. And then it gets the part based on the releationship. Parts URI gets added to the PartstobeSigned list. PackageRelationshipSelector selector = new PackageRelationshipSelector(relationship.SourceUri, PackageRelationshipSelectorType.Id, relationship.Id); SignableReleationships.Add(selector); if (relationship.TargetMode == TargetMode.Internal) { PackagePart part = relationship.Package.GetPart(PackUriHelper.ResolvePartUri(relationship.SourceUri, relationship.TargetUri)); if (PartstobeSigned.Contains(part.Uri) == false) { PartstobeSigned.Add(part.Uri); // GetRelationships Function: Returns a Collection Of all the releationships that are owned by the part. foreach (PackageRelationship childRelationship in part.GetRelationships()) { CreateListOfSignableItems(childRelationship, PartstobeSigned, SignableReleationships); } } } }
private static void AddSignableItems(PackageRelationship relationship, ICollection <Uri> partsToSign, ICollection <PackageRelationshipSelector> relationshipsToSign) { var selector = new PackageRelationshipSelector(relationship.SourceUri, PackageRelationshipSelectorType.Id, relationship.Id); relationshipsToSign.Add(selector); if (relationship.TargetMode != TargetMode.Internal) { return; } var part = relationship.Package.GetPart( PackUriHelper.ResolvePartUri( relationship.SourceUri, relationship.TargetUri)); if (partsToSign.Contains(part.Uri)) { return; } partsToSign.Add(part.Uri); foreach (var childRelationship in part.GetRelationships()) { AddSignableItems(childRelationship, partsToSign, relationshipsToSign); } }
private void CreateListOfSignableItems(PackageRelationship relationship, List <Uri> PartstobeSigned, List <PackageRelationshipSelector> SignableReleationships) { try { PackageRelationshipSelector packageRelationshipSelector = new PackageRelationshipSelector(relationship.SourceUri, PackageRelationshipSelectorType.Id, relationship.Id); SignableReleationships.Add(packageRelationshipSelector); if (relationship.TargetMode == TargetMode.Internal) { PackagePart part = relationship.Package.GetPart(PackUriHelper.ResolvePartUri(relationship.SourceUri, relationship.TargetUri)); if (!PartstobeSigned.Contains(part.Uri)) { PartstobeSigned.Add(part.Uri); foreach (PackageRelationship packageRelationship in part.GetRelationships()) { this.CreateListOfSignableItems(packageRelationship, PartstobeSigned, SignableReleationships); } } } } catch (Exception exception) { throw new Exception(exception.Message); } }
public void T044_PackageRelationshipSelectorFromPackage() { var docName = "plain.docx"; var ba = File.ReadAllBytes(docName); const string DocumentRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"; using (MemoryStream ms = new MemoryStream()) { ms.Write(ba, 0, ba.Length); using (Package package = Package.Open(ms, FileMode.Open)) { var mainPartUri = new Uri("/", UriKind.Relative); PackageRelationshipSelector prs = new PackageRelationshipSelector(mainPartUri, PackageRelationshipSelectorType.Type, DocumentRelationshipType); var cnt = prs.Select(package).Count(); Assert.Equal(cnt, 1); } } }
public void T045_PackageRelationshipSelectorFromPackageUsingId() { var docName = "plain.docx"; var ba = File.ReadAllBytes(docName); using (MemoryStream ms = new MemoryStream()) { ms.Write(ba, 0, ba.Length); using (Package package = Package.Open(ms, FileMode.Open)) { var mainPartUri = new Uri("/", UriKind.Relative); PackageRelationshipSelector prs = new PackageRelationshipSelector(mainPartUri, PackageRelationshipSelectorType.Id, "rId1"); var cnt = prs.Select(package).Count(); Assert.Equal(cnt, 1); } } }
public void T046_PackageRelationshipSelectorFromPartUsingId() { var docName = "plain.docx"; var ba = File.ReadAllBytes(docName); const string DocumentRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument"; using (MemoryStream ms = new MemoryStream()) { ms.Write(ba, 0, ba.Length); using (Package package = Package.Open(ms, FileMode.Open)) { PackageRelationship docPackageRelationship = package .GetRelationshipsByType(DocumentRelationshipType) .FirstOrDefault(); if (docPackageRelationship != null) { Uri documentUri = PackUriHelper .ResolvePartUri( new Uri("/", UriKind.Relative), docPackageRelationship.TargetUri); Assert.Throws<ArgumentNullException>(() => new PackageRelationshipSelector(null, PackageRelationshipSelectorType.Id, "rId1")); Assert.Throws<ArgumentNullException>(() => new PackageRelationshipSelector(documentUri, PackageRelationshipSelectorType.Id, null)); PackageRelationshipSelector prs = new PackageRelationshipSelector(documentUri, PackageRelationshipSelectorType.Id, "rId1"); var cnt = prs.Select(package).Count(); Assert.Equal(cnt, 1); } } } }
public void T043_PackageRelationshipSelector() { var docName = "plain.docx"; var ba = TestFileLib.GetByteArray(docName); const string StylesRelationshipType = "http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles"; using (MemoryStream ms = new MemoryStream()) { ms.Write(ba, 0, ba.Length); using (Package package = Package.Open(ms, FileMode.Open)) { var mainPartUri = new Uri("/word/document.xml", UriKind.Relative); PackageRelationshipSelector prs = new PackageRelationshipSelector(mainPartUri, PackageRelationshipSelectorType.Type, StylesRelationshipType); var cnt = prs.Select(package).Count(); Assert.Equal(cnt, 1); } } }