public void EncryptedHtml()
        {
            //ExStart
            //ExFor:HtmlLoadOptions.#ctor(String)
            //ExSummary:Shows how to encrypt an Html document and then open it using a password.
            // Create and sign an encrypted html document from an encrypted .docx
            CertificateHolder certificateHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");

            SignOptions signOptions = new SignOptions
            {
                Comments           = "Comment",
                SignTime           = DateTime.Now,
                DecryptionPassword = "******"
            };

            string inputFileName  = MyDir + "Encrypted.docx";
            string outputFileName = ArtifactsDir + "HtmlLoadOptions.EncryptedHtml.html";

            DigitalSignatureUtil.Sign(inputFileName, outputFileName, certificateHolder, signOptions);

            // This .html document will need a password to be decrypted, opened and have its contents accessed
            // The password is specified by HtmlLoadOptions.Password
            HtmlLoadOptions loadOptions = new HtmlLoadOptions("docPassword");

            Assert.AreEqual(signOptions.DecryptionPassword, loadOptions.Password);

            Document doc = new Document(outputFileName, loadOptions);

            Assert.AreEqual("Test encrypted document.", doc.GetText().Trim());
            //ExEnd
        }
Ejemplo n.º 2
0
        public void SignDocument()
        {
            //ExStart
            //ExFor:CertificateHolder
            //ExFor:CertificateHolder.Create(String, String)
            //ExFor:DigitalSignatureUtil.Sign(Stream, Stream, CertificateHolder, SignOptions)
            //ExFor:SignOptions.Comments
            //ExFor:SignOptions.SignTime
            //ExSummary:Shows how to sign documents using certificate holder and sign options.
            CertificateHolder certificateHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");

            SignOptions signOptions = new SignOptions {
                Comments = "My comment", SignTime = DateTime.Now
            };

            Stream streamIn  = new FileStream(MyDir + "Document.DigitalSignature.docx", FileMode.Open);
            Stream streamOut =
                new FileStream(MyDir + @"\Artifacts\Document.DigitalSignature.docx", FileMode.OpenOrCreate);

            DigitalSignatureUtil.Sign(streamIn, streamOut, certificateHolder, signOptions);
            //ExEnd

            streamIn.Dispose();
            streamOut.Dispose();
        }
        /// <summary>
        /// Signs the document obtained at the source location and saves it to the specified destination.
        /// </summary>
        private static void SignDocument(string srcDocumentPath, string dstDocumentPath,
                                         SignPersonTestClass signPersonInfo, string certificatePath, string certificatePassword)
        {
            // Create new document instance based on a test file that we need to sign.
            Document        document = new Document(srcDocumentPath);
            DocumentBuilder builder  = new DocumentBuilder(document);

            // Add info about responsible person who sign a document.
            SignatureLineOptions signatureLineOptions =
                new SignatureLineOptions {
                Signer = signPersonInfo.Name, SignerTitle = signPersonInfo.Position
            };

            // Add signature line for responsible person who sign a document.
            SignatureLine signatureLine = builder.InsertSignatureLine(signatureLineOptions).SignatureLine;

            signatureLine.Id = signPersonInfo.PersonId;

            // Save a document with line signatures into temporary file for future signing.
            builder.Document.Save(dstDocumentPath);

            // Create holder of certificate instance based on your personal certificate.
            // This is the test certificate generated for this example.
            CertificateHolder certificateHolder = CertificateHolder.Create(certificatePath, certificatePassword);

            // Link our signature line with personal signature.
            SignOptions signOptions = new SignOptions
            {
                SignatureLineId    = signPersonInfo.PersonId,
                SignatureLineImage = signPersonInfo.Image
            };

            // Sign a document which contains signature line with personal certificate.
            DigitalSignatureUtil.Sign(dstDocumentPath, dstDocumentPath, certificateHolder, signOptions);
        }
        /// <summary>
        /// Creates a copy of a source document signed using provided signee information and X509 certificate.
        /// </summary>
        private static void SignDocument(string srcDocumentPath, string dstDocumentPath,
                                         Signee signeeInfo, string certificatePath, string certificatePassword)
        {
            Document        document = new Document(srcDocumentPath);
            DocumentBuilder builder  = new DocumentBuilder(document);

            // Configure and insert a signature line, an object in the document that will display a signature that we sign it with.
            SignatureLineOptions signatureLineOptions = new SignatureLineOptions
            {
                Signer      = signeeInfo.Name,
                SignerTitle = signeeInfo.Position
            };

            SignatureLine signatureLine = builder.InsertSignatureLine(signatureLineOptions).SignatureLine;

            signatureLine.Id = signeeInfo.PersonId;

            // First, we will save an unsigned version of our document.
            builder.Document.Save(dstDocumentPath);

            CertificateHolder certificateHolder = CertificateHolder.Create(certificatePath, certificatePassword);

            SignOptions signOptions = new SignOptions
            {
                SignatureLineId    = signeeInfo.PersonId,
                SignatureLineImage = signeeInfo.Image
            };

            // Overwrite the unsigned document we saved above with a version signed using the certificate.
            DigitalSignatureUtil.Sign(dstDocumentPath, dstDocumentPath, certificateHolder, signOptions);
        }
Ejemplo n.º 5
0
        public void DetectDigitalSignatures()
        {
            //ExStart
            //ExFor:FileFormatUtil.DetectFileFormat(String)
            //ExFor:FileFormatInfo
            //ExFor:FileFormatInfo.LoadFormat
            //ExFor:FileFormatInfo.HasDigitalSignature
            //ExSummary:Shows how to use the FileFormatUtil class to detect the document format and presence of digital signatures.
            // Use a FileFormatInfo instance to verify that a document is not digitally signed.
            FileFormatInfo info = FileFormatUtil.DetectFileFormat(MyDir + "Document.docx");

            Assert.AreEqual(".docx", FileFormatUtil.LoadFormatToExtension(info.LoadFormat));
            Assert.False(info.HasDigitalSignature);

            CertificateHolder certificateHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw", null);

            DigitalSignatureUtil.Sign(MyDir + "Document.docx", ArtifactsDir + "File.DetectDigitalSignatures.docx",
                                      certificateHolder, new SignOptions()
            {
                SignTime = DateTime.Now
            });

            // Use a new FileFormatInstance to confirm that it is signed.
            info = FileFormatUtil.DetectFileFormat(ArtifactsDir + "File.DetectDigitalSignatures.docx");

            Assert.True(info.HasDigitalSignature);

            // We can load and access the signatures of a signed document in a collection like this.
            Assert.AreEqual(1, DigitalSignatureUtil.LoadSignatures(ArtifactsDir + "File.DetectDigitalSignatures.docx").Count);
            //ExEnd
        }
        public void EncryptedHtml()
        {
            //ExStart
            //ExFor:HtmlLoadOptions.#ctor(String)
            //ExSummary:Shows how to encrypt an Html document, and then open it using a password.
            // Create and sign an encrypted HTML document from an encrypted .docx.
            CertificateHolder certificateHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");

            SignOptions signOptions = new SignOptions
            {
                Comments           = "Comment",
                SignTime           = DateTime.Now,
                DecryptionPassword = "******"
            };

            string inputFileName  = MyDir + "Encrypted.docx";
            string outputFileName = ArtifactsDir + "HtmlLoadOptions.EncryptedHtml.html";

            DigitalSignatureUtil.Sign(inputFileName, outputFileName, certificateHolder, signOptions);

            // To load and read this document, we will need to pass its decryption
            // password using a HtmlLoadOptions object.
            HtmlLoadOptions loadOptions = new HtmlLoadOptions("docPassword");

            Assert.AreEqual(signOptions.DecryptionPassword, loadOptions.Password);

            Document doc = new Document(outputFileName, loadOptions);

            Assert.AreEqual("Test encrypted document.", doc.GetText().Trim());
            //ExEnd
        }
        public void SingDocumentWithPasswordDecrypring()
        {
            //ExStart
            //ExFor:CertificateHolder
            //ExFor:SignOptions.DecryptionPassword
            //ExSummary:Shows how to sign encrypted document file.
            string outputFileName = ArtifactsDir + "Document.Encrypted.docx";

            Document doc = new Document(MyDir + "Document.Encrypted.docx", new LoadOptions("docPassword"));

            // Create certificate holder from a file.
            CertificateHolder certificateHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");

            SignOptions signOptions = new SignOptions
            {
                Comments           = "Comment",
                SignTime           = DateTime.Now,
                DecryptionPassword = "******"
            };

            // Digitally sign encrypted with "docPassword" document in the specified path.
            DigitalSignatureUtil.Sign(doc.OriginalFileName, outputFileName, certificateHolder, signOptions);
            //ExEnd

            // Open encrypted document from a file.
            Document signedDoc = new Document(outputFileName, new LoadOptions("docPassword"));

            // Check that encrypted document was successfully signed.
            DigitalSignatureCollection signatures = signedDoc.DigitalSignatures;

            if (signatures.IsValid && (signatures.Count > 0))
            {
                Assert.Pass(); //The document was signed successfully
            }
        }
        public void SingStreamDocumentWithPasswordDecrypring()
        {
            // Create certificate holder from a file.
            CertificateHolder ch = CertificateHolder.Create(MyDir + "certificate.pfx", "123456");

            //By Stream
            Stream docInStream  = new FileStream(MyDir + "Document.Encrypted.docx", FileMode.Open);
            Stream docOutStream = new FileStream(MyDir + @"\Artifacts\Document.Encrypted.docx", FileMode.OpenOrCreate);

            // Digitally sign encrypted with "docPassword" document in the specified path.
            DigitalSignatureUtil.Sign(docInStream, docOutStream, ch, "Comment", DateTime.Now, "docPassword");

            // Open encrypted document from a file.
            Document signedDoc = new Document(docOutStream, new LoadOptions("docPassword"));

            // Check that encrypted document was successfully signed.
            DigitalSignatureCollection signatures = signedDoc.DigitalSignatures;

            if (signatures.IsValid && (signatures.Count > 0))
            {
                docInStream.Dispose();
                docOutStream.Dispose();

                Assert.Pass(); //The document was signed successfully
            }
        }
        public void SingDocumentWithPasswordDecrypring()
        {
            //ExStart
            //ExFor:DigitalSignatureUtil.Sign(String, String, CertificateHolder, String, DateTime)
            //ExFor:DigitalSignatureUtil.Sign(Stream, Stream, CertificateHolder, String, DateTime)
            //ExSummary:Shows how to sign encrypted documents
            // Create certificate holder from a file.
            CertificateHolder ch = CertificateHolder.Create(MyDir + "certificate.pfx", "123456");

            //ByDocument
            Document doc = new Document(MyDir + "Document.Encrypted.docx", new LoadOptions("docPassword"));
            string   outputDocFileName = MyDir + @"\Artifacts\Document.Encrypted.docx";

            // Digitally sign encrypted with "docPassword" document in the specified path.
            DigitalSignatureUtil.Sign(doc.OriginalFileName, outputDocFileName, ch, "Comment", DateTime.Now, "docPassword");

            // Open encrypted document from a file.
            Document signedDoc = new Document(outputDocFileName, new LoadOptions("docPassword"));

            // Check that encrypted document was successfully signed.
            DigitalSignatureCollection signatures = signedDoc.DigitalSignatures;

            if (signatures.IsValid && (signatures.Count > 0))
            {
                Assert.Pass(); //The document was signed successfully
            }
        }
        public void SignDocument()
        {
            //ExStart:SingDocument
            CertificateHolder certHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");

            DigitalSignatureUtil.Sign(MyDir + "Digitally signed.docx", ArtifactsDir + "Document.Signed.docx",
                                      certHolder);
            //ExEnd:SingDocument
        }
        public static void SimpleDocumentSigning(String dataDir)
        {
            // ExStart:SimpleDocumentSigning
            CertificateHolder certHolder = CertificateHolder.Create(dataDir + "signature.pfx", "signature");

            DigitalSignatureUtil.Sign(dataDir + "Document.Signed.docx", dataDir + "Document.Signed_out.docx", certHolder);

            // ExEnd:SimpleDocumentSigning
            Console.WriteLine("\nDocument is signed successfully.\nFile saved at " + dataDir + "Document.Signed_out.docx");
        }
        public void IncorrectPasswordForDecrypring()
        {
            CertificateHolder ch = CertificateHolder.Create(MyDir + "certificate.pfx", "123456");

            //ByDocument
            Document doc = new Document(MyDir + "Document.Encrypted.docx", new LoadOptions("docPassword"));
            string   outputDocFileName = MyDir + @"\Artifacts\Document.Encrypted.docx";

            // Digitally sign encrypted with "docPassword" document in the specified path.
            DigitalSignatureUtil.Sign(doc.OriginalFileName, outputDocFileName, ch, "Comment", DateTime.Now, "docPassword1");
        }
Ejemplo n.º 13
0
        public void SignDocumentObfuscationBug()
        {
            CertificateHolder ch = CertificateHolder.Create(File.ReadAllBytes(MyDir + "morzal.pfx"), "aw");

            Document doc            = new Document(MyDir + "Structured document tags.docx");
            string   outputFileName = ArtifactsDir + "DigitalSignatureUtil.SignDocumentObfuscationBug.doc";

            SignOptions signOptions = new SignOptions {
                Comments = "Comment", SignTime = DateTime.Now
            };

            DigitalSignatureUtil.Sign(doc.OriginalFileName, outputFileName, ch, signOptions);
        }
        public void SigningEncryptedDocument()
        {
            //ExStart:SigningEncryptedDocument
            SignOptions signOptions = new SignOptions {
                DecryptionPassword = "******"
            };

            CertificateHolder certHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");

            DigitalSignatureUtil.Sign(MyDir + "Digitally signed.docx", ArtifactsDir + "Document.EncryptedDocument.docx",
                                      certHolder, signOptions);
            //ExEnd:SigningEncryptedDocument
        }
        public void SignDocumentObfuscationBug()
        {
            CertificateHolder ch = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");

            Document doc            = new Document(MyDir + "TestRepeatingSection.docx");
            string   outputFileName = ArtifactsDir + "TestRepeatingSection.Signed.doc";

            SignOptions signOptions = new SignOptions {
                Comments = "Comment", SignTime = DateTime.Now
            };

            DigitalSignatureUtil.Sign(doc.OriginalFileName, outputFileName, ch, signOptions);
        }
        public static void SigningEncryptedDocument(String dataDir)
        {
            // ExStart:SigningEncryptedDocument

            SignOptions signOptions = new SignOptions();

            signOptions.DecryptionPassword = "******";

            CertificateHolder certHolder = CertificateHolder.Create(dataDir + "signature.pfx", "signature");

            DigitalSignatureUtil.Sign(dataDir + "Document.Signed.docx", dataDir + "Document.EncryptedDocument_out.docx", certHolder, signOptions);
            // ExEnd:SigningEncryptedDocument
            Console.WriteLine("\nDocument is signed with successfully.\nFile saved at " + dataDir + "Document.EncryptedDocument_out.docx");
        }
        public void IncorrectPasswordForDecrypring()
        {
            CertificateHolder certificateHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");

            Document doc            = new Document(MyDir + "Document.Encrypted.docx", new LoadOptions("docPassword"));
            string   outputFileName = MyDir + @"\Artifacts\Document.Encrypted.docx";

            SignOptions signOptions = new SignOptions {
                Comments = "Comment", SignTime = DateTime.Now, DecryptionPassword = "******"
            };

            // Digitally sign encrypted with "docPassword" document in the specified path.
            Assert.That(() => DigitalSignatureUtil.Sign(doc.OriginalFileName, outputFileName, certificateHolder, signOptions),
                        Throws.TypeOf <IncorrectPasswordException>(), "The document password is incorrect.");
        }
        public static void SigningExistingSignatureLine(String dataDir)
        {
            // ExStart:SigningExistingSignatureLine
            Document      doc           = new Document(dataDir + "Document.Signed.docx");
            SignatureLine signatureLine = ((Shape)doc.FirstSection.Body.GetChild(NodeType.Shape, 0, true)).SignatureLine;

            SignOptions signOptions = new SignOptions();

            signOptions.SignatureLineId    = signatureLine.Id;
            signOptions.SignatureLineImage = File.ReadAllBytes(dataDir + "SignatureImage.emf");

            CertificateHolder certHolder = CertificateHolder.Create(dataDir + "signature.pfx", "signature");

            DigitalSignatureUtil.Sign(dataDir + "Document.Signed.docx", dataDir + "Document.Signed.ExistingSignatureLine.docx", certHolder, signOptions);
            // ExEnd:SigningExistingSignatureLine

            Console.WriteLine("\nDocument is signed with existing SignatureLine successfully.\nFile saved at " + dataDir + "Document.Signed.ExistingSignatureLine.docx");
        }
Ejemplo n.º 19
0
        public void DigitallySignedPdfUsingCertificateHolder()
        {
            //ExStart:DigitallySignedPdfUsingCertificateHolder
            Document        doc     = new Document();
            DocumentBuilder builder = new DocumentBuilder(doc);

            builder.Writeln("Test Signed PDF.");

            PdfSaveOptions saveOptions = new PdfSaveOptions
            {
                DigitalSignatureDetails = new PdfDigitalSignatureDetails(
                    CertificateHolder.Create(MyDir + "morzal.pfx", "aw"), "reason", "location",
                    DateTime.Now)
            };

            doc.Save(ArtifactsDir + "WorkingWithPdfSaveOptions.DigitallySignedPdfUsingCertificateHolder.pdf", saveOptions);
            //ExEnd:DigitallySignedPdfUsingCertificateHolder
        }
Ejemplo n.º 20
0
        public void Create()
        {
            //ExStart
            //ExFor:CertificateHolder.Create(Byte[], SecureString)
            //ExFor:CertificateHolder.Create(Byte[], String)
            //ExFor:CertificateHolder.Create(String, String, String)
            //ExSummary:Shows how to create CertificateHolder objects.
            // Below are four ways of creating CertificateHolder objects.
            // 1 -  Load a PKCS #12 file into a byte array and apply its password:
            byte[] certBytes = File.ReadAllBytes(MyDir + "morzal.pfx");
            CertificateHolder.Create(certBytes, "aw");

            // 2 -  Load a PKCS #12 file into a byte array, and apply a secure password:
            SecureString password = new NetworkCredential("", "aw").SecurePassword;

            CertificateHolder.Create(certBytes, password);

            // If the certificate has private keys corresponding to aliases,
            // we can use the aliases to fetch their respective keys. First, we will check for valid aliases.
            using (FileStream certStream = new FileStream(MyDir + "morzal.pfx", FileMode.Open))
            {
                Pkcs12Store pkcs12Store = new Pkcs12Store(certStream, "aw".ToCharArray());
                IEnumerator enumerator  = pkcs12Store.Aliases.GetEnumerator();

                while (enumerator.MoveNext())
                {
                    if (enumerator.Current != null)
                    {
                        string currentAlias = enumerator.Current.ToString();
                        if (pkcs12Store.IsKeyEntry(currentAlias) && pkcs12Store.GetKey(currentAlias).Key.IsPrivate)
                        {
                            Console.WriteLine($"Valid alias found: {enumerator.Current}");
                        }
                    }
                }
            }

            // 3 -  Use a valid alias:
            CertificateHolder.Create(MyDir + "morzal.pfx", "aw", "c20be521-11ea-4976-81ed-865fbbfc9f24");

            // 4 -  Pass "null" as the alias in order to use the first available alias that returns a private key:
            CertificateHolder.Create(MyDir + "morzal.pfx", "aw", null);
            //ExEnd
        }
Ejemplo n.º 21
0
        public void PdfDigitalSignatureTimestamp()
        {
            //ExStart
            //ExFor:PdfDigitalSignatureDetails.TimestampSettings
            //ExFor:PdfDigitalSignatureTimestampSettings
            //ExFor:PdfDigitalSignatureTimestampSettings.#ctor
            //ExFor:PdfDigitalSignatureTimestampSettings.#ctor(String,String,String)
            //ExFor:PdfDigitalSignatureTimestampSettings.#ctor(String,String,String,TimeSpan)
            //ExFor:PdfDigitalSignatureTimestampSettings.Password
            //ExFor:PdfDigitalSignatureTimestampSettings.ServerUrl
            //ExFor:PdfDigitalSignatureTimestampSettings.Timeout
            //ExFor:PdfDigitalSignatureTimestampSettings.UserName
            //ExSummary:Shows how to sign a generated PDF and timestamp it using Aspose.Words.
            Document        doc     = new Document();
            DocumentBuilder builder = new DocumentBuilder(doc);

            builder.Writeln("Signed PDF contents.");

            // Create a digital signature for the document that we will save
            CertificateHolder certificateHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");
            PdfSaveOptions    options           = new PdfSaveOptions();

            options.DigitalSignatureDetails = new PdfDigitalSignatureDetails(certificateHolder, "Test Signing", "Aspose Office", DateTime.Now);

            // We can set a verified timestamp for our signature as well, with a valid timestamp authority
            options.DigitalSignatureDetails.TimestampSettings =
                new PdfDigitalSignatureTimestampSettings("https://freetsa.org/tsr", "JohnDoe", "MyPassword");

            // The default lifespan of the timestamp is 100 seconds
            Assert.AreEqual(100.0d, options.DigitalSignatureDetails.TimestampSettings.Timeout.TotalSeconds);

            // We can set our own timeout period via the constructor
            options.DigitalSignatureDetails.TimestampSettings =
                new PdfDigitalSignatureTimestampSettings("https://freetsa.org/tsr", "JohnDoe", "MyPassword", TimeSpan.FromMinutes(30));

            Assert.AreEqual(1800.0d, options.DigitalSignatureDetails.TimestampSettings.Timeout.TotalSeconds);
            Assert.AreEqual("https://freetsa.org/tsr", options.DigitalSignatureDetails.TimestampSettings.ServerUrl);
            Assert.AreEqual("JohnDoe", options.DigitalSignatureDetails.TimestampSettings.UserName);
            Assert.AreEqual("MyPassword", options.DigitalSignatureDetails.TimestampSettings.Password);

            doc.Save(ArtifactsDir + "PdfSaveOptions.PdfDigitalSignatureTimestamp.pdf");
            //ExEnd
        }
        public void SetSignatureProviderId()
        {
            //ExStart:SetSignatureProviderID
            Document doc = new Document(MyDir + "Signature line.docx");

            SignatureLine signatureLine =
                ((Shape)doc.FirstSection.Body.GetChild(NodeType.Shape, 0, true)).SignatureLine;

            SignOptions signOptions = new SignOptions
            {
                ProviderId = signatureLine.ProviderId, SignatureLineId = signatureLine.Id
            };

            CertificateHolder certHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");

            DigitalSignatureUtil.Sign(MyDir + "Digitally signed.docx",
                                      ArtifactsDir + "SignDocuments.SetSignatureProviderId.docx", certHolder, signOptions);
            //ExEnd:SetSignatureProviderID
        }
        public void SignDocument()
        {
            //ExStart
            //ExFor:CertificateHolder
            //ExFor:CertificateHolder.Create(String, String)
            //ExFor:DigitalSignatureUtil.Sign(Stream, Stream, CertificateHolder, SignOptions)
            //ExFor:SignOptions.Comments
            //ExFor:SignOptions.SignTime
            //ExSummary:Shows how to digitally sign documents.
            // Create an X.509 certificate from a PKCS#12 store, which should contain a private key.
            CertificateHolder certificateHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");

            // Create a comment and date which will be applied with our new digital signature.
            SignOptions signOptions = new SignOptions
            {
                Comments = "My comment",
                SignTime = DateTime.Now
            };

            // Take an unsigned document from the local file system via a file stream,
            // then create a signed copy of it determined by the filename of the output file stream.
            using (Stream streamIn = new FileStream(MyDir + "Document.docx", FileMode.Open))
            {
                using (Stream streamOut = new FileStream(ArtifactsDir + "DigitalSignatureUtil.SignDocument.docx", FileMode.OpenOrCreate))
                {
                    DigitalSignatureUtil.Sign(streamIn, streamOut, certificateHolder, signOptions);
                }
            }
            //ExEnd

            using (Stream stream = new FileStream(ArtifactsDir + "DigitalSignatureUtil.SignDocument.docx", FileMode.Open))
            {
                DigitalSignatureCollection digitalSignatures = DigitalSignatureUtil.LoadSignatures(stream);
                Assert.AreEqual(1, digitalSignatures.Count);

                DigitalSignature signature = digitalSignatures[0];

                Assert.True(signature.IsValid);
                Assert.AreEqual(DigitalSignatureType.XmlDsig, signature.SignatureType);
                Assert.AreEqual(signOptions.SignTime.ToString(), signature.SignTime.ToString());
                Assert.AreEqual("My comment", signature.Comments);
            }
        }
        public void Create()
        {
            //ExStart
            //ExFor:CertificateHolder.Create(Byte[], SecureString)
            //ExFor:CertificateHolder.Create(Byte[], String)
            //ExFor:CertificateHolder.Create(String, String, String)
            //ExSummary:Shows how to create CertificateHolder objects.
            // Load a PKCS #12 file into a byte array and apply its password to create the CertificateHolder
            byte[] certBytes = File.ReadAllBytes(MyDir + "morzal.pfx");
            CertificateHolder.Create(certBytes, "aw");

            // Pass a SecureString which contains the password instead of a normal string
            SecureString password = new NetworkCredential("", "aw").SecurePassword;

            CertificateHolder.Create(certBytes, password);

            // If the certificate has private keys corresponding to aliases, we can use the aliases to fetch their respective keys
            // First, we will check for valid aliases like this
            using (FileStream certStream = new FileStream(MyDir + "morzal.pfx", FileMode.Open))
            {
                Pkcs12Store pkcs12Store = new Pkcs12Store(certStream, "aw".ToCharArray());
                IEnumerator enumerator  = pkcs12Store.Aliases.GetEnumerator();

                while (enumerator.MoveNext())
                {
                    if (enumerator.Current != null)
                    {
                        string currentAlias = enumerator.Current.ToString();
                        if (pkcs12Store.IsKeyEntry(currentAlias) && pkcs12Store.GetKey(currentAlias).Key.IsPrivate)
                        {
                            Console.WriteLine($"Valid alias found: {enumerator.Current}");
                        }
                    }
                }
            }

            // For this file, we will use an alias found above
            CertificateHolder.Create(MyDir + "morzal.pfx", "aw", "c20be521-11ea-4976-81ed-865fbbfc9f24");

            // If we leave the alias null, then the first possible alias that retrieves a private key will be used
            CertificateHolder.Create(MyDir + "morzal.pfx", "aw", null);
            //ExEnd
        }
        public void SigningExistingSignatureLine()
        {
            //ExStart:SigningExistingSignatureLine
            Document doc = new Document(MyDir + "Signature line.docx");

            SignatureLine signatureLine =
                ((Shape)doc.FirstSection.Body.GetChild(NodeType.Shape, 0, true)).SignatureLine;

            SignOptions signOptions = new SignOptions
            {
                SignatureLineId    = signatureLine.Id,
                SignatureLineImage = File.ReadAllBytes(ImagesDir + "Enhanced Windows MetaFile.emf")
            };

            CertificateHolder certHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");

            DigitalSignatureUtil.Sign(MyDir + "Digitally signed.docx",
                                      ArtifactsDir + "SignDocuments.SigningExistingSignatureLine.docx", certHolder, signOptions);
            //ExEnd:SigningExistingSignatureLine
        }
        public void IncorrectDecryptionPassword()
        {
            CertificateHolder certificateHolder = CertificateHolder.Create(MyDir + "morzal.pfx", "aw");

            Document doc            = new Document(MyDir + "Encrypted.docx", new LoadOptions("docPassword"));
            string   outputFileName = ArtifactsDir + "DigitalSignatureUtil.IncorrectDecryptionPassword.docx";

            SignOptions signOptions = new SignOptions
            {
                Comments           = "Comment",
                SignTime           = DateTime.Now,
                DecryptionPassword = "******"
            };

#if NET462 || NETCOREAPP2_1 || JAVA
            Assert.That(
                () => DigitalSignatureUtil.Sign(doc.OriginalFileName, outputFileName, certificateHolder, signOptions),
                Throws.TypeOf <IncorrectPasswordException>(), "The document password is incorrect.");
#endif
        }
        public static void SetSignatureProviderID(String dataDir)
        {
            // ExStart:SetSignatureProviderID
            Document      doc           = new Document(dataDir + "Document.Signed.docx");
            SignatureLine signatureLine = ((Shape)doc.FirstSection.Body.GetChild(NodeType.Shape, 0, true)).SignatureLine;

            //Set signature and signature line provider ID
            SignOptions signOptions = new SignOptions();

            signOptions.ProviderId      = signatureLine.ProviderId;
            signOptions.SignatureLineId = signatureLine.Id;

            CertificateHolder certHolder = CertificateHolder.Create(dataDir + "signature.pfx", "signature");

            DigitalSignatureUtil.Sign(dataDir + "Document.Signed.docx", dataDir + "Document.Signed_out.docx", certHolder, signOptions);

            // ExEnd:SetSignatureProviderID

            Console.WriteLine("\nProvider ID of signature is set successfully.\nFile saved at " + dataDir + "Document.Signed_out.docx");
        }
        public static void Run()
        {
            // ExStart:DigitallySignedPdfUsingCertificateHolder
            // The path to the documents directory.
            string dataDir = RunExamples.GetDataDir_LoadingAndSaving();

            // Create a simple document from scratch.
            Document        doc     = new Document();
            DocumentBuilder builder = new DocumentBuilder(doc);

            builder.Writeln("Test Signed PDF.");

            PdfSaveOptions options = new PdfSaveOptions();

            options.DigitalSignatureDetails = new PdfDigitalSignatureDetails(
                CertificateHolder.Create(dataDir + "CioSrv1.pfx", "cinD96..arellA"), "reason", "location", DateTime.Now);
            doc.Save(dataDir + @"DigitallySignedPdfUsingCertificateHolder.Signed_out.pdf", options);
            // ExEnd:DigitallySignedPdfUsingCertificateHolder
            Console.WriteLine("\nDigitally signed PDF file created successfully.\nFile saved at " + dataDir);
        }
        public static void CreatingAndSigningNewSignatureLine(String dataDir)
        {
            // ExStart:CreatingAndSigningNewSignatureLine
            Document        doc           = new Document();
            DocumentBuilder builder       = new DocumentBuilder(doc);
            SignatureLine   signatureLine = builder.InsertSignatureLine(new SignatureLineOptions()).SignatureLine;

            doc.Save(dataDir + "Document.NewSignatureLine.docx");

            SignOptions signOptions = new SignOptions();

            signOptions.SignatureLineId    = signatureLine.Id;
            signOptions.SignatureLineImage = File.ReadAllBytes(dataDir + "SignatureImage.emf");

            CertificateHolder certHolder = CertificateHolder.Create(dataDir + "signature.pfx", "signature");

            DigitalSignatureUtil.Sign(dataDir + "Document.NewSignatureLine.docx", dataDir + "Document.NewSignatureLine.docx_out.docx", certHolder, signOptions);
            // ExEnd:CreatingAndSigningNewSignatureLine

            Console.WriteLine("\nDocument is created and Signed with new SignatureLine successfully.\nFile saved at " + dataDir + "Document.NewSignatureLine.docx_out.docx");
        }
        public void SignEx()
        {
            //ExStart
            //ExFor:DigitalSignatureUtil.Sign(String, String, CertificateHolder, String, DateTime)
            //ExFor:DigitalSignatureUtil.Sign(Stream, Stream, CertificateHolder, String, DateTime)
            //ExSummary:Shows how to sign documents.
            CertificateHolder ch = CertificateHolder.Create(MyDir + "MyPkcs12.pfx", "My password");

            //By String
            Document doc = new Document(MyDir + "Document.doc");
            string   outputDocFileName = MyDir + "Document.Signed.doc";

            DigitalSignatureUtil.Sign(doc.OriginalFileName, outputDocFileName, ch, "My comment", DateTime.Now);

            //By Stream
            Stream docInStream  = new FileStream(MyDir + "Document.doc", FileMode.Open);
            Stream docOutStream = new FileStream(MyDir + "Document.Signed.doc", FileMode.OpenOrCreate);

            DigitalSignatureUtil.Sign(docInStream, docOutStream, ch, "My comment", DateTime.Now);
            //ExEnd
        }