From 5a3affbe2c1e3f691378d9bd8c50c9c5c24abdba Mon Sep 17 00:00:00 2001 From: Srihariharan Date: Fri, 20 Sep 2024 16:03:03 +0530 Subject: [PATCH] 911183: Update the github sample. --- .../Data/Input.pdf | Bin 34022 -> 17052 bytes .../Program.cs | 45 ++++++++++++++++-- .../Enable-LTV-PDF-signature/Data/PDF.pfx | Bin 0 -> 2843 bytes .../Enable-LTV-PDF-signature.csproj | 2 +- .../.NET/Enable-LTV-PDF-signature/Program.cs | 33 ++++++++++--- 5 files changed, 70 insertions(+), 10 deletions(-) create mode 100644 Digital Signature/Enable-LTV-PDF-signature/.NET/Enable-LTV-PDF-signature/Data/PDF.pfx diff --git a/Digital Signature/Create-LTV-when-signing-PDF-documents-externally/.NET/Create-LTV-when-signing-PDF-documents-externally/Data/Input.pdf b/Digital Signature/Create-LTV-when-signing-PDF-documents-externally/.NET/Create-LTV-when-signing-PDF-documents-externally/Data/Input.pdf index fc8a7cc5fc509a958c9475f3af30b35036df69b3..6d10bb53b5aa3b1945a209170f002cd98ac0b6f0 100644 GIT binary patch literal 17052 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 CLy9y2 literal 34022 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 Ls=E5S@p1tG?1J7Y diff --git a/Digital Signature/Create-LTV-when-signing-PDF-documents-externally/.NET/Create-LTV-when-signing-PDF-documents-externally/Program.cs b/Digital Signature/Create-LTV-when-signing-PDF-documents-externally/.NET/Create-LTV-when-signing-PDF-documents-externally/Program.cs index c4587559..c9b30676 100644 --- a/Digital Signature/Create-LTV-when-signing-PDF-documents-externally/.NET/Create-LTV-when-signing-PDF-documents-externally/Program.cs +++ b/Digital Signature/Create-LTV-when-signing-PDF-documents-externally/.NET/Create-LTV-when-signing-PDF-documents-externally/Program.cs @@ -7,21 +7,41 @@ using System.Security.Cryptography.Pkcs; using System.Security.Cryptography.X509Certificates; + //Get the stream from the document. FileStream documentStream = new FileStream(Path.GetFullPath(@"Data/Input.pdf"), FileMode.Open, FileAccess.Read); //Load an existing PDF document. -PdfLoadedDocument loadedDocument = new PdfLoadedDocument(documentStream); +PdfLoadedDocument document = new PdfLoadedDocument(documentStream); + +//Get the page of the existing PDF document. +PdfLoadedPage loadedPage = document.Pages[0] as PdfLoadedPage; + +//Create a new PDF signature without PdfCertificate instance. +PdfSignature signature = new PdfSignature(document, loadedPage, null, "Signature1"); + +//Hook up the ComputeHash event. +signature.ComputeHash += Signature_ComputeHash; + +//Save the document into stream +MemoryStream stream = new MemoryStream(); +document.Save(stream); +//Close the document +document.Close(true); + + +//Load an existing PDF stream.. +PdfLoadedDocument loadedDocument = new PdfLoadedDocument(stream); //Gets the first signature field of the PDF document PdfLoadedSignatureField signatureField = loadedDocument.Form.Fields[0] as PdfLoadedSignatureField; -PdfSignature signature = signatureField.Signature; +PdfSignature pdfSignature = signatureField.Signature; //Create X509Certificate2 from your certificate to create a long-term validity. X509Certificate2 x509 = new X509Certificate2(Path.GetFullPath(@"Data/PDF.pfx"), "syncfusion"); //Create LTV with your public certificates. -signature.CreateLongTermValidity(new List { x509 }); +pdfSignature.CreateLongTermValidity(new List { x509 }); //Create file stream. using (FileStream outputFileStream = new FileStream(Path.GetFullPath(@"Output/Output.pdf"), FileMode.Create, FileAccess.ReadWrite)) @@ -34,3 +54,22 @@ loadedDocument.Close(true); +void Signature_ComputeHash(object sender, PdfSignatureEventArgs ars) +{ + //Get the document bytes + byte[] documentBytes = ars.Data; + + SignedCms signedCms = new SignedCms(new ContentInfo(documentBytes), detached: true); + + //Compute the signature using the specified digital ID file and the password + X509Certificate2 certificate = new X509Certificate2(Path.GetFullPath(@"Data/PDF.pfx"), "syncfusion"); + CmsSigner cmsSigner = new CmsSigner(certificate); + + //Set the digest algorithm SHA256 + cmsSigner.DigestAlgorithm = new Oid("2.16.840.1.101.3.4.2.1"); + + signedCms.ComputeSignature(cmsSigner); + + //Embed the encoded digital signature to the PDF document + ars.SignedData = signedCms.Encode(); +} \ No newline at end of file diff --git a/Digital Signature/Enable-LTV-PDF-signature/.NET/Enable-LTV-PDF-signature/Data/PDF.pfx b/Digital Signature/Enable-LTV-PDF-signature/.NET/Enable-LTV-PDF-signature/Data/PDF.pfx new file mode 100644 index 0000000000000000000000000000000000000000..cc69dcf45ecb47bbfcffae402c55dda398dfab85 GIT binary patch literal 2843 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 ez>7GaC!~kbd?D3Qf)&|Ro~ - + Always diff --git a/Digital Signature/Enable-LTV-PDF-signature/.NET/Enable-LTV-PDF-signature/Program.cs b/Digital Signature/Enable-LTV-PDF-signature/.NET/Enable-LTV-PDF-signature/Program.cs index 372217a5..4c6a88bb 100644 --- a/Digital Signature/Enable-LTV-PDF-signature/.NET/Enable-LTV-PDF-signature/Program.cs +++ b/Digital Signature/Enable-LTV-PDF-signature/.NET/Enable-LTV-PDF-signature/Program.cs @@ -6,18 +6,39 @@ using Syncfusion.Pdf.Parsing; using Syncfusion.Pdf.Security; -//Get the stream from the document. -FileStream documentStream = new FileStream(Path.GetFullPath(@"Data/Input.pdf"), FileMode.Open, FileAccess.Read); +//Creates a new PDF document. +PdfDocument document = new PdfDocument(); -//Load an existing PDF document. -PdfLoadedDocument loadedDocument = new PdfLoadedDocument(documentStream); +//Adds a new page. +PdfPageBase page = document.Pages.Add(); + +//Create graphics for the page. +PdfGraphics graphics = page.Graphics; + +//Creates a certificate instance from PFX file with private key. +FileStream certificateStream = new FileStream(Path.GetFullPath(@"Data/PDF.pfx"), FileMode.Open, FileAccess.Read); +PdfCertificate pdfCert = new PdfCertificate(certificateStream, "DigitalPass123"); + +//Creates a digital signature. +PdfSignature signature = new PdfSignature(document, page, pdfCert, "Signature"); +signature.Settings.CryptographicStandard = CryptographicStandard.CADES; +signature.Settings.DigestAlgorithm = DigestAlgorithm.SHA256; + +//Save the document into stream +MemoryStream stream = new MemoryStream(); +document.Save(stream); +//Close the document +document.Close(true); + +//Load an existing PDF stream. +PdfLoadedDocument loadedDocument = new PdfLoadedDocument(stream); //Gets the first signature field of the PDF document PdfLoadedSignatureField signatureField = loadedDocument.Form.Fields[0] as PdfLoadedSignatureField; -PdfSignature signature = signatureField.Signature; +PdfSignature pdfSignature = signatureField.Signature; //Enable LTV on Signature. -signature.EnableLtv = true; +pdfSignature.EnableLtv = true; //Create file stream.