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();
        }