diff --git a/Digital Signature/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files.slnx b/Digital Signature/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files.slnx new file mode 100644 index 00000000..12475b3f --- /dev/null +++ b/Digital Signature/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files.slnx @@ -0,0 +1,3 @@ + + + diff --git a/Digital Signature/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Data/TestCert.pdf.p7s b/Digital Signature/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Data/TestCert.pdf.p7s new file mode 100644 index 00000000..e8e2456b Binary files /dev/null and b/Digital Signature/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Data/TestCert.pdf.p7s differ diff --git a/Digital Signature/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files.csproj b/Digital Signature/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files.csproj new file mode 100644 index 00000000..85ddcbe8 --- /dev/null +++ b/Digital Signature/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files.csproj @@ -0,0 +1,16 @@ + + + + Exe + net8.0 + Extract_PDF_Content_and_Certificate_Metadata_from_p7m_Files + enable + enable + + + + + + + + diff --git a/Digital Signature/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Program.cs b/Digital Signature/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Program.cs new file mode 100644 index 00000000..f7696590 --- /dev/null +++ b/Digital Signature/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Extract-PDF-Content-and-Certificate-Metadata-from-p7m-Files/Program.cs @@ -0,0 +1,59 @@ +using System.Security.Cryptography; +using System.Security.Cryptography.Pkcs; +using System.Security.Cryptography.X509Certificates; + +namespace ConsoleApp +{ + internal class Program + { + static void Main(string[] args) + { + // Load the signed CMS (assumes signedCmsBytes contains the Signed CMS data) + byte[] signedCmsBytes = File.ReadAllBytes("../../../TestCert.pdf.p7s"); + + SignedCms signedCms = new SignedCms(); + + // Decode the Signed CMS data + signedCms.Decode(signedCmsBytes); + + // Verify the signature without considering the certificate chain + signedCms.CheckSignature(true); + + // Extract the original content + byte[] originalMessage = signedCms.ContentInfo.Content; + File.WriteAllBytes("D://Decoded.pdf", originalMessage); + + // Extract signer information + foreach (SignerInfo signerInfo in signedCms.SignerInfos) + { + // Get the signing certificate + X509Certificate2 signerCertificate = signerInfo.Certificate; + + // Extract signer's name + string signerName = signerCertificate?.Subject ?? "Unknown Signer"; + Console.WriteLine($"Signer Name: {signerName}"); + + // Extract signing date (signing time attribute) + Pkcs9SigningTime signingTime = null; + foreach (var data in from CryptographicAttributeObject attr in signerInfo.SignedAttributes + from AsnEncodedData data in attr.Values + where data is Pkcs9SigningTime + select data) + { + signingTime = (Pkcs9SigningTime)data; + break; + } + + if (signingTime != null) + { + Console.WriteLine($"Signing Time: {signingTime.SigningTime}"); + } + else + { + Console.WriteLine("Signing Time: Not available in the attributes."); + } + } + } + } + +}