Example #1
0
 public void SignDocument([FromForm] SigningDocument file)
 {
     file.Location              = "Varaždin";
     file.destinationSave       = @"C:\Users\CSVarazdin\Documents\GitHub\TimeRedistribution\MedApp\SecretToken\";
     file.CertificatDestination = @"C:\Users\CSVarazdin\Documents\GitHub\TimeRedistribution\MedApp\SecretToken\mediion.com.p12";
     file.Password              = "******";
     _signService.SignDocument(file);
     //return Ok();
 }
Example #2
0
        public void SignDocument(SigningDocument signingDocument)
        {
            string KEYSTORE = $"{signingDocument.CertificatDestination}";

            char[] PASSWORD = $"{signingDocument.Password}".ToCharArray();

            Pkcs12Store pk12 = new Pkcs12Store(new FileStream(KEYSTORE,
                                                              FileMode.Open, FileAccess.Read), PASSWORD);
            string alias = null;

            foreach (object a in pk12.Aliases)
            {
                alias = ((string)a);
                if (pk12.IsKeyEntry(alias))
                {
                    break;
                }
            }

            ICipherParameters pk = pk12.GetKey(alias).Key;

            X509CertificateEntry[] ce = pk12.GetCertificateChain(alias);
            Org.BouncyCastle.X509.X509Certificate[] chain = new Org.BouncyCastle.X509.X509Certificate[ce.Length];
            for (int k = 0; k < ce.Length; ++k)
            {
                chain[k] = ce[k].Certificate;
            }

            var    f    = signingDocument.File.OpenReadStream();
            string DEST = $"{signingDocument.destinationSave}\\Signed{signingDocument.File.FileName}";

            PdfReader p      = new PdfReader(f);
            PdfSigner signer = new PdfSigner(p, new FileStream(DEST, FileMode.Create),
                                             new StampingProperties());

            PdfSignatureAppearance appearance = signer.GetSignatureAppearance();

            appearance.SetLocation(signingDocument.Location)
            .SetPageRect(new Rectangle(425, 0, 150, 75))
            .SetPageNumber(1);
            signer.SetFieldName("MyFieldName");

            IExternalSignature pks = new PrivateKeySignature(pk, DigestAlgorithms.SHA256);

            signer.SignDetached(pks, chain, null, null, null, 0, PdfSigner.CryptoStandard.CMS);
        }
Example #3
0
        protected virtual IEnumerable <ISigningResult> GetDocumentsAuthenticatedAttributesInternal(
            bool async,
            string[] filesIds,
            string userId,
            string userCertificateBase64,
            string location,
            string reason,
            string hashAlgorithm,
            string signatureAlgorithm,
            IDictionary <string, object> parameters = default(IDictionary <string, object>),
            int timeoutInSeconds = default(int)
            )
        {
            if (parameters == default(IDictionary <string, object>))
            {
                parameters = new Dictionary <string, object> {
                };
            }

            var results         = new List <ISigningResult>();
            var userCertificate = userCertificateBase64
                                  .ToX509Certificate2();
            var ownerIdentification = OidHelper
                                      .OwnerIdentificationWorkflow
                                      .Execute(userCertificate);

            results
            .AddRange(OnValidateUserCertificate(filesIds, userCertificate));

            if (!results.Any()) //não houve erros de certificado
            {
                var documents = GetDocuments <ISigningDocument>(filesIds, userId, parameters);

                var unauthorizedDocuments = filesIds
                                            .Where(o => !documents.Any(p => p.FileId == o));

                foreach (var fileId in unauthorizedDocuments)
                {
                    var result = new SigningResult
                    {
                        FileId    = fileId,
                        Exception = new UnauthorizedAccessException("You do not have permission to access this file")
                    };

                    var document = new SigningDocument
                    {
                        FileId     = result.FileId,
                        Parameters = parameters,
                        UserId     = userId
                    };

                    results
                    .Add(result);
                    OnDocumentError(document, parameters, result.Exception);
                }

                if (async)
                {
                    var list = new ConcurrentBag <ISigningResult>();

                    Parallel
                    .ForEach(documents, document =>
                    {
                        var result = GetDocumentAuthenticatedAttributesInternal
                                     (
                            document,
                            ownerIdentification,
                            location,
                            reason,
                            hashAlgorithm,
                            signatureAlgorithm,
                            userCertificate,
                            parameters,
                            timeoutInSeconds
                                     );

                        list
                        .Add(result);
                    });

                    results
                    .AddRange(list);
                }
                else
                {
                    foreach (var document in documents)
                    {
                        var result = GetDocumentAuthenticatedAttributesInternal
                                     (
                            document,
                            ownerIdentification,
                            location,
                            reason,
                            hashAlgorithm,
                            signatureAlgorithm,
                            userCertificate,
                            parameters,
                            timeoutInSeconds
                                     );

                        results
                        .Add(result);
                    }
                }
            }

            return(results);
        }