Beispiel #1
0
        private void button_sign_Click(object sender, EventArgs e)
        {
            //определяем выбранный в выпадающем списке сертификат
            var certificate = this.SelectedCertificate;

            //если по какой-то причине сертификат не выбран
            if (certificate == null || certificate.CertificateX509 == null)
            {
                MessageBox.Show("Необходимо выбрать сертификат!");
                return;
            }

            //проверяем, что указан файл, который будем подписывать
            if (this.textBox_sign_file.Text.Trim() == "")
            {
                MessageBox.Show("Необходимо выбрать файл для подписи");
                return;
            }

            //читаем файл, который будем подписывать
            byte[] data_to_sign = File.ReadAllBytes(this.textBox_sign_file.Text);
            if (data_to_sign == null)
            {
                MessageBox.Show("Выбран не корректный файл для подписи");
                return;
            }

            //определяем параметр подписания:
            // true - значит подпись будет отделенная (в файле с подписью будет только подпись)
            // false - значит подпись будет присоединенная (в файле с подписью будет и сама подпись и сами данные, которые подписывались)
            bool detached = this.checkBox_sign_detached.Checked;

            var signer = new CertificateSigner(data_to_sign, detached);

            // подписываем файл и сохраняем подпись
            byte[] signed_data = signer.Sign(certificate);

            //сохраняем файл с подпсиью
            if (this.saveFileDialog_sign.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                File.WriteAllBytes(this.saveFileDialog_sign.FileName, signed_data);
                MessageBox.Show("Файл с подписью сохранен успешно!");
                return;
            }
        }
Beispiel #2
0
        private void button_check_Click(object sender, EventArgs e)
        {
            this.textBox_check_result.Text = "";

            //проверяем, что указан файл с подписью
            if (this.textBox_check_sign.Text.Trim() == "")
            {
                MessageBox.Show("Необходимо выбрать файл, содержащий подпись");
                return;
            }

            //читаем файл с подписью
            byte[] signature = File.ReadAllBytes(this.textBox_check_sign.Text);
            if (signature == null)
            {
                MessageBox.Show("Выбран не корректный файл с подписью");
                return;
            }

            //определяем параметр подписания:
            // true - значит подпись отделенная (в файле с подписью есть только подпись и содержимое нужно указывать отдельно)
            // false - значит подпись будет присоединенная (в файле с подписью будет и сама подпись и сами данные, которые подписывались)
            bool detached = this.checkBox_check_detached.Checked;

            byte[] original = null;

            if (detached)
            {//отсоединенная подпись

                //проверяем, что указан файл с оригинальными данными
                if (this.textBox_check_file.Text.Trim() == "")
                {
                    MessageBox.Show("Необходимо выбрать файл, содержащий оригинальные данные, которые были подписаны");
                    return;
                }

                //читаем файл с подписью
                original = File.ReadAllBytes(this.textBox_check_file.Text);
                if (original == null)
                {
                    MessageBox.Show("Выбран не корректный файл с оригинальными данными");
                    return;
                }
            }

            var signer = new CertificateSigner(signature, original);

            var verification = signer.Verify();

            if (signer.Certificate != null)
            {
                this.FillCertificatesList(signer.Certificate);

                verification.AddNewLine(2);
                verification.AddRange(_validator.Validate(signer.Certificate));
            }

            this.textBox_check_result.Text = verification.ToString();
        }