private async void  decryptToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (rab == null)
            {
                MessageBox.Show("Не выбран закрытый ключ", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }
            if (Path.GetExtension(listSelectedKey.Items[0].Tag.ToString()).CompareTo(".privateKey") != 0)
            {
                MessageBox.Show("Не тот ключ!\r\nВыберите закрытый ключ", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                return;
            }
            string folder = BrouseFolder();

            if (string.IsNullOrEmpty(folder))
            {
                return;
            }
            foreach (ListViewItem item in listFiles.SelectedItems)
            {
                if (!IsExistInDecryptItems(item))
                {
                    item.SubItems[0].Tag  = rab;
                    item.SubItems[0].Name = folder;
                    decryptingItems.Add(item);
                    ProgressBar      pb       = CreateProgressBar(item, listFiles);
                    ReachProgressBar filesBar = new ReachProgressBar(pb);
                    filesBar.Tag = pb.Name;
                    mainBar.AddProcess(filesBar);
                }
                else
                {
                    MessageBox.Show($"Файл с именем: {item.Text}\r\nуже добавлен в очередь", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                    return;
                }
            }
            if (decryptingItems.Count != listFiles.SelectedItems.Count)
            {
                return;
            }
            var progress = new Progress <ProgressInfo>();

            progress.ProgressChanged += mainBar.Apdate;
            while (decryptingItems.Count > 0)
            {
                string           decryptPath = decryptingItems[0].SubItems[0].Name + "\\" + Path.GetFileNameWithoutExtension(decryptingItems[0].Text);
                ReachProgressBar filesBar    = mainBar.Processes.OfType <ReachProgressBar>().FirstOrDefault(q => (string)q.Tag == (string)decryptingItems[0].Tag);
                if (Path.GetExtension(decryptingItems[0].Tag.ToString()).CompareTo(".encrypted") != 0)
                {
                    MessageBox.Show("Невозможно расшифровать файл " + decryptingItems[0].Text + "\n\rФайл не содержит расширение \".encrypted\"", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    listFiles.Controls.Remove(listFiles.Controls.OfType <ProgressBar>().FirstOrDefault(q => q.Name == (string)decryptingItems[0].Tag));
                    decryptingItems.Remove(decryptingItems[0]);
                    mainBar.RemoveProcess(filesBar);
                    continue;
                }
                progress.ProgressChanged += filesBar.Reach;
                try { await((RabinLib.Rabin)decryptingItems[0].SubItems[0].Tag).DecryptAsync(decryptingItems[0].Tag.ToString(), decryptPath, progress); }
                catch
                {
                    MessageBox.Show(
                        $"{decryptingItems[0].Text} Невозможно раскодировать с использованием ключа {((RabinLib.Rabin)decryptingItems[0].SubItems[0].Tag).Tag.ToString()}", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    progress.ProgressChanged -= filesBar.Reach;
                    listFiles.Controls.Remove(listFiles.Controls.OfType <ProgressBar>().FirstOrDefault(q => q.Name == (string)decryptingItems[0].Tag));
                    decryptingItems.Remove(decryptingItems[0]);
                    mainBar.RemoveProcess(filesBar);
                    continue;
                }
                progress.ProgressChanged -= filesBar.Reach;
                listFiles.Controls.Remove(listFiles.Controls.OfType <ProgressBar>().FirstOrDefault(q => q.Name == (string)decryptingItems[0].Tag));
                ListFilesRemoveItem(decryptingItems[0]);
                decryptingItems.Remove(decryptingItems[0]);
                AddFileItemToListView(decryptPath, listFiles, imageList1);
            }
            mainBar.Apdate(this, null);
            if (encryptingItems.Count == 0 && decryptingItems.Count == 0)
            {
                mainBar = new ProgressBarForManyProcesses(progressBar1, new List <ReachProgressBar>());
            }
        }
 public void AddProcess(ReachProgressBar process)
 {
     processes.Add(process);
 }
 public void RemoveProcess(ReachProgressBar process)
 {
     processes.Remove(process);
 }
Example #4
0
        private async void GenKeyButton_Click(object sender, EventArgs e)
        {
            int bitLength;

            if (mainBar.Processes.Count != 0)
            {
                DialogResult res = MessageBox.Show(
                    "Генерация ключа трудозатратный процесс\r\nРекомендуется подождать пока завершатся предыдущие процессы и сгенерировать ключ позже",
                    "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                this.Close();
                return;
            }
            if (!int.TryParse(bitLenghtTextBox.Text, out bitLength))
            {
                MessageBox.Show("Неверно задано число\r\nПовторите ввод", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                bitLenghtTextBox.Text = null;
                return;
            }
            if (bitLength < 128)
            {
                MessageBox.Show("Число слишком мало\r\nВозьмите число большее 128", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
                bitLenghtTextBox.Text = null;
                return;
            }
            if (bitLength > 4000)
            {
                DialogResult res = MessageBox.Show(
                    "Число слишком велико, генерация ключа может занять много времени\r\nРекомендуется взять число меньшее 4000\r\nХотите продолжить?",
                    "", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
                if (res == DialogResult.No)
                {
                    bitLenghtTextBox.Text = null;
                    return;
                }
            }
            RabinLib.Rabin rab = null;
            this.Visible = false;
            using (SaveFileDialog sfd = new SaveFileDialog())
            {
                sfd.InitialDirectory = baseForm.lastDirectory;
                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    Progress <ProgressInfo> progress = new Progress <ProgressInfo>();
                    ReachProgressBar        keyBar   = new ReachProgressBar(0, 0);
                    mainBar.AddProcess(keyBar);
                    progress.ProgressChanged += keyBar.Reach;
                    progress.ProgressChanged += mainBar.Apdate;
                    await Task.Run(() => { rab = new RabinLib.Rabin(bitLength, progress); });

                    rab.KeyToFile(sfd.FileName);
                    foreach (string key in Directory.GetFiles(sfd.FileName))
                    {
                        baseForm.AddFileItemToListView(key, baseForm.listKeys, baseForm.imageList1);
                    }
                    if (sfd.FileNames.Length != 0)
                    {
                        baseForm.lastDirectory = Path.GetDirectoryName(sfd.FileNames[0]);
                    }
                    mainBar.RemoveProcess(keyBar);
                }
            }
            this.Close();
        }