Example #1
0
        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);
        }
Example #2
0
        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);
        }