public SignaturePermissions InspectSignature(AcroFields fields, String name, SignaturePermissions perms) { IList <AcroFields.FieldPosition> fps = fields.GetFieldPositions(name); if (fps != null && fps.Count > 0) { AcroFields.FieldPosition fp = fps[0]; Rectangle pos = fp.position; if (pos.Width == 0 || pos.Height == 0) { Console.WriteLine("Invisible signature"); } else { Console.WriteLine("Field on page {0}; llx: {1}, lly: {2}, urx: {3}; ury: {4}", fp.page, pos.Left, pos.Bottom, pos.Right, pos.Top); } } PdfPKCS7 pkcs7 = VerifySignature(fields, name); Console.WriteLine("Digest algorithm: " + pkcs7.GetHashAlgorithm()); Console.WriteLine("Encryption algorithm: " + pkcs7.GetEncryptionAlgorithm()); Console.WriteLine("Filter subtype: " + pkcs7.GetFilterSubtype()); X509Certificate cert = pkcs7.SigningCertificate; Console.WriteLine("Name of the signer: " + CertificateInfo.GetSubjectFields(cert).GetField("CN")); if (pkcs7.SignName != null) { Console.WriteLine("Alternative name of the signer: " + pkcs7.SignName); } Console.WriteLine("Signed on: " + pkcs7.SignDate.ToString("yyyy-MM-dd HH:mm:ss.ff")); if (!pkcs7.TimeStampDate.Equals(DateTime.MaxValue)) { Console.WriteLine("TimeStamp: " + pkcs7.TimeStampDate.ToString("yyyy-MM-dd HH:mm:ss.ff")); TimeStampToken ts = pkcs7.TimeStampToken; Console.WriteLine("TimeStamp service: " + ts.TimeStampInfo.Tsa); Console.WriteLine("Timestamp verified? " + pkcs7.VerifyTimestampImprint()); } Console.WriteLine("Location: " + pkcs7.Location); Console.WriteLine("Reason: " + pkcs7.Reason); PdfDictionary sigDict = fields.GetSignatureDictionary(name); PdfString contact = sigDict.GetAsString(PdfName.CONTACTINFO); if (contact != null) { Console.WriteLine("Contact info: " + contact); } perms = new SignaturePermissions(sigDict, perms); Console.WriteLine("Signature type: " + (perms.Certification ? "certification" : "approval")); Console.WriteLine("Filling out fields allowed: " + perms.FillInAllowed); Console.WriteLine("Adding annotations allowed: " + perms.AnnotationsAllowed); foreach (SignaturePermissions.FieldLock Lock in perms.FieldLocks) { Console.WriteLine("Lock: " + Lock); } return(perms); }
private Nenshkrim MerrNenshkrimInfo(AcroFields af, string name) { PdfPKCS7 pkcs7 = af.VerifySignature(name); var certificate = new X509Certificate2(); var cert = (Org.BouncyCastle.X509.X509Certificate)pkcs7.Certificates[0]; certificate.Import(cert.GetEncoded()); Nenshkrim nenshkruesi = new Nenshkrim(); nenshkruesi.Nenshkruesi = CertificateInfo.GetSubjectFields(cert).GetField("CN"); string issuer = certificate.Issuer; nenshkruesi.IssuerCN = GetIssuer(issuer, "CN="); nenshkruesi.IssuerOU = GetIssuer(issuer, "OU="); nenshkruesi.IssuerO = GetIssuer(issuer, "O="); nenshkruesi.IssuerC = GetIssuer(issuer, "C="); if (nenshkruesi.IssuerC == "KS") { //largimi i [EMAIL] prej cn nenshkruesi.Nenshkruesi = nenshkruesi.Nenshkruesi.Substring(8); } nenshkruesi.Emri = CertificateInfo.GetSubjectFields(cert).GetField("GIVENNAME"); nenshkruesi.Mbiemri = CertificateInfo.GetSubjectFields(cert).GetField("SURNAME"); //algoritmi hash nenshkruesi.AlgoritmiHash = pkcs7.GetHashAlgorithm(); //algoritmi hash nenshkruesi.AlgoritmiEnkriptimit = pkcs7.GetEncryptionAlgorithm(); //data e nenshrimit nenshkruesi.DataNenshkrimit = pkcs7.SignDate; //certifikata valide prej, deri nenshkruesi.CertifikataValidePrej = certificate.GetEffectiveDateString(); nenshkruesi.CertifikataValideDeri = certificate.GetExpirationDateString(); nenshkruesi.SerialNumber = certificate.SerialNumber; //verifikimi if (pkcs7.Verify()) { nenshkruesi.Valid = true; } else { nenshkruesi.Valid = false; } return(nenshkruesi); }
public PdfPKCS7 VerifySignature(AcroFields fields, String name) { Console.WriteLine("Signature covers whole document: " + fields.SignatureCoversWholeDocument(name)); Console.WriteLine("Document revision: " + fields.GetRevision(name) + " of " + fields.TotalRevisions); PdfPKCS7 pkcs7 = fields.VerifySignature(name); Console.WriteLine("Integrity check OK? " + pkcs7.Verify()); Console.WriteLine("Digest algorithm: " + pkcs7.GetHashAlgorithm()); Console.WriteLine("Encryption algorithm: " + pkcs7.GetEncryptionAlgorithm()); Console.WriteLine("Filter subtype: " + pkcs7.GetFilterSubtype()); X509Certificate cert = pkcs7.SigningCertificate; Console.WriteLine("Name of the signer: " + CertificateInfo.GetSubjectFields(cert).GetField("CN")); return(pkcs7); }
public static (SignaturePermissions, FileDetailsModel) InspectSignature(FileDetailsModel model, PdfDocument pdfDoc, SignatureUtil signUtil, PdfAcroForm form, String name, SignaturePermissions perms) { IList <PdfWidgetAnnotation> widgets = form.GetField(name).GetWidgets(); PdfPKCS7 pkcs7 = null; (pkcs7, model) = VerifySignature(model, signUtil, name); logger.Error("Digest algorithm: " + pkcs7.GetHashAlgorithm()); logger.Error("Encryption algorithm: " + pkcs7.GetEncryptionAlgorithm()); logger.Error("Filter subtype: " + pkcs7.GetFilterSubtype()); X509Certificate cert = (X509Certificate)pkcs7.GetSigningCertificate(); logger.Error("Name of the signer: " + iText.Signatures.CertificateInfo.GetSubjectFields(cert).GetField("CN")); model.SignerName = iText.Signatures.CertificateInfo.GetSubjectFields(cert).GetField("CN"); if (pkcs7.GetSignName() != null) { logger.Error("Alternative name of the signer: " + pkcs7.GetSignName()); } logger.Error("Signed on: " + pkcs7.GetSignDate().ToUniversalTime().ToString("yyyy-MM-dd")); model.SignatureDate = pkcs7.GetSignDate().ToUniversalTime().ToString("yyyy-MM-dd"); logger.Error("Location: " + pkcs7.GetLocation()); logger.Error("Reason: " + pkcs7.GetReason()); PdfDictionary sigDict = signUtil.GetSignatureDictionary(name); PdfString contact = sigDict.GetAsString(PdfName.ContactInfo); if (contact != null) { logger.Error("Contact info: " + contact); } return(perms, model); }
public SignaturePermissions InspectSignature(PdfDocument pdfDoc, SignatureUtil signUtil, PdfAcroForm form, String name, SignaturePermissions perms) { IList <PdfWidgetAnnotation> widgets = form.GetField(name).GetWidgets(); // Check the visibility of the signature annotation if (widgets != null && widgets.Count > 0) { Rectangle pos = widgets[0].GetRectangle().ToRectangle(); int pageNum = pdfDoc.GetPageNumber(widgets[0].GetPage()); if (pos.GetWidth() == 0 || pos.GetHeight() == 0) { Console.Out.WriteLine("Invisible signature"); } else { Console.Out.WriteLine(String.Format("Field on page {0}; llx: {1}, lly: {2}, urx: {3}; ury: {4}", pageNum, pos.GetLeft(), pos.GetBottom(), pos.GetRight(), pos.GetTop())); } } /* Find out how the message digest of the PDF bytes was created, * how these bytes and additional attributes were signed * and how the signed bytes are stored in the PDF */ PdfPKCS7 pkcs7 = VerifySignature(signUtil, name); Console.Out.WriteLine("Digest algorithm: " + pkcs7.GetHashAlgorithm()); Console.Out.WriteLine("Encryption algorithm: " + pkcs7.GetEncryptionAlgorithm()); Console.Out.WriteLine("Filter subtype: " + pkcs7.GetFilterSubtype()); // Get the signing certificate to find out the name of the signer. X509Certificate cert = (X509Certificate)pkcs7.GetSigningCertificate(); Console.Out.WriteLine("Name of the signer: " + iText.Signatures.CertificateInfo.GetSubjectFields(cert).GetField("CN")); if (pkcs7.GetSignName() != null) { Console.Out.WriteLine("Alternative name of the signer: " + pkcs7.GetSignName()); } /* Get the signing time. * Mind that the getSignDate() method is not that secure as timestamp * because it's based only on signature author claim. I.e. this value can only be trusted * if signature is trusted and it cannot be used for signature verification. */ Console.Out.WriteLine("Signed on: " + pkcs7.GetSignDate().ToUniversalTime().ToString("yyyy-MM-dd")); /* If a timestamp was applied, retrieve information about it. * Timestamp is a secure source of signature creation time, * because it's based on Time Stamping Authority service. */ if (TimestampConstants.UNDEFINED_TIMESTAMP_DATE != pkcs7.GetTimeStampDate()) { Console.Out.WriteLine("TimeStamp: " + pkcs7.GetTimeStampDate().ToUniversalTime().ToString("yyyy-MM-dd")); TimeStampToken ts = pkcs7.GetTimeStampToken(); Console.Out.WriteLine("TimeStamp service: " + ts.TimeStampInfo.Tsa); Console.Out.WriteLine("Timestamp verified? " + pkcs7.VerifyTimestampImprint()); } Console.Out.WriteLine("Location: " + pkcs7.GetLocation()); Console.Out.WriteLine("Reason: " + pkcs7.GetReason()); /* If you want less common entries than PdfPKCS7 object has, such as the contact info, * you should use the signature dictionary and get the properties by name. */ PdfDictionary sigDict = signUtil.GetSignatureDictionary(name); PdfString contact = sigDict.GetAsString(PdfName.ContactInfo); if (contact != null) { Console.Out.WriteLine("Contact info: " + contact); } /* Every new signature can add more restrictions to a document, but it can’t take away previous restrictions. * So if you want to retrieve information about signatures restrictions, you need to pass * the SignaturePermissions instance of the previous signature, or null if there was none. */ perms = new SignaturePermissions(sigDict, perms); Console.Out.WriteLine("Signature type: " + (perms.IsCertification() ? "certification" : "approval")); Console.Out.WriteLine("Filling out fields allowed: " + perms.IsFillInAllowed()); Console.Out.WriteLine("Adding annotations allowed: " + perms.IsAnnotationsAllowed()); foreach (SignaturePermissions.FieldLock Lock in perms.GetFieldLocks()) { Console.Out.WriteLine("Lock: " + Lock); } return(perms); }
/// <summary> /// Verifiy of CRL /// </summary> /// <param name="fileContents">byte Array file contents</param> /// <param name="endPoint">not used </param> /// <param name="args">1) Datetime? data verifica / string cachePath / string (bool) nocache</param> /// <returns></returns> public EsitoVerifica VerificaByteEV(byte[] fileContents, string endPoint, Object[] args) { //string ID = String.Format("{0}-{1}", Environment.GetEnvironmentVariable("APP_POOL_ID").Replace(" ", ""), AppDomain.CurrentDomain.BaseDirectory); bool forceDownload = false; //end point lo usiamo per forzare il download string p7mSignAlgorithm = null; //string p7mSignHash = null; DocsPaVO.documento.Internal.SignerInfo[] certSignersInfo; EsitoVerifica ev = new EsitoVerifica(); DateTime?dataverificaDT = null; string cachePath = string.Empty; if (args == null) { logger.Debug("Args (Date) is null, settign current"); dataverificaDT = DateTime.Now; } if (args.Length > 0) { dataverificaDT = args[0] as DateTime?; if (dataverificaDT == null) { logger.Debug("Date is null, settign current"); dataverificaDT = DateTime.Now; } cachePath = args[1] as string; string fdl = args[2] as string; if (!String.IsNullOrEmpty(fdl)) { Boolean.TryParse(endPoint, out forceDownload); } } int posi = IndexOfInArray(fileContents, System.Text.ASCIIEncoding.ASCII.GetBytes("Mime-Version:")); if (posi == 0) //E' un mime m7m { using (MemoryStream ms = new MemoryStream(fileContents)) { anmar.SharpMimeTools.SharpMessage sm = new anmar.SharpMimeTools.SharpMessage(ms); if (sm.Attachments.Count > 0) { foreach (anmar.SharpMimeTools.SharpAttachment att in sm.Attachments) { if (System.IO.Path.GetExtension(att.Name).ToLower().Contains("p7m")) { att.Stream.Position = 0; BinaryReader sr = new BinaryReader(att.Stream); fileContents = sr.ReadBytes((int)att.Size); } } } } } // Ce provo.... posi = -1; posi = IndexOfInArray(fileContents, System.Text.ASCIIEncoding.ASCII.GetBytes("%PDF")); if (posi == 0) //E' un pdf { PdfReader pdfReader = isPdf(fileContents); try { AcroFields af = pdfReader.AcroFields; List <string> signNames = af.GetSignatureNames(); if (signNames.Count == 0) //Firma non è presente { ev.status = EsitoVerificaStatus.ErroreGenerico; ev.message = "Il file PDF da verificare non contiene nessuna firma"; ev.errorCode = "1458"; return(ev); } List <DocsPaVO.documento.Internal.SignerInfo> siList = new List <DocsPaVO.documento.Internal.SignerInfo>(); foreach (string name in signNames) { PdfPKCS7 pk = af.VerifySignature(name); p7mSignAlgorithm = pk.GetHashAlgorithm(); Org.BouncyCastle.X509.X509Certificate[] certs = pk.Certificates; foreach (X509Certificate cert in certs) { DocsPaVO.documento.Internal.SignerInfo si = GetCertSignersInfo(cert); VerificaValiditaTemporaleCertificato(ev, dataverificaDT, cert, p7mSignAlgorithm); si = ControlloCRL(forceDownload, ev, cachePath, cert, si); siList.Add(si); } bool result = pk.Verify(); if (!result) { ev.status = EsitoVerificaStatus.ErroreGenerico; ev.message = "La verifica della firma è fallita (File is Tampered)"; ev.errorCode = "1450"; } } /* * if ( * (pdfReader.PdfVersion.ToString() != "4")|| * (pdfReader.PdfVersion.ToString() != "7")) * { * ev.status = EsitoVerificaStatus.ErroreGenerico; * ev.message = "Il file da verificare non è conforme allo standard PDF 1.4 o pdf 1.7"; * ev.errorCode = "1457"; * } */ List <DocsPaVO.documento.Internal.PKCS7Document> p7docsLst = new List <DocsPaVO.documento.Internal.PKCS7Document>(); DocsPaVO.documento.Internal.PKCS7Document p7doc = new DocsPaVO.documento.Internal.PKCS7Document { SignersInfo = siList.ToArray(), DocumentFileName = null, Level = 0 }; p7docsLst.Add(p7doc); ev.VerifySignatureResult = ConvertToVerifySignatureResult(ev.status, p7docsLst.ToArray()); ev.content = fileContents; } catch (Exception e) { ev.status = EsitoVerificaStatus.ErroreGenerico; ev.message = "Error verifying pdf message :" + e.Message; ev.errorCode = "1402"; return(ev); } } else //PKCS7 { try { int doclevel = 0; List <DocsPaVO.documento.Internal.PKCS7Document> p7docsLst = new List <DocsPaVO.documento.Internal.PKCS7Document>(); do { //questa Estrazione serve solo per capire se uscire dal ciclo ricorsivo e ritornare il content try { ev.content = extractSignedContent(fileContents); } catch { break; } //Ciclo per file firmato Asn1Sequence sequenza = Asn1Sequence.GetInstance(fileContents); DerObjectIdentifier tsdOIDFile = sequenza[0] as DerObjectIdentifier; if (tsdOIDFile != null) { if (tsdOIDFile.Id == CmsObjectIdentifiers.timestampedData.Id) //TSD { logger.Debug("Found TSD file"); DerTaggedObject taggedObject = sequenza[1] as DerTaggedObject; if (taggedObject != null) { Asn1Sequence asn1seq = Asn1Sequence.GetInstance(taggedObject, true); TimeStampedData tsd = TimeStampedData.GetInstance(asn1seq); fileContents = tsd.Content.GetOctets(); } } if (tsdOIDFile.Id == CmsObjectIdentifiers.SignedData.Id) //p7m { logger.Debug("Found P7M file"); } } CmsSignedData cms = new CmsSignedData(fileContents); //controllaCrlFileP7m(cms); IX509Store store = cms.GetCertificates("Collection"); SignerInformationStore signers = cms.GetSignerInfos(); SignedData da = SignedData.GetInstance(cms.ContentInfo.Content.ToAsn1Object()); Asn1Sequence DigAlgAsn1 = null; if (da.DigestAlgorithms.Count > 0) { DigAlgAsn1 = da.DigestAlgorithms[0].ToAsn1Object() as Asn1Sequence; } if (DigAlgAsn1 != null) { p7mSignAlgorithm = Org.BouncyCastle.Security.DigestUtilities.GetAlgorithmName(AlgorithmIdentifier.GetInstance(DigAlgAsn1).ObjectID); } certSignersInfo = new DocsPaVO.documento.Internal.SignerInfo[signers.GetSigners().Count]; int i = 0; foreach (SignerInformation signer in signers.GetSigners()) { bool fileOK = false; Org.BouncyCastle.X509.X509Certificate cert1 = GetCertificate(signer, store); certSignersInfo[i] = GetCertSignersInfo(cert1); VerificaValiditaTemporaleCertificato(ev, dataverificaDT, cert1, p7mSignAlgorithm); fileOK = VerificaNonRepudiation(ev, fileOK, cert1); if (!fileOK) { certSignersInfo[i].CertificateInfo.messages = ev.errorCode + " " + ev.message; } try { fileOK = VerificaCertificato(ev, signer, fileOK, cert1); } catch (Exception e) { ev.status = EsitoVerificaStatus.ErroreGenerico; ev.message = "Error verifying 2, message :" + e.Message; ev.errorCode = "1450"; } if (fileOK) { certSignersInfo[i] = ControlloCRL(forceDownload, ev, cachePath, cert1, certSignersInfo[i]); } //p7mSignHash = BitConverter.ToString(Org.BouncyCastle.Security.DigestUtilities.CalculateDigest(Org.BouncyCastle.Security.DigestUtilities.GetAlgorithmName(AlgorithmIdentifier.GetInstance(DigAlgAsn1).ObjectID), (byte[])cms.SignedContent.GetContent())).Replace("-", ""); } /* * if (cms.SignedContent != null) * { * //CmsProcessable signedContent = cms.SignedContent; * //ev.content = (byte[])signedContent.GetContent(); * * ev.content = extractMatrioskaFile(fileContents); * * * * } */ DocsPaVO.documento.Internal.PKCS7Document p7doc = new DocsPaVO.documento.Internal.PKCS7Document { SignersInfo = certSignersInfo, DocumentFileName = null, Level = doclevel++ }; p7docsLst.Add(p7doc); try { fileContents = extractSignedContent(fileContents); } catch { break; } } while (true); ev.VerifySignatureResult = ConvertToVerifySignatureResult(ev.status, p7docsLst.ToArray());; } catch (Exception e) { ev.status = EsitoVerificaStatus.ErroreGenerico; ev.message = "Error verifying 1, message :" + e.Message; ev.errorCode = "1402"; return(ev); } } return(ev); }
private SignedDocumentInfo CollectInfo(String documentPath) { SignedDocumentInfo docInfo = new SignedDocumentInfo(); PdfDocument pdfDoc = new PdfDocument(new PdfReader(documentPath)); PdfAcroForm form = PdfAcroForm.GetAcroForm(pdfDoc, false); SignatureUtil signUtil = new SignatureUtil(pdfDoc); IList <String> names = signUtil.GetSignatureNames(); docInfo.SetNumberOfTotalRevisions(signUtil.GetTotalRevisions()); SignaturePermissions perms = null; IList <SignatureInfo> signInfos = new List <SignatureInfo>(); foreach (String name in names) { SignatureInfo sigInfo = new SignatureInfo(); sigInfo.SetSignatureName(name); sigInfo.SetRevisionNumber(signUtil.GetRevision(name)); sigInfo.SetSignatureCoversWholeDocument(signUtil.SignatureCoversWholeDocument(name)); IList <PdfWidgetAnnotation> widgetAnnotationsList = form.GetField(name).GetWidgets(); if (widgetAnnotationsList != null && widgetAnnotationsList.Count > 0) { sigInfo.SetSignaturePosition(widgetAnnotationsList[0].GetRectangle().ToRectangle()); } PdfPKCS7 pkcs7 = signUtil.ReadSignatureData(name); sigInfo.SetDigestAlgorithm(pkcs7.GetHashAlgorithm()); sigInfo.SetEncryptionAlgorithm(pkcs7.GetEncryptionAlgorithm()); PdfName filterSubtype = pkcs7.GetFilterSubtype(); if (filterSubtype != null) { sigInfo.SetFilterSubtype(filterSubtype.ToString()); } X509Certificate signCert = pkcs7.GetSigningCertificate(); sigInfo.SetSignerName(iText.Signatures.CertificateInfo.GetSubjectFields(signCert).GetField("CN")); sigInfo.SetAlternativeSignerName(pkcs7.GetSignName()); sigInfo.SetSignDate(pkcs7.GetSignDate().ToUniversalTime()); if (TimestampConstants.UNDEFINED_TIMESTAMP_DATE != pkcs7.GetTimeStampDate()) { sigInfo.SetTimeStamp(pkcs7.GetTimeStampDate().ToUniversalTime()); TimeStampToken ts = pkcs7.GetTimeStampToken(); sigInfo.SetTimeStampService(ts.TimeStampInfo.Tsa.ToString()); } sigInfo.SetLocation(pkcs7.GetLocation()); sigInfo.SetReason(pkcs7.GetReason()); PdfDictionary sigDict = signUtil.GetSignatureDictionary(name); PdfString contactInfo = sigDict.GetAsString(PdfName.ContactInfo); if (contactInfo != null) { sigInfo.SetContactInfo(contactInfo.ToString()); } perms = new SignaturePermissions(sigDict, perms); sigInfo.SetIsCertifiaction(perms.IsCertification()); sigInfo.SetIsFieldsFillAllowed(perms.IsFillInAllowed()); sigInfo.SetIsAddingAnnotationsAllowed(perms.IsAnnotationsAllowed()); IList <String> fieldLocks = new List <String>(); foreach (SignaturePermissions.FieldLock Lock in perms.GetFieldLocks()) { fieldLocks.Add(Lock.ToString()); } sigInfo.SetFieldsLocks(fieldLocks); X509Certificate[] certs = pkcs7.GetSignCertificateChain(); IList <CertificateInfo> certInfos = new List <CertificateInfo>(); for (int i = 0; i < certs.Length; i++) { X509Certificate cert = (X509Certificate)certs[i]; CertificateInfo certInfo = new CertificateInfo(); certInfo.SetIssuer(cert.IssuerDN); certInfo.SetSubject(cert.SubjectDN); certInfo.SetValidFrom(cert.NotBefore); certInfo.SetValidTo(cert.NotAfter); certInfos.Add(certInfo); } sigInfo.SetCertificateInfos(certInfos); signInfos.Add(sigInfo); } docInfo.SetSignatureInfos(signInfos); return(docInfo); }
private static MessageReport.Signature InspectSignature(AcroFields fields, String name, SignaturePermissions perms) { MessageReport.Signature sigInfo = new MessageReport.Signature(); IList <AcroFields.FieldPosition> fps = fields.GetFieldPositions(name); if (fps != null && fps.Count > 0) { AcroFields.FieldPosition fp = fps[0]; Rectangle pos = fp.position; if (pos.Width == 0 || pos.Height == 0) { sigInfo.visible = false; } else { sigInfo.visible = true; } } PdfPKCS7 pkcs7 = VerifySignature(fields, name, ref sigInfo); sigInfo.digestAlgorithm = pkcs7.GetHashAlgorithm(); sigInfo.encryptionAlgorithm = pkcs7.GetEncryptionAlgorithm(); sigInfo.isRevocationValid = pkcs7.IsRevocationValid(); X509Certificate cert = pkcs7.SigningCertificate; sigInfo.signerName = CertificateInfo.GetSubjectFields(cert).GetField("CN"); if (pkcs7.SignName != null) { sigInfo.signerName = pkcs7.SignName; } sigInfo.signDate = pkcs7.SignDate.ToString("yyyy-MM-dd HH:mm:ss.ff"); if (!pkcs7.TimeStampDate.Equals(DateTime.MaxValue)) { sigInfo.isTimestampped = true; sigInfo.timestampDate = pkcs7.TimeStampDate.ToString("yyyy-MM-dd HH:mm:ss.ff"); TimeStampToken ts = pkcs7.TimeStampToken; sigInfo.timestampName = ts.TimeStampInfo.Tsa.ToString(); } sigInfo.signLocation = pkcs7.Location; sigInfo.signReason = pkcs7.Reason; PdfDictionary sigDict = fields.GetSignatureDictionary(name); PdfString contact = sigDict.GetAsString(PdfName.CONTACTINFO); if (contact != null) { Console.WriteLine("Contact info: " + contact); } perms = new SignaturePermissions(sigDict, perms); sigInfo.signatureType = (perms.Certification ? "certification" : "approval"); return(sigInfo); }
internal void LoadPdfDocumentProperties(PdfReader reader) { this.PDFReader = reader; this.DigitalSignatures = new List <PdfSignatureInfo>(); try { this.NumberOfPages = this.PDFReader.NumberOfPages; } catch { throw; } try { AcroFields acroFields = this.PDFReader.AcroFields; foreach (string signatureName in acroFields.GetSignatureNames()) { PdfSignatureInfo pdfSignatureInfo = new PdfSignatureInfo(); try { PdfPKCS7 pdfPKCS7 = acroFields.VerifySignature(signatureName); pdfSignatureInfo.SignatureName = signatureName; pdfSignatureInfo.HashAlgorithm = pdfPKCS7.GetHashAlgorithm(); pdfSignatureInfo.SigningLocation = pdfPKCS7.Location; pdfSignatureInfo.SigningReason = pdfPKCS7.Reason; pdfSignatureInfo.SignatureCertificate = new X509Certificate2(pdfPKCS7.SigningCertificate.GetEncoded()); if (pdfPKCS7.TimeStampDate != DateTime.MaxValue) { pdfSignatureInfo.SignatureTime = pdfPKCS7.TimeStampDate.ToLocalTime(); pdfSignatureInfo.TimestampInfo = new TimestampInfo(pdfPKCS7.TimeStampToken.GetEncoded()); pdfSignatureInfo.SignatureIsTimestamped = true; } else { pdfSignatureInfo.SignatureIsTimestamped = false; pdfSignatureInfo.SignatureTime = pdfPKCS7.SignDate; } pdfSignatureInfo.SignatureIsValid = pdfPKCS7.Verify(); /* * try * { * pdfSignatureInfo.SignatureBytes = acroFields.GetSignatureBytes(signatureName); * foreach (SignerInformation signer in (new CmsSignedData(pdfSignatureInfo.SignatureBytes)).GetSignerInfos().GetSigners()) * { * pdfSignatureInfo.SignatureHash = signer.GetSignature(); * } * } * catch * { * } */ } catch { } this.DigitalSignatures.Add(pdfSignatureInfo); } } catch { throw; } try { this.FileSize = (long)this.PDFReader.FileLength; } catch { } }