Esempio n. 1
0
        public byte[] Sign(byte[] pdf, SignInformation signInfo)
        {
            PdfReader    document = new PdfReader(pdf);
            MemoryStream stream   = new MemoryStream();

            PdfStamper pdfStamper = PdfStamper.CreateSignature(document, stream, '\0');

            PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;

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

            IExternalSignature signature = new RSAProviderPrivateKey(signInfo.cert, signInfo.hashAlgorithm);

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

            return(stream.ToArray());
        }
Esempio n. 2
0
        public byte[] SignWithLTVEnable(byte[] pdf, SignInformation signInfo)
        {
            PdfReader    document = new PdfReader(pdf);
            MemoryStream stream   = new MemoryStream();

            //PdfStamper pdfStamper = new PdfStamper(document, stream, '0');
            PdfStamper pdfStamper = PdfStamper.CreateSignature(document, stream, '\0');

            PdfSignatureAppearance signatureAppearance = pdfStamper.SignatureAppearance;

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

            IExternalSignature signature = new RSAProviderPrivateKey(signInfo.cert, signInfo.hashAlgorithm);
            bool isTsaConnected          = false;

            for (int retry = 0; retry < 5; retry++)
            {
                try
                {
                    //int hash = tsaClient.GetHashCode();
                    string testString = "test";
                    byte[] digest;
                    using (System.Security.Cryptography.SHA256Managed sha256 = new System.Security.Cryptography.SHA256Managed())
                    {
                        digest = sha256.ComputeHash(Encoding.UTF8.GetBytes(testString));
                    }
                    signInfo.tsaClient.GetTimeStampToken(digest);
                    isTsaConnected = true;
                    break;
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.StackTrace);
                }
                Console.WriteLine("retry " + (retry + 1));
            }
            if (signInfo.tsaClient != null && signInfo.crlList != null && isTsaConnected)
            {
                try
                {
                    //Do signing
                    MakeSignature.SignDetached(signatureAppearance, signature, signInfo.chain, signInfo.crlList, null, signInfo.tsaClient, 0, signInfo.sigType);
                }
                catch (Exception e)
                {
                    throw new Exception("Cannot sign the PDF file.", e);
                }
            }

            return(stream.ToArray());
        }