Creates a signature using a X509Certificate2. It supports smartcards without exportable private keys.
Inheritance: IExternalSignature
Ejemplo n.º 1
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();
     }
 }
Ejemplo n.º 2
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);
        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="inputPath"></param>
        /// <param name="outputPath"></param>
        /// <param name="cert"></param>
        /// <param name="caCerts"></param>
        /// <param name="signatureSettings"></param>
        public static void Sign(string inputPath, string outputPath, X509Certificate2 cert, ICollection<X509Certificate2> caCerts, SignatureSettings signatureSettings)
        {
            var cp = new Org.BouncyCastle.X509.X509CertificateParser();
            var chain = new List<Org.BouncyCastle.X509.X509Certificate> { cp.ReadCertificate(cert.RawData) };
            chain.AddRange(caCerts.Select(caCert => cp.ReadCertificate(caCert.RawData)));

            IExternalSignature pk = new X509Certificate2Signature(cert, DigestAlgorithms.SHA1);

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

            var signed = SignDocument(inputPath, chain, pk, CryptoStandard.CMS, signatureSettings.Reason,
                     signatureSettings.Location, crlList, null, signatureSettings.TsaClient, 0);

            File.WriteAllBytes(outputPath, signed);
            AddLtv(signed, outputPath, signatureSettings.OcspClient, crlList.First());
        }
Ejemplo n.º 4
0
        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");
        }
Ejemplo n.º 5
0
        public bool SignPdf(string SourcePdfFileName, string DestPdfFileName, DesignSign design)
        {
            var chain = __makeChain();

            try {
                IExternalSignature externalSignature = new iTextSharp.text.pdf.security.X509Certificate2Signature(cert, "SHA-1");

                PdfReader              pdfReader           = new PdfReader(SourcePdfFileName);
                FileStream             signedPdf           = new FileStream(DestPdfFileName, FileMode.Create);
                PdfStamper             pdfStamper          = PdfStamper.CreateSignature(pdfReader, signedPdf, '\0');
                PdfWriter              writer              = pdfStamper.Writer;
                PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;


                if (design != null)
                {
                    signatureAppearance = makePdfSignature(signatureAppearance, design);
                }



                //MakeSignature.SignDetached(signatureAppearance, externalSignature, chain, null, null, null, 0, CryptoStandard.CADES);
                // MessageBox.Show("Done");
                for (int i = 0; i < pdfReader.NumberOfPages; ++i)
                {
                    __drawFooter(pdfStamper, design, i + 1);
                    //PdfFormField form = formField(pdfStamper, i + 1,design);
                    //pdfStamper.AddAnnotation(form, i + 1);
                }

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


                signedPdf.Close();
            }
            catch (Exception e)
            {
                return(false);
            }
            return(true);
        }
Ejemplo n.º 6
0
        public static void SignPdfToken(String SRC, String DEST, String Reason, String Location, X509Certificate2 cert, String tokenPassword, String keyContainerName, String llx, String lly, String urx, String ury, int fontSize)
        {
            var pass = new SecureString();
            foreach (char c in tokenPassword.ToCharArray())
            {
                pass.AppendChar(c);
            }
            Console.WriteLine("Password cargada");

            CspParameters csp = new CspParameters(1,
                                                    CertUtils.ProviderName,
                                                    keyContainerName,
                                                    new System.Security.AccessControl.CryptoKeySecurity(),
                                                    pass);

            Console.WriteLine("CSP cargada");
            try
            {
                RSACryptoServiceProvider rsaCsp = new RSACryptoServiceProvider(csp);
                // the pin code will be cached for next access to the smart card
            }
            catch (Exception ex)
            {
                Console.WriteLine("Crypto error: " + ex.Message + " " + ex.GetType().ToString());
                throw ex;
            }
            Console.WriteLine("Crypto Provider cargado");
            //Org.BouncyCastle.X509.X509CertificateParser cp = new Org.BouncyCastle.X509.X509CertificateParser();
            //Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[] { cp.ReadCertificate(cert.RawData) };
            IList<X509Certificate> chain = new List<X509Certificate>();
            X509Chain x509chain = new X509Chain();
            x509chain.Build(cert);
            foreach (X509ChainElement x509ChainElement in x509chain.ChainElements)
            {
                chain.Add(DotNetUtilities.FromX509Certificate(x509ChainElement.Certificate));
            }
            IExternalSignature externalSignature = new X509Certificate2Signature(cert, DigestAlgorithms.SHA512);
            PdfReader pdfReader = new PdfReader(SRC);
            FileStream signedPdf = new FileStream(DEST, 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 = Reason;
            signatureAppearance.Location = Location;
            BaseFont bf = BaseFont.CreateFont();
            signatureAppearance.Layer2Font = new Font(bf, fontSize);
            signatureAppearance.CertificationLevel = PdfSignatureAppearance.CERTIFIED_NO_CHANGES_ALLOWED;
            signatureAppearance.SetVisibleSignature(new Rectangle(float.Parse(llx), float.Parse(lly), float.Parse(urx), float.Parse(ury)), 1, "sig");
            //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);
        }
Ejemplo n.º 7
0
        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);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Assina o arquivo PDF
        /// </summary>
        /// <param name="filePath">Caminho do arquivo</param>
        /// <param name="certificate">Certificado</param>
        /// <param name="reason">Motivo da assinatura</param>
        internal static void sign(string filePath, X509Certificate2 certificate, string reason = null)
        {
            try
            {
                // make the certificate chain
                IList <BCX.X509Certificate> chain = getCertChain(certificate);

                // open the original file
                TS.PdfReader reader = new TS.PdfReader(filePath);

                string newFilePath = filePath.Substring(0, filePath.Length - 4) + "_signed.pdf";

                // create a new file
                FileStream fout = new FileStream(newFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite);

                // create the "stamp" on the file
                TS.PdfStamper             stamper    = TS.PdfStamper.CreateSignature(reader, fout, '\0', null, true);
                TS.PdfSignatureAppearance appearance = stamper.SignatureAppearance;
                appearance.Reason   = reason;
                appearance.Location = getLocation(certificate.Subject);

                int i     = 1;
                int xdiff = 0;

                while (true)
                {
                    string fieldName = "Assinatura" + i.ToString();;
                    try
                    {
                        appearance.SetVisibleSignature(new iTextSharp.text.Rectangle(20 + xdiff, 10, 170 + xdiff, 60), 1, fieldName);

                        TSS.X509Certificate2Signature es = new TSS.X509Certificate2Signature(certificate, "SHA-1");
                        TSS.MakeSignature.SignDetached(appearance, es, chain, null, null, null, 0, TSS.CryptoStandard.CMS);
                        break;
                    }
                    catch (Exception ex)
                    {
                        if (ex.Message != "The field " + fieldName + " already exists.")
                        {
                            throw ex;
                        }
                        else
                        {
                            i++;
                            xdiff += 180;
                        }
                    }
                }

                // close the files
                reader.Close();
                fout.Close();

                // delete the tmp file e move the new to the right name
                System.IO.File.Delete(filePath);
                System.IO.File.Move(newFilePath, filePath);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }