private void AdicionarLtv(string pdfPrimeiraAssinatura, SingInfo singInfo) { var inicioCarimbo = DateTime.Now; var stamping = new StampingProperties(); stamping.UseAppendMode(); PdfDocument pdfDoc = new PdfDocument( new PdfReader(pdfPrimeiraAssinatura), new PdfWriter(singInfo.TargetPdf)); LtvVerification v = new LtvVerification(pdfDoc); SignatureUtil signatureUtil = new SignatureUtil(pdfDoc); var names = signatureUtil.GetSignatureNames(); var sigName = names[names.Count - 1]; var pkcs7 = signatureUtil.VerifySignature(sigName); if (pkcs7.IsTsp()) { v.AddVerification( sigName, this.ocspClient, new CrlClientOnline(this.cadeiaTempo.ToArray()), LtvVerification.CertificateOption.SIGNING_CERTIFICATE, LtvVerification.Level.OCSP_CRL, LtvVerification.CertificateInclusion.YES); } else { foreach (var name in names) { v.AddVerification( name, this.ocspClient, new CrlClientOnline(this.cadeiaTempo.ToArray()), LtvVerification.CertificateOption.WHOLE_CHAIN, LtvVerification.Level.OCSP_CRL, LtvVerification.CertificateInclusion.NO); } } pdfDoc.Close(); Console.WriteLine("Aplicando timestamp........"); PdfReader r = new PdfReader(pdfPrimeiraAssinatura); PdfSigner pdfSigner = new PdfSigner(r, new FileStream(singInfo.TargetPdf, FileMode.Create), stamping); pdfSigner.Timestamp(this.tsaClient, null); var fimCarimbo = DateTime.Now; var tempoCarimbo = fimCarimbo.Subtract(inicioCarimbo); Console.WriteLine("Tempo Carimbo: {0}ms", tempoCarimbo.TotalMilliseconds); }
public string Execute(SingInfo singInfo) { var inicioCertificado = DateTime.Now; var certificate = this.certificadoA3.Obter(); this.cadeiaTempo = this.certificadoA3.CadeiaCertificadoTempo(); this.MontarEstruturaCertificacao(certificate); var fimCertificado = DateTime.Now; var pdfAux = Path.Combine( Path.GetDirectoryName(singInfo.SourcePdf), Path.GetFileNameWithoutExtension(singInfo.SourcePdf) + "-aux.pdf"); var inicioAssinatura = DateTime.Now; using (var reader = new PdfReader(singInfo.SourcePdf)) { var stamping = new StampingProperties(); stamping.UseAppendMode(); var pdfSigner = new PdfSigner(reader, new FileStream(pdfAux, FileMode.Create), stamping); var caminhoFonte2 = @"C:\Windows\Fonts\cour.ttf"; PdfSignatureAppearance appearance = pdfSigner .GetSignatureAppearance() .SetReason(singInfo.SignatureReason) .SetLocation(singInfo.SignatureLocation) .SetReuseAppearance(false) .SetContact(singInfo.SignatureContact) .SetLayer2Font(PdfFontFactory.CreateFont(caminhoFonte2, iText.IO.Font.PdfEncodings.WINANSI, true)); appearance.SetRenderingMode(PdfSignatureAppearance.RenderingMode.DESCRIPTION); var pks = new X509Certificate2Signature(certificate, DigestAlgorithms.SHA256); Console.WriteLine("assinando..."); pdfSigner.SignDetached( pks, this.chain.ToArray(), this.crlList, this.ocspClient, this.tsaClient, EstimatedSize, CryptoStandard.CMS); } var fimAssinatura = DateTime.Now; var tempoAssinatura = fimAssinatura.Subtract(inicioAssinatura); var tempoCertificado = fimCertificado.Subtract(inicioCertificado); Console.WriteLine("Tempo Assinatura: {0}ms", tempoAssinatura.TotalMilliseconds); Console.WriteLine("Tempo Certificado: {0}ms", tempoCertificado.TotalMilliseconds); this.AdicionarLtv(pdfAux, singInfo); this.RemoverArquivoTemporario(pdfAux); return(singInfo.TargetPdf); }