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(); }
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); }
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); }