Ejemplo n.º 1
0
        CollectDependents(
            Dictionary <Uri, Uri> dependents,
            List <PackageRelationshipSelector> selectorList,
            XpsDigSigPartAlteringRestrictions restrictions
            )
        {
            UpdatePageCache();
            //
            // Add all pages
            //
            foreach (IXpsFixedPageReader reader in _pageCache)
            {
                (reader as XpsFixedPageReaderWriter).
                CollectSelfAndDependents(
                    dependents,
                    selectorList,
                    restrictions
                    );
            }

            //
            // Add DocumentStructure
            //
            EnsureDoucmentStructure();
            if (_documentStructure != null)
            {
                dependents[_documentStructure.Uri] = _documentStructure.Uri;
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// See IDigitalSignatureProvider
        /// </summary>
        void IDigitalSignatureProvider.SignDocument(DigitalSignature digitalSignature)
        {
            AssertIsSignable();

            XpsDigSigPartAlteringRestrictions reachRestrictions = XpsDigSigPartAlteringRestrictions.None;


            if (digitalSignature.IsDocumentPropertiesRestricted)
            {
                reachRestrictions |= XpsDigSigPartAlteringRestrictions.CoreMetadata;
            }

            // If additional signatures should invalidate this signature, we
            // need to sign the signature origin part
            if (digitalSignature.IsAddingSignaturesRestricted)
            {
                reachRestrictions |= XpsDigSigPartAlteringRestrictions.SignatureOrigin;
            }

            // a null guid means there was no associated spot, so create a guid
            if (digitalSignature.GuidID == null)
            {
                digitalSignature.GuidID = Guid.NewGuid();
            }

            XpsDigitalSignature xpsDigitalSignature =
                XpsDocument.SignDigitally(
                    digitalSignature.Certificate,
                    true,
                    reachRestrictions,
                    (Guid)digitalSignature.GuidID,
                    false  /* don't re-verify IsSignable, we've already done it */
                    );


            if (xpsDigitalSignature != null)
            {
                // Fill in relevant fields from the XPS signature
                digitalSignature.XpsDigitalSignature = xpsDigitalSignature;
                digitalSignature.SignatureState      = SignatureStatus.Valid;
                digitalSignature.SignedOn            = xpsDigitalSignature.SigningTime;

                // Save the simple name from the certificate as the subject name
                // in the signature
                digitalSignature.SubjectName =
                    digitalSignature.Certificate.GetNameInfo(
                        X509NameType.SimpleName,
                        false /* don't include issuer name */);

                // Add the new signature to the list (if it isn't already there).
                // That is a possibility since the first signature in a document
                // is always added as a signature definition and a signature.
                if (!DigitalSignatureList.Contains(digitalSignature))
                {
                    DigitalSignatureList.Add(digitalSignature);
                }
            }
        }
Ejemplo n.º 3
0
        CollectSelfAndDependents(
            Dictionary <Uri, Uri> dependentList,
            List <PackageRelationshipSelector> selectorList,
            XpsDigSigPartAlteringRestrictions restrictions
            )
        {
            //
            // Add this document
            //
            dependentList[Uri] = Uri;

            //
            // Add Signature Definition if it exists
            //
            PackagePart signatureDefinitionPart =
                CurrentXpsManager.GetSignatureDefinitionPart(Uri);

            //
            // Add Signature Definitions
            //
            selectorList.Add(new PackageRelationshipSelector(
                                 Uri,
                                 PackageRelationshipSelectorType.Type,
                                 XpsS0Markup.SignatureDefinitionRelationshipName
                                 )
                             );


            if (signatureDefinitionPart != null)
            {
                dependentList[signatureDefinitionPart.Uri] = signatureDefinitionPart.Uri;
            }
            //
            // Add Restricted Font relationship
            //
            selectorList.Add(new PackageRelationshipSelector(
                                 Uri,
                                 PackageRelationshipSelectorType.Type,
                                 XpsS0Markup.RestrictedFontRelationshipType
                                 )
                             );
            //
            // Add Document Structure relationship
            //
            selectorList.Add(new PackageRelationshipSelector(
                                 Uri,
                                 PackageRelationshipSelectorType.Type,
                                 XpsS0Markup.StructureRelationshipName
                                 )
                             );
            //
            // Add this documents dependants
            //
            CollectDependents(dependentList, selectorList, restrictions);
        }
Ejemplo n.º 4
0
        SignDigitally(
            X509Certificate certificate,
            bool embedCertificate,
            XpsDigSigPartAlteringRestrictions restrictions
            )
        {
            CheckDisposed();

            return(SignDigitally(
                       certificate,
                       embedCertificate,
                       restrictions,
                       null,
                       true
                       ));
        }
        CollectSelfAndDependents(
            Dictionary <Uri, Uri> dependentList,
            List <PackageRelationshipSelector> selectorList,
            XpsDigSigPartAlteringRestrictions restrictions
            )
        {
            //
            // Add my self
            //
            dependentList[Uri] = Uri;

            //
            //  Add my dependents
            //
            CollectDependents(dependentList, selectorList, restrictions);
        }
Ejemplo n.º 6
0
        SignDigitally(
            X509Certificate certificate,
            bool embedCertificate,
            XpsDigSigPartAlteringRestrictions restrictions,
            Guid id
            )
        {
            CheckDisposed();

            return(SignDigitally(
                       certificate,
                       embedCertificate,
                       restrictions,
                       XmlConvert.EncodeName(id.ToString()),
                       true
                       ));
        }
 CollectDependents(
     Dictionary <Uri, Uri> dependents,
     List <PackageRelationshipSelector> selectorList,
     XpsDigSigPartAlteringRestrictions restrictions
     )
 {
     UpdateDocumentCache();
     // Add all documents
     foreach (IXpsFixedDocumentReader reader in _documentCache)
     {
         (reader as XpsFixedDocumentReaderWriter).
         CollectSelfAndDependents(
             dependents,
             selectorList,
             restrictions);
     }
 }
Ejemplo n.º 8
0
        SignDigitally(
            X509Certificate certificate,
            bool embedCertificate,
            XpsDigSigPartAlteringRestrictions restrictions,
            String signatureId,
            bool testIsSignable
            )
        {
            if (null == certificate)
            {
                throw new ArgumentNullException("certificate");
            }

            if (CurrentXpsManager == null)
            {
                throw new InvalidOperationException(SR.Get(SRID.ReachPackaging_DocumentWasClosed));
            }
            if (testIsSignable && !IsSignable)
            {
                throw new InvalidOperationException(SR.Get(SRID.ReachPackaging_SigningDoesNotMeetPolicy));
            }
            EnsureSignatures();
            //
            // List of RelationshipSelectors that need to be signed
            //
            List <PackageRelationshipSelector> selectorList =
                new List <PackageRelationshipSelector>();

            //
            // This is being used as a Set class so the second Uri Value is irrelevent
            //
            Dictionary <Uri, Uri> dependentList = new Dictionary <Uri, Uri> ();

            CollectSelfAndDependents(dependentList, selectorList, restrictions);

            PackageDigitalSignature packSignature =
                CurrentXpsManager.Sign(dependentList.Keys,
                                       certificate,
                                       embedCertificate,
                                       selectorList,
                                       signatureId
                                       );

            return(AddSignature(packSignature));
        }
Ejemplo n.º 9
0
        CollectSelfAndDependents(
            Dictionary <Uri, Uri> dependentList,
            List <PackageRelationshipSelector> selectorList,
            XpsDigSigPartAlteringRestrictions restrictions
            )
        {
            (FixedDocumentSequenceReader as XpsFixedDocumentSequenceReaderWriter).CollectSelfAndDependents(
                dependentList,
                selectorList,
                restrictions);
            //
            // Add thumbnail
            //
            EnsureThumbnail();
            if (_thumbnail != null)
            {
                dependentList[_thumbnail.Uri] = _thumbnail.Uri;
            }

            //
            // Sign Starting part relationship
            //
            selectorList.Add(new PackageRelationshipSelector(
                                 MS.Internal.IO.Packaging.PackUriHelper.PackageRootUri,
                                 PackageRelationshipSelectorType.Type,
                                 XpsS0Markup.ReachPackageStartingPartRelationshipType
                                 )
                             );

            //
            // Add thumnail relationship
            //
            selectorList.Add(new PackageRelationshipSelector(
                                 MS.Internal.IO.Packaging.PackUriHelper.PackageRootUri,
                                 PackageRelationshipSelectorType.Type,
                                 XpsS0Markup.ThumbnailRelationshipName
                                 )
                             );
            //
            // Sign CoreMetadata type if the restriction flag is set
            //
            if ((restrictions & XpsDigSigPartAlteringRestrictions.CoreMetadata) != 0)
            {
                //We need to flush the package because the core properties are not written out
                //until the package is flushed
                CurrentXpsManager.MetroPackage.Flush();
                selectorList.Add(new PackageRelationshipSelector(
                                     MS.Internal.IO.Packaging.PackUriHelper.PackageRootUri,
                                     PackageRelationshipSelectorType.Type,
                                     XpsS0Markup.CorePropertiesRelationshipType
                                     )
                                 );
            }
            //
            // Add the Signiture Origin based on the restrictions
            //
            CurrentXpsManager.CollectSignitureOriginForSigning(selectorList, restrictions);
            //
            // Add the properties based on the restrictions
            //
            CurrentXpsManager.CollectPropertiesForSigning(dependentList, restrictions);
        }
Ejemplo n.º 10
0
 public void CollectSignitureOriginForSigning(List<PackageRelationshipSelector> selectorList, XpsDigSigPartAlteringRestrictions restrictions)
 {
     if ((restrictions & XpsDigSigPartAlteringRestrictions.SignatureOrigin) != XpsDigSigPartAlteringRestrictions.None)
     {
         Uri signatureOriginUri = this.GetSignatureOriginUri();
         selectorList.Add(new PackageRelationshipSelector(signatureOriginUri, PackageRelationshipSelectorType.Type, XpsS0Markup.DitialSignatureRelationshipType));
     }
 }
Ejemplo n.º 11
0
 public void CollectPropertiesForSigning(Dictionary<Uri, Uri> dependents, XpsDigSigPartAlteringRestrictions restrictions)
 {
     PackagePart documentPropertiesPart = this.GetDocumentPropertiesPart();
     if (((restrictions & XpsDigSigPartAlteringRestrictions.CoreMetadata) != XpsDigSigPartAlteringRestrictions.None) && (documentPropertiesPart != null))
     {
         dependents[documentPropertiesPart.Uri] = documentPropertiesPart.Uri;
     }
 }
Ejemplo n.º 12
0
 private XpsDigitalSignature SignDigitally(X509Certificate certificate, bool embedCertificate, XpsDigSigPartAlteringRestrictions restrictions, string signatureId, bool testIsSignable)
 {
     if (certificate == null)
     {
         throw new ArgumentNullException("certificate");
     }
     if (base.CurrentXpsManager == null)
     {
         throw new InvalidOperationException(SR.Get("ReachPackaging_DocumentWasClosed"));
     }
     if (testIsSignable && !this.IsSignable)
     {
         throw new InvalidOperationException(SR.Get("ReachPackaging_SigningDoesNotMeetPolicy"));
     }
     this.EnsureSignatures();
     List<PackageRelationshipSelector> selectorList = new List<PackageRelationshipSelector>();
     Dictionary<Uri, Uri> dependentList = new Dictionary<Uri, Uri>();
     this.CollectSelfAndDependents(dependentList, selectorList, restrictions);
     PackageDigitalSignature packSignature = base.CurrentXpsManager.Sign(dependentList.Keys, certificate, embedCertificate, selectorList, signatureId);
     return this.AddSignature(packSignature);
 }
Ejemplo n.º 13
0
 public XpsDigitalSignature SignDigitally(X509Certificate certificate, bool embedCertificate, XpsDigSigPartAlteringRestrictions restrictions, Guid id, bool testIsSignable)
 {
     this.CheckDisposed();
     return this.SignDigitally(certificate, embedCertificate, restrictions, XmlConvert.EncodeName(id.ToString()), testIsSignable);
 }
Ejemplo n.º 14
0
 public XpsDigitalSignature SignDigitally(X509Certificate certificate, bool embedCertificate, XpsDigSigPartAlteringRestrictions restrictions)
 {
     this.CheckDisposed();
     return this.SignDigitally(certificate, embedCertificate, restrictions, (string) null, true);
 }
Ejemplo n.º 15
0
 internal void CollectSelfAndDependents(Dictionary<Uri, Uri> dependentList, List<PackageRelationshipSelector> selectorList, XpsDigSigPartAlteringRestrictions restrictions)
 {
     (this.FixedDocumentSequenceReader as XpsFixedDocumentSequenceReaderWriter).CollectSelfAndDependents(dependentList, selectorList, restrictions);
     this.EnsureThumbnail();
     if (this._thumbnail != null)
     {
         dependentList[this._thumbnail.Uri] = this._thumbnail.Uri;
     }
     selectorList.Add(new PackageRelationshipSelector(PackUriHelper.PackageRootUri, PackageRelationshipSelectorType.Type, XpsS0Markup.ReachPackageStartingPartRelationshipType));
     selectorList.Add(new PackageRelationshipSelector(PackUriHelper.PackageRootUri, PackageRelationshipSelectorType.Type, XpsS0Markup.ThumbnailRelationshipName));
     if ((restrictions & XpsDigSigPartAlteringRestrictions.CoreMetadata) != XpsDigSigPartAlteringRestrictions.None)
     {
         base.CurrentXpsManager.MetroPackage.Flush();
         selectorList.Add(new PackageRelationshipSelector(PackUriHelper.PackageRootUri, PackageRelationshipSelectorType.Type, XpsS0Markup.CorePropertiesRelationshipType));
     }
     base.CurrentXpsManager.CollectSignitureOriginForSigning(selectorList, restrictions);
     base.CurrentXpsManager.CollectPropertiesForSigning(dependentList, restrictions);
 }