コード例 #1
0
        public static void SignPdf(string certificate, string signature)
        {
            byte[] signatureBytes   = ConvertToBytes(signature);
            byte[] certificateBytes = ConvertToBytes(certificate);

            var acsd = Encoding.Default.GetString(signatureBytes);

            var chains = GetChains();

            var datasplited = chain.Split("=");
            var a           = HttpUtility.UrlDecode(datasplited[1]);
            var b           = a.Split(";");

            Console.WriteLine(a);

            X509Certificate x509Certificate = new X509CertificateParser().ReadCertificate(certificateBytes);

            SignerIdentifier    sid                       = new SignerIdentifier(new IssuerAndSerialNumber(x509Certificate.IssuerDN, x509Certificate.SerialNumber));
            AlgorithmIdentifier digAlgorithm              = new AlgorithmIdentifier(NistObjectIdentifiers.IdSha256);
            Attributes          authenticatedAttributes   = null;
            AlgorithmIdentifier digEncryptionAlgorithm    = new AlgorithmIdentifier(Org.BouncyCastle.Asn1.Pkcs.PkcsObjectIdentifiers.Sha256WithRsaEncryption);
            Asn1OctetString     encryptedDigest           = new DerOctetString(signatureBytes);
            Attributes          unauthenticatedAttributes = null;
            SignerInfo          signerInfo                = new SignerInfo(sid, digAlgorithm, authenticatedAttributes, digEncryptionAlgorithm, encryptedDigest, unauthenticatedAttributes);
            Asn1EncodableVector digestAlgs                = new Asn1EncodableVector();

            digestAlgs.Add(signerInfo.DigestAlgorithm);
            Asn1Set             digestAlgorithms = new DerSet(digestAlgs);
            ContentInfo         contentInfo      = new ContentInfo(CmsObjectIdentifiers.Data, null);
            Asn1EncodableVector certs            = new Asn1EncodableVector();

            certs.Add(x509Certificate.CertificateStructure.ToAsn1Object());
            for (int i = 0; i < chains.Length; i++)
            {
                certs.Add(chains[i].CertificateStructure.ToAsn1Object());
            }
            Asn1Set             certificates = new DerSet(certs);
            Asn1EncodableVector signerInfs   = new Asn1EncodableVector();

            signerInfs.Add(signerInfo);
            Asn1Set    signerInfos = new DerSet(signerInfs);
            SignedData signedData  = new SignedData(digestAlgorithms, contentInfo, certificates, null, signerInfos);

            contentInfo = new ContentInfo(CmsObjectIdentifiers.SignedData, signedData);

            byte[] Signature = contentInfo.GetDerEncoded();

            using (PdfReader reader = new PdfReader(temp))
                using (PdfDocument document = new PdfDocument(reader))
                    using (FileStream fout = new FileStream(dest, FileMode.Create))
                    {
                        PdfSigner.SignDeferred(document, "Signature", fout, new ExternalPrecalculatedSignatureContainer(Signature));
                    }
        }
コード例 #2
0
        public void CreateSignature(String src, String dest, String fieldName,
                                    ICipherParameters pk, X509Certificate[] chain)
        {
            PdfReader reader = new PdfReader(src);

            using (FileStream os = new FileStream(dest, FileMode.Create))
            {
                PdfSigner signer = new PdfSigner(reader, os, new StampingProperties());

                IExternalSignatureContainer external = new MyExternalSignatureContainer(pk, chain);

                // Signs a PDF where space was already reserved. The field must cover the whole document.
                PdfSigner.SignDeferred(signer.GetDocument(), fieldName, os, external);
            }
        }
コード例 #3
0
        public static void CreateSignature(String src, String dest, String fieldName,
                                           ICipherParameters pk, X509Certificate[] chain)
        {
            PdfReader reader = new PdfReader(src);

            using (FileStream os = new FileStream(dest, FileMode.Create))
            {
                PdfSigner signer = new PdfSigner(reader, os, new StampingProperties());

                var signaturee = ConvertToBytes(signature);

                IExternalSignatureContainer external = new MyExternalSignatureContainer(signaturee, chain, digest);

                PdfSigner.SignDeferred(signer.GetDocument(), fieldName, os, external);
            }
        }
コード例 #4
0
ファイル: Program.cs プロジェクト: kdelac/TimeRedistribution
        /// <summary>
        /// Signing container with data retrived from web service
        /// </summary>
        /// <param name="tempPdf"></param>
        /// <param name="signedPdf"></param>
        /// <param name="signatureFieldName"></param>
        /// <param name="signature"></param>
        /// <param name="tbs"></param>
        public static void EmbedSignature(string tempPdf, string signedPdf, string signatureFieldName, string signature, string tbs)
        {
            //Convert given data from web service to bytes
            byte[] signedBytes = ConvertToBytes(signature);
            byte[] toBeSigned  = ConvertToBytes(tbs);

            using (PdfReader reader = new PdfReader(tempPdf))
            {
                using (FileStream os = File.OpenWrite(signedPdf))
                {
                    PdfSigner signer = new PdfSigner(reader, os, new StampingProperties());
                    IExternalSignatureContainer external = new MyExternalSignatureContainer(signedBytes, GetChains(), toBeSigned);
                    PdfSigner.SignDeferred(signer.GetDocument(), signatureFieldName, os, external);
                }
            }
        }
コード例 #5
0
        public virtual void CalcHashOnDocCreationThenDeferredSignTest01()
        {
            String input       = sourceFolder + "helloWorldDoc.pdf";
            String outFileName = destinationFolder + "calcHashOnDocCreationThenDeferredSignTest01.pdf";
            String cmpFileName = sourceFolder + "cmp_calcHashOnDocCreationThenDeferredSignTest01.pdf";
            // pre-calculate hash on creating pre-signed PDF
            String       sigFieldName  = "DeferredSignature1";
            PdfName      filter        = PdfName.Adobe_PPKLite;
            PdfName      subFilter     = PdfName.Adbe_pkcs7_detached;
            int          estimatedSize = 8192;
            PdfReader    reader        = new PdfReader(input);
            MemoryStream baos          = new MemoryStream();
            PdfSigner    signer        = new PdfSigner(reader, baos, new StampingProperties());

            signer.SetCertificationLevel(PdfSigner.CERTIFIED_NO_CHANGES_ALLOWED);
            PdfSignatureAppearance appearance = signer.GetSignatureAppearance();

            appearance.SetLayer2Text("Signature field which signing is deferred.").SetPageRect(new Rectangle(36, 600,
                                                                                                             200, 100)).SetPageNumber(1);
            signer.SetFieldName(sigFieldName);
            SignDeferredTest.DigestCalcBlankSigner external = new SignDeferredTest.DigestCalcBlankSigner(filter, subFilter
                                                                                                         );
            signer.SignExternalContainer(external, estimatedSize);
            byte[] docBytesHash   = external.GetDocBytesHash();
            byte[] preSignedBytes = baos.ToArray();
            // sign the hash
            String signCertFileName = certsSrc + "signCertRsa01.p12";

            X509Certificate[] signChain      = Pkcs12FileHelper.ReadFirstChain(signCertFileName, password);
            ICipherParameters signPrivateKey = Pkcs12FileHelper.ReadFirstKey(signCertFileName, password, password);

            byte[] cmsSignature = SignDocBytesHash(docBytesHash, signPrivateKey, signChain);
            // fill the signature to the presigned document
            SignDeferredTest.ReadySignatureSigner extSigContainer = new SignDeferredTest.ReadySignatureSigner(cmsSignature
                                                                                                              );
            PdfDocument docToSign = new PdfDocument(new PdfReader(new MemoryStream(preSignedBytes)));
            FileStream  outStream = new FileStream(outFileName, FileMode.Create);

            PdfSigner.SignDeferred(docToSign, sigFieldName, outStream, extSigContainer);
            docToSign.Close();
            outStream.Dispose();
            // validate result
            PadesSigTest.BasicCheckSignedDoc(outFileName, sigFieldName);
            NUnit.Framework.Assert.IsNull(new CompareTool().CompareVisually(outFileName, cmpFileName, destinationFolder
                                                                            , null));
        }
コード例 #6
0
        /// <summary>
        /// Opens temporary PDF and appends signature and ocsp and crl information (if available)
        /// </summary>
        /// <param name="signatureInformation">Information required for finding the temporary PDF</param>
        public void SignIntermediatePdf(SignatureInformation signatureInformation)
        {
            var document = new PdfDocument(new PdfReader(signatureInformation.PathToIntermediaryPdf));

            using var writer = new FileStream(signatureInformation.pathToSignedPdf, FileMode.Create);


            var crlBytesList  = GetCrlByteList();
            var ocspBytesList = GetOcspBytesList();


            var container = new InjectAmaSignatureContainer(signatureInformation.Signature,
                                                            _userCertificateChain,
                                                            signatureInformation.NakedHashFromIntermediaryPdf,
                                                            crlBytesList,
                                                            ocspBytesList,
                                                            _tsaClient);

            PdfSigner.SignDeferred(document, _signatureFieldname, writer, container);
        }
コード例 #7
0
        public virtual void DeferredHashCalcAndSignTest01()
        {
            String srcFileName      = sourceFolder + "templateForSignCMSDeferred.pdf";
            String outFileName      = destinationFolder + "deferredHashCalcAndSignTest01.pdf";
            String cmpFileName      = sourceFolder + "cmp_deferredHashCalcAndSignTest01.pdf";
            String signCertFileName = certsSrc + "signCertRsa01.p12";

            X509Certificate[]           signChain       = Pkcs12FileHelper.ReadFirstChain(signCertFileName, password);
            ICipherParameters           signPrivateKey  = Pkcs12FileHelper.ReadFirstKey(signCertFileName, password, password);
            IExternalSignatureContainer extSigContainer = new SignDeferredTest.CmsDeferredSigner(signPrivateKey, signChain
                                                                                                 );
            String      sigFieldName = "DeferredSignature1";
            PdfDocument docToSign    = new PdfDocument(new PdfReader(srcFileName));
            FileStream  outStream    = new FileStream(outFileName, FileMode.Create);

            PdfSigner.SignDeferred(docToSign, sigFieldName, outStream, extSigContainer);
            docToSign.Close();
            outStream.Dispose();
            // validate result
            PadesSigTest.BasicCheckSignedDoc(outFileName, sigFieldName);
            NUnit.Framework.Assert.IsNull(new CompareTool().CompareVisually(outFileName, cmpFileName, destinationFolder
                                                                            , null));
        }
コード例 #8
0
        public static byte[] SignPDFStream(MemoryStream source, string rootPath)
        {
            collection = new X509Certificate2Collection();
            collection.Import(GsConfig.GetSslCertificatePath(rootPath), GsConfig.KeyPassword,
                              X509KeyStorageFlags.DefaultKeySet);
            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol  = SecurityProtocolType.Tls12;

            //get JSON access token
            JObject access = Login(baseURL, GsConfig.ApiKey, GsConfig.ApiSecret);

            //get JSON with id/certificate/ocsp response
            JObject identity = Identity(baseURL, access);
            String  cert     = (String)identity.GetValue("signing_cert");
            String  id       = (String)identity.GetValue("id");
            String  oc1      = (String)identity.GetValue("ocsp_response");
            JObject path     = CertificatePath(baseURL, access);
            String  ca       = (String)path.GetValue("path");

            //Create Certificate chain
            X509Certificate[] chain = CreateChain(cert, ca);

            //create empty signature
            PdfReader reader = new PdfReader(source);

            byte[] fileArray = null;
            using (MemoryStream os = new MemoryStream()) {
                PdfSigner stamper = new PdfSigner(reader, os, new StampingProperties());

                PdfSignatureAppearance appearance = stamper.GetSignatureAppearance();
                appearance.SetPageRect(new Rectangle(0, 0, 0, 0));
                stamper.SetFieldName(fieldName);

                IExternalSignatureContainer external = new ExternalBlankSignatureContainer(PdfName.Adobe_PPKLite,
                                                                                           PdfName.Adbe_pkcs7_detached);

                stamper.SignExternalContainer(external, 8192);

                fileArray = os.ToArray();
            }

            using (var tempStream = new MemoryStream(fileArray)) {
                PdfReader tempReader = new PdfReader(tempStream);

                byte[]   oc2      = Convert.FromBase64String(oc1);
                OcspResp ocspResp = new OcspResp(oc2);

                IExternalSignatureContainer gsContainer = new MyExternalSignatureContainer(id, access, chain, ocspResp);
                using (MemoryStream destination = new MemoryStream()) {
                    PdfSigner signer = new PdfSigner(tempReader, destination, new StampingProperties());
                    PdfSigner.SignDeferred(signer.GetDocument(), fieldName, destination, gsContainer);

                    fileArray = destination.ToArray();
                }
            }

            using (MemoryStream LTV = new MemoryStream())
                using (var newSource = new MemoryStream(fileArray)) {
                    addLTVToStream(newSource, LTV, new OcspClientBouncyCastle(null),
                                   new CrlClientOnline(), LtvVerification.Level.OCSP_CRL,
                                   LtvVerification.Level.OCSP_CRL);

                    return(LTV.ToArray());
                }
        }