Verify PDF Digital Signatures in C#

void VerifyPDFSignature()
{
    PdfSignature ps = new PdfSignature("");

    ps.LoadPdfDocument("signedFile.pdf");

    Console.WriteLine("Certification level: " + ps.DocumentProperties.CertificationLevel);
    Console.WriteLine("Number of signatures: " + ps.DocumentProperties.DigitalSignatures.Count);
    
    //verify every digital signature form the PDF document
    foreach (PdfSignatureInfo csi in ps.DocumentProperties.DigitalSignatures)
    {
      Console.WriteLine("Signature type: " + csi.SignatureBytes);
      Console.WriteLine("Signature name: " + csi.SignatureName);
      Console.WriteLine("Signature Reason: " + csi.SigningReason);
      Console.WriteLine("Hash Algorithm: " + csi.HashAlgorithm);
      Console.WriteLine("Digest Algorithm: " + csi.DigestAlgorithm);
      Console.WriteLine("Signature Algorithm: " + csi.SignatureAlgorithm);
      Console.WriteLine("Certificate subject:" + csi.SignatureCertificate.Subject);
      Console.WriteLine("Certificate issued by:" + csi.SignatureCertificate.Issuer);
      Console.WriteLine("Certificate will expire on: " + csi.SignatureCertificate.NotAfter.ToString());
      Console.WriteLine("Certificate is valid: "
        + DigitalCertificate.VerifyDigitalCertificate(csi.SignatureCertificate, VerificationType.CRL));

      Console.WriteLine("Signature Bytes: " + csi.SignatureBytes.Length);
      Console.WriteLine("Signature Hash: " + csi.SignatureHash.Length;
      Console.WriteLine("Signature Is Valid: " + csi.SignatureIsValid.ToString());
      Console.WriteLine("Signature Time: " + csi.SignatureTime.ToLocalTime().ToString());
      Console.WriteLine("Is Timestamped: " + csi.SignatureIsTimestamped);

    if (csi.SignatureIsTimestamped == true)
      {
        Console.WriteLine("Hash Algorithm: " + csi.TimestampInfo.HashAlgorithm.FriendlyName);
        Console.WriteLine("Is TimestampAltered: " + csi.TimestampInfo.IsTimestampAltered.ToString());
        Console.WriteLine("TimestampSerial Number: " + csi.TimestampInfo.SerialNumber);
        Console.WriteLine("TSA Certificate: " + csi.TimestampInfo.TsaCertificate.Subject);
      }
    }
}

See also: