/** * This method defines the signature policy that will be used on the signature. */ private ICadesPolicyMapper getSignaturePolicy() { var policy = CadesPoliciesForGeneration.GetPkiBrazilAdrBasica(); #if DEBUG // During debug only, we return a wrapper which will overwrite the policy's default trust arbitrator // (which in this case corresponds to the ICP-Brasil roots only), with our custom trust arbitrator // which accepts test certificates (see Util.GetTrustArbitrator()). return(new CadesPolicyMapperWrapper(policy, Util.GetTrustArbitrator())); #else return(policy); #endif }
private static int RunSignAndReturnExitCode(SignOptions opts) { var certificates = WindowsCertificateStore.LoadPersonalCurrentUser().GetCertificatesWithKey().Where(c => c.Certificate.PkiBrazil.CPF != null).ToList(); var certificate = certificates[opts.Certificate]; var fileName = opts.InputFile; using var stream = File.OpenRead(fileName); var digestAlgorithm = DigestAlgorithm.SHA256; var digest = digestAlgorithm.ComputeHash(stream); var signer = new CadesSigner(); signer.SetSigningCertificate(certificate); signer.SetPolicy(CadesPoliciesForGeneration.GetPkiBrazilAdrBasica()); signer.SetEncapsulatedContent(false); signer.SetDataDigestToSign(digestAlgorithm, digest); signer.ComputeSignature(); var cades = signer.GetSignature(); File.WriteAllBytes(opts.SignedFile, cades); stream.Close(); return(0); }
private async Task <bool> sign(TaskProgressDialog progressDialog) { try { var signer = new CadesSigner(); if (CoSign) { progressDialog.Message = "Reading existing CAdES signature ..."; } else { progressDialog.Message = "Reading file ..."; } await Task.Delay(TimeSpan.FromMilliseconds(100)); if (CoSign) { var cmsBytes = await readAllBytesAsync(CmsPath, progressDialog.CancellationToken); signer.SetSignatureToCoSign(cmsBytes); } else { var fileBytes = await readAllBytesAsync(FilePath, progressDialog.CancellationToken); signer.SetDataToSign(fileBytes); } if (progressDialog.CancellationToken.IsCancellationRequested) { return(false); } progressDialog.Progress = 33; progressDialog.Message = "Signing ..."; await Task.Delay(TimeSpan.FromMilliseconds(100)); signer.SetSigningCertificate(SelectedCertificate.CertificateWithKey); signer.SetPolicy(CadesPoliciesForGeneration.GetCadesBasic(App.GetTrustArbitrator())); signer.SetEncapsulatedContent(this.EncapsulateContent); signer.ComputeSignature(); var signature = signer.GetSignature(); if (progressDialog.CancellationToken.IsCancellationRequested) { return(false); } progressDialog.Progress = 66; progressDialog.Message = "Saving signature ..."; await Task.Delay(TimeSpan.FromMilliseconds(100)); var saveFileDialog = new SaveFileDialog() { Filter = "CAdES signature files (.p7s)|*.p7s", FilterIndex = 1, FileName = CoSign ? string.Format("{0}-{1:yyyy-MM-dd-HHmmss}.p7s", Path.GetFileNameWithoutExtension(CmsPath), DateTime.Now) : FilePath + ".p7s" }; if (saveFileDialog.ShowDialog() != true) { return(false); } var outFilePath = saveFileDialog.FileName; await writeAllBytesAsync(outFilePath, signature, progressDialog.CancellationToken); if (progressDialog.CancellationToken.IsCancellationRequested) { return(false); } progressDialog.Progress = 100; progressDialog.Message = "Completed!"; return(true); } catch (ValidationException ex) { new ValidationResultsDialog("Validation failed", ex.ValidationResults).ShowDialog(); return(false); } catch (Exception ex) { logger.Error(ex, "Error while performing CAdES signature"); MessageBox.Show(ex.Message); return(false); } }