From f23292ee5ecb9a36acc4f3e34a5b1609e08a54da Mon Sep 17 00:00:00 2001 From: Archie Miller <62433534+Archie-Miller@users.noreply.github.com> Date: Wed, 27 Mar 2024 11:36:44 -0600 Subject: [PATCH] Provide a signing solution that does not create digests for origin.psdor files --- src/OpenVsixSignTool.Core/OpcPackage.cs | 8 +++++ .../OpcPackageSignatureBuilder.cs | 32 ++++++++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/src/OpenVsixSignTool.Core/OpcPackage.cs b/src/OpenVsixSignTool.Core/OpcPackage.cs index 995b3c9..94bb2d0 100644 --- a/src/OpenVsixSignTool.Core/OpcPackage.cs +++ b/src/OpenVsixSignTool.Core/OpcPackage.cs @@ -240,6 +240,14 @@ private void SaveRelationships(OpcRelationships relationships) /// A builder instance for configuring and applying a signature. public OpcPackageSignatureBuilder CreateSignatureBuilder() => new OpcPackageSignatureBuilder(this); + /// + /// Creates a signature builder for applying a digital signature to the package, while ignoring + /// origin.psdor files + /// + /// A builder instance for configuring and applying a signature. + public OpcPackageSignatureBuilder CreateSignatureBuilderIgnoreOrigin() => + new OpcPackageSignatureBuilder( this, ignoreOrigin: true ); + /// /// Enumerates over all of the signatures in the package. /// diff --git a/src/OpenVsixSignTool.Core/OpcPackageSignatureBuilder.cs b/src/OpenVsixSignTool.Core/OpcPackageSignatureBuilder.cs index 0eaec4c..5f69fa8 100644 --- a/src/OpenVsixSignTool.Core/OpcPackageSignatureBuilder.cs +++ b/src/OpenVsixSignTool.Core/OpcPackageSignatureBuilder.cs @@ -12,11 +12,20 @@ public class OpcPackageSignatureBuilder { private readonly OpcPackage _package; private readonly List _enqueuedParts; + private readonly bool _ignoreOriginParts; internal OpcPackageSignatureBuilder(OpcPackage package) { _enqueuedParts = new List(); _package = package; + _ignoreOriginParts = false; + } + + internal OpcPackageSignatureBuilder( OpcPackage package, bool ignoreOrigin ) + { + _enqueuedParts = new List(); + _package = package; + _ignoreOriginParts = ignoreOrigin; } /// @@ -106,12 +115,25 @@ private static void PublishSignature(XmlDocument document, OpcPart signatureFile } _package.Flush(); - var allParts = new HashSet(_enqueuedParts) + HashSet allParts = new HashSet( _enqueuedParts ); + + if ( _ignoreOriginParts ) { - originFile, - _package.GetPart(_package.Relationships.DocumentUri), - _package.GetPart(originFile.Relationships.DocumentUri) - }; + allParts = new HashSet( _enqueuedParts ) + { + _package.GetPart(_package.Relationships.DocumentUri) + }; + } + else + { + allParts = new HashSet( _enqueuedParts ) + { + originFile, + _package.GetPart(_package.Relationships.DocumentUri), + _package.GetPart(originFile.Relationships.DocumentUri) + }; + } + return (allParts, signatureFile); } }