public static bool validatePDF(string filename, ref MessageReport msg) { try { X509CertificateParser parser = new X509CertificateParser(); if (certificates.Count() == 0) { certificates.Add(parser.ReadCertificate(new FileStream(ROOT1, FileMode.Open))); certificates.Add(parser.ReadCertificate(new FileStream(ROOT2, FileMode.Open))); certificates.Add(parser.ReadCertificate(new FileStream(ROOT3, FileMode.Open))); } PdfReader pdfReader = new PdfReader(filename); AcroFields acroFields = pdfReader.AcroFields; List <String> signatureNames = acroFields.GetSignatureNames(); msg.signaturesCount = signatureNames.Count(); if (signatureNames.Count == 0) { msg.StatusText = "Δεν βρέθηκαν ψηφιακές υπογραφές στο έγγραφο!"; return(false); } SignaturePermissions perms = null; MessageReport.Signature sigInfo = new MessageReport.Signature(); foreach (String name in signatureNames) { sigInfo = InspectSignature(acroFields, name, perms); UpdateSignatureResults(ref sigInfo); //produce human friendly result text msg.Signatures.Add(sigInfo); } msg.StatusText = String.Format("Ο έλεγχος ολοκληρώθηκε επιτυχώς. Βρέθηκαν {0} ψηφιακές υπογραφές στο έγγραφο!", msg.signaturesCount); return(true); } catch { return(false); } } //end validatePDF
private static PdfPKCS7 VerifySignature(AcroFields fields, String name, ref MessageReport.Signature sigInfo) { sigInfo.isCoveringWholeDocument = fields.SignatureCoversWholeDocument(name); PdfPKCS7 pkcs7 = fields.VerifySignature(name); sigInfo.isIntegral = pkcs7.Verify(); X509Certificate[] certs = pkcs7.SignCertificateChain; DateTime cal = pkcs7.SignDate; IList<VerificationException> errors = CertificateVerification.VerifyCertificates(certs, certificates, null, cal); if (errors == null) Console.WriteLine("Certificates verified against the KeyStore"); else foreach (object error in errors) Console.WriteLine(error); for (int i = 0; i < certs.Length; ++i) { X509Certificate cert = certs[i]; } X509Certificate signCert = certs[0]; X509Certificate issuerCert = (certs.Length > 1 ? certs[1] : null); sigInfo.Certificate = GetCertificateInfo(signCert, cal.ToLocalTime()); sigInfo.isValidDateSigning = CheckRevocation(pkcs7, signCert, issuerCert, cal); sigInfo.isValidToday = CheckRevocation(pkcs7, signCert, issuerCert, DateTime.Now.AddDays(-1)); return pkcs7; }
private static void UpdateSignatureResults(ref MessageReport.Signature s) { MessageReport.Results r = new MessageReport.Results(); string hm = string.Empty; r.result = false; hm = "Το αρχείο "; if (s.Certificate.isHardCertificate == false) hm += "δεν "; hm += "έχει υπογραφεί με χρήση πιστοποιητικού σκληρής αποθήκευσης της ΑΠΕΔ, "; hm += "το οποίο "; if (s.isValidDateSigning == false) hm += "δεν "; hm += " ήταν έγκυρο κατά την ημερομηνία υπογραφής. "; hm += "Το αρχείο "; if (s.isIntegral) hm += "δεν "; hm += " έχει τροποποιηθεί μετά την υπογραφή του και "; if (s.isTimestampped == false) hm += "δεν "; hm += " φέρει ενσωματωμένη χρονοσφραγίδα. "; if (s.isValidDateSigning && s.isIntegral && s.isTimestampped && s.Certificate.isHardCertificate) { r.result = true; } r.resultText = hm; s.Results = r; }
public static bool validatePDF(string filename, ref MessageReport msg) { try { X509CertificateParser parser = new X509CertificateParser(); if (certificates.Count() == 0) { certificates.Add(parser.ReadCertificate(new FileStream(ROOT1, FileMode.Open))); certificates.Add(parser.ReadCertificate(new FileStream(ROOT2, FileMode.Open))); certificates.Add(parser.ReadCertificate(new FileStream(ROOT3, FileMode.Open))); } PdfReader pdfReader = new PdfReader(filename); AcroFields acroFields = pdfReader.AcroFields; List<String> signatureNames = acroFields.GetSignatureNames(); msg.signaturesCount = signatureNames.Count(); if (signatureNames.Count == 0) { msg.StatusText = "Δεν βρέθηκαν ψηφιακές υπογραφές στο έγγραφο!"; return false; } SignaturePermissions perms = null; MessageReport.Signature sigInfo = new MessageReport.Signature(); foreach (String name in signatureNames) { sigInfo = InspectSignature(acroFields, name, perms); UpdateSignatureResults(ref sigInfo); //produce human friendly result text msg.Signatures.Add(sigInfo); } msg.StatusText = String.Format("Ο έλεγχος ολοκληρώθηκε επιτυχώς. Βρέθηκαν {0} ψηφιακές υπογραφές στο έγγραφο!", msg.signaturesCount); return true; } catch { return false; } }