/**
         *      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
        }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
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);
            }
        }