public static void Main() { // NOTE: // When used in trial mode, the library imposes some restrictions. // Please visit http://bitmiracle.com/pdf-library/trial-restrictions.aspx // for more information. StringBuilder sb = new StringBuilder(); using (PdfDocument pdf = new PdfDocument(@"..\Sample Data\signed.pdf")) { PdfControl field = pdf.GetControls().FirstOrDefault(c => c.Type == PdfWidgetType.Signature); if (field == null) { Console.WriteLine("Document does not contain signature fields"); return; } PdfSignature signature = ((PdfSignatureField)field).Signature; PdfSignatureContents contents = signature.Contents; sb.AppendFormat("Signed part is intact: {0}\n", contents.VerifyDigest()); DateTime signingTime = signature.SigningTime ?? DateTime.MinValue; sb.AppendFormat("Signed on: {0}\n", signingTime.ToShortDateString()); var timestampToken = contents.GetTimestampToken(); if (timestampToken != null) { sb.AppendFormat("Embedded timestamp: {0}\n", timestampToken.GenerationTime); if (timestampToken.TimestampAuthority != null) { sb.AppendFormat("Timestamp authority: {0}\n", timestampToken.TimestampAuthority.Name); } sb.AppendFormat("Timestamp is intact: {0}\n\n", contents.VerifyTimestamp()); } else { sb.AppendLine(); } if (contents.CheckHasEmbeddedOcsp()) { sb.AppendLine("Signature has OCSP embedded."); checkRevocation(signature, sb, PdfCertificateRevocationCheckMode.EmbeddedOcsp); } if (contents.CheckHasEmbeddedCrl()) { sb.AppendLine("Signature has CRL embedded."); checkRevocation(signature, sb, PdfCertificateRevocationCheckMode.EmbeddedCrl); } checkRevocation(signature, sb, PdfCertificateRevocationCheckMode.OnlineOcsp); checkRevocation(signature, sb, PdfCertificateRevocationCheckMode.OnlineCrl); } Console.WriteLine(sb.ToString()); }
public static void Main() { // NOTE: // When used in trial mode, the library imposes some restrictions. // Please visit http://bitmiracle.com/pdf-library/trial-restrictions.aspx // for more information. StringBuilder sb = new StringBuilder(); using (PdfDocument pdf = new PdfDocument(@"..\Sample Data\signed.pdf")) { PdfControl control = pdf.GetControls().FirstOrDefault(c => c.Type == PdfWidgetType.Signature); if (control == null) { Console.WriteLine("Document does not contain signature fields"); return; } PdfSignatureField field = (PdfSignatureField)control; sb.AppendFormat("Signature field is invisible: {0}\n", isInvisible(field)); PdfSignature signature = field.Signature; sb.AppendFormat("Signed by: {0}\n", signature.Name); sb.AppendFormat("Signing time: {0}\n", signature.SigningTime); sb.AppendFormat("Signed at: {0}\n", signature.Location); sb.AppendFormat("Reason for signing: {0}\n", signature.Reason); sb.AppendFormat("Signer's contact: {0}\n", signature.ContactInfo); PdfSignatureContents contents = signature.Contents; sb.AppendFormat("Has OCSP embedded: {0}\n", contents.CheckHasEmbeddedOcsp()); sb.AppendFormat("Has CRL embedded: {0}\n", contents.CheckHasEmbeddedCrl()); PdfSignatureCertificate certificate = contents.GetSigningCertificate(); sb.AppendLine(); sb.AppendLine("== Signing certificate:"); sb.AppendFormat("Name: {0}\n", certificate.Name); sb.AppendFormat("Algorithm: {0}\n", certificate.AlgorithmName); sb.AppendFormat("Subject DN: {0}\n", certificate.Subject.Name); sb.AppendFormat("Issuer DN: {0}\n", certificate.Issuer.Name); sb.AppendFormat("Serial number: {0}\n", certificate.SerialNumber); sb.AppendFormat("Valid from {0} up to {1}\n", certificate.ValidFrom, certificate.ValidUpto); sb.AppendFormat("Timestamp Authority URL: {0}\n", certificate.GetTimestampAuthorityUrl()); PdfSignatureCertificate issuer = contents.GetIssuerCertificateFor(certificate); sb.AppendLine(); sb.AppendLine("== Issuer certificate:"); sb.AppendFormat("Subject DN: {0}\n", issuer.Subject.Name); sb.AppendFormat("Issuer DN: {0}\n", issuer.Issuer.Name); sb.AppendFormat("Serial number: {0}\n", issuer.SerialNumber); } Console.WriteLine(sb.ToString()); }
private static void checkRevocation(PdfSignature signature, StringBuilder sb, PdfCertificateRevocationCheckMode mode) { PdfSignatureContents contents = signature.Contents; DateTime signingTime = signature.SigningTime ?? DateTime.MinValue; foreach (DateTime time in new DateTime[] { signingTime, DateTime.UtcNow }) { bool revoked = contents.CheckIfRevoked(mode, time); string status = revoked ? "Revoked" : "Valid"; string date = time.ToShortDateString(); sb.AppendFormat("Checking using {0} mode: {1} on {2}\n", mode, status, date); } sb.AppendLine(); }