Example #1
0
        public string Execute(string pdfMontado)
        {
            var singInfo = new SingInfo();

            var diretorio = Path.GetDirectoryName(pdfMontado);
            var fileName  = Path.GetFileNameWithoutExtension(pdfMontado);

            singInfo.SourcePdf = pdfMontado;
            singInfo.TargetPdf = Path.Combine(diretorio, fileName + "-ass.pdf");

            singInfo.Author            = "author da assinatura";
            singInfo.Creator           = "quem criou";
            singInfo.Keywords          = "palavras-chave";
            singInfo.Producer          = "quem produziu";
            singInfo.SignatureContact  = "contato";
            singInfo.SignatureLocation = "endereco";
            singInfo.SignatureReason   = "motivo";
            singInfo.Subject           = "assunto";
            singInfo.Title             = "titulo";

            try
            {
                this.pdfSigner.Execute(singInfo);
                return(singInfo.TargetPdf);
            }
            catch (Exception exception)
            {
                Log.Application.Error(exception);
                return(singInfo.SourcePdf);
            }
        }
Example #2
0
        public string Execute(SingInfo singInfo)
        {
            var certificate = this.certificadoA3.Obter();

            this.cadeiaTempo = this.certificadoA3.CadeiaCertificadoTempo();

            this.MontarEstruturaCertificacao(certificate);

            var pdfAux = Path.Combine(
                Path.GetDirectoryName(singInfo.SourcePdf),
                Path.GetFileNameWithoutExtension(singInfo.SourcePdf) + "-aux.pdf");

            using (var reader = new PdfReader(singInfo.SourcePdf))
            {
                using (var os = new FileStream(pdfAux, FileMode.Create))
                {
                    var stamper = PdfAStamper.CreateSignature(reader, os, '\0', PdfAConformanceLevel.PDF_A_2A);

                    var appearance = stamper.SignatureAppearance;

                    var caminhoFonte2 = @"C:\Windows\Fonts\cour.ttf";
                    appearance.Layer2Font = FontFactory.GetFont(caminhoFonte2, BaseFont.WINANSI, BaseFont.EMBEDDED, 8);
                    appearance.Reason     = singInfo.SignatureReason;
                    appearance.Contact    = singInfo.SignatureContact;
                    appearance.Location   = singInfo.SignatureLocation;

                    appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;

                    var pks = new X509Certificate2Signature(certificate, DigestAlgorithms.SHA256);

                    MakeSignature.SignDetached(
                        appearance,
                        pks,
                        this.chain,
                        this.crlList,
                        this.ocspClient,
                        this.tsaClient,
                        EstimatedSize,
                        CryptoStandard.CMS);
                }
            }

            using (var reader = new PdfReader(pdfAux))
            {
                using (var os = new FileStream(singInfo.TargetPdf, FileMode.Create))
                {
                    var stamper    = PdfStamper.CreateSignature(reader, os, '\0', null, true);
                    var appearance = stamper.SignatureAppearance;

                    this.AdicionarLtv(stamper, appearance);
                }
            }

            this.RemoverArquivoTemporario(pdfAux);

            return(singInfo.TargetPdf);
        }
Example #3
0
        public void Sign(SingInfo singInfo)
        {
            try
            {
                var metaData = new MetaData
                {
                    Author   = singInfo.Author,
                    Title    = singInfo.Title,
                    Subject  = singInfo.Subject,
                    Keywords = singInfo.Keywords,
                    Creator  = singInfo.Creator,
                    Producer = singInfo.Producer
                };

                var store = new X509Store(StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);

                if (store.Certificates.Count == 0)
                {
                    Log.Application.Error("Certificados Locais do usuario indisponiveis.");
                }

                var posicaoCertificado = 0;

                var cert = store.Certificates[posicaoCertificado];

                Log.Application.InfoFormat(
                    "Certificado Selecionado {0} Serial {1} Subject {2}",
                    cert.IssuerName.Name,
                    cert.SerialNumber,
                    cert.SubjectName);

                var cp = new Org.BouncyCastle.X509.X509CertificateParser();

                var chain = new[]
                {
                    cp.ReadCertificate(cert.RawData)
                };

                IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-1");

                var rsa = (RSACryptoServiceProvider)cert.PrivateKey;

                var secureString = new SecureString();

                secureString.AppendChar(char.Parse("1"));
                secureString.AppendChar(char.Parse("2"));
                secureString.AppendChar(char.Parse("3"));
                secureString.AppendChar(char.Parse("4"));

                var cspp = new CspParameters();
                cspp.KeyContainerName = rsa.CspKeyContainerInfo.KeyContainerName;
                cspp.ProviderName     = rsa.CspKeyContainerInfo.ProviderName;
                cspp.Flags            = CspProviderFlags.UseUserProtectedKey;
                cspp.KeyPassword      = secureString;

                cspp.ProviderType = rsa.CspKeyContainerInfo.ProviderType;

                cspp.Flags = CspProviderFlags.NoPrompt;

                RSACryptoServiceProvider rsa2 = new RSACryptoServiceProvider(cspp);

                rsa.PersistKeyInCsp = true;

                PdfReader   reader  = new PdfReader(singInfo.SourcePdf);
                PdfAStamper stamper = PdfAStamper.CreateSignature(
                    reader,
                    new FileStream(singInfo.TargetPdf, FileMode.Create, FileAccess.Write),
                    '\0',
                    PdfAConformanceLevel.PDF_A_2A);

                PdfSignatureAppearance appearance = stamper.SignatureAppearance;

                var caminhoFonte2  = @"C:\Windows\Fonts\cour.ttf";
                var caminhoGrafico = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Resources", "key.jpg");

                appearance.Layer2Font             = FontFactory.GetFont(caminhoFonte2, BaseFont.WINANSI, BaseFont.EMBEDDED, 8);
                appearance.Reason                 = singInfo.SignatureReason;
                appearance.Contact                = singInfo.SignatureContact;
                appearance.Location               = singInfo.SignatureLocation;
                appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
                appearance.CertificationLevel     = PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED;
                appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(600, 100, 0, 0), 1, "Assinatura");

                MakeSignature.SignDetached(appearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
                stamper.Close();
            }
            catch (Exception exception)
            {
                Log.Application.Error("Falha ao assinar! ", exception);
                throw;
            }
        }