Ejemplo n.º 1
0
        // -------------------- IterateSignatureDefinitions --------------------
        /// <summary>
        ///   Interates through the SignatureDefinition contained in a given
        ///   XPS document displaying and updating the signature properties
        ///   through a user dialog.</summary>
        /// <param name="signatureDialog">
        ///   The user dialog to use in displaying and
        ///   updating the signature information.</param>
        /// <param name="xpsDocument">
        ///   The XPS document containing the signature information.</param>
        public void IterateSignatureDefinitions(
            SignatureDialog signatureDialog, XpsDocument xpsDocument)
        {
            IXpsFixedDocumentSequenceReader docSeq =
                xpsDocument.FixedDocumentSequenceReader;

            // For every FixedDocument in the XPS document.
            foreach (IXpsFixedDocumentReader doc in docSeq.FixedDocuments)
            {
                // For every SignatureDefinition in each FixedDocument.
                foreach (XpsSignatureDefinition signature in
                         doc.SignatureDefinitions)
                {
                    SignatureDisplayItem item =
                        signatureDialog.AddSignatureItem(signature);

                    // Signatures are bound to signature definitions by GUID.
                    // If the SignatureDefintion SpotId is the same as the
                    // SignatureId, the signature is signing that definition.

                    // For every signature in the XPS document.
                    foreach (XpsDigitalSignature sig in xpsDocument.Signatures)
                    {
                        if (sig.Id != null && sig.Id == signature.SpotId)
                        {
                            X509Certificate2 cert =
                                sig.SignerCertificate as X509Certificate2;
                            item.Signer =
                                cert.GetNameInfo(X509NameType.SimpleName, false);
                            item.IsSigned = true;
                        }
                    } // end:foreach (XpsDigitalSignature
                }     // end:foreach (XpsSignatureDefinition
            }         // end:foreach (IXpsFixedDocumentReader
        }             // end:IterateSignatureDefinitions()
Ejemplo n.º 2
0
        public SignatureDisplayItem AddSignatureItem(XpsSignatureDefinition signatureDefintion)
        {
            SignatureDisplayItem item = new SignatureDisplayItem();

            if (signatureDefintion != null)
            {
                item.Request  = signatureDefintion.RequestedSigner;
                item.Intent   = signatureDefintion.Intent;
                item.SignBy   = signatureDefintion.SignBy.ToString();
                item.Location = signatureDefintion.SigningLocale;
                item.SigId    = signatureDefintion.SpotId;
            }
            this.SignatureList.Items.Add(item);
            return(item);
        }
Ejemplo n.º 3
0
        }             // end:IterateSignatureDefinitions()

        // ------------------------- IterateSignatures ------------------------
        /// <summary>
        ///   Interates through signatures that are not associated with
        ///   a SignatureDefinition.</summary>
        /// <param name="signatureDialog">
        ///   The user dialog to use in displaying and
        ///   updating the signature information.</param>
        /// <param name="xpsDocument">
        ///   The XPS document containing the signature information.</param>
        public void IterateSignatures(
            SignatureDialog signatureDialog, XpsDocument xpsDocument)
        {
            bool found = false;
            IXpsFixedDocumentSequenceReader docSeq =
                xpsDocument.FixedDocumentSequenceReader;

            // For every signature in the XPS document.
            foreach (XpsDigitalSignature sig in xpsDocument.Signatures)
            {
                found = false;

                // For every FixedDocument in the XPS document.
                foreach (IXpsFixedDocumentReader doc in docSeq.FixedDocuments)
                {
                    // For every SignatureDefinition in each FixedDocument.
                    foreach (XpsSignatureDefinition signature in
                             doc.SignatureDefinitions)
                    {
                        if (sig.Id != null && sig.Id == signature.SpotId)
                        {
                            found = true;
                            break;
                        }
                    }//end:foreach (XpsSignatureDefinition

                    if (found)
                    {
                        break;
                    }
                }// end:foreach (IXpsFixedDocument

                if (!found)
                {
                    SignatureDisplayItem item =
                        signatureDialog.AddSignatureItem(null);
                    X509Certificate2 cert =
                        sig.SignerCertificate as X509Certificate2;
                    item.Signer =
                        cert.GetNameInfo(X509NameType.SimpleName, false);
                    item.IsSigned = true;
                }
            } // end:foreach (XpsDigitalSignature
        }     // end:IterateSignatures()
Ejemplo n.º 4
0
        private void SignCommandHandler(object sender, RoutedEventArgs e)
        {
            SignatureDisplayItem item = SignatureList.SelectedItem as SignatureDisplayItem;

            if (item != null && item.IsSigned)
            {
                System.Windows.MessageBox.Show("This definition is already signed.");
                return;
            }
            X509Certificate cert = PromptForSignature();

            if (cert != null)
            {
                Guid?spotID = null;
                if (item != null)
                {
                    spotID = item.SigId;
                }
                _signatureUtilities.SignXps(_xpsDocument, cert, spotID);
                InitializeSignatureDisplay();
            }
        }