Beispiel #1
0
        public void SignWithThisCert(X509Certificate2 cert, Stream Archivo, string URLDocumento)
        {
            string DestPdfFileName = URLDocumento;


            Org.BouncyCastle.X509.X509CertificateParser cp    = new Org.BouncyCastle.X509.X509CertificateParser();
            Org.BouncyCastle.X509.X509Certificate[]     chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.RawData) };
            IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-1");


            Archivo.Flush(); // Don't know if this is necessary
            Archivo.Position = 0;
            PdfReader              pdfReader           = new PdfReader(Archivo);
            FileStream             signedPdf           = new FileStream(DestPdfFileName, FileMode.Create); //the output pdf file
            PdfStamper             pdfStamper          = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0');
            PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;

            //here set signatureAppearance at your will
            signatureAppearance.Reason   = ConfigurationManager.AppSettings["firma_RazonInversionista"].ToString();
            signatureAppearance.Location = ConfigurationManager.AppSettings["firma_Ubicacion"].ToString();
            signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
            MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
            //MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CADES);
            signedPdf.Close();

            //signedPdf = new FileStream(DestPdfFileName, FileMode.Open);
            //return signedPdf;
        }
Beispiel #2
0
        public void Sign(string inputPath, string outPath, string imagePath, bool visible = true)
        {
            X509Store store = new X509Store(StoreLocation.CurrentUser);

            store.Open(OpenFlags.ReadOnly);
            X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates, null, null, X509SelectionFlag.SingleSelection);

            X509Certificate2 cert = sel[0];

            Org.BouncyCastle.X509.X509CertificateParser cp    = new Org.BouncyCastle.X509.X509CertificateParser();
            Org.BouncyCastle.X509.X509Certificate[]     chain = new Org.BouncyCastle.X509.X509Certificate[] {
                cp.ReadCertificate(cert.RawData)
            };

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

            PdfReader pdfReader = new PdfReader(inputPath);

            var signedPdf = new FileStream(outPath, FileMode.Create);

            var pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0');
            PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;

            if (imagePath != null && imagePath != string.Empty)
            {
                signatureAppearance.SignatureGraphic = Image.GetInstance(imagePath);
            }

            signatureAppearance.SetVisibleSignature(new Rectangle(100, 100, 250, 150), pdfReader.NumberOfPages, "Signature");
            signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;

            MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
            Process.Start(outPath);
        }
Beispiel #3
0
        /// <summary>
        /// Signs a PDF document using iTextSharp library
        /// </summary>
        /// <param name="sourceDocument">The path of the source pdf document which is to be signed</param>
        /// <param name="reason">String describing the reason for signing, would be embedded as part of the signature</param>
        /// <param name="location">Location where the document was signed, would be embedded as part of the signature</param>
        public static byte[] SignPdfFile(byte[] sourceDocument, string reason, string location)
        {
            var cert = DigitalSignature.GetStoreCertificate();

            var cp        = new Org.BouncyCastle.X509.X509CertificateParser();
            var pdfCert   = cp.ReadCertificate(cert.RawData);
            var certChain = new[] { pdfCert };

            // reader and stamper
            PdfReader reader = new PdfReader(sourceDocument);

            using (MemoryStream fout = new MemoryStream())
            {
                using (PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0'))
                {
                    // appearance
                    PdfSignatureAppearance appearance = stamper.SignatureAppearance;
                    appearance.Reason   = reason;
                    appearance.Location = location;
                    var rect = reader.GetPageSize(1);
                    appearance.SetVisibleSignature(new Rectangle(rect.Width - 128, rect.Height - 78, rect.Width - 10, rect.Height - 20), 1, null);
                    // digital signature
                    IExternalSignature es = new X509Certificate2Signature(cert, "SHA1");
                    MakeSignature.SignDetached(appearance, es, certChain, null, null, null, 0, CryptoStandard.CMS);

                    stamper.Close();
                }

                return(fout.ToArray());
            }
        }
Beispiel #4
0
        private void sign(X509Certificate2 cert, String imput, String output)
        {
            string SourcePdfFileName = imput;
            string DestPdfFileName   = output;
            string requerente        = "";

            Org.BouncyCastle.X509.X509CertificateParser cp    = new Org.BouncyCastle.X509.X509CertificateParser();
            Org.BouncyCastle.X509.X509Certificate[]     chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.RawData) };
            IExternalSignature     externalSignature          = new X509Certificate2Signature(cert, "SHA-1");
            PdfReader              pdfReader           = new PdfReader(SourcePdfFileName);
            FileStream             signedPdf           = new FileStream(DestPdfFileName, FileMode.Create); //the output pdf file
            PdfStamper             pdfStamper          = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0');
            PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;

            requerente = cert.Subject.Replace("CN=", "").Replace("OU=", "").Replace("DC=", "").Replace("O=", "").Replace("C=", "");

            signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(250, 30, 550, 80), 1, "Signature");
            signatureAppearance.Layer2Text = "Assinado de forma digital por " + requerente + Environment.NewLine + "Dados:" + DateTime.Now;

            string pathImage = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "assinatura.png");
            var    image     = iTextSharp.text.Image.GetInstance(pathImage);



            signatureAppearance.SignatureGraphic = image;



            //signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
            signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;

            //signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
            MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
        }
Beispiel #5
0
        public void sign(X509Certificate2 cert, String filename, String imageName, String output)
        {
            Org.BouncyCastle.X509.X509CertificateParser cp    = new Org.BouncyCastle.X509.X509CertificateParser();
            Org.BouncyCastle.X509.X509Certificate[]     chain = new Org.BouncyCastle.X509.X509Certificate[] {
                cp.ReadCertificate(cert.RawData)
            };

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

            PdfReader pdfReader = new PdfReader(filename);

            FileStream signedPdf = new FileStream(output, FileMode.Create);

            PdfStamper             pdfStamper          = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0');
            PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;
            Image img = Image.GetInstance(imageName);

            img.Alignment = iTextSharp.text.Image.UNDERLYING;
            signatureAppearance.SignatureGraphic = img;

            signatureAppearance.Acro6Layers = true;
            int x = Convert.ToInt32(xTextBox.Text);
            int y = Convert.ToInt32(yTextBox.Text);
            int w = Convert.ToInt32(widthTextBox.Text);
            int h = Convert.ToInt32(heightTextBox.Text);

            signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(x, y, w, h), pdfReader.NumberOfPages, "Signature");
            signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;

            MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
        }
 // https://git.itextsupport.com/projects/I5N/repos/itextsharp/browse/src/core/iTextSharp/text/pdf/security
 public static void Test(System.Security.Cryptography.X509Certificates.X509Certificate2 cert)
 {
     Org.BouncyCastle.X509.X509CertificateParser parser            = new Org.BouncyCastle.X509.X509CertificateParser();
     Org.BouncyCastle.X509.X509Certificate       bouncyCertificate = parser.ReadCertificate(cert.RawData);
     string algorithm = DigestAlgorithms.GetDigest(bouncyCertificate.SigAlgOid);
     X509Certificate2Signature signature = new X509Certificate2Signature(cert, algorithm);
 }
Beispiel #7
0
        public static bool SignHashed(string Source, string Target, SysX509.X509Certificate2 Certificate, string Reason, string Location, bool AddVisibleSign, bool AddTimeStamp, string strTSA)
        {
            PdfReader  objReader  = null;
            PdfStamper objStamper = null;

            try
            {
                X509CertificateParser objCP    = new Org.BouncyCastle.X509.X509CertificateParser();
                X509Certificate[]     objChain = new X509Certificate[] { objCP.ReadCertificate(Certificate.RawData) };

                IList <ICrlClient> crlList = new List <ICrlClient>();
                crlList.Add(new CrlClientOnline(objChain));

                objReader  = new PdfReader(Source);
                objStamper = PdfStamper.CreateSignature(objReader, new FileStream(Target, FileMode.Create), '\0', null, true);

                // Creamos la apariencia
                PdfSignatureAppearance signatureAppearance = objStamper.SignatureAppearance;
                signatureAppearance.Reason = "Inforegistro, S.L.";
                //signatureAppearance.Location = Location;

                // Custom signature appearance text
                var font = FontFactory.GetFont("Times New Roman", 11, iTextSharp.text.Font.BOLDITALIC, BaseColor.DARK_GRAY);
                signatureAppearance.Layer2Font = font;
                signatureAppearance.Layer2Text = "Firmado digitalmente por \r\nInforegistro, S.L.\r\nFecha  " + DateTime.Now.ToShortDateString();
                var rectangle = new Rectangle(350, 30, 500, 120);

                // Si está la firma visible:
                if (AddVisibleSign)
                {
                    signatureAppearance.SetVisibleSignature(rectangle, 2, "Inforegistro");
                }

                ITSAClient  tsaClient  = null;
                IOcspClient ocspClient = null;

                // Creating the signature
                IExternalSignature externalSignature = new X509Certificate2Signature(Certificate, "SHA-1");
                MakeSignature.SignDetached(signatureAppearance, externalSignature, objChain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CMS);
                return(File.Exists(Target));
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (objReader != null)
                {
                    objReader.Close();
                }
                if (objStamper != null)
                {
                    objStamper.Close();
                }
            }
        }
Beispiel #8
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);
        }
Beispiel #9
0
        private static Tuple <IExternalSignature, X509Certificate[]> DoLocal()
        {
            var compStore = new X509Store(StoreName.My, Store);

            compStore.Open(OpenFlags.ReadOnly);
            var cert = compStore.Certificates[CertIndexInStore];

            var certChain             = new[] { Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(cert) };
            var signingImplementation = new X509Certificate2Signature(cert, "SHA-256");

            return(new Tuple <IExternalSignature, X509Certificate[]>(signingImplementation, certChain));
        }
        public byte[] Sign(Stream stream, DigestAlgorithm digestAlgo, IDssPrivateKeyEntry keyEntry)
        {
            byte[] signedBytes;

            if (keyEntry is KSX509Certificate2Entry)
            {
                var cert = ((KSX509Certificate2Entry)keyEntry).Cert2;

                X509Certificate2Signature signer = new X509Certificate2Signature(cert, digestAlgo.GetName());

                signedBytes = signer.Sign(Streams.ReadAll(stream));

                stream.Close();

                return(signedBytes);
            }

            throw new ArgumentException("Only allowed KSX509Certificate2Entry", "keyEntry");
        }
Beispiel #11
0
        public override void EncodeAndSign(X509Certificate2 certificate, string filePath)
        {
            PdfReader              Reader  = new PdfReader(filePath);
            PdfStamper             Stamper = PdfStamper.CreateSignature(Reader, new FileStream(filePath + ".signed", FileMode.Create), '0');
            PdfSignatureAppearance SAP     = Stamper.SignatureAppearance;

            BcX509.X509Certificate BouncyCertificate = DotNetUtils.FromX509Certificate(certificate);
            var chain = new List <BcX509.X509Certificate> {
                BouncyCertificate
            };

            IExternalSignature ES = new X509Certificate2Signature(certificate, DigestAlgorithms.SHA256);

            MakeSignature.SignDetached(SAP, ES, chain, null, null, null, 0, CryptoStandard.CMS);
            Stamper.Close();
            Reader.Close();
            File.Delete(filePath);
            File.Move(filePath + ".signed", filePath);
        }
Beispiel #12
0
        public void Sign(String src, String dest,
                         ICollection <X509Certificate> chain, X509Certificate2 pk,
                         String digestAlgorithm, CryptoStandard subfilter,
                         String reason, String location,
                         ICollection <ICrlClient> crlList,
                         IOcspClient ocspClient,
                         ITSAClient tsaClient,
                         int estimatedSize)
        {
            // Creating the reader and the stamper
            PdfReader  reader  = null;
            PdfStamper stamper = null;
            FileStream os      = null;

            try {
                reader  = new PdfReader(src);
                os      = new FileStream(dest, FileMode.Create);
                stamper = PdfStamper.CreateSignature(reader, os, '\0');
                // Creating the appearance
                PdfSignatureAppearance appearance = stamper.SignatureAppearance;
                appearance.Reason   = reason;
                appearance.Location = location;
                appearance.SetVisibleSignature(new Rectangle(36, 748, 144, 780), 1, "sig");
                // Creating the signature
                IExternalSignature pks = new X509Certificate2Signature(pk, digestAlgorithm);
                MakeSignature.SignDetached(appearance, pks, chain, crlList, ocspClient, tsaClient, estimatedSize,
                                           subfilter);
            }
            finally {
                if (reader != null)
                {
                    reader.Close();
                }
                if (stamper != null)
                {
                    stamper.Close();
                }
                if (os != null)
                {
                    os.Close();
                }
            }
        }
        private static byte[] AddPdfSignatureField(byte[] src,
                                                   ICollection <Org.BouncyCastle.X509.X509Certificate> chain, X509Certificate2 pk,
                                                   string digestAlgorithm, CryptoStandard subfilter,
                                                   string reason, string location,
                                                   ICollection <ICrlClient> crlList,
                                                   IOcspClient ocspClient,
                                                   ITSAClient tsaClient,
                                                   int estimatedSize, int page, Rectangle rectangle, string signatureFieldName)
        {
            // Creating the reader and the stamper
            PdfReader  reader  = null;
            PdfStamper stamper = null;
            var        os      = new MemoryStream();

            try
            {
                reader  = new PdfReader(src);
                stamper = PdfStamper.CreateSignature(reader, os, '\0');
                // Creating the appearance
                var appearance = stamper.SignatureAppearance;
                appearance.Reason   = reason;
                appearance.Location = location;
                appearance.SetVisibleSignature(rectangle, page, signatureFieldName);
                // Creating the signature
                IExternalSignature pks = new X509Certificate2Signature(pk, digestAlgorithm);
                MakeSignature.SignDetached(appearance, pks, chain, crlList, ocspClient, tsaClient, estimatedSize,
                                           subfilter);
                return(os.ToArray());
            }
            finally
            {
                if (reader != null)
                {
                    reader.Close();
                }
                if (stamper != null)
                {
                    stamper.Close();
                }
            }
        }
        private void SignWithThisCert(X509Certificate2 cert)
        {
            string SourcePdfFileName = textBox1.Text;
            string DestPdfFileName   = textBox1.Text + "-Signed.pdf";

            Org.BouncyCastle.X509.X509CertificateParser cp    = new Org.BouncyCastle.X509.X509CertificateParser();
            Org.BouncyCastle.X509.X509Certificate[]     chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.RawData) };
            IExternalSignature     externalSignature          = new X509Certificate2Signature(cert, "SHA-1");
            PdfReader              pdfReader           = new PdfReader(SourcePdfFileName);
            FileStream             signedPdf           = new FileStream(DestPdfFileName, FileMode.Create); //the output pdf file
            PdfStamper             pdfStamper          = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0');
            PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;

            //here set signatureAppearance at your will
            signatureAppearance.Reason   = "Because I can";
            signatureAppearance.Location = "My location";
            signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
            MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
            //MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CADES);
            MessageBox.Show("Done");
        }
        private static IExternalSignature ResolveExternalSignatureFromCertStore(X509Certificate2 cert, bool allowInvalidCertificate, out ICollection <Org.BouncyCastle.X509.X509Certificate> chain)
        {
            try
            {
                X509Certificate2 signatureCert = new X509Certificate2(cert);
                Org.BouncyCastle.X509.X509Certificate bcCert = Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(cert);
                chain = new List <Org.BouncyCastle.X509.X509Certificate> {
                    bcCert
                };

                var parser            = new Org.BouncyCastle.X509.X509CertificateParser();
                var bouncyCertificate = parser.ReadCertificate(cert.GetRawCertData());
                var algorithm         = DigestAlgorithms.GetDigest(bouncyCertificate.SigAlgOid);
                var signature         = new X509Certificate2Signature(signatureCert, algorithm);

                return(signature);
            }
            catch (Exception)
            {
                throw;
            }
        }
        private static void CertSign(X509Certificate2 cert, X509CertificateParser cp, string destinationPath, PdfReader reader, string reason, string location)
        {
            Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[]
            {
                cp.ReadCertificate(cert.RawData)
            };

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

            using (FileStream fout = new FileStream(destinationPath, FileMode.Create, FileAccess.ReadWrite))
            {
                using (PdfStamper stamper = PdfStamper.CreateSignature(reader, fout, '\0', null, true))
                {
                    PdfSignatureAppearance appearance = stamper.SignatureAppearance;
                    appearance.Reason   = reason;
                    appearance.Location = location;
                    MakeSignature.SignDetached(appearance, externalSignature, chain, null, null, null, 0,
                                               CryptoStandard.CADES);
                    stamper.Close();
                }
            }
        }
Beispiel #17
0
        public MemoryStream sign(
            byte[] byte_pdfData, X509Certificate2 cert, Org.BouncyCastle.X509.X509Certificate[] chain,
            string hashAlgorithm, string reason, string location, int certifyLevel,
            byte[] sigImg, bool isShowDescription
            )
        {
            //Open source PDF
            PdfReader pdfReader = new PdfReader(byte_pdfData);

            MemoryStream outputStream = new MemoryStream();

            //Create PDF Stamper
            PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, outputStream, '\0');

            //Create PDF Signature Appearance
            PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;

            signatureAppearance.Reason                 = reason;                                           //Reason
            signatureAppearance.Location               = location;                                         //Location
            signatureAppearance.CertificationLevel     = certifyLevel;
            signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION; //Rendering mode


            IExternalSignature signature = new X509Certificate2Signature(cert, hashAlgorithm);

            try
            {
                //Do signing
                MakeSignature.SignDetached(signatureAppearance, signature, chain, null, null, null, 0, this.sigType);
            }
            catch (Exception e)
            {
                throw new Exception("Cannot sign the PDF file.", e);
            }

            return(outputStream);
        }
Beispiel #18
0
        public string SignDocument(string documentPdf, DigitalCertificate cert, PdfOptions certOptions, string pathOutput)
        {
            try
            {
                var reader  = new PdfReader(documentPdf);
                var output  = new FileStream(pathOutput, FileMode.Create, FileAccess.Write, FileShare.None);
                var stamper = PdfStamper.CreateSignature(reader, output, '\0');


                var rect       = new iTextSharp.text.Rectangle(10, 10, 0, 0);
                var appearance = stamper.SignatureAppearance;
                appearance.Reason             = "Assinatura digital";
                appearance.SignDate           = certOptions.SignDate;
                appearance.Contact            = certOptions.Contact;
                appearance.SignatureGraphic   = certOptions.SignImage;
                appearance.Location           = certOptions.Location;
                appearance.CertificationLevel = PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED;
                appearance.SetVisibleSignature(rect, 1, certOptions.NameOwnerOfCertificate);
                IExternalSignature pks = new X509Certificate2Signature(cert.Certificate, "sha-256");

                var ce    = new X509CertificateParser();
                var chain = ce.ReadCertificate(cert.Certificate.RawData);

                var lista = new List <X509Certificate> {
                    chain
                };
                ICollection <X509Certificate> lst = lista;

                MakeSignature.SignDetached(appearance, pks, lst, null, null, null, 0, CryptoStandard.CMS);
                return(pathOutput);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
Beispiel #19
0
        public static void SignHashed(MemoryStream Source, string Target, SysX509.X509Certificate2 Certificate, string Reason, string Location, bool AddVisibleSign, Image img, int nroHojaFirma, string path, float h, string att_1, string att_2, string att_3, string url_terminos)
        {
            try
            {
                X509CertificateParser objCP             = new X509CertificateParser();
                X509Certificate[]     objChain          = new X509Certificate[] { objCP.ReadCertificate(Certificate.RawData) };
                IExternalSignature    externalSignature = new X509Certificate2Signature(Certificate, "SHA-1");

                PdfReader objReader = new PdfReader(Source);

                //string[] msg = Certificate.SubjectName.Name.Split(',');

                //Document document = new Document(PageSize.A4, 50, 50, 150, 100);
                //PdfWriter pdfwritter = PdfWriter.GetInstance(document, new FileStream("C:\\Users\\Public\\terminos_condiciones.pdf", FileMode.OpenOrCreate));

                using (PdfReader readerTerm = new PdfReader(url_terminos))
                    using (MemoryStream workStream = new MemoryStream())
                    {
                        PdfStamper objStamper = PdfStamper.CreateSignature(objReader, new FileStream(Target, FileMode.OpenOrCreate, FileAccess.Write), '\0');

                        int       nroPages  = objReader.NumberOfPages + 1;
                        Rectangle rectangle = readerTerm.GetPageSize(1);
                        objStamper.InsertPage(nroPages, rectangle);

                        PdfImportedPage bg = objStamper.GetImportedPage(readerTerm, 1);
                        objStamper.GetUnderContent(nroPages).AddTemplate(bg, 0, 0);

                        PdfSignatureAppearance objSA = objStamper.SignatureAppearance;

                        img.ScaleAbsolute(120f, 60f);
                        img.SetAbsolutePosition(0, 28);
                        BaseFont bf     = BaseFont.CreateFont(BaseFont.HELVETICA, BaseFont.CP1252, false);
                        BaseFont bfBold = BaseFont.CreateFont(BaseFont.HELVETICA_BOLD, BaseFont.CP1252, false);

                        if (true)
                        {
                            objSA.SetVisibleSignature(new Rectangle(50, h - 120, 200, h), nroHojaFirma, "Firma Digital emitida por el sistema BV Digital");
                        }

                        PdfTemplate n2Layer = objSA.GetLayer(2);
                        n2Layer.BeginText();
                        n2Layer.SetFontAndSize(bfBold, 7);
                        n2Layer.ShowTextAligned(Element.ALIGN_LEFT, "Inspectorate Services Perú S.A.C", 0, 100, 0);
                        n2Layer.ShowTextAligned(Element.ALIGN_LEFT, "A Bureau Veritas Group Company", 0, 90, 0);

                        n2Layer.EndText();

                        n2Layer.AddImage(img);
                        n2Layer.BeginText();
                        n2Layer.SetFontAndSize(bf, 7);
                        n2Layer.ShowTextAligned(Element.ALIGN_LEFT, "Firmado Digitalmente por", 0, 40, 0);
                        //string user = msg[2].Substring(msg[2].IndexOf('=') + 1);
                        //user += " " + msg[3].Substring(msg[3].IndexOf('=') + 1);
                        n2Layer.ShowTextAligned(Element.ALIGN_LEFT, att_3, 0, 30, 0);
                        n2Layer.ShowTextAligned(Element.ALIGN_LEFT, "Fecha: " + objSA.SignDate.ToString(), 0, 20, 0);
                        n2Layer.ShowTextAligned(Element.ALIGN_LEFT, att_1, 0, 10, 0);
                        n2Layer.ShowTextAligned(Element.ALIGN_LEFT, att_2, 0, 0, 0);
                        n2Layer.EndText();
                        objSA.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;
                        MakeSignature.SignDetached(objSA, externalSignature, objChain, null, null, null, 0, CryptoStandard.CMS);
                        objStamper.SetFullCompression();
                    }
            }
            catch (Exception e)
            {
                Utility.log_err.save(null, e);
            }
        }
Beispiel #20
0
        public void Assinar(string caminhoDocSemAssinatura, string caminhoDocAssinado)
        {
            try
            {
                X509Store store = new X509Store(StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);
                X509Certificate2Collection sel = X509Certificate2UI.SelectFromCollection(store.Certificates, "Assinatura Digital", "Escolha uma assinatura abaixo:", X509SelectionFlag.SingleSelection);

                X509Certificate2 cert = sel[0];

                Org.BouncyCastle.X509.X509CertificateParser cp    = new Org.BouncyCastle.X509.X509CertificateParser();
                Org.BouncyCastle.X509.X509Certificate[]     chain = new Org.BouncyCastle.X509.X509Certificate[] {
                    cp.ReadCertificate(cert.RawData)
                };
                //Console.Write("ANTES");
                //IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA-1");
                //Console.Write("aqui");

                //Get Cert Chain
                IList <Org.BouncyCastle.X509.X509Certificate> signatureChain = new List <Org.BouncyCastle.X509.X509Certificate>();
                X509Chain x509chain = new X509Chain();
                x509chain.Build(cert);
                foreach (X509ChainElement x509ChainElement in x509chain.ChainElements)
                {
                    signatureChain.Add(DotNetUtilities.FromX509Certificate(x509ChainElement.Certificate));
                }


                using (var reader = new PdfReader(caminhoDocSemAssinatura))
                    using (var writer = new FileStream(caminhoDocAssinado, FileMode.Create, FileAccess.Write))
                        using (var stamper = PdfStamper.CreateSignature(reader, writer, '\0', null, true))
                        {
                            PdfSignatureAppearance signature = stamper.SignatureAppearance;
                            signature.CertificationLevel = PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED;
                            signature.Reason             = "Hospital Austa";
                            signature.ReasonCaption      = "Tipo de Assinatura: ";

                            //Console.Write("ANTES");
                            //Org.BouncyCastle.Crypto.AsymmetricCipherKeyPair key = DotNetUtilities.GetKeyPair(cert.PrivateKey);
                            //Console.Write("ANTES2");
                            // var signatureKey = new PrivateKeySignature(cert.PrivateKey, "SHA256");
                            //Console.Write("depois");

                            var parser            = new Org.BouncyCastle.X509.X509CertificateParser();
                            var bouncyCertificate = parser.ReadCertificate(cert.RawData);
                            var algorithm         = DigestAlgorithms.GetDigest(bouncyCertificate.SigAlgOid);
                            var signatureKey      = new X509Certificate2Signature(cert, algorithm);



                            //signatureChain = cert;
                            var standard = CryptoStandard.CADES;

                            signature.SignatureGraphic = Image.GetInstance(@"\\192.168.10.27\a3\certificado.jpg");
                            signature.SetVisibleSignature(new Rectangle(100, 100, 250, 150), reader.NumberOfPages, "Signature");
                            signature.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;

                            MakeSignature.SignDetached(signature, signatureKey, signatureChain, null, null, null, 0, CryptoStandard.CMS);
                        }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            /*signatureAppearance.SignatureGraphic = Image.GetInstance(pathToSignatureImage);
             * signatureAppearance.SetVisibleSignature(new Rectangle(100, 100, 250, 150), pdfReader.NumberOfPages, "Signature");
             * signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;
             *
             * MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);*/
        }
        private int SignWithThisCert(X509Certificate2 Certificate, string Contact, string SourcePdfFileName, string DestPdfFileName)
        {
            try
            {
                Org.BouncyCastle.X509.X509CertificateParser cp    = new Org.BouncyCastle.X509.X509CertificateParser();
                Org.BouncyCastle.X509.X509Certificate[]     chain = new Org.BouncyCastle.X509.X509Certificate[1];
                chain[0] = cp.ReadCertificate(Certificate.RawData);
                IExternalSignature externalSignature = new X509Certificate2Signature(Certificate, "SHA-1");
                PdfReader          pdfReader         = new PdfReader(SourcePdfFileName);

                FileStream signedPdf = new FileStream(DestPdfFileName, FileMode.Create); //the output pdf file

                PdfStamper     pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0');
                PdfContentByte pdfData    = pdfStamper.GetOverContent(1);


                /*
                 * iTextSharp.text.Document d = new iTextSharp.text.Document();
                 * PdfWriter writer =PdfWriter.GetInstance(d,signedPdf);
                 * d.Open();
                 * PdfContentByte cb = writer.DirectContent;
                 * cb.BeginText();
                 *
                 * cb.SetFontAndSize(BaseFont.CreateFont(BaseFont.TIMES_ITALIC, BaseFont.CP1252, BaseFont.NOT_EMBEDDED), 12);
                 * cb.ShowTextAligned(iTextSharp.text.Element.ALIGN_CENTER, "Shreyas-Kalyanaraman", 300, 700, 0);
                 * cb.ShowText("Shreyas Kalyanaraman");
                 * cb.EndText();
                 * d.Close();
                 * writer.Close();
                 */
                //Create the QR Code/2D Code-------------------------------
                //  Image qrImage = GenerateQRCode(Convert.ToBase64String(Certificate.RawData));

                Image qrImage = GenerateQRCode(Contact);
                iTextSharp.text.Image itsQrCodeImage = iTextSharp.text.Image.GetInstance(qrImage, System.Drawing.Imaging.ImageFormat.Jpeg);
                itsQrCodeImage.SetAbsolutePosition(270, 50);
                pdfData.AddImage(itsQrCodeImage);

                //Create the QR Code/2D Code-------------------------------END

                PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;
                signatureAppearance.Acro6Layers = true;

                signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(33, 50, 270, 130), 1, null);
                //here set signatureAppearance at your will

                signatureAppearance.Contact = Contact;
                signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;

                //Stamp the PDF
                //MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
                MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CADES);
                // d.Close();
                //writer.Close();


                signedPdf.Close();


                return(1);
            }
            catch (Exception ex)
            {
                if (!System.IO.File.Exists(SourcePdfFileName))
                {
                    ViewBag.Status = ex.Message;
                }
                Exception ex2 = new Exception();
                ViewBag.Status = ex2.Message;
                throw ex2;
            }
        }
Beispiel #22
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;
            }
        }
        private static void CreateSignature(SigningCertificates signingCertificates, PdfSignatureAppearance signatureAppearance, ICollection <ICrlClient> clrClients, IOcspClient oscpClient)
        {
            IExternalSignature externalSignature = new X509Certificate2Signature(signingCertificates.X509Certificate2, "SHA-1");

            MakeSignature.SignDetached(signatureAppearance, externalSignature, signingCertificates.FinalChain, clrClients, oscpClient, null, 0, CryptoStandard.CMS);
        }
Beispiel #24
0
        private DocuResponse SignDocumentWithPin(DocuRequest doc)
        {
            //Sign from SmartCard
            //note : ProviderName and KeyContainerName can be found with the dos command : CertUtil -ScInfo
            DocuResponse respo = new DocuResponse();


            X509Store store = new X509Store(StoreLocation.CurrentUser);

            store.Open(OpenFlags.ReadOnly);
            X509Certificate2 cert = null;

            if (doc.ProviderName == "")
            {
                respo.HasError     = true;
                respo.ErrorMessage = "Per te firmosur me certifikaten tuaj duhet te jepni Provider Name";
                return(respo);
            }
            foreach (X509Certificate2 cert2 in store.Certificates)
            {
                if (cert2.HasPrivateKey)
                {
                    RSACryptoServiceProvider rsa = (RSACryptoServiceProvider)cert2.PrivateKey;
                    if (rsa == null)
                    {
                        continue;                               // not smart card cert again
                    }
                    if (rsa.CspKeyContainerInfo.HardwareDevice) // sure - smartcard
                    {
                        if (rsa.CspKeyContainerInfo.ProviderName == doc.ProviderName)
                        {
                            //we found it
                            cert = cert2;
                            break;
                        }
                    }
                }
            }
            if (cert == null)
            {
                respo.HasError     = true;
                respo.ErrorMessage = "Certifikata nuk u gjet!";
                return(respo);
            }

            if (doc.PinCode != "")
            {
                //if pin code is set then no windows form will popup to ask it
                RSACryptoServiceProvider rsaForKeyContainer = (RSACryptoServiceProvider)cert.PrivateKey;
                SecureString             pwd = GetSecurePin(doc.PinCode);
                CspParameters            csp = new CspParameters(1,
                                                                 doc.ProviderName,
                                                                 rsaForKeyContainer.CspKeyContainerInfo.KeyContainerName,
                                                                 new System.Security.AccessControl.CryptoKeySecurity(),
                                                                 pwd);
                try
                {
                    RSACryptoServiceProvider rsaCsp = new RSACryptoServiceProvider(csp);
                }
                catch (Exception ex)
                {
                    respo.HasError     = true;
                    respo.ErrorMessage = "Crypto error: " + ex.Message;
                    respo.StackTrace   = ex.StackTrace;
                    return(respo);
                }
            }

            //sign


            Org.BouncyCastle.X509.X509CertificateParser cp    = new Org.BouncyCastle.X509.X509CertificateParser();
            Org.BouncyCastle.X509.X509Certificate[]     chain = new Org.BouncyCastle.X509.X509Certificate[] {
                cp.ReadCertificate(cert.RawData)
            };

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

            PdfReader pdfReader;

            using (pdfReader = new PdfReader(doc.BasePdf))
            {
                using (signedPdf_mem = new MemoryStream())
                {
                    pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf_mem, '\0');
                    PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;
                    if (doc.SignImage != null && doc.SignImage.Length != 0)
                    {
                        signatureAppearance.SignatureGraphic       = iTextSharp.text.Image.GetInstance(doc.SignImage);
                        signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;
                    }
                    else
                    {
                        signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.NAME_AND_DESCRIPTION;
                    }
                    signatureAppearance.SetVisibleSignature(new iTextSharp.text.Rectangle(100, 100, 250, 150), pdfReader.NumberOfPages, "NisaDigiSign");
                    signatureAppearance.Reason = "Certifikuar elektronikisht nga sistemi NISA";

                    ITSAClient TsaClient = new TSAClientBouncyCastle(doc.timestampServer);

                    MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, TsaClient, 0, CryptoStandard.CMS);

                    respo.SignedPdf = signedPdf_mem.ToArray();
                }
            }

            return(respo);
        }
Beispiel #25
0
        static void Main(string[] args)
        {
            PdfReader  pdfReaderLocal = null;
            FileStream fout = null;
            float      RectRight = 0; float RectLeft = 0; float RectTop = 0; float RectBottom = 0;

            try
            {
                bool             isVisibleSignature = true;
                int              noOfPage           = 0;
                bool             iscert             = false;
                X509Certificate2 mcert = null;
                X509Store        store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);
                X509Certificate2Collection certificates = store.Certificates;
                if (certificates.Count == 0)
                {
                    store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
                }
                foreach (X509Certificate2 certs in certificates)
                {
                    if (certs.GetName().Contains("Exalca DS Ver2.0"))
                    {
                        iscert = true;
                        mcert  = certs;
                        Console.WriteLine("found cert Exalca DS Ver2.0");
                    }
                }
                //string Internal_path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Signed_Doc") + "\\" + InvoiceName;
                string inptfldr = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "InputFldr");

                if (!Directory.Exists(inptfldr))
                {
                    Directory.CreateDirectory(inptfldr);
                }

                string outfldr = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "OutputFldr");
                if (!Directory.Exists(outfldr))
                {
                    Directory.CreateDirectory(outfldr);
                }
                if (iscert)
                {
                    string           Sign_Location = "Bengaluru";
                    string           Sign_AllPages = "N";
                    X509Certificate2 cert          = mcert; //get certificate based on thumb print

                    Org.BouncyCastle.X509.X509CertificateParser cp    = new Org.BouncyCastle.X509.X509CertificateParser();
                    Org.BouncyCastle.X509.X509Certificate[]     chain = new Org.BouncyCastle.X509.X509Certificate[] {
                        cp.ReadCertificate(cert.RawData)
                    };

                    IExternalSignature externalSignature = new X509Certificate2Signature(cert, "SHA1");
                    //PdfReader pdfReader = new PdfReader(sourceDocument);
                    System.GC.Collect();
                    System.GC.WaitForPendingFinalizers();
                    //ErrorLog.WriteHistoryLog("Open for write");
                    //signatureAppearance.SignatureGraphic = Image.GetInstance(pathToSignatureImage);
                    //signatureAppearance.Reason = reason; signpdf method
                    pdfReaderLocal = new PdfReader(inptfldr + "//s.pdf");
                    noOfPage       = pdfReaderLocal.NumberOfPages;

                    iTextSharp.text.Rectangle mediabox = pdfReaderLocal.GetPageSize(1);
                    fout = new FileStream(outfldr + "\\123.pdf", FileMode.Append, FileAccess.Write);
                    PdfStamper             stamper             = PdfStamper.CreateSignature(pdfReaderLocal, fout, '\0', null, true);
                    PdfSignatureAppearance signatureAppearance = stamper.SignatureAppearance;

                    signatureAppearance.ReasonCaption   = "";
                    signatureAppearance.Reason          = "Exalca";
                    signatureAppearance.LocationCaption = "";

                    signatureAppearance.Location    = "Bengaluru";
                    signatureAppearance.Acro6Layers = false;
                    signatureAppearance.Layer4Text  = PdfSignatureAppearance.questionMark;

                    BaseFont bf = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
                    signatureAppearance.Layer2Font = new iTextSharp.text.Font(bf, 8, iTextSharp.text.Font.NORMAL);
                    var rec1 = new iTextSharp.text.Rectangle(610, 75, 440, 150);
                    signatureAppearance.SetVisibleSignature(rec1, 1, "Signature" + 1); //i-->Page no,Signature1--->Field name

                    MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CMS);
                    signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC_AND_DESCRIPTION;
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                if (pdfReaderLocal != null)
                {
                    pdfReaderLocal.Close();
                    pdfReaderLocal.Dispose();
                }
                if (fout != null)
                {
                    fout.Close();
                    fout.Dispose();
                }
            }
        }
Beispiel #26
0
        public static void AssinaComToken(Stream File, out byte[] SignFile, CertSimples cert, float X, float Y, int Pagina, int Rotation, bool AddTimeStamper = true, string urlTimeStamper = "https://freetsa.org/tsr", string timeStampUser = "", string timeStampPass = "", string Reason = "Assinatura Digital", bool AplicaPolitica = false, string MyDigestAlgorithm = "SHA-1", string Contact = "", string Location = "Indústrias Nucleares do Brasil S/A - INB", string Creator = "Assinador da INB", TipoAssinatura Tipo = TipoAssinatura.Normal, string Cargo = "", string CREACRM = "")
        {
            int Largura = 155;
            int Altura  = 63;

            Org.BouncyCastle.X509.X509CertificateParser cp    = new Org.BouncyCastle.X509.X509CertificateParser();
            Org.BouncyCastle.X509.X509Certificate[]     chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.Certificado.RawData) };
            IExternalSignature externalSignature = new X509Certificate2Signature(cert.Certificado, MyDigestAlgorithm);
            PdfReader          pdfReader         = new PdfReader(File);
            MemoryStream       signedPdf         = new MemoryStream();
            //cria a assinatura
            //PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0', "temp" + signedPdf, true);

            string path = System.AppDomain.CurrentDomain.BaseDirectory + "Temp\\";

            PdfStamper pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0', path + DateTime.Now.ToString("hhMMddHHmmss") + ".pdf", true);

            Bitmap bmp = Graphic.ConfiguraBMP(cert, out Altura, Tipo);
            PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;

            ConfiguraAparenciaAssinatura(signatureAppearance, Reason, Contact, Location, Creator, bmp, Altura, Largura, X, Y, Rotation, Pagina, pdfReader);

            TSAClientBouncyCastle tsaClient = null;

            if (AddTimeStamper)
            {
                tsaClient = new TSAClientBouncyCastle(urlTimeStamper, timeStampUser, timeStampPass, TSAClientBouncyCastle.DEFAULTTOKENSIZE, MyDigestAlgorithm);
            }

            IOcspClient       ocspClient = new OcspClientBouncyCastle();
            List <ICrlClient> crlList    = new List <ICrlClient>();

            crlList.Add(new CrlClientOnline(chain));



            if (AplicaPolitica)
            {
                SignaturePolicyInfo spi = PoliticaDaAssinatura();
                MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CADES, spi);
            }
            else
            {
                MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CADES);
            }

            try
            {
                SignFile = signedPdf.ToArray();
                //SignFile = INB.Assinador.Helper.Funcoes.ToByteArray(teste);

                //MemoryStream teste = (MemoryStream)signatureAppearance.TempFile;

                //signedPdf.Flush();
                //SignFile
                // SignFile = new MemoryStream(ArquivoAssinado);
                // signedPdf.CopyTo();
                try
                {
                    signedPdf.Close();
                    signedPdf.Dispose();
                }
                catch { }
            }
            catch (Exception ex)
            {
                SignFile = null;
                throw ex;
            }
            try
            {
                signedPdf.Close();
            }
            catch (Exception ex) {}
            pdfReader.Close();
            try
            {
                pdfReader.Dispose();
            }
            catch { }
        }
Beispiel #27
0
        private void btnSign_Click(object sender, EventArgs e)
        {
            try
            {
                // Set wait cursor
                this.Cursor = Cursors.WaitCursor;
                Application.DoEvents();

                X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);

                // Get signature certificate for current citizen
                X509Certificate2Collection certsToShow = store.Certificates.Find(X509FindType.FindBySubjectName, "Assinatura", false);
                X509Certificate2Collection certs       = certsToShow.Find(X509FindType.FindBySubjectName, "BI" + txtIdNumber.Text, false);

                if (certs.Count <= 0)
                {
                    MessageBox.Show("Certificate not found.",
                                    "Error!",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                    return;
                }

                var cert = certs[0];

                if (cert != null)
                {
                    // Sign every file found on listbox
                    foreach (string file in lbFilesToSign.Items)
                    {
                        try
                        {
                            // Get source folder and source filename
                            string sourceFolder = Path.GetDirectoryName(file);
                            string filename     = Path.GetFileName(file);

                            lblStatus.Text = "A assinar o file " + filename;

                            // Create "Signed" sub-folder if doesn't exists
                            string signedFolder = Path.Combine(sourceFolder, "Signed");

                            if (!Directory.Exists(signedFolder))
                            {
                                Directory.CreateDirectory(signedFolder);
                            }

                            // Generate destination path for signed file
                            var signedFile = signedFolder + "/" + filename;

                            // Convert X509Certificate2 to X509Certificate
                            X509CertificateParser certParse = new Org.BouncyCastle.X509.X509CertificateParser();
                            Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { certParse.ReadCertificate(cert.RawData) };

                            // Reader and stamper
                            PdfReader  pdfReader = new PdfReader(file);
                            Stream     signedPdf = new FileStream(signedFile, FileMode.Create);
                            PdfStamper stamper   = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0', null, cbMultiSign.Checked);

                            // Appearance
                            PdfSignatureAppearance appearance = stamper.SignatureAppearance;
                            appearance.SignatureCreator = "PDF Signer 1.0";
                            if (txtReason.Text != "")
                            {
                                appearance.Reason = txtReason.Text;
                            }
                            if (txtLocation.Text != "")
                            {
                                appearance.Location = txtLocation.Text;
                            }

                            // Timestamp
                            TSAClientBouncyCastle tsc = null;
                            if (cbSignWithTSA.Checked == true)
                            {
                                tsc = new TSAClientBouncyCastle("http://ts.cartaodecidadao.pt/tsa/server", "", "");
                            }

                            // Digital signature
                            X509Certificate2Signature externalSignature = new X509Certificate2Signature(cert, "SHA-1");
                            MakeSignature.SignDetached(appearance, externalSignature, chain, null, null, tsc, 0, CryptoStandard.CMS);

                            stamper.Close();
                        }
                        catch (System.IO.IOException)
                        {
                            MessageBox.Show("File not found",
                                            "Error!",
                                            MessageBoxButtons.OK,
                                            MessageBoxIcon.Exclamation);
                        }
                    }

                    // Remove all files from listbox
                    lbFilesToSign.Items.Clear();
                    btnRemoveFile.Enabled = false;
                    btnSignNow.Enabled    = false;
                    MessageBox.Show("You have successfully signed the document(s)", "Success!");
                }
                else
                {
                    MessageBox.Show("Certificate not found.",
                                    "Error!",
                                    MessageBoxButtons.OK,
                                    MessageBoxIcon.Exclamation);
                    return;
                }
            }
            catch (System.Security.Cryptography.CryptographicException)
            {
            }
            catch (System.Net.WebException)
            {
                MessageBox.Show("You must have an internet connection to use timestamp server.",
                                "Error!",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
            }
            catch (Exception)
            {
                MessageBox.Show("Oops.. Something wrong.",
                                "Error!",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Exclamation);
            }
            finally
            {
                // Set default cursor
                this.Cursor = Cursors.Default;

                if (lblStatus.Text.Contains("A assinar o file"))
                {
                    lblStatus.Text = "Card Inserted.";
                }
            }
        }
Beispiel #28
0
        // metodo principal para el procesamiento de pdfs (firma digital adjuntos metadatos)
        public string SignPdf(
            SignRenderingMode signRenderingMode,
            Funciones.Archivos.Pdf.Dtos.PdfSign.PdfSignRequestDto jsonToProcess,
            string path)
        {
            try
            {
                //var json = File.ReadAllText(path);

                //var jsonToProcess = JsonConvert
                //.DeserializeObject<Funciones.Archivos.Pdf.Dtos.PdfSign.PdfSignRequestDto>(json.Replace("<EOF>", ""));

                _target = jsonToProcess.outPath;
                _fs     = GetPdfStreamFormUrlOrBase64(jsonToProcess.dataUriBase64PdfToSign);

                // conversor de certificados
                var objCP   = new BcX509.X509CertificateParser();
                var crlList = new List <ICrlClient>();

                // buscar el certificado por numero serial
                var certificate = SearchCertificate(jsonToProcess.certificateSerialNumber);
                if (certificate == null)
                {
                    return("No se encontraron certificados para el serial: " + jsonToProcess.certificateSerialNumber);
                }

                // definicion del certificado operable
                var objChain = new BcX509.X509Certificate[] { objCP.ReadCertificate(certificate.RawData) };
                crlList.Add(new CrlClientOnline(objChain));

                //TODO: habilitar la estampa cronologica (Error) (verificar tsa Timestamping Authority)
                // agregamos la estampa cronologica
                #region estampa cronologica
                ITSAClient  tsaClient  = null;
                IOcspClient ocspClient = null;
                if (jsonToProcess.addTimeStamp)
                {
                    ocspClient = new OcspClientBouncyCastle();
                    //CertificateUtil.getTSAURL(Org.BouncyCastle.Security.DotNetUtilities.FromX509Certificate(certificate));
                    tsaClient = new TSAClientBouncyCastle(jsonToProcess.urlTSA);
                }
                #endregion estampa cronologica

                // cargue del pdf al lector de itextsharp
                var _pdfReader = new PdfReader(_fs);

                // cargue an memoria del pdf
                using (var _wfs = new MemoryStream())
                {
                    // creacion de la firma a partir del lector itextsharp y el pdf en memoria
                    using (var objStamper = PdfStamper.CreateSignature(_pdfReader, _wfs, '\0', null, true))
                    {
                        // Procesar adjuntos
                        var attachmentIndex = 1;
                        (jsonToProcess.dataUriBase64ListOfPdfToAttach as List <FileToAttachDto>).ForEach(
                            (item) =>
                        {
                            //TODO: verificar si no se va a necesitar
                            if (!item.pathOrDataUriBase64.StartsWith("data:"))
                            {
                                var pfs = PdfFileSpecification.FileEmbedded(objStamper.Writer, item.fileDescription, attachmentIndex + "_" + item.fileDescription + ".pdf", null, true);
                                objStamper.Writer.AddFileAttachment("Adjunto número: " + attachmentIndex, pfs);
                            }
                            else
                            {
                                try
                                {
                                    var x   = StreamToByteArray(GetPdfStreamFormUrlOrBase64(item.pathOrDataUriBase64));
                                    var pfs = PdfFileSpecification.FileEmbedded(
                                        objStamper.Writer,
                                        item.fileDescription + ".pdf",
                                        item.fileDescription + ".pdf",
                                        x,
                                        true,
                                        item.mimeType,
                                        null
                                        );
                                    objStamper.Writer.AddFileAttachment("Adjunto número: " + attachmentIndex, pfs);
                                    //.AddFileAttachment("adjunto número: " + attachmentIndex, x, "adjunto_" + attachmentIndex + ".pdf", "adjunto " + attachmentIndex);
                                }
                                catch (Exception exce)
                                {
                                    Console.WriteLine(exce.StackTrace);
                                }
                            }
                            attachmentIndex++;
                        });

                        // definicion de la apariencia de la firma
                        var signatureAppearance = objStamper.SignatureAppearance;
                        // definicion del enum itextsharp a partir del enum parametro local
                        var mode = Enum.Parse(typeof(RenderingMode), signRenderingMode.ToString());
                        signatureAppearance.SignatureRenderingMode = (RenderingMode)mode;
                        signatureAppearance.Reason   = jsonToProcess.reasonToSign;
                        signatureAppearance.Location = jsonToProcess.locationDescription;

                        // agregar marca visual de firma digital
                        #region agregar marca visual firma digital
                        if (jsonToProcess.addVisibleSignMark)
                        {
                            // definicion de imagen desde ruta o base64
                            signatureAppearance.SignatureGraphic = GetImageFormUrlOrBase64(jsonToProcess.dataUriBase64SignImage);
                            // definicion de la firma digital visible
                            signatureAppearance.SetVisibleSignature(
                                new Rectangle(jsonToProcess.visibleSignMarkWidth, jsonToProcess.visibleSignMarkHeight, jsonToProcess.xVisibleSignMarkPosition, jsonToProcess.yVisibleSignMarkPosition),
                                _pdfReader.NumberOfPages,
                                jsonToProcess.visibleSignText);
                        }
                        #endregion agregar marca visual firma digital

                        // Agregar propiedades extendidas
                        objStamper.MoreInfo = (jsonToProcess.metadata as List <MetadataDto>).ToDictionary(x => x.key, x => x.value);

                        //TODO: verificar si no es necesario la utilizacion de XMP manual (actualmente funciona)
                        #region xmp implementacion manual

                        /* objStamper.Writer.CreateXmpMetadata();
                         * var xmp = objStamper.Writer.XmpMetadata;
                         *
                         *
                         * //XMP metadatos
                         * IXmpMeta xmp;
                         * using (var stream = File.OpenRead(@"C:\Users\danie\OneDrive\Escritorio\xmpMetadata.xml"))
                         *  xmp = XmpMetaFactory.Parse(stream);
                         *
                         * foreach (var property in xmp.Properties)
                         * {
                         *  Console.WriteLine($"Path={property.Path} Namespace={property.Namespace} Value={property.Value}");
                         * }
                         *
                         * var serializeOptions = new SerializeOptions();
                         * serializeOptions.UsePlainXmp = true;
                         * var newMetadata = XmpMetaFactory.SerializeToBuffer(xmp, serializeOptions);
                         * objStamper.XmpMetadata = newMetadata;*/
                        #endregion xmp implementacion manual

                        // Firmar digitalmente
                        var externalSignature = new X509Certificate2Signature(certificate, jsonToProcess.certificateHashAlgorithm);
                        MakeSignature.SignDetached(signatureAppearance, externalSignature, objChain, crlList, ocspClient, tsaClient, 0, CryptoStandard.CMS);
                    }
                    var pdfFileTocreate = jsonToProcess.outPath.Replace("json", "pdf");
                    System.IO.File.WriteAllBytes(pdfFileTocreate, _wfs.ToArray());
                    Process.Start(pdfFileTocreate);
                    return(Convert.ToBase64String(_wfs.ToArray()));
                }
            }
            catch (Exception exce)
            {
                WriteToFile(exce.StackTrace);
                WriteToFile(exce.Message);
                return(exce.Message);
            }
        }
    public void Sign(String src, String dest,
                     ICollection <X509Certificate> chain, X509Certificate2 pk,
                     String digestAlgorithm, CryptoStandard subfilter,
                     String reason, String location,
                     ICollection <ICrlClient> crlList,
                     IOcspClient ocspClient,
                     ITSAClient tsaClient,
                     int estimatedSize, int RowIdx, int RowHeight, int x, int y, int NameWidth, int DateWidth,
                     String RevIndex, String RevStep, String Reason, String Name, String Date)
    {
        // Creating the reader and the stamper
        PdfReader  reader  = null;
        PdfStamper stamper = null;
        FileStream os      = null;

        try
        {
            reader = new PdfReader(src);
            os     = new FileStream(dest, FileMode.Create);
            // os = new FileStream(dest, FileMode.Create, FileAccess.Write);
            //Activate MultiSignatures
            stamper = PdfStamper.CreateSignature(reader, os, '\0', null, true);
            //To disable Multi signatures uncomment this line : every new signature will invalidate older ones !
            //stamper = PdfStamper.CreateSignature(reader, os, '\0');
            // Creating the appearance
            PdfSignatureAppearance appearance = stamper.SignatureAppearance;
            Rectangle rectangle = new Rectangle(x, y + RowIdx * RowHeight, x + NameWidth + DateWidth, y + (RowIdx + 1) * RowHeight);
            appearance.SetVisibleSignature(rectangle, 1, "Revision " + RevIndex + "|" + RevStep);
            appearance.Reason                 = "marked as changed";
            appearance.Location               = location;
            appearance.Layer2Text             = "Signed on " + DateTime.Now;
            appearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.DESCRIPTION;
            PdfTemplate n2   = appearance.GetLayer(2);
            Font        font = new Font();
            font.SetColor(255, 0, 0);
            font.Size = 10;
            ColumnText ct1 = new ColumnText(n2);
            ct1.SetSimpleColumn(new Phrase(Name, font), 0, 0, NameWidth, rectangle.Height, 15, Element.ALIGN_LEFT);
            ct1.Go();
            ColumnText ct2 = new ColumnText(n2);
            ct2.SetSimpleColumn(new Phrase(Date, font), NameWidth, 0, rectangle.Width, rectangle.Height, 15, Element.ALIGN_LEFT);
            ct2.Go();
            //n2.ConcatCTM(1, 0, 0, -1, 0, 0);
            //n2.SaveState();
            // Creating the signature
            IExternalSignature pks = new X509Certificate2Signature(pk, digestAlgorithm);
            MakeSignature.SignDetached(appearance, pks, chain, crlList, ocspClient, tsaClient, estimatedSize, subfilter);
        }
        catch (Exception ex)
        {
            Console.WriteLine("GMA: " + ex.Message);
        }
        finally
        {
            if (reader != null)
            {
                reader.Close();
            }
            if (stamper != null)
            {
                stamper.Close();
            }
            if (os != null)
            {
                os.Close();
            }
        }
    }
Beispiel #30
0
        public void CASignProcess(PdfAuthImg authImg)
        {
            PdfReader  pdfReader  = null;
            PdfStamper pdfStamper = null;
            FileStream signedPdf  = null;

            try
            {
                if (string.IsNullOrEmpty(BasePdf))
                {
                    throw new Exception("PDF源路径为空");
                }
                if (string.IsNullOrEmpty(StampPdf))
                {
                    throw new Exception("PDF输出路径为空");
                }

                pdfReader  = new PdfReader(BasePdf);
                signedPdf  = new FileStream(StampPdf, FileMode.OpenOrCreate);
                pdfStamper = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0', null, true);

                if (transScalH == 0 || transScalV == 0)
                {
                    float width  = pdfReader.GetPageSizeWithRotation(1).Width;
                    float height = pdfReader.GetPageSizeWithRotation(1).Height;
                    if (m_PaperWidth == 0 || m_PaperHeight == 0)
                    {
                        m_PaperWidth  = (float)(width / 72 * 25.4);
                        m_PaperHeight = (float)(height / 72 * 25.4);
                    }
                    float cmpOne = width, cmpTwo = height, cmpThr = m_PaperWidth, cmpFour = m_PaperHeight;
                    if (height > width)
                    {
                        cmpOne = height;
                        cmpTwo = width;
                    }
                    if (m_PaperHeight > m_PaperWidth)
                    {
                        cmpThr  = m_PaperHeight;
                        cmpFour = m_PaperWidth;
                    }
                    transScalH = cmpOne / cmpThr;
                    transScalV = cmpTwo / cmpFour;
                }


                X509Certificate2 cert  = null;
                X509Store        store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
                store.Open(OpenFlags.ReadOnly);
                foreach (X509Certificate2 myX509Certificate2 in store.Certificates)
                {
                    if (myX509Certificate2.Subject.Contains(authImg.CertName))
                    {
                        cert = myX509Certificate2;
                    }
                }
                store.Close();
                if (cert == null)
                {
                    return;
                }

                float m_llx = authImg.AbsoluteX;
                float m_lly = authImg.AbsoluteY;
                float m_urx = m_llx + authImg.FitWidth;
                float m_ury = m_lly + authImg.FitHeight;

                if (authImg.Rotation == 90 || authImg.Rotation == 270 || authImg.Rotation == -90)
                {
                    m_urx = m_llx + authImg.FitHeight;
                    m_ury = m_lly + authImg.FitWidth;
                }
                var stampArea = new Rectangle(m_llx * transScalH, m_lly * transScalV, m_urx * transScalH, m_ury * transScalV);

                var img = Image.GetInstance(authImg.ImagePath);
                img.Rotation = (float)(authImg.Rotation / 180 * Math.PI);

                X509CertificateParser cp = new X509CertificateParser();
                Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.RawData) };
                IExternalSignature externalSignature          = new X509Certificate2Signature(cert, "SHA-1");

                PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;
                signatureAppearance.SignatureGraphic = img;
                signatureAppearance.SetVisibleSignature(stampArea, authImg.PageNum, "Signature" + Index.ToString());
                signatureAppearance.SignatureRenderingMode = PdfSignatureAppearance.RenderingMode.GRAPHIC;
                signatureAppearance.SignDate = System.DateTime.Now;
                signatureAppearance.Reason   = "12345";
                MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, TsaClient, 0, CryptoStandard.CMS);
            }
            catch (System.Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (pdfStamper != null)
                {
                    pdfStamper.Close();
                }
                if (pdfReader != null)
                {
                    pdfReader.Close();
                }
                if (signedPdf != null)
                {
                    signedPdf.Close();
                }

                pdfStamper = null;
                pdfReader  = null;
                signedPdf  = null;
            }
        }